]> source.dussan.org Git - archiva.git/commitdiff
record license information in cassandra
authorOlivier Lamy <olamy@apache.org>
Wed, 26 Mar 2014 02:40:40 +0000 (02:40 +0000)
committerOlivier Lamy <olamy@apache.org>
Wed, 26 Mar 2014 02:40:40 +0000 (02:40 +0000)
git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@1581637 13f79535-47bb-0310-9956-ffa450edef68

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

index e079690ad109c5b32109f5a4f2a565440d4838af..1c9ef6cf752761c467447500b0a833b12d1c4a3c 100644 (file)
@@ -47,6 +47,7 @@ public class License
 
     public License()
     {
+        // no op
     }
 
     public String getName()
index 79edc7f037ad045471f0a2b0f94e4c3be5fc0d5a..cbd576d9b51a4d9ead4228fc95385644197dfec0 100644 (file)
@@ -42,6 +42,7 @@ import org.apache.archiva.metadata.model.ArtifactMetadata;
 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 )
index b8eedac792767342edeec26d5a47fd462c6cd221..eb9399adbe9e175e6df2208e3dc5c2517b586693 100644 (file)
@@ -83,6 +83,8 @@ public class DefaultCassandraArchivaManager
 
     private String mailingListFamilyName = "mailinglist";
 
+    private String licenseFamilyName = "license";
+
 
     @PostConstruct
     public void initialize()
@@ -378,6 +380,24 @@ public class DefaultCassandraArchivaManager
             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 DefaultCassandraArchivaManager
     {
         return mailingListFamilyName;
     }
+
+    public String getLicenseFamilyName()
+    {
+        return licenseFamilyName;
+    }
 }
index 2e96177d65cedc502592b6ad7af95b9d5f07ff1d..2cd6a51fb1bd1f67b44603b78cb103f55eb7d272 100644 (file)
@@ -97,6 +97,9 @@ public class CassandraMetadataRepositoryTest
         cassandraArchivaManager.getCluster().truncate( cassandraArchivaManager.getKeyspace().getKeyspaceName(),
                                                        cassandraArchivaManager.getMailingListFamilyName() );
 
+        cassandraArchivaManager.getCluster().truncate( cassandraArchivaManager.getKeyspace().getKeyspaceName(),
+                                                       cassandraArchivaManager.getLicenseFamilyName() );
+
     }
 
 }