package org.apache.maven.plugins.ear; | |
/* | |
* Licensed to the Apache Software Foundation (ASF) under one | |
* or more contributor license agreements. See the NOTICE file | |
* distributed with this work for additional information | |
* regarding copyright ownership. The ASF licenses this file | |
* to you under the Apache License, Version 2.0 (the | |
* "License"); you may not use this file except in compliance | |
* with the License. You may obtain a copy of the License at | |
* | |
* http://www.apache.org/licenses/LICENSE-2.0 | |
* | |
* Unless required by applicable law or agreed to in writing, | |
* software distributed under the License is distributed on an | |
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | |
* KIND, either express or implied. See the License for the | |
* specific language governing permissions and limitations | |
* under the License. | |
*/ | |
import java.io.Writer; | |
import org.apache.maven.plugins.ear.util.JavaEEVersion; | |
import org.codehaus.plexus.util.xml.XMLWriter; | |
/** | |
* An <tt>XmlWriter</tt> based implementation used to generate an <tt>application.xml</tt> file | |
* | |
* @author <a href="snicoll@apache.org">Stephane Nicoll</a> | |
* @version $Id: ApplicationXmlWriter.java 1648055 2014-12-27 14:59:45Z khmarbaise $ | |
*/ | |
final class ApplicationXmlWriter | |
extends AbstractXmlWriter | |
{ | |
//@formatter:off | |
public static final String DOCTYPE_1_3 = "application PUBLIC\n" | |
+ "\t\"-//Sun Microsystems, Inc.//DTD J2EE Application 1.3//EN\"\n" | |
+ "\t\"http://java.sun.com/dtd/application_1_3.dtd\""; | |
//@formatter:on | |
private static final String APPLICATION_ELEMENT = "application"; | |
private final JavaEEVersion version; | |
private final Boolean generateModuleId; | |
ApplicationXmlWriter( JavaEEVersion version, String encoding, Boolean generateModuleId ) | |
{ | |
super( encoding ); | |
this.version = version; | |
this.generateModuleId = generateModuleId; | |
} | |
public void write( ApplicationXmlWriterContext context ) | |
throws EarPluginException | |
{ | |
Writer w = initializeWriter( context.getDestinationFile() ); | |
XMLWriter writer = null; | |
if ( JavaEEVersion.ONE_DOT_THREE.eq( version ) ) | |
{ | |
writer = initializeRootElementOneDotThree( w ); | |
} | |
else if ( JavaEEVersion.ONE_DOT_FOUR.eq( version ) ) | |
{ | |
writer = initializeRootElementOneDotFour( w ); | |
} | |
else if ( JavaEEVersion.FIVE.eq( version ) ) | |
{ | |
writer = initializeRootElementFive( w ); | |
} | |
else if ( JavaEEVersion.SIX.eq( version ) ) | |
{ | |
writer = initializeRootElementSix( w ); | |
} | |
else if ( JavaEEVersion.SEVEN.eq( version ) ) | |
{ | |
writer = initializeRootElementSeven( w ); | |
} | |
// writer is still on root element, so we can still add this attribute | |
if ( context.getApplicationId() != null ) | |
{ | |
writer.addAttribute( "id", context.getApplicationId() ); | |
} | |
// As from JavaEE6 | |
if ( version.ge( JavaEEVersion.SIX ) ) | |
{ | |
writeApplicationName( context.getApplicationName(), writer ); | |
} | |
// IMPORTANT: the order of the description and display-name elements was | |
// reversed between J2EE 1.3 and J2EE 1.4. | |
if ( version.eq( JavaEEVersion.ONE_DOT_THREE ) ) | |
{ | |
writeDisplayName( context.getDisplayName(), writer ); | |
writeDescription( context.getDescription(), writer ); | |
} | |
else | |
{ | |
writeDescription( context.getDescription(), writer ); | |
writeDisplayName( context.getDisplayName(), writer ); | |
} | |
// As from JavaEE6 | |
if ( version.ge( JavaEEVersion.SIX ) ) | |
{ | |
writeInitializeInOrder( context.getInitializeInOrder(), writer ); | |
} | |
// Do not change this unless you really know what you're doing :) | |
for ( EarModule module : context.getEarModules() ) | |
{ | |
module.appendModule( writer, version.getVersion(), generateModuleId ); | |
} | |
for ( SecurityRole securityRole : context.getSecurityRoles() ) | |
{ | |
securityRole.appendSecurityRole( writer ); | |
} | |
if ( version.ge( JavaEEVersion.FIVE ) ) | |
{ | |
writeLibraryDirectory( context.getLibraryDirectory(), writer ); | |
} | |
if ( version.ge( JavaEEVersion.SIX ) ) | |
{ | |
for ( EnvEntry envEntry : context.getEnvEntries() ) | |
{ | |
envEntry.appendEnvEntry( writer ); | |
} | |
for ( EjbRef ejbEntry : context.getEjbEntries() ) | |
{ | |
ejbEntry.appendEjbRefEntry( writer ); | |
} | |
for ( ResourceRef resourceEntry : context.getResourceRefs() ) | |
{ | |
resourceEntry.appendResourceRefEntry( writer ); | |
} | |
} | |
writer.endElement(); | |
close( w ); | |
} | |
private void writeApplicationName( String applicationName, XMLWriter writer ) | |
{ | |
if ( applicationName != null ) | |
{ | |
writer.startElement( "application-name" ); | |
writer.writeText( applicationName ); | |
writer.endElement(); | |
} | |
} | |
private void writeDescription( String description, XMLWriter writer ) | |
{ | |
if ( description != null ) | |
{ | |
writer.startElement( "description" ); | |
writer.writeText( description ); | |
writer.endElement(); | |
} | |
} | |
private void writeDisplayName( String displayName, XMLWriter writer ) | |
{ | |
if ( displayName != null ) | |
{ | |
writer.startElement( "display-name" ); | |
writer.writeText( displayName ); | |
writer.endElement(); | |
} | |
} | |
private void writeInitializeInOrder( Boolean initializeInOrder, XMLWriter writer ) | |
{ | |
if ( initializeInOrder != null ) | |
{ | |
writer.startElement( "initialize-in-order" ); | |
writer.writeText( initializeInOrder.toString() ); | |
writer.endElement(); | |
} | |
} | |
private void writeLibraryDirectory( String libraryDirectory, XMLWriter writer ) | |
{ | |
if ( libraryDirectory != null ) | |
{ | |
writer.startElement( "library-directory" ); | |
writer.writeText( libraryDirectory ); | |
writer.endElement(); | |
} | |
} | |
private XMLWriter initializeRootElementOneDotThree( Writer w ) | |
{ | |
XMLWriter writer = initializeXmlWriter( w, DOCTYPE_1_3 ); | |
writer.startElement( APPLICATION_ELEMENT ); | |
return writer; | |
} | |
private XMLWriter initializeRootElementOneDotFour( Writer w ) | |
{ | |
XMLWriter writer = initializeXmlWriter( w, null ); | |
writer.startElement( APPLICATION_ELEMENT ); | |
writer.addAttribute( "xmlns", "http://java.sun.com/xml/ns/j2ee" ); | |
writer.addAttribute( "xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance" ); | |
writer.addAttribute( "xsi:schemaLocation", | |
"http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/application_1_4.xsd" ); | |
writer.addAttribute( "version", "1.4" ); | |
return writer; | |
} | |
private XMLWriter initializeRootElementFive( Writer w ) | |
{ | |
XMLWriter writer = initializeXmlWriter( w, null ); | |
writer.startElement( APPLICATION_ELEMENT ); | |
writer.addAttribute( "xmlns", "http://java.sun.com/xml/ns/javaee" ); | |
writer.addAttribute( "xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance" ); | |
writer.addAttribute( "xsi:schemaLocation", | |
"http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_5.xsd" ); | |
writer.addAttribute( "version", "5" ); | |
return writer; | |
} | |
private XMLWriter initializeRootElementSix( Writer w ) | |
{ | |
XMLWriter writer = initializeXmlWriter( w, null ); | |
writer.startElement( APPLICATION_ELEMENT ); | |
writer.addAttribute( "xmlns", "http://java.sun.com/xml/ns/javaee" ); | |
writer.addAttribute( "xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance" ); | |
writer.addAttribute( "xsi:schemaLocation", | |
"http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_6.xsd" ); | |
writer.addAttribute( "version", "6" ); | |
return writer; | |
} | |
private XMLWriter initializeRootElementSeven( Writer w ) | |
{ | |
XMLWriter writer = initializeXmlWriter( w, null ); | |
writer.startElement( APPLICATION_ELEMENT ); | |
writer.addAttribute( "xmlns", "http://xmlns.jcp.org/xml/ns/javaee" ); | |
writer.addAttribute( "xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance" ); | |
// CHECKSTYLE_OFF: LineLength | |
writer.addAttribute( "xsi:schemaLocation", | |
"http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/application_7.xsd" ); | |
// CHECKSTYLE_ON: LineLength | |
writer.addAttribute( "version", "7" ); | |
return writer; | |
} | |
} |