1 package org.apache.maven.plugin.eclipse.writers.myeclipse;
2
3 import java.io.File;
4 import java.io.FileWriter;
5 import java.io.IOException;
6
7 import org.apache.maven.plugin.MojoExecutionException;
8 import org.apache.maven.plugin.eclipse.Constants;
9 import org.apache.maven.plugin.eclipse.Messages;
10 import org.apache.maven.plugin.eclipse.writers.AbstractEclipseWriter;
11 import org.apache.maven.plugin.ide.IdeUtils;
12 import org.apache.maven.plugin.ide.JeeDescriptor;
13 import org.apache.maven.plugin.ide.JeeUtils;
14 import org.codehaus.plexus.util.IOUtil;
15 import org.codehaus.plexus.util.xml.PrettyPrintXMLWriter;
16 import org.codehaus.plexus.util.xml.XMLWriter;
17
18
19
20
21
22
23 public class MyEclipseMetadataWriter
24 extends AbstractEclipseWriter
25 {
26
27 private static final String MYECLIPSE_MYMETADATA_FILENAME = ".mymetadata";
28
29 private static final String MYECLIPSE_METADATA_PROJECT = "project-module";
30
31 private static final String MYECLIPSE_METADATA_PROJECT_TYPE = "type";
32
33 private static final String MYECLIPSE_METADATA_PROJECT_NAME = "name";
34
35 private static final String MYECLIPSE_METADATA_PROJECT_ID = "id";
36
37 private static final String MYECLIPSE_METADATA_PROJECT_CONTEXT_ROOT = "context-root";
38
39 private static final String MYECLIPSE_METADATA_PROJECT_J2EE_SPEC = "j2ee-spec";
40
41 private static final String MYECLIPSE_METADATA_PROJECT_ARCHIVE = "archive";
42
43 private static final String MYECLIPSE_METADATA_PROJECT_TYPE_WAR = "WEB";
44
45 private static final String MYECLIPSE_METADATA_PROJECT_TYPE_EAR = "EAR";
46
47 private static final String MYECLIPSE_METADATA_PROJECT_TYPE_EJB = "EJB";
48
49 private static final String MYECLIPSE_METADATA_PROJECT_ATTRIBUTES = "attributes";
50
51 private static final String MYECLIPSE_METADATA_PROJECT_ATTRIBUTE = "attribute";
52
53
54
55
56
57
58 public void write()
59 throws MojoExecutionException
60 {
61 String packaging = config.getProject().getPackaging();
62
63 if ( !Constants.PROJECT_PACKAGING_EAR.equalsIgnoreCase( packaging )
64 && !Constants.PROJECT_PACKAGING_WAR.equalsIgnoreCase( packaging )
65 && !Constants.PROJECT_PACKAGING_EJB.equalsIgnoreCase( packaging ) )
66 {
67 return;
68 }
69
70 FileWriter w;
71
72 try
73 {
74 w = new FileWriter( new File( config.getEclipseProjectDirectory(), MYECLIPSE_MYMETADATA_FILENAME ) );
75 }
76 catch ( IOException ex )
77 {
78 throw new MojoExecutionException( Messages.getString( "EclipsePlugin.erroropeningfile" ), ex );
79 }
80
81 XMLWriter writer = new PrettyPrintXMLWriter( w, "UTF-8", null );
82
83 writer.startElement( MYECLIPSE_METADATA_PROJECT );
84 writer.addAttribute( MYECLIPSE_METADATA_PROJECT_TYPE, getMyEclipseProjectType( packaging ) );
85 writer.addAttribute( MYECLIPSE_METADATA_PROJECT_NAME, config.getEclipseProjectName() );
86 writer.addAttribute( MYECLIPSE_METADATA_PROJECT_ID, config.getEclipseProjectName() );
87
88 if ( Constants.PROJECT_PACKAGING_WAR.equalsIgnoreCase( packaging ) )
89 {
90
91
92 String warContextRoot =
93 IdeUtils.getPluginSetting( config.getProject(), JeeUtils.ARTIFACT_MAVEN_WAR_PLUGIN, "warContextRoot",
94 "/" + config.getProject().getArtifactId() );
95
96 writer.addAttribute( MYECLIPSE_METADATA_PROJECT_CONTEXT_ROOT, warContextRoot );
97
98 writer.addAttribute( MYECLIPSE_METADATA_PROJECT_J2EE_SPEC, getJeeVersion() );
99
100 writer.addAttribute( MYECLIPSE_METADATA_PROJECT_ARCHIVE, config.getEclipseProjectName() + ".war" );
101 }
102
103 if ( Constants.PROJECT_PACKAGING_EAR.equalsIgnoreCase( packaging ) )
104 {
105
106 writer.addAttribute( MYECLIPSE_METADATA_PROJECT_ARCHIVE, config.getEclipseProjectName() + ".ear" );
107 }
108
109 writer.startElement( MYECLIPSE_METADATA_PROJECT_ATTRIBUTES );
110 if ( Constants.PROJECT_PACKAGING_WAR.equalsIgnoreCase( packaging ) )
111 {
112 writer.startElement( MYECLIPSE_METADATA_PROJECT_ATTRIBUTE );
113 writer.addAttribute( "name", "webrootdir" );
114
115 writer.addAttribute( "value", "src/main/webapp" );
116 writer.endElement();
117 }
118
119 writer.endElement();
120
121
122 writer.endElement();
123
124 IOUtil.close( w );
125 }
126
127
128
129
130
131 private String getMyEclipseProjectType( String packaging )
132 {
133 if ( Constants.PROJECT_PACKAGING_WAR.equalsIgnoreCase( packaging ) )
134 {
135 return MYECLIPSE_METADATA_PROJECT_TYPE_WAR;
136 }
137 if ( Constants.PROJECT_PACKAGING_EAR.equalsIgnoreCase( packaging ) )
138 {
139 return MYECLIPSE_METADATA_PROJECT_TYPE_EAR;
140 }
141 if ( Constants.PROJECT_PACKAGING_EJB.equalsIgnoreCase( packaging ) )
142 {
143 return MYECLIPSE_METADATA_PROJECT_TYPE_EJB;
144 }
145
146 return null;
147 }
148
149
150
151
152
153
154
155 private String getJeeVersion()
156 {
157 String jeeVersion;
158 if ( config.getJeeVersion() != null )
159 {
160 jeeVersion = JeeUtils.getJeeDescriptorFromJeeVersion( config.getJeeVersion() ).getJeeVersion();
161 }
162 else
163 {
164 jeeVersion =
165 JeeUtils.getJeeDescriptorFromServletVersion( JeeUtils.resolveServletVersion( config.getProject() ) ).getJeeVersion();
166 }
167
168 if ( jeeVersion == null )
169 {
170 return JeeDescriptor.JEE_1_4;
171 }
172
173 return jeeVersion;
174 }
175 }