1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.plugin.eclipse;
20
21 import java.io.File;
22 import java.util.ArrayList;
23 import java.util.Iterator;
24
25 import org.apache.maven.artifact.Artifact;
26 import org.apache.maven.model.Resource;
27 import org.apache.maven.plugin.MojoExecutionException;
28 import org.apache.maven.plugin.eclipse.writers.EclipseWriterConfig;
29 import org.apache.maven.plugin.eclipse.writers.rad.RadApplicationXMLWriter;
30 import org.apache.maven.plugin.eclipse.writers.rad.RadEjbClasspathWriter;
31 import org.apache.maven.plugin.eclipse.writers.rad.RadJ2EEWriter;
32 import org.apache.maven.plugin.eclipse.writers.rad.RadLibCopier;
33 import org.apache.maven.plugin.eclipse.writers.rad.RadManifestWriter;
34 import org.apache.maven.plugin.eclipse.writers.rad.RadWebSettingsWriter;
35 import org.apache.maven.plugin.eclipse.writers.rad.RadWebsiteConfigWriter;
36 import org.apache.maven.plugin.ide.IdeDependency;
37 import org.apache.maven.plugin.ide.IdeUtils;
38 import org.apache.maven.plugin.ide.JeeUtils;
39 import org.apache.maven.project.MavenProject;
40
41
42
43
44
45
46
47
48
49 public class RadPlugin
50 extends EclipsePlugin
51 {
52
53 private static final String COM_IBM_ETOOLS_J2EE_UI_LIB_DIR_BUILDER = "com.ibm.etools.j2ee.ui.LibDirBuilder";
54
55 private static final String COM_IBM_ETOOLS_SITEEDIT_SITE_NAV_BUILDER = "com.ibm.etools.siteedit.SiteNavBuilder";
56
57 private static final String COM_IBM_ETOOLS_SITEEDIT_SITE_UPDATE_BUILDER =
58 "com.ibm.etools.siteedit.SiteUpdateBuilder";
59
60 private static final String COM_IBM_ETOOLS_SITEEDIT_WEB_SITE_NATURE = "com.ibm.etools.siteedit.WebSiteNature";
61
62 private static final String COM_IBM_ETOOLS_VALIDATION_VALIDATIONBUILDER =
63 "com.ibm.etools.validation.validationbuilder";
64
65 private static final String COM_IBM_ETOOLS_WEBPAGE_TEMPLATE_TEMPLATEBUILDER =
66 "com.ibm.etools.webpage.template.templatebuilder";
67
68 private static final String COM_IBM_ETOOLS_WEBPAGE_TEMPLATE_TEMPLATENATURE =
69 "com.ibm.etools.webpage.template.templatenature";
70
71 private static final String COM_IBM_ETOOLS_WEBTOOLS_ADDITIONS_JSPCOMPILATIONBUILDER =
72 "com.ibm.etools.webtools.additions.jspcompilationbuilder";
73
74 private static final String COM_IBM_ETOOLS_WEBTOOLS_ADDITIONS_LINKSBUILDER =
75 "com.ibm.etools.webtools.additions.linksbuilder";
76
77 private static final String COM_IBM_SSE_MODEL_STRUCTUREDBUILDER = "com.ibm.sse.model.structuredbuilder";
78
79 private static final String COM_IBM_WTP_EJB_EJBNATURE = "com.ibm.wtp.ejb.EJBNature";
80
81 private static final String COM_IBM_WTP_J2EE_EARNATURE = "com.ibm.wtp.j2ee.EARNature";
82
83 private static final String COM_IBM_WTP_J2EE_LIB_COPY_BUILDER = "com.ibm.wtp.j2ee.LibCopyBuilder";
84
85 private static final String COM_IBM_WTP_MIGRATION_MIGRATION_BUILDER = "com.ibm.wtp.migration.MigrationBuilder";
86
87 private static final String COM_IBM_WTP_WEB_WEB_NATURE = "com.ibm.wtp.web.WebNature";
88
89 private static final String NO_GENERATED_RESOURCE_DIRNAME = "none";
90
91 private static final String ORG_ECLIPSE_JDT_CORE_JAVABUILDER = "org.eclipse.jdt.core.javabuilder";
92
93 private static final String ORG_ECLIPSE_JDT_CORE_JAVANATURE = "org.eclipse.jdt.core.javanature";
94
95
96
97
98
99
100
101 private String warContextRoot;
102
103
104
105
106
107
108
109 private String generatedResourceDirName;
110
111
112
113
114 public String getWarContextRoot()
115 {
116 return warContextRoot;
117 }
118
119
120
121
122 public void setWarContextRoot( String warContextRoot )
123 {
124 this.warContextRoot = warContextRoot;
125 }
126
127
128
129
130
131
132
133
134 protected void writeExtraConfiguration( EclipseWriterConfig config )
135 throws MojoExecutionException
136 {
137 super.writeExtraConfiguration( config );
138
139 new RadJ2EEWriter().init( getLog(), config ).write();
140
141 new RadWebSettingsWriter( this.warContextRoot ).init( getLog(), config ).write();
142
143 new RadWebsiteConfigWriter().init( getLog(), config ).write();
144
145 new RadApplicationXMLWriter().init( getLog(), config ).write();
146
147 new RadLibCopier().init( getLog(), config ).write();
148
149 new RadEjbClasspathWriter().init( getLog(), config ).write();
150 }
151
152
153
154
155
156
157
158 private void addManifestResource( EclipseWriterConfig config )
159 throws MojoExecutionException
160 {
161 if ( isJavaProject() )
162 {
163
164
165 new RadManifestWriter().init( getLog(), config ).write();
166 }
167
168 if ( isJavaProject() && !Constants.PROJECT_PACKAGING_EAR.equals( packaging ) &&
169 !Constants.PROJECT_PACKAGING_WAR.equals( packaging ) &&
170 !Constants.PROJECT_PACKAGING_EJB.equals( packaging ) &&
171 !NO_GENERATED_RESOURCE_DIRNAME.equals( this.generatedResourceDirName ) )
172 {
173
174 String generatedResourceDir =
175 this.project.getBasedir().getAbsolutePath() + File.separatorChar + this.generatedResourceDirName;
176
177 String metainfDir = generatedResourceDir + File.separatorChar + "META-INF";
178
179 new File( metainfDir ).mkdirs();
180
181 final Resource resource = new Resource();
182
183 getLog().debug( "Adding " + this.generatedResourceDirName + " to resources" );
184
185 resource.setDirectory( generatedResourceDir );
186
187 this.executedProject.addResource( resource );
188 }
189
190 if ( Constants.PROJECT_PACKAGING_WAR.equals( packaging ) )
191 {
192 new File( getWebContentBaseDirectory( config ) + File.separatorChar + "META-INF" ).mkdirs();
193 }
194 }
195
196
197
198
199
200
201
202
203
204 private static String getWebContentBaseDirectory( EclipseWriterConfig config )
205 throws MojoExecutionException
206 {
207
208 File warSourceDirectory =
209 new File( IdeUtils.getPluginSetting( config.getProject(), JeeUtils.ARTIFACT_MAVEN_WAR_PLUGIN,
210 "warSourceDirectory", "src/main/webapp" ) );
211
212 String webContentDir =
213 IdeUtils.toRelativeAndFixSeparator( config.getEclipseProjectDirectory(), warSourceDirectory, false );
214
215
216 String result = config.getProject().getBasedir().getAbsolutePath() + File.separatorChar + webContentDir;
217
218 return result;
219 }
220
221
222
223
224
225
226 protected void fillDefaultBuilders( String packaging )
227 {
228 super.fillDefaultBuilders( packaging );
229
230 ArrayList buildcommands = new ArrayList();
231 if ( Constants.PROJECT_PACKAGING_EAR.equals( packaging ) )
232 {
233 buildcommands.add( COM_IBM_ETOOLS_VALIDATION_VALIDATIONBUILDER );
234 buildcommands.add( COM_IBM_SSE_MODEL_STRUCTUREDBUILDER );
235 }
236 else if ( Constants.PROJECT_PACKAGING_WAR.equals( packaging ) )
237 {
238 buildcommands.add( COM_IBM_WTP_MIGRATION_MIGRATION_BUILDER );
239 buildcommands.add( ORG_ECLIPSE_JDT_CORE_JAVABUILDER );
240 buildcommands.add( COM_IBM_ETOOLS_J2EE_UI_LIB_DIR_BUILDER );
241 buildcommands.add( COM_IBM_ETOOLS_WEBTOOLS_ADDITIONS_LINKSBUILDER );
242 buildcommands.add( COM_IBM_ETOOLS_WEBPAGE_TEMPLATE_TEMPLATEBUILDER );
243 buildcommands.add( COM_IBM_ETOOLS_SITEEDIT_SITE_NAV_BUILDER );
244 buildcommands.add( COM_IBM_ETOOLS_SITEEDIT_SITE_UPDATE_BUILDER );
245 buildcommands.add( COM_IBM_ETOOLS_VALIDATION_VALIDATIONBUILDER );
246 buildcommands.add( COM_IBM_WTP_J2EE_LIB_COPY_BUILDER );
247 buildcommands.add( COM_IBM_ETOOLS_WEBTOOLS_ADDITIONS_JSPCOMPILATIONBUILDER );
248 buildcommands.add( COM_IBM_SSE_MODEL_STRUCTUREDBUILDER );
249 }
250 else if ( Constants.PROJECT_PACKAGING_EJB.equals( packaging ) )
251 {
252 buildcommands.add( ORG_ECLIPSE_JDT_CORE_JAVABUILDER );
253 buildcommands.add( COM_IBM_ETOOLS_VALIDATION_VALIDATIONBUILDER );
254 buildcommands.add( COM_IBM_WTP_J2EE_LIB_COPY_BUILDER );
255 buildcommands.add( COM_IBM_SSE_MODEL_STRUCTUREDBUILDER );
256 }
257 else if ( isJavaProject() )
258 {
259 buildcommands.add( ORG_ECLIPSE_JDT_CORE_JAVABUILDER );
260 buildcommands.add( COM_IBM_SSE_MODEL_STRUCTUREDBUILDER );
261 }
262 setBuildcommands( buildcommands );
263 }
264
265
266
267
268
269
270 protected void fillDefaultNatures( String packaging )
271 {
272 super.fillDefaultNatures( packaging );
273
274 ArrayList projectnatures = new ArrayList();
275 if ( Constants.PROJECT_PACKAGING_EAR.equals( packaging ) )
276 {
277 projectnatures.add( COM_IBM_WTP_J2EE_EARNATURE );
278 }
279 else if ( Constants.PROJECT_PACKAGING_WAR.equals( packaging ) )
280 {
281 projectnatures.add( COM_IBM_WTP_WEB_WEB_NATURE );
282 projectnatures.add( ORG_ECLIPSE_JDT_CORE_JAVANATURE );
283 projectnatures.add( COM_IBM_ETOOLS_SITEEDIT_WEB_SITE_NATURE );
284 projectnatures.add( COM_IBM_ETOOLS_WEBPAGE_TEMPLATE_TEMPLATENATURE );
285 }
286 else if ( Constants.PROJECT_PACKAGING_EJB.equals( packaging ) )
287 {
288 projectnatures.add( COM_IBM_WTP_EJB_EJBNATURE );
289 projectnatures.add( ORG_ECLIPSE_JDT_CORE_JAVANATURE );
290 }
291 else if ( isJavaProject() )
292 {
293 projectnatures.add( ORG_ECLIPSE_JDT_CORE_JAVANATURE );
294 }
295 setProjectnatures( projectnatures );
296 }
297
298
299
300
301
302
303
304 protected boolean isAvailableAsAReactorProject( Artifact artifact )
305 {
306 if ( this.reactorProjects != null &&
307 ( Constants.PROJECT_PACKAGING_JAR.equals( artifact.getType() ) ||
308 Constants.PROJECT_PACKAGING_EJB.equals( artifact.getType() ) || Constants.PROJECT_PACKAGING_WAR.equals( artifact.getType() ) ) )
309 {
310 for ( Iterator iter = this.reactorProjects.iterator(); iter.hasNext(); )
311 {
312 MavenProject reactorProject = (MavenProject) iter.next();
313
314 if ( reactorProject.getGroupId().equals( artifact.getGroupId() ) &&
315 reactorProject.getArtifactId().equals( artifact.getArtifactId() ) )
316 {
317 if ( reactorProject.getVersion().equals( artifact.getVersion() ) )
318 {
319 return true;
320 }
321 else
322 {
323 getLog().info(
324 "Artifact " +
325 artifact.getId() +
326 " already available as a reactor project, but with different version. Expected: " +
327 artifact.getVersion() + ", found: " + reactorProject.getVersion() );
328 }
329 }
330 }
331 }
332 return false;
333 }
334
335
336
337
338
339 protected void setupExtras()
340 throws MojoExecutionException
341 {
342 super.setupExtras();
343
344 IdeDependency[] deps = doDependencyResolution();
345
346 EclipseWriterConfig config = createEclipseWriterConfig( deps );
347
348 addManifestResource( config );
349 }
350 }