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 static org.apache.archiva.metadata.repository.cassandra.model.ColumnNames.*;
023
024import me.prettyprint.cassandra.model.BasicColumnDefinition;
025import me.prettyprint.cassandra.model.ConfigurableConsistencyLevel;
026import me.prettyprint.cassandra.serializers.StringSerializer;
027import me.prettyprint.cassandra.service.CassandraHostConfigurator;
028import me.prettyprint.cassandra.service.ThriftKsDef;
029import me.prettyprint.hector.api.Cluster;
030import me.prettyprint.hector.api.HConsistencyLevel;
031import me.prettyprint.hector.api.Keyspace;
032import me.prettyprint.hector.api.ddl.ColumnFamilyDefinition;
033import me.prettyprint.hector.api.ddl.ColumnIndexType;
034import me.prettyprint.hector.api.ddl.ComparatorType;
035import me.prettyprint.hector.api.factory.HFactory;
036import org.apache.archiva.metadata.repository.RepositorySessionFactoryBean;
037import org.apache.commons.lang.StringUtils;
038import org.slf4j.Logger;
039import org.slf4j.LoggerFactory;
040import org.springframework.beans.factory.annotation.Value;
041import org.springframework.context.ApplicationContext;
042import org.springframework.stereotype.Service;
043
044import javax.annotation.PostConstruct;
045import javax.annotation.PreDestroy;
046import javax.inject.Inject;
047import java.util.ArrayList;
048import java.util.List;
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    @Value("${cassandra.host}")
096    private String cassandraHost;
097
098    @Value("${cassandra.port}")
099    private String cassandraPort;
100
101    @Value("${cassandra.maxActive}")
102    private int maxActive;
103
104    @Value("${cassandra.readConsistencyLevel}")
105    private String readConsistencyLevel;
106
107    @Value("${cassandra.writeConsistencyLevel}")
108    private String writeConsistencyLevel;
109
110    @Value("${cassandra.replicationFactor}")
111    private int replicationFactor;
112
113    @Value("${cassandra.keyspace.name}")
114    private String keyspaceName;
115
116    @Value("${cassandra.cluster.name}")
117    private String clusterName;
118
119    @Inject
120    private RepositorySessionFactoryBean repositorySessionFactoryBean;
121
122    @PostConstruct
123    public void initialize()
124    {
125        // skip initialisation if not cassandra
126        if ( !StringUtils.equals( repositorySessionFactoryBean.getId(), "cassandra" ) )
127        {
128            return;
129        }
130        final CassandraHostConfigurator configurator =
131            new CassandraHostConfigurator( cassandraHost + ":" + cassandraPort );
132        configurator.setMaxActive( maxActive );
133        //configurator.setCassandraThriftSocketTimeout(  );
134
135        cluster = HFactory.getOrCreateCluster( clusterName, configurator );
136
137        final ConfigurableConsistencyLevel consistencyLevelPolicy = new ConfigurableConsistencyLevel();
138        consistencyLevelPolicy.setDefaultReadConsistencyLevel( HConsistencyLevel.valueOf( readConsistencyLevel ) );
139        consistencyLevelPolicy.setDefaultWriteConsistencyLevel( HConsistencyLevel.valueOf( writeConsistencyLevel ) );
140        keyspace = HFactory.createKeyspace( keyspaceName, cluster, consistencyLevelPolicy );
141
142        List<ColumnFamilyDefinition> cfds = new ArrayList<>();
143
144        // namespace table
145        {
146
147            final ColumnFamilyDefinition namespace =
148                HFactory.createColumnFamilyDefinition( keyspace.getKeyspaceName(), //
149                                                       getNamespaceFamilyName(), //
150                                                       ComparatorType.UTF8TYPE );
151            cfds.add( namespace );
152
153            // creating indexes for cql query
154
155            BasicColumnDefinition nameColumn = new BasicColumnDefinition();
156            nameColumn.setName( StringSerializer.get().toByteBuffer( NAME.toString() ) );
157            nameColumn.setIndexName( NAME.toString() );
158            nameColumn.setIndexType( ColumnIndexType.KEYS );
159            nameColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );
160            namespace.addColumnDefinition( nameColumn );
161
162            BasicColumnDefinition repositoryIdColumn = new BasicColumnDefinition();
163            repositoryIdColumn.setName( StringSerializer.get().toByteBuffer( REPOSITORY_NAME.toString() ) );
164            repositoryIdColumn.setIndexName( REPOSITORY_NAME.toString() );
165            repositoryIdColumn.setIndexType( ColumnIndexType.KEYS );
166            repositoryIdColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );
167            namespace.addColumnDefinition( repositoryIdColumn );
168        }
169
170        // repository table
171        {
172            final ColumnFamilyDefinition repository =
173                HFactory.createColumnFamilyDefinition( keyspace.getKeyspaceName(), //
174                                                       getRepositoryFamilyName(), //
175                                                       ComparatorType.UTF8TYPE );
176
177            cfds.add( repository );
178
179            BasicColumnDefinition nameColumn = new BasicColumnDefinition();
180            nameColumn.setName( StringSerializer.get().toByteBuffer( REPOSITORY_NAME.toString() ) );
181            nameColumn.setIndexName( REPOSITORY_NAME.toString() );
182            nameColumn.setIndexType( ColumnIndexType.KEYS );
183            nameColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );
184            repository.addColumnDefinition( nameColumn );
185        }
186
187        // project table
188        {
189
190            final ColumnFamilyDefinition project = HFactory.createColumnFamilyDefinition( keyspace.getKeyspaceName(), //
191                                                                                          getProjectFamilyName(), //
192                                                                                          ComparatorType.UTF8TYPE );
193            cfds.add( project );
194
195            // creating indexes for cql query
196
197            BasicColumnDefinition projectIdColumn = new BasicColumnDefinition();
198            projectIdColumn.setName( StringSerializer.get().toByteBuffer( PROJECT_ID.toString() ) );
199            projectIdColumn.setIndexName( PROJECT_ID.toString() );
200            projectIdColumn.setIndexType( ColumnIndexType.KEYS );
201            projectIdColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );
202            project.addColumnDefinition( projectIdColumn );
203
204            BasicColumnDefinition repositoryIdColumn = new BasicColumnDefinition();
205            repositoryIdColumn.setName( StringSerializer.get().toByteBuffer( REPOSITORY_NAME.toString() ) );
206            repositoryIdColumn.setIndexName( REPOSITORY_NAME.toString() );
207            repositoryIdColumn.setIndexType( ColumnIndexType.KEYS );
208            repositoryIdColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );
209            project.addColumnDefinition( repositoryIdColumn );
210
211            BasicColumnDefinition namespaceIdColumn = new BasicColumnDefinition();
212            namespaceIdColumn.setName( StringSerializer.get().toByteBuffer( NAMESPACE_ID.toString() ) );
213            namespaceIdColumn.setIndexName( NAMESPACE_ID.toString() );
214            namespaceIdColumn.setIndexType( ColumnIndexType.KEYS );
215            namespaceIdColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );
216            project.addColumnDefinition( namespaceIdColumn );
217        }
218
219        //projectversionmetadatamodel
220        {
221
222            final ColumnFamilyDefinition projectVersionMetadataModel =
223                HFactory.createColumnFamilyDefinition( keyspace.getKeyspaceName(), //
224                                                       getProjectVersionMetadataFamilyName(), //
225                                                       ComparatorType.UTF8TYPE );
226            cfds.add( projectVersionMetadataModel );
227
228            // creating indexes for cql query
229
230            BasicColumnDefinition namespaceIdColumn = new BasicColumnDefinition();
231            namespaceIdColumn.setName( StringSerializer.get().toByteBuffer( NAMESPACE_ID.toString() ) );
232            namespaceIdColumn.setIndexName( NAMESPACE_ID.toString() );
233            namespaceIdColumn.setIndexType( ColumnIndexType.KEYS );
234            namespaceIdColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );
235            projectVersionMetadataModel.addColumnDefinition( namespaceIdColumn );
236
237            BasicColumnDefinition repositoryNameColumn = new BasicColumnDefinition();
238            repositoryNameColumn.setName( StringSerializer.get().toByteBuffer( REPOSITORY_NAME.toString() ) );
239            repositoryNameColumn.setIndexName( REPOSITORY_NAME.toString() );
240            repositoryNameColumn.setIndexType( ColumnIndexType.KEYS );
241            repositoryNameColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );
242            projectVersionMetadataModel.addColumnDefinition( repositoryNameColumn );
243
244            BasicColumnDefinition idColumn = new BasicColumnDefinition();
245            idColumn.setName( StringSerializer.get().toByteBuffer( ID.toString() ) );
246            idColumn.setIndexName( ID.toString() );
247            idColumn.setIndexType( ColumnIndexType.KEYS );
248            idColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );
249            projectVersionMetadataModel.addColumnDefinition( idColumn );
250
251            BasicColumnDefinition projectIdColumn = new BasicColumnDefinition();
252            projectIdColumn.setName( StringSerializer.get().toByteBuffer( PROJECT_ID.toString() ) );
253            projectIdColumn.setIndexName( PROJECT_ID.toString() );
254            projectIdColumn.setIndexType( ColumnIndexType.KEYS );
255            projectIdColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );
256            projectVersionMetadataModel.addColumnDefinition( projectIdColumn );
257
258        }
259
260        // artifactmetadatamodel table
261        {
262
263            final ColumnFamilyDefinition artifactMetadataModel =
264                HFactory.createColumnFamilyDefinition( keyspace.getKeyspaceName(), //
265                                                       getArtifactMetadataFamilyName(), //
266                                                       ComparatorType.UTF8TYPE );
267            cfds.add( artifactMetadataModel );
268
269            // creating indexes for cql query
270
271            BasicColumnDefinition idColumn = new BasicColumnDefinition();
272            idColumn.setName( StringSerializer.get().toByteBuffer( ID.toString() ) );
273            idColumn.setIndexName( ID.toString() );
274            idColumn.setIndexType( ColumnIndexType.KEYS );
275            idColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );
276            artifactMetadataModel.addColumnDefinition( idColumn );
277
278            BasicColumnDefinition repositoryNameColumn = new BasicColumnDefinition();
279            repositoryNameColumn.setName( StringSerializer.get().toByteBuffer( REPOSITORY_NAME.toString() ) );
280            repositoryNameColumn.setIndexName( REPOSITORY_NAME.toString() );
281            repositoryNameColumn.setIndexType( ColumnIndexType.KEYS );
282            repositoryNameColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );
283            artifactMetadataModel.addColumnDefinition( repositoryNameColumn );
284
285            BasicColumnDefinition namespaceIdColumn = new BasicColumnDefinition();
286            namespaceIdColumn.setName( StringSerializer.get().toByteBuffer( NAMESPACE_ID.toString() ) );
287            namespaceIdColumn.setIndexName( NAMESPACE_ID.toString() );
288            namespaceIdColumn.setIndexType( ColumnIndexType.KEYS );
289            namespaceIdColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );
290            artifactMetadataModel.addColumnDefinition( namespaceIdColumn );
291
292            BasicColumnDefinition projectColumn = new BasicColumnDefinition();
293            projectColumn.setName( StringSerializer.get().toByteBuffer( PROJECT.toString() ) );
294            projectColumn.setIndexName( PROJECT.toString() );
295            projectColumn.setIndexType( ColumnIndexType.KEYS );
296            projectColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );
297            artifactMetadataModel.addColumnDefinition( projectColumn );
298
299            BasicColumnDefinition projectVersionColumn = new BasicColumnDefinition();
300            projectVersionColumn.setName( StringSerializer.get().toByteBuffer( PROJECT_VERSION.toString() ) );
301            projectVersionColumn.setIndexName( PROJECT_VERSION.toString() );
302            projectVersionColumn.setIndexType( ColumnIndexType.KEYS );
303            projectVersionColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );
304            artifactMetadataModel.addColumnDefinition( projectVersionColumn );
305
306            BasicColumnDefinition versionColumn = new BasicColumnDefinition();
307            versionColumn.setName( StringSerializer.get().toByteBuffer( VERSION.toString() ) );
308            versionColumn.setIndexName( VERSION.toString() );
309            versionColumn.setIndexType( ColumnIndexType.KEYS );
310            versionColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );
311            artifactMetadataModel.addColumnDefinition( versionColumn );
312
313            BasicColumnDefinition whenGatheredColumn = new BasicColumnDefinition();
314            whenGatheredColumn.setName( StringSerializer.get().toByteBuffer( WHEN_GATHERED.toString() ) );
315            whenGatheredColumn.setIndexName( WHEN_GATHERED.toString() );
316            whenGatheredColumn.setIndexType( ColumnIndexType.KEYS );
317            whenGatheredColumn.setValidationClass( ComparatorType.LONGTYPE.getClassName() );
318            artifactMetadataModel.addColumnDefinition( whenGatheredColumn );
319
320            BasicColumnDefinition sha1Column = new BasicColumnDefinition();
321            sha1Column.setName( StringSerializer.get().toByteBuffer( SHA1.toString() ) );
322            sha1Column.setIndexName( SHA1.toString() );
323            sha1Column.setIndexType( ColumnIndexType.KEYS );
324            sha1Column.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );
325            artifactMetadataModel.addColumnDefinition( sha1Column );
326
327            BasicColumnDefinition md5Column = new BasicColumnDefinition();
328            md5Column.setName( StringSerializer.get().toByteBuffer( MD5.toString() ) );
329            md5Column.setIndexName( MD5.toString() );
330            md5Column.setIndexType( ColumnIndexType.KEYS );
331            md5Column.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );
332            artifactMetadataModel.addColumnDefinition( md5Column );
333
334
335        }
336
337        // metadatafacetmodel table
338        {
339            final ColumnFamilyDefinition metadataFacetModel =
340                HFactory.createColumnFamilyDefinition( keyspace.getKeyspaceName(), //
341                                                       getMetadataFacetFamilyName(), //
342                                                       ComparatorType.UTF8TYPE );
343            cfds.add( metadataFacetModel );
344
345            // creating indexes for cql query
346
347            BasicColumnDefinition facetIdColumn = new BasicColumnDefinition();
348            facetIdColumn.setName( StringSerializer.get().toByteBuffer( FACET_ID.toString() ) );
349            facetIdColumn.setIndexName( FACET_ID.toString() );
350            facetIdColumn.setIndexType( ColumnIndexType.KEYS );
351            facetIdColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );
352            metadataFacetModel.addColumnDefinition( facetIdColumn );
353
354            BasicColumnDefinition repositoryNameColumn = new BasicColumnDefinition();
355            repositoryNameColumn.setName( StringSerializer.get().toByteBuffer( REPOSITORY_NAME.toString() ) );
356            repositoryNameColumn.setIndexName( REPOSITORY_NAME.toString() );
357            repositoryNameColumn.setIndexType( ColumnIndexType.KEYS );
358            repositoryNameColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );
359            metadataFacetModel.addColumnDefinition( repositoryNameColumn );
360
361            BasicColumnDefinition nameColumn = new BasicColumnDefinition();
362            nameColumn.setName( StringSerializer.get().toByteBuffer( NAME.toString() ) );
363            nameColumn.setIndexName( NAME.toString() );
364            nameColumn.setIndexType( ColumnIndexType.KEYS );
365            nameColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );
366            metadataFacetModel.addColumnDefinition( nameColumn );
367
368            BasicColumnDefinition namespaceColumn = new BasicColumnDefinition();
369            namespaceColumn.setName( StringSerializer.get().toByteBuffer( NAMESPACE_ID.toString() ) );
370            namespaceColumn.setIndexName( NAMESPACE_ID.toString() );
371            namespaceColumn.setIndexType( ColumnIndexType.KEYS );
372            namespaceColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );
373            metadataFacetModel.addColumnDefinition( namespaceColumn );
374
375            BasicColumnDefinition projectIdColumn = new BasicColumnDefinition();
376            projectIdColumn.setName( StringSerializer.get().toByteBuffer( PROJECT_ID.toString() ) );
377            projectIdColumn.setIndexName( PROJECT_ID.toString() );
378            projectIdColumn.setIndexType( ColumnIndexType.KEYS );
379            projectIdColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );
380            metadataFacetModel.addColumnDefinition( projectIdColumn );
381
382            BasicColumnDefinition projectVersionColumn = new BasicColumnDefinition();
383            projectVersionColumn.setName( StringSerializer.get().toByteBuffer( PROJECT_VERSION.toString() ) );
384            projectVersionColumn.setIndexName( PROJECT_VERSION.toString() );
385            projectVersionColumn.setIndexType( ColumnIndexType.KEYS );
386            projectVersionColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );
387            metadataFacetModel.addColumnDefinition( projectVersionColumn );
388
389        }
390
391        // mailinglist table
392        {
393            final ColumnFamilyDefinition mailingListCf =
394                HFactory.createColumnFamilyDefinition( keyspace.getKeyspaceName(), //
395                                                       getMailingListFamilyName(), //
396                                                       ComparatorType.UTF8TYPE );
397
398            BasicColumnDefinition projectVersionMetadataModel_key = new BasicColumnDefinition();
399            projectVersionMetadataModel_key.setName( StringSerializer.get().toByteBuffer( "projectVersionMetadataModel.key" ) );
400            projectVersionMetadataModel_key.setIndexName( "projectVersionMetadataModel_key" );
401            projectVersionMetadataModel_key.setIndexType( ColumnIndexType.KEYS );
402            projectVersionMetadataModel_key.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );
403            mailingListCf.addColumnDefinition( projectVersionMetadataModel_key );
404
405            cfds.add( mailingListCf );
406
407            // creating indexes for cql query
408
409        }
410
411        // license table
412        {
413            final ColumnFamilyDefinition licenseCf =
414                HFactory.createColumnFamilyDefinition( keyspace.getKeyspaceName(), //
415                                                       getLicenseFamilyName(), //
416                                                       ComparatorType.UTF8TYPE );
417
418            BasicColumnDefinition projectVersionMetadataModel_key = new BasicColumnDefinition();
419            projectVersionMetadataModel_key.setName( StringSerializer.get().toByteBuffer( "projectVersionMetadataModel.key" ) );
420            projectVersionMetadataModel_key.setIndexName( "projectVersionMetadataModel_key" );
421            projectVersionMetadataModel_key.setIndexType( ColumnIndexType.KEYS );
422            projectVersionMetadataModel_key.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );
423            licenseCf.addColumnDefinition( projectVersionMetadataModel_key );
424
425            cfds.add( licenseCf );
426
427            // creating indexes for cql query
428
429        }
430
431        // dependency table
432        {
433            final ColumnFamilyDefinition dependencyCf =
434                HFactory.createColumnFamilyDefinition( keyspace.getKeyspaceName(), //
435                                                       getDependencyFamilyName(), //
436                                                       ComparatorType.UTF8TYPE );
437            cfds.add( dependencyCf );
438
439            // creating indexes for cql query
440
441            BasicColumnDefinition groupIdColumn = new BasicColumnDefinition();
442            groupIdColumn.setName( StringSerializer.get().toByteBuffer( GROUP_ID.toString() ) );
443            groupIdColumn.setIndexName( "groupIdIdx" );
444            groupIdColumn.setIndexType( ColumnIndexType.KEYS );
445            groupIdColumn.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );
446            dependencyCf.addColumnDefinition( groupIdColumn );
447
448            BasicColumnDefinition projectVersionMetadataModel_key = new BasicColumnDefinition();
449            projectVersionMetadataModel_key.setName( StringSerializer.get().toByteBuffer( "projectVersionMetadataModel.key" ) );
450            projectVersionMetadataModel_key.setIndexName( "projectVersionMetadataModel_key" );
451            projectVersionMetadataModel_key.setIndexType( ColumnIndexType.KEYS );
452            projectVersionMetadataModel_key.setValidationClass( ComparatorType.UTF8TYPE.getClassName() );
453            dependencyCf.addColumnDefinition( projectVersionMetadataModel_key );
454
455        }
456
457        // TODO take care of update new table!!
458        { // ensure keyspace exists, here if the keyspace doesn't exist we suppose nothing exist
459            if ( cluster.describeKeyspace( keyspaceName ) == null )
460            {
461                logger.info( "Creating Archiva Cassandra '" + keyspaceName + "' keyspace." );
462                cluster.addKeyspace( HFactory.createKeyspaceDefinition( keyspaceName, //
463                                                                        ThriftKsDef.DEF_STRATEGY_CLASS, //
464                                                                        replicationFactor, //
465                                                                        cfds )
466                );
467            }
468        }
469
470    }
471
472    @Override
473    public void start()
474    {
475    }
476
477    @PreDestroy
478    @Override
479    public void shutdown()
480    {
481    }
482
483
484    @Override
485    public boolean started()
486    {
487        return started;
488    }
489
490
491    @Override
492    public Keyspace getKeyspace()
493    {
494        return keyspace;
495    }
496
497    @Override
498    public Cluster getCluster()
499    {
500        return cluster;
501    }
502
503    @Override
504    public String getRepositoryFamilyName()
505    {
506        return repositoryFamilyName;
507    }
508
509    @Override
510    public String getNamespaceFamilyName()
511    {
512        return namespaceFamilyName;
513    }
514
515    @Override
516    public String getProjectFamilyName()
517    {
518        return projectFamilyName;
519    }
520
521    @Override
522    public String getProjectVersionMetadataFamilyName()
523    {
524        return projectVersionMetadataFamilyName;
525    }
526
527    @Override
528    public String getArtifactMetadataFamilyName()
529    {
530        return artifactMetadataFamilyName;
531    }
532
533    @Override
534    public String getMetadataFacetFamilyName()
535    {
536        return metadataFacetFamilyName;
537    }
538
539    @Override
540    public String getMailingListFamilyName()
541    {
542        return mailingListFamilyName;
543    }
544
545    @Override
546    public String getLicenseFamilyName()
547    {
548        return licenseFamilyName;
549    }
550
551    @Override
552    public String getDependencyFamilyName()
553    {
554        return dependencyFamilyName;
555    }
556}