You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@archiva.apache.org by ol...@apache.org on 2013/06/01 14:25:52 UTC

svn commit: r1488508 - /archiva/sandbox/trunk/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepository.java

Author: olamy
Date: Sat Jun  1 12:25:52 2013
New Revision: 1488508

URL: http://svn.apache.org/r1488508
Log:
fix deleting repository

Modified:
    archiva/sandbox/trunk/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepository.java

Modified: archiva/sandbox/trunk/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepository.java
URL: http://svn.apache.org/viewvc/archiva/sandbox/trunk/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepository.java?rev=1488508&r1=1488507&r2=1488508&view=diff
==============================================================================
--- archiva/sandbox/trunk/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepository.java (original)
+++ archiva/sandbox/trunk/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepository.java Sat Jun  1 12:25:52 2013
@@ -323,16 +323,103 @@ public class CassandraMetadataRepository
 
 
     @Override
-    public void removeRepository( String repositoryId )
+    public void removeRepository( final String repositoryId )
         throws MetadataRepositoryException
     {
         try
         {
+            final List<ArtifactMetadataModel> artifactMetadataModels = new ArrayList<ArtifactMetadataModel>();
+
+            // remove data related to the repository
+            this.artifactMetadataModelEntityManager.visitAll( new Function<ArtifactMetadataModel, Boolean>()
+            {
+                @Override
+                public Boolean apply( ArtifactMetadataModel artifactMetadataModel )
+                {
+                    if ( artifactMetadataModel != null )
+                    {
+                        if ( StringUtils.equals( artifactMetadataModel.getRepositoryId(), repositoryId ) )
+                        {
+                            artifactMetadataModels.add( artifactMetadataModel );
+                        }
+                    }
+                    return Boolean.TRUE;
+                }
+            } );
+
+            artifactMetadataModelEntityManager.remove( artifactMetadataModels );
+
+            final List<Namespace> namespaces = new ArrayList<Namespace>();
+
+            namespaceEntityManager.visitAll( new Function<Namespace, Boolean>()
+            {
+                @Override
+                public Boolean apply( Namespace namespace )
+                {
+                    if ( namespace != null )
+                    {
+                        if ( StringUtils.equals( namespace.getRepository().getId(), repositoryId ) )
+                        {
+                            namespaces.add( namespace );
+                        }
+                    }
+                    return Boolean.TRUE;
+                }
+            } );
+
+            namespaceEntityManager.remove( namespaces );
+
+            final List<Project> projects = new ArrayList<Project>();
+            projectEntityManager.visitAll( new Function<Project, Boolean>()
+            {
+                @Override
+                public Boolean apply( Project project )
+                {
+                    if ( project != null )
+                    {
+                        if ( StringUtils.equals( project.getNamespace().getRepository().getId(), repositoryId ) )
+                        {
+                            projects.add( project );
+                        }
+                    }
+                    return Boolean.TRUE;
+                }
+            } );
+
+            projectEntityManager.remove( projects );
+
+            // TODO  cleanup or not
+            //final List<MetadataFacetModel> metadataFacetModels = new ArrayList<MetadataFacetModel>(  );
+            //metadataFacetModelEntityManager.visitAll( new Function<MetadataFacetModel, Boolean>()
+
+            final List<ProjectVersionMetadataModel> projectVersionMetadataModels =
+                new ArrayList<ProjectVersionMetadataModel>();
+
+            projectVersionMetadataModelEntityManager.visitAll( new Function<ProjectVersionMetadataModel, Boolean>()
+            {
+                @Override
+                public Boolean apply( ProjectVersionMetadataModel projectVersionMetadataModel )
+                {
+                    if ( projectVersionMetadataModel != null )
+                    {
+                        if ( StringUtils.equals( projectVersionMetadataModel.getNamespace().getRepository().getId(),
+                                                 repositoryId ) )
+                        {
+                            projectVersionMetadataModels.add( projectVersionMetadataModel );
+                        }
+                    }
+                    return Boolean.TRUE;
+                }
+            } );
+
+            projectVersionMetadataModelEntityManager.remove( projectVersionMetadataModels );
+
             Repository repository = repositoryEntityManager.get( repositoryId );
             if ( repository != null )
             {
                 repositoryEntityManager.remove( repository );
             }
+
         }
         catch ( PersistenceException e )
         {
@@ -558,15 +645,32 @@ public class CassandraMetadataRepository
     {
         String namespaceKey =
             new Namespace.KeyBuilder().withRepositoryId( repositoryId ).withNamespace( namespaceId ).build();
+        // create the namespace if not exists
         Namespace namespace = namespaceEntityManager.get( namespaceKey );
         if ( namespace == null )
         {
-            updateNamespace( repositoryId, namespaceId );
+            namespace = updateOrAddNamespace( repositoryId, namespaceId );
+        }
+
+        // create the project if not exist
+        String projectKey = new Project.KeyBuilder().withNamespace( namespace ).withProjectId( projectId ).build();
+
+        Project project = projectEntityManager.get( projectKey );
+        if ( project == null )
+        {
+            project = new Project( projectKey, projectId, namespace );
+            try
+            {
+                projectEntityManager.put( project );
+            }
+            catch ( PersistenceException e )
+            {
+                throw new MetadataRepositoryException( e.getMessage(), e );
+            }
         }
 
-        String key = new ArtifactMetadataModel.KeyBuilder().withRepositoryId( repositoryId ).withNamespace(
-            namespaceId ).withProject( projectId ).withId( artifactMeta.getId() ).withProjectVersion(
-            projectVersion ).build();
+        String key = new ArtifactMetadataModel.KeyBuilder().withNamespace( namespace ).withProject( projectId ).withId(
+            artifactMeta.getId() ).withProjectVersion( projectVersion ).build();
 
         ArtifactMetadataModel artifactMetadataModel = artifactMetadataModelEntityManager.get( key );
         if ( artifactMetadataModel == null )