Author: olamy
Date: Wed Mar 26 02:40:40 2014
New Revision: 1581637

URL: http://svn.apache.org/r1581637
Log:
record license information in cassandra

Modified:
    
archiva/trunk/archiva-modules/metadata/metadata-model/src/main/java/org/apache/archiva/metadata/model/License.java
    
archiva/trunk/archiva-modules/plugins/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/CassandraArchivaManager.java
    
archiva/trunk/archiva-modules/plugins/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepository.java
    
archiva/trunk/archiva-modules/plugins/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/DefaultCassandraArchivaManager.java
    
archiva/trunk/archiva-modules/plugins/metadata-store-cassandra/src/test/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepositoryTest.java

Modified: 
archiva/trunk/archiva-modules/metadata/metadata-model/src/main/java/org/apache/archiva/metadata/model/License.java
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/metadata/metadata-model/src/main/java/org/apache/archiva/metadata/model/License.java?rev=1581637&r1=1581636&r2=1581637&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/metadata/metadata-model/src/main/java/org/apache/archiva/metadata/model/License.java
 (original)
+++ 
archiva/trunk/archiva-modules/metadata/metadata-model/src/main/java/org/apache/archiva/metadata/model/License.java
 Wed Mar 26 02:40:40 2014
@@ -47,6 +47,7 @@ public class License
 
     public License()
     {
+        // no op
     }
 
     public String getName()

Modified: 
archiva/trunk/archiva-modules/plugins/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/CassandraArchivaManager.java
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/plugins/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/CassandraArchivaManager.java?rev=1581637&r1=1581636&r2=1581637&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/plugins/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/CassandraArchivaManager.java
 (original)
+++ 
archiva/trunk/archiva-modules/plugins/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/CassandraArchivaManager.java
 Wed Mar 26 02:40:40 2014
@@ -52,4 +52,6 @@ public interface CassandraArchivaManager
 
     String getMailingListFamilyName();
 
+    String getLicenseFamilyName();
+
 }

Modified: 
archiva/trunk/archiva-modules/plugins/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepository.java
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/plugins/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepository.java?rev=1581637&r1=1581636&r2=1581637&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/plugins/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepository.java
 (original)
+++ 
archiva/trunk/archiva-modules/plugins/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepository.java
 Wed Mar 26 02:40:40 2014
@@ -42,6 +42,7 @@ import org.apache.archiva.metadata.model
 import org.apache.archiva.metadata.model.CiManagement;
 import org.apache.archiva.metadata.model.FacetedMetadata;
 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.MetadataFacet;
 import org.apache.archiva.metadata.model.MetadataFacetFactory;
@@ -105,6 +106,8 @@ public class CassandraMetadataRepository
 
     private final ColumnFamilyTemplate<String, String> mailingListTemplate;
 
+    private final ColumnFamilyTemplate<String, String> licenseTemplate;
+
     public CassandraMetadataRepository( Map<String, MetadataFacetFactory> 
metadataFacetFactories,
                                         ArchivaConfiguration configuration,
                                         CassandraArchivaManager 
cassandraArchivaManager )
@@ -145,6 +148,12 @@ public class CassandraMetadataRepository
                                                             //
                                                             
StringSerializer.get(), //
                                                             
StringSerializer.get() );
+
+        this.licenseTemplate = new ThriftColumnFamilyTemplate<String, String>( 
cassandraArchivaManager.getKeyspace(), //
+                                                                               
cassandraArchivaManager.getLicenseFamilyName(),
+                                                                               
//
+                                                                               
StringSerializer.get(), //
+                                                                               
StringSerializer.get() );
     }
 
 
@@ -898,6 +907,8 @@ public class CassandraMetadataRepository
                 recordMailingList( key, versionMetadata.getMailingLists() );
             }
 
+            recordLicenses( key, versionMetadata.getLicenses() );
+
             MutationResult mutationResult = mutator.execute();
         }
         else
@@ -955,12 +966,12 @@ public class CassandraMetadataRepository
                 }
             }
 
-            if ( versionMetadata.getMailingLists() != null )
-            {
-                // update is a delete record
-                removeMailingList( key );
-                recordMailingList( key, versionMetadata.getMailingLists() );
-            }
+            // update is a delete record
+            removeMailingList( key );
+            recordMailingList( key, versionMetadata.getMailingLists() );
+
+            removeLicenses( key );
+            recordLicenses( key, versionMetadata.getLicenses() );
 
             projectVersionMetadataModelTemplate.update( updater );
 
@@ -1035,6 +1046,7 @@ public class CassandraMetadataRepository
             }
         }
         projectVersionMetadata.setMailingLists( getMailingLists( key ) );
+        projectVersionMetadata.setLicenses( getLicenses( key ) );
         // FIXME complete collections !!
         // facets
 
@@ -1161,7 +1173,7 @@ public class CassandraMetadataRepository
 
             for ( String columnName : columnFamilyResult.getColumnNames() )
             {
-                if (StringUtils.startsWith( columnName, "otherArchive." ))
+                if ( StringUtils.startsWith( columnName, "otherArchive." ) )
                 {
                     otherArchives.add( columnFamilyResult.getString( 
columnName ) );
                 }
@@ -1174,6 +1186,72 @@ public class CassandraMetadataRepository
         return mailingLists;
     }
 
+    protected void recordLicenses( String projectVersionMetadataKey, 
List<License> licenses )
+    {
+
+        if ( licenses == null || licenses.isEmpty() )
+        {
+            return;
+        }
+        Mutator<String> licenseMutator = this.licenseTemplate.createMutator();
+
+        for ( License license : licenses )
+        {
+            // we don't care about the key as the real used one with the 
projectVersionMetadata
+            String keyLicense = UUID.randomUUID().toString();
+            String cfLicense = cassandraArchivaManager.getLicenseFamilyName();
+
+            addInsertion( licenseMutator, keyLicense, cfLicense, 
"projectVersionMetadataModel.key",
+                          projectVersionMetadataKey );
+
+            addInsertion( licenseMutator, keyLicense, cfLicense, 
"license.name", license.getName() );
+
+            addInsertion( licenseMutator, keyLicense, cfLicense, 
"license.url", license.getUrl() );
+
+        }
+        licenseMutator.execute();
+    }
+
+    protected void removeLicenses( String projectVersionMetadataKey )
+    {
+        StringSerializer ss = StringSerializer.get();
+        QueryResult<OrderedRows<String, String, String>> result =
+            HFactory.createRangeSlicesQuery( 
cassandraArchivaManager.getKeyspace(), ss, ss, ss ) //
+                .setColumnFamily( 
cassandraArchivaManager.getLicenseFamilyName() ) //
+                .setColumnNames( "name" ) //
+                .setRowCount( Integer.MAX_VALUE ) //
+                .addEqualsExpression( "projectVersionMetadataModel.key", 
projectVersionMetadataKey ) //
+                .execute();
+        for ( Row<String, String, String> row : result.get() )
+        {
+            this.licenseTemplate.deleteRow( row.getKey() );
+        }
+    }
+
+    protected List<License> getLicenses( String projectVersionMetadataKey )
+    {
+        List<License> licenses = new ArrayList<License>();
+
+        StringSerializer ss = StringSerializer.get();
+        QueryResult<OrderedRows<String, String, String>> result =
+            HFactory.createRangeSlicesQuery( 
cassandraArchivaManager.getKeyspace(), ss, ss, ss ) //
+                .setColumnFamily( 
cassandraArchivaManager.getLicenseFamilyName() ) //
+                .setColumnNames( "projectVersionMetadataModel.key" ) //
+                .setRowCount( Integer.MAX_VALUE ) //
+                .addEqualsExpression( "projectVersionMetadataModel.key", 
projectVersionMetadataKey ) //
+                .execute();
+
+        for ( Row<String, String, String> row : result.get() )
+        {
+            ColumnFamilyResult<String, String> columnFamilyResult = 
this.licenseTemplate.queryColumns( row.getKey() );
+
+            licenses.add( new License( columnFamilyResult.getString( 
"license.name" ),
+                                       columnFamilyResult.getString( 
"license.url" ) ) );
+        }
+
+        return licenses;
+    }
+
     @Override
     public void updateArtifact( String repositoryId, String namespaceId, 
String projectId, String projectVersion,
                                 ArtifactMetadata artifactMeta )

Modified: 
archiva/trunk/archiva-modules/plugins/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/DefaultCassandraArchivaManager.java
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/plugins/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/DefaultCassandraArchivaManager.java?rev=1581637&r1=1581636&r2=1581637&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/plugins/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/DefaultCassandraArchivaManager.java
 (original)
+++ 
archiva/trunk/archiva-modules/plugins/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/DefaultCassandraArchivaManager.java
 Wed Mar 26 02:40:40 2014
@@ -83,6 +83,8 @@ public class DefaultCassandraArchivaMana
 
     private String mailingListFamilyName = "mailinglist";
 
+    private String licenseFamilyName = "license";
+
 
     @PostConstruct
     public void initialize()
@@ -378,6 +380,24 @@ public class DefaultCassandraArchivaMana
             projectVersionMetadataIdColumn.setValidationClass( 
ComparatorType.UTF8TYPE.getClassName() );
             mailingListCf.addColumnDefinition( projectVersionMetadataIdColumn 
);
 
+        }
+
+        // license table
+        {
+            final ColumnFamilyDefinition licenseCf =
+                HFactory.createColumnFamilyDefinition( 
keyspace.getKeyspaceName(), //
+                                                       getLicenseFamilyName(), 
//
+                                                       ComparatorType.UTF8TYPE 
);
+            cfds.add( licenseCf );
+
+            // creating indexes for cql query
+
+            BasicColumnDefinition projectVersionMetadataIdColumn = new 
BasicColumnDefinition();
+            projectVersionMetadataIdColumn.setName( 
StringSerializer.get().toByteBuffer( "projectVersionMetadataId" ) );
+            projectVersionMetadataIdColumn.setIndexName( 
"projectVersionMetadataId" );
+            projectVersionMetadataIdColumn.setIndexType( ColumnIndexType.KEYS 
);
+            projectVersionMetadataIdColumn.setValidationClass( 
ComparatorType.UTF8TYPE.getClassName() );
+            licenseCf.addColumnDefinition( projectVersionMetadataIdColumn );
 
         }
 
@@ -458,4 +478,9 @@ public class DefaultCassandraArchivaMana
     {
         return mailingListFamilyName;
     }
+
+    public String getLicenseFamilyName()
+    {
+        return licenseFamilyName;
+    }
 }

Modified: 
archiva/trunk/archiva-modules/plugins/metadata-store-cassandra/src/test/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepositoryTest.java
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/plugins/metadata-store-cassandra/src/test/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepositoryTest.java?rev=1581637&r1=1581636&r2=1581637&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/plugins/metadata-store-cassandra/src/test/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepositoryTest.java
 (original)
+++ 
archiva/trunk/archiva-modules/plugins/metadata-store-cassandra/src/test/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepositoryTest.java
 Wed Mar 26 02:40:40 2014
@@ -97,6 +97,9 @@ public class CassandraMetadataRepository
         cassandraArchivaManager.getCluster().truncate( 
cassandraArchivaManager.getKeyspace().getKeyspaceName(),
                                                        
cassandraArchivaManager.getMailingListFamilyName() );
 
+        cassandraArchivaManager.getCluster().truncate( 
cassandraArchivaManager.getKeyspace().getKeyspaceName(),
+                                                       
cassandraArchivaManager.getLicenseFamilyName() );
+
     }
 
 }


Reply via email to