View Javadoc

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.Iterator;
10  import java.util.Map;
11  
12  import org.apache.maven.plugin.MojoExecutionException;
13  import org.apache.maven.plugin.eclipse.Messages;
14  import org.apache.maven.plugin.eclipse.writers.AbstractEclipseWriter;
15  import org.codehaus.plexus.util.FileUtils;
16  import org.codehaus.plexus.util.IOUtil;
17  import org.codehaus.plexus.util.StringUtils;
18  import org.codehaus.plexus.util.xml.PrettyPrintXMLWriter;
19  import org.codehaus.plexus.util.xml.XMLWriter;
20  
21  /**
22   * MyEclipse .springBeans configuration file writer
23   * 
24   * @author Olivier Jacob
25   */
26  public class MyEclipseSpringBeansWriter
27      extends AbstractEclipseWriter
28  {
29      private static final String MYECLIPSE_SPRING_CONFIGURATION_FILENAME = ".springBeans";
30  
31      private static final String MYECLIPSE_SPRING_BEANS_PROJECT_DESCRIPTION = "beansProjectDescription";
32  
33      private static final String MYECLIPSE_SPRING_CONFIG_EXTENSIONS = "configExtensions";
34  
35      private static final String MYECLIPSE_SPRING_CONFIG_EXTENSION = "configExtension";
36  
37      private static final String MYECLIPSE_SPRING_CONFIGS = "configs";
38  
39      private static final String MYECLIPSE_SPRING_CONFIG = "config";
40  
41      private static final String MYECLIPSE_SPRING_CONFIGSETS = "configSets";
42  
43      private static final String MYECLIPSE_SPRING_VERSION = "springVersion";
44  
45      /**
46       * Spring configuration filenames (injected by the plugin)
47       */
48      private Map springConfig;
49  
50      /**
51       * Allow injection of Spring configuration filenames through constructor
52       * 
53       * @param springConfig a map holding Spring configuration properties
54       */
55      public MyEclipseSpringBeansWriter( Map springConfig )
56      {
57          this.springConfig = springConfig;
58      }
59  
60      /**
61       * Write MyEclipse .springBeans configuration file
62       * 
63       * @throws MojoExecutionException
64       */
65      public void write()
66          throws MojoExecutionException
67      {
68          FileWriter w;
69          try
70          {
71              w =
72                  new FileWriter( new File( config.getEclipseProjectDirectory(), MYECLIPSE_SPRING_CONFIGURATION_FILENAME ) );
73          }
74          catch ( IOException ex )
75          {
76              throw new MojoExecutionException( Messages.getString( "EclipsePlugin.erroropeningfile" ), ex ); //$NON-NLS-1$
77          }
78  
79          XMLWriter writer = new PrettyPrintXMLWriter( w, "UTF-8", null );
80  
81          writer.startElement( MYECLIPSE_SPRING_BEANS_PROJECT_DESCRIPTION );
82          // Configuration extension
83          writer.startElement( MYECLIPSE_SPRING_CONFIG_EXTENSIONS );
84          writer.startElement( MYECLIPSE_SPRING_CONFIG_EXTENSION );
85          writer.writeText( "xml" );
86          writer.endElement();
87          writer.endElement();
88  
89          // Configuration files
90          writer.startElement( MYECLIPSE_SPRING_CONFIGS );
91  
92          Iterator onConfigFiles =
93              getConfigurationFilesList( (String) springConfig.get( "basedir" ),
94                                         (String) springConfig.get( "file-pattern" ) ).iterator();
95          while ( onConfigFiles.hasNext() )
96          {
97              writer.startElement( MYECLIPSE_SPRING_CONFIG );
98              writer.writeText( StringUtils.replace( (String) onConfigFiles.next(), "\\", "/" ) );
99              writer.endElement();
100         }
101         writer.endElement();
102 
103         // Configuration sets
104         writer.startElement( MYECLIPSE_SPRING_CONFIGSETS );
105         writer.endElement();
106 
107         // Spring version
108         writer.startElement( MYECLIPSE_SPRING_VERSION );
109         writer.writeText( (String) springConfig.get( "version" ) );
110         writer.endElement();
111 
112         writer.endElement();
113 
114         IOUtil.close( w );
115     }
116 
117     /**
118      * Retrieve the list of Spring configuration files recursively from the <code>basedir</code> directory,
119      * considering only filenames matching the <code>pattern</code> given
120      * 
121      * @param basedir the path to the base directory to search in
122      * @param pattern file include pattern
123      * @return the list of filenames matching the given pattern
124      */
125     private Collection getConfigurationFilesList( String basedir, String pattern )
126     {
127         Collection configFiles = new ArrayList();
128 
129         try
130         {
131             File directory = new File( basedir );
132 
133             File[] subdirs = directory.listFiles( new FileFilter()
134             {
135                 public boolean accept( File pathname )
136                 {
137                     return pathname.isDirectory();
138                 }
139             } );
140 
141             for ( int i = 0; i < subdirs.length; i++ )
142             {
143                 configFiles.addAll( getConfigurationFilesList( subdirs[i].getPath(), pattern ) );
144             }
145 
146             configFiles.addAll( FileUtils.getFileNames( directory, pattern, null, true ) );
147         }
148         catch ( IOException ioe )
149         {
150             log.error( "Error while retrieving Spring configuration files. Returning list in current state" );
151         }
152 
153         return configFiles;
154     }
155 }