Author: olamy
Date: Wed Nov  9 16:21:33 2011
New Revision: 1199828

URL: http://svn.apache.org/viewvc?rev=1199828&view=rev
Log:
[MRM-1551] add rest method to delete artifact.

Modified:
    
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/services/ArchivaRestServiceException.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/AbstractRestService.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/AbstractArchivaRestTest.java
    
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/CopyArtifactTest.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/archiva-web/archiva-rest/archiva-rest-services/src/test/resources/META-INF/spring-context-test.xml

Modified: 
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/services/ArchivaRestServiceException.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/ArchivaRestServiceException.java?rev=1199828&r1=1199827&r2=1199828&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/services/ArchivaRestServiceException.java
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/services/ArchivaRestServiceException.java
 Wed Nov  9 16:21:33 2011
@@ -25,8 +25,27 @@ package org.apache.archiva.rest.api.serv
 public class ArchivaRestServiceException
     extends Exception
 {
+
+    private int httpErrorCode;
+
     public ArchivaRestServiceException( String message )
     {
         super( message );
     }
+
+    public ArchivaRestServiceException( String s, int httpErrorCode )
+    {
+        super( s );
+        this.httpErrorCode = httpErrorCode;
+    }
+
+    public int getHttpErrorCode()
+    {
+        return httpErrorCode;
+    }
+
+    public void setHttpErrorCode( int httpErrorCode )
+    {
+        this.httpErrorCode = httpErrorCode;
+    }
 }

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=1199828&r1=1199827&r2=1199828&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
 Wed Nov  9 16:21:33 2011
@@ -19,6 +19,7 @@ package org.apache.archiva.rest.api.serv
  * under the License.
  */
 
+import org.apache.archiva.rest.api.model.Artifact;
 import org.apache.archiva.rest.api.model.ArtifactTransferRequest;
 import org.apache.archiva.security.common.ArchivaRoleConstants;
 import org.codehaus.plexus.redback.authorization.RedbackAuthorization;
@@ -92,4 +93,16 @@ public interface RepositoriesService
                                          @QueryParam( "fullDownload" ) boolean 
fullDownload )
         throws ArchivaRestServiceException;
 
+
+    @Path( "deleteArtifact" )
+    @GET
+    @Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, 
MediaType.TEXT_PLAIN } )
+    @RedbackAuthorization( noPermission = true )
+    /**
+     * permission are checked in impl
+     */
+    Boolean deleteArtifact( @QueryParam( "" ) Artifact artifact, @QueryParam( 
"repositoryId" ) String repositoryId )
+        throws ArchivaRestServiceException;
+
+
 }

Modified: 
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/AbstractRestService.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/AbstractRestService.java?rev=1199828&r1=1199827&r2=1199828&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/AbstractRestService.java
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/AbstractRestService.java
 Wed Nov  9 16:21:33 2011
@@ -51,4 +51,14 @@ public abstract class AbstractRestServic
         String remoteAddr = redbackRequestInformation == null ? null : 
redbackRequestInformation.getRemoteAddr();
         return new AuditInformation( user, remoteAddr );
     }
+
+    public List<AuditListener> getAuditListeners()
+    {
+        return auditListeners;
+    }
+
+    public void setAuditListeners( List<AuditListener> auditListeners )
+    {
+        this.auditListeners = auditListeners;
+    }
 }

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=1199828&r1=1199827&r2=1199828&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
 Wed Nov  9 16:21:33 2011
@@ -19,25 +19,39 @@ package org.apache.archiva.rest.services
  * under the License.
  */
 
+import org.apache.archiva.admin.model.AuditInformation;
 import org.apache.archiva.admin.model.RepositoryAdminException;
 import org.apache.archiva.admin.model.admin.ArchivaAdministration;
 import org.apache.archiva.admin.model.beans.ManagedRepository;
 import org.apache.archiva.admin.model.managed.ManagedRepositoryAdmin;
+import org.apache.archiva.audit.AuditEvent;
+import org.apache.archiva.audit.AuditListener;
 import org.apache.archiva.checksum.ChecksumAlgorithm;
 import org.apache.archiva.checksum.ChecksummedFile;
 import org.apache.archiva.common.plexusbridge.MavenIndexerUtils;
 import org.apache.archiva.common.plexusbridge.PlexusSisuBridge;
 import org.apache.archiva.common.utils.VersionComparator;
 import org.apache.archiva.common.utils.VersionUtil;
+import org.apache.archiva.metadata.model.ArtifactMetadata;
+import org.apache.archiva.metadata.repository.MetadataRepository;
+import org.apache.archiva.metadata.repository.MetadataRepositoryException;
+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.model.ArchivaRepositoryMetadata;
 import org.apache.archiva.model.ArtifactReference;
+import org.apache.archiva.model.VersionedReference;
+import org.apache.archiva.repository.ContentNotFoundException;
 import org.apache.archiva.repository.ManagedRepositoryContent;
 import org.apache.archiva.repository.RepositoryContentFactory;
 import org.apache.archiva.repository.RepositoryException;
+import org.apache.archiva.repository.RepositoryNotFoundException;
+import org.apache.archiva.repository.events.RepositoryListener;
 import org.apache.archiva.repository.metadata.MetadataTools;
 import org.apache.archiva.repository.metadata.RepositoryMetadataException;
 import org.apache.archiva.repository.metadata.RepositoryMetadataReader;
 import org.apache.archiva.repository.metadata.RepositoryMetadataWriter;
+import org.apache.archiva.rest.api.model.Artifact;
 import org.apache.archiva.rest.api.model.ArtifactTransferRequest;
 import org.apache.archiva.rest.api.services.ArchivaRestServiceException;
 import org.apache.archiva.rest.api.services.RepositoriesService;
@@ -52,8 +66,6 @@ import org.apache.archiva.security.commo
 import org.apache.commons.io.FilenameUtils;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang.StringUtils;
-import org.apache.maven.index.NexusIndexer;
-import org.apache.maven.index.context.IndexCreator;
 import org.apache.maven.index.context.IndexingContext;
 import org.codehaus.plexus.redback.authentication.AuthenticationResult;
 import org.codehaus.plexus.redback.authorization.AuthorizationException;
@@ -73,11 +85,15 @@ import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
 import java.io.IOException;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Calendar;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.Date;
 import java.util.List;
+import java.util.TimeZone;
 
 /**
  * @author Olivier Lamy
@@ -88,7 +104,7 @@ public class DefaultRepositoriesService
     extends AbstractRestService
     implements RepositoriesService
 {
-    private Logger log = LoggerFactory.getLogger( getClass( ) );
+    private Logger log = LoggerFactory.getLogger( getClass() );
 
     @Inject
     @Named( value = "archivaTaskScheduler#repository" )
@@ -123,6 +139,13 @@ public class DefaultRepositoriesService
     @Inject
     private DownloadRemoteIndexScheduler downloadRemoteIndexScheduler;
 
+    @Inject
+    @Named( value = "repositorySessionFactory" )
+    protected RepositorySessionFactory repositorySessionFactory;
+
+    @Inject
+    protected List<RepositoryListener> listeners = new 
ArrayList<RepositoryListener>();
+
     private ChecksumAlgorithm[] algorithms = new ChecksumAlgorithm[]{ 
ChecksumAlgorithm.SHA1, ChecksumAlgorithm.MD5 };
 
     public Boolean scanRepository( String repositoryId, boolean fullScan )
@@ -132,7 +155,7 @@ public class DefaultRepositoriesService
             log.info( "scanning of repository with id {} already scheduled", 
repositoryId );
             return Boolean.FALSE;
         }
-        RepositoryTask task = new RepositoryTask( );
+        RepositoryTask task = new RepositoryTask();
         task.setRepositoryId( repositoryId );
         task.setScanAll( fullScan );
         try
@@ -154,7 +177,7 @@ public class DefaultRepositoriesService
 
     public Boolean removeScanningTaskFromQueue( String repositoryId )
     {
-        RepositoryTask task = new RepositoryTask( );
+        RepositoryTask task = new RepositoryTask();
         task.setRepositoryId( repositoryId );
         try
         {
@@ -187,8 +210,8 @@ public class DefaultRepositoriesService
         }
         catch ( Exception e )
         {
-            log.error( e.getMessage( ), e );
-            throw new ArchivaRestServiceException( e.getMessage( ) );
+            log.error( e.getMessage(), e );
+            throw new ArchivaRestServiceException( e.getMessage() );
         }
     }
 
@@ -201,8 +224,8 @@ public class DefaultRepositoriesService
         }
         catch ( DownloadRemoteIndexException e )
         {
-            log.error( e.getMessage( ), e );
-            throw new ArchivaRestServiceException( e.getMessage( ) );
+            log.error( e.getMessage(), e );
+            throw new ArchivaRestServiceException( e.getMessage() );
         }
         return Boolean.TRUE;
     }
@@ -211,18 +234,18 @@ public class DefaultRepositoriesService
         throws ArchivaRestServiceException
     {
         // check parameters
-        String userName = getAuditInformation( ).getUser( ).getUsername( );
+        String userName = getAuditInformation().getUser().getUsername();
         if ( StringUtils.isBlank( userName ) )
         {
             throw new ArchivaRestServiceException( "copyArtifact call: 
userName not found" );
         }
 
-        if ( StringUtils.isBlank( artifactTransferRequest.getRepositoryId( ) ) 
)
+        if ( StringUtils.isBlank( artifactTransferRequest.getRepositoryId() ) )
         {
             throw new ArchivaRestServiceException( "copyArtifact call: 
sourceRepositoryId cannot be null" );
         }
 
-        if ( StringUtils.isBlank( 
artifactTransferRequest.getTargetRepositoryId( ) ) )
+        if ( StringUtils.isBlank( 
artifactTransferRequest.getTargetRepositoryId() ) )
         {
             throw new ArchivaRestServiceException( "copyArtifact call: 
targetRepositoryId cannot be null" );
         }
@@ -230,51 +253,51 @@ public class DefaultRepositoriesService
         ManagedRepository source = null;
         try
         {
-            source = managedRepositoryAdmin.getManagedRepository( 
artifactTransferRequest.getRepositoryId( ) );
+            source = managedRepositoryAdmin.getManagedRepository( 
artifactTransferRequest.getRepositoryId() );
         }
         catch ( RepositoryAdminException e )
         {
-            throw new ArchivaRestServiceException( e.getMessage( ) );
+            throw new ArchivaRestServiceException( e.getMessage() );
         }
 
         if ( source == null )
         {
             throw new ArchivaRestServiceException(
-                "cannot find repository with id " + 
artifactTransferRequest.getRepositoryId( ) );
+                "cannot find repository with id " + 
artifactTransferRequest.getRepositoryId() );
         }
 
         ManagedRepository target = null;
         try
         {
-            target = managedRepositoryAdmin.getManagedRepository( 
artifactTransferRequest.getTargetRepositoryId( ) );
+            target = managedRepositoryAdmin.getManagedRepository( 
artifactTransferRequest.getTargetRepositoryId() );
         }
         catch ( RepositoryAdminException e )
         {
-            throw new ArchivaRestServiceException( e.getMessage( ) );
+            throw new ArchivaRestServiceException( e.getMessage() );
         }
 
         if ( target == null )
         {
             throw new ArchivaRestServiceException(
-                "cannot find repository with id " + 
artifactTransferRequest.getTargetRepositoryId( ) );
+                "cannot find repository with id " + 
artifactTransferRequest.getTargetRepositoryId() );
         }
 
-        if ( StringUtils.isBlank( artifactTransferRequest.getGroupId( ) ) )
+        if ( StringUtils.isBlank( artifactTransferRequest.getGroupId() ) )
         {
             throw new ArchivaRestServiceException( "groupId is mandatory" );
         }
 
-        if ( StringUtils.isBlank( artifactTransferRequest.getArtifactId( ) ) )
+        if ( StringUtils.isBlank( artifactTransferRequest.getArtifactId() ) )
         {
             throw new ArchivaRestServiceException( "artifactId is mandatory" );
         }
 
-        if ( StringUtils.isBlank( artifactTransferRequest.getVersion( ) ) )
+        if ( StringUtils.isBlank( artifactTransferRequest.getVersion() ) )
         {
             throw new ArchivaRestServiceException( "version is mandatory" );
         }
 
-        if ( VersionUtil.isSnapshot( artifactTransferRequest.getVersion( ) ) )
+        if ( VersionUtil.isSnapshot( artifactTransferRequest.getVersion() ) )
         {
             throw new ArchivaRestServiceException( "copy of SNAPSHOT not 
supported" );
         }
@@ -284,7 +307,7 @@ public class DefaultRepositoriesService
         User user = null;
         try
         {
-            user = securitySystem.getUserManager( ).findUser( userName );
+            user = securitySystem.getUserManager().findUser( userName );
         }
         catch ( UserNotFoundException e )
         {
@@ -298,17 +321,17 @@ public class DefaultRepositoriesService
         {
             boolean authz =
                 securitySystem.isAuthorized( securitySession, 
ArchivaRoleConstants.OPERATION_REPOSITORY_ACCESS,
-                                             
artifactTransferRequest.getRepositoryId( ) );
+                                             
artifactTransferRequest.getRepositoryId() );
             if ( !authz )
             {
                 throw new ArchivaRestServiceException(
-                    "not authorized to access repo:" + 
artifactTransferRequest.getRepositoryId( ) );
+                    "not authorized to access repo:" + 
artifactTransferRequest.getRepositoryId() );
             }
         }
         catch ( AuthorizationException e )
         {
-            log.error( "error reading permission: " + e.getMessage( ), e );
-            throw new ArchivaRestServiceException( e.getMessage( ) );
+            log.error( "error reading permission: " + e.getMessage(), e );
+            throw new ArchivaRestServiceException( e.getMessage() );
         }
 
         // check karma on target: write
@@ -316,71 +339,71 @@ public class DefaultRepositoriesService
         {
             boolean authz =
                 securitySystem.isAuthorized( securitySession, 
ArchivaRoleConstants.OPERATION_REPOSITORY_UPLOAD,
-                                             
artifactTransferRequest.getTargetRepositoryId( ) );
+                                             
artifactTransferRequest.getTargetRepositoryId() );
             if ( !authz )
             {
                 throw new ArchivaRestServiceException(
-                    "not authorized to write to repo:" + 
artifactTransferRequest.getTargetRepositoryId( ) );
+                    "not authorized to write to repo:" + 
artifactTransferRequest.getTargetRepositoryId() );
             }
         }
         catch ( AuthorizationException e )
         {
-            log.error( "error reading permission: " + e.getMessage( ), e );
-            throw new ArchivaRestServiceException( e.getMessage( ) );
+            log.error( "error reading permission: " + e.getMessage(), e );
+            throw new ArchivaRestServiceException( e.getMessage() );
         }
 
         // sounds good we can continue !
 
-        ArtifactReference artifactReference = new ArtifactReference( );
-        artifactReference.setArtifactId( 
artifactTransferRequest.getArtifactId( ) );
-        artifactReference.setGroupId( artifactTransferRequest.getGroupId( ) );
-        artifactReference.setVersion( artifactTransferRequest.getVersion( ) );
-        artifactReference.setClassifier( 
artifactTransferRequest.getClassifier( ) );
-        String packaging = StringUtils.trim( 
artifactTransferRequest.getPackaging( ) );
+        ArtifactReference artifactReference = new ArtifactReference();
+        artifactReference.setArtifactId( 
artifactTransferRequest.getArtifactId() );
+        artifactReference.setGroupId( artifactTransferRequest.getGroupId() );
+        artifactReference.setVersion( artifactTransferRequest.getVersion() );
+        artifactReference.setClassifier( 
artifactTransferRequest.getClassifier() );
+        String packaging = StringUtils.trim( 
artifactTransferRequest.getPackaging() );
         artifactReference.setType( StringUtils.isEmpty( packaging ) ? "jar" : 
packaging );
 
         try
         {
 
             ManagedRepositoryContent sourceRepository =
-                repositoryFactory.getManagedRepositoryContent( 
artifactTransferRequest.getRepositoryId( ) );
+                repositoryFactory.getManagedRepositoryContent( 
artifactTransferRequest.getRepositoryId() );
 
             String artifactSourcePath = sourceRepository.toPath( 
artifactReference );
 
             if ( StringUtils.isEmpty( artifactSourcePath ) )
             {
-                log.error( "cannot find artifact " + 
artifactTransferRequest.toString( ) );
-                throw new ArchivaRestServiceException( "cannot find artifact " 
+ artifactTransferRequest.toString( ) );
+                log.error( "cannot find artifact " + 
artifactTransferRequest.toString() );
+                throw new ArchivaRestServiceException( "cannot find artifact " 
+ artifactTransferRequest.toString() );
             }
 
-            File artifactFile = new File( source.getLocation( ), 
artifactSourcePath );
+            File artifactFile = new File( source.getLocation(), 
artifactSourcePath );
 
-            if ( !artifactFile.exists( ) )
+            if ( !artifactFile.exists() )
             {
-                log.error( "cannot find artifact " + 
artifactTransferRequest.toString( ) );
-                throw new ArchivaRestServiceException( "cannot find artifact " 
+ artifactTransferRequest.toString( ) );
+                log.error( "cannot find artifact " + 
artifactTransferRequest.toString() );
+                throw new ArchivaRestServiceException( "cannot find artifact " 
+ artifactTransferRequest.toString() );
             }
 
             ManagedRepositoryContent targetRepository =
-                repositoryFactory.getManagedRepositoryContent( 
artifactTransferRequest.getTargetRepositoryId( ) );
+                repositoryFactory.getManagedRepositoryContent( 
artifactTransferRequest.getTargetRepositoryId() );
 
             String artifactPath = targetRepository.toPath( artifactReference );
 
             int lastIndex = artifactPath.lastIndexOf( '/' );
 
             String path = artifactPath.substring( 0, lastIndex );
-            File targetPath = new File( target.getLocation( ), path );
+            File targetPath = new File( target.getLocation(), path );
 
-            Date lastUpdatedTimestamp = Calendar.getInstance( ).getTime( );
+            Date lastUpdatedTimestamp = Calendar.getInstance().getTime();
             int newBuildNumber = 1;
             String timestamp = null;
 
             File versionMetadataFile = new File( targetPath, 
MetadataTools.MAVEN_METADATA );
             ArchivaRepositoryMetadata versionMetadata = getMetadata( 
versionMetadataFile );
 
-            if ( !targetPath.exists( ) )
+            if ( !targetPath.exists() )
             {
-                targetPath.mkdirs( );
+                targetPath.mkdirs();
             }
 
             String filename = artifactPath.substring( lastIndex + 1 );
@@ -388,70 +411,70 @@ public class DefaultRepositoriesService
             // FIXME some dupe with uploadaction
 
             boolean fixChecksums =
-                !( archivaAdministration.getKnownContentConsumers( ).contains( 
"create-missing-checksums" ) );
+                !( archivaAdministration.getKnownContentConsumers().contains( 
"create-missing-checksums" ) );
 
             File targetFile = new File( targetPath, filename );
-            if ( targetFile.exists( ) && target.isBlockRedeployments( ) )
+            if ( targetFile.exists() && target.isBlockRedeployments() )
             {
                 throw new ArchivaRestServiceException(
-                    "artifact already exists in target repo: " + 
artifactTransferRequest.getTargetRepositoryId( )
+                    "artifact already exists in target repo: " + 
artifactTransferRequest.getTargetRepositoryId()
                         + " and redeployment blocked" );
             }
             else
             {
                 copyFile( artifactFile, targetPath, filename, fixChecksums );
-                queueRepositoryTask( target.getId( ), targetFile );
+                queueRepositoryTask( target.getId(), targetFile );
             }
 
             // copy source pom to target repo
             String pomFilename = filename;
-            if ( StringUtils.isNotBlank( 
artifactTransferRequest.getClassifier( ) ) )
+            if ( StringUtils.isNotBlank( 
artifactTransferRequest.getClassifier() ) )
             {
-                pomFilename = StringUtils.remove( pomFilename, "-" + 
artifactTransferRequest.getClassifier( ) );
+                pomFilename = StringUtils.remove( pomFilename, "-" + 
artifactTransferRequest.getClassifier() );
             }
             pomFilename = FilenameUtils.removeExtension( pomFilename ) + 
".pom";
 
             File pomFile = new File(
-                new File( source.getLocation( ), artifactSourcePath.substring( 
0, artifactPath.lastIndexOf( '/' ) ) ),
+                new File( source.getLocation(), artifactSourcePath.substring( 
0, artifactPath.lastIndexOf( '/' ) ) ),
                 pomFilename );
 
-            if ( pomFile != null && pomFile.length( ) > 0 )
+            if ( pomFile != null && pomFile.length() > 0 )
             {
                 copyFile( pomFile, targetPath, pomFilename, fixChecksums );
-                queueRepositoryTask( target.getId( ), new File( targetPath, 
pomFilename ) );
+                queueRepositoryTask( target.getId(), new File( targetPath, 
pomFilename ) );
 
 
             }
 
             // explicitly update only if metadata-updater consumer is not 
enabled!
-            if ( !archivaAdministration.getKnownContentConsumers( ).contains( 
"metadata-updater" ) )
+            if ( !archivaAdministration.getKnownContentConsumers().contains( 
"metadata-updater" ) )
             {
-                updateProjectMetadata( targetPath.getAbsolutePath( ), 
lastUpdatedTimestamp, timestamp, newBuildNumber,
+                updateProjectMetadata( targetPath.getAbsolutePath(), 
lastUpdatedTimestamp, timestamp, newBuildNumber,
                                        fixChecksums, artifactTransferRequest );
 
 
             }
 
             String msg =
-                "Artifact \'" + artifactTransferRequest.getGroupId( ) + ":" + 
artifactTransferRequest.getArtifactId( )
-                    + ":" + artifactTransferRequest.getVersion( ) + "\' was 
successfully deployed to repository \'"
-                    + artifactTransferRequest.getTargetRepositoryId( ) + "\'";
+                "Artifact \'" + artifactTransferRequest.getGroupId() + ":" + 
artifactTransferRequest.getArtifactId()
+                    + ":" + artifactTransferRequest.getVersion() + "\' was 
successfully deployed to repository \'"
+                    + artifactTransferRequest.getTargetRepositoryId() + "\'";
 
         }
         catch ( RepositoryException e )
         {
-            log.error( "RepositoryException: " + e.getMessage( ), e );
-            throw new ArchivaRestServiceException( e.getMessage( ) );
+            log.error( "RepositoryException: " + e.getMessage(), e );
+            throw new ArchivaRestServiceException( e.getMessage() );
         }
         catch ( RepositoryAdminException e )
         {
-            log.error( "RepositoryAdminException: " + e.getMessage( ), e );
-            throw new ArchivaRestServiceException( e.getMessage( ) );
+            log.error( "RepositoryAdminException: " + e.getMessage(), e );
+            throw new ArchivaRestServiceException( e.getMessage() );
         }
         catch ( IOException e )
         {
-            log.error( "IOException: " + e.getMessage( ), e );
-            throw new ArchivaRestServiceException( e.getMessage( ) );
+            log.error( "IOException: " + e.getMessage(), e );
+            throw new ArchivaRestServiceException( e.getMessage() );
         }
         return true;
     }
@@ -460,7 +483,7 @@ public class DefaultRepositoriesService
 
     private void queueRepositoryTask( String repositoryId, File localFile )
     {
-        RepositoryTask task = new RepositoryTask( );
+        RepositoryTask task = new RepositoryTask();
         task.setRepositoryId( repositoryId );
         task.setResourceFile( localFile );
         task.setUpdateRelatedArtifacts( true );
@@ -472,7 +495,7 @@ public class DefaultRepositoriesService
         }
         catch ( TaskQueueException e )
         {
-            log.error( "Unable to queue repository task to execute consumers 
on resource file ['" + localFile.getName( )
+            log.error( "Unable to queue repository task to execute consumers 
on resource file ['" + localFile.getName()
                            + "']." );
         }
     }
@@ -480,14 +503,21 @@ public class DefaultRepositoriesService
     private ArchivaRepositoryMetadata getMetadata( File metadataFile )
         throws RepositoryMetadataException
     {
-        ArchivaRepositoryMetadata metadata = new ArchivaRepositoryMetadata( );
-        if ( metadataFile.exists( ) )
+        ArchivaRepositoryMetadata metadata = new ArchivaRepositoryMetadata();
+        if ( metadataFile.exists() )
         {
             metadata = RepositoryMetadataReader.read( metadataFile );
         }
         return metadata;
     }
 
+    private File getMetadata( String targetPath )
+    {
+        String artifactPath = targetPath.substring( 0, targetPath.lastIndexOf( 
File.separatorChar ) );
+
+        return new File( artifactPath, MetadataTools.MAVEN_METADATA );
+    }
+
     private void copyFile( File sourceFile, File targetPath, String 
targetFilename, boolean fixChecksums )
         throws IOException
     {
@@ -500,8 +530,8 @@ public class DefaultRepositoriesService
         }
         finally
         {
-            out.close( );
-            input.close( );
+            out.close();
+            input.close();
         }
 
         if ( fixChecksums )
@@ -520,50 +550,50 @@ public class DefaultRepositoriesService
                                         boolean fixChecksums, 
ArtifactTransferRequest artifactTransferRequest )
         throws RepositoryMetadataException
     {
-        List<String> availableVersions = new ArrayList<String>( );
-        String latestVersion = artifactTransferRequest.getVersion( );
+        List<String> availableVersions = new ArrayList<String>();
+        String latestVersion = artifactTransferRequest.getVersion();
 
-        File projectDir = new File( targetPath ).getParentFile( );
+        File projectDir = new File( targetPath ).getParentFile();
         File projectMetadataFile = new File( projectDir, 
MetadataTools.MAVEN_METADATA );
 
         ArchivaRepositoryMetadata projectMetadata = getMetadata( 
projectMetadataFile );
 
-        if ( projectMetadataFile.exists( ) )
+        if ( projectMetadataFile.exists() )
         {
-            availableVersions = projectMetadata.getAvailableVersions( );
+            availableVersions = projectMetadata.getAvailableVersions();
 
-            Collections.sort( availableVersions, 
VersionComparator.getInstance( ) );
+            Collections.sort( availableVersions, 
VersionComparator.getInstance() );
 
-            if ( !availableVersions.contains( 
artifactTransferRequest.getVersion( ) ) )
+            if ( !availableVersions.contains( 
artifactTransferRequest.getVersion() ) )
             {
-                availableVersions.add( artifactTransferRequest.getVersion( ) );
+                availableVersions.add( artifactTransferRequest.getVersion() );
             }
 
-            latestVersion = availableVersions.get( availableVersions.size( ) - 
1 );
+            latestVersion = availableVersions.get( availableVersions.size() - 
1 );
         }
         else
         {
-            availableVersions.add( artifactTransferRequest.getVersion( ) );
+            availableVersions.add( artifactTransferRequest.getVersion() );
 
-            projectMetadata.setGroupId( artifactTransferRequest.getGroupId( ) 
);
-            projectMetadata.setArtifactId( 
artifactTransferRequest.getArtifactId( ) );
+            projectMetadata.setGroupId( artifactTransferRequest.getGroupId() );
+            projectMetadata.setArtifactId( 
artifactTransferRequest.getArtifactId() );
         }
 
-        if ( projectMetadata.getGroupId( ) == null )
+        if ( projectMetadata.getGroupId() == null )
         {
-            projectMetadata.setGroupId( artifactTransferRequest.getGroupId( ) 
);
+            projectMetadata.setGroupId( artifactTransferRequest.getGroupId() );
         }
 
-        if ( projectMetadata.getArtifactId( ) == null )
+        if ( projectMetadata.getArtifactId() == null )
         {
-            projectMetadata.setArtifactId( 
artifactTransferRequest.getArtifactId( ) );
+            projectMetadata.setArtifactId( 
artifactTransferRequest.getArtifactId() );
         }
 
         projectMetadata.setLatestVersion( latestVersion );
         projectMetadata.setLastUpdatedTimestamp( lastUpdatedTimestamp );
         projectMetadata.setAvailableVersions( availableVersions );
 
-        if ( !VersionUtil.isSnapshot( artifactTransferRequest.getVersion( ) ) )
+        if ( !VersionUtil.isSnapshot( artifactTransferRequest.getVersion() ) )
         {
             projectMetadata.setReleasedVersion( latestVersion );
         }
@@ -575,6 +605,222 @@ public class DefaultRepositoriesService
             fixChecksums( projectMetadataFile );
         }
     }
+
+
+    public Boolean deleteArtifact( Artifact artifact, String repositoryId )
+        throws ArchivaRestServiceException
+    {
+        String userName = getAuditInformation().getUser().getUsername();
+        if ( StringUtils.isBlank( userName ) )
+        {
+            // TODO use constants from a class instead of magic number
+            throw new ArchivaRestServiceException( "deleteArtifact call: 
userName not found", 403 );
+        }
+        if ( artifact == null )
+        {
+            throw new ArchivaRestServiceException( "artifact cannot be null", 
400 );
+        }
+        if ( StringUtils.isEmpty( repositoryId ) )
+        {
+            throw new ArchivaRestServiceException( "repositoryId cannot be 
null", 400 );
+        }
+
+        // TODO more control on artifact fields
+
+        RepositorySession repositorySession = 
repositorySessionFactory.createSession();
+        try
+        {
+            Date lastUpdatedTimestamp = Calendar.getInstance().getTime();
+
+            TimeZone timezone = TimeZone.getTimeZone( "UTC" );
+            DateFormat fmt = new SimpleDateFormat( "yyyyMMdd.HHmmss" );
+            fmt.setTimeZone( timezone );
+            ManagedRepository repoConfig = 
managedRepositoryAdmin.getManagedRepository( repositoryId );
+
+            VersionedReference ref = new VersionedReference();
+            ref.setArtifactId( artifact.getArtifactId() );
+            ref.setGroupId( artifact.getGroupId() );
+            ref.setVersion( artifact.getVersion() );
+
+            ManagedRepositoryContent repository = 
repositoryFactory.getManagedRepositoryContent( repositoryId );
+
+            if ( StringUtils.isNotBlank( artifact.getClassifier() ) )
+            {
+                if ( StringUtils.isBlank( artifact.getPackaging() ) )
+                {
+                    throw new ArchivaRestServiceException( "You must configure 
a type/packaging when using classifier",
+                                                           400 );
+                }
+                ArtifactReference artifactReference = new ArtifactReference();
+                artifactReference.setArtifactId( artifact.getArtifactId() );
+                artifactReference.setGroupId( artifact.getGroupId() );
+                artifactReference.setVersion( artifact.getVersion() );
+                artifactReference.setClassifier( artifact.getClassifier() );
+                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() )
+            {
+                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 );
+
+            File metadataFile = getMetadata( targetPath.getAbsolutePath() );
+            ArchivaRepositoryMetadata metadata = getMetadata( metadataFile );
+
+            updateMetadata( metadata, metadataFile, lastUpdatedTimestamp, 
artifact );
+
+            MetadataRepository metadataRepository = 
repositorySession.getRepository();
+
+            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 ( artifact.getVersion().equals( artifact.getVersion() ) )
+                {
+                    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 )
+                    {
+                        listener.deleteArtifact( metadataRepository, 
repository.getId(),
+                                                 
artifactMetadata.getNamespace(), artifactMetadata.getProject(),
+                                                 
artifactMetadata.getVersion(), artifactMetadata.getId() );
+                    }
+
+                    triggerAuditEvent( repositoryId, path, 
AuditEvent.REMOVE_FILE );
+                }
+            }
+            repositorySession.save();
+        }
+
+        catch ( ContentNotFoundException e )
+        {
+            throw new ArchivaRestServiceException( "Artifact does not exist: " 
+ e.getMessage(), 400 );
+        }
+        catch ( RepositoryNotFoundException e )
+        {
+            throw new ArchivaRestServiceException( "Target repository cannot 
be found: " + e.getMessage(), 400 );
+        }
+        catch ( RepositoryException e )
+        {
+            throw new ArchivaRestServiceException( "Repository exception: " + 
e.getMessage(), 400 );
+        }
+        catch ( MetadataResolutionException e )
+        {
+            throw new ArchivaRestServiceException( "Repository exception: " + 
e.getMessage(), 400 );
+        }
+        catch ( MetadataRepositoryException e )
+        {
+            throw new ArchivaRestServiceException( "Repository exception: " + 
e.getMessage(), 400 );
+        }
+        catch ( RepositoryAdminException e )
+        {
+            throw new ArchivaRestServiceException( "RepositoryAdmin exception: 
" + e.getMessage(), 400 );
+        }
+        finally
+
+        {
+            repositorySession.close();
+        }
+        return Boolean.TRUE;
+    }
+
+
+    /**
+     * Update artifact level metadata. Creates one if metadata does not exist 
after artifact deletion.
+     *
+     * @param metadata
+     */
+    private void updateMetadata( ArchivaRepositoryMetadata metadata, File 
metadataFile, Date lastUpdatedTimestamp,
+                                 Artifact artifact )
+        throws RepositoryMetadataException
+    {
+        List<String> availableVersions = new ArrayList<String>();
+        String latestVersion = "";
+
+        if ( metadataFile.exists() )
+        {
+            if ( metadata.getAvailableVersions() != null )
+            {
+                availableVersions = metadata.getAvailableVersions();
+
+                if ( availableVersions.size() > 0 )
+                {
+                    Collections.sort( availableVersions, 
VersionComparator.getInstance() );
+
+                    if ( availableVersions.contains( artifact.getVersion() ) )
+                    {
+                        availableVersions.remove( availableVersions.indexOf( 
artifact.getVersion() ) );
+                    }
+                    if ( availableVersions.size() > 0 )
+                    {
+                        latestVersion = availableVersions.get( 
availableVersions.size() - 1 );
+                    }
+                }
+            }
+        }
+
+        if ( metadata.getGroupId() == null )
+        {
+            metadata.setGroupId( artifact.getGroupId() );
+        }
+        if ( metadata.getArtifactId() == null )
+        {
+            metadata.setArtifactId( artifact.getArtifactId() );
+        }
+
+        if ( !VersionUtil.isSnapshot( artifact.getVersion() ) )
+        {
+            if ( metadata.getReleasedVersion() != null && 
metadata.getReleasedVersion().equals(
+                artifact.getVersion() ) )
+            {
+                metadata.setReleasedVersion( latestVersion );
+            }
+        }
+
+        metadata.setLatestVersion( latestVersion );
+        metadata.setLastUpdatedTimestamp( lastUpdatedTimestamp );
+        metadata.setAvailableVersions( availableVersions );
+
+        RepositoryMetadataWriter.write( metadata, metadataFile );
+        ChecksummedFile checksum = new ChecksummedFile( metadataFile );
+        checksum.fixChecksums( algorithms );
+    }
+
+    protected void triggerAuditEvent( String repositoryId, String filePath, 
String action )
+    {
+        AuditEvent auditEvent = new AuditEvent();
+        auditEvent.setAction( action );
+        auditEvent.setRepositoryId( repositoryId );
+        auditEvent.setResource( filePath );
+        AuditInformation auditInformation = getAuditInformation();
+        auditEvent.setUserId( auditInformation.getUser() == null ? "" : 
auditInformation.getUser().getUsername() );
+        auditEvent.setRemoteIP( auditInformation.getRemoteAddr() );
+        for ( AuditListener auditListener : getAuditListeners() )
+        {
+            auditListener.auditEvent( auditEvent );
+        }
+    }
 }
 
 

Modified: 
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/AbstractArchivaRestTest.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/AbstractArchivaRestTest.java?rev=1199828&r1=1199827&r2=1199828&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/AbstractArchivaRestTest.java
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/AbstractArchivaRestTest.java
 Wed Nov  9 16:21:33 2011
@@ -30,6 +30,7 @@ import org.apache.archiva.rest.api.servi
 import org.apache.archiva.rest.api.services.RepositoriesService;
 import org.apache.archiva.rest.api.services.RepositoryGroupService;
 import org.apache.archiva.rest.api.services.SearchService;
+import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.cxf.jaxrs.client.JAXRSClientFactory;
 import org.apache.cxf.jaxrs.client.WebClient;
@@ -189,4 +190,78 @@ public abstract class AbstractArchivaRes
         String baseUrlSysProps = System.getProperty( "archiva.baseRestUrl" );
         return StringUtils.isBlank( baseUrlSysProps ) ? "http://localhost:"; + 
port : baseUrlSysProps;
     }
+
+    //-----------------------------------------------------
+    // utilities to create repos for testing
+    //-----------------------------------------------------
+
+    static final String TARGET_REPO_ID = "test-copy-target";
+
+    static final String SOURCE_REPO_ID = "test-origin-repo";
+
+    protected void initSourceTargetRepo()
+        throws Exception
+    {
+        File targetRepo = new File( "target/test-repo-copy" );
+        if ( targetRepo.exists() )
+        {
+            FileUtils.deleteDirectory( targetRepo );
+        }
+        assertFalse( targetRepo.exists() );
+        targetRepo.mkdirs();
+
+        if ( getManagedRepositoriesService( authorizationHeader 
).getManagedRepository( TARGET_REPO_ID ) != null )
+        {
+            getManagedRepositoriesService( authorizationHeader 
).deleteManagedRepository( TARGET_REPO_ID, true );
+            assertNull( getManagedRepositoriesService( authorizationHeader 
).getManagedRepository( TARGET_REPO_ID ) );
+        }
+        ManagedRepository managedRepository = getTestManagedRepository();
+        managedRepository.setId( TARGET_REPO_ID );
+        managedRepository.setLocation( targetRepo.getCanonicalPath() );
+        managedRepository.setCronExpression( "* * * * * ?" );
+        getManagedRepositoriesService( authorizationHeader 
).addManagedRepository( managedRepository );
+        assertNotNull( getManagedRepositoriesService( authorizationHeader 
).getManagedRepository( TARGET_REPO_ID ) );
+
+        File originRepo = new File( "target/test-origin-repo" );
+        if ( originRepo.exists() )
+        {
+            FileUtils.deleteDirectory( originRepo );
+        }
+        assertFalse( originRepo.exists() );
+        FileUtils.copyDirectory( new File( "src/test/repo-with-osgi" ), 
originRepo );
+
+        if ( getManagedRepositoriesService( authorizationHeader 
).getManagedRepository( SOURCE_REPO_ID ) != null )
+        {
+            getManagedRepositoriesService( authorizationHeader 
).deleteManagedRepository( SOURCE_REPO_ID, true );
+            assertNull( getManagedRepositoriesService( authorizationHeader 
).getManagedRepository( SOURCE_REPO_ID ) );
+        }
+
+        managedRepository = getTestManagedRepository();
+        managedRepository.setId( SOURCE_REPO_ID );
+        managedRepository.setLocation( originRepo.getCanonicalPath() );
+
+        getManagedRepositoriesService( authorizationHeader 
).addManagedRepository( managedRepository );
+        assertNotNull( getManagedRepositoriesService( authorizationHeader 
).getManagedRepository( SOURCE_REPO_ID ) );
+
+        getArchivaAdministrationService().addKnownContentConsumer( 
"create-missing-checksums" );
+        getArchivaAdministrationService().addKnownContentConsumer( 
"metadata-updater" );
+
+    }
+
+    protected void cleanRepos()
+        throws Exception
+    {
+
+        if ( getManagedRepositoriesService( authorizationHeader 
).getManagedRepository( TARGET_REPO_ID ) != null )
+        {
+            getManagedRepositoriesService( authorizationHeader 
).deleteManagedRepository( TARGET_REPO_ID, true );
+            assertNull( getManagedRepositoriesService( authorizationHeader 
).getManagedRepository( TARGET_REPO_ID ) );
+        }
+        if ( getManagedRepositoriesService( authorizationHeader 
).getManagedRepository( SOURCE_REPO_ID ) != null )
+        {
+            getManagedRepositoriesService( authorizationHeader 
).deleteManagedRepository( SOURCE_REPO_ID, true );
+            assertNull( getManagedRepositoriesService( authorizationHeader 
).getManagedRepository( SOURCE_REPO_ID ) );
+        }
+
+    }
 }

Modified: 
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/CopyArtifactTest.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/CopyArtifactTest.java?rev=1199828&r1=1199827&r2=1199828&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/CopyArtifactTest.java
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/CopyArtifactTest.java
 Wed Nov  9 16:21:33 2011
@@ -24,6 +24,7 @@ import org.apache.archiva.rest.api.servi
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.cxf.jaxrs.client.ServerWebApplicationException;
+import org.junit.Ignore;
 import org.junit.Test;
 
 import java.io.File;
@@ -34,75 +35,7 @@ import java.io.File;
 public class CopyArtifactTest
     extends AbstractArchivaRestTest
 {
-    static final String TARGET_REPO_ID = "test-copy-target";
 
-    static final String SOURCE_REPO_ID = "test-origin-repo";
-
-    protected void initSourceTargetRepo()
-        throws Exception
-    {
-        File targetRepo = new File( "target/test-repo-copy" );
-        if ( targetRepo.exists() )
-        {
-            FileUtils.deleteDirectory( targetRepo );
-        }
-        assertFalse( targetRepo.exists() );
-        targetRepo.mkdirs();
-
-        if ( getManagedRepositoriesService( authorizationHeader 
).getManagedRepository( TARGET_REPO_ID ) != null )
-        {
-            getManagedRepositoriesService( authorizationHeader 
).deleteManagedRepository( TARGET_REPO_ID, true );
-            assertNull( getManagedRepositoriesService( authorizationHeader 
).getManagedRepository( TARGET_REPO_ID ) );
-        }
-        ManagedRepository managedRepository = getTestManagedRepository();
-        managedRepository.setId( TARGET_REPO_ID );
-        managedRepository.setLocation( targetRepo.getCanonicalPath() );
-        managedRepository.setCronExpression( "* * * * * ?" );
-        getManagedRepositoriesService( authorizationHeader 
).addManagedRepository( managedRepository );
-        assertNotNull( getManagedRepositoriesService( authorizationHeader 
).getManagedRepository( TARGET_REPO_ID ) );
-
-        File originRepo = new File( "target/test-origin-repo" );
-        if ( originRepo.exists() )
-        {
-            FileUtils.deleteDirectory( originRepo );
-        }
-        assertFalse( originRepo.exists() );
-        FileUtils.copyDirectory( new File( "src/test/repo-with-osgi" ), 
originRepo );
-
-        if ( getManagedRepositoriesService( authorizationHeader 
).getManagedRepository( SOURCE_REPO_ID ) != null )
-        {
-            getManagedRepositoriesService( authorizationHeader 
).deleteManagedRepository( SOURCE_REPO_ID, true );
-            assertNull( getManagedRepositoriesService( authorizationHeader 
).getManagedRepository( SOURCE_REPO_ID ) );
-        }
-
-        managedRepository = getTestManagedRepository();
-        managedRepository.setId( SOURCE_REPO_ID );
-        managedRepository.setLocation( originRepo.getCanonicalPath() );
-
-        getManagedRepositoriesService( authorizationHeader 
).addManagedRepository( managedRepository );
-        assertNotNull( getManagedRepositoriesService( authorizationHeader 
).getManagedRepository( SOURCE_REPO_ID ) );
-
-        getArchivaAdministrationService().addKnownContentConsumer( 
"create-missing-checksums" );
-        getArchivaAdministrationService().addKnownContentConsumer( 
"metadata-updater" );
-
-    }
-
-    public void clean()
-        throws Exception
-    {
-
-        if ( getManagedRepositoriesService( authorizationHeader 
).getManagedRepository( TARGET_REPO_ID ) != null )
-        {
-            getManagedRepositoriesService( authorizationHeader 
).deleteManagedRepository( TARGET_REPO_ID, true );
-            assertNull( getManagedRepositoriesService( authorizationHeader 
).getManagedRepository( TARGET_REPO_ID ) );
-        }
-        if ( getManagedRepositoriesService( authorizationHeader 
).getManagedRepository( SOURCE_REPO_ID ) != null )
-        {
-            getManagedRepositoriesService( authorizationHeader 
).deleteManagedRepository( SOURCE_REPO_ID, true );
-            assertNull( getManagedRepositoriesService( authorizationHeader 
).getManagedRepository( SOURCE_REPO_ID ) );
-        }
-
-    }
 
     @Test
     public void copyToAnEmptyRepo()
@@ -142,7 +75,7 @@ public class CopyArtifactTest
         }
         finally
         {
-            clean();
+            cleanRepos();
         }
     }
 
@@ -171,16 +104,16 @@ public class CopyArtifactTest
         }
         finally
         {
-            clean();
+            cleanRepos();
         }
 
     }
 
-    //@Test
+    @Ignore
     public void copyToAnExistingRepo()
         throws Exception
     {
         initSourceTargetRepo();
-        clean();
+        cleanRepos();
     }
 }

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=1199828&r1=1199827&r2=1199828&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
 Wed Nov  9 16:21:33 2011
@@ -21,10 +21,10 @@ 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.services.ManagedRepositoriesService;
 import org.apache.archiva.rest.api.services.RepositoriesService;
 import org.apache.cxf.jaxrs.client.ServerWebApplicationException;
-import org.apache.cxf.jaxrs.client.WebClient;
 import org.junit.Test;
 
 import java.io.File;
@@ -56,14 +56,10 @@ public class RepositoriesServiceTest
     public void scanRepo()
         throws Exception
     {
-        RepositoriesService service = getRepositoriesService();
-        WebClient.client( service ).header( "Authorization", 
authorizationHeader );
-        WebClient.getConfig( service 
).getHttpConduit().getClient().setReceiveTimeout( 300000 );
+        RepositoriesService service = getRepositoriesService( 
authorizationHeader );
 
         ManagedRepositoriesService managedRepositoriesService = 
getManagedRepositoriesService( authorizationHeader );
 
-        WebClient.getConfig( managedRepositoriesService 
).getHttpConduit().getClient().setReceiveTimeout( 300000 );
-
         String repoId = 
managedRepositoriesService.getManagedRepositories().get( 0 ).getId();
 
         int timeout = 20000;
@@ -76,6 +72,72 @@ public class RepositoriesServiceTest
         assertTrue( service.scanRepository( repoId, true ) );
     }
 
+    @Test( expected = ServerWebApplicationException.class )
+    public void deleteArtifactKarmaFailed()
+        throws Exception
+    {
+        initSourceTargetRepo();
+        try
+        {
+            File artifactFile =
+                new File( 
"target/test-origin-repo/commons-logging/commons-logging/1.0.1/commons-logging-1.0.1.jar"
 );
+
+            assertTrue( "artifact not exists:" + artifactFile.getPath(), 
artifactFile.exists() );
+
+            Artifact artifact = new Artifact();
+            artifact.setGroupId( "commons-logging" );
+            artifact.setArtifactId( "commons-logging" );
+            artifact.setVersion( "1.0.1" );
+            artifact.setPackaging( "jar" );
+
+            RepositoriesService repositoriesService = getRepositoriesService( 
null );
+
+            repositoriesService.deleteArtifact( artifact, SOURCE_REPO_ID );
+        }
+        catch ( ServerWebApplicationException e )
+        {
+            assertEquals( 403, e.getStatus() );
+            throw e;
+
+        }
+        finally
+        {
+            cleanRepos();
+        }
+    }
+
+
+    @Test
+    public void deleteArtifact()
+        throws Exception
+    {
+        initSourceTargetRepo();
+        try
+        {
+            File artifactFile =
+                new File( 
"target/test-origin-repo/commons-logging/commons-logging/1.0.1/commons-logging-1.0.1.jar"
 );
+
+            assertTrue( "artifact not exists:" + artifactFile.getPath(), 
artifactFile.exists() );
+
+            Artifact artifact = new Artifact();
+            artifact.setGroupId( "commons-logging" );
+            artifact.setArtifactId( "commons-logging" );
+            artifact.setVersion( "1.0.1" );
+            artifact.setPackaging( "jar" );
+
+            RepositoriesService repositoriesService = getRepositoriesService( 
authorizationHeader );
+
+            repositoriesService.deleteArtifact( artifact, SOURCE_REPO_ID );
+
+            assertFalse( "artifact not deleted exists:" + 
artifactFile.getPath(), artifactFile.exists() );
+
+        }
+        finally
+        {
+            cleanRepos();
+        }
+    }
+
 
     protected ManagedRepository getTestManagedRepository()
     {

Modified: 
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/resources/META-INF/spring-context-test.xml
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/resources/META-INF/spring-context-test.xml?rev=1199828&r1=1199827&r2=1199828&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/resources/META-INF/spring-context-test.xml
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/resources/META-INF/spring-context-test.xml
 Wed Nov  9 16:21:33 2011
@@ -82,4 +82,6 @@
     <constructor-arg value="${appserver.base}/jcr"/>
   </bean>
 
+  <alias name="repositorySessionFactory#jcr" alias="repositorySessionFactory"/>
+
 </beans>
\ No newline at end of file


Reply via email to