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() );
+ }
+ //-------------------------------------------------------------------------
+ //-------------------------------------------------------------------------
+}