mirror of
https://github.com/apache/archiva.git
synced 2025-02-08 02:59:43 +00:00
implement cassandra record of dependencies
git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@1581638 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
fa06b7b997
commit
509e72be48
@ -54,4 +54,6 @@ public interface CassandraArchivaManager
|
|||||||
|
|
||||||
String getLicenseFamilyName();
|
String getLicenseFamilyName();
|
||||||
|
|
||||||
|
String getDependencyFamilyName();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -40,6 +40,7 @@
|
|||||||
import org.apache.archiva.configuration.ArchivaConfiguration;
|
import org.apache.archiva.configuration.ArchivaConfiguration;
|
||||||
import org.apache.archiva.metadata.model.ArtifactMetadata;
|
import org.apache.archiva.metadata.model.ArtifactMetadata;
|
||||||
import org.apache.archiva.metadata.model.CiManagement;
|
import org.apache.archiva.metadata.model.CiManagement;
|
||||||
|
import org.apache.archiva.metadata.model.Dependency;
|
||||||
import org.apache.archiva.metadata.model.FacetedMetadata;
|
import org.apache.archiva.metadata.model.FacetedMetadata;
|
||||||
import org.apache.archiva.metadata.model.IssueManagement;
|
import org.apache.archiva.metadata.model.IssueManagement;
|
||||||
import org.apache.archiva.metadata.model.License;
|
import org.apache.archiva.metadata.model.License;
|
||||||
@ -108,6 +109,8 @@ public class CassandraMetadataRepository
|
|||||||
|
|
||||||
private final ColumnFamilyTemplate<String, String> licenseTemplate;
|
private final ColumnFamilyTemplate<String, String> licenseTemplate;
|
||||||
|
|
||||||
|
private final ColumnFamilyTemplate<String, String> dependencyTemplate;
|
||||||
|
|
||||||
public CassandraMetadataRepository( Map<String, MetadataFacetFactory> metadataFacetFactories,
|
public CassandraMetadataRepository( Map<String, MetadataFacetFactory> metadataFacetFactories,
|
||||||
ArchivaConfiguration configuration,
|
ArchivaConfiguration configuration,
|
||||||
CassandraArchivaManager cassandraArchivaManager )
|
CassandraArchivaManager cassandraArchivaManager )
|
||||||
@ -154,6 +157,13 @@ public CassandraMetadataRepository( Map<String, MetadataFacetFactory> metadataFa
|
|||||||
//
|
//
|
||||||
StringSerializer.get(), //
|
StringSerializer.get(), //
|
||||||
StringSerializer.get() );
|
StringSerializer.get() );
|
||||||
|
|
||||||
|
this.dependencyTemplate =
|
||||||
|
new ThriftColumnFamilyTemplate<String, String>( cassandraArchivaManager.getKeyspace(), //
|
||||||
|
cassandraArchivaManager.getDependencyFamilyName(),
|
||||||
|
//
|
||||||
|
StringSerializer.get(), //
|
||||||
|
StringSerializer.get() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -902,13 +912,12 @@ public void updateProjectVersion( String repositoryId, String namespaceId, Strin
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( versionMetadata.getMailingLists() != null )
|
|
||||||
{
|
|
||||||
recordMailingList( key, versionMetadata.getMailingLists() );
|
recordMailingList( key, versionMetadata.getMailingLists() );
|
||||||
}
|
|
||||||
|
|
||||||
recordLicenses( key, versionMetadata.getLicenses() );
|
recordLicenses( key, versionMetadata.getLicenses() );
|
||||||
|
|
||||||
|
recordDependencies( key, versionMetadata.getDependencies() );
|
||||||
|
|
||||||
MutationResult mutationResult = mutator.execute();
|
MutationResult mutationResult = mutator.execute();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -973,6 +982,9 @@ public void updateProjectVersion( String repositoryId, String namespaceId, Strin
|
|||||||
removeLicenses( key );
|
removeLicenses( key );
|
||||||
recordLicenses( key, versionMetadata.getLicenses() );
|
recordLicenses( key, versionMetadata.getLicenses() );
|
||||||
|
|
||||||
|
removeDependencies( key );
|
||||||
|
recordDependencies( key, versionMetadata.getDependencies() );
|
||||||
|
|
||||||
projectVersionMetadataModelTemplate.update( updater );
|
projectVersionMetadataModelTemplate.update( updater );
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -1047,7 +1059,7 @@ public ProjectVersionMetadata getProjectVersion( final String repoId, final Stri
|
|||||||
}
|
}
|
||||||
projectVersionMetadata.setMailingLists( getMailingLists( key ) );
|
projectVersionMetadata.setMailingLists( getMailingLists( key ) );
|
||||||
projectVersionMetadata.setLicenses( getLicenses( key ) );
|
projectVersionMetadata.setLicenses( getLicenses( key ) );
|
||||||
// FIXME complete collections !!
|
projectVersionMetadata.setDependencies( getDependencies( key ) );
|
||||||
// facets
|
// facets
|
||||||
|
|
||||||
StringSerializer ss = StringSerializer.get();
|
StringSerializer ss = StringSerializer.get();
|
||||||
@ -1204,9 +1216,9 @@ protected void recordLicenses( String projectVersionMetadataKey, List<License> l
|
|||||||
addInsertion( licenseMutator, keyLicense, cfLicense, "projectVersionMetadataModel.key",
|
addInsertion( licenseMutator, keyLicense, cfLicense, "projectVersionMetadataModel.key",
|
||||||
projectVersionMetadataKey );
|
projectVersionMetadataKey );
|
||||||
|
|
||||||
addInsertion( licenseMutator, keyLicense, cfLicense, "license.name", license.getName() );
|
addInsertion( licenseMutator, keyLicense, cfLicense, "name", license.getName() );
|
||||||
|
|
||||||
addInsertion( licenseMutator, keyLicense, cfLicense, "license.url", license.getUrl() );
|
addInsertion( licenseMutator, keyLicense, cfLicense, "url", license.getUrl() );
|
||||||
|
|
||||||
}
|
}
|
||||||
licenseMutator.execute();
|
licenseMutator.execute();
|
||||||
@ -1245,13 +1257,108 @@ protected List<License> getLicenses( String projectVersionMetadataKey )
|
|||||||
{
|
{
|
||||||
ColumnFamilyResult<String, String> columnFamilyResult = this.licenseTemplate.queryColumns( row.getKey() );
|
ColumnFamilyResult<String, String> columnFamilyResult = this.licenseTemplate.queryColumns( row.getKey() );
|
||||||
|
|
||||||
licenses.add( new License( columnFamilyResult.getString( "license.name" ),
|
licenses.add(
|
||||||
columnFamilyResult.getString( "license.url" ) ) );
|
new License( columnFamilyResult.getString( "name" ), columnFamilyResult.getString( "url" ) ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
return licenses;
|
return licenses;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
protected void recordDependencies( String projectVersionMetadataKey, List<Dependency> dependencies )
|
||||||
|
{
|
||||||
|
|
||||||
|
if ( dependencies == null || dependencies.isEmpty() )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Mutator<String> dependencyMutator = this.dependencyTemplate.createMutator();
|
||||||
|
|
||||||
|
for ( Dependency dependency : dependencies )
|
||||||
|
{
|
||||||
|
// we don't care about the key as the real used one with the projectVersionMetadata
|
||||||
|
String keyDependency = UUID.randomUUID().toString();
|
||||||
|
String cfDependency = cassandraArchivaManager.getDependencyFamilyName();
|
||||||
|
|
||||||
|
addInsertion( dependencyMutator, keyDependency, cfDependency, "projectVersionMetadataModel.key",
|
||||||
|
projectVersionMetadataKey );
|
||||||
|
|
||||||
|
addInsertion( dependencyMutator, keyDependency, cfDependency, "classifier", dependency.getClassifier() );
|
||||||
|
|
||||||
|
addInsertion( dependencyMutator, keyDependency, cfDependency, "optional",
|
||||||
|
Boolean.toString( dependency.isOptional() ) );
|
||||||
|
|
||||||
|
addInsertion( dependencyMutator, keyDependency, cfDependency, "scope", dependency.getScope() );
|
||||||
|
|
||||||
|
addInsertion( dependencyMutator, keyDependency, cfDependency, "systemPath", dependency.getSystemPath() );
|
||||||
|
|
||||||
|
addInsertion( dependencyMutator, keyDependency, cfDependency, "type", dependency.getType() );
|
||||||
|
|
||||||
|
addInsertion( dependencyMutator, keyDependency, cfDependency, "artifactId", dependency.getArtifactId() );
|
||||||
|
|
||||||
|
addInsertion( dependencyMutator, keyDependency, cfDependency, "groupId", dependency.getGroupId() );
|
||||||
|
|
||||||
|
addInsertion( dependencyMutator, keyDependency, cfDependency, "version", dependency.getVersion() );
|
||||||
|
|
||||||
|
} dependencyMutator.execute();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void removeDependencies( String projectVersionMetadataKey )
|
||||||
|
{
|
||||||
|
StringSerializer ss = StringSerializer.get();
|
||||||
|
QueryResult<OrderedRows<String, String, String>> result =
|
||||||
|
HFactory.createRangeSlicesQuery( cassandraArchivaManager.getKeyspace(), ss, ss, ss ) //
|
||||||
|
.setColumnFamily( cassandraArchivaManager.getDependencyFamilyName() ) //
|
||||||
|
.setColumnNames( "groupId" ) //
|
||||||
|
.setRowCount( Integer.MAX_VALUE ) //
|
||||||
|
.addEqualsExpression( "projectVersionMetadataModel.key", projectVersionMetadataKey ) //
|
||||||
|
.execute();
|
||||||
|
for ( Row<String, String, String> row : result.get() )
|
||||||
|
{
|
||||||
|
this.dependencyTemplate.deleteRow( row.getKey() );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected List<Dependency> getDependencies( String projectVersionMetadataKey )
|
||||||
|
{
|
||||||
|
List<Dependency> dependencies = new ArrayList<Dependency>();
|
||||||
|
|
||||||
|
StringSerializer ss = StringSerializer.get();
|
||||||
|
QueryResult<OrderedRows<String, String, String>> result =
|
||||||
|
HFactory.createRangeSlicesQuery( cassandraArchivaManager.getKeyspace(), ss, ss, ss ) //
|
||||||
|
.setColumnFamily( cassandraArchivaManager.getDependencyFamilyName() ) //
|
||||||
|
.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.dependencyTemplate.queryColumns( row.getKey() );
|
||||||
|
|
||||||
|
Dependency dependency = new Dependency();
|
||||||
|
dependency.setClassifier( columnFamilyResult.getString( "classifier" ) );
|
||||||
|
|
||||||
|
dependency.setOptional( Boolean.parseBoolean( columnFamilyResult.getString( "optional" ) ) );
|
||||||
|
|
||||||
|
dependency.setScope( columnFamilyResult.getString( "scope" ) );
|
||||||
|
|
||||||
|
dependency.setSystemPath( columnFamilyResult.getString( "systemPath" ) );
|
||||||
|
|
||||||
|
dependency.setType( columnFamilyResult.getString( "type" ) );
|
||||||
|
|
||||||
|
dependency.setArtifactId( columnFamilyResult.getString( "artifactId" ) );
|
||||||
|
|
||||||
|
dependency.setGroupId( columnFamilyResult.getString( "groupId" ) );
|
||||||
|
|
||||||
|
dependency.setVersion( columnFamilyResult.getString( "version" ) );
|
||||||
|
|
||||||
|
dependencies.add( dependency );
|
||||||
|
}
|
||||||
|
|
||||||
|
return dependencies;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateArtifact( String repositoryId, String namespaceId, String projectId, String projectVersion,
|
public void updateArtifact( String repositoryId, String namespaceId, String projectId, String projectVersion,
|
||||||
ArtifactMetadata artifactMeta )
|
ArtifactMetadata artifactMeta )
|
||||||
|
@ -85,6 +85,8 @@ public class DefaultCassandraArchivaManager
|
|||||||
|
|
||||||
private String licenseFamilyName = "license";
|
private String licenseFamilyName = "license";
|
||||||
|
|
||||||
|
private String dependencyFamilyName = "dependency";
|
||||||
|
|
||||||
|
|
||||||
@PostConstruct
|
@PostConstruct
|
||||||
public void initialize()
|
public void initialize()
|
||||||
@ -401,6 +403,25 @@ public void initialize()
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// dependency table
|
||||||
|
{
|
||||||
|
final ColumnFamilyDefinition dependencyCf =
|
||||||
|
HFactory.createColumnFamilyDefinition( keyspace.getKeyspaceName(), //
|
||||||
|
getDependencyFamilyName(), //
|
||||||
|
ComparatorType.UTF8TYPE );
|
||||||
|
cfds.add( dependencyCf );
|
||||||
|
|
||||||
|
// 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() );
|
||||||
|
dependencyCf.addColumnDefinition( projectVersionMetadataIdColumn );
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
// TODO take care of update new table!!
|
// TODO take care of update new table!!
|
||||||
{ // ensure keyspace exists, here if the keyspace doesn't exist we suppose nothing exist
|
{ // ensure keyspace exists, here if the keyspace doesn't exist we suppose nothing exist
|
||||||
if ( cluster.describeKeyspace( keyspaceName ) == null )
|
if ( cluster.describeKeyspace( keyspaceName ) == null )
|
||||||
@ -483,4 +504,9 @@ public String getLicenseFamilyName()
|
|||||||
{
|
{
|
||||||
return licenseFamilyName;
|
return licenseFamilyName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getDependencyFamilyName()
|
||||||
|
{
|
||||||
|
return dependencyFamilyName;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -100,6 +100,9 @@ protected void clearReposAndNamespace()
|
|||||||
cassandraArchivaManager.getCluster().truncate( cassandraArchivaManager.getKeyspace().getKeyspaceName(),
|
cassandraArchivaManager.getCluster().truncate( cassandraArchivaManager.getKeyspace().getKeyspaceName(),
|
||||||
cassandraArchivaManager.getLicenseFamilyName() );
|
cassandraArchivaManager.getLicenseFamilyName() );
|
||||||
|
|
||||||
|
cassandraArchivaManager.getCluster().truncate( cassandraArchivaManager.getKeyspace().getKeyspaceName(),
|
||||||
|
cassandraArchivaManager.getDependencyFamilyName() );
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user