Author: oching
Date: Mon Jun 7 07:40:26 2010
New Revision: 952127
URL: http://svn.apache.org/viewvc?rev=952127&view=rev
Log:
[MRM-1362] Add simple 'CRUD' pages for project-level metadata along with a
"generic metadata" plugin
o removed project metadata custom tag
o enable delete of generic metadata properties
o added unit tests for adding and deleting properties
o clear facet properties read from file before doing the update so that removed
facet properties are not retained when updating project version metadata
Removed:
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/tags/ProjectMetadataTag.java
Modified:
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/ShowArtifactAction.java
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/resources/struts.xml
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/include/projectMetadata.jspf
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/showArtifact.jsp
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/taglib.tld
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/ShowArtifactActionTest.java
archiva/trunk/archiva-modules/metadata/metadata-repository-api/src/test/java/org/apache/archiva/metadata/repository/AbstractMetadataRepositoryTest.java
archiva/trunk/archiva-modules/plugins/generic-metadata-support/src/main/java/org/apache/archiva/metadata/generic/GenericMetadataFacet.java
archiva/trunk/archiva-modules/plugins/metadata-repository-file/src/main/java/org/apache/archiva/metadata/repository/file/FileMetadataRepository.java
Modified:
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/ShowArtifactAction.java
URL:
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/ShowArtifactAction.java?rev=952127&r1=952126&r2=952127&view=diff
==============================================================================
---
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/ShowArtifactAction.java
(original)
+++
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/ShowArtifactAction.java
Mon Jun 7 07:40:26 2010
@@ -24,7 +24,6 @@ import com.opensymphony.xwork2.Validatea
import org.apache.archiva.metadata.generic.GenericMetadataFacet;
import org.apache.archiva.metadata.model.ArtifactMetadata;
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;
import org.apache.archiva.metadata.model.ProjectVersionReference;
@@ -57,6 +56,7 @@ import java.util.Map;
* @plexus.component role="com.opensymphony.xwork2.Action"
role-hint="showArtifactAction"
* instantiation-strategy="per-lookup"
*/
+...@suppresswarnings( "serial" )
public class ShowArtifactAction
extends AbstractRepositoryBasedAction
implements Validateable
@@ -105,13 +105,9 @@ public class ShowArtifactAction
private Map<String, List<ArtifactDownloadInfo>> artifacts;
private boolean dependencyTree = false;
-
- private ProjectVersionMetadata projectMetadata;
-
+
private String deleteItem;
- private String itemValue;
-
private Map<String, String> genericMetadata;
private String propertyName;
@@ -335,114 +331,69 @@ public class ShowArtifactAction
genericMetadata.put( propertyName, propertyValue );
- GenericMetadataFacet genericMetadataFacet = new GenericMetadataFacet();
- genericMetadataFacet.fromProperties( genericMetadata );
-
- // add updated facet
- projectMetadata.addFacet( genericMetadataFacet );
-
- metadataRepository.updateProjectVersion( repositoryId, groupId,
artifactId, projectMetadata );
+ updateProjectMetadata( projectMetadata );
projectMetadata = getProjectVersionMetadata();
genericMetadata = projectMetadata.getFacet(
GenericMetadataFacet.FACET_ID ).toProperties();
model = projectMetadata;
-
+
propertyName = "";
propertyValue = "";
return SUCCESS;
}
- public String updateProjectMetadata()
- {
- metadataRepository.updateProjectVersion( repositoryId, groupId,
artifactId, projectMetadata );
-
- return SUCCESS;
- }
-
public String deleteMetadataEntry()
{
- projectMetadata = getProjectVersionMetadata();
-
- if ( !StringUtils.isEmpty( deleteItem ) && !StringUtils.isEmpty(
itemValue ) )
+ ProjectVersionMetadata projectMetadata = getProjectVersionMetadata();
+ String errorMsg = null;
+
+ if ( projectMetadata == null )
{
- if ( "dependency".equals( deleteItem ) )
- {
- removeDependency();
- }
- else if ( "mailingList".equals( deleteItem ) )
- {
- removeMailingList();
- }
- else if ( "license".equals( deleteItem ) )
- {
- removeLicense();
- }
-
- deleteItem = "";
- itemValue = "";
+ addActionError( errorMsg != null ? errorMsg : "Artifact not found"
);
+ return ERROR;
}
- return updateProjectMetadata();
- }
-
- private void removeDependency()
- {
- List<Dependency> dependencies = projectMetadata.getDependencies();
- List<Dependency> newDependencies = new ArrayList<Dependency>();
-
- if ( dependencies != null )
- {
- for ( Dependency dependency : dependencies )
+ if ( projectMetadata.getFacet( GenericMetadataFacet.FACET_ID ) != null
)
+ {
+ genericMetadata = projectMetadata.getFacet(
GenericMetadataFacet.FACET_ID ).toProperties();
+
+ if ( !StringUtils.isEmpty( deleteItem ) )
{
- if ( !StringUtils.equals( itemValue,
dependency.getArtifactId() ) )
- {
- newDependencies.add( dependency );
- }
- }
- }
+ genericMetadata.remove( deleteItem );
+
+ updateProjectMetadata( projectMetadata );
+
+ projectMetadata = getProjectVersionMetadata();
- projectMetadata.setDependencies( newDependencies );
- }
+ genericMetadata = projectMetadata.getFacet(
GenericMetadataFacet.FACET_ID ).toProperties();
- private void removeMailingList()
- {
- List<MailingList> mailingLists = projectMetadata.getMailingLists();
- List<MailingList> newMailingLists = new ArrayList<MailingList>();
+ model = projectMetadata;
- if ( mailingLists != null )
- {
- for ( MailingList mailingList : mailingLists )
- {
- if ( !StringUtils.equals( itemValue, mailingList.getName() ) )
- {
- newMailingLists.add( mailingList );
- }
+ addActionMessage( "Property successfully deleted." );
}
+
+ deleteItem = "";
+ }
+ else
+ {
+ addActionError( errorMsg != null ? errorMsg : "No generic metadata
facet for this artifact." );
+ return ERROR;
}
- projectMetadata.setMailingLists( newMailingLists );
+ return SUCCESS;
}
- private void removeLicense()
+ private void updateProjectMetadata( ProjectVersionMetadata projectMetadata
)
{
- List<License> licenses = projectMetadata.getLicenses();
- List<License> newLicenses = new ArrayList<License>();
-
- if ( licenses != null )
- {
- for ( License license : licenses )
- {
- if ( !StringUtils.equals( itemValue, license.getName() ) )
- {
- newLicenses.add( license );
- }
- }
- }
-
- projectMetadata.setLicenses( newLicenses );
+ GenericMetadataFacet genericMetadataFacet = new GenericMetadataFacet();
+ genericMetadataFacet.fromProperties( genericMetadata );
+
+ projectMetadata.addFacet( genericMetadataFacet );
+
+ metadataRepository.updateProjectVersion( repositoryId, groupId,
artifactId, projectMetadata );
}
@Override
@@ -538,37 +489,17 @@ public class ShowArtifactAction
{
return artifacts.keySet();
}
-
- public void setRepositoryFactory( RepositoryContentFactory
repositoryFactory )
- {
- this.repositoryFactory = repositoryFactory;
- }
-
+
public boolean isDependencyTree()
{
return dependencyTree;
}
- public ProjectVersionMetadata getProjectMetadata()
- {
- return projectMetadata;
- }
-
- public void setProjectMetadata( ProjectVersionMetadata projectMetadata )
- {
- this.projectMetadata = projectMetadata;
- }
-
public void setDeleteItem( String deleteItem )
{
this.deleteItem = deleteItem;
}
- public void setItemValue( String itemValue )
- {
- this.itemValue = itemValue;
- }
-
public Map<String, String> getGenericMetadata()
{
return genericMetadata;
@@ -598,6 +529,16 @@ public class ShowArtifactAction
{
this.propertyValue = propertyValue;
}
+
+ public void setRepositoryFactory( RepositoryContentFactory
repositoryFactory )
+ {
+ this.repositoryFactory = repositoryFactory;
+ }
+
+ public void setMetadataRepository( MetadataRepository metadataRepository )
+ {
+ this.metadataRepository = metadataRepository;
+ }
// TODO: move this into the artifact metadata itself via facets where
necessary
Modified:
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/resources/struts.xml
URL:
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/resources/struts.xml?rev=952127&r1=952126&r2=952127&view=diff
==============================================================================
---
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/resources/struts.xml
(original)
+++
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/resources/struts.xml
Mon Jun 7 07:40:26 2010
@@ -228,10 +228,8 @@
</action>
<action name="deleteMetadataEntry" class="showArtifactAction"
method="deleteMetadataEntry">
- <result name="success" type="redirect-action">
- <param name="actionName">showProjectMetadata</param>
- <param name="namespace">/</param>
- </result>
+ <result name="input">/WEB-INF/jsp/showArtifact.jsp</result>
+ <result name="success">/WEB-INF/jsp/showArtifact.jsp</result>
</action>
</package>
Modified:
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/include/projectMetadata.jspf
URL:
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/include/projectMetadata.jspf?rev=952127&r1=952126&r2=952127&view=diff
==============================================================================
---
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/include/projectMetadata.jspf
(original)
+++
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/include/projectMetadata.jspf
Mon Jun 7 07:40:26 2010
@@ -42,7 +42,7 @@
</td>
<td>
<s:textfield name="propertyValue" size="30" required="true"/>
- </td>
+ </td>
<td align="right">
<s:submit value="Add"/>
</td>
@@ -60,26 +60,21 @@
<c:if test="${!empty genericMetadata}">
<ul>
- <c:forEach var="prop" items="${genericMetadata}">
- <li>${prop.key}=${prop.value}</li>
+ <c:forEach var="prop" items="${genericMetadata}">
+ <c:url var="deletePropertyUrl"
value="showProjectMetadata!deleteMetadataEntry.action">
+ <c:param name="groupId" value="${groupId}"/>
+ <c:param name="artifactId" value="${artifactId}"/>
+ <c:param name="version" value="${version}"/>
+ <c:param name="deleteItem" value="${prop.key}"/>
+ </c:url>
+ <li>${prop.key}=${prop.value}
+ <a href="${deletePropertyUrl}">
+ <img src="<c:url value="/images/icons/delete.gif" />"
alt="Delete" width="12" length="12"/>
+ </a>
+ </li>
</c:forEach>
</ul>
</c:if>
- </div>
-
-
- <p>
- <s:if test="hasActionMessages()">
- <div id="messages">
- <s:actionmessage/>
- </div>
- </s:if>
- <s:if test="hasActionErrors()">
- <div id="messages">
- <s:actionerror/>
- </div>
- </s:if>
- </p>
-
- <%-- <archiva:project-metadata object="${projectMetadata}"
groupId="${groupId}" artifactId="${artifactId}" version="${version}" /> --%>
+ </div>
+
</div>
Modified:
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/showArtifact.jsp
URL:
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/showArtifact.jsp?rev=952127&r1=952126&r2=952127&view=diff
==============================================================================
---
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/showArtifact.jsp
(original)
+++
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/showArtifact.jsp
Mon Jun 7 07:40:26 2010
@@ -249,6 +249,11 @@
<s:actionmessage />
</div>
</s:if>
+ <s:if test="hasActionErrors()">
+ <div id="messages">
+ <s:actionerror/>
+ </div>
+ </s:if>
</div>
</div>
</body>
Modified:
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/taglib.tld
URL:
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/taglib.tld?rev=952127&r1=952126&r2=952127&view=diff
==============================================================================
---
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/taglib.tld
(original)
+++
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/taglib.tld
Mon Jun 7 07:40:26 2010
@@ -110,45 +110,4 @@
</tag>
- <tag>
-
- <name>project-metadata</name>
-
<tag-class>org.apache.maven.archiva.web.tags.ProjectMetadataTag</tag-class>
- <body-content>empty</body-content>
- <description><![CDATA[Render the project metadata tree from the provided
ProjectMetadataVersion object]]></description>
-
- <attribute>
- <name>object</name>
- <required>true</required>
- <rtexprvalue>true</rtexprvalue>
-
- <description><![CDATA[The Object to Render]]></description>
- </attribute>
-
- <attribute>
- <name>groupId</name>
- <required>true</required>
- <rtexprvalue>true</rtexprvalue>
-
- <description><![CDATA[The groupId]]></description>
- </attribute>
-
- <attribute>
- <name>artifactId</name>
- <required>true</required>
- <rtexprvalue>true</rtexprvalue>
-
- <description><![CDATA[The artifactId]]></description>
- </attribute>
-
- <attribute>
- <name>version</name>
- <required>true</required>
- <rtexprvalue>true</rtexprvalue>
-
- <description><![CDATA[The version]]></description>
- </attribute>
-
- </tag>
-
</taglib>
Modified:
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/ShowArtifactActionTest.java
URL:
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/ShowArtifactActionTest.java?rev=952127&r1=952126&r2=952127&view=diff
==============================================================================
---
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/ShowArtifactActionTest.java
(original)
+++
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/ShowArtifactActionTest.java
Mon Jun 7 07:40:26 2010
@@ -27,9 +27,14 @@ import org.apache.archiva.metadata.model
import org.apache.archiva.metadata.model.MailingList;
import org.apache.archiva.metadata.model.ProjectVersionMetadata;
import org.apache.archiva.metadata.model.ProjectVersionReference;
+import org.apache.archiva.metadata.repository.MetadataRepository;
+import org.apache.archiva.metadata.repository.file.FileMetadataRepository;
import org.apache.archiva.metadata.repository.memory.TestMetadataResolver;
import
org.apache.archiva.metadata.repository.storage.maven2.MavenArtifactFacet;
import org.apache.maven.archiva.common.utils.VersionUtil;
+import org.apache.maven.archiva.configuration.ArchivaConfiguration;
+import org.apache.maven.archiva.configuration.Configuration;
+import org.apache.maven.archiva.configuration.DefaultArchivaConfiguration;
import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
import org.apache.maven.archiva.repository.ManagedRepositoryContent;
import org.apache.maven.archiva.repository.RepositoryContentFactory;
@@ -395,7 +400,62 @@ public class ShowArtifactActionTest
assertNull( action.getMailingLists() );
assertTrue( action.getArtifacts().isEmpty() );
}
+
+ public void testAddAndDeleteMetadataProperty()
+ {
+ ProjectVersionMetadata versionMetadata = createProjectModel(
TEST_VERSION );
+
+ metadataResolver.setProjectVersion( TEST_REPO, TEST_GROUP_ID,
TEST_ARTIFACT_ID, versionMetadata );
+
+ setActionParameters();
+ action.setPropertyName( "foo" );
+ action.setPropertyValue( "bar" );
+ action.setRepositoryId( TEST_REPO );
+ String result = action.addMetadataProperty();
+
+ assertActionSuccess( action, result );
+ assertActionParameters( action );
+
+ Map<String, String> genericMetadata = action.getGenericMetadata();
+ assertNotNull( genericMetadata.get(
TEST_GENERIC_METADATA_PROPERTY_NAME ) );
+ assertEquals( genericMetadata.get( TEST_GENERIC_METADATA_PROPERTY_NAME
), TEST_GENERIC_METADATA_PROPERTY_VALUE );
+
+ assertNotNull( genericMetadata.get( "foo" ) );
+ assertEquals( "bar", genericMetadata.get( "foo" ) );
+
+ assertEquals( TEST_REPO, action.getRepositoryId() );
+ assertNotNull( action.getModel() );
+ assertNull( action.getDependees() );
+ assertNull( action.getDependencies() );
+ assertNull( action.getMailingLists() );
+ assertTrue( action.getArtifacts().isEmpty() );
+
+ // test delete property
+ setActionParameters();
+ action.setDeleteItem( "foo" );
+
+ result = action.deleteMetadataEntry();
+
+ assertEquals( Action.SUCCESS, result );
+ assertActionParameters( action );
+ assertTrue( !action.getActionMessages().isEmpty() );
+ assertTrue( action.getActionMessages().contains( "Property
successfully deleted." ) );
+
+ genericMetadata = action.getGenericMetadata();
+ assertNotNull( genericMetadata.get(
TEST_GENERIC_METADATA_PROPERTY_NAME ) );
+ assertEquals( genericMetadata.get( TEST_GENERIC_METADATA_PROPERTY_NAME
), TEST_GENERIC_METADATA_PROPERTY_VALUE );
+
+ assertNull( genericMetadata.get( "foo" ) );
+
+ assertEquals( TEST_REPO, action.getRepositoryId() );
+ assertNotNull( action.getModel() );
+ assertNull( action.getDependees() );
+ assertNull( action.getDependencies() );
+ assertNull( action.getMailingLists() );
+ assertTrue( action.getArtifacts().isEmpty() );
+ }
+
private void assertArtifacts( List<ArtifactMetadata> expectedArtifacts,
Map<String,
List<ShowArtifactAction.ArtifactDownloadInfo>> artifactMap )
{
@@ -575,10 +635,25 @@ public class ShowArtifactActionTest
ManagedRepositoryConfiguration config = new
ManagedRepositoryConfiguration();
config.setId( TEST_REPO );
config.setLocation( getTestFile( "target/test-repo"
).getAbsolutePath() );
+
ManagedRepositoryContent content = new
ManagedDefaultRepositoryContent();
content.setRepository( config );
factory.getManagedRepositoryContent( TEST_REPO );
+
+ FileMetadataRepository metadataRepo = ( FileMetadataRepository )
lookup( MetadataRepository.class );
+ MockControl archivaConfigControl = MockControl.createControl(
ArchivaConfiguration.class );
+ ArchivaConfiguration archivaConfig = (ArchivaConfiguration)
archivaConfigControl.getMock();
+
+ Configuration configuration = new Configuration();
+ configuration.addManagedRepository( config );
+ metadataRepo.setConfiguration( archivaConfig );
+ archivaConfig.getConfiguration();
+
+ action.setMetadataRepository( metadataRepo );
+
+ archivaConfigControl.setDefaultReturnValue( configuration );
control.setDefaultReturnValue( content );
control.replay();
+ archivaConfigControl.replay();
}
}
Modified:
archiva/trunk/archiva-modules/metadata/metadata-repository-api/src/test/java/org/apache/archiva/metadata/repository/AbstractMetadataRepositoryTest.java
URL:
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/metadata/metadata-repository-api/src/test/java/org/apache/archiva/metadata/repository/AbstractMetadataRepositoryTest.java?rev=952127&r1=952126&r2=952127&view=diff
==============================================================================
---
archiva/trunk/archiva-modules/metadata/metadata-repository-api/src/test/java/org/apache/archiva/metadata/repository/AbstractMetadataRepositoryTest.java
(original)
+++
archiva/trunk/archiva-modules/metadata/metadata-repository-api/src/test/java/org/apache/archiva/metadata/repository/AbstractMetadataRepositoryTest.java
Mon Jun 7 07:40:26 2010
@@ -164,7 +164,41 @@ public abstract class AbstractMetadataRe
metadata = repository.getProjectVersion( TEST_REPO_ID, TEST_NAMESPACE,
TEST_PROJECT, TEST_PROJECT_VERSION );
assertEquals( Collections.<String>emptyList(), new ArrayList<String>(
metadata.getFacetIds() ) );
}
+
+ public void
testUpdateProjectVersionMetadataWithExistingFacetsFacetPropertyWasRemoved()
+ throws MetadataResolutionException
+ {
+ ProjectVersionMetadata metadata = new ProjectVersionMetadata();
+ metadata.setId( TEST_PROJECT_VERSION );
+
+ Map<String, String> additionalProps = new HashMap<String,String>();
+ additionalProps.put( "deleteKey", "deleteValue" );
+
+ MetadataFacet facet = new TestMetadataFacet( TEST_FACET_ID, "baz",
additionalProps );
+ 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_FACET_ID ),
metadata.getFacetIds() );
+
+ TestMetadataFacet testFacet = (TestMetadataFacet) metadata.getFacet(
TEST_FACET_ID );
+ Map<String, String> facetProperties = testFacet.toProperties();
+
+ assertEquals( "deleteValue", facetProperties.get( "deleteKey" ) );
+
+ facetProperties.remove( "deleteKey" );
+
+ TestMetadataFacet newTestFacet = new TestMetadataFacet( TEST_FACET_ID,
testFacet.getValue(), facetProperties );
+ metadata.addFacet( newTestFacet );
+
+ 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_FACET_ID ),
metadata.getFacetIds() );
+ testFacet = (TestMetadataFacet) metadata.getFacet( TEST_FACET_ID );
+ assertFalse( testFacet.toProperties().containsKey( "deleteKey" ) );
+ }
+
public void testUpdateArtifactMetadataWithExistingFacets()
{
ArtifactMetadata metadata = createArtifact();
@@ -313,7 +347,7 @@ public abstract class AbstractMetadataRe
{
repository.removeMetadataFacet( TEST_REPO_ID, UNKNOWN, TEST_NAME );
}
-
+
public void testGetArtifacts()
{
ArtifactMetadata artifact1 = createArtifact();
@@ -613,6 +647,10 @@ public abstract class AbstractMetadataRe
implements MetadataFacet
{
private String testFacetId;
+
+ private Map<String, String> additionalProps;
+
+ private String value;
private TestMetadataFacet( String value )
{
@@ -625,8 +663,12 @@ public abstract class AbstractMetadataRe
this.value = value;
testFacetId = facetId;
}
-
- private String value;
+
+ private TestMetadataFacet( String facetId, String value, Map<String,
String> additionalProps )
+ {
+ this( facetId, value );
+ this.additionalProps = additionalProps;
+ }
public String getFacetId()
{
@@ -639,10 +681,24 @@ public abstract class AbstractMetadataRe
}
public Map<String, String> toProperties()
- {
+ {
if ( value != null )
{
- return Collections.singletonMap( "foo", value );
+ if( additionalProps == null )
+ {
+ return Collections.singletonMap( "foo", value );
+ }
+ else
+ {
+ Map<String, String> props = new HashMap<String, String>();
+ props.put( "foo", value );
+
+ for( String key : additionalProps.keySet() )
+ {
+ props.put( key, additionalProps.get( key ) );
+ }
+ return props;
+ }
}
else
{
@@ -657,13 +713,25 @@ public abstract class AbstractMetadataRe
{
this.value = value;
}
+
+ properties.remove( "foo" );
+
+ if( additionalProps == null )
+ {
+ additionalProps = new HashMap<String, String>();
+ }
+
+ for( String key: properties.keySet() )
+ {
+ additionalProps.put( key, properties.get( key ) );
+ }
}
public String getValue()
{
return value;
}
-
+
@Override
public String toString()
{
Modified:
archiva/trunk/archiva-modules/plugins/generic-metadata-support/src/main/java/org/apache/archiva/metadata/generic/GenericMetadataFacet.java
URL:
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/plugins/generic-metadata-support/src/main/java/org/apache/archiva/metadata/generic/GenericMetadataFacet.java?rev=952127&r1=952126&r2=952127&view=diff
==============================================================================
---
archiva/trunk/archiva-modules/plugins/generic-metadata-support/src/main/java/org/apache/archiva/metadata/generic/GenericMetadataFacet.java
(original)
+++
archiva/trunk/archiva-modules/plugins/generic-metadata-support/src/main/java/org/apache/archiva/metadata/generic/GenericMetadataFacet.java
Mon Jun 7 07:40:26 2010
@@ -19,7 +19,6 @@ package org.apache.archiva.metadata.gene
* under the License.
*/
-import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;
Modified:
archiva/trunk/archiva-modules/plugins/metadata-repository-file/src/main/java/org/apache/archiva/metadata/repository/file/FileMetadataRepository.java
URL:
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/plugins/metadata-repository-file/src/main/java/org/apache/archiva/metadata/repository/file/FileMetadataRepository.java?rev=952127&r1=952126&r2=952127&view=diff
==============================================================================
---
archiva/trunk/archiva-modules/plugins/metadata-repository-file/src/main/java/org/apache/archiva/metadata/repository/file/FileMetadataRepository.java
(original)
+++
archiva/trunk/archiva-modules/plugins/metadata-repository-file/src/main/java/org/apache/archiva/metadata/repository/file/FileMetadataRepository.java
Mon Jun 7 07:40:26 2010
@@ -140,6 +140,9 @@ public class FileMetadataRepository
{
properties.remove( name );
}
+
+ // clear the facet contents so old properties are no longer written
+ clearMetadataFacetProperties( versionMetadata, properties );
}
properties.setProperty( "id", versionMetadata.getId() );
setProperty( properties, "name", versionMetadata.getName() );
@@ -224,6 +227,27 @@ public class FileMetadataRepository
}
}
}
+
+ private void clearMetadataFacetProperties( ProjectVersionMetadata
versionMetadata, Properties properties )
+ {
+ List<Object> propsToRemove = new ArrayList<Object>();
+ for ( MetadataFacet facet : versionMetadata.getFacetList() )
+ {
+ for ( Object key : properties.keySet() )
+ {
+ String keyString = ( String ) key;
+ if( keyString.startsWith( facet.getFacetId() + ":" ) )
+ {
+ propsToRemove.add( key );
+ }
+ }
+ }
+
+ for( Object key : propsToRemove )
+ {
+ properties.remove( key );
+ }
+ }
public void updateProjectReference( String repoId, String namespace,
String projectId, String projectVersion,
ProjectVersionReference reference )