View Javadoc
1   package org.apache.maven.plugins.ear;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *  http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
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   * An <tt>XmlWriter</tt> based implementation used to generate an <tt>application.xml</tt> file
29   * 
30   * @author <a href="snicoll@apache.org">Stephane Nicoll</a>
31   */
32  final class ApplicationXmlWriter
33      extends AbstractXmlWriter
34  {
35      //@formatter:off
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      //@formatter:on
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          // writer is still on root element, so we can still add this attribute
86          if ( context.getApplicationId() != null )
87          {
88              writer.addAttribute( "id", context.getApplicationId() );
89          }
90  
91          // As from JavaEE6
92          if ( version.ge( JavaEEVersion.SIX ) )
93          {
94              writeApplicationName( context.getApplicationName(), writer );
95          }
96  
97          // IMPORTANT: the order of the description and display-name elements was
98          // reversed between J2EE 1.3 and J2EE 1.4.
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         // As from JavaEE6
111         if ( version.ge( JavaEEVersion.SIX ) )
112         {
113             writeInitializeInOrder( context.getInitializeInOrder(), writer );
114         }
115 
116         // Do not change this unless you really know what you're doing :)
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         // CHECKSTYLE_OFF: LineLength
253         writer.addAttribute( "xsi:schemaLocation",
254                              "http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/application_7.xsd" );
255         // CHECKSTYLE_ON: LineLength
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         // CHECKSTYLE_OFF: LineLength
267         writer.addAttribute( "xsi:schemaLocation",
268                              "http://xmlns.jcp.org/xml/ns/javaee/ http://xmlns.jcp.org/xml/ns/javaee/application_8.xsd" );
269         // CHECKSTYLE_ON: LineLength
270         writer.addAttribute( "version", "8" );
271         return writer;
272     }
273 }