You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by og...@apache.org on 2008/08/05 23:01:48 UTC

svn commit: r682947 - in /maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/src: main/java/ main/java/org/ main/java/org/apache/ main/java/org/apache/maven/ main/java/org/apache/maven/mercury/ main/java/org/apache/maven/mercury/repository/ main/...

Author: ogusakov
Date: Tue Aug  5 14:01:46 2008
New Revision: 682947

URL: http://svn.apache.org/viewvc?rev=682947&view=rev
Log:
added MetadataBuilder object to eliminate embedded java code in the .mdo

Added:
    maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/src/main/java/
    maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/src/main/java/org/
    maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/src/main/java/org/apache/
    maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/src/main/java/org/apache/maven/
    maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/src/main/java/org/apache/maven/mercury/
    maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/src/main/java/org/apache/maven/mercury/repository/
    maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/src/main/java/org/apache/maven/mercury/repository/metadata/
    maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/src/main/java/org/apache/maven/mercury/repository/metadata/MetadataBuilder.java
    maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/src/main/java/org/apache/maven/mercury/repository/metadata/MetadataException.java
    maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/src/test/java/
    maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/src/test/java/org/
    maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/src/test/java/org/apache/
    maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/src/test/java/org/apache/maven/
    maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/src/test/java/org/apache/maven/mercury/
    maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/src/test/java/org/apache/maven/mercury/repository/
    maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/src/test/java/org/apache/maven/mercury/repository/metadata/
    maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/src/test/java/org/apache/maven/mercury/repository/metadata/MetadataBuilderTest.java
Modified:
    maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/src/main/mdo/metadata.mdo

Added: maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/src/main/java/org/apache/maven/mercury/repository/metadata/MetadataBuilder.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/src/main/java/org/apache/maven/mercury/repository/metadata/MetadataBuilder.java?rev=682947&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/src/main/java/org/apache/maven/mercury/repository/metadata/MetadataBuilder.java (added)
+++ maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/src/main/java/org/apache/maven/mercury/repository/metadata/MetadataBuilder.java Tue Aug  5 14:01:46 2008
@@ -0,0 +1,228 @@
+package org.apache.maven.mercury.repository.metadata;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.util.Date;
+
+import org.apache.maven.mercury.repository.metadata.io.xpp3.MetadataXpp3Reader;
+import org.apache.maven.mercury.repository.metadata.io.xpp3.MetadataXpp3Writer;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+
+/**
+ * utility class to help with de/serializing metadata from/to XML
+ *
+ * @author Oleg Gusakov
+ * @version $Id$
+ *
+ */
+public class MetadataBuilder
+{
+  /**
+   * instantiate Metadata from a stream
+   * 
+   * @param in
+   * @return
+   * @throws MetadataException
+   */
+  public static Metadata read( InputStream in )
+  throws MetadataException
+  {
+    try
+    {
+      return new MetadataXpp3Reader().read( in );
+    }
+    catch( Exception e )
+    {
+      throw new MetadataException(e);
+    }
+  }
+  
+  public static Metadata write( Metadata metadata, OutputStream out )
+  throws MetadataException
+  {
+    if( metadata == null )
+      return metadata;
+
+    try
+    {
+      new MetadataXpp3Writer().write( new OutputStreamWriter(out), metadata );
+      
+      return metadata;
+    }
+    catch( Exception e )
+    {
+      throw new MetadataException(e);
+    }
+  }
+  
+  public static boolean merge( Metadata sourceMetadata, Metadata targetMetadata )
+  {
+      boolean changed = false;
+      
+      if( sourceMetadata == null || targetMetadata == null )
+        return false;
+
+      for ( java.util.Iterator i = sourceMetadata.getPlugins().iterator(); i.hasNext(); )
+      {
+          Plugin plugin = (Plugin) i.next();
+          boolean found = false;
+
+          for ( java.util.Iterator it = targetMetadata.getPlugins().iterator(); it.hasNext() && !found; )
+          {
+              Plugin preExisting = (Plugin) it.next();
+
+              if ( preExisting.getPrefix().equals( plugin.getPrefix() ) )
+              {
+                  found = true;
+              }
+          }
+
+          if ( !found )
+          {
+              Plugin mappedPlugin = new Plugin();
+
+              mappedPlugin.setArtifactId( plugin.getArtifactId() );
+
+              mappedPlugin.setPrefix( plugin.getPrefix() );
+
+              mappedPlugin.setName( plugin.getName() );
+
+              targetMetadata.addPlugin( mappedPlugin );
+
+              changed = true;
+          }
+      }
+
+      Versioning versioning = sourceMetadata.getVersioning();
+      if ( versioning != null )
+      {
+          Versioning v = targetMetadata.getVersioning();
+          if ( v == null )
+          {
+              v = new Versioning();
+              targetMetadata.setVersioning( v );
+              changed = true;
+          }
+
+          for ( java.util.Iterator i = versioning.getVersions().iterator(); i.hasNext(); )
+          {
+              String version = (String) i.next();
+              if ( !v.getVersions().contains( version ) )
+              {
+                  changed = true;
+                  v.getVersions().add( version );
+              }
+          }
+        
+          if ( "null".equals( versioning.getLastUpdated() ) )
+          {
+              versioning.setLastUpdated( null );
+          }
+
+          if ( "null".equals( v.getLastUpdated() ) )
+          {
+              v.setLastUpdated( null );
+          }
+
+          if ( versioning.getLastUpdated() == null || versioning.getLastUpdated().length() == 0 )
+          {
+              // this should only be for historical reasons - we assume local is newer
+              versioning.setLastUpdated( v.getLastUpdated() );
+          }
+
+          if ( v.getLastUpdated() == null || v.getLastUpdated().length() == 0 ||
+               versioning.getLastUpdated().compareTo( v.getLastUpdated() ) >= 0 )
+          {
+              changed = true;
+              v.setLastUpdated( versioning.getLastUpdated() );
+
+              if ( versioning.getRelease() != null )
+              {
+                  changed = true;
+                  v.setRelease( versioning.getRelease() );
+              }
+              if ( versioning.getLatest() != null )
+              {
+                  changed = true;
+                  v.setLatest( versioning.getLatest() );
+              }
+
+              Snapshot s = v.getSnapshot();
+              Snapshot snapshot = versioning.getSnapshot();
+              if ( snapshot != null )
+              {
+                  if ( s == null )
+                  {
+                      s = new Snapshot();
+                      v.setSnapshot( s );
+                      changed = true;
+                  }
+
+                  // overwrite
+                  if ( s.getTimestamp() == null ? snapshot.getTimestamp() != null
+                      : !s.getTimestamp().equals( snapshot.getTimestamp() ) )
+                  {
+                      s.setTimestamp( snapshot.getTimestamp() );
+                      changed = true;
+                  }
+                  if ( s.getBuildNumber() != snapshot.getBuildNumber() )
+                  {
+                      s.setBuildNumber( snapshot.getBuildNumber() );
+                      changed = true;
+                  }
+                  if ( s.isLocalCopy() != snapshot.isLocalCopy() )
+                  {
+                      s.setLocalCopy( snapshot.isLocalCopy() );
+                      changed = true;
+                  }
+              }
+          }
+      }
+      return changed;
+  }
+  
+  /**
+   * update snapshot timestamp to now
+   * 
+   * @param target
+   */
+  public static void updateTimestamp( Snapshot target )
+  {
+      target.setTimestamp( getUTCTimestamp() );
+  }
+  
+  /**
+   * update versioning's lastUpdated timestamp to now
+   * 
+   * @param target
+   */
+  public static void updateTimestamp( Versioning target )
+  {
+      target.setLastUpdated( getUTCTimestamp() );
+  }
+  
+  /**
+   * 
+   * @return current UTC timestamp by yyyyMMddHHmmss mask
+   */
+  public static String getUTCTimestamp( )
+  {
+    return getUTCTimestamp( new Date() );
+  }
+
+  /**
+   * 
+   * @param date
+   * @return current date converted to UTC timestamp by yyyyMMddHHmmss mask
+   */
+  public static String getUTCTimestamp( Date date )
+  {
+      java.util.TimeZone timezone = java.util.TimeZone.getTimeZone( "UTC" );
+      java.text.DateFormat fmt = new java.text.SimpleDateFormat( "yyyyMMddHHmmss" );
+      fmt.setTimeZone( timezone );
+      return fmt.format( date );
+  }
+  
+}

Added: maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/src/main/java/org/apache/maven/mercury/repository/metadata/MetadataException.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/src/main/java/org/apache/maven/mercury/repository/metadata/MetadataException.java?rev=682947&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/src/main/java/org/apache/maven/mercury/repository/metadata/MetadataException.java (added)
+++ maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/src/main/java/org/apache/maven/mercury/repository/metadata/MetadataException.java Tue Aug  5 14:01:46 2008
@@ -0,0 +1,50 @@
+package org.apache.maven.mercury.repository.metadata;
+
+/**
+ *
+ *
+ * @author Oleg Gusakov
+ * @version $Id$
+ *
+ */
+public class MetadataException
+    extends Exception
+{
+
+  /**
+   * 
+   */
+  public MetadataException()
+  {
+  }
+
+  /**
+   * @param message
+   */
+  public MetadataException(
+      String message )
+  {
+    super( message );
+  }
+
+  /**
+   * @param cause
+   */
+  public MetadataException(
+      Throwable cause )
+  {
+    super( cause );
+  }
+
+  /**
+   * @param message
+   * @param cause
+   */
+  public MetadataException(
+      String message,
+      Throwable cause )
+  {
+    super( message, cause );
+  }
+
+}

Modified: maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/src/main/mdo/metadata.mdo
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/src/main/mdo/metadata.mdo?rev=682947&r1=682946&r2=682947&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/src/main/mdo/metadata.mdo (original)
+++ maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/src/main/mdo/metadata.mdo Tue Aug  5 14:01:46 2008
@@ -68,136 +68,7 @@
           </association>
         </field>
       </fields>
-      <codeSegments>
-        <codeSegment>
-          <version>1.0.0</version>
-          <code><![CDATA[
-    public boolean merge( Metadata sourceMetadata )
-    {
-        boolean changed = false;
-
-        for ( java.util.Iterator i = sourceMetadata.getPlugins().iterator(); i.hasNext(); )
-        {
-            Plugin plugin = (Plugin) i.next();
-            boolean found = false;
-
-            for ( java.util.Iterator it = getPlugins().iterator(); it.hasNext() && !found; )
-            {
-                Plugin preExisting = (Plugin) it.next();
-
-                if ( preExisting.getPrefix().equals( plugin.getPrefix() ) )
-                {
-                    found = true;
-                }
-            }
-
-            if ( !found )
-            {
-                Plugin mappedPlugin = new Plugin();
-
-                mappedPlugin.setArtifactId( plugin.getArtifactId() );
-
-                mappedPlugin.setPrefix( plugin.getPrefix() );
-
-                mappedPlugin.setName( plugin.getName() );
-
-                addPlugin( mappedPlugin );
-
-                changed = true;
-            }
-        }
-
-        Versioning versioning = sourceMetadata.getVersioning();
-        if ( versioning != null )
-        {
-            Versioning v = getVersioning();
-            if ( v == null )
-            {
-                v = new Versioning();
-                setVersioning( v );
-                changed = true;
-            }
-
-            for ( java.util.Iterator i = versioning.getVersions().iterator(); i.hasNext(); )
-            {
-                String version = (String) i.next();
-                if ( !v.getVersions().contains( version ) )
-                {
-                    changed = true;
-                    v.getVersions().add( version );
-                }
-            }
-          
-            if ( "null".equals( versioning.getLastUpdated() ) )
-            {
-                versioning.setLastUpdated( null );
-            }
-
-            if ( "null".equals( v.getLastUpdated() ) )
-            {
-                v.setLastUpdated( null );
-            }
-
-            if ( versioning.getLastUpdated() == null || versioning.getLastUpdated().length() == 0 )
-            {
-                // this should only be for historical reasons - we assume local is newer
-                versioning.setLastUpdated( v.getLastUpdated() );
-            }
-
-            if ( v.getLastUpdated() == null || v.getLastUpdated().length() == 0 ||
-                 versioning.getLastUpdated().compareTo( v.getLastUpdated() ) >= 0 )
-            {
-                changed = true;
-                v.setLastUpdated( versioning.getLastUpdated() );
-
-                if ( versioning.getRelease() != null )
-                {
-                    changed = true;
-                    v.setRelease( versioning.getRelease() );
-                }
-                if ( versioning.getLatest() != null )
-                {
-                    changed = true;
-                    v.setLatest( versioning.getLatest() );
-                }
-
-                Snapshot s = v.getSnapshot();
-                Snapshot snapshot = versioning.getSnapshot();
-                if ( snapshot != null )
-                {
-                    if ( s == null )
-                    {
-                        s = new Snapshot();
-                        v.setSnapshot( s );
-                        changed = true;
-                    }
-
-                    // overwrite
-                    if ( s.getTimestamp() == null ? snapshot.getTimestamp() != null
-                        : !s.getTimestamp().equals( snapshot.getTimestamp() ) )
-                    {
-                        s.setTimestamp( snapshot.getTimestamp() );
-                        changed = true;
-                    }
-                    if ( s.getBuildNumber() != snapshot.getBuildNumber() )
-                    {
-                        s.setBuildNumber( snapshot.getBuildNumber() );
-                        changed = true;
-                    }
-                    if ( s.isLocalCopy() != snapshot.isLocalCopy() )
-                    {
-                        s.setLocalCopy( snapshot.isLocalCopy() );
-                        changed = true;
-                    }
-                }
-            }
-        }
-        return changed;
-    }
-          ]]></code>
-        </codeSegment>
-      </codeSegments>
-    </class>
+     </class>
     <class>
       <name>Versioning</name>
       <version>1.0.0</version>
@@ -239,25 +110,6 @@
           <description>When the metadata was last updated</description>
         </field>
       </fields>
-      <codeSegments>
-        <codeSegment>
-          <version>1.0.0</version>
-          <code>
-            public void updateTimestamp()
-            {
-                setLastUpdatedTimestamp( new java.util.Date() );
-            }
-
-            public void setLastUpdatedTimestamp( java.util.Date date )
-            {
-                java.util.TimeZone timezone = java.util.TimeZone.getTimeZone( "UTC" );
-                java.text.DateFormat fmt = new java.text.SimpleDateFormat( "yyyyMMddHHmmss" );
-                fmt.setTimeZone( timezone );
-                setLastUpdated( fmt.format( date ) );
-            }
-          </code>
-        </codeSegment>
-      </codeSegments>
     </class>
     <class>
       <name>Snapshot</name>

Added: maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/src/test/java/org/apache/maven/mercury/repository/metadata/MetadataBuilderTest.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/src/test/java/org/apache/maven/mercury/repository/metadata/MetadataBuilderTest.java?rev=682947&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/src/test/java/org/apache/maven/mercury/repository/metadata/MetadataBuilderTest.java (added)
+++ maven/sandbox/trunk/mercury/mercury-md/mercury-md-shared/src/test/java/org/apache/maven/mercury/repository/metadata/MetadataBuilderTest.java Tue Aug  5 14:01:46 2008
@@ -0,0 +1,90 @@
+package org.apache.maven.mercury.repository.metadata;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+
+/**
+ *
+ *
+ * @author Oleg Gusakov
+ * @version $Id$
+ *
+ */
+public class MetadataBuilderTest
+    extends TestCase
+{
+  MetadataBuilder mb;
+  File testBase = new File("./target/test-classes/controlledRepo");
+
+  //-------------------------------------------------------------------------
+  @Override
+  protected void setUp()
+  throws Exception
+  {
+    File temp = new File( testBase, "group-maven-metadata-write.xml");
+    if( temp.exists() )
+      temp.delete();
+  }
+
+  protected void tearDown()
+  throws Exception
+  {
+  }
+  //-------------------------------------------------------------------------
+  public void testReadGroupMd()
+  throws FileNotFoundException, IOException, XmlPullParserException, MetadataException
+  {
+    File groupMd = new File( testBase, "group-maven-metadata.xml");
+     Metadata mmd = MetadataBuilder.read(  new FileInputStream( groupMd ) );
+
+     assertNotNull( mmd );
+     assertEquals("a", mmd.getGroupId() );
+     assertEquals("a", mmd.getArtifactId() );
+
+     assertNotNull( mmd.getVersioning() );
+    
+     List<String> versions = mmd.getVersioning().getVersions();
+    
+     assertNotNull( versions );
+     assertEquals( 4, versions.size() );
+  }
+  //-------------------------------------------------------------------------
+  public void testWriteGroupMd()
+  throws FileNotFoundException, IOException, XmlPullParserException, MetadataException
+  {
+    File groupMd = new File( testBase, "group-maven-metadata-write.xml");
+    Metadata md = new Metadata();
+    md.setGroupId( "a" );
+    md.setArtifactId( "a" );
+    md.setVersion( "1.0.0" );
+    Versioning v = new Versioning();
+    v.addVersion( "1.0.0" );
+    v.addVersion( "2.0.0" );
+    md.setVersioning( v );
+    
+     MetadataBuilder.write(  md, new FileOutputStream( groupMd ) );
+     Metadata mmd = MetadataBuilder.read( new FileInputStream(groupMd) );
+
+     assertNotNull( mmd );
+     assertEquals("a", mmd.getGroupId() );
+     assertEquals("a", mmd.getArtifactId() );
+     assertEquals("1.0.0", mmd.getVersion() );
+
+     assertNotNull( mmd.getVersioning() );
+    
+     List<String> versions = mmd.getVersioning().getVersions();
+    
+     assertNotNull( versions );
+     assertEquals( 2, versions.size() );
+  }
+  //-------------------------------------------------------------------------
+  //-------------------------------------------------------------------------
+}