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.writers.wtp;
20
21 import java.io.File;
22 import java.io.FileOutputStream;
23 import java.io.IOException;
24 import java.io.OutputStreamWriter;
25 import java.io.Writer;
26 import java.util.Iterator;
27 import java.util.Map.Entry;
28
29 import org.apache.maven.plugin.MojoExecutionException;
30 import org.apache.maven.plugin.eclipse.Constants;
31 import org.apache.maven.plugin.eclipse.Messages;
32 import org.apache.maven.plugin.ide.IdeUtils;
33 import org.apache.maven.plugin.ide.JeeUtils;
34 import org.codehaus.plexus.util.IOUtil;
35 import org.codehaus.plexus.util.xml.PrettyPrintXMLWriter;
36 import org.codehaus.plexus.util.xml.XMLWriter;
37
38
39
40
41
42
43
44
45 public class EclipseWtpFacetsWriter
46 extends AbstractWtpResourceWriter
47 {
48
49 private static final String FACET_COM_IBM_WEBSPHERE_COEXISTENCE_EAR = "com.ibm.websphere.coexistence.ear";
50
51 private static final String FACET_COM_IBM_WEBSPHERE_EXTENDED_EAR = "com.ibm.websphere.extended.ear";
52
53 private static final String FACET_JST_EAR = "jst.ear";
54
55 private static final String FACET_JST_UTILITY = "jst.utility";
56
57 private static final String FACET_JST_EJB = "jst.ejb";
58
59 private static final String FACET_JST_WEB = "jst.web";
60
61 private static final String FACET_JST_JAVA = "jst.java";
62
63 private static final String ATTR_VERSION = "version";
64
65 private static final String ELT_INSTALLED = "installed";
66
67 private static final String ATTR_FACET = "facet";
68
69 private static final String ELT_FIXED = "fixed";
70
71 private static final String ELT_FACETED_PROJECT = "faceted-project";
72
73
74
75
76 private static final String DIR_WTP_SETTINGS = ".settings";
77
78
79
80
81 private static final String FILE_FACET_CORE_XML = "org.eclipse.wst.common.project.facet.core.xml";
82
83
84
85
86 public void write()
87 throws MojoExecutionException
88 {
89
90
91 File settingsDir = new File( config.getEclipseProjectDirectory(), DIR_WTP_SETTINGS );
92 settingsDir.mkdirs();
93
94 Writer w;
95
96 String packaging = config.getPackaging();
97
98
99 try
100 {
101 w = new OutputStreamWriter( new FileOutputStream( new File( settingsDir, FILE_FACET_CORE_XML ) ), "UTF-8" );
102 }
103 catch ( IOException ex )
104 {
105 throw new MojoExecutionException( Messages.getString( "EclipsePlugin.erroropeningfile" ), ex );
106 }
107 XMLWriter writer = new PrettyPrintXMLWriter( w, "UTF-8", null );
108 writeModuleTypeFacetCore( writer, packaging );
109 IOUtil.close( w );
110 }
111
112
113
114
115
116
117
118 private void writeModuleTypeFacetCore( XMLWriter writer, String packaging )
119 {
120 writer.startElement( ELT_FACETED_PROJECT );
121 if ( Constants.PROJECT_PACKAGING_WAR.equalsIgnoreCase( packaging ) )
122 {
123 writeFacetFixedElement( writer, FACET_JST_JAVA );
124 writeFacetFixedElement( writer, FACET_JST_WEB );
125 String servletVersion;
126 if ( config.getJeeVersion() != null )
127 {
128 servletVersion = JeeUtils.getJeeDescriptorFromJeeVersion( config.getJeeVersion() ).getServletVersion();
129 }
130 else
131 {
132 servletVersion = JeeUtils.resolveServletVersion( config.getProject() );
133 }
134 writeFacetInstalledElement( writer, FACET_JST_WEB, servletVersion );
135 writeFacetInstalledElement( writer, FACET_JST_JAVA, IdeUtils.resolveJavaVersion( config.getProject() ) );
136 }
137 else if ( Constants.PROJECT_PACKAGING_EJB.equalsIgnoreCase( packaging ) )
138 {
139 writeFacetFixedElement( writer, FACET_JST_JAVA );
140 writeFacetFixedElement( writer, FACET_JST_EJB );
141
142 String ejbVersion;
143 if ( config.getJeeVersion() != null )
144 {
145 ejbVersion = JeeUtils.getJeeDescriptorFromJeeVersion( config.getJeeVersion() ).getEjbVersion();
146 }
147 else
148 {
149 ejbVersion = JeeUtils.resolveEjbVersion( config.getProject() );
150 }
151 writeFacetInstalledElement( writer, FACET_JST_EJB, ejbVersion );
152 writeFacetInstalledElement( writer, FACET_JST_JAVA, IdeUtils.resolveJavaVersion( config.getProject() ) );
153 }
154 else if ( Constants.PROJECT_PACKAGING_EAR.equalsIgnoreCase( packaging ) )
155 {
156 if ( this.config.getWorkspaceConfiguration().getWebsphereVersion() != null )
157 {
158 writer.startElement( "runtime" );
159 writer.addAttribute( "name", config.getWorkspaceConfiguration().getDefaultDeployServerName() );
160 writer.endElement();
161
162 writeFacetInstalledElement( writer, FACET_COM_IBM_WEBSPHERE_EXTENDED_EAR,
163 this.config.getWorkspaceConfiguration().getWebsphereVersion() );
164 writeFacetInstalledElement( writer, FACET_COM_IBM_WEBSPHERE_COEXISTENCE_EAR,
165 this.config.getWorkspaceConfiguration().getWebsphereVersion() );
166
167 }
168 writeFacetFixedElement( writer, FACET_JST_EAR );
169 String jeeVersion;
170 if ( config.getJeeVersion() != null )
171 {
172 jeeVersion = JeeUtils.getJeeDescriptorFromJeeVersion( config.getJeeVersion() ).getJeeVersion();
173 }
174 else
175 {
176 jeeVersion = JeeUtils.resolveJeeVersion( config.getProject() );
177 }
178 writeFacetInstalledElement( writer, FACET_JST_EAR, jeeVersion );
179
180 }
181 else if ( Constants.PROJECT_PACKAGING_JAR.equalsIgnoreCase( packaging ) )
182 {
183 writeFacetFixedElement( writer, FACET_JST_JAVA );
184 writeFacetFixedElement( writer, FACET_JST_UTILITY );
185 writeFacetInstalledElement( writer, FACET_JST_UTILITY, "1.0" );
186 writeFacetInstalledElement( writer, FACET_JST_JAVA, IdeUtils.resolveJavaVersion( config.getProject() ) );
187
188 }
189
190 writeAdditionalProjectFacets( writer );
191
192 writer.endElement();
193 }
194
195
196
197
198
199
200
201
202 private void writeFacetFixedElement( XMLWriter writer, String facetName )
203 {
204 writer.startElement( ELT_FIXED );
205 writer.addAttribute( ATTR_FACET, facetName );
206 writer.endElement();
207 }
208
209
210
211
212
213
214
215
216
217
218 private void writeFacetInstalledElement( XMLWriter writer, String facetName, String facetVersion )
219 {
220 writer.startElement( ELT_INSTALLED );
221 writer.addAttribute( ATTR_FACET, facetName );
222 writer.addAttribute( ATTR_VERSION, facetVersion );
223 writer.endElement();
224 }
225
226
227
228
229
230
231
232 private void writeAdditionalProjectFacets( XMLWriter writer )
233 {
234 if ( config.getProjectFacets() == null )
235 {
236 return;
237 }
238
239 Iterator facetIterator = config.getProjectFacets().entrySet().iterator();
240 while ( facetIterator.hasNext() )
241 {
242 Entry facetEntry = (Entry) facetIterator.next();
243
244 writer.startElement( ELT_INSTALLED );
245 writer.addAttribute( ATTR_FACET, (String) facetEntry.getKey() );
246 writer.addAttribute( ATTR_VERSION, (String) facetEntry.getValue() );
247 writer.endElement();
248 }
249 }
250
251 }