Add collaboration feature
[sdc.git] / openecomp-be / lib / openecomp-sdc-vendor-software-product-lib / openecomp-sdc-vendor-software-product-core / src / main / java / org / openecomp / sdc / vendorsoftwareproduct / dao / impl / ComponentDependencyModelDaoCassandraImpl.java
1 package org.openecomp.sdc.vendorsoftwareproduct.dao.impl;
2
3 import com.datastax.driver.core.ResultSet;
4 import com.datastax.driver.core.UDTValue;
5 import com.datastax.driver.mapping.Mapper;
6 import com.datastax.driver.mapping.Result;
7 import com.datastax.driver.mapping.UDTMapper;
8 import com.datastax.driver.mapping.annotations.Accessor;
9 import com.datastax.driver.mapping.annotations.Query;
10 import org.openecomp.core.dao.impl.CassandraBaseDao;
11 import org.openecomp.core.nosqldb.api.NoSqlDb;
12 import org.openecomp.core.nosqldb.factory.NoSqlDbFactory;
13 import org.openecomp.sdc.vendorsoftwareproduct.VendorSoftwareProductConstants;
14 import org.openecomp.sdc.vendorsoftwareproduct.dao.ComponentDependencyModelDao;
15 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentDependencyModelEntity;
16 import org.openecomp.sdc.versioning.VersioningManagerFactory;
17 import org.openecomp.sdc.versioning.dao.types.Version;
18 import org.openecomp.sdc.versioning.types.UniqueValueMetadata;
19 import org.openecomp.sdc.versioning.types.VersionableEntityMetadata;
20
21 import java.util.Arrays;
22 import java.util.Collection;
23 import java.util.Collections;
24
25 public class ComponentDependencyModelDaoCassandraImpl extends CassandraBaseDao
26     <ComponentDependencyModelEntity> implements ComponentDependencyModelDao {
27
28   private static final NoSqlDb noSqlDb = NoSqlDbFactory.getInstance().createInterface();
29   private static final Mapper<ComponentDependencyModelEntity> mapper =
30       noSqlDb.getMappingManager().mapper(ComponentDependencyModelEntity.class);
31   private static final ComponentDependencyModelDaoCassandraImpl.ComponentDependencyModelAccessor
32       accessor = noSqlDb.getMappingManager().createAccessor(
33       ComponentDependencyModelDaoCassandraImpl.ComponentDependencyModelAccessor.class);
34   private static final UDTMapper<Version> versionMapper =
35       noSqlDb.getMappingManager().udtMapper(Version.class);
36
37   @Override
38   protected Mapper<ComponentDependencyModelEntity> getMapper() {
39     return mapper;
40   }
41
42   @Override
43   protected Object[] getKeys(ComponentDependencyModelEntity entity) {
44     return new Object[]{entity.getVspId(), versionMapper.toUDT(entity.getVersion()),
45         entity.getId()};
46   }
47
48   @Override
49   public Collection<ComponentDependencyModelEntity> list(ComponentDependencyModelEntity entity) {
50     return accessor
51         .list(entity.getVspId(), versionMapper.toUDT(entity.getVersion())).all();
52   }
53
54   @Override
55   public void registerVersioning(String versionableEntityType) {
56     VersionableEntityMetadata metadata = new VersionableEntityMetadata(
57         mapper.getTableMetadata().getName(),
58         mapper.getTableMetadata().getPartitionKey().get(0).getName(),
59         mapper.getTableMetadata().getPartitionKey().get(1).getName());
60
61     metadata.setUniqueValuesMetadata(Collections.singletonList(new UniqueValueMetadata(
62         VendorSoftwareProductConstants.UniqueValues.PROCESS_NAME,
63         Arrays.asList("vsp_id", "version", "component_id", "name"))));
64
65     VersioningManagerFactory.getInstance().createInterface()
66         .register(versionableEntityType, metadata);
67
68   }
69
70   @Accessor
71   interface ComponentDependencyModelAccessor {
72     @Query("delete from vsp_component_dependency_model where vsp_id=? and version=?")
73     ResultSet deleteAll(String vspId, UDTValue version);
74
75     @Query(
76         "select * from vsp_component_dependency_model where vsp_id=? and version=?")
77     Result<ComponentDependencyModelEntity> list(String vspId, UDTValue version);
78   }
79 }