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             JeeUtils.getJeeDescriptorFromServletVersion( JeeUtils.resolveServletVersion( config.getProject() ) ).getJeeVersion();
159 
160         if ( jeeVersion == null )
161         {
162             return JeeDescriptor.JEE_1_4;
163         }
164 
165         return jeeVersion;
166     }
167 }