]> source.dussan.org Git - archiva.git/commitdiff
[MRM-1282] correct updating of facets in the file-based repository
authorBrett Porter <brett@apache.org>
Mon, 30 Nov 2009 15:51:19 +0000 (15:51 +0000)
committerBrett Porter <brett@apache.org>
Mon, 30 Nov 2009 15:51:19 +0000 (15:51 +0000)
git-svn-id: https://svn.apache.org/repos/asf/archiva/branches/MRM-1025@885466 13f79535-47bb-0310-9956-ffa450edef68

archiva-modules/plugins/metadata-repository-file/src/main/java/org/apache/archiva/metadata/repository/file/FileMetadataRepository.java
archiva-modules/plugins/metadata-repository-file/src/test/java/org/apache/archiva/metadata/repository/file/FileMetadataRepositoryTest.java

index 7ed6ca38e13dddb4d0760ea7451b2d9ae6f98ea4..fc7b3a6dbf454941091c4662f5616774d8c37dc9 100644 (file)
@@ -116,7 +116,7 @@ public class FileMetadataRepository
         // remove properties that are not references or artifacts
         for ( String name : properties.stringPropertyNames() )
         {
-            if ( !name.startsWith( "artifact:" ) && !name.startsWith( "ref:" ) )
+            if ( !name.contains( ":" ) && !name.equals( "facetIds" ) )
             {
                 properties.remove( name );
             }
@@ -176,7 +176,10 @@ public class FileMetadataRepository
             setProperty( properties, "dependency." + i + ".type", dependency.getType() );
             i++;
         }
-        properties.setProperty( "facetIds", join( versionMetadata.getFacetIds() ) );
+        Set<String> facetIds = new LinkedHashSet<String>( versionMetadata.getFacetIds() );
+        facetIds.addAll( Arrays.asList( properties.getProperty( "facetIds", "" ).split( "," ) ) );
+        properties.setProperty( "facetIds", join( facetIds ) );
+
         for ( ProjectVersionFacet facet : versionMetadata.getFacetList() )
         {
             properties.putAll( facet.toProperties() );
@@ -613,4 +616,9 @@ public class FileMetadataRepository
     {
         this.directory = directory;
     }
+
+    public void setMetadataFacetFactories( Map<String, MetadataFacetFactory> metadataFacetFactories )
+    {
+        this.metadataFacetFactories = metadataFacetFactories;
+    }
 }
index 45c8bf2476fbce7e10dad4081cd169481c9a6a41..0ee3a73b0fd6ccfb4f7a52bb4b65ca88894f974e 100644 (file)
@@ -3,8 +3,11 @@ package org.apache.archiva.metadata.repository.file;
 import java.io.File;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.Map;
 
 import org.apache.archiva.metadata.model.MailingList;
+import org.apache.archiva.metadata.model.MetadataFacetFactory;
+import org.apache.archiva.metadata.model.ProjectVersionFacet;
 import org.apache.archiva.metadata.model.ProjectVersionMetadata;
 import org.apache.archiva.metadata.repository.MetadataRepository;
 import org.apache.commons.io.FileUtils;
@@ -40,6 +43,8 @@ public class FileMetadataRepositoryTest
 
     private static final String TEST_NAMESPACE = "namespace";
 
+    private static final String TEST_PROJECT_VERSION = "1.0";
+
     public void setUp()
         throws Exception
     {
@@ -60,11 +65,72 @@ public class FileMetadataRepositoryTest
     public void testUpdateProjectVersionMetadataWithNoOtherArchives()
     {
         ProjectVersionMetadata metadata = new ProjectVersionMetadata();
-        metadata.setId( TEST_PROJECT );
+        metadata.setId( TEST_PROJECT_VERSION );
         MailingList mailingList = new MailingList();
         mailingList.setName( "Foo List" );
         mailingList.setOtherArchives( Collections.<String>emptyList() );
         metadata.setMailingLists( Collections.singletonList( mailingList ) );
         repository.updateProjectVersion( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, metadata );
     }
+
+    public void testUpdateProjectVersionMetadataWithExistingFacets()
+    {
+        repository.setMetadataFacetFactories(
+            Collections.<String, MetadataFacetFactory>singletonMap( "test", new MetadataFacetFactory()
+            {
+                public ProjectVersionFacet createProjectVersionFacet()
+                {
+                    return new TestProjectVersionFacet( "bar" );
+                }
+            } ) );
+
+        ProjectVersionMetadata metadata = new ProjectVersionMetadata();
+        metadata.setId( TEST_PROJECT_VERSION );
+        ProjectVersionFacet facet = new TestProjectVersionFacet( "baz" );
+        metadata.addFacet( facet );
+        repository.updateProjectVersion( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, metadata );
+
+        metadata = repository.getProjectVersion( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
+        assertEquals( Collections.singleton( "test" ), metadata.getFacetIds() );
+
+        metadata = new ProjectVersionMetadata();
+        metadata.setId( TEST_PROJECT_VERSION );
+        repository.updateProjectVersion( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, metadata );
+
+        metadata = repository.getProjectVersion( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
+        assertEquals( Collections.singleton( "test" ), metadata.getFacetIds() );
+        TestProjectVersionFacet testFacet = (TestProjectVersionFacet) metadata.getFacet( "test" );
+        assertEquals( "baz", testFacet.getValue() );
+    }
+
+    private static class TestProjectVersionFacet
+        implements ProjectVersionFacet
+    {
+        private TestProjectVersionFacet( String value )
+        {
+            this.value = value;
+        }
+
+        private String value;
+
+        public String getFacetId()
+        {
+            return "test";
+        }
+
+        public Map<String, String> toProperties()
+        {
+            return Collections.singletonMap( "test:foo", value );
+        }
+
+        public void fromProperties( Map<String, String> properties )
+        {
+            value = properties.get( "test:foo" );
+        }
+
+        public String getValue()
+        {
+            return value;
+        }
+    }
 }