[SDC-29] Amdocs OnBoard 1707 initial commit.
[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.vendorsoftwareproduct.dao.type.ComponentEntity;
17 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ProcessEntity;
18 import org.openecomp.sdc.versioning.VersioningManagerFactory;
19 import org.openecomp.sdc.versioning.dao.types.Version;
20 import org.openecomp.sdc.versioning.types.UniqueValueMetadata;
21 import org.openecomp.sdc.versioning.types.VersionableEntityMetadata;
22
23 import java.util.Arrays;
24 import java.util.Collection;
25 import java.util.Collections;
26
27 public class ComponentDependencyModelDaoCassandraImpl extends CassandraBaseDao
28     <ComponentDependencyModelEntity> implements ComponentDependencyModelDao {
29
30   private static final NoSqlDb noSqlDb = NoSqlDbFactory.getInstance().createInterface();
31   private static final Mapper<ComponentDependencyModelEntity> mapper =
32       noSqlDb.getMappingManager().mapper(ComponentDependencyModelEntity.class);
33   private static final ComponentDependencyModelDaoCassandraImpl.ComponentDependencyModelAccessor
34       accessor = noSqlDb.getMappingManager().createAccessor(
35       ComponentDependencyModelDaoCassandraImpl.ComponentDependencyModelAccessor.class);
36   private static final UDTMapper<Version> versionMapper =
37       noSqlDb.getMappingManager().udtMapper(Version.class);
38
39   @Override
40   protected Mapper<ComponentDependencyModelEntity> getMapper() {
41     return mapper;
42   }
43
44   @Override
45   protected Object[] getKeys(ComponentDependencyModelEntity entity) {
46     return new Object[]{entity.getVspId(), versionMapper.toUDT(entity.getVersion()),
47         entity.getId()};
48   }
49
50   @Override
51   public Collection<ComponentDependencyModelEntity> list(ComponentDependencyModelEntity entity) {
52     return accessor
53         .list(entity.getVspId(), versionMapper.toUDT(entity.getVersion())).all();
54   }
55
56   @Override
57   public void deleteAll(String vspId, Version version) {
58     accessor.deleteAll(vspId, versionMapper.toUDT(version));
59   }
60
61
62   @Override
63   public void registerVersioning(String versionableEntityType) {
64     VersionableEntityMetadata metadata = new VersionableEntityMetadata(
65         mapper.getTableMetadata().getName(),
66         mapper.getTableMetadata().getPartitionKey().get(0).getName(),
67         mapper.getTableMetadata().getPartitionKey().get(1).getName());
68
69     metadata.setUniqueValuesMetadata(Collections.singletonList(new UniqueValueMetadata(
70         VendorSoftwareProductConstants.UniqueValues.PROCESS_NAME,
71         Arrays.asList("vsp_id", "version", "component_id", "name"))));
72
73     VersioningManagerFactory.getInstance().createInterface()
74         .register(versionableEntityType, metadata);
75
76   }
77
78   @Accessor
79   interface ComponentDependencyModelAccessor {
80     @Query("delete from vsp_component_dependency_model where vsp_id=? and version=?")
81     ResultSet deleteAll(String vspId, UDTValue version);
82
83     @Query(
84         "select * from vsp_component_dependency_model where vsp_id=? and version=?")
85     Result<ComponentDependencyModelEntity> list(String vspId, UDTValue version);
86   }
87 }