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/05/21 15:27:36 UTC

svn commit: r1484799 - in /archiva/sandbox/trunk/metadata-store-cassandra/src: main/java/org/apache/archiva/metadata/repository/cassandra/ main/java/org/apache/archiva/metadata/repository/cassandra/model/ test/java/org/apache/archiva/metadata/repositor...

Author: olamy
Date: Tue May 21 13:27:35 2013
New Revision: 1484799

URL: http://svn.apache.org/r1484799
Log:
implement metadata facet wit cassandra

Added:
    archiva/sandbox/trunk/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/model/ArtifactMetadataModel.java   (with props)
    archiva/sandbox/trunk/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/model/MetadataFacetModel.java   (with props)
Modified:
    archiva/sandbox/trunk/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepository.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/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=1484799&r1=1484798&r2=1484799&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:27:35 2013
@@ -35,6 +35,8 @@ import org.apache.archiva.metadata.model
 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.cassandra.model.ArtifactMetadataModel;
+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.Repository;
@@ -47,6 +49,7 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Date;
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
@@ -74,6 +77,10 @@ public class CassandraMetadataRepository
 
     private EntityManager<Project, String> projectEntityManager;
 
+    private EntityManager<ArtifactMetadataModel, String> artifactMetadataModelEntityManager;
+
+    private EntityManager<MetadataFacetModel, String> metadataFacetModelEntityManager;
+
     public CassandraMetadataRepository( Map<String, MetadataFacetFactory> metadataFacetFactories,
                                         ArchivaConfiguration configuration, Keyspace keyspace )
     {
@@ -124,6 +131,27 @@ public class CassandraMetadataRepository
             {
                 projectEntityManager.createStorage( null );
             }
+
+            artifactMetadataModelEntityManager =
+                new DefaultEntityManager.Builder<ArtifactMetadataModel, String>().withEntityType(
+                    ArtifactMetadataModel.class ).withKeyspace( keyspace ).build();
+
+            exists = columnFamilyExists( "artifactmetadatamodel" );
+            if ( !exists )
+            {
+                artifactMetadataModelEntityManager.createStorage( null );
+            }
+
+            metadataFacetModelEntityManager =
+                new DefaultEntityManager.Builder<MetadataFacetModel, String>().withEntityType(
+                    MetadataFacetModel.class ).withKeyspace( keyspace ).build();
+
+            exists = columnFamilyExists( "metadatafacetmodel" );
+            if ( !exists )
+            {
+                metadataFacetModelEntityManager.createStorage( null );
+            }
+
         }
         catch ( PersistenceException e )
         {
@@ -182,6 +210,28 @@ public class CassandraMetadataRepository
         this.projectEntityManager = projectEntityManager;
     }
 
+    public EntityManager<ArtifactMetadataModel, String> getArtifactMetadataModelEntityManager()
+    {
+        return artifactMetadataModelEntityManager;
+    }
+
+    public void setArtifactMetadataModelEntityManager(
+        EntityManager<ArtifactMetadataModel, String> artifactMetadataModelEntityManager )
+    {
+        this.artifactMetadataModelEntityManager = artifactMetadataModelEntityManager;
+    }
+
+    public EntityManager<MetadataFacetModel, String> getMetadataFacetModelEntityManager()
+    {
+        return metadataFacetModelEntityManager;
+    }
+
+    public void setMetadataFacetModelEntityManager(
+        EntityManager<MetadataFacetModel, String> metadataFacetModelEntityManager )
+    {
+        this.metadataFacetModelEntityManager = metadataFacetModelEntityManager;
+    }
+
     @Override
     public void updateNamespace( String repositoryId, String namespaceId )
         throws MetadataRepositoryException
@@ -463,11 +513,74 @@ public class CassandraMetadataRepository
     }
 
     @Override
-    public void updateArtifact( String repositoryId, String namespace, String projectId, String projectVersion,
+    public void updateArtifact( String repositoryId, String namespaceId, String projectId, String projectVersion,
                                 ArtifactMetadata artifactMeta )
         throws MetadataRepositoryException
     {
-        //To change body of implemented methods use File | Settings | File Templates.
+        // TODO verif repository namespace exists ?
+        String key =
+            new ArtifactMetadataModel.KeyBuilder().withRepositoryId( repositoryId ).withNamespace( namespaceId ).withId(
+                projectId ).withProjectVersion( projectVersion ).build();
+
+        ArtifactMetadataModel artifactMetadataModel = artifactMetadataModelEntityManager.get( key );
+        if ( artifactMetadataModel == null )
+        {
+            artifactMetadataModel =
+                new ArtifactMetadataModel( key, projectId, repositoryId, namespaceId, artifactMeta.getProject(),
+                                           projectVersion, artifactMeta.getVersion(),
+                                           artifactMeta.getFileLastModified(), artifactMeta.getSize(),
+                                           artifactMeta.getMd5(), artifactMeta.getSha1(),
+                                           artifactMeta.getWhenGathered() );
+            artifactMetadataModelEntityManager.put( artifactMetadataModel );
+
+        }
+
+        // now facets
+        // iterate over available facets to update/add/remove from the artifactMetadata
+        for ( final String facetId : metadataFacetFactories.keySet() )
+        {
+            MetadataFacet metadataFacet = artifactMeta.getFacet( facetId );
+            if ( metadataFacet == null )
+            {
+                continue;
+            }
+            // clean first
+
+            final List<MetadataFacetModel> metadataFacetModels = new ArrayList<MetadataFacetModel>();
+
+            metadataFacetModelEntityManager.visitAll( new Function<MetadataFacetModel, Boolean>()
+            {
+                @Override
+                public Boolean apply( MetadataFacetModel metadataFacetModel )
+                {
+                    if ( StringUtils.equals( metadataFacetModel.getFacetId(), facetId ) )
+                    {
+                        metadataFacetModels.add( metadataFacetModel );
+                    }
+                    return Boolean.TRUE;
+                }
+            } );
+
+            metadataFacetModelEntityManager.remove( metadataFacetModels );
+
+            Map<String, String> properties = metadataFacet.toProperties();
+
+            final List<MetadataFacetModel> metadataFacetModelsToAdd =
+                new ArrayList<MetadataFacetModel>( properties.size() );
+
+            for ( Map.Entry<String, String> entry : properties.entrySet() )
+            {
+                key = new MetadataFacetModel.KeyBuilder().withKey( entry.getKey() ).withArtifactMetadataModel(
+                    artifactMetadataModel ).withFacetId( facetId ).build();
+                MetadataFacetModel metadataFacetModel =
+                    new MetadataFacetModel( key, artifactMetadataModel, facetId, entry.getKey(), entry.getValue(),
+                                            metadataFacet.getName() );
+            }
+
+            metadataFacetModelEntityManager.put( metadataFacetModels );
+
+        }
+
     }
 
     @Override
@@ -475,28 +588,88 @@ public class CassandraMetadataRepository
                                       ProjectVersionMetadata versionMetadata )
         throws MetadataRepositoryException
     {
-        //To change body of implemented methods use File | Settings | File Templates.
+        foo
+    }
+
+    private static class BooleanHolder
+    {
+        private boolean value;
     }
 
     @Override
-    public List<String> getMetadataFacets( String repositoryId, String facetId )
+    public List<String> getMetadataFacets( final String repositoryId, final String facetId )
         throws MetadataRepositoryException
     {
-        return null;  //To change body of implemented methods use File | Settings | File Templates.
+        // FIXME use cql query !!
+        final List<String> facets = new ArrayList<String>();
+        this.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 ) )
+                    {
+                        facets.add( metadataFacetModel.getName() );
+                    }
+                }
+                return Boolean.TRUE;
+            }
+        } );
+
+        return facets;
+
     }
 
     @Override
     public boolean hasMetadataFacet( String repositoryId, String facetId )
         throws MetadataRepositoryException
     {
-        return false;  //To change body of implemented methods use File | Settings | File Templates.
+        return !getMetadataFacets( repositoryId, facetId ).isEmpty();
     }
 
     @Override
-    public MetadataFacet getMetadataFacet( String repositoryId, String facetId, String name )
+    public MetadataFacet getMetadataFacet( final String repositoryId, final String facetId, final String name )
         throws MetadataRepositoryException
     {
-        return null;  //To change body of implemented methods use File | Settings | File Templates.
+        // FIXME use cql query !!
+        final List<MetadataFacetModel> facets = new ArrayList<MetadataFacetModel>();
+        this.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 ) )
+                    {
+                        facets.add( metadataFacetModel );
+                    }
+                }
+                return Boolean.TRUE;
+            }
+        } );
+
+        if ( facets.isEmpty() )
+        {
+            return null;
+        }
+
+        MetadataFacetFactory metadataFacetFactory = metadataFacetFactories.get( facetId );
+        MetadataFacet metadataFacet = metadataFacetFactory.createMetadataFacet( repositoryId, name );
+        Map<String, String> map = new HashMap<String, String>( facets.size() );
+        for ( MetadataFacetModel metadataFacetModel : facets )
+        {
+            map.put( metadataFacetModel.getKey(), metadataFacetModel.getValue() );
+        }
+        metadataFacet.fromProperties( map );
+        return metadataFacet;
     }
 
     @Override

Added: archiva/sandbox/trunk/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/model/ArtifactMetadataModel.java
URL: http://svn.apache.org/viewvc/archiva/sandbox/trunk/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/model/ArtifactMetadataModel.java?rev=1484799&view=auto
==============================================================================
--- archiva/sandbox/trunk/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/model/ArtifactMetadataModel.java (added)
+++ archiva/sandbox/trunk/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/model/ArtifactMetadataModel.java Tue May 21 13:27:35 2013
@@ -0,0 +1,302 @@
+package org.apache.archiva.metadata.repository.cassandra.model;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * Cassandra storage model for {@link org.apache.archiva.metadata.model.ArtifactMetadata}
+ *
+ * @author Olivier Lamy
+ */
+@Entity
+public class ArtifactMetadataModel
+    implements Serializable
+{
+
+    // repositoryId + namespaceId + id + projectVersion
+    @Id
+    private String artifactMetadataModelId;
+
+    @Column( name = "id" )
+    private String id;
+
+    @Column( name = "repositoryId" )
+    private String repositoryId;
+
+    @Column( name = "namespace" )
+    private String namespace;
+
+    @Column( name = "project" )
+    private String project;
+
+    @Column( name = "projectVersion" )
+    private String projectVersion;
+
+    @Column( name = "version" )
+    private String version;
+
+    @Column( name = "fileLastModified" )
+    private Date fileLastModified;
+
+    @Column( name = "size" )
+    private long size;
+
+    @Column( name = "md5" )
+    private String md5;
+
+    @Column( name = "sha1" )
+    private String sha1;
+
+    @Column( name = "whenGathered" )
+    private Date whenGathered;
+
+    public ArtifactMetadataModel()
+    {
+        // no op
+    }
+
+    public ArtifactMetadataModel( String artifactMetadataModelId, String id, String repositoryId, String namespace,
+                                  String project, String projectVersion, String version, Date fileLastModified,
+                                  long size, String md5, String sha1, Date whenGathered )
+    {
+        this.artifactMetadataModelId = artifactMetadataModelId;
+        this.id = id;
+        this.repositoryId = repositoryId;
+        this.namespace = namespace;
+        this.project = project;
+        this.projectVersion = projectVersion;
+        this.version = version;
+        this.fileLastModified = fileLastModified;
+        this.size = size;
+        this.md5 = md5;
+        this.sha1 = sha1;
+        this.whenGathered = whenGathered;
+    }
+
+    public String getArtifactMetadataModelId()
+    {
+        return artifactMetadataModelId;
+    }
+
+    public void setArtifactMetadataModelId( String artifactMetadataModelId )
+    {
+        this.artifactMetadataModelId = artifactMetadataModelId;
+    }
+
+    public String getId()
+    {
+        return id;
+    }
+
+    public void setId( String id )
+    {
+        this.id = id;
+    }
+
+    public String getRepositoryId()
+    {
+        return repositoryId;
+    }
+
+    public void setRepositoryId( String repositoryId )
+    {
+        this.repositoryId = repositoryId;
+    }
+
+    public String getNamespace()
+    {
+        return namespace;
+    }
+
+    public void setNamespace( String namespace )
+    {
+        this.namespace = namespace;
+    }
+
+    public String getProject()
+    {
+        return project;
+    }
+
+    public void setProject( String project )
+    {
+        this.project = project;
+    }
+
+    public String getProjectVersion()
+    {
+        return projectVersion;
+    }
+
+    public void setProjectVersion( String projectVersion )
+    {
+        this.projectVersion = projectVersion;
+    }
+
+    public String getVersion()
+    {
+        return version;
+    }
+
+    public void setVersion( String version )
+    {
+        this.version = version;
+    }
+
+    public Date getFileLastModified()
+    {
+        return fileLastModified;
+    }
+
+    public void setFileLastModified( Date fileLastModified )
+    {
+        this.fileLastModified = fileLastModified;
+    }
+
+    public long getSize()
+    {
+        return size;
+    }
+
+    public void setSize( long size )
+    {
+        this.size = size;
+    }
+
+    public String getMd5()
+    {
+        return md5;
+    }
+
+    public void setMd5( String md5 )
+    {
+        this.md5 = md5;
+    }
+
+    public String getSha1()
+    {
+        return sha1;
+    }
+
+    public void setSha1( String sha1 )
+    {
+        this.sha1 = sha1;
+    }
+
+    public Date getWhenGathered()
+    {
+        return whenGathered;
+    }
+
+    public void setWhenGathered( Date whenGathered )
+    {
+        this.whenGathered = whenGathered;
+    }
+
+    @Override
+    public boolean equals( Object o )
+    {
+        if ( this == o )
+        {
+            return true;
+        }
+        if ( o == null || getClass() != o.getClass() )
+        {
+            return false;
+        }
+
+        ArtifactMetadataModel that = (ArtifactMetadataModel) o;
+
+        if ( !artifactMetadataModelId.equals( that.artifactMetadataModelId ) )
+        {
+            return false;
+        }
+
+        return true;
+    }
+
+    @Override
+    public int hashCode()
+    {
+        return artifactMetadataModelId.hashCode();
+    }
+
+    @Override
+    public String toString()
+    {
+        final StringBuilder sb = new StringBuilder( "ArtifactMetadataModel{" );
+        sb.append( "artifactMetadataModelId='" ).append( artifactMetadataModelId ).append( '\'' );
+        sb.append( ", id='" ).append( id ).append( '\'' );
+        sb.append( ", repositoryId='" ).append( repositoryId ).append( '\'' );
+        sb.append( ", namespace='" ).append( namespace ).append( '\'' );
+        sb.append( ", project='" ).append( project ).append( '\'' );
+        sb.append( ", projectVersion='" ).append( projectVersion ).append( '\'' );
+        sb.append( ", version='" ).append( version ).append( '\'' );
+        sb.append( ", fileLastModified=" ).append( fileLastModified );
+        sb.append( ", size=" ).append( size );
+        sb.append( ", md5='" ).append( md5 ).append( '\'' );
+        sb.append( ", sha1='" ).append( sha1 ).append( '\'' );
+        sb.append( ", whenGathered=" ).append( whenGathered );
+        sb.append( '}' );
+        return sb.toString();
+    }
+
+    public static class KeyBuilder
+    {
+
+        private String id;
+
+        private String namespaceId;
+
+        private String repositoryId;
+
+        private String projectVersion;
+
+        public KeyBuilder()
+        {
+
+        }
+
+        public KeyBuilder withId( String id )
+        {
+            this.id = id;
+            return this;
+        }
+
+
+        public KeyBuilder withNamespace( Namespace namespace )
+        {
+            this.namespaceId = namespace.getId();
+            this.repositoryId = namespace.getRepository().getId();
+            return this;
+        }
+
+        public KeyBuilder withNamespace( String namespaceId )
+        {
+            this.namespaceId = namespaceId;
+            return this;
+        }
+
+        public KeyBuilder withProjectVersion( String projectVersion )
+        {
+            this.projectVersion = projectVersion;
+            return this;
+        }
+
+        public KeyBuilder withRepositoryId( String repositoryId )
+        {
+            this.repositoryId = repositoryId;
+            return this;
+        }
+
+        public String build()
+        {
+            // FIXME add some controls
+            return this.repositoryId + "-" + this.namespaceId + "-" + this.id + "-" + this.projectVersion;
+        }
+    }
+
+}

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

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

Added: 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=1484799&view=auto
==============================================================================
--- archiva/sandbox/trunk/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/model/MetadataFacetModel.java (added)
+++ archiva/sandbox/trunk/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/model/MetadataFacetModel.java Tue May 21 13:27:35 2013
@@ -0,0 +1,198 @@
+package org.apache.archiva.metadata.repository.cassandra.model;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+/**
+ * Cassandra storage model for {@link org.apache.archiva.metadata.model.MetadataFacet}
+ *
+ * @author Olivier Lamy
+ */
+@Entity
+public class MetadataFacetModel
+{
+    // id is repositoryId + namespaceId + projectId + facetId + name + mapKey
+    @Id
+    @Column( name = "id" )
+    private String id;
+
+    @Column( name = "artifactMetadataModel" )
+    private ArtifactMetadataModel artifactMetadataModel;
+
+    @Column( name = "facetId" )
+    private String facetId;
+
+    @Column( name = "name" )
+    private String name;
+
+    @Column( name = "key" )
+    private String key;
+
+    @Column( name = "value" )
+    private String value;
+
+    public MetadataFacetModel()
+    {
+        // no op
+    }
+
+    public MetadataFacetModel( String id, ArtifactMetadataModel artifactMetadataModel, String facetId, String key,
+                               String value, String name )
+    {
+        this.id = id;
+        this.artifactMetadataModel = artifactMetadataModel;
+        this.key = key;
+        this.value = value;
+        this.name = name;
+        this.facetId = facetId;
+    }
+
+    public String getFacetId()
+    {
+        return facetId;
+    }
+
+    public void setFacetId( String facetId )
+    {
+        this.facetId = facetId;
+    }
+
+    public String getId()
+    {
+        return id;
+    }
+
+    public void setId( String id )
+    {
+        this.id = id;
+    }
+
+    public ArtifactMetadataModel getArtifactMetadataModel()
+    {
+        return artifactMetadataModel;
+    }
+
+    public void setArtifactMetadataModel( ArtifactMetadataModel artifactMetadataModel )
+    {
+        this.artifactMetadataModel = artifactMetadataModel;
+    }
+
+    public String getName()
+    {
+        return name;
+    }
+
+    public void setName( String name )
+    {
+        this.name = name;
+    }
+
+    public String getKey()
+    {
+        return key;
+    }
+
+    public void setKey( String key )
+    {
+        this.key = key;
+    }
+
+    public String getValue()
+    {
+        return value;
+    }
+
+    public void setValue( String value )
+    {
+        this.value = value;
+    }
+
+    @Override
+    public boolean equals( Object o )
+    {
+        if ( this == o )
+        {
+            return true;
+        }
+        if ( o == null || getClass() != o.getClass() )
+        {
+            return false;
+        }
+
+        MetadataFacetModel that = (MetadataFacetModel) o;
+
+        if ( !id.equals( that.id ) )
+        {
+            return false;
+        }
+
+        return true;
+    }
+
+    @Override
+    public int hashCode()
+    {
+        return id.hashCode();
+    }
+
+    @Override
+    public String toString()
+    {
+        final StringBuilder sb = new StringBuilder( "MetadataFacetModel{" );
+        sb.append( "id='" ).append( id ).append( '\'' );
+        sb.append( ", artifactMetadataModel=" ).append( artifactMetadataModel );
+        sb.append( ", key='" ).append( key ).append( '\'' );
+        sb.append( ", value='" ).append( value ).append( '\'' );
+        sb.append( '}' );
+        return sb.toString();
+    }
+
+    public static class KeyBuilder
+    {
+
+        private ArtifactMetadataModel artifactMetadataModel;
+
+        private String key;
+
+        private String name;
+
+        private String facetId;
+
+        public KeyBuilder()
+        {
+
+        }
+
+        public KeyBuilder withArtifactMetadataModel( ArtifactMetadataModel artifactMetadataModel )
+        {
+            this.artifactMetadataModel = artifactMetadataModel;
+            return this;
+        }
+
+        public KeyBuilder withKey( String key )
+        {
+            this.key = key;
+            return this;
+        }
+
+        public KeyBuilder withName( String name )
+        {
+            this.name = name;
+            return this;
+        }
+
+        public KeyBuilder withFacetId( String facetId )
+        {
+            this.facetId = facetId;
+            return this;
+        }
+
+        public String build()
+        {
+            // FIXME add some controls
+            return this.artifactMetadataModel.getArtifactMetadataModelId() + "-" + this.facetId + "-" + this.name + "-"
+                + this.key;
+        }
+    }
+}

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

Propchange: archiva/sandbox/trunk/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/model/MetadataFacetModel.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=1484799&r1=1484798&r2=1484799&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:27:35 2013
@@ -19,7 +19,10 @@ package org.apache.archiva.metadata.repo
  * under the License.
  */
 
+import org.apache.archiva.metadata.model.MetadataFacetFactory;
 import org.apache.archiva.metadata.repository.AbstractMetadataRepositoryTest;
+import org.apache.archiva.metadata.repository.cassandra.model.ArtifactMetadataModel;
+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.Repository;
@@ -33,6 +36,7 @@ import javax.inject.Inject;
 import javax.inject.Named;
 import java.io.File;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @author Olivier Lamy
@@ -60,8 +64,12 @@ public class CassandraMetadataRepository
             FileUtils.deleteDirectory( directory );
         }
 
-        this.cmr = new CassandraMetadataRepository( null, null, cassandraEntityManagerFactory.getKeyspace() );
+        Map<String, MetadataFacetFactory> factories = createTestMetadataFacetFactories();
+
+        this.cmr = new CassandraMetadataRepository( factories, null, cassandraEntityManagerFactory.getKeyspace() );
         this.repository = this.cmr;
+
+        clearReposAndNamespace();
     }
 
 
@@ -69,7 +77,7 @@ public class CassandraMetadataRepository
     public void shutdown()
         throws Exception
     {
-        //cassandraEntityManagerFactory.getKeyspace().dr .dropKeyspace();
+        clearReposAndNamespace();
     }
 
     protected void clearReposAndNamespace()
@@ -87,6 +95,12 @@ public class CassandraMetadataRepository
 
         cmr.getRepositoryEntityManager().remove( repositories );
 
+        List<ArtifactMetadataModel> artifactMetadataModels = cmr.getArtifactMetadataModelEntityManager().getAll();
+        cmr.getArtifactMetadataModelEntityManager().remove( artifactMetadataModels );
+
+        List<MetadataFacetModel> metadataFacetModels = cmr.getMetadataFacetModelEntityManager().getAll();
+        cmr.getMetadataFacetModelEntityManager().remove( metadataFacetModels );
+
     }
 
 }