1 package org.apache.maven.plugins.ear;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.io.Writer;
23
24 import org.apache.maven.plugins.ear.util.JavaEEVersion;
25 import org.codehaus.plexus.util.xml.XMLWriter;
26
27
28
29
30
31
32 final class ApplicationXmlWriter
33 extends AbstractXmlWriter
34 {
35
36 public static final String DOCTYPE_1_3 = "application PUBLIC\n"
37 + "\t\"-//Sun Microsystems, Inc.//DTD J2EE Application 1.3//EN\"\n"
38 + "\t\"http://java.sun.com/dtd/application_1_3.dtd\"";
39
40
41 private static final String APPLICATION_ELEMENT = "application";
42
43 private final JavaEEVersion version;
44
45 private final Boolean generateModuleId;
46
47 ApplicationXmlWriter( JavaEEVersion version, String encoding, Boolean generateModuleId )
48 {
49 super( encoding );
50 this.version = version;
51 this.generateModuleId = generateModuleId;
52 }
53
54 public void write( ApplicationXmlWriterContext context )
55 throws EarPluginException
56 {
57 Writer w = initializeWriter( context.getDestinationFile() );
58
59 XMLWriter writer = null;
60 if ( JavaEEVersion.ONE_DOT_THREE.eq( version ) )
61 {
62 writer = initializeRootElementOneDotThree( w );
63 }
64 else if ( JavaEEVersion.ONE_DOT_FOUR.eq( version ) )
65 {
66 writer = initializeRootElementOneDotFour( w );
67 }
68 else if ( JavaEEVersion.FIVE.eq( version ) )
69 {
70 writer = initializeRootElementFive( w );
71 }
72 else if ( JavaEEVersion.SIX.eq( version ) )
73 {
74 writer = initializeRootElementSix( w );
75 }
76 else if ( JavaEEVersion.SEVEN.eq( version ) )
77 {
78 writer = initializeRootElementSeven( w );
79 }
80 else if ( JavaEEVersion.EIGHT.eq( version ) )
81 {
82 writer = initializeRootElementEight( w );
83 }
84
85
86 if ( context.getApplicationId() != null )
87 {
88 writer.addAttribute( "id", context.getApplicationId() );
89 }
90
91
92 if ( version.ge( JavaEEVersion.SIX ) )
93 {
94 writeApplicationName( context.getApplicationName(), writer );
95 }
96
97
98
99 if ( version.eq( JavaEEVersion.ONE_DOT_THREE ) )
100 {
101 writeDisplayName( context.getDisplayName(), writer );
102 writeDescription( context.getDescription(), writer );
103 }
104 else
105 {
106 writeDescription( context.getDescription(), writer );
107 writeDisplayName( context.getDisplayName(), writer );
108 }
109
110
111 if ( version.ge( JavaEEVersion.SIX ) )
112 {
113 writeInitializeInOrder( context.getInitializeInOrder(), writer );
114 }
115
116
117 for ( EarModule module : context.getEarModules() )
118 {
119 module.appendModule( writer, version.getVersion(), generateModuleId );
120 }
121
122 for ( SecurityRole securityRole : context.getSecurityRoles() )
123 {
124 securityRole.appendSecurityRole( writer );
125 }
126
127 if ( version.ge( JavaEEVersion.FIVE ) )
128 {
129 writeLibraryDirectory( context.getLibraryDirectory(), writer );
130 }
131
132 if ( version.ge( JavaEEVersion.SIX ) )
133 {
134 for ( EnvEntry envEntry : context.getEnvEntries() )
135 {
136 envEntry.appendEnvEntry( writer );
137 }
138 for ( EjbRef ejbEntry : context.getEjbEntries() )
139 {
140 ejbEntry.appendEjbRefEntry( writer );
141 }
142 for ( ResourceRef resourceEntry : context.getResourceRefs() )
143 {
144 resourceEntry.appendResourceRefEntry( writer );
145 }
146 }
147
148 writer.endElement();
149
150 close( w );
151 }
152
153 private void writeApplicationName( String applicationName, XMLWriter writer )
154 {
155 if ( applicationName != null )
156 {
157 writer.startElement( "application-name" );
158 writer.writeText( applicationName );
159 writer.endElement();
160 }
161 }
162
163 private void writeDescription( String description, XMLWriter writer )
164 {
165 if ( description != null )
166 {
167 writer.startElement( "description" );
168 writer.writeText( description );
169 writer.endElement();
170 }
171 }
172
173 private void writeDisplayName( String displayName, XMLWriter writer )
174 {
175 if ( displayName != null )
176 {
177 writer.startElement( "display-name" );
178 writer.writeText( displayName );
179 writer.endElement();
180 }
181 }
182
183 private void writeInitializeInOrder( Boolean initializeInOrder, XMLWriter writer )
184 {
185 if ( initializeInOrder != null )
186 {
187 writer.startElement( "initialize-in-order" );
188 writer.writeText( initializeInOrder.toString() );
189 writer.endElement();
190 }
191 }
192
193 private void writeLibraryDirectory( String libraryDirectory, XMLWriter writer )
194 {
195 if ( libraryDirectory != null )
196 {
197 writer.startElement( "library-directory" );
198 writer.writeText( libraryDirectory );
199 writer.endElement();
200 }
201 }
202
203 private XMLWriter initializeRootElementOneDotThree( Writer w )
204 {
205 XMLWriter writer = initializeXmlWriter( w, DOCTYPE_1_3 );
206 writer.startElement( APPLICATION_ELEMENT );
207 return writer;
208 }
209
210 private XMLWriter initializeRootElementOneDotFour( Writer w )
211 {
212 XMLWriter writer = initializeXmlWriter( w, null );
213 writer.startElement( APPLICATION_ELEMENT );
214 writer.addAttribute( "xmlns", "http://java.sun.com/xml/ns/j2ee" );
215 writer.addAttribute( "xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance" );
216 writer.addAttribute( "xsi:schemaLocation",
217 "http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/application_1_4.xsd" );
218 writer.addAttribute( "version", "1.4" );
219 return writer;
220 }
221
222 private XMLWriter initializeRootElementFive( Writer w )
223 {
224 XMLWriter writer = initializeXmlWriter( w, null );
225 writer.startElement( APPLICATION_ELEMENT );
226 writer.addAttribute( "xmlns", "http://java.sun.com/xml/ns/javaee" );
227 writer.addAttribute( "xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance" );
228 writer.addAttribute( "xsi:schemaLocation",
229 "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_5.xsd" );
230 writer.addAttribute( "version", "5" );
231 return writer;
232 }
233
234 private XMLWriter initializeRootElementSix( Writer w )
235 {
236 XMLWriter writer = initializeXmlWriter( w, null );
237 writer.startElement( APPLICATION_ELEMENT );
238 writer.addAttribute( "xmlns", "http://java.sun.com/xml/ns/javaee" );
239 writer.addAttribute( "xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance" );
240 writer.addAttribute( "xsi:schemaLocation",
241 "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_6.xsd" );
242 writer.addAttribute( "version", "6" );
243 return writer;
244 }
245
246 private XMLWriter initializeRootElementSeven( Writer w )
247 {
248 XMLWriter writer = initializeXmlWriter( w, null );
249 writer.startElement( APPLICATION_ELEMENT );
250 writer.addAttribute( "xmlns", "http://xmlns.jcp.org/xml/ns/javaee" );
251 writer.addAttribute( "xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance" );
252
253 writer.addAttribute( "xsi:schemaLocation",
254 "http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/application_7.xsd" );
255
256 writer.addAttribute( "version", "7" );
257 return writer;
258 }
259
260 private XMLWriter initializeRootElementEight( Writer w )
261 {
262 XMLWriter writer = initializeXmlWriter( w, null );
263 writer.startElement( APPLICATION_ELEMENT );
264 writer.addAttribute( "xmlns", "http://xmlns.jcp.org/xml/ns/javaee" );
265 writer.addAttribute( "xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance" );
266
267 writer.addAttribute( "xsi:schemaLocation",
268 "http://xmlns.jcp.org/xml/ns/javaee/ http://xmlns.jcp.org/xml/ns/javaee/application_8.xsd" );
269
270 writer.addAttribute( "version", "8" );
271 return writer;
272 }
273 }