[MRM-1282] correct updating of facets in the file-based repository

git-svn-id: https://svn.apache.org/repos/asf/archiva/branches/MRM-1025@885466 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Brett Porter 2009-11-30 15:51:19 +00:00
parent d0aaf12ca1
commit 1cf0f9f7a5
2 changed files with 77 additions and 3 deletions

View File

@ -116,7 +116,7 @@ public void updateProjectVersion( String repoId, String namespace, String projec
// 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 void updateProjectVersion( String repoId, String namespace, String projec
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 void setDirectory( File directory )
{
this.directory = directory;
}
public void setMetadataFacetFactories( Map<String, MetadataFacetFactory> metadataFacetFactories )
{
this.metadataFacetFactories = metadataFacetFactories;
}
}

View File

@ -3,8 +3,11 @@
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 void testRootNamespaceWithNoMetadataRepository()
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;
}
}
}