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
24
25
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
48
49 private Map springConfig;
50
51
52
53
54
55
56 public MyEclipseSpringBeansWriter( Map springConfig )
57 {
58 this.springConfig = springConfig;
59 }
60
61
62
63
64
65
66 public void write()
67 throws MojoExecutionException
68 {
69 FileWriter springFileWriter;
70 try
71 {
72 springFileWriter =
73 new FileWriter( new File( config.getEclipseProjectDirectory(), MYECLIPSE_SPRING_CONFIGURATION_FILENAME ) );
74 }
75 catch ( IOException ex )
76 {
77 throw new MojoExecutionException( Messages.getString( "EclipsePlugin.erroropeningfile" ), ex );
78 }
79
80 XMLWriter writer = new PrettyPrintXMLWriter( springFileWriter, "UTF-8", null );
81
82 writer.startElement( MYECLIPSE_SPRING_BEANS_PROJECT_DESCRIPTION );
83
84 writer.startElement( MYECLIPSE_SPRING_CONFIG_EXTENSIONS );
85 writer.startElement( MYECLIPSE_SPRING_CONFIG_EXTENSION );
86 writer.writeText( "xml" );
87 writer.endElement();
88 writer.endElement();
89
90
91 writer.startElement( MYECLIPSE_SPRING_CONFIGS );
92
93
94
95 File basedir = config.getEclipseProjectDirectory();
96 Iterator onConfigFiles =
97 getConfigurationFilesList( new File( basedir, (String) springConfig.get( "basedir" ) ),
98 (String) springConfig.get( "file-pattern" ) ).iterator();
99
100 while ( onConfigFiles.hasNext() )
101 {
102 String onConfigFileName = (String) onConfigFiles.next();
103 File onConfigFile = new File( onConfigFileName );
104 String relativeFileName = IdeUtils.toRelativeAndFixSeparator( basedir, onConfigFile, false );
105
106 writer.startElement( MYECLIPSE_SPRING_CONFIG );
107 writer.writeText( relativeFileName );
108 writer.endElement();
109 }
110 writer.endElement();
111
112
113 writer.startElement( MYECLIPSE_SPRING_CONFIGSETS );
114 writer.endElement();
115
116
117 writer.startElement( MYECLIPSE_SPRING_VERSION );
118 writer.writeText( (String) springConfig.get( "version" ) );
119 writer.endElement();
120
121 writer.endElement();
122
123 IOUtil.close( springFileWriter );
124 }
125
126
127
128
129
130
131
132
133
134 private Collection getConfigurationFilesList( File basedir, String pattern )
135 {
136 ArrayList configFiles = new ArrayList();
137
138 try
139 {
140 if ( basedir.exists() )
141 {
142 log.debug( "Scanning " + basedir + " for spring definition files" );
143 File[] subdirs = basedir.listFiles( new FileFilter()
144 {
145 public boolean accept( File pathname )
146 {
147 return pathname.isDirectory();
148 }
149 } );
150
151 if ( subdirs != null )
152 {
153 for ( int i = 0; i < subdirs.length; i++ )
154 {
155 configFiles.addAll( getConfigurationFilesList( subdirs[i], pattern ) );
156 }
157 }
158
159 configFiles.addAll( FileUtils.getFileNames( basedir, pattern, null, true ) );
160 }
161 else
162 {
163
164
165 log.warn( Messages.getString( "MyEclipseSpringBeansWriter.baseDirDoesNotExist",
166 new Object[] { basedir } ) );
167 }
168 }
169 catch ( IOException ioe )
170 {
171 log.error( "Error while retrieving Spring configuration files. Returning list in current state" );
172 }
173
174 Collections.sort( configFiles );
175 return configFiles;
176 }
177 }