This project has retired. For details please refer to its Attic page.
Source code
001package org.apache.archiva.metadata.repository.cassandra;
002
003/*
004 * Licensed to the Apache Software Foundation (ASF) under one
005 * or more contributor license agreements.  See the NOTICE file
006 * distributed with this work for additional information
007 * regarding copyright ownership.  The ASF licenses this file
008 * to you under the Apache License, Version 2.0 (the
009 * "License"); you may not use this file except in compliance
010 * with the License.  You may obtain a copy of the License at
011 *
012 *  http://www.apache.org/licenses/LICENSE-2.0
013 *
014 * Unless required by applicable law or agreed to in writing,
015 * software distributed under the License is distributed on an
016 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
017 * KIND, either express or implied.  See the License for the
018 * specific language governing permissions and limitations
019 * under the License.
020 */
021
022import me.prettyprint.cassandra.model.BasicColumnDefinition;
023import me.prettyprint.cassandra.model.ConfigurableConsistencyLevel;
024import me.prettyprint.cassandra.serializers.StringSerializer;
025import me.prettyprint.cassandra.service.CassandraHostConfigurator;
026import me.prettyprint.cassandra.service.ThriftKsDef;
027import me.prettyprint.hector.api.Cluster;
028import me.prettyprint.hector.api.HConsistencyLevel;
029import me.prettyprint.hector.api.Keyspace;
030import me.prettyprint.hector.api.ddl.ColumnFamilyDefinition;
031import me.prettyprint.hector.api.ddl.ColumnIndexType;
032import me.prettyprint.hector.api.ddl.ComparatorType;
033import me.prettyprint.hector.api.factory.HFactory;
034import org.apache.archiva.metadata.repository.RepositorySessionFactoryBean;
035import org.apache.commons.lang3.StringUtils;
036import org.slf4j.Logger;
037import org.slf4j.LoggerFactory;
038import org.springframework.beans.factory.annotation.Value;
039import org.springframework.context.ApplicationContext;
040import org.springframework.stereotype.Service;
041
042import javax.annotation.PostConstruct;
043import javax.annotation.PreDestroy;
044import javax.inject.Inject;
045import java.util.ArrayList;
046import java.util.List;
047
048import static org.apache.archiva.metadata.repository.cassandra.model.ColumnNames.*;
049
050/**
051 * FIXME make all configuration not hardcoded :-)
052 *
053 * @author Olivier Lamy
054 * @since 2.0.0
055 */
056@Service("archivaEntityManagerFactory#cassandra")
057public class DefaultCassandraArchivaManager
058    implements CassandraArchivaManager
059{
060
061    private Logger logger = LoggerFactory.getLogger( getClass() );
062
063    @Inject
064    private ApplicationContext applicationContext;
065
066    private static final String CLUSTER_NAME = "archiva";
067
068    private static final String KEYSPACE_NAME = "ArchivaKeySpace";
069
070    private boolean started;
071
072    private Cluster cluster;
073
074    private Keyspace keyspace;
075
076    // configurable???
077    private String repositoryFamilyName = "repository";
078
079    private String namespaceFamilyName = "namespace";
080
081    private String projectFamilyName = PROJECT.toString();
082
083    private String projectVersionMetadataFamilyName = "projectversionmetadata";
084
085    private String artifactMetadataFamilyName = "artifactmetadata";
086
087    private String metadataFacetFamilyName = "metadatafacet";
088
089    private String mailingListFamilyName = "mailinglist";
090
091    private String licenseFamilyName = "license";
092
093    private String dependencyFamilyName = "dependency";
094
095    private String checksumFamilyName = "checksum";
096
097    @Value("${cassandra.host}")
098    private String cassandraHost;
099
100    @Value("${cassandra.port}")
101    private String cassandraPort;
102
103    @Value("${cassandra.maxActive}")
104    private int maxActive;
105
106    @Value("${cassandra.readConsistencyLevel}")
107    private String readConsistencyLevel;
108
109    @Value("${cassandra.writeConsistencyLevel}")
110    private String writeConsistencyLevel;
111
112    @Value("${cassandra.replicationFactor}")
113    private int replicationFactor;
114
115    @Value("${cassandra.keyspace.name}")
116    private String keyspaceName;
117
118    @Value("${cassandra.cluster.name}")
119    private String clusterName;
120
121    @Inject
122    private RepositorySessionFactoryBean repositorySessionFactoryBean;
123
124    @PostConstruct
125    public void initialize()
126    {
127        // skip initialisation if not cassandra
128        if ( !StringUtils.equals( repositorySessionFactoryBean.getId(), "cassandra" ) )
129        {
130            return;
131        }
132        final CassandraHostConfigurator configurator =
133            new CassandraHostConfigurator( cassandraHost + ":" + cassandraPort );
134        configurator.setMaxActive( maxActive );
135        //configurator.setCassandraThriftSocketTimeout(  );
136
137        cluster = HFactory.getOrCreateCluster( clusterName, configurator );
138
139        final ConfigurableConsistencyLevel consistencyLevelPolicy = new ConfigurableConsistencyLevel();
140        consistencyLevelPolicy.setDefaultReadConsistencyLevel( HConsistencyLevel.valueOf( readConsistencyLevel ) );
141        consistencyLevelPolicy.setDefaultWriteConsistencyLevel( HConsistencyLevel.valueOf( writeConsistencyLevel ) );
142        keyspace = HFactory.createKeyspace( keyspaceName, cluster, consistencyLevelPolicy );
143
144        List<ColumnFamilyDefinition> cfds = new ArrayList<>();
145
146        // namespace table
147        {
148
149            final ColumnFamilyDefinition namespace =
150                HFactory.createColumnFamilyDefinition( keyspace.getKeyspaceName(), //
151                                                       getNamespaceFamilyName(), //
152                                                       ComparatorType.UTF8TYPE );
153            cfds.add( namespace );
154
155            // creating indexes for cql query
156
157            BasicColumnDefinition nameColumn = new BasicColumnDefinition();
158            nameColumn.setName( StringSerializer.get().toByteBuffer( NAME.toString() ) );
159            nameColumn.setIndexName( NAME.toString() );
160            nameColumn.setIndexType( ColumnIndexType.KEYS );
161            nameColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );
162            namespace.addColumnDefinition( nameColumn );
163
164            BasicColumnDefinition repositoryIdColumn = new BasicColumnDefinition();
165            repositoryIdColumn.setName( StringSerializer.get().toByteBuffer( REPOSITORY_NAME.toString() ) );
166            repositoryIdColumn.setIndexName( REPOSITORY_NAME.toString() );
167            repositoryIdColumn.setIndexType( ColumnIndexType.KEYS );
168            repositoryIdColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );
169            namespace.addColumnDefinition( repositoryIdColumn );
170        }
171
172        // repository table
173        {
174            final ColumnFamilyDefinition repository =
175                HFactory.createColumnFamilyDefinition( keyspace.getKeyspaceName(), //
176                                                       getRepositoryFamilyName(), //
177                                                       ComparatorType.UTF8TYPE );
178
179            cfds.add( repository );
180
181            BasicColumnDefinition nameColumn = new BasicColumnDefinition();
182            nameColumn.setName( StringSerializer.get().toByteBuffer( REPOSITORY_NAME.toString() ) );
183            nameColumn.setIndexName( REPOSITORY_NAME.toString() );
184            nameColumn.setIndexType( ColumnIndexType.KEYS );
185            nameColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );
186            repository.addColumnDefinition( nameColumn );
187        }
188
189        // project table
190        {
191
192            final ColumnFamilyDefinition project = HFactory.createColumnFamilyDefinition( keyspace.getKeyspaceName(), //
193                                                                                          getProjectFamilyName(), //
194                                                                                          ComparatorType.UTF8TYPE );
195            cfds.add( project );
196
197            // creating indexes for cql query
198
199            BasicColumnDefinition projectIdColumn = new BasicColumnDefinition();
200            projectIdColumn.setName( StringSerializer.get().toByteBuffer( PROJECT_ID.toString() ) );
201            projectIdColumn.setIndexName( PROJECT_ID.toString() );
202            projectIdColumn.setIndexType( ColumnIndexType.KEYS );
203            projectIdColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );
204            project.addColumnDefinition( projectIdColumn );
205
206            BasicColumnDefinition repositoryIdColumn = new BasicColumnDefinition();
207            repositoryIdColumn.setName( StringSerializer.get().toByteBuffer( REPOSITORY_NAME.toString() ) );
208            repositoryIdColumn.setIndexName( REPOSITORY_NAME.toString() );
209            repositoryIdColumn.setIndexType( ColumnIndexType.KEYS );
210            repositoryIdColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );
211            project.addColumnDefinition( repositoryIdColumn );
212
213            BasicColumnDefinition namespaceIdColumn = new BasicColumnDefinition();
214            namespaceIdColumn.setName( StringSerializer.get().toByteBuffer( NAMESPACE_ID.toString() ) );
215            namespaceIdColumn.setIndexName( NAMESPACE_ID.toString() );
216            namespaceIdColumn.setIndexType( ColumnIndexType.KEYS );
217            namespaceIdColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );
218            project.addColumnDefinition( namespaceIdColumn );
219        }
220
221        //projectversionmetadatamodel
222        {
223
224            final ColumnFamilyDefinition projectVersionMetadataModel =
225                HFactory.createColumnFamilyDefinition( keyspace.getKeyspaceName(), //
226                                                       getProjectVersionMetadataFamilyName(), //
227                                                       ComparatorType.UTF8TYPE );
228            cfds.add( projectVersionMetadataModel );
229
230            // creating indexes for cql query
231
232            BasicColumnDefinition namespaceIdColumn = new BasicColumnDefinition();
233            namespaceIdColumn.setName( StringSerializer.get().toByteBuffer( NAMESPACE_ID.toString() ) );
234            namespaceIdColumn.setIndexName( NAMESPACE_ID.toString() );
235            namespaceIdColumn.setIndexType( ColumnIndexType.KEYS );
236            namespaceIdColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );
237            projectVersionMetadataModel.addColumnDefinition( namespaceIdColumn );
238
239            BasicColumnDefinition repositoryNameColumn = new BasicColumnDefinition();
240            repositoryNameColumn.setName( StringSerializer.get().toByteBuffer( REPOSITORY_NAME.toString() ) );
241            repositoryNameColumn.setIndexName( REPOSITORY_NAME.toString() );
242            repositoryNameColumn.setIndexType( ColumnIndexType.KEYS );
243            repositoryNameColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );
244            projectVersionMetadataModel.addColumnDefinition( repositoryNameColumn );
245
246            BasicColumnDefinition idColumn = new BasicColumnDefinition();
247            idColumn.setName( StringSerializer.get().toByteBuffer( ID.toString() ) );
248            idColumn.setIndexName( ID.toString() );
249            idColumn.setIndexType( ColumnIndexType.KEYS );
250            idColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );
251            projectVersionMetadataModel.addColumnDefinition( idColumn );
252
253            BasicColumnDefinition projectIdColumn = new BasicColumnDefinition();
254            projectIdColumn.setName( StringSerializer.get().toByteBuffer( PROJECT_ID.toString() ) );
255            projectIdColumn.setIndexName( PROJECT_ID.toString() );
256            projectIdColumn.setIndexType( ColumnIndexType.KEYS );
257            projectIdColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );
258            projectVersionMetadataModel.addColumnDefinition( projectIdColumn );
259
260        }
261
262        // artifactmetadatamodel table
263        {
264
265            final ColumnFamilyDefinition artifactMetadataModel =
266                HFactory.createColumnFamilyDefinition( keyspace.getKeyspaceName(), //
267                                                       getArtifactMetadataFamilyName(), //
268                                                       ComparatorType.UTF8TYPE );
269            cfds.add( artifactMetadataModel );
270
271            // creating indexes for cql query
272
273            BasicColumnDefinition idColumn = new BasicColumnDefinition();
274            idColumn.setName( StringSerializer.get().toByteBuffer( ID.toString() ) );
275            idColumn.setIndexName( ID.toString() );
276            idColumn.setIndexType( ColumnIndexType.KEYS );
277            idColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );
278            artifactMetadataModel.addColumnDefinition( idColumn );
279
280            BasicColumnDefinition repositoryNameColumn = new BasicColumnDefinition();
281            repositoryNameColumn.setName( StringSerializer.get().toByteBuffer( REPOSITORY_NAME.toString() ) );
282            repositoryNameColumn.setIndexName( REPOSITORY_NAME.toString() );
283            repositoryNameColumn.setIndexType( ColumnIndexType.KEYS );
284            repositoryNameColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );
285            artifactMetadataModel.addColumnDefinition( repositoryNameColumn );
286
287            BasicColumnDefinition namespaceIdColumn = new BasicColumnDefinition();
288            namespaceIdColumn.setName( StringSerializer.get().toByteBuffer( NAMESPACE_ID.toString() ) );
289            namespaceIdColumn.setIndexName( NAMESPACE_ID.toString() );
290            namespaceIdColumn.setIndexType( ColumnIndexType.KEYS );
291            namespaceIdColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );
292            artifactMetadataModel.addColumnDefinition( namespaceIdColumn );
293
294            BasicColumnDefinition projectColumn = new BasicColumnDefinition();
295            projectColumn.setName( StringSerializer.get().toByteBuffer( PROJECT.toString() ) );
296            projectColumn.setIndexName( PROJECT.toString() );
297            projectColumn.setIndexType( ColumnIndexType.KEYS );
298            projectColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );
299            artifactMetadataModel.addColumnDefinition( projectColumn );
300
301            BasicColumnDefinition projectVersionColumn = new BasicColumnDefinition();
302            projectVersionColumn.setName( StringSerializer.get().toByteBuffer( PROJECT_VERSION.toString() ) );
303            projectVersionColumn.setIndexName( PROJECT_VERSION.toString() );
304            projectVersionColumn.setIndexType( ColumnIndexType.KEYS );
305            projectVersionColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );
306            artifactMetadataModel.addColumnDefinition( projectVersionColumn );
307
308            BasicColumnDefinition versionColumn = new BasicColumnDefinition();
309            versionColumn.setName( StringSerializer.get().toByteBuffer( VERSION.toString() ) );
310            versionColumn.setIndexName( VERSION.toString() );
311            versionColumn.setIndexType( ColumnIndexType.KEYS );
312            versionColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );
313            artifactMetadataModel.addColumnDefinition( versionColumn );
314
315            BasicColumnDefinition whenGatheredColumn = new BasicColumnDefinition();
316            whenGatheredColumn.setName( StringSerializer.get().toByteBuffer( WHEN_GATHERED.toString() ) );
317            whenGatheredColumn.setIndexName( WHEN_GATHERED.toString() );
318            whenGatheredColumn.setIndexType( ColumnIndexType.KEYS );
319            whenGatheredColumn.setValidationClass( ComparatorType.LONGTYPE.getClassName() );
320            artifactMetadataModel.addColumnDefinition( whenGatheredColumn );
321
322            BasicColumnDefinition sha1Column = new BasicColumnDefinition();
323            sha1Column.setName( StringSerializer.get().toByteBuffer( SHA1.toString() ) );
324            sha1Column.setIndexName( SHA1.toString() );
325            sha1Column.setIndexType( ColumnIndexType.KEYS );
326            sha1Column.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );
327            artifactMetadataModel.addColumnDefinition( sha1Column );
328
329            BasicColumnDefinition md5Column = new BasicColumnDefinition();
330            md5Column.setName( StringSerializer.get().toByteBuffer( MD5.toString() ) );
331            md5Column.setIndexName( MD5.toString() );
332            md5Column.setIndexType( ColumnIndexType.KEYS );
333            md5Column.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );
334            artifactMetadataModel.addColumnDefinition( md5Column );
335
336
337        }
338
339        // metadatafacetmodel table
340        {
341            final ColumnFamilyDefinition metadataFacetModel =
342                HFactory.createColumnFamilyDefinition( keyspace.getKeyspaceName(), //
343                                                       getMetadataFacetFamilyName(), //
344                                                       ComparatorType.UTF8TYPE );
345            cfds.add( metadataFacetModel );
346
347            // creating indexes for cql query
348
349            BasicColumnDefinition facetIdColumn = new BasicColumnDefinition();
350            facetIdColumn.setName( StringSerializer.get().toByteBuffer( FACET_ID.toString() ) );
351            facetIdColumn.setIndexName( FACET_ID.toString() );
352            facetIdColumn.setIndexType( ColumnIndexType.KEYS );
353            facetIdColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );
354            metadataFacetModel.addColumnDefinition( facetIdColumn );
355
356            BasicColumnDefinition repositoryNameColumn = new BasicColumnDefinition();
357            repositoryNameColumn.setName( StringSerializer.get().toByteBuffer( REPOSITORY_NAME.toString() ) );
358            repositoryNameColumn.setIndexName( REPOSITORY_NAME.toString() );
359            repositoryNameColumn.setIndexType( ColumnIndexType.KEYS );
360            repositoryNameColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );
361            metadataFacetModel.addColumnDefinition( repositoryNameColumn );
362
363            BasicColumnDefinition nameColumn = new BasicColumnDefinition();
364            nameColumn.setName( StringSerializer.get().toByteBuffer( NAME.toString() ) );
365            nameColumn.setIndexName( NAME.toString() );
366            nameColumn.setIndexType( ColumnIndexType.KEYS );
367            nameColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );
368            metadataFacetModel.addColumnDefinition( nameColumn );
369
370            BasicColumnDefinition namespaceColumn = new BasicColumnDefinition();
371            namespaceColumn.setName( StringSerializer.get().toByteBuffer( NAMESPACE_ID.toString() ) );
372            namespaceColumn.setIndexName( NAMESPACE_ID.toString() );
373            namespaceColumn.setIndexType( ColumnIndexType.KEYS );
374            namespaceColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );
375            metadataFacetModel.addColumnDefinition( namespaceColumn );
376
377            BasicColumnDefinition projectIdColumn = new BasicColumnDefinition();
378            projectIdColumn.setName( StringSerializer.get().toByteBuffer( PROJECT_ID.toString() ) );
379            projectIdColumn.setIndexName( PROJECT_ID.toString() );
380            projectIdColumn.setIndexType( ColumnIndexType.KEYS );
381            projectIdColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );
382            metadataFacetModel.addColumnDefinition( projectIdColumn );
383
384            BasicColumnDefinition projectVersionColumn = new BasicColumnDefinition();
385            projectVersionColumn.setName( StringSerializer.get().toByteBuffer( PROJECT_VERSION.toString() ) );
386            projectVersionColumn.setIndexName( PROJECT_VERSION.toString() );
387            projectVersionColumn.setIndexType( ColumnIndexType.KEYS );
388            projectVersionColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );
389            metadataFacetModel.addColumnDefinition( projectVersionColumn );
390
391        }
392
393        // Checksum table
394        {
395            final ColumnFamilyDefinition checksumCf =
396                    HFactory.createColumnFamilyDefinition( keyspace.getKeyspaceName(), //
397                            getChecksumFamilyName(), //
398                            ComparatorType.UTF8TYPE );
399
400            BasicColumnDefinition artifactMetatadaModel_key = new BasicColumnDefinition();
401            artifactMetatadaModel_key.setName( StringSerializer.get().toByteBuffer( "artifactMetadataModel.key" ) );
402            artifactMetatadaModel_key.setIndexName( "artifactMetadataModel_key" );
403            artifactMetatadaModel_key.setIndexType( ColumnIndexType.KEYS );
404            artifactMetatadaModel_key.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );
405            checksumCf.addColumnDefinition( artifactMetatadaModel_key );
406
407
408            BasicColumnDefinition checksumAlgorithmColumn = new BasicColumnDefinition();
409            checksumAlgorithmColumn.setName( StringSerializer.get().toByteBuffer( CHECKSUM_ALG.toString() ) );
410            checksumAlgorithmColumn.setIndexName( CHECKSUM_ALG.toString() );
411            checksumAlgorithmColumn.setIndexType( ColumnIndexType.KEYS );
412            checksumAlgorithmColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );
413            checksumCf.addColumnDefinition( checksumAlgorithmColumn );
414
415            BasicColumnDefinition checksumValueColumn = new BasicColumnDefinition();
416            checksumValueColumn.setName( StringSerializer.get().toByteBuffer( CHECKSUM_VALUE.toString() ) );
417            checksumValueColumn.setIndexName( CHECKSUM_VALUE.toString() );
418            checksumValueColumn.setIndexType( ColumnIndexType.KEYS );
419            checksumValueColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );
420            checksumCf.addColumnDefinition( checksumValueColumn );
421
422            BasicColumnDefinition repositoryNameColumn = new BasicColumnDefinition();
423            repositoryNameColumn.setName( StringSerializer.get().toByteBuffer( REPOSITORY_NAME.toString() ) );
424            repositoryNameColumn.setIndexName( REPOSITORY_NAME.toString() );
425            repositoryNameColumn.setIndexType( ColumnIndexType.KEYS );
426            repositoryNameColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );
427            checksumCf.addColumnDefinition( repositoryNameColumn );
428
429
430            cfds.add( checksumCf );
431
432            // creating indexes for cql query
433
434        }
435
436        // mailinglist table
437        {
438            final ColumnFamilyDefinition mailingListCf =
439                HFactory.createColumnFamilyDefinition( keyspace.getKeyspaceName(), //
440                                                       getMailingListFamilyName(), //
441                                                       ComparatorType.UTF8TYPE );
442
443            BasicColumnDefinition projectVersionMetadataModel_key = new BasicColumnDefinition();
444            projectVersionMetadataModel_key.setName( StringSerializer.get().toByteBuffer( "projectVersionMetadataModel.key" ) );
445            projectVersionMetadataModel_key.setIndexName( "projectVersionMetadataModel_key" );
446            projectVersionMetadataModel_key.setIndexType( ColumnIndexType.KEYS );
447            projectVersionMetadataModel_key.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );
448            mailingListCf.addColumnDefinition( projectVersionMetadataModel_key );
449
450            cfds.add( mailingListCf );
451
452            // creating indexes for cql query
453
454        }
455
456        // license table
457        {
458            final ColumnFamilyDefinition licenseCf =
459                HFactory.createColumnFamilyDefinition( keyspace.getKeyspaceName(), //
460                                                       getLicenseFamilyName(), //
461                                                       ComparatorType.UTF8TYPE );
462
463            BasicColumnDefinition projectVersionMetadataModel_key = new BasicColumnDefinition();
464            projectVersionMetadataModel_key.setName( StringSerializer.get().toByteBuffer( "projectVersionMetadataModel.key" ) );
465            projectVersionMetadataModel_key.setIndexName( "projectVersionMetadataModel_key" );
466            projectVersionMetadataModel_key.setIndexType( ColumnIndexType.KEYS );
467            projectVersionMetadataModel_key.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );
468            licenseCf.addColumnDefinition( projectVersionMetadataModel_key );
469
470            cfds.add( licenseCf );
471
472            // creating indexes for cql query
473
474        }
475
476        // dependency table
477        {
478            final ColumnFamilyDefinition dependencyCf =
479                HFactory.createColumnFamilyDefinition( keyspace.getKeyspaceName(), //
480                                                       getDependencyFamilyName(), //
481                                                       ComparatorType.UTF8TYPE );
482            cfds.add( dependencyCf );
483
484            // creating indexes for cql query
485
486            BasicColumnDefinition groupIdColumn = new BasicColumnDefinition();
487            groupIdColumn.setName( StringSerializer.get().toByteBuffer( GROUP_ID.toString() ) );
488            groupIdColumn.setIndexName( "groupIdIdx" );
489            groupIdColumn.setIndexType( ColumnIndexType.KEYS );
490            groupIdColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );
491            dependencyCf.addColumnDefinition( groupIdColumn );
492
493            BasicColumnDefinition projectVersionMetadataModel_key = new BasicColumnDefinition();
494            projectVersionMetadataModel_key.setName( StringSerializer.get().toByteBuffer( "projectVersionMetadataModel.key" ) );
495            projectVersionMetadataModel_key.setIndexName( "projectVersionMetadataModel_key" );
496            projectVersionMetadataModel_key.setIndexType( ColumnIndexType.KEYS );
497            projectVersionMetadataModel_key.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );
498            dependencyCf.addColumnDefinition( projectVersionMetadataModel_key );
499
500        }
501
502        // TODO take care of update new table!!
503        { // ensure keyspace exists, here if the keyspace doesn't exist we suppose nothing exist
504            if ( cluster.describeKeyspace( keyspaceName ) == null )
505            {
506                logger.info( "Creating Archiva Cassandra '{}' keyspace.", keyspaceName );
507                cluster.addKeyspace( HFactory.createKeyspaceDefinition( keyspaceName, //
508                                                                        ThriftKsDef.DEF_STRATEGY_CLASS, //
509                                                                        replicationFactor, //
510                                                                        cfds )
511                );
512            }
513        }
514
515    }
516
517    @Override
518    public void start()
519    {
520    }
521
522    @PreDestroy
523    @Override
524    public void shutdown()
525    {
526    }
527
528
529    @Override
530    public boolean started()
531    {
532        return started;
533    }
534
535
536    @Override
537    public Keyspace getKeyspace()
538    {
539        return keyspace;
540    }
541
542    @Override
543    public Cluster getCluster()
544    {
545        return cluster;
546    }
547
548    @Override
549    public String getRepositoryFamilyName()
550    {
551        return repositoryFamilyName;
552    }
553
554    @Override
555    public String getNamespaceFamilyName()
556    {
557        return namespaceFamilyName;
558    }
559
560    @Override
561    public String getProjectFamilyName()
562    {
563        return projectFamilyName;
564    }
565
566    @Override
567    public String getProjectVersionMetadataFamilyName()
568    {
569        return projectVersionMetadataFamilyName;
570    }
571
572    @Override
573    public String getArtifactMetadataFamilyName()
574    {
575        return artifactMetadataFamilyName;
576    }
577
578    @Override
579    public String getMetadataFacetFamilyName()
580    {
581        return metadataFacetFamilyName;
582    }
583
584    @Override
585    public String getMailingListFamilyName()
586    {
587        return mailingListFamilyName;
588    }
589
590    @Override
591    public String getLicenseFamilyName()
592    {
593        return licenseFamilyName;
594    }
595
596    @Override
597    public String getDependencyFamilyName()
598    {
599        return dependencyFamilyName;
600    }
601
602    @Override
603    public String getChecksumFamilyName() {
604        return checksumFamilyName;
605    }
606}