Author: olamy
Date: Tue Jun 5 21:42:02 2012
New Revision: 1346609
URL: http://svn.apache.org/viewvc?rev=1346609&view=rev
Log:
improve MetadataRepository api to be able to remove an artifact with
MetadataFacet use case deleting a maven artifact with a classifier
Modified:
archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/archiva/indexer/search/mock/MockRepositorySessionFactory.java
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/test/java/org/apache/archiva/admin/mock/MockRepositorySessionFactory.java
archiva/trunk/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/test/java/org/apache/archiva/scheduler/indexing/mock/MockRepositorySessionFactory.java
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/services/RepositoriesService.java
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRepositoriesService.java
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/RepositoriesServiceTest.java
archiva/trunk/archiva-modules/metadata/metadata-model/src/main/java/org/apache/archiva/metadata/model/FacetedMetadata.java
archiva/trunk/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/MetadataRepository.java
archiva/trunk/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/MavenArtifactFacet.java
archiva/trunk/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/MavenProjectFacet.java
archiva/trunk/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/metadata/repository/TestMetadataRepository.java
archiva/trunk/archiva-modules/plugins/metadata-store-file/src/main/java/org/apache/archiva/metadata/repository/file/FileMetadataRepository.java
archiva/trunk/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepository.java
Modified:
archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/archiva/indexer/search/mock/MockRepositorySessionFactory.java
URL:
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/archiva/indexer/search/mock/MockRepositorySessionFactory.java?rev=1346609&r1=1346608&r2=1346609&view=diff
==============================================================================
---
archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/archiva/indexer/search/mock/MockRepositorySessionFactory.java
(original)
+++
archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/archiva/indexer/search/mock/MockRepositorySessionFactory.java
Tue Jun 5 21:42:02 2012
@@ -63,6 +63,14 @@ public class MockRepositorySessionFactor
{
return new MetadataRepository( )
{
+
+ public void removeArtifact( String repositoryId, String
namespace, String project,
+ String projectVersion, String
projectId, MetadataFacet metadataFacet )
+ throws MetadataRepositoryException
+ {
+
+ }
+
public void updateProject( String repositoryId,
ProjectMetadata project )
throws MetadataRepositoryException
{
Modified:
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/test/java/org/apache/archiva/admin/mock/MockRepositorySessionFactory.java
URL:
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/test/java/org/apache/archiva/admin/mock/MockRepositorySessionFactory.java?rev=1346609&r1=1346608&r2=1346609&view=diff
==============================================================================
---
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/test/java/org/apache/archiva/admin/mock/MockRepositorySessionFactory.java
(original)
+++
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/test/java/org/apache/archiva/admin/mock/MockRepositorySessionFactory.java
Tue Jun 5 21:42:02 2012
@@ -63,6 +63,14 @@ public class MockRepositorySessionFactor
{
return new MetadataRepository( )
{
+
+ public void removeArtifact( String repositoryId, String
namespace, String project,
+ String projectVersion, String
projectId, MetadataFacet metadataFacet )
+ throws MetadataRepositoryException
+ {
+ //To change body of implemented methods use File |
Settings | File Templates.
+ }
+
public void updateProject( String repositoryId,
ProjectMetadata project )
throws MetadataRepositoryException
{
Modified:
archiva/trunk/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/test/java/org/apache/archiva/scheduler/indexing/mock/MockRepositorySessionFactory.java
URL:
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/test/java/org/apache/archiva/scheduler/indexing/mock/MockRepositorySessionFactory.java?rev=1346609&r1=1346608&r2=1346609&view=diff
==============================================================================
---
archiva/trunk/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/test/java/org/apache/archiva/scheduler/indexing/mock/MockRepositorySessionFactory.java
(original)
+++
archiva/trunk/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/test/java/org/apache/archiva/scheduler/indexing/mock/MockRepositorySessionFactory.java
Tue Jun 5 21:42:02 2012
@@ -63,30 +63,38 @@ public class MockRepositorySessionFactor
{
return new MetadataRepository()
{
+
+ public void removeArtifact( String repositoryId, String
namespace, String project,
+ String projectVersion, String
projectId, MetadataFacet metadataFacet )
+ throws MetadataRepositoryException
+ {
+
+ }
+
public void updateProject( String repositoryId,
ProjectMetadata project )
throws MetadataRepositoryException
{
- //To change body of implemented methods use File |
Settings | File Templates.
+
}
public void updateArtifact( String repositoryId, String
namespace, String projectId,
String projectVersion,
ArtifactMetadata artifactMeta )
throws MetadataRepositoryException
{
- //To change body of implemented methods use File |
Settings | File Templates.
+
}
public void updateProjectVersion( String repositoryId,
String namespace, String projectId,
ProjectVersionMetadata
versionMetadata )
throws MetadataRepositoryException
{
- //To change body of implemented methods use File |
Settings | File Templates.
+
}
public void updateNamespace( String repositoryId, String
namespace )
throws MetadataRepositoryException
{
- //To change body of implemented methods use File |
Settings | File Templates.
+
}
public List<String> getMetadataFacets( String
repositoryId, String facetId )
@@ -104,7 +112,7 @@ public class MockRepositorySessionFactor
public void addMetadataFacet( String repositoryId,
MetadataFacet metadataFacet )
throws MetadataRepositoryException
{
- //To change body of implemented methods use File |
Settings | File Templates.
+
}
public void removeMetadataFacets( String repositoryId,
String facetId )
Modified:
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/services/RepositoriesService.java
URL:
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/services/RepositoriesService.java?rev=1346609&r1=1346608&r2=1346609&view=diff
==============================================================================
---
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/services/RepositoriesService.java
(original)
+++
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/services/RepositoriesService.java
Tue Jun 5 21:42:02 2012
@@ -129,4 +129,15 @@ public interface RepositoriesService
Boolean isAuthorizedToDeleteArtifacts( @PathParam( "repositoryId" ) String
repoId )
throws ArchivaRestServiceException;
+ @Path( "deleteGroupId" )
+ @GET
+ @Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML,
MediaType.TEXT_PLAIN } )
+ @RedbackAuthorization( noPermission = true )
+ /**
+ * <b>permissions are checked in impl</b>
+ * @since 1.4-M3
+ */
+ Boolean deleteGroupId( @QueryParam( "groupId" ) String groupId )
+ throws ArchivaRestServiceException;
+
}
Modified:
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRepositoriesService.java
URL:
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRepositoriesService.java?rev=1346609&r1=1346608&r2=1346609&view=diff
==============================================================================
---
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRepositoriesService.java
(original)
+++
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRepositoriesService.java
Tue Jun 5 21:42:02 2012
@@ -37,6 +37,7 @@ import org.apache.archiva.metadata.repos
import org.apache.archiva.metadata.repository.MetadataResolutionException;
import org.apache.archiva.metadata.repository.RepositorySession;
import org.apache.archiva.metadata.repository.RepositorySessionFactory;
+import
org.apache.archiva.metadata.repository.storage.maven2.MavenArtifactFacet;
import org.apache.archiva.model.ArchivaRepositoryMetadata;
import org.apache.archiva.model.ArtifactReference;
import org.apache.archiva.model.VersionedReference;
@@ -669,6 +670,10 @@ public class DefaultRepositoriesService
ManagedRepositoryContent repository =
repositoryFactory.getManagedRepositoryContent( repositoryId );
+ MetadataRepository metadataRepository =
repositorySession.getRepository();
+
+ String path = repository.toMetadataPath( ref );
+
if ( StringUtils.isNotBlank( artifact.getClassifier() ) )
{
if ( StringUtils.isBlank( artifact.getPackaging() ) )
@@ -684,45 +689,73 @@ public class DefaultRepositoriesService
artifactReference.setType( artifact.getPackaging() );
repository.deleteArtifact( artifactReference );
- // TODO cleanup facet which contains classifier information
- return Boolean.TRUE;
}
-
- String path = repository.toMetadataPath( ref );
- int index = path.lastIndexOf( '/' );
- path = path.substring( 0, index );
- File targetPath = new File( repoConfig.getLocation(), path );
-
- if ( !targetPath.exists() )
+ else
{
- throw new ContentNotFoundException(
- artifact.getGroupId() + ":" + artifact.getArtifactId() +
":" + artifact.getVersion() );
- }
- // TODO: this should be in the storage mechanism so that it is all
tied together
- // delete from file system
- repository.deleteVersion( ref );
+ int index = path.lastIndexOf( '/' );
+ path = path.substring( 0, index );
+ File targetPath = new File( repoConfig.getLocation(), path );
- File metadataFile = getMetadata( targetPath.getAbsolutePath() );
- ArchivaRepositoryMetadata metadata = getMetadata( metadataFile );
+ if ( !targetPath.exists() )
+ {
+ throw new ContentNotFoundException(
+ artifact.getGroupId() + ":" + artifact.getArtifactId()
+ ":" + artifact.getVersion() );
+ }
- updateMetadata( metadata, metadataFile, lastUpdatedTimestamp,
artifact );
+ // TODO: this should be in the storage mechanism so that it is
all tied together
+ // delete from file system
+ repository.deleteVersion( ref );
- MetadataRepository metadataRepository =
repositorySession.getRepository();
+ File metadataFile = getMetadata( targetPath.getAbsolutePath()
);
+ ArchivaRepositoryMetadata metadata = getMetadata( metadataFile
);
+ updateMetadata( metadata, metadataFile, lastUpdatedTimestamp,
artifact );
+ }
Collection<ArtifactMetadata> artifacts =
metadataRepository.getArtifacts( repositoryId,
artifact.getGroupId(), artifact.getArtifactId(),
artifact.getVersion() );
for ( ArtifactMetadata artifactMetadata : artifacts )
{
+
// TODO: mismatch between artifact (snapshot) version and
project (base) version here
if ( artifactMetadata.getVersion().equals(
artifact.getVersion() ) )
{
- metadataRepository.removeArtifact(
artifactMetadata.getRepositoryId(),
-
artifactMetadata.getNamespace(), artifactMetadata.getProject(),
- artifact.getVersion(),
artifactMetadata.getId() );
+ if ( StringUtils.isNotBlank( artifact.getClassifier() ) )
+ {
+ if ( StringUtils.isBlank( artifact.getPackaging() ) )
+ {
+ throw new ArchivaRestServiceException(
+ "You must configure a type/packaging when
using classifier", 400, null );
+ }
+ // cleanup facet which contains classifier information
+ MavenArtifactFacet mavenArtifactFacet =
+ (MavenArtifactFacet) artifactMetadata.getFacet(
MavenArtifactFacet.FACET_ID );
+
+ if ( StringUtils.equals( artifact.getClassifier(),
mavenArtifactFacet.getClassifier() ) )
+ {
+ artifactMetadata.removeFacet(
MavenArtifactFacet.FACET_ID );
+ String groupId = artifact.getGroupId(), artifactId
= artifact.getArtifactId(), version =
+ artifact.getVersion();
+ //metadataRepository.updateArtifact( repositoryId,
groupId, artifactId, version,
+ //
artifactMetadata );
+ // String repositoryId, String namespace, String
project, String version, String projectId, MetadataFacet metadataFacet
+ MavenArtifactFacet mavenArtifactFacetToCompare =
new MavenArtifactFacet();
+ mavenArtifactFacetToCompare.setClassifier(
artifact.getClassifier() );
+ metadataRepository.removeArtifact( repositoryId,
groupId, artifactId, version,
+
mavenArtifactFacetToCompare );
+ metadataRepository.save();
+ }
+ }
+ else
+ {
+ metadataRepository.removeArtifact(
artifactMetadata.getRepositoryId(),
+
artifactMetadata.getNamespace(),
+
artifactMetadata.getProject(), artifact.getVersion(),
+
artifactMetadata.getId() );
+ }
// TODO: move into the metadata repository proper - need
to differentiate attachment of
// repository metadata to an artifact
for ( RepositoryListener listener : listeners )
@@ -736,11 +769,8 @@ public class DefaultRepositoriesService
}
}
- repositorySession.save();
- repositorySession.close();
}
-
catch ( ContentNotFoundException e )
{
throw new ArchivaRestServiceException( "Artifact does not exist: "
+ e.getMessage(), 400, e );
@@ -766,13 +796,20 @@ public class DefaultRepositoriesService
throw new ArchivaRestServiceException( "RepositoryAdmin exception:
" + e.getMessage(), 500, e );
}
finally
-
{
+ repositorySession.save();
+
repositorySession.close();
}
return Boolean.TRUE;
}
+ public Boolean deleteGroupId( String groupId )
+ throws ArchivaRestServiceException
+ {
+ return true;
+ }
+
public Boolean isAuthorizedToDeleteArtifacts( String repoId )
throws ArchivaRestServiceException
{
Modified:
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/RepositoriesServiceTest.java
URL:
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/RepositoriesServiceTest.java?rev=1346609&r1=1346608&r2=1346609&view=diff
==============================================================================
---
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/RepositoriesServiceTest.java
(original)
+++
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/RepositoriesServiceTest.java
Tue Jun 5 21:42:02 2012
@@ -22,13 +22,14 @@ package org.apache.archiva.rest.services
import org.apache.archiva.admin.model.beans.ManagedRepository;
import org.apache.archiva.common.utils.FileUtil;
import org.apache.archiva.rest.api.model.Artifact;
+import org.apache.archiva.rest.api.model.BrowseResult;
+import org.apache.archiva.rest.api.model.BrowseResultEntry;
import org.apache.archiva.rest.api.model.VersionsList;
import org.apache.archiva.rest.api.services.BrowseService;
import org.apache.archiva.rest.api.services.ManagedRepositoriesService;
import org.apache.archiva.rest.api.services.RepositoriesService;
import org.apache.cxf.jaxrs.client.ServerWebApplicationException;
import org.fest.assertions.Assertions;
-import org.junit.Ignore;
import org.junit.Test;
import java.io.File;
@@ -189,7 +190,6 @@ public class RepositoriesServiceTest
}
@Test
- @Ignore
public void deleteArtifactWithClassifier()
throws Exception
{
@@ -232,9 +232,15 @@ public class RepositoriesServiceTest
artifacts =
browseService.getArtifactDownloadInfos( "commons-logging",
"commons-logging", "1.0.1", SOURCE_REPO_ID );
- Assertions.assertThat( artifacts ).isNotNull().isEmpty();
+ log.info( "artifact: {}", artifacts );
+
+ Assertions.assertThat( artifacts
).isNotNull().isNotEmpty().hasSize( 2 );
+
+ versionsList = browseService.getVersionsList( "commons-logging",
"commons-logging", SOURCE_REPO_ID );
- Assertions.assertThat( versionsList.getVersions()
).isNotNull().isNotEmpty().hasSize( 5 );
+ log.info( "versionsList: {}", versionsList );
+
+ Assertions.assertThat( versionsList.getVersions()
).isNotNull().isNotEmpty().hasSize( 6 );
}
finally
@@ -245,6 +251,31 @@ public class RepositoriesServiceTest
@Test
+ public void deleteGroupId()
+ throws Exception
+ {
+ initSourceTargetRepo();
+ try
+ {
+ BrowseService browseService = getBrowseService(
authorizationHeader, false );
+
+ BrowseResult browseResult = browseService.browseGroupId(
"org.apache.karaf.features", SOURCE_REPO_ID );
+
+ assertNotNull( browseResult );
+
+ Assertions.assertThat( browseResult.getBrowseResultEntries()
).isNotNull().isNotEmpty().contains(
+ new BrowseResultEntry(
"org.apache.karaf.features.org.apache.karaf.features.command", true ),
+ new BrowseResultEntry(
"org.apache.karaf.features.org.apache.karaf.features.core", true ) );
+
+ log.info( "browseResult: {}", browseResult );
+ }
+ finally
+ {
+ cleanRepos();
+ }
+ }
+
+ @Test
public void authorizedToDeleteArtifacts()
throws Exception
{
Modified:
archiva/trunk/archiva-modules/metadata/metadata-model/src/main/java/org/apache/archiva/metadata/model/FacetedMetadata.java
URL:
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/metadata/metadata-model/src/main/java/org/apache/archiva/metadata/model/FacetedMetadata.java?rev=1346609&r1=1346608&r2=1346609&view=diff
==============================================================================
---
archiva/trunk/archiva-modules/metadata/metadata-model/src/main/java/org/apache/archiva/metadata/model/FacetedMetadata.java
(original)
+++
archiva/trunk/archiva-modules/metadata/metadata-model/src/main/java/org/apache/archiva/metadata/model/FacetedMetadata.java
Tue Jun 5 21:42:02 2012
@@ -19,7 +19,6 @@ package org.apache.archiva.metadata.mode
* under the License.
*/
-import javax.xml.bind.annotation.XmlElement;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
@@ -56,6 +55,11 @@ public abstract class FacetedMetadata
return this.facets.get( facetId );
}
+ public MetadataFacet removeFacet( String facetId )
+ {
+ return this.facets.remove( facetId );
+ }
+
/**
* Get all the facets available on this metadata.
*
Modified:
archiva/trunk/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/MetadataRepository.java
URL:
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/MetadataRepository.java?rev=1346609&r1=1346608&r2=1346609&view=diff
==============================================================================
---
archiva/trunk/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/MetadataRepository.java
(original)
+++
archiva/trunk/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/MetadataRepository.java
Tue Jun 5 21:42:02 2012
@@ -80,6 +80,19 @@ public interface MetadataRepository
throws MetadataRepositoryException;
/**
+ * @param repositoryId
+ * @param namespace
+ * @param project
+ * @param version
+ * @param metadataFacet will remove artifacts which have this {@link
MetadataFacet} using equals
+ * @throws MetadataRepositoryException
+ * @since 1.4-M3
+ */
+ void removeArtifact( String repositoryId, String namespace, String
project, String version,
+ MetadataFacet metadataFacet )
+ throws MetadataRepositoryException;
+
+ /**
* Delete a repository's metadata. This includes all associated metadata
facets.
*
* @param repositoryId the repository to delete
Modified:
archiva/trunk/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/MavenArtifactFacet.java
URL:
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/MavenArtifactFacet.java?rev=1346609&r1=1346608&r2=1346609&view=diff
==============================================================================
---
archiva/trunk/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/MavenArtifactFacet.java
(original)
+++
archiva/trunk/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/MavenArtifactFacet.java
Tue Jun 5 21:42:02 2012
@@ -20,6 +20,7 @@ package org.apache.archiva.metadata.repo
*/
import org.apache.archiva.metadata.model.MetadataFacet;
+import org.apache.commons.lang.StringUtils;
import java.util.HashMap;
import java.util.Map;
@@ -118,4 +119,22 @@ public class MavenArtifactFacet
this.buildNumber = Integer.parseInt( buildNumber );
}
}
+
+ @Override
+ public boolean equals( Object o )
+ {
+ if ( this == o )
+ {
+ return true;
+ }
+ if ( !( o instanceof MavenArtifactFacet ) )
+ {
+ return false;
+ }
+
+ MavenArtifactFacet that = (MavenArtifactFacet) o;
+
+ return StringUtils.equals( that.getClassifier(), this.classifier );
+ }
+
}
Modified:
archiva/trunk/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/MavenProjectFacet.java
URL:
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/MavenProjectFacet.java?rev=1346609&r1=1346608&r2=1346609&view=diff
==============================================================================
---
archiva/trunk/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/MavenProjectFacet.java
(original)
+++
archiva/trunk/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/MavenProjectFacet.java
Tue Jun 5 21:42:02 2012
@@ -118,4 +118,43 @@ public class MavenProjectFacet
this.parent = parent;
}
}
+
+ @Override
+ public boolean equals( Object o )
+ {
+ if ( this == o )
+ {
+ return true;
+ }
+ if ( !( o instanceof MavenProjectFacet ) )
+ {
+ return false;
+ }
+
+ MavenProjectFacet that = (MavenProjectFacet) o;
+
+ if ( !artifactId.equals( that.artifactId ) )
+ {
+ return false;
+ }
+ if ( !groupId.equals( that.groupId ) )
+ {
+ return false;
+ }
+ if ( !packaging.equals( that.packaging ) )
+ {
+ return false;
+ }
+
+ return true;
+ }
+
+ @Override
+ public int hashCode()
+ {
+ int result = groupId.hashCode();
+ result = 31 * result + artifactId.hashCode();
+ result = 31 * result + packaging.hashCode();
+ return result;
+ }
}
Modified:
archiva/trunk/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/metadata/repository/TestMetadataRepository.java
URL:
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/metadata/repository/TestMetadataRepository.java?rev=1346609&r1=1346608&r2=1346609&view=diff
==============================================================================
---
archiva/trunk/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/metadata/repository/TestMetadataRepository.java
(original)
+++
archiva/trunk/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/metadata/repository/TestMetadataRepository.java
Tue Jun 5 21:42:02 2012
@@ -198,4 +198,12 @@ public class TestMetadataRepository
{
return null; //To change body of implemented methods use File |
Settings | File Templates.
}
+
+
+ public void removeArtifact( String repositoryId, String namespace, String
project, String projectVersion,
+ String projectId, MetadataFacet metadataFacet )
+ throws MetadataRepositoryException
+ {
+ //To change body of implemented methods use File | Settings | File
Templates.
+ }
}
\ No newline at end of file
Modified:
archiva/trunk/archiva-modules/plugins/metadata-store-file/src/main/java/org/apache/archiva/metadata/repository/file/FileMetadataRepository.java
URL:
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/plugins/metadata-store-file/src/main/java/org/apache/archiva/metadata/repository/file/FileMetadataRepository.java?rev=1346609&r1=1346608&r2=1346609&view=diff
==============================================================================
---
archiva/trunk/archiva-modules/plugins/metadata-store-file/src/main/java/org/apache/archiva/metadata/repository/file/FileMetadataRepository.java
(original)
+++
archiva/trunk/archiva-modules/plugins/metadata-store-file/src/main/java/org/apache/archiva/metadata/repository/file/FileMetadataRepository.java
Tue Jun 5 21:42:02 2012
@@ -35,8 +35,10 @@ import org.apache.archiva.metadata.model
import org.apache.archiva.metadata.model.ProjectVersionReference;
import org.apache.archiva.metadata.model.Scm;
import org.apache.archiva.metadata.repository.MetadataRepository;
+import org.apache.archiva.metadata.repository.MetadataRepositoryException;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang.NotImplementedException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -635,6 +637,23 @@ public class FileMetadataRepository
}
}
+ /**
+ * FIXME implements this !!!!
+ * @param repositoryId
+ * @param namespace
+ * @param project
+ * @param projectVersion
+ * @param projectId
+ * @param metadataFacet will remove artifacts which have this {@link
MetadataFacet} using equals
+ * @throws MetadataRepositoryException
+ */
+ public void removeArtifact( String repositoryId, String namespace, String
project, String projectVersion,
+ String projectId, MetadataFacet metadataFacet )
+ throws MetadataRepositoryException
+ {
+ throw new NotImplementedException( "not implemented" );
+ }
+
public void removeRepository( String repoId )
{
File dir = getDirectory( repoId );
Modified:
archiva/trunk/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepository.java
URL:
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepository.java?rev=1346609&r1=1346608&r2=1346609&view=diff
==============================================================================
---
archiva/trunk/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepository.java
(original)
+++
archiva/trunk/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepository.java
Tue Jun 5 21:42:02 2012
@@ -194,6 +194,27 @@ public class JcrMetadataRepository
node.setProperty( "version", artifactMeta.getVersion() );
+ // iterate over available facets to update/add/remove from the
artifactMetadata
+ for ( String facetId : metadataFacetFactories.keySet() )
+ {
+ MetadataFacet metadataFacet = artifactMeta.getFacet( facetId );
+ if ( node.hasNode( facetId ) )
+ {
+ node.getNode( facetId ).remove();
+ }
+ if ( metadataFacet != null )
+ {
+ // recreate, to ensure properties are removed
+ Node n = node.addNode( facetId );
+ n.addMixin( FACET_NODE_TYPE );
+
+ for ( Map.Entry<String, String> entry :
metadataFacet.toProperties().entrySet() )
+ {
+ n.setProperty( entry.getKey(), entry.getValue() );
+ }
+ }
+ }
+ /*
for ( MetadataFacet facet : artifactMeta.getFacetList() )
{
if ( node.hasNode( facet.getFacetId() ) )
@@ -210,6 +231,7 @@ public class JcrMetadataRepository
n.setProperty( entry.getKey(), entry.getValue() );
}
}
+ */
}
catch ( RepositoryException e )
{
@@ -1011,6 +1033,40 @@ public class JcrMetadataRepository
}
}
+ public void removeArtifact( String repositoryId, String namespace, String
project, String projectVersion,
+ MetadataFacet metadataFacet )
+ throws MetadataRepositoryException
+ {
+ try
+ {
+ Node root = getJcrSession().getRootNode();
+ String path = getProjectVersionPath( repositoryId, namespace,
project, projectVersion );
+
+ if ( root.hasNode( path ) )
+ {
+ Node node = root.getNode( path );
+
+ for ( Node n : JcrUtils.getChildNodes( node ) )
+ {
+ if ( n.isNodeType( ARTIFACT_NODE_TYPE ) )
+ {
+ ArtifactMetadata artifactMetadata =
getArtifactFromNode( repositoryId, n );
+ log.debug( "artifactMetadata: {}", artifactMetadata );
+ MetadataFacet metadataFacetToRemove =
artifactMetadata.getFacet( metadataFacet.getFacetId() );
+ if ( metadataFacetToRemove != null &&
metadataFacet.equals( metadataFacetToRemove ) )
+ {
+ n.remove();
+ }
+ }
+ }
+ }
+ }
+ catch ( RepositoryException e )
+ {
+ throw new MetadataRepositoryException( e.getMessage(), e );
+ }
+ }
+
public Collection<ArtifactMetadata> getArtifacts( String repositoryId,
String namespace, String projectId,
String projectVersion )
throws MetadataResolutionException