Coverage Report - org.apache.maven.plugin.eclipse.EclipseCleanMojo
 
Classes in this File Line Coverage Branch Coverage Complexity
EclipseCleanMojo
0%
0/38
0%
0/20
2.714
 
 1  
 /*
 2  
  * Licensed to the Apache Software Foundation (ASF) under one
 3  
  * or more contributor license agreements.  See the NOTICE file
 4  
  * distributed with this work for additional information
 5  
  * regarding copyright ownership.  The ASF licenses this file
 6  
  * to you under the Apache License, Version 2.0 (the
 7  
  * "License"); you may not use this file except in compliance
 8  
  * with the License.  You may obtain a copy of the License at
 9  
  *
 10  
  *   http://www.apache.org/licenses/LICENSE-2.0
 11  
  *
 12  
  * Unless required by applicable law or agreed to in writing,
 13  
  * software distributed under the License is distributed on an
 14  
  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 15  
  * KIND, either express or implied.  See the License for the
 16  
  * specific language governing permissions and limitations
 17  
  * under the License.
 18  
  */
 19  
 package org.apache.maven.plugin.eclipse;
 20  
 
 21  
 import java.io.File;
 22  
 import java.io.IOException;
 23  
 
 24  
 import org.apache.maven.plugin.AbstractMojo;
 25  
 import org.apache.maven.plugin.MojoExecutionException;
 26  
 import org.codehaus.plexus.util.FileUtils;
 27  
 
 28  
 /**
 29  
  * Deletes the .project, .classpath, .wtpmodules files and .settings folder used by Eclipse.
 30  
  * 
 31  
  * @goal clean
 32  
  */
 33  0
 public class EclipseCleanMojo
 34  
     extends AbstractMojo
 35  
 {
 36  
 
 37  
     /**
 38  
      * Definition file for Eclipse Web Tools project.
 39  
      */
 40  
     private static final String FILE_DOT_WTPMODULES = ".wtpmodules"; //$NON-NLS-1$
 41  
 
 42  
     /**
 43  
      * Classpath definition file for an Eclipse Java project.
 44  
      */
 45  
     private static final String FILE_DOT_CLASSPATH = ".classpath"; //$NON-NLS-1$
 46  
 
 47  
     /**
 48  
      * Project definition file for an Eclipse Project.
 49  
      */
 50  
     private static final String FILE_DOT_PROJECT = ".project"; //$NON-NLS-1$
 51  
 
 52  
     /**
 53  
      * Web Project definition file for Eclipse Web Tools Project (Release 1.0x).
 54  
      */
 55  
     private static final String DIR_DOT_SETTINGS = ".settings"; //$NON-NLS-1$
 56  
 
 57  
     /**
 58  
      * File name where the WTP component settings will be stored - WTP 1.0 name.
 59  
      */
 60  
     private static final String FILE_DOT_COMPONENT = ".settings/.component"; //$NON-NLS-1$
 61  
 
 62  
     /**
 63  
      * File name where the WTP component settings will be stored - WTP 1.5 name.
 64  
      */
 65  
     private static final String FILE_DOT_COMPONENT_15 = ".settings/org.eclipse.wst.common.component"; //$NON-NLS-1$
 66  
 
 67  
     /**
 68  
      * File name where Eclipse Project's Facet configuration will be stored.
 69  
      */
 70  
     private static final String FILE_FACET_CORE_XML = ".settings/org.eclipse.wst.common.project.facet.core.xml"; //$NON-NLS-1$
 71  
 
 72  
     /**
 73  
      * General project preferences.
 74  
      */
 75  
     private static final String FILE_ECLIPSE_JDT_CORE_PREFS = ".settings/org.eclipse.jdt.core.prefs"; //$NON-NLS-1$
 76  
 
 77  
     /**
 78  
      * Packaging for the current project.
 79  
      * 
 80  
      * @parameter expression="${project.packaging}"
 81  
      */
 82  
     private String packaging;
 83  
 
 84  
     /**
 85  
      * The root directory of the project
 86  
      * 
 87  
      * @parameter expression="${basedir}"
 88  
      */
 89  
     private File basedir;
 90  
 
 91  
     /**
 92  
      * Skip the operation when true.
 93  
      * 
 94  
      * @parameter expression="${eclipse.skip}" default-value="false"
 95  
      */
 96  
     private boolean skip;
 97  
 
 98  
     /**
 99  
      * additional generic configuration files for eclipse
 100  
      * 
 101  
      * @parameter
 102  
      */
 103  
     private EclipseConfigFile[] additionalConfig;
 104  
 
 105  
     /**
 106  
      * @see org.apache.maven.plugin.AbstractMojo#execute()
 107  
      */
 108  
     public void execute()
 109  
         throws MojoExecutionException
 110  
     {
 111  0
         if ( skip )
 112  
         {
 113  0
             return;
 114  
         }
 115  
 
 116  0
         if ( Constants.PROJECT_PACKAGING_POM.equals( this.packaging ) )
 117  
         {
 118  0
             return;
 119  
         }
 120  
 
 121  0
         delete( new File( basedir, FILE_DOT_PROJECT ) );
 122  0
         delete( new File( basedir, FILE_DOT_CLASSPATH ) );
 123  0
         delete( new File( basedir, FILE_DOT_WTPMODULES ) );
 124  
 
 125  0
         delete( new File( basedir, FILE_DOT_COMPONENT ) );
 126  0
         delete( new File( basedir, FILE_DOT_COMPONENT_15 ) );
 127  0
         delete( new File( basedir, FILE_FACET_CORE_XML ) );
 128  0
         delete( new File( basedir, FILE_ECLIPSE_JDT_CORE_PREFS ) );
 129  
 
 130  0
         File settingsDir = new File( basedir, DIR_DOT_SETTINGS );
 131  0
         if ( settingsDir.exists() && settingsDir.isDirectory() && settingsDir.list().length == 0 )
 132  
         {
 133  0
             delete( settingsDir );
 134  
         }
 135  
 
 136  0
         if ( additionalConfig != null )
 137  
         {
 138  0
             for ( int i = 0; i < additionalConfig.length; i++ )
 139  
             {
 140  0
                 delete( new File( basedir, additionalConfig[i].getName() ) );
 141  
             }
 142  
         }
 143  
 
 144  0
         cleanExtras();
 145  0
     }
 146  
 
 147  
     protected void cleanExtras()
 148  
         throws MojoExecutionException
 149  
     {
 150  
         // extension point.
 151  0
     }
 152  
 
 153  
     /**
 154  
      * Delete a file, handling log messages and exceptions
 155  
      * 
 156  
      * @param f File to be deleted
 157  
      * @throws MojoExecutionException only if a file exists and can't be deleted
 158  
      */
 159  
     protected void delete( File f )
 160  
         throws MojoExecutionException
 161  
     {
 162  0
         if ( f.isDirectory() )
 163  
         {
 164  0
             getLog().info( Messages.getString( "EclipseCleanMojo.deletingDirectory", f.getName() ) ); //$NON-NLS-1$
 165  
         }
 166  
         else
 167  
         {
 168  0
             getLog().info( Messages.getString( "EclipseCleanMojo.deletingFile", f.getName() ) ); //$NON-NLS-1$
 169  
         }
 170  
 
 171  0
         if ( f.exists() )
 172  
         {
 173  0
             if ( !f.delete() )
 174  
             {
 175  
                 try
 176  
                 {
 177  0
                     FileUtils.forceDelete( f );
 178  
                 }
 179  0
                 catch ( IOException e )
 180  
                 {
 181  0
                     throw new MojoExecutionException( Messages.getString( "EclipseCleanMojo.failedtodelete", //$NON-NLS-1$
 182  
                                                                           new Object[] { f.getName(),
 183  
                                                                               f.getAbsolutePath() } ) );
 184  0
                 }
 185  
             }
 186  
         }
 187  
         else
 188  
         {
 189  0
             getLog().debug( Messages.getString( "EclipseCleanMojo.nofilefound", f.getName() ) ); //$NON-NLS-1$
 190  
         }
 191  0
     }
 192  
 
 193  
     /**
 194  
      * Getter for <code>basedir</code>.
 195  
      * 
 196  
      * @return Returns the basedir.
 197  
      */
 198  
     public File getBasedir()
 199  
     {
 200  0
         return this.basedir;
 201  
     }
 202  
 
 203  
     /**
 204  
      * Setter for <code>basedir</code>.
 205  
      * 
 206  
      * @param basedir The basedir to set.
 207  
      */
 208  
     public void setBasedir( File basedir )
 209  
     {
 210  0
         this.basedir = basedir;
 211  0
     }
 212  
 
 213  
     /**
 214  
      * @return the packaging
 215  
      */
 216  
     public String getPackaging()
 217  
     {
 218  0
         return this.packaging;
 219  
     }
 220  
 
 221  
     /**
 222  
      * @param packaging the packaging to set
 223  
      */
 224  
     public void setPackaging( String packaging )
 225  
     {
 226  0
         this.packaging = packaging;
 227  0
     }
 228  
 
 229  
 }