Author: snicoll Date: Tue Apr 11 10:00:18 2006 New Revision: 393260 URL: http://svn.apache.org/viewcvs?rev=393260&view=rev Log: MEAR-8: Added security-roles management for the generated application.xml
Added: maven/plugins/trunk/maven-ear-plugin/src/main/java/org/apache/maven/plugin/ear/SecurityRole.java Modified: maven/plugins/trunk/maven-ear-plugin/src/main/java/org/apache/maven/plugin/ear/ApplicationXmlWriter.java maven/plugins/trunk/maven-ear-plugin/src/main/java/org/apache/maven/plugin/ear/GenerateApplicationXmlMojo.java maven/plugins/trunk/maven-ear-plugin/src/site/apt/howto.apt Modified: maven/plugins/trunk/maven-ear-plugin/src/main/java/org/apache/maven/plugin/ear/ApplicationXmlWriter.java URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-ear-plugin/src/main/java/org/apache/maven/plugin/ear/ApplicationXmlWriter.java?rev=393260&r1=393259&r2=393260&view=diff ============================================================================== --- maven/plugins/trunk/maven-ear-plugin/src/main/java/org/apache/maven/plugin/ear/ApplicationXmlWriter.java (original) +++ maven/plugins/trunk/maven-ear-plugin/src/main/java/org/apache/maven/plugin/ear/ApplicationXmlWriter.java Tue Apr 11 10:00:18 2006 @@ -52,7 +52,8 @@ this.encoding = encoding; } - public void write( File destinationFile, List earModules, String displayName, String description ) + public void write( File destinationFile, List earModules, List securityRoles, String displayName, + String description ) throws EarPluginException { FileWriter w; @@ -70,28 +71,36 @@ if ( GenerateApplicationXmlMojo.VERSION_1_3.equals( version ) ) { writer = initializeRootElementOneDotThree( w ); - writeDisplayName(displayName, writer); - writeDescription(description, writer); + writeDisplayName( displayName, writer ); + writeDescription( description, writer ); } else if ( GenerateApplicationXmlMojo.VERSION_1_4.equals( version ) ) { writer = initializeRootElementOneDotFour( w ); - writeDescription(description, writer); - writeDisplayName(displayName, writer); + writeDescription( description, writer ); + writeDisplayName( displayName, writer ); } - Iterator i = earModules.iterator(); - while ( i.hasNext() ) + final Iterator moduleIt = earModules.iterator(); + while ( moduleIt.hasNext() ) { - EarModule module = (EarModule) i.next(); + EarModule module = (EarModule) moduleIt.next(); module.appendModule( writer, version ); } + + final Iterator securityRoleIt = securityRoles.iterator(); + while ( securityRoleIt.hasNext() ) + { + SecurityRole securityRole = (SecurityRole) securityRoleIt.next(); + securityRole.appendSecurityRole( writer ); + } + writer.endElement(); close( w ); } - private void writeDescription(String description, XMLWriter writer) + private void writeDescription( String description, XMLWriter writer ) { if ( description != null ) { @@ -101,7 +110,7 @@ } } - private void writeDisplayName(String displayName, XMLWriter writer) + private void writeDisplayName( String displayName, XMLWriter writer ) { if ( displayName != null ) { Modified: maven/plugins/trunk/maven-ear-plugin/src/main/java/org/apache/maven/plugin/ear/GenerateApplicationXmlMojo.java URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-ear-plugin/src/main/java/org/apache/maven/plugin/ear/GenerateApplicationXmlMojo.java?rev=393260&r1=393259&r2=393260&view=diff ============================================================================== --- maven/plugins/trunk/maven-ear-plugin/src/main/java/org/apache/maven/plugin/ear/GenerateApplicationXmlMojo.java (original) +++ maven/plugins/trunk/maven-ear-plugin/src/main/java/org/apache/maven/plugin/ear/GenerateApplicationXmlMojo.java Tue Apr 11 10:00:18 2006 @@ -18,10 +18,14 @@ import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; +import org.codehaus.plexus.configuration.PlexusConfiguration; +import org.codehaus.plexus.configuration.PlexusConfigurationException; import org.codehaus.plexus.util.FileUtils; import java.io.File; import java.io.IOException; +import java.util.ArrayList; +import java.util.List; /** * A Mojo that generates the application.xml deployment descriptor file. @@ -82,12 +86,21 @@ private String encoding = UTF_8; /** + * The security-roles to be added to the auto-generated + * application.xml file. + * + * @parameter + */ + private PlexusConfiguration security; + + /** * Directory where the application.xml file will be auto-generated. * * @parameter expression="${project.build.directory}" */ private String generatedDescriptorLocation; + public void execute() throws MojoExecutionException, MojoFailureException { @@ -101,6 +114,7 @@ getLog().debug( "description[" + description + "]" ); getLog().debug( "encoding[" + encoding + "]" ); getLog().debug( "generatedDescriptorLocation[" + generatedDescriptorLocation + "]" ); + getLog().debug( "security[" + security + "]" ); if ( !generateApplicationXml.booleanValue() ) { @@ -151,6 +165,48 @@ File descriptor = new File( outputDir, "application.xml" ); ApplicationXmlWriter writer = new ApplicationXmlWriter( version, encoding ); - writer.write( descriptor, getModules(), displayName, description ); + writer.write( descriptor, getModules(), buildSecurityRoles(), displayName, description ); + } + + /** + * Builds the security roles based on the configuration. + * + * @return a list of SecurityRole object(s) + * @throws EarPluginException if the configuration is invalid + */ + private List buildSecurityRoles() + throws EarPluginException + { + try + { + final PlexusConfiguration[] securityRoles = security.getChildren( SecurityRole.SECURITY_ROLE ); + final List result = new ArrayList(); + for ( int i = 0; i < securityRoles.length; i++ ) + { + PlexusConfiguration securityRole = securityRoles[i]; + final String id = securityRole.getAttribute( SecurityRole.ID_ATTRIBUTE ); + final String roleName = securityRole.getChild( SecurityRole.ROLE_NAME ).getValue(); + final String roleNameId = + securityRole.getChild( SecurityRole.ROLE_NAME ).getAttribute( SecurityRole.ID_ATTRIBUTE ); + final String description = securityRole.getChild( SecurityRole.DESCRIPTION ).getValue(); + final String descriptionId = + securityRole.getChild( SecurityRole.DESCRIPTION ).getAttribute( SecurityRole.ID_ATTRIBUTE ); + + if ( roleName == null ) + { + throw new EarPluginException( "Invalid security-role configuration, role-name could not be null." ); + } + else + { + result.add( new SecurityRole( roleName, roleNameId, id, description, descriptionId ) ); + } + } + return result; + } + catch ( PlexusConfigurationException e ) + { + throw new EarPluginException( "Invalid security-role configuration", e ); + } + } } Added: maven/plugins/trunk/maven-ear-plugin/src/main/java/org/apache/maven/plugin/ear/SecurityRole.java URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-ear-plugin/src/main/java/org/apache/maven/plugin/ear/SecurityRole.java?rev=393260&view=auto ============================================================================== --- maven/plugins/trunk/maven-ear-plugin/src/main/java/org/apache/maven/plugin/ear/SecurityRole.java (added) +++ maven/plugins/trunk/maven-ear-plugin/src/main/java/org/apache/maven/plugin/ear/SecurityRole.java Tue Apr 11 10:00:18 2006 @@ -0,0 +1,134 @@ +package org.apache.maven.plugin.ear; + +import org.codehaus.plexus.util.xml.XMLWriter; + +/* + * Copyright 2001-2005 The Apache Software Foundation. + * + * Licensed 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. + */ + +/** + * The representation of a security-role entry within an + * application.xml file. + * + * @author <a href="[EMAIL PROTECTED]">Stephane Nicoll</a> + * @version $Id: SecurityRole.java 332974 2005-11-13 12:42:44Z snicoll $ + */ +class SecurityRole +{ + + protected static final String SECURITY_ROLE = "security-role"; + + protected static final String ID_ATTRIBUTE = "id"; + + protected static final String DESCRIPTION = "description"; + + protected static final String ROLE_NAME = "role-name"; + + private final String roleName; + + private final String roleNameId; + + private final String roleId; + + private final String description; + + private final String descriptionId; + + public SecurityRole( String roleName, String roleNameId, String roleId, String description, String descriptionId ) + { + if ( roleName == null ) + { + throw new NullPointerException( "role-name in security-role element could not be null." ); + } + this.roleName = roleName; + this.roleNameId = roleNameId; + this.roleId = roleId; + this.description = description; + this.descriptionId = descriptionId; + } + + public String getRoleName() + { + return roleName; + } + + public String getRoleNameId() + { + return roleNameId; + } + + public String getRoleId() + { + return roleId; + } + + public String getDescription() + { + return description; + } + + public String getDescriptionId() + { + return descriptionId; + } + + /** + * Appends the <tt>XML</tt> representation of this security role. + * + * @param writer the writer to use + */ + public void appendSecurityRole( XMLWriter writer ) + { + writer.startElement( SECURITY_ROLE ); + + // role id + if ( getRoleId() != null ) + { + writer.addAttribute( ID_ATTRIBUTE, getRoleId() ); + } + + // description + if ( getDescription() != null ) + { + writer.startElement( DESCRIPTION ); + if ( getDescriptionId() != null ) + { + writer.addAttribute( ID_ATTRIBUTE, getDescriptionId() ); + } + writer.writeText( getDescription() ); + writer.endElement(); + + } + + // role name + writer.startElement( ROLE_NAME ); + if ( getRoleNameId() != null ) + { + writer.addAttribute( ID_ATTRIBUTE, getRoleNameId() ); + } + writer.writeText( getRoleName() ); + writer.endElement(); + + // end of security-role + writer.endElement(); + } + + public String toString() + { + return "Security role " + getRoleName(); + } + + +} Modified: maven/plugins/trunk/maven-ear-plugin/src/site/apt/howto.apt URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-ear-plugin/src/site/apt/howto.apt?rev=393260&r1=393259&r2=393260&view=diff ============================================================================== --- maven/plugins/trunk/maven-ear-plugin/src/site/apt/howto.apt (original) +++ maven/plugins/trunk/maven-ear-plugin/src/site/apt/howto.apt Tue Apr 11 10:00:18 2006 @@ -12,9 +12,7 @@ application.xml. This generation is already customized by the goal's parameters, see {{{index.html}the goals description}}. - Ear modules might be further customized as follows: - - * contextRoot: the custom context root for a web application + Any Ear module might be further customized as follows: * bundleDir: the directory in the EAR structure where the artifact will be stored @@ -22,15 +20,18 @@ * uri: the complete path in the EAR structure for the artifact - Also, a dependency might be excluded from the generated EAR file by specifying the - excluded flag. + * excluded: excludes the artifact from the generated ear + + The context root of a Web module might be customized using the contextRoot parameter. Please note that third party libraries are not included in the generated application.xml (only ejb-client should be included in a <java> entry). However, a jar dependency could be included in the generated application.xml by specifying the includeInApplicationXml flag. - It is also possible to specify a default bundle directory for all third party libraries + It is also possible to specify a default bundle directory for all third party libraries. + + The security settings might be specified under the security parameter. Customizing the context root @@ -209,6 +210,34 @@ <includeInApplicationXml>true</includeInApplicationXml> </javaModule> </modules> + </configuration> + </plugin> + </plugins> + </build> ++--------- + + +Specifying security roles for the generated application.xml + + Security roles might be specified as follows + ++-------- + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-ear-plugin</artifactId> + <configuration> + [...] + <security> + <security-role id="SecurityRole_1234"> + <role-name>manager</role-name> + </security-role> + <security-role id="SecurityRole_5678"> + <description>My cool description</description> + <role-name id="RoleName_12">teller</role-name> + </security-role> + </security> </configuration> </plugin> </plugins>