Author: olamy
Date: Tue May 21 13:28:32 2013
New Revision: 1484801

URL: http://svn.apache.org/r1484801
Log:
more implementations with cassandra

Added:
    
archiva/sandbox/trunk/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/model/ProjectVersionMetadataModel.java
   (with props)
Modified:
    archiva/sandbox/trunk/metadata-store-cassandra/pom.xml
    
archiva/sandbox/trunk/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepository.java
    
archiva/sandbox/trunk/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/model/MetadataFacetModel.java
    
archiva/sandbox/trunk/metadata-store-cassandra/src/test/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepositoryTest.java

Modified: archiva/sandbox/trunk/metadata-store-cassandra/pom.xml
URL: 
http://svn.apache.org/viewvc/archiva/sandbox/trunk/metadata-store-cassandra/pom.xml?rev=1484801&r1=1484800&r2=1484801&view=diff
==============================================================================
--- archiva/sandbox/trunk/metadata-store-cassandra/pom.xml (original)
+++ archiva/sandbox/trunk/metadata-store-cassandra/pom.xml Tue May 21 13:28:32 
2013
@@ -60,7 +60,24 @@
     <dependency>
       <groupId>org.apache.geronimo.specs</groupId>
       <artifactId>geronimo-jpa_2.0_spec</artifactId>
-      <version>1.1</version>
+    </dependency>
+    <dependency>
+      <groupId>net.sf.beanlib</groupId>
+      <artifactId>beanlib</artifactId>
+      <exclusions>
+        <exclusion>
+          <groupId>cglib</groupId>
+          <artifactId>cglib</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>aopalliance</groupId>
+          <artifactId>aopalliance</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>log4j</groupId>
+          <artifactId>log4j</artifactId>
+        </exclusion>
+      </exclusions>
     </dependency>
 
     <!--

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=1484801&r1=1484800&r2=1484801&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
 Tue May 21 13:28:32 2013
@@ -25,8 +25,10 @@ import com.netflix.astyanax.connectionpo
 import com.netflix.astyanax.connectionpool.exceptions.NotFoundException;
 import com.netflix.astyanax.entitystore.DefaultEntityManager;
 import com.netflix.astyanax.entitystore.EntityManager;
+import net.sf.beanlib.provider.replicator.BeanReplicator;
 import org.apache.archiva.configuration.ArchivaConfiguration;
 import org.apache.archiva.metadata.model.ArtifactMetadata;
+import org.apache.archiva.metadata.model.FacetedMetadata;
 import org.apache.archiva.metadata.model.MetadataFacet;
 import org.apache.archiva.metadata.model.MetadataFacetFactory;
 import org.apache.archiva.metadata.model.ProjectMetadata;
@@ -39,6 +41,7 @@ import org.apache.archiva.metadata.repos
 import 
org.apache.archiva.metadata.repository.cassandra.model.MetadataFacetModel;
 import org.apache.archiva.metadata.repository.cassandra.model.Namespace;
 import org.apache.archiva.metadata.repository.cassandra.model.Project;
+import 
org.apache.archiva.metadata.repository.cassandra.model.ProjectVersionMetadataModel;
 import org.apache.archiva.metadata.repository.cassandra.model.Repository;
 import org.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
@@ -81,6 +84,8 @@ public class CassandraMetadataRepository
 
     private EntityManager<MetadataFacetModel, String> 
metadataFacetModelEntityManager;
 
+    private EntityManager<ProjectVersionMetadataModel, String> 
projectVersionMetadataModelEntityManager;
+
     public CassandraMetadataRepository( Map<String, MetadataFacetFactory> 
metadataFacetFactories,
                                         ArchivaConfiguration configuration, 
Keyspace keyspace )
     {
@@ -152,6 +157,16 @@ public class CassandraMetadataRepository
                 metadataFacetModelEntityManager.createStorage( null );
             }
 
+            projectVersionMetadataModelEntityManager =
+                new DefaultEntityManager.Builder<ProjectVersionMetadataModel, 
String>().withEntityType(
+                    ProjectVersionMetadataModel.class ).withKeyspace( keyspace 
).build();
+
+            exists = columnFamilyExists( "projectversionmetadatamodel" );
+            if ( !exists )
+            {
+                projectVersionMetadataModelEntityManager.createStorage( null );
+            }
+
         }
         catch ( PersistenceException e )
         {
@@ -232,6 +247,17 @@ public class CassandraMetadataRepository
         this.metadataFacetModelEntityManager = metadataFacetModelEntityManager;
     }
 
+    public EntityManager<ProjectVersionMetadataModel, String> 
getProjectVersionMetadataModelEntityManager()
+    {
+        return projectVersionMetadataModelEntityManager;
+    }
+
+    public void setProjectVersionMetadataModelEntityManager(
+        EntityManager<ProjectVersionMetadataModel, String> 
projectVersionMetadataModelEntityManager )
+    {
+        this.projectVersionMetadataModelEntityManager = 
projectVersionMetadataModelEntityManager;
+    }
+
     @Override
     public void updateNamespace( String repositoryId, String namespaceId )
         throws MetadataRepositoryException
@@ -536,10 +562,23 @@ public class CassandraMetadataRepository
         }
 
         // now facets
-        // iterate over available facets to update/add/remove from the 
artifactMetadata
+        updateFacets( artifactMeta, artifactMetadataModel );
+
+    }
+
+    /**
+     * iterate over available facets to remove/add from the artifactMetadata
+     *
+     * @param facetedMetadata
+     * @param artifactMetadataModel only use for the key
+     */
+    private void updateFacets( final FacetedMetadata facetedMetadata,
+                               final ArtifactMetadataModel 
artifactMetadataModel )
+    {
+
         for ( final String facetId : metadataFacetFactories.keySet() )
         {
-            MetadataFacet metadataFacet = artifactMeta.getFacet( facetId );
+            MetadataFacet metadataFacet = facetedMetadata.getFacet( facetId );
             if ( metadataFacet == null )
             {
                 continue;
@@ -553,7 +592,11 @@ public class CassandraMetadataRepository
                 @Override
                 public Boolean apply( MetadataFacetModel metadataFacetModel )
                 {
-                    if ( StringUtils.equals( metadataFacetModel.getFacetId(), 
facetId ) )
+                    ArtifactMetadataModel tmp = 
metadataFacetModel.getArtifactMetadataModel();
+                    if ( StringUtils.equals( metadataFacetModel.getFacetId(), 
facetId ) && StringUtils.equals(
+                        tmp.getRepositoryId(), 
artifactMetadataModel.getRepositoryId() ) && StringUtils.equals(
+                        tmp.getNamespace(), 
artifactMetadataModel.getNamespace() ) && StringUtils.equals(
+                        tmp.getProject(), artifactMetadataModel.getProject() ) 
)
                     {
                         metadataFacetModels.add( metadataFacetModel );
                     }
@@ -570,17 +613,17 @@ public class CassandraMetadataRepository
 
             for ( Map.Entry<String, String> entry : properties.entrySet() )
             {
-                key = new MetadataFacetModel.KeyBuilder().withKey( 
entry.getKey() ).withArtifactMetadataModel(
-                    artifactMetadataModel ).withFacetId( facetId ).build();
+                String key = new MetadataFacetModel.KeyBuilder().withKey( 
entry.getKey() ).withArtifactMetadataModel(
+                    artifactMetadataModel ).withFacetId( facetId ).withName( 
metadataFacet.getName() ).build();
                 MetadataFacetModel metadataFacetModel =
                     new MetadataFacetModel( key, artifactMetadataModel, 
facetId, entry.getKey(), entry.getValue(),
                                             metadataFacet.getName() );
+                metadataFacetModelsToAdd.add( metadataFacetModel );
             }
 
-            metadataFacetModelEntityManager.put( metadataFacetModels );
+            metadataFacetModelEntityManager.put( metadataFacetModelsToAdd );
 
         }
-
     }
 
     @Override
@@ -588,9 +631,36 @@ public class CassandraMetadataRepository
                                       ProjectVersionMetadata versionMetadata )
         throws MetadataRepositoryException
     {
-        foo
+        // we don't test of repository and namespace really exist !
+        String key = new 
ProjectVersionMetadataModel.KeyBuilder().withRepository( repositoryId 
).withNamespace(
+            namespace ).withProjectId( projectId ).withId( 
versionMetadata.getId() ).build();
+
+        ProjectVersionMetadataModel projectVersionMetadataModel = 
projectVersionMetadataModelEntityManager.get( key );
+
+        projectVersionMetadataModel =
+            new BeanReplicator().replicateBean( versionMetadata, 
ProjectVersionMetadataModel.class );
+        projectVersionMetadataModel.setRowId( key );
+
+        projectVersionMetadataModel.setCiManagement( 
versionMetadata.getCiManagement() );
+        projectVersionMetadataModel.setIssueManagement( 
versionMetadata.getIssueManagement() );
+        projectVersionMetadataModel.setOrganization( 
versionMetadata.getOrganization() );
+        projectVersionMetadataModel.setScm( versionMetadata.getScm() );
+        // FIXME collections !!
+
+        projectVersionMetadataModelEntityManager.put( 
projectVersionMetadataModel );
+
+        ArtifactMetadataModel artifactMetadataModel = new 
ArtifactMetadataModel();
+        artifactMetadataModel.setArtifactMetadataModelId(
+            new ArtifactMetadataModel.KeyBuilder().withId( 
versionMetadata.getId() ).withRepositoryId(
+                repositoryId ).withNamespace( namespace ).withProjectVersion( 
versionMetadata.getVersion() ).build() );
+        artifactMetadataModel.setRepositoryId( repositoryId );
+        artifactMetadataModel.setNamespace( namespace );
+        artifactMetadataModel.setProject( projectId );
+        // facets etc...
+        updateFacets( versionMetadata, artifactMetadataModel );
     }
 
+
     private static class BooleanHolder
     {
         private boolean value;
@@ -676,35 +746,237 @@ public class CassandraMetadataRepository
     public void addMetadataFacet( String repositoryId, MetadataFacet 
metadataFacet )
         throws MetadataRepositoryException
     {
-        //To change body of implemented methods use File | Settings | File 
Templates.
+
+        if ( metadataFacet == null || metadataFacet.toProperties() == null || 
metadataFacet.toProperties().isEmpty() )
+        {
+            return;
+        }
+        for ( Map.Entry<String, String> entry : 
metadataFacet.toProperties().entrySet() )
+        {
+
+            String key = new MetadataFacetModel.KeyBuilder().withRepositoryId( 
repositoryId ).withFacetId(
+                metadataFacet.getFacetId() ).withName( metadataFacet.getName() 
).withKey( entry.getKey() ).build();
+
+            MetadataFacetModel metadataFacetModel = 
metadataFacetModelEntityManager.get( key );
+            if ( metadataFacetModel == null )
+            {
+                metadataFacetModel = new MetadataFacetModel();
+                // we need to store the repositoryId
+                ArtifactMetadataModel artifactMetadataModel = new 
ArtifactMetadataModel();
+                artifactMetadataModel.setRepositoryId( repositoryId );
+                metadataFacetModel.setArtifactMetadataModel( 
artifactMetadataModel );
+                metadataFacetModel.setId( key );
+                metadataFacetModel.setKey( entry.getKey() );
+                metadataFacetModel.setFacetId( metadataFacet.getFacetId() );
+                metadataFacetModel.setName( metadataFacetModel.getName() );
+            }
+            metadataFacetModel.setValue( entry.getValue() );
+            metadataFacetModelEntityManager.put( metadataFacetModel );
+
+        }
     }
 
     @Override
-    public void removeMetadataFacets( String repositoryId, String facetId )
+    public void removeMetadataFacets( final String repositoryId, final String 
facetId )
         throws MetadataRepositoryException
     {
-        //To change body of implemented methods use File | Settings | File 
Templates.
+        logger.debug( "removeMetadataFacets repositoryId: '{}', facetId: 
'{}'", repositoryId, facetId );
+        final List<MetadataFacetModel> toRemove = new 
ArrayList<MetadataFacetModel>();
+
+        // FIXME cql query
+        metadataFacetModelEntityManager.visitAll( new 
Function<MetadataFacetModel, Boolean>()
+        {
+            @Override
+            public Boolean apply( MetadataFacetModel metadataFacetModel )
+            {
+                if ( metadataFacetModel != null )
+                {
+                    if ( StringUtils.equals( 
metadataFacetModel.getArtifactMetadataModel().getRepositoryId(),
+                                             repositoryId ) && 
StringUtils.equals( metadataFacetModel.getFacetId(),
+                                                                               
    facetId ) )
+                    {
+                        toRemove.add( metadataFacetModel );
+                    }
+                }
+                return Boolean.TRUE;
+            }
+        } );
+        logger.debug( "removeMetadataFacets repositoryId: '{}', facetId: '{}', 
toRemove: {}", repositoryId, facetId,
+                      toRemove );
+        metadataFacetModelEntityManager.remove( toRemove );
     }
 
     @Override
-    public void removeMetadataFacet( String repositoryId, String facetId, 
String name )
+    public void removeMetadataFacet( final String repositoryId, final String 
facetId, final String name )
         throws MetadataRepositoryException
     {
-        //To change body of implemented methods use File | Settings | File 
Templates.
+        logger.debug( "removeMetadataFacets repositoryId: '{}', facetId: 
'{}'", repositoryId, facetId );
+        final List<MetadataFacetModel> toRemove = new 
ArrayList<MetadataFacetModel>();
+
+        // FIXME cql query
+        metadataFacetModelEntityManager.visitAll( new 
Function<MetadataFacetModel, Boolean>()
+        {
+            @Override
+            public Boolean apply( MetadataFacetModel metadataFacetModel )
+            {
+                if ( metadataFacetModel != null )
+                {
+                    if ( StringUtils.equals( 
metadataFacetModel.getArtifactMetadataModel().getRepositoryId(),
+                                             repositoryId ) && 
StringUtils.equals( metadataFacetModel.getFacetId(),
+                                                                               
    facetId ) && StringUtils.equals(
+                        metadataFacetModel.getName(), name ) )
+                    {
+                        toRemove.add( metadataFacetModel );
+                    }
+                }
+                return Boolean.TRUE;
+            }
+        } );
+        logger.debug( "removeMetadataFacets repositoryId: '{}', facetId: '{}', 
toRemove: {}", repositoryId, facetId,
+                      toRemove );
+        metadataFacetModelEntityManager.remove( toRemove );
     }
 
     @Override
-    public List<ArtifactMetadata> getArtifactsByDateRange( String 
repositoryId, Date startTime, Date endTime )
+    public List<ArtifactMetadata> getArtifactsByDateRange( final String 
repositoryId, final Date startTime,
+                                                           final Date endTime )
         throws MetadataRepositoryException
     {
-        return null;  //To change body of implemented methods use File | 
Settings | File Templates.
+
+        final List<ArtifactMetadataModel> artifactMetadataModels = new 
ArrayList<ArtifactMetadataModel>();
+
+        // FIXME cql query
+        artifactMetadataModelEntityManager.visitAll( new 
Function<ArtifactMetadataModel, Boolean>()
+        {
+            @Override
+            public Boolean apply( ArtifactMetadataModel artifactMetadataModel )
+            {
+                if ( artifactMetadataModel != null )
+                {
+                    if ( StringUtils.equals( 
artifactMetadataModel.getRepositoryId(), repositoryId )
+                        && artifactMetadataModel.getNamespace() != null &&
+                        artifactMetadataModel.getProject() != null && 
artifactMetadataModel.getId() != null )
+                    {
+
+                        Date when = artifactMetadataModel.getWhenGathered();
+                        if ( when.getTime() >= startTime.getTime() && 
when.getTime() <= endTime.getTime() )
+                        {
+                            artifactMetadataModels.add( artifactMetadataModel 
);
+                        }
+                    }
+                }
+                return Boolean.TRUE;
+            }
+        } );
+        List<ArtifactMetadata> artifactMetadatas = new 
ArrayList<ArtifactMetadata>( artifactMetadataModels.size() );
+
+        for ( ArtifactMetadataModel model : artifactMetadataModels )
+        {
+            ArtifactMetadata artifactMetadata = new 
BeanReplicator().replicateBean( model, ArtifactMetadata.class );
+            populateFacets( artifactMetadata );
+            artifactMetadatas.add( artifactMetadata );
+        }
+
+        logger.debug( "getArtifactsByDateRange repositoryId: {}, startTime: 
{}, endTime: {}, artifactMetadatas: {}",
+                      repositoryId, startTime, endTime, artifactMetadatas );
+
+        return artifactMetadatas;
+    }
+
+    protected void populateFacets( final ArtifactMetadata artifactMetadata )
+    {
+        final List<MetadataFacetModel> metadataFacetModels = new 
ArrayList<MetadataFacetModel>();
+
+        metadataFacetModelEntityManager.visitAll( new 
Function<MetadataFacetModel, Boolean>()
+        {
+            @Override
+            public Boolean apply( MetadataFacetModel metadataFacetModel )
+            {
+                if ( metadataFacetModel != null )
+                {
+                    ArtifactMetadataModel artifactMetadataModel = 
metadataFacetModel.getArtifactMetadataModel();
+                    if ( artifactMetadataModel != null )
+                    {
+                        if ( StringUtils.equals( 
artifactMetadata.getRepositoryId(),
+                                                 
artifactMetadataModel.getRepositoryId() ) && StringUtils.equals(
+                            artifactMetadata.getNamespace(), 
artifactMetadataModel.getNamespace() )
+                            && StringUtils.equals( 
artifactMetadata.getRepositoryId(),
+                                                   
artifactMetadataModel.getRepositoryId() ) && StringUtils.equals(
+                            artifactMetadata.getProject(), 
artifactMetadataModel.getProject() ) && StringUtils.equals(
+                            artifactMetadata.getId(), 
artifactMetadataModel.getId() ) )
+                        {
+                            metadataFacetModels.add( metadataFacetModel );
+                        }
+                    }
+                }
+                return Boolean.TRUE;
+            }
+        } );
+        Map<String, Map<String, String>> facetValuesPerFacet = new 
HashMap<String, Map<String, String>>();
+
+        for ( MetadataFacetModel model : metadataFacetModels )
+        {
+            Map<String, String> values = facetValuesPerFacet.get( 
model.getName() );
+            if ( values == null )
+            {
+                values = new HashMap<String, String>();
+            }
+            values.put( model.getKey(), model.getValue() );
+            facetValuesPerFacet.put( model.getName(), values );
+        }
+
+        for ( Map.Entry<String, Map<String, String>> entry : 
facetValuesPerFacet.entrySet() )
+        {
+            MetadataFacetFactory factory = metadataFacetFactories.get( 
entry.getKey() );
+            MetadataFacet metadataFacet =
+                factory.createMetadataFacet( 
artifactMetadata.getRepositoryId(), entry.getKey() );
+            metadataFacet.fromProperties( entry.getValue() );
+            artifactMetadata.addFacet( metadataFacet );
+        }
     }
 
     @Override
-    public List<ArtifactMetadata> getArtifactsByChecksum( String repositoryId, 
String checksum )
+    public List<ArtifactMetadata> getArtifactsByChecksum( final String 
repositoryId, final String checksum )
         throws MetadataRepositoryException
     {
-        return null;  //To change body of implemented methods use File | 
Settings | File Templates.
+        final List<ArtifactMetadataModel> artifactMetadataModels = new 
ArrayList<ArtifactMetadataModel>();
+
+        // FIXME cql query
+        artifactMetadataModelEntityManager.visitAll( new 
Function<ArtifactMetadataModel, Boolean>()
+        {
+            @Override
+            public Boolean apply( ArtifactMetadataModel artifactMetadataModel )
+            {
+                if ( artifactMetadataModel != null )
+                {
+                    if ( StringUtils.equals( 
artifactMetadataModel.getRepositoryId(), repositoryId )
+                        && artifactMetadataModel.getNamespace() != null &&
+                        artifactMetadataModel.getProject() != null && 
artifactMetadataModel.getId() != null )
+                    {
+
+                        if ( StringUtils.equals( checksum, 
artifactMetadataModel.getMd5() ) || StringUtils.equals(
+                            checksum, artifactMetadataModel.getSha1() ) )
+                        {
+                            artifactMetadataModels.add( artifactMetadataModel 
);
+                        }
+                    }
+                }
+                return Boolean.TRUE;
+            }
+        } );
+        List<ArtifactMetadata> artifactMetadatas = new 
ArrayList<ArtifactMetadata>( artifactMetadataModels.size() );
+
+        for ( ArtifactMetadataModel model : artifactMetadataModels )
+        {
+            ArtifactMetadata artifactMetadata = new 
BeanReplicator().replicateBean( model, ArtifactMetadata.class );
+            populateFacets( artifactMetadata );
+            artifactMetadatas.add( artifactMetadata );
+        }
+
+        logger.debug( "getArtifactsByChecksum repositoryId: {}, checksum: {}, 
artifactMetadatas: {}", repositoryId,
+                      checksum, artifactMetadatas );
+
+        return artifactMetadatas;
     }
 
     @Override

Modified: 
archiva/sandbox/trunk/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/model/MetadataFacetModel.java
URL: 
http://svn.apache.org/viewvc/archiva/sandbox/trunk/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/model/MetadataFacetModel.java?rev=1484801&r1=1484800&r2=1484801&view=diff
==============================================================================
--- 
archiva/sandbox/trunk/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/model/MetadataFacetModel.java
 (original)
+++ 
archiva/sandbox/trunk/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/model/MetadataFacetModel.java
 Tue May 21 13:28:32 2013
@@ -178,6 +178,8 @@ public class MetadataFacetModel
 
         private String facetId;
 
+        private String repositoryId;
+
         public KeyBuilder()
         {
 
@@ -207,10 +209,20 @@ public class MetadataFacetModel
             return this;
         }
 
+        public KeyBuilder withRepositoryId( String repositoryId )
+        {
+            this.repositoryId = repositoryId;
+            return this;
+        }
+
         public String build()
         {
             // FIXME add some controls
-            return this.artifactMetadataModel.getArtifactMetadataModelId() + 
"-" + this.facetId + "-" + this.name + "-"
+            // getArtifactMetadataModelId can have no namespace, no project 
and no projectid for statistics
+            // only repositoryId with artifactMetadataModel
+            return ( this.artifactMetadataModel == null
+                ? this.repositoryId
+                : this.artifactMetadataModel.getArtifactMetadataModelId() ) + 
"-" + this.facetId + "-" + this.name + "-"
                 + this.key;
         }
     }

Added: 
archiva/sandbox/trunk/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/model/ProjectVersionMetadataModel.java
URL: 
http://svn.apache.org/viewvc/archiva/sandbox/trunk/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/model/ProjectVersionMetadataModel.java?rev=1484801&view=auto
==============================================================================
--- 
archiva/sandbox/trunk/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/model/ProjectVersionMetadataModel.java
 (added)
+++ 
archiva/sandbox/trunk/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/model/ProjectVersionMetadataModel.java
 Tue May 21 13:28:32 2013
@@ -0,0 +1,251 @@
+package org.apache.archiva.metadata.repository.cassandra.model;
+
+import org.apache.archiva.metadata.model.CiManagement;
+import org.apache.archiva.metadata.model.Dependency;
+import org.apache.archiva.metadata.model.IssueManagement;
+import org.apache.archiva.metadata.model.License;
+import org.apache.archiva.metadata.model.MailingList;
+import org.apache.archiva.metadata.model.Organization;
+import org.apache.archiva.metadata.model.Scm;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author Olivier Lamy
+ */
+@Entity
+public class ProjectVersionMetadataModel
+{
+    // repositoryId + namespace + projectId + id (version)
+    @Id
+    private String rowId;
+
+    /**
+     * id is the version
+     */
+    @Column(name = "id")
+    private String id;
+
+    @Column(name = "url")
+    private String url;
+
+    @Column(name = "name")
+    private String name;
+
+    @Column(name = "description")
+    private String description;
+
+    @Column(name = "organization")
+    private Organization organization;
+
+    @Column(name = "issueManagement")
+    private IssueManagement issueManagement;
+
+    @Column(name = "scm")
+    private Scm scm;
+
+    @Column(name = "issueManagement")
+    private CiManagement ciManagement;
+
+    // FIXME store those values in a separate table
+    //private List<License> licenses = new ArrayList<License>();
+
+    //private List<MailingList> mailingLists = new ArrayList<MailingList>();
+
+    //private List<Dependency> dependencies = new ArrayList<Dependency>();
+
+    @Column(name = "incomplete")
+    private boolean incomplete;
+
+    public String getRowId()
+    {
+        return rowId;
+    }
+
+    public void setRowId( String rowId )
+    {
+        this.rowId = rowId;
+    }
+
+    public String getId()
+    {
+        return id;
+    }
+
+    public void setId( String id )
+    {
+        this.id = id;
+    }
+
+    public String getUrl()
+    {
+        return url;
+    }
+
+    public void setUrl( String url )
+    {
+        this.url = url;
+    }
+
+    public String getName()
+    {
+        return name;
+    }
+
+    public void setName( String name )
+    {
+        this.name = name;
+    }
+
+    public String getDescription()
+    {
+        return description;
+    }
+
+    public void setDescription( String description )
+    {
+        this.description = description;
+    }
+
+    public Organization getOrganization()
+    {
+        return organization;
+    }
+
+    public void setOrganization( Organization organization )
+    {
+        this.organization = organization;
+    }
+
+    public IssueManagement getIssueManagement()
+    {
+        return issueManagement;
+    }
+
+    public void setIssueManagement( IssueManagement issueManagement )
+    {
+        this.issueManagement = issueManagement;
+    }
+
+    public Scm getScm()
+    {
+        return scm;
+    }
+
+    public void setScm( Scm scm )
+    {
+        this.scm = scm;
+    }
+
+    public CiManagement getCiManagement()
+    {
+        return ciManagement;
+    }
+
+    public void setCiManagement( CiManagement ciManagement )
+    {
+        this.ciManagement = ciManagement;
+    }
+
+    public boolean isIncomplete()
+    {
+        return incomplete;
+    }
+
+    public void setIncomplete( boolean incomplete )
+    {
+        this.incomplete = incomplete;
+    }
+
+    @Override
+    public boolean equals( Object o )
+    {
+        if ( this == o )
+        {
+            return true;
+        }
+        if ( o == null || getClass() != o.getClass() )
+        {
+            return false;
+        }
+
+        ProjectVersionMetadataModel that = (ProjectVersionMetadataModel) o;
+
+        if ( !rowId.equals( that.rowId ) )
+        {
+            return false;
+        }
+
+        return true;
+    }
+
+    @Override
+    public int hashCode()
+    {
+        return rowId.hashCode();
+    }
+
+    public static class KeyBuilder
+    {
+
+        private String namespace;
+
+        private String repositoryId;
+
+        private String projectId;
+
+        private String id;
+
+        public KeyBuilder()
+        {
+
+        }
+
+        public KeyBuilder withNamespace( Namespace namespace )
+        {
+            this.namespace = namespace.getId();
+            this.repositoryId = namespace.getRepository().getId();
+            return this;
+        }
+
+        public KeyBuilder withNamespace( String namespace )
+        {
+            this.namespace = namespace;
+            return this;
+        }
+
+        public KeyBuilder withRepository( String repositoryId )
+        {
+            this.repositoryId = repositoryId;
+            return this;
+        }
+
+        public KeyBuilder withRepository( Repository repository )
+        {
+            this.repositoryId = repository.getId();
+            return this;
+        }
+
+        public KeyBuilder withProjectId( String projectId )
+        {
+            this.projectId = projectId;
+            return this;
+        }
+
+        public KeyBuilder withId( String id )
+        {
+            this.id = id;
+            return this;
+        }
+
+        public String build()
+        {
+            // FIXME add some controls
+            return this.repositoryId + "-" + this.namespace + "-" + 
this.projectId + "-" + this.id;
+        }
+    }
+}

Propchange: 
archiva/sandbox/trunk/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/model/ProjectVersionMetadataModel.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
archiva/sandbox/trunk/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/model/ProjectVersionMetadataModel.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Modified: 
archiva/sandbox/trunk/metadata-store-cassandra/src/test/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepositoryTest.java
URL: 
http://svn.apache.org/viewvc/archiva/sandbox/trunk/metadata-store-cassandra/src/test/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepositoryTest.java?rev=1484801&r1=1484800&r2=1484801&view=diff
==============================================================================
--- 
archiva/sandbox/trunk/metadata-store-cassandra/src/test/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepositoryTest.java
 (original)
+++ 
archiva/sandbox/trunk/metadata-store-cassandra/src/test/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepositoryTest.java
 Tue May 21 13:28:32 2013
@@ -25,6 +25,7 @@ import org.apache.archiva.metadata.repos
 import 
org.apache.archiva.metadata.repository.cassandra.model.MetadataFacetModel;
 import org.apache.archiva.metadata.repository.cassandra.model.Namespace;
 import org.apache.archiva.metadata.repository.cassandra.model.Project;
+import 
org.apache.archiva.metadata.repository.cassandra.model.ProjectVersionMetadataModel;
 import org.apache.archiva.metadata.repository.cassandra.model.Repository;
 import org.apache.commons.io.FileUtils;
 import org.junit.After;
@@ -47,7 +48,7 @@ public class CassandraMetadataRepository
     private Logger logger = LoggerFactory.getLogger( getClass() );
 
     @Inject
-    @Named(value = "archivaEntityManagerFactory#cassandra")
+    @Named( value = "archivaEntityManagerFactory#cassandra" )
     CassandraEntityManagerFactory cassandraEntityManagerFactory;
 
     CassandraMetadataRepository cmr;
@@ -101,6 +102,10 @@ public class CassandraMetadataRepository
         List<MetadataFacetModel> metadataFacetModels = 
cmr.getMetadataFacetModelEntityManager().getAll();
         cmr.getMetadataFacetModelEntityManager().remove( metadataFacetModels );
 
+        List<ProjectVersionMetadataModel> projectVersionMetadataModels =
+            cmr.getProjectVersionMetadataModelEntityManager().getAll();
+        cmr.getProjectVersionMetadataModelEntityManager().remove( 
projectVersionMetadataModels );
+
     }
 
 }


Reply via email to