Coverage Report - org.apache.maven.plugin.eclipse.writers.myeclipse.MyEclipseSpringBeansWriter
 
Classes in this File Line Coverage Branch Coverage Complexity
MyEclipseSpringBeansWriter
0%
0/49
0%
0/8
2.75
MyEclipseSpringBeansWriter$1
0%
0/2
N/A
2.75
 
 1  
 package org.apache.maven.plugin.eclipse.writers.myeclipse;
 2  
 
 3  
 import java.io.File;
 4  
 import java.io.FileFilter;
 5  
 import java.io.FileWriter;
 6  
 import java.io.IOException;
 7  
 import java.util.ArrayList;
 8  
 import java.util.Collection;
 9  
 import java.util.Collections;
 10  
 import java.util.Iterator;
 11  
 import java.util.Map;
 12  
 
 13  
 import org.apache.maven.plugin.MojoExecutionException;
 14  
 import org.apache.maven.plugin.eclipse.Messages;
 15  
 import org.apache.maven.plugin.eclipse.writers.AbstractEclipseWriter;
 16  
 import org.apache.maven.plugin.ide.IdeUtils;
 17  
 import org.codehaus.plexus.util.FileUtils;
 18  
 import org.codehaus.plexus.util.IOUtil;
 19  
 import org.codehaus.plexus.util.xml.PrettyPrintXMLWriter;
 20  
 import org.codehaus.plexus.util.xml.XMLWriter;
 21  
 
 22  
 /**
 23  
  * MyEclipse .springBeans configuration file writer
 24  
  * 
 25  
  * @author Olivier Jacob
 26  
  */
 27  
 public class MyEclipseSpringBeansWriter
 28  
     extends AbstractEclipseWriter
 29  
 {
 30  
     private static final String MYECLIPSE_SPRING_CONFIGURATION_FILENAME = ".springBeans";
 31  
 
 32  
     private static final String MYECLIPSE_SPRING_BEANS_PROJECT_DESCRIPTION = "beansProjectDescription";
 33  
 
 34  
     private static final String MYECLIPSE_SPRING_CONFIG_EXTENSIONS = "configExtensions";
 35  
 
 36  
     private static final String MYECLIPSE_SPRING_CONFIG_EXTENSION = "configExtension";
 37  
 
 38  
     private static final String MYECLIPSE_SPRING_CONFIGS = "configs";
 39  
 
 40  
     private static final String MYECLIPSE_SPRING_CONFIG = "config";
 41  
 
 42  
     private static final String MYECLIPSE_SPRING_CONFIGSETS = "configSets";
 43  
 
 44  
     private static final String MYECLIPSE_SPRING_VERSION = "springVersion";
 45  
 
 46  
     /**
 47  
      * Spring configuration filenames (injected by the plugin)
 48  
      */
 49  
     private Map springConfig;
 50  
 
 51  
     /**
 52  
      * Allow injection of Spring configuration filenames through constructor
 53  
      * 
 54  
      * @param springConfig a map holding Spring configuration properties
 55  
      */
 56  
     public MyEclipseSpringBeansWriter( Map springConfig )
 57  0
     {
 58  0
         this.springConfig = springConfig;
 59  0
     }
 60  
 
 61  
     /**
 62  
      * Write MyEclipse .springBeans configuration file
 63  
      * 
 64  
      * @throws MojoExecutionException
 65  
      */
 66  
     public void write()
 67  
         throws MojoExecutionException
 68  
     {
 69  
         FileWriter springFileWriter;
 70  
         try
 71  
         {
 72  0
             springFileWriter =
 73  
                 new FileWriter( new File( config.getEclipseProjectDirectory(), MYECLIPSE_SPRING_CONFIGURATION_FILENAME ) );
 74  
         }
 75  0
         catch ( IOException ex )
 76  
         {
 77  0
             throw new MojoExecutionException( Messages.getString( "EclipsePlugin.erroropeningfile" ), ex ); //$NON-NLS-1$
 78  0
         }
 79  
 
 80  0
         XMLWriter writer = new PrettyPrintXMLWriter( springFileWriter, "UTF-8", null );
 81  
 
 82  0
         writer.startElement( MYECLIPSE_SPRING_BEANS_PROJECT_DESCRIPTION );
 83  
         // Configuration extension
 84  0
         writer.startElement( MYECLIPSE_SPRING_CONFIG_EXTENSIONS );
 85  0
         writer.startElement( MYECLIPSE_SPRING_CONFIG_EXTENSION );
 86  0
         writer.writeText( "xml" );
 87  0
         writer.endElement();
 88  0
         writer.endElement();
 89  
 
 90  
         // Configuration files
 91  0
         writer.startElement( MYECLIPSE_SPRING_CONFIGS );
 92  
 
 93  
         // maven's cwd stays at the top of hierarchical projects so we
 94  
         // do this with full path so it works as we descend through various modules (projects)
 95  0
         File basedir = config.getEclipseProjectDirectory();
 96  0
         Iterator onConfigFiles =
 97  
             getConfigurationFilesList( new File( basedir, (String) springConfig.get( "basedir" ) ),
 98  
                                        (String) springConfig.get( "file-pattern" ) ).iterator();
 99  
 
 100  0
         while ( onConfigFiles.hasNext() )
 101  
         {
 102  0
             String onConfigFileName = (String) onConfigFiles.next();
 103  0
             File onConfigFile = new File( onConfigFileName );
 104  0
             String relativeFileName = IdeUtils.toRelativeAndFixSeparator( basedir, onConfigFile, false );
 105  
 
 106  0
             writer.startElement( MYECLIPSE_SPRING_CONFIG );
 107  0
             writer.writeText( relativeFileName );
 108  0
             writer.endElement();
 109  0
         }
 110  0
         writer.endElement();
 111  
 
 112  
         // Configuration sets
 113  0
         writer.startElement( MYECLIPSE_SPRING_CONFIGSETS );
 114  0
         writer.endElement();
 115  
 
 116  
         // Spring version
 117  0
         writer.startElement( MYECLIPSE_SPRING_VERSION );
 118  0
         writer.writeText( (String) springConfig.get( "version" ) );
 119  0
         writer.endElement();
 120  
 
 121  0
         writer.endElement();
 122  
 
 123  0
         IOUtil.close( springFileWriter );
 124  0
     }
 125  
 
 126  
     /**
 127  
      * Retrieve the list of Spring configuration files recursively from the <code>basedir</code> directory, considering
 128  
      * only filenames matching the <code>pattern</code> given
 129  
      * 
 130  
      * @param basedir the path to the base directory to search in
 131  
      * @param pattern file include pattern
 132  
      * @return the list of filenames matching the given pattern
 133  
      */
 134  
     private Collection getConfigurationFilesList( File basedir, String pattern )
 135  
     {
 136  0
         ArrayList configFiles = new ArrayList();
 137  
 
 138  
         try
 139  
         {
 140  0
             if ( basedir.exists() )
 141  
             {
 142  0
                 log.debug( "Scanning " + basedir + " for spring definition files" );
 143  0
                 File[] subdirs = basedir.listFiles( new FileFilter()
 144  0
                 {
 145  
                     public boolean accept( File pathname )
 146  
                     {
 147  0
                         return pathname.isDirectory();
 148  
                     }
 149  
                 } );
 150  
 
 151  0
                 if ( subdirs != null )
 152  
                 {
 153  0
                     for ( int i = 0; i < subdirs.length; i++ )
 154  
                     {
 155  0
                         configFiles.addAll( getConfigurationFilesList( subdirs[i], pattern ) );
 156  
                     }
 157  
                 }
 158  
 
 159  0
                 configFiles.addAll( FileUtils.getFileNames( basedir, pattern, null, true ) );
 160  0
             }
 161  
             else
 162  
             {
 163  
                 // This isn't fatal because sometimes we run this in a nested set of
 164  
                 // projects where some of the projects may not have spring configuration
 165  0
                 log.warn( Messages.getString( "MyEclipseSpringBeansWriter.baseDirDoesNotExist",
 166  
                                               new Object[] { basedir } ) );
 167  
             }
 168  
         }
 169  0
         catch ( IOException ioe )
 170  
         {
 171  0
             log.error( "Error while retrieving Spring configuration files. Returning list in current state" );
 172  0
         }
 173  
         // Sort them to have something constant
 174  0
         Collections.sort( configFiles );
 175  0
         return configFiles;
 176  
     }
 177  
 }