View Javadoc

1   /*
2    * $Id$
3    */
4   
5   package org.apache.maven.artifact.repository.metadata.io.xpp3;
6   
7     //---------------------------------/
8    //- Imported classes and packages -/
9   //---------------------------------/
10  
11  import java.io.Writer;
12  import java.text.DateFormat;
13  import java.util.Iterator;
14  import java.util.Locale;
15  import org.apache.maven.artifact.repository.metadata.Metadata;
16  import org.apache.maven.artifact.repository.metadata.Plugin;
17  import org.apache.maven.artifact.repository.metadata.Snapshot;
18  import org.apache.maven.artifact.repository.metadata.Versioning;
19  import org.codehaus.plexus.util.xml.pull.MXSerializer;
20  import org.codehaus.plexus.util.xml.pull.XmlSerializer;
21  
22  /**
23   * Class MetadataXpp3Writer.
24   * 
25   * @version $Revision$ $Date$
26   */
27  public class MetadataXpp3Writer {
28  
29  
30        //--------------------------/
31       //- Class/Member Variables -/
32      //--------------------------/
33  
34      /**
35       * Field NAMESPACE.
36       */
37      private String NAMESPACE;
38  
39  
40        //-----------/
41       //- Methods -/
42      //-----------/
43  
44      /**
45       * Method write.
46       * 
47       * @param writer
48       * @param metadata
49       * @throws java.io.IOException
50       */
51      public void write( Writer writer, Metadata metadata )
52          throws java.io.IOException
53      {
54          XmlSerializer serializer = new MXSerializer();
55          serializer.setProperty( "http://xmlpull.org/v1/doc/properties.html#serializer-indentation", "  " );
56          serializer.setProperty( "http://xmlpull.org/v1/doc/properties.html#serializer-line-separator", "\n" );
57          serializer.setOutput( writer );
58          serializer.startDocument( metadata.getModelEncoding(), null );
59          writeMetadata( metadata, "metadata", serializer );
60          serializer.endDocument();
61      } //-- void write( Writer, Metadata ) 
62  
63      /**
64       * Method writeMetadata.
65       * 
66       * @param metadata
67       * @param serializer
68       * @param tagName
69       * @throws java.io.IOException
70       */
71      private void writeMetadata( Metadata metadata, String tagName, XmlSerializer serializer )
72          throws java.io.IOException
73      {
74          if ( metadata != null )
75          {
76              serializer.startTag( NAMESPACE, tagName );
77              if ( metadata.getGroupId() != null )
78              {
79                  serializer.startTag( NAMESPACE, "groupId" ).text( metadata.getGroupId() ).endTag( NAMESPACE, "groupId" );
80              }
81              if ( metadata.getArtifactId() != null )
82              {
83                  serializer.startTag( NAMESPACE, "artifactId" ).text( metadata.getArtifactId() ).endTag( NAMESPACE, "artifactId" );
84              }
85              if ( metadata.getVersion() != null )
86              {
87                  serializer.startTag( NAMESPACE, "version" ).text( metadata.getVersion() ).endTag( NAMESPACE, "version" );
88              }
89              if ( metadata.getVersioning() != null )
90              {
91                  writeVersioning( (Versioning) metadata.getVersioning(), "versioning", serializer );
92              }
93              if ( metadata.getPlugins() != null && metadata.getPlugins().size() > 0 )
94              {
95                  serializer.startTag( NAMESPACE, "plugins" );
96                  for ( Iterator iter = metadata.getPlugins().iterator(); iter.hasNext(); )
97                  {
98                      Plugin o = (Plugin) iter.next();
99                      writePlugin( o, "plugin", serializer );
100                 }
101                 serializer.endTag( NAMESPACE, "plugins" );
102             }
103             serializer.endTag( NAMESPACE, tagName );
104         }
105     } //-- void writeMetadata( Metadata, String, XmlSerializer ) 
106 
107     /**
108      * Method writePlugin.
109      * 
110      * @param plugin
111      * @param serializer
112      * @param tagName
113      * @throws java.io.IOException
114      */
115     private void writePlugin( Plugin plugin, String tagName, XmlSerializer serializer )
116         throws java.io.IOException
117     {
118         if ( plugin != null )
119         {
120             serializer.startTag( NAMESPACE, tagName );
121             if ( plugin.getName() != null )
122             {
123                 serializer.startTag( NAMESPACE, "name" ).text( plugin.getName() ).endTag( NAMESPACE, "name" );
124             }
125             if ( plugin.getPrefix() != null )
126             {
127                 serializer.startTag( NAMESPACE, "prefix" ).text( plugin.getPrefix() ).endTag( NAMESPACE, "prefix" );
128             }
129             if ( plugin.getArtifactId() != null )
130             {
131                 serializer.startTag( NAMESPACE, "artifactId" ).text( plugin.getArtifactId() ).endTag( NAMESPACE, "artifactId" );
132             }
133             serializer.endTag( NAMESPACE, tagName );
134         }
135     } //-- void writePlugin( Plugin, String, XmlSerializer ) 
136 
137     /**
138      * Method writeSnapshot.
139      * 
140      * @param snapshot
141      * @param serializer
142      * @param tagName
143      * @throws java.io.IOException
144      */
145     private void writeSnapshot( Snapshot snapshot, String tagName, XmlSerializer serializer )
146         throws java.io.IOException
147     {
148         if ( snapshot != null )
149         {
150             serializer.startTag( NAMESPACE, tagName );
151             if ( snapshot.getTimestamp() != null )
152             {
153                 serializer.startTag( NAMESPACE, "timestamp" ).text( snapshot.getTimestamp() ).endTag( NAMESPACE, "timestamp" );
154             }
155             if ( snapshot.getBuildNumber() != 0 )
156             {
157                 serializer.startTag( NAMESPACE, "buildNumber" ).text( String.valueOf( snapshot.getBuildNumber() ) ).endTag( NAMESPACE, "buildNumber" );
158             }
159             if ( snapshot.isLocalCopy() != false )
160             {
161                 serializer.startTag( NAMESPACE, "localCopy" ).text( String.valueOf( snapshot.isLocalCopy() ) ).endTag( NAMESPACE, "localCopy" );
162             }
163             serializer.endTag( NAMESPACE, tagName );
164         }
165     } //-- void writeSnapshot( Snapshot, String, XmlSerializer ) 
166 
167     /**
168      * Method writeVersioning.
169      * 
170      * @param versioning
171      * @param serializer
172      * @param tagName
173      * @throws java.io.IOException
174      */
175     private void writeVersioning( Versioning versioning, String tagName, XmlSerializer serializer )
176         throws java.io.IOException
177     {
178         if ( versioning != null )
179         {
180             serializer.startTag( NAMESPACE, tagName );
181             if ( versioning.getLatest() != null )
182             {
183                 serializer.startTag( NAMESPACE, "latest" ).text( versioning.getLatest() ).endTag( NAMESPACE, "latest" );
184             }
185             if ( versioning.getRelease() != null )
186             {
187                 serializer.startTag( NAMESPACE, "release" ).text( versioning.getRelease() ).endTag( NAMESPACE, "release" );
188             }
189             if ( versioning.getSnapshot() != null )
190             {
191                 writeSnapshot( (Snapshot) versioning.getSnapshot(), "snapshot", serializer );
192             }
193             if ( versioning.getVersions() != null && versioning.getVersions().size() > 0 )
194             {
195                 serializer.startTag( NAMESPACE, "versions" );
196                 for ( Iterator iter = versioning.getVersions().iterator(); iter.hasNext(); )
197                 {
198                     String version = (String) iter.next();
199                     serializer.startTag( NAMESPACE, "version" ).text( version ).endTag( NAMESPACE, "version" );
200                 }
201                 serializer.endTag( NAMESPACE, "versions" );
202             }
203             if ( versioning.getLastUpdated() != null )
204             {
205                 serializer.startTag( NAMESPACE, "lastUpdated" ).text( versioning.getLastUpdated() ).endTag( NAMESPACE, "lastUpdated" );
206             }
207             serializer.endTag( NAMESPACE, tagName );
208         }
209     } //-- void writeVersioning( Versioning, String, XmlSerializer ) 
210 
211 
212 }