diff options
author | Joakim Erdfelt <joakime@apache.org> | 2007-04-17 14:11:58 +0000 |
---|---|---|
committer | Joakim Erdfelt <joakime@apache.org> | 2007-04-17 14:11:58 +0000 |
commit | 3f7a13c5a6af5b52c31e4c5279679444778ec42b (patch) | |
tree | 8390a870e6d21e47f232a733b11274074b3f765f /archiva-base/archiva-repository-layer | |
parent | e37599c55944dc4c22a5ec49ddb7b6747386feb7 (diff) | |
download | archiva-3f7a13c5a6af5b52c31e4c5279679444778ec42b.tar.gz archiva-3f7a13c5a6af5b52c31e4c5279679444778ec42b.zip |
* Adding Project/Versioned/Artifact functionality to BidirectionalRepositoryLayout.
* Adding Metadata Reader/Write/Merge.
git-svn-id: https://svn.apache.org/repos/asf/maven/archiva/branches/archiva-jpox-database-refactor@529616 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'archiva-base/archiva-repository-layer')
11 files changed, 455 insertions, 31 deletions
diff --git a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/DefaultBidirectionalRepositoryLayout.java b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/DefaultBidirectionalRepositoryLayout.java index c2ad43246..b86ef27cd 100644 --- a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/DefaultBidirectionalRepositoryLayout.java +++ b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/DefaultBidirectionalRepositoryLayout.java @@ -64,8 +64,9 @@ public class DefaultBidirectionalRepositoryLayout public String toPath( ArtifactReference artifact ) { - return toPath( artifact.getGroupId(), artifact.getArtifactId(), artifact.getVersion(), artifact.getVersion(), - artifact.getClassifier(), artifact.getType() ); + String baseVersion = VersionUtil.getBaseVersion( artifact.getVersion() ); + return toPath( artifact.getGroupId(), artifact.getArtifactId(), baseVersion, artifact.getVersion(), artifact + .getClassifier(), artifact.getType() ); } private String toPath( String groupId, String artifactId, String baseVersion, String version, String classifier, diff --git a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/metadata/RepositoryMetadataMerge.java b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/metadata/RepositoryMetadataMerge.java new file mode 100644 index 000000000..50b89776c --- /dev/null +++ b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/metadata/RepositoryMetadataMerge.java @@ -0,0 +1,131 @@ +package org.apache.maven.archiva.repository.metadata; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import org.apache.maven.archiva.model.ArchivaModelCloner; +import org.apache.maven.archiva.model.ArchivaRepositoryMetadata; +import org.apache.maven.archiva.model.SnapshotVersion; + +import java.util.Iterator; +import java.util.List; + +/** + * RepositoryMetadataMerge + * + * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a> + * @version $Id$ + */ +public class RepositoryMetadataMerge +{ + public static ArchivaRepositoryMetadata merge( final ArchivaRepositoryMetadata mainMetadata, + final ArchivaRepositoryMetadata sourceMetadata ) + throws RepositoryMetadataException + { + if ( mainMetadata == null ) + { + throw new RepositoryMetadataException( "Cannot merge a null main project." ); + } + + if ( sourceMetadata == null ) + { + throw new RepositoryMetadataException( "Cannot copy to a null parent project." ); + } + + ArchivaRepositoryMetadata merged = new ArchivaRepositoryMetadata(); + + merged.setGroupId( merge( mainMetadata.getGroupId(), sourceMetadata.getGroupId() ) ); + + merged.setReleasedVersion( merge( mainMetadata.getReleasedVersion(), sourceMetadata.getReleasedVersion() ) ); + merged.setSnapshotVersion( merge( mainMetadata.getSnapshotVersion(), sourceMetadata.getSnapshotVersion() ) ); + merged.setLastUpdated( merge( mainMetadata.getLastUpdated(), sourceMetadata.getLastUpdated() ) ); + merged.setAvailableVersions( mergeAvailableVersions( mainMetadata.getAvailableVersions(), sourceMetadata + .getAvailableVersions() ) ); + + return merged; + } + + private static boolean empty( String val ) + { + if ( val == null ) + { + return true; + } + + return ( val.trim().length() <= 0 ); + } + + private static SnapshotVersion merge( SnapshotVersion mainSnapshotVersion, SnapshotVersion sourceSnapshotVersion ) + { + if ( sourceSnapshotVersion == null ) + { + return mainSnapshotVersion; + } + + if ( mainSnapshotVersion == null ) + { + return ArchivaModelCloner.clone( sourceSnapshotVersion ); + } + + SnapshotVersion merged = new SnapshotVersion(); + + merged.setTimestamp( merge( mainSnapshotVersion.getTimestamp(), sourceSnapshotVersion.getTimestamp() ) ); + merged + .setBuildNumber( Math.max( mainSnapshotVersion.getBuildNumber(), sourceSnapshotVersion.getBuildNumber() ) ); + + return merged; + } + + private static String merge( String main, String source ) + { + if ( empty( main ) && !empty( source ) ) + { + return source; + } + + return main; + } + + private static List mergeAvailableVersions( List mainAvailableVersions, List sourceAvailableVersions ) + { + if ( sourceAvailableVersions == null ) + { + return mainAvailableVersions; + } + + if ( mainAvailableVersions == null ) + { + return ArchivaModelCloner.cloneAvailableVersions( sourceAvailableVersions ); + } + + List merged = ArchivaModelCloner.cloneAvailableVersions( mainAvailableVersions ); + + Iterator it = sourceAvailableVersions.iterator(); + while ( it.hasNext() ) + { + String sourceVersion = (String) it.next(); + if ( !merged.contains( sourceVersion ) ) + { + merged.add( sourceVersion ); + } + } + + return merged; + } +} diff --git a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/metadata/RepositoryMetadataReader.java b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/metadata/RepositoryMetadataReader.java index 795c3a2c1..527a8b04e 100644 --- a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/metadata/RepositoryMetadataReader.java +++ b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/metadata/RepositoryMetadataReader.java @@ -19,9 +19,12 @@ package org.apache.maven.archiva.repository.metadata; * under the License. */ +import org.apache.commons.lang.math.NumberUtils; import org.apache.maven.archiva.model.ArchivaRepositoryMetadata; +import org.apache.maven.archiva.model.SnapshotVersion; import org.apache.maven.archiva.xml.XMLException; import org.apache.maven.archiva.xml.XMLReader; +import org.dom4j.Element; import java.io.File; import java.util.Date; @@ -41,23 +44,39 @@ public class RepositoryMetadataReader * @return the archiva repository metadata object that represents the provided file contents. * @throws RepositoryMetadataException */ - public ArchivaRepositoryMetadata read( File metadataFile ) throws RepositoryMetadataException + public ArchivaRepositoryMetadata read( File metadataFile ) + throws RepositoryMetadataException { try { XMLReader xml = new XMLReader( "metadata", metadataFile ); ArchivaRepositoryMetadata metadata = new ArchivaRepositoryMetadata(); - + metadata.setGroupId( xml.getElementText( "//metadata/groupId" ) ); metadata.setArtifactId( xml.getElementText( "//metadata/artifactId" ) ); - metadata.setLastModified( new Date( metadataFile.lastModified() ) ); - metadata.setSize( metadataFile.length() ); - metadata.setWhenIndexed( new Date() ); + metadata.setFileLastModified( new Date( metadataFile.lastModified() ) ); + metadata.setFileSize( metadataFile.length() ); + metadata.setWhenIndexed( null ); + metadata.setLastUpdated( xml.getElementText( "//metadata/versioning/lastUpdated" ) ); + metadata.setLatestVersion( xml.getElementText( "//metadata/versioning/latest" ) ); metadata.setReleasedVersion( xml.getElementText( "//metadata/versioning/release" ) ); metadata.setAvailableVersions( xml.getElementListText( "//metadata/versioning/versions/version" ) ); + Element snapshotElem = xml.getElement( "//metadata/versioning/snapshot" ); + if ( snapshotElem != null ) + { + SnapshotVersion snapshot = new SnapshotVersion(); + snapshot.setTimestamp( snapshotElem.elementTextTrim( "timestamp" ) ); + String tmp = snapshotElem.elementTextTrim( "buildNumber" ); + if( NumberUtils.isNumber( tmp )) + { + snapshot.setBuildNumber( NumberUtils.toInt( tmp ) ); + } + metadata.setSnapshotVersion( snapshot ); + } + return metadata; } catch ( XMLException e ) diff --git a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/metadata/RepositoryMetadataWriter.java b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/metadata/RepositoryMetadataWriter.java new file mode 100644 index 000000000..3991116b8 --- /dev/null +++ b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/metadata/RepositoryMetadataWriter.java @@ -0,0 +1,130 @@ +package org.apache.maven.archiva.repository.metadata; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang.StringUtils; +import org.apache.maven.archiva.model.ArchivaRepositoryMetadata; +import org.apache.maven.archiva.xml.XMLException; +import org.apache.maven.archiva.xml.XMLWriter; +import org.dom4j.Document; +import org.dom4j.DocumentHelper; +import org.dom4j.Element; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.io.Writer; +import java.util.Iterator; + +/** + * RepositoryMetadataWriter + * + * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a> + * @version $Id$ + */ +public class RepositoryMetadataWriter +{ + public static void write( ArchivaRepositoryMetadata metadata, File outputFile ) + throws RepositoryMetadataException + { + FileWriter writer = null; + try + { + writer = new FileWriter( outputFile ); + write( metadata, writer ); + writer.flush(); + } + catch ( IOException e ) + { + throw new RepositoryMetadataException( "Unable to write metadata file: " + outputFile.getAbsolutePath() + + " - " + e.getMessage(), e ); + } + finally + { + IOUtils.closeQuietly( writer ); + } + } + + public static void write( ArchivaRepositoryMetadata metadata, Writer writer ) + throws RepositoryMetadataException + { + Document doc = DocumentHelper.createDocument(); + + Element root = DocumentHelper.createElement( "metadata" ); + doc.setRootElement( root ); + + root.addElement( "groupId" ).setText( metadata.getGroupId() ); + root.addElement( "artifactId" ).setText( metadata.getArtifactId() ); + addOptionalElementText( root, "version", metadata.getVersion() ); + + if ( CollectionUtils.isNotEmpty( metadata.getAvailableVersions() ) + || StringUtils.isNotBlank( metadata.getReleasedVersion() ) + || StringUtils.isNotBlank( metadata.getLatestVersion() ) + || StringUtils.isNotBlank( metadata.getLastUpdated() ) || ( metadata.getSnapshotVersion() != null ) ) + { + Element versioning = root.addElement( "versioning" ); + + addOptionalElementText( versioning, "latest", metadata.getLatestVersion() ); + addOptionalElementText( versioning, "release", metadata.getReleasedVersion() ); + + if ( metadata.getSnapshotVersion() != null ) + { + Element snapshot = versioning.addElement( "snapshot" ); + String bnum = String.valueOf( metadata.getSnapshotVersion().getBuildNumber() ); + addOptionalElementText( snapshot, "buildNumber", bnum ); + addOptionalElementText( snapshot, "timestamp", metadata.getSnapshotVersion().getTimestamp() ); + } + + if ( CollectionUtils.isNotEmpty( metadata.getAvailableVersions() ) ) + { + Element versions = versioning.addElement( "versions" ); + Iterator it = metadata.getAvailableVersions().iterator(); + while ( it.hasNext() ) + { + String version = (String) it.next(); + versions.addElement( "version" ).setText( version ); + } + } + + addOptionalElementText( versioning, "lastUpdated", metadata.getLastUpdated() ); + } + + try + { + XMLWriter.write( doc, writer ); + } + catch ( XMLException e ) + { + throw new RepositoryMetadataException( "Unable to write xml contents to writer: " + e.getMessage(), e ); + } + } + + private static void addOptionalElementText( Element elem, String elemName, String text ) + { + if ( StringUtils.isBlank( text ) ) + { + return; + } + + elem.addElement( elemName ).setText( text ); + } +} diff --git a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/ProjectModelMerge.java b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/ProjectModelMerge.java index a8c112ace..a08646add 100644 --- a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/ProjectModelMerge.java +++ b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/ProjectModelMerge.java @@ -62,15 +62,14 @@ public class ProjectModelMerge public static ArchivaProjectModel merge( ArchivaProjectModel mainProject, ArchivaProjectModel parentProject ) throws ProjectModelException { - System.out.println( "## Merging: " + mainProject + " with " + parentProject ); if ( mainProject == null ) { - throw new ProjectModelException( "Cannot copy a null main project." ); + throw new ProjectModelException( "Cannot merge with a null main project." ); } if ( parentProject == null ) { - throw new ProjectModelException( "Cannot copy to a null parent project." ); + throw new ProjectModelException( "Cannot merge with a null parent project." ); } ArchivaProjectModel merged = new ArchivaProjectModel(); diff --git a/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/DefaultBidirectionalRepositoryLayoutTest.java b/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/DefaultBidirectionalRepositoryLayoutTest.java index 1abc97b0a..ad88b89fe 100644 --- a/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/DefaultBidirectionalRepositoryLayoutTest.java +++ b/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/DefaultBidirectionalRepositoryLayoutTest.java @@ -20,6 +20,7 @@ package org.apache.maven.archiva.repository.layout; */ import org.apache.maven.archiva.model.ArchivaArtifact; +import org.apache.maven.archiva.model.ArtifactReference; import org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayout; import org.apache.maven.archiva.repository.layout.LayoutException; @@ -29,11 +30,13 @@ import org.apache.maven.archiva.repository.layout.LayoutException; * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a> * @version $Id$ */ -public class DefaultBidirectionalRepositoryLayoutTest extends AbstractBidirectionalRepositoryLayoutTestCase +public class DefaultBidirectionalRepositoryLayoutTest + extends AbstractBidirectionalRepositoryLayoutTestCase { private BidirectionalRepositoryLayout layout; - protected void setUp() throws Exception + protected void setUp() + throws Exception { super.setUp(); @@ -65,41 +68,65 @@ public class DefaultBidirectionalRepositoryLayoutTest extends AbstractBidirectio { ArchivaArtifact artifact = createArtifact( "com.foo", "foo-connector", "2.1-20060822.123456-35", "", "jar" ); - assertEquals( "com/foo/foo-connector/2.1-SNAPSHOT/foo-connector-2.1-20060822.123456-35.jar", - layout.toPath( artifact ) ); + assertEquals( "com/foo/foo-connector/2.1-SNAPSHOT/foo-connector-2.1-20060822.123456-35.jar", layout + .toPath( artifact ) ); } - public void testToArtifactBasicSimpleGroupId() throws LayoutException + public void testTimestampedSnapshotRoundtrip() + throws LayoutException + { + String originalPath = "org/apache/maven/test/get-metadata-snapshot/1.0-SNAPSHOT/get-metadata-snapshot-1.0-20050831.101112-1.jar"; + ArchivaArtifact artifact = layout.toArtifact( originalPath ); + assertArtifact( artifact, "org.apache.maven.test", "get-metadata-snapshot", "1.0-20050831.101112-1", "", "jar" ); + + assertEquals( originalPath, layout.toPath( artifact ) ); + + ArtifactReference aref = new ArtifactReference(); + aref.setGroupId( artifact.getGroupId() ); + aref.setArtifactId( artifact.getArtifactId() ); + aref.setVersion( artifact.getVersion() ); + aref.setClassifier( artifact.getClassifier() ); + aref.setType( artifact.getType() ); + + assertEquals( originalPath, layout.toPath( aref ) ); + } + + public void testToArtifactBasicSimpleGroupId() + throws LayoutException { ArchivaArtifact artifact = layout.toArtifact( "commons-lang/commons-lang/2.1/commons-lang-2.1.jar" ); assertArtifact( artifact, "commons-lang", "commons-lang", "2.1", "", "jar" ); } - public void testToArtifactBasicLongGroupId() throws LayoutException + public void testToArtifactBasicLongGroupId() + throws LayoutException { ArchivaArtifact artifact = layout.toArtifact( "com/foo/foo-tool/1.0/foo-tool-1.0.jar" ); assertArtifact( artifact, "com.foo", "foo-tool", "1.0", "", "jar" ); } - public void testToArtifactEjbClient() throws LayoutException + public void testToArtifactEjbClient() + throws LayoutException { ArchivaArtifact artifact = layout.toArtifact( "com/foo/foo-client/1.0/foo-client-1.0.jar" ); // The type is correct. as we cannot possibly know this is an ejb client without parsing the pom assertArtifact( artifact, "com.foo", "foo-client", "1.0", "", "jar" ); } - public void testToArtifactWithClassifier() throws LayoutException + public void testToArtifactWithClassifier() + throws LayoutException { - ArchivaArtifact artifact = - layout.toArtifact( "com/foo/lib/foo-lib/2.1-alpha-1/foo-lib-2.1-alpha-1-sources.jar" ); + ArchivaArtifact artifact = layout + .toArtifact( "com/foo/lib/foo-lib/2.1-alpha-1/foo-lib-2.1-alpha-1-sources.jar" ); // The 'java-source' type is correct. You might be thinking of extension, which we are not testing here. assertArtifact( artifact, "com.foo.lib", "foo-lib", "2.1-alpha-1", "sources", "java-source" ); } - public void testToArtifactUsingUniqueSnapshot() throws LayoutException + public void testToArtifactUsingUniqueSnapshot() + throws LayoutException { - ArchivaArtifact artifact = - layout.toArtifact( "com/foo/foo-connector/2.1-SNAPSHOT/foo-connector-2.1-20060822.123456-35.jar" ); + ArchivaArtifact artifact = layout + .toArtifact( "com/foo/foo-connector/2.1-SNAPSHOT/foo-connector-2.1-20060822.123456-35.jar" ); assertSnapshotArtifact( artifact, "com.foo", "foo-connector", "2.1-20060822.123456-35", "", "jar" ); } @@ -115,7 +142,7 @@ public class DefaultBidirectionalRepositoryLayoutTest extends AbstractBidirectio /* expected path */ } } - + public void testInvalidNonSnapshotInSnapshotDir() { try @@ -128,7 +155,7 @@ public class DefaultBidirectionalRepositoryLayoutTest extends AbstractBidirectio /* expected path */ } } - + public void testInvalidPathTooShort() { try @@ -141,7 +168,7 @@ public class DefaultBidirectionalRepositoryLayoutTest extends AbstractBidirectio /* expected path */ } } - + public void testInvalidTimestampSnapshotNotInSnapshotDir() { try @@ -154,7 +181,7 @@ public class DefaultBidirectionalRepositoryLayoutTest extends AbstractBidirectio /* expected path */ } } - + public void testInvalidVersionPathMismatch() { try @@ -167,7 +194,7 @@ public class DefaultBidirectionalRepositoryLayoutTest extends AbstractBidirectio /* expected path */ } } - + public void testInvalidVersionPathMismatchAlt() { try @@ -180,7 +207,7 @@ public class DefaultBidirectionalRepositoryLayoutTest extends AbstractBidirectio /* expected path */ } } - + public void testInvalidArtifactIdForPath() { try diff --git a/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/metadata/AllTests.java b/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/metadata/AllTests.java index 76b6ab6dd..810858aef 100644 --- a/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/metadata/AllTests.java +++ b/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/metadata/AllTests.java @@ -35,6 +35,7 @@ public class AllTests { TestSuite suite = new TestSuite( "Test for org.apache.maven.archiva.repository.metadata" ); //$JUnit-BEGIN$ + suite.addTestSuite( RepositoryMetadataWriterTest.class ); suite.addTestSuite( RepositoryMetadataReaderTest.class ); //$JUnit-END$ return suite; diff --git a/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/metadata/RepositoryMetadataReaderTest.java b/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/metadata/RepositoryMetadataReaderTest.java index 676872b2d..0ecc39727 100644 --- a/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/metadata/RepositoryMetadataReaderTest.java +++ b/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/metadata/RepositoryMetadataReaderTest.java @@ -49,4 +49,23 @@ public class RepositoryMetadataReaderTest extends PlexusTestCase assertTrue( "Available version 1.0", metadata.getAvailableVersions().contains( "1.0" ) ); assertTrue( "Available version 1.1", metadata.getAvailableVersions().contains( "1.1" ) ); } + + public void testLoadComplex() throws RepositoryMetadataException + { + File defaultRepoDir = new File( getBasedir(), "src/test/repositories/default-repository" ); + File metadataFile = new File( defaultRepoDir, "org/apache/maven/samplejar/maven-metadata.xml" ); + + RepositoryMetadataReader reader = new RepositoryMetadataReader(); + + ArchivaRepositoryMetadata metadata = reader.read( metadataFile ); + + assertNotNull( metadata ); + assertEquals( "Group Id", "org.apache.maven", metadata.getGroupId() ); + assertEquals( "Artifact Id", "samplejar", metadata.getArtifactId() ); + assertEquals( "Released Version", "2.0", metadata.getReleasedVersion() ); + assertEquals( "Latest Version", "6.0-SNAPSHOT", metadata.getLatestVersion() ); + assertEquals( "List of Available Versions", 18, metadata.getAvailableVersions().size() ); + assertTrue( "Available version 6.0-20060311.183228-10", metadata.getAvailableVersions().contains( "6.0-20060311.183228-10" ) ); + assertTrue( "Available version 6.0-SNAPSHOT", metadata.getAvailableVersions().contains( "6.0-SNAPSHOT" ) ); + } } diff --git a/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/metadata/RepositoryMetadataWriterTest.java b/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/metadata/RepositoryMetadataWriterTest.java new file mode 100644 index 000000000..fc0653ca4 --- /dev/null +++ b/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/metadata/RepositoryMetadataWriterTest.java @@ -0,0 +1,60 @@ +package org.apache.maven.archiva.repository.metadata; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import org.apache.commons.io.FileUtils; +import org.apache.maven.archiva.model.ArchivaRepositoryMetadata; +import org.codehaus.plexus.PlexusTestCase; + +import java.io.File; +import java.io.StringWriter; + +/** + * RepositoryMetadataWriterTest + * + * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a> + * @version $Id$ + */ +public class RepositoryMetadataWriterTest + extends PlexusTestCase +{ + public void testWriteSimple() + throws Exception + { + File defaultRepoDir = new File( getBasedir(), "src/test/repositories/default-repository" ); + File expectedFile = new File( defaultRepoDir, "org/apache/maven/shared/maven-downloader/maven-metadata.xml" ); + String expectedContent = FileUtils.readFileToString( expectedFile, null ); + + ArchivaRepositoryMetadata metadata = new ArchivaRepositoryMetadata(); + + metadata.setGroupId( "org.apache.maven.shared" ); + metadata.setArtifactId( "maven-downloader" ); + metadata.setVersion( "1.0" ); + metadata.setReleasedVersion( "1.1" ); + metadata.getAvailableVersions().add( "1.0" ); + metadata.getAvailableVersions().add( "1.1" ); + metadata.setLastUpdated( "20061212214311" ); + + StringWriter actual = new StringWriter(); + RepositoryMetadataWriter.write( metadata, actual ); + + assertEquals( "XML Contents", expectedContent, actual.toString() ); + } +} diff --git a/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/samplejar/maven-metadata.xml b/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/samplejar/maven-metadata.xml new file mode 100644 index 000000000..89de35f4e --- /dev/null +++ b/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/samplejar/maven-metadata.xml @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<metadata> + <groupId>org.apache.maven</groupId> + <artifactId>samplejar</artifactId> + <version>6.0-SNAPSHOT</version> + <versioning> + <release>2.0</release> + <latest>6.0-SNAPSHOT</latest> + <snapshot> + <buildNumber>26</buildNumber> + </snapshot> + <versions> + <version>6.0-SNAPSHOT</version> + <version>6.0-20060311.093250-41</version> + <version>6.0-20060311.183228-42</version> + <version>6.0-20060311.183228-40</version> + <version>6.0-20060311.183228-37</version> + <version>6.0-20060311.183228-30</version> + <version>6.0-20060311.183228-29</version> + <version>6.0-20060311.183228-6</version> + <version>6.0-20060311.183228-9</version> + <version>6.0-20060311.183228-10</version> + <version>6.0-20060313.001659-43</version> + <version>6.0-20060313.001659-41</version> + <version>6.0-20060313.001659-38</version> + <version>6.0-20060313.001659-31</version> + <version>6.0-20060313.001659-30</version> + <version>6.0-20060313.001659-7</version> + <version>6.0-20060313.001659-10</version> + <version>6.0-20060313.001659-11</version> + </versions> + <lastUpdated>20060313010719</lastUpdated> + </versioning> +</metadata> diff --git a/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/maven-metadata.xml b/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/maven-metadata.xml index 2ecad0a94..6fbced025 100644 --- a/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/maven-metadata.xml +++ b/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/maven-metadata.xml @@ -1,4 +1,6 @@ -<?xml version="1.0" encoding="UTF-8"?><metadata> +<?xml version="1.0" encoding="UTF-8"?> + +<metadata> <groupId>org.apache.maven.shared</groupId> <artifactId>maven-downloader</artifactId> <version>1.0</version> @@ -10,4 +12,4 @@ </versions> <lastUpdated>20061212214311</lastUpdated> </versioning> -</metadata>
\ No newline at end of file +</metadata> |