]> source.dussan.org Git - archiva.git/commitdiff
[MRM-1283] migrate dependencies() method to metadata repository
authorBrett Porter <brett@apache.org>
Thu, 26 Nov 2009 11:49:56 +0000 (11:49 +0000)
committerBrett Porter <brett@apache.org>
Thu, 26 Nov 2009 11:49:56 +0000 (11:49 +0000)
git-svn-id: https://svn.apache.org/repos/asf/archiva/branches/MRM-1025@884536 13f79535-47bb-0310-9956-ffa450edef68

archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/ShowArtifactAction.java
archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/ShowArtifactActionTest.java
archiva-modules/metadata/metadata-model/src/main/java/org/apache/archiva/metadata/model/Dependency.java [new file with mode: 0644]
archiva-modules/metadata/metadata-model/src/main/java/org/apache/archiva/metadata/model/ProjectVersionMetadata.java
archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryMetadataResolver.java
archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryMetadataResolverTest.java
archiva-modules/plugins/metadata-repository-file/src/main/java/org/apache/archiva/metadata/repository/file/FileMetadataRepository.java

index 3256ac4d0d665ed6bb34f6f96e1285af194a27de..604727b4fd01fcb6ef50931e6a4a707ceaeefcf1 100644 (file)
@@ -228,6 +228,22 @@ public class ShowArtifactAction
                 model.addMailingList( mailingList );
             }
         }
+        if ( versionMetadata.getDependencies() != null )
+        {
+            for ( org.apache.archiva.metadata.model.Dependency d : versionMetadata.getDependencies() )
+            {
+                Dependency dependency = new Dependency();
+                dependency.setScope( d.getScope() );
+                dependency.setSystemPath( d.getSystemPath() );
+                dependency.setType( d.getType() );
+                dependency.setVersion( d.getVersion() );
+                dependency.setArtifactId( d.getArtifactId() );
+                dependency.setClassifier( d.getClassifier() );
+                dependency.setGroupId( d.getGroupId() );
+                dependency.setOptional( d.isOptional() );
+                model.addDependency( dependency );
+            }
+        }
     }
 
     /**
@@ -236,7 +252,29 @@ public class ShowArtifactAction
     public String dependencies()
         throws ObjectNotFoundException, ArchivaDatabaseException
     {
-        this.model = repoBrowsing.selectVersion( getPrincipal(), getObservableRepos(), groupId, artifactId, version );
+        ProjectVersionMetadata versionMetadata = null;
+        for ( String repoId : getObservableRepos() )
+        {
+            if ( versionMetadata == null )
+            {
+                try
+                {
+                    versionMetadata = metadataResolver.getProjectVersion( repoId, groupId, artifactId, version );
+                }
+                catch ( MetadataResolverException e )
+                {
+                    addActionError( "Error occurred resolving metadata for project: " + e.getMessage() );
+                    return ERROR;
+                }
+            }
+        }
+
+        if ( versionMetadata == null )
+        {
+            addActionError( "Artifact not found" );
+            return ERROR;
+        }
+        populateLegacyModel( versionMetadata );
 
         this.dependencies = model.getDependencies();
 
@@ -249,8 +287,6 @@ public class ShowArtifactAction
     public String mailingLists()
         throws ObjectNotFoundException, ArchivaDatabaseException
     {
-        // In the future, this should be replaced by the repository grouping mechanism, so that we are only making
-        // simple resource requests here and letting the resolver take care of it
         ProjectVersionMetadata versionMetadata = null;
         for ( String repoId : getObservableRepos() )
         {
index 8db9c0835d519e9d0f29f37c0f2883d310641c95..f2ed1692dbde87c5a912dea7aad829a159dfbbed 100644 (file)
@@ -25,6 +25,7 @@ import java.util.List;
 
 import com.opensymphony.xwork2.Action;
 import org.apache.archiva.metadata.model.CiManagement;
+import org.apache.archiva.metadata.model.Dependency;
 import org.apache.archiva.metadata.model.IssueManagement;
 import org.apache.archiva.metadata.model.License;
 import org.apache.archiva.metadata.model.MailingList;
@@ -43,7 +44,6 @@ import org.apache.maven.archiva.database.constraints.ProjectsByArtifactUsageCons
 import org.apache.maven.archiva.model.ArchivaArtifact;
 import org.apache.maven.archiva.model.ArchivaArtifactModel;
 import org.apache.maven.archiva.model.ArchivaProjectModel;
-import org.apache.maven.archiva.model.Dependency;
 import org.apache.maven.archiva.model.VersionedReference;
 import org.apache.maven.archiva.security.UserRepositories;
 import org.apache.maven.archiva.security.UserRepositoriesStub;
@@ -386,22 +386,16 @@ public class ShowArtifactActionTest
     public void testGetDependencies()
         throws ArchivaDatabaseException
     {
-        List<ArchivaArtifact> artifacts =
-            Collections.singletonList( createArtifact( TEST_GROUP_ID, TEST_ARTIFACT_ID, TEST_VERSION ) );
-        MockControl artifactDaoMockControl = createArtifactDaoMock( artifacts, 1 );
-        ArchivaProjectModel legacyModel = createLegacyProjectModel( TEST_GROUP_ID, TEST_ARTIFACT_ID, TEST_VERSION );
+        ProjectVersionMetadata versionMetadata = createProjectModel( TEST_VERSION );
         Dependency dependency1 = createDependencyBasic( "artifactId1" );
         Dependency dependency2 = createDependencyExtended( "artifactId2" );
-        legacyModel.setDependencies( Arrays.asList( dependency1, dependency2 ) );
-        MockControl projectDaoMockControl = createProjectDaoMock( legacyModel );
+        versionMetadata.setDependencies( Arrays.asList( dependency1, dependency2 ) );
+        metadataResolver.setProjectVersion( TEST_REPO, TEST_GROUP_ID, TEST_ARTIFACT_ID, versionMetadata );
 
         setActionParameters();
 
         String result = action.dependencies();
 
-        artifactDaoMockControl.verify();
-        projectDaoMockControl.verify();
-
         assertActionSuccess( action, result );
 
         assertActionParameters( action );
@@ -472,14 +466,14 @@ public class ShowArtifactActionTest
         assertEquals( "version", dependee.getVersion() );
     }
 
-    private void assertDependencyBasic( Dependency dependency, String artifactId )
+    private void assertDependencyBasic( org.apache.maven.archiva.model.Dependency dependency, String artifactId )
     {
         assertEquals( artifactId, dependency.getArtifactId() );
         assertEquals( "groupId", dependency.getGroupId() );
         assertEquals( "version", dependency.getVersion() );
     }
 
-    private void assertDependencyExtended( Dependency dependency, String artifactId )
+    private void assertDependencyExtended( org.apache.maven.archiva.model.Dependency dependency, String artifactId )
     {
         assertDependencyBasic( dependency, artifactId );
         assertEquals( true, dependency.isOptional() );
@@ -729,20 +723,6 @@ public class ShowArtifactActionTest
         return control;
     }
 
-    private MockControl createProjectDaoMock( ArchivaProjectModel project )
-        throws ArchivaDatabaseException
-    {
-        MockControl control = MockControl.createNiceControl( ProjectModelDAO.class );
-        ProjectModelDAO dao = (ProjectModelDAO) control.getMock();
-        archivaDao.setProjectDao( dao );
-
-        control.expectAndReturn(
-            dao.getProjectModel( project.getGroupId(), project.getArtifactId(), project.getVersion() ), project );
-
-        control.replay();
-        return control;
-    }
-
     private ArchivaArtifact createArtifact( String groupId, String artifactId, String version )
     {
         return createArtifact( groupId, artifactId, version, TEST_REPO );
diff --git a/archiva-modules/metadata/metadata-model/src/main/java/org/apache/archiva/metadata/model/Dependency.java b/archiva-modules/metadata/metadata-model/src/main/java/org/apache/archiva/metadata/model/Dependency.java
new file mode 100644 (file)
index 0000000..034bce4
--- /dev/null
@@ -0,0 +1,122 @@
+package org.apache.archiva.metadata.model;
+
+/*
+ * 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.
+ */
+
+/**
+ * TODO: review what is appropriate for the base here - rest should be in a maven dependency facet
+ */
+public class Dependency
+{
+    private String classifier;
+
+    private boolean optional;
+
+    private String scope;
+
+    private String systemPath;
+
+    private String type;
+
+    private String artifactId;
+
+    private String groupId;
+
+    private String version;
+
+    public void setClassifier( String classifier )
+    {
+        this.classifier = classifier;
+    }
+
+    public String getClassifier()
+    {
+        return classifier;
+    }
+
+    public void setOptional( boolean optional )
+    {
+        this.optional = optional;
+    }
+
+    public boolean isOptional()
+    {
+        return optional;
+    }
+
+    public void setScope( String scope )
+    {
+        this.scope = scope;
+    }
+
+    public String getScope()
+    {
+        return scope;
+    }
+
+    public void setSystemPath( String systemPath )
+    {
+        this.systemPath = systemPath;
+    }
+
+    public String getSystemPath()
+    {
+        return systemPath;
+    }
+
+    public void setType( String type )
+    {
+        this.type = type;
+    }
+
+    public String getType()
+    {
+        return type;
+    }
+
+    public void setArtifactId( String artifactId )
+    {
+        this.artifactId = artifactId;
+    }
+
+    public void setGroupId( String groupId )
+    {
+        this.groupId = groupId;
+    }
+
+    public void setVersion( String version )
+    {
+        this.version = version;
+    }
+
+    public String getVersion()
+    {
+        return version;
+    }
+
+    public String getArtifactId()
+    {
+        return artifactId;
+    }
+
+    public String getGroupId()
+    {
+        return groupId;
+    }
+}
index ff78fcd76382763fe476c919babb5ee8152b0391..0f60d601e2fd4ff507db05e5da210da93d14d71f 100644 (file)
@@ -49,6 +49,8 @@ public class ProjectVersionMetadata
 
     private List<MailingList> mailingLists;
 
+    private List<Dependency> dependencies;
+
     public String getId()
     {
         return id;
@@ -186,4 +188,23 @@ public class ProjectVersionMetadata
         }
         this.mailingLists.add( mailingList );
     }
+
+    public void setDependencies( List<Dependency> dependencies )
+    {
+        this.dependencies = dependencies;
+    }
+
+    public List<Dependency> getDependencies()
+    {
+        return dependencies;
+    }
+
+    public void addDependency( Dependency dependency )
+    {
+        if ( this.dependencies == null )
+        {
+            this.dependencies = new ArrayList<Dependency>();
+        }
+        this.dependencies.add( dependency );
+    }
 }
index f2904011891ebf49f23567c120abca3b926be22d..ffb8cba48f9b0e51a294c2023152550f60aaaca1 100644 (file)
@@ -34,6 +34,7 @@ import org.apache.maven.archiva.configuration.ArchivaConfiguration;
 import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
 import org.apache.maven.archiva.xml.XMLException;
 import org.apache.maven.model.CiManagement;
+import org.apache.maven.model.Dependency;
 import org.apache.maven.model.IssueManagement;
 import org.apache.maven.model.License;
 import org.apache.maven.model.MailingList;
@@ -143,6 +144,7 @@ public class Maven2RepositoryMetadataResolver
         metadata.setIssueManagement( convertIssueManagement( model.getIssueManagement() ) );
         metadata.setLicenses( convertLicenses( model.getLicenses() ) );
         metadata.setMailingLists( convertMailingLists( model.getMailingLists() ) );
+        metadata.setDependencies( convertDependencies( model.getDependencies() ) );
         metadata.setName( model.getName() );
         metadata.setOrganization( convertOrganization( model.getOrganization() ) );
         metadata.setScm( convertScm( model.getScm() ) );
@@ -165,6 +167,27 @@ public class Maven2RepositoryMetadataResolver
         return metadata;
     }
 
+    private List<org.apache.archiva.metadata.model.Dependency> convertDependencies( List<Dependency> dependencies )
+    {
+        List<org.apache.archiva.metadata.model.Dependency> l =
+            new ArrayList<org.apache.archiva.metadata.model.Dependency>();
+        for ( Dependency dependency : dependencies )
+        {
+            org.apache.archiva.metadata.model.Dependency newDependency =
+                new org.apache.archiva.metadata.model.Dependency();
+            newDependency.setArtifactId( dependency.getArtifactId() );
+            newDependency.setClassifier( dependency.getClassifier() );
+            newDependency.setGroupId( dependency.getGroupId() );
+            newDependency.setOptional( dependency.isOptional() );
+            newDependency.setScope( dependency.getScope() );
+            newDependency.setSystemPath( dependency.getSystemPath() );
+            newDependency.setType( dependency.getType() );
+            newDependency.setVersion( dependency.getVersion() );
+            l.add( newDependency );
+        }
+        return l;
+    }
+
     private org.apache.archiva.metadata.model.Scm convertScm( Scm scm )
     {
         org.apache.archiva.metadata.model.Scm newScm = null;
index 85e0cb1a4aa99a4c141fca555733a10a39a297d5..6e95c30e444e4d1a21f86d085e88bd2b1619cde5 100644 (file)
@@ -24,6 +24,7 @@ import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 
+import org.apache.archiva.metadata.model.Dependency;
 import org.apache.archiva.metadata.model.License;
 import org.apache.archiva.metadata.model.MailingList;
 import org.apache.archiva.metadata.model.ProjectVersionMetadata;
@@ -102,6 +103,36 @@ public class Maven2RepositoryMetadataResolverTest
         assertMailingList( "commits", metadata.getMailingLists().get( 2 ), "Archiva Commits List", false, null );
         assertMailingList( "issues", metadata.getMailingLists().get( 3 ), "Archiva Issues List", false,
                            "http://www.nabble.com/Archiva---Issues-f29617.html" );
+
+        List<Dependency> dependencies = metadata.getDependencies();
+        assertEquals( 10, dependencies.size() );
+        assertDependency( dependencies.get( 0 ), "commons-lang", "commons-lang", "2.2" );
+        assertDependency( dependencies.get( 1 ), "commons-io", "commons-io", "1.4" );
+        assertDependency( dependencies.get( 2 ), "org.slf4j", "slf4j-api", "1.5.0" );
+        assertDependency( dependencies.get( 3 ), "org.codehaus.plexus", "plexus-component-api", "1.0-alpha-22" );
+        assertDependency( dependencies.get( 4 ), "org.codehaus.plexus", "plexus-spring", "1.2", "test" );
+        assertDependency( dependencies.get( 5 ), "xalan", "xalan", "2.7.0" );
+        assertDependency( dependencies.get( 6 ), "dom4j", "dom4j", "1.6.1", "test" );
+        assertDependency( dependencies.get( 7 ), "junit", "junit", "3.8.1", "test" );
+        assertDependency( dependencies.get( 8 ), "easymock", "easymock", "1.2_Java1.3", "test" );
+        assertDependency( dependencies.get( 9 ), "easymock", "easymockclassextension", "1.2", "test" );
+    }
+
+    private void assertDependency( Dependency dependency, String groupId, String artifactId, String version )
+    {
+        assertDependency( dependency, groupId, artifactId, version, "compile" );
+    }
+
+    private void assertDependency( Dependency dependency, String groupId, String artifactId, String version,
+                                   String scope )
+    {
+        assertEquals( artifactId, dependency.getArtifactId() );
+        assertEquals( "jar", dependency.getType() );
+        assertEquals( version, dependency.getVersion() );
+        assertEquals( groupId, dependency.getGroupId() );
+        assertEquals( scope, dependency.getScope() );
+        assertNull( dependency.getClassifier() );
+        assertNull( dependency.getSystemPath() );
     }
 
     public void testGetProjectVersionMetadataForTimestampedSnapshot()
@@ -138,6 +169,7 @@ public class Maven2RepositoryMetadataResolverTest
                            "http://mail-archives.apache.org/mod_mbox/www-announce/", "announce@apache.org",
                            "announce-subscribe@apache.org", "announce-unsubscribe@apache.org",
                            Collections.<String>emptyList(), true );
+        assertEquals( Collections.<Dependency>emptyList(), metadata.getDependencies() );
     }
 
     public void testGetProjectVersionMetadataForTimestampedSnapshotMissingMetadata()
index cc2f2c9715af6cc62b03465e7f356d4b8947ef34..69cfdf7880d4dec0f866aa98db4823ea4c48fc86 100644 (file)
@@ -34,6 +34,7 @@ import java.util.Properties;
 
 import org.apache.archiva.metadata.model.ArtifactMetadata;
 import org.apache.archiva.metadata.model.CiManagement;
+import org.apache.archiva.metadata.model.Dependency;
 import org.apache.archiva.metadata.model.IssueManagement;
 import org.apache.archiva.metadata.model.License;
 import org.apache.archiva.metadata.model.MailingList;
@@ -136,6 +137,18 @@ public class FileMetadataRepository
             setProperty( properties, "mailingList." + i + ".otherArchives", join( mailingList.getOtherArchives() ) );
             i++;
         }
+        i = 0;
+        for ( Dependency dependency : versionMetadata.getDependencies() )
+        {
+            setProperty( properties, "dependency." + i + ".classifier", dependency.getClassifier() );
+            setProperty( properties, "dependency." + i + ".scope", dependency.getScope() );
+            setProperty( properties, "dependency." + i + ".systemPath", dependency.getSystemPath() );
+            setProperty( properties, "dependency." + i + ".artifactId", dependency.getArtifactId() );
+            setProperty( properties, "dependency." + i + ".groupId", dependency.getGroupId() );
+            setProperty( properties, "dependency." + i + ".version", dependency.getVersion() );
+            setProperty( properties, "dependency." + i + ".type", dependency.getType() );
+            i++;
+        }
         properties.setProperty( "facetIds", join( versionMetadata.getAllFacetIds() ) );
         for ( ProjectVersionFacet facet : versionMetadata.getAllFacets() )
         {
@@ -333,6 +346,32 @@ public class FileMetadataRepository
                 i++;
             }
 
+            done = false;
+            i = 0;
+            while ( !done )
+            {
+                String dependencyArtifactId = properties.getProperty( "dependency." + i + ".artifactId" );
+                if ( dependencyArtifactId != null )
+                {
+                    Dependency dependency = new Dependency();
+                    dependency.setArtifactId( dependencyArtifactId );
+                    dependency.setGroupId( properties.getProperty( "dependency." + i + ".groupId" ) );
+                    dependency.setClassifier( properties.getProperty( "dependency." + i + ".classifier" ) );
+                    dependency.setOptional(
+                        Boolean.valueOf( properties.getProperty( "dependency." + i + ".optional" ) ) );
+                    dependency.setScope( properties.getProperty( "dependency." + i + ".scope" ) );
+                    dependency.setSystemPath( properties.getProperty( "dependency." + i + ".systemPath" ) );
+                    dependency.setType( properties.getProperty( "dependency." + i + ".type" ) );
+                    dependency.setVersion( properties.getProperty( "dependency." + i + ".version" ) );
+                    versionMetadata.addDependency( dependency );
+                }
+                else
+                {
+                    done = true;
+                }
+                i++;
+            }
+
             for ( String facetId : properties.getProperty( "facetIds" ).split( "," ) )
             {
                 MetadataFacetFactory factory = metadataFacetFactories.get( facetId );