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