1 package org.apache.maven.plugin.eclipse.writers.wtp;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.io.File;
23 import java.io.FileOutputStream;
24 import java.io.IOException;
25 import java.io.OutputStreamWriter;
26 import java.io.Writer;
27
28 import org.apache.maven.artifact.repository.ArtifactRepository;
29 import org.apache.maven.plugin.MojoExecutionException;
30 import org.apache.maven.plugin.eclipse.Constants;
31 import org.apache.maven.plugin.eclipse.EclipseSourceDir;
32 import org.apache.maven.plugin.eclipse.Messages;
33 import org.apache.maven.plugin.ide.IdeUtils;
34 import org.apache.maven.plugin.ide.JeeUtils;
35 import org.codehaus.plexus.util.IOUtil;
36 import org.codehaus.plexus.util.xml.PrettyPrintXMLWriter;
37 import org.codehaus.plexus.util.xml.XMLWriter;
38 import org.codehaus.plexus.util.xml.Xpp3Dom;
39
40
41
42
43
44
45
46
47 public class EclipseWtpComponentWriter
48 extends AbstractWtpResourceWriter
49 {
50
51
52
53
54 public static final String ATTR_CONTEXT_ROOT = "context-root";
55
56
57
58
59 public static final String DIR_WTP_SETTINGS = ".settings";
60
61
62
63
64
65
66 protected String getComponentFileName()
67 {
68 return ".component";
69 }
70
71
72
73
74
75
76 protected String getProjectVersion()
77 {
78 return null;
79 }
80
81
82
83
84 public void write()
85 throws MojoExecutionException
86 {
87
88
89 File settingsDir = new File( config.getEclipseProjectDirectory(), DIR_WTP_SETTINGS );
90 settingsDir.mkdirs();
91
92 Writer w;
93 try
94 {
95 w =
96 new OutputStreamWriter( new FileOutputStream( new File( settingsDir, getComponentFileName() ) ),
97 "UTF-8" );
98 }
99 catch ( IOException ex )
100 {
101 throw new MojoExecutionException( Messages.getString( "EclipsePlugin.erroropeningfile" ), ex );
102 }
103
104
105 XMLWriter writer = new PrettyPrintXMLWriter( w, "UTF-8", null );
106
107 writeModuleTypeComponent( writer, config.getPackaging(), config.getBuildOutputDirectory(),
108 config.getSourceDirs(), config.getLocalRepository() );
109
110 IOUtil.close( w );
111 }
112
113
114
115
116
117
118
119
120
121
122
123 private void writeModuleTypeComponent( XMLWriter writer, String packaging, File buildOutputDirectory,
124 EclipseSourceDir[] sourceDirs, ArtifactRepository localRepository )
125 throws MojoExecutionException
126 {
127 writer.startElement( ELT_PROJECT_MODULES );
128 writer.addAttribute( ATTR_MODULE_ID, "moduleCoreId" );
129 if ( getProjectVersion() != null )
130 {
131 writer.addAttribute( ATTR_PROJECT_VERSION, getProjectVersion() );
132 }
133 writer.startElement( ELT_WB_MODULE );
134
135
136 writer.addAttribute( ATTR_DEPLOY_NAME, this.config.getEclipseProjectName() );
137
138
139 String target = "/";
140
141 if ( Constants.PROJECT_PACKAGING_WAR.equalsIgnoreCase( packaging ) )
142 {
143 target = "/WEB-INF/classes";
144
145 File warSourceDirectory =
146 new File( IdeUtils.getPluginSetting( config.getProject(), JeeUtils.ARTIFACT_MAVEN_WAR_PLUGIN,
147 "warSourceDirectory",
148 config.getProject().getBasedir() + "/src/main/webapp" ) );
149
150 writeContextRoot( writer );
151
152 writer.startElement( ELT_WB_RESOURCE );
153 writer.addAttribute( ATTR_DEPLOY_PATH, "/" );
154 writer.addAttribute( ATTR_SOURCE_PATH,
155 IdeUtils.toRelativeAndFixSeparator( config.getEclipseProjectDirectory(),
156 warSourceDirectory, false ) );
157 writer.endElement();
158
159
160 Xpp3Dom[] webResources =
161 IdeUtils.getPluginConfigurationDom( config.getProject(), JeeUtils.ARTIFACT_MAVEN_WAR_PLUGIN,
162 new String[] { "webResources", "resource" } );
163 for ( Xpp3Dom webResource : webResources )
164 {
165 File webResourceDirectory = new File( webResource.getChild( "directory" ).getValue() );
166 writer.startElement( ELT_WB_RESOURCE );
167 writer.addAttribute( ATTR_DEPLOY_PATH, "/" );
168 writer.addAttribute( ATTR_SOURCE_PATH,
169 IdeUtils.toRelativeAndFixSeparator( config.getEclipseProjectDirectory(),
170 webResourceDirectory, false ) );
171 writer.endElement();
172 }
173
174
175 writer.startElement( ELT_PROPERTY );
176 writer.addAttribute( ATTR_NAME, "java-output-path" );
177 writer.addAttribute( ATTR_VALUE, "/"
178 + IdeUtils.toRelativeAndFixSeparator( config.getProject().getBasedir(), buildOutputDirectory, false ) );
179 writer.endElement();
180
181 }
182 else if ( Constants.PROJECT_PACKAGING_EAR.equalsIgnoreCase( packaging ) )
183 {
184
185 String defaultApplicationXML =
186 config.getWtpapplicationxml() ? "/target/eclipseEar" : "/src/main/application";
187
188 String earSourceDirectory =
189 IdeUtils.getPluginSetting( config.getProject(), JeeUtils.ARTIFACT_MAVEN_EAR_PLUGIN,
190 "earSourceDirectory",
191 config.getProject().getBasedir() + defaultApplicationXML );
192 writer.startElement( ELT_WB_RESOURCE );
193 writer.addAttribute( ATTR_DEPLOY_PATH, "/" );
194 writer.addAttribute( ATTR_SOURCE_PATH,
195 IdeUtils.toRelativeAndFixSeparator( config.getEclipseProjectDirectory(),
196 new File( earSourceDirectory ), false ) );
197 writer.endElement();
198 }
199
200 if ( Constants.PROJECT_PACKAGING_WAR.equalsIgnoreCase( packaging )
201 || Constants.PROJECT_PACKAGING_EAR.equalsIgnoreCase( packaging ) )
202 {
203
204 writeWarOrEarResources( writer, config.getProject(), localRepository );
205
206 }
207
208 for ( EclipseSourceDir dir : sourceDirs )
209 {
210
211 if ( !dir.isTest() )
212 {
213
214 writer.startElement( ELT_WB_RESOURCE );
215 writer.addAttribute( ATTR_DEPLOY_PATH, target );
216 writer.addAttribute( ATTR_SOURCE_PATH, dir.getPath() );
217 writer.endElement();
218 }
219 }
220
221 writer.endElement();
222 writer.endElement();
223 }
224
225
226
227
228 protected void writeContextRoot( XMLWriter writer )
229 {
230 writer.startElement( ELT_PROPERTY );
231 writer.addAttribute( ATTR_CONTEXT_ROOT, config.getContextName() );
232 writer.endElement();
233 }
234
235 }