1 package org.apache.maven.plugin.ear;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import org.apache.maven.plugin.MojoExecutionException;
23 import org.apache.maven.plugin.MojoFailureException;
24 import org.codehaus.plexus.configuration.PlexusConfiguration;
25 import org.codehaus.plexus.configuration.PlexusConfigurationException;
26 import org.codehaus.plexus.util.FileUtils;
27
28 import java.io.File;
29 import java.io.IOException;
30 import java.util.ArrayList;
31 import java.util.List;
32
33
34
35
36
37
38
39
40
41
42 public class GenerateApplicationXmlMojo
43 extends AbstractEarMojo
44 {
45
46
47
48
49
50
51
52
53 private Boolean generateApplicationXml = Boolean.TRUE;
54
55
56
57
58
59
60
61 private String displayName;
62
63
64
65
66
67
68
69 private String description;
70
71
72
73
74
75
76
77 private PlexusConfiguration security;
78
79
80 public void execute()
81 throws MojoExecutionException, MojoFailureException
82 {
83
84 super.execute();
85
86
87 if ( !generateApplicationXml.booleanValue() )
88 {
89 getLog().debug( "Generation of application.xml is disabled" );
90 }
91 else
92 {
93
94 if ( !version.equals( VERSION_1_3 ) && !version.equals( VERSION_1_4 ) && !version.equals( VERSION_5 ) )
95 {
96 throw new MojoExecutionException( "Invalid version[" + version + "]" );
97 }
98
99
100 getLog().info( "Generating application.xml" );
101 try
102 {
103 generateStandardDeploymentDescriptor();
104 }
105 catch ( EarPluginException e )
106 {
107 throw new MojoExecutionException( "Failed to generate application.xml", e );
108 }
109
110 try
111 {
112 FileUtils.copyFileToDirectory( new File( generatedDescriptorLocation, "application.xml" ),
113 new File( getWorkDirectory(), "META-INF" ) );
114 }
115 catch ( IOException e )
116 {
117 throw new MojoExecutionException( "Unable to copy application.xml to final destination", e );
118 }
119 }
120
121
122 if ( getJbossConfiguration() == null )
123 {
124 getLog().debug( "Generation of jboss-app.xml is disabled" );
125 return;
126 }
127 else
128 {
129
130 getLog().info( "Generating jboss-app.xml" );
131 try
132 {
133 generateJbossDeploymentDescriptor();
134 }
135 catch ( EarPluginException e )
136 {
137 throw new MojoExecutionException( "Failed to generate jboss-app.xml", e );
138 }
139
140 try
141 {
142 FileUtils.copyFileToDirectory( new File( generatedDescriptorLocation, "jboss-app.xml" ),
143 new File( getWorkDirectory(), "META-INF" ) );
144 }
145 catch ( IOException e )
146 {
147 throw new MojoExecutionException( "Unable to copy jboss-app.xml to final destination", e );
148 }
149 }
150 }
151
152
153
154
155 protected void generateStandardDeploymentDescriptor()
156 throws EarPluginException
157 {
158 File outputDir = new File( generatedDescriptorLocation );
159 if ( !outputDir.exists() )
160 {
161 outputDir.mkdirs();
162 }
163
164 File descriptor = new File( outputDir, "application.xml" );
165
166 final ApplicationXmlWriter writer = new ApplicationXmlWriter( version, encoding );
167 final ApplicationXmlWriterContext context = new ApplicationXmlWriterContext(descriptor, getModules(),
168 buildSecurityRoles(), displayName, description, defaultLibBundleDir);
169 writer.write( context );
170 }
171
172
173
174
175 protected void generateJbossDeploymentDescriptor()
176 throws EarPluginException
177 {
178 File outputDir = new File( generatedDescriptorLocation );
179 if ( !outputDir.exists() )
180 {
181 outputDir.mkdirs();
182 }
183
184 File descriptor = new File( outputDir, "jboss-app.xml" );
185
186 JbossAppXmlWriter writer = new JbossAppXmlWriter( encoding );
187 writer.write( descriptor, getJbossConfiguration(), getModules() );
188 }
189
190
191
192
193
194
195
196 private List buildSecurityRoles()
197 throws EarPluginException
198 {
199 final List result = new ArrayList();
200 if ( security == null )
201 {
202 return result;
203 }
204 try
205 {
206 final PlexusConfiguration[] securityRoles = security.getChildren( SecurityRole.SECURITY_ROLE );
207
208 for ( int i = 0; i < securityRoles.length; i++ )
209 {
210 PlexusConfiguration securityRole = securityRoles[i];
211 final String id = securityRole.getAttribute( SecurityRole.ID_ATTRIBUTE );
212 final String roleName = securityRole.getChild( SecurityRole.ROLE_NAME ).getValue();
213 final String roleNameId =
214 securityRole.getChild( SecurityRole.ROLE_NAME ).getAttribute( SecurityRole.ID_ATTRIBUTE );
215 final String description = securityRole.getChild( SecurityRole.DESCRIPTION ).getValue();
216 final String descriptionId =
217 securityRole.getChild( SecurityRole.DESCRIPTION ).getAttribute( SecurityRole.ID_ATTRIBUTE );
218
219 if ( roleName == null )
220 {
221 throw new EarPluginException( "Invalid security-role configuration, role-name could not be null." );
222 }
223 else
224 {
225 result.add( new SecurityRole( roleName, roleNameId, id, description, descriptionId ) );
226 }
227 }
228 return result;
229 }
230 catch ( PlexusConfigurationException e )
231 {
232 throw new EarPluginException( "Invalid security-role configuration", e );
233 }
234
235 }
236 }