[SDC] Onboarding 1710 rebase.
[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 / ComputeDaoCassandraImpl.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.ComputeDao;
15 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComputeEntity;
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 ComputeDaoCassandraImpl extends CassandraBaseDao<ComputeEntity> implements
26     ComputeDao {
27
28   private static final NoSqlDb noSqlDb = NoSqlDbFactory.getInstance().createInterface();
29   private static final Mapper<ComputeEntity> mapper =
30       noSqlDb.getMappingManager().mapper(ComputeEntity.class);
31   private static final ComputeAccessor accessor =
32       noSqlDb.getMappingManager().createAccessor(ComputeDaoCassandraImpl.ComputeAccessor.class);
33   private static final UDTMapper<Version> versionMapper =
34       noSqlDb.getMappingManager().udtMapper(Version.class);
35
36   @Override
37   public void registerVersioning(String versionableEntityType) {
38     VersionableEntityMetadata metadata = new VersionableEntityMetadata(
39         mapper.getTableMetadata().getName(),
40         mapper.getTableMetadata().getPartitionKey().get(0).getName(),
41         mapper.getTableMetadata().getPartitionKey().get(1).getName());
42
43
44     metadata.setUniqueValuesMetadata(Collections.singletonList(new UniqueValueMetadata(
45         VendorSoftwareProductConstants.UniqueValues.COMPUTE_NAME,
46         Arrays.asList("vsp_id", "version", "component_id", "name"))));
47
48     VersioningManagerFactory.getInstance().createInterface()
49         .register(versionableEntityType, metadata);
50   }
51
52   @Override
53   public Collection<ComputeEntity> list(ComputeEntity entity) {
54     return accessor.listByComponentId(entity.getVspId(),
55         versionMapper.toUDT(entity.getVersion()), entity.getComponentId()).all();
56   }
57
58   @Override
59   protected Mapper<ComputeEntity> getMapper() {
60     return mapper;
61   }
62
63   @Override
64   protected Object[] getKeys(ComputeEntity entity) {
65     return new Object[]{entity.getVspId(), versionMapper.toUDT(entity.getVersion()),
66         entity.getComponentId(), entity.getId()};
67   }
68
69   @Override
70   public Collection<ComputeEntity> listByVsp(String vspId, Version version) {
71     return accessor.listByVspId(vspId, versionMapper.toUDT(version)).all();
72   }
73
74   @Override
75   public void update(ComputeEntity entity) {
76     accessor.updateCompositionData(entity.getCompositionData(), entity.getVspId(), versionMapper
77             .toUDT(entity.getVersion()), entity.getComponentId(), entity.getId());
78   }
79
80   @Override
81   public void updateQuestionnaireData(String vspId, Version version, String componentId,
82                                       String computeId, String questionnaireData) {
83     accessor.updateQuestionnaireData(questionnaireData, vspId, versionMapper.toUDT(version),
84         componentId, computeId);
85   }
86
87   @Override
88   public void deleteAll(String vspId, Version version) {
89     accessor.deleteAll(vspId, version);
90   }
91
92   @Override
93   public ComputeEntity getQuestionnaireData(String vspId, Version version, String componentId,
94                                             String computeId) {
95     return null;
96   }
97
98   @Accessor
99   interface ComputeAccessor {
100
101     @Query("select * from vsp_component_compute where vsp_id=? and version=? and component_id=?")
102     Result<ComputeEntity> listByComponentId(String vspId, UDTValue version, String componentId);
103
104     @Query("select * from vsp_component_compute where vsp_id=? and version=?")
105     Result<ComputeEntity> listByVspId(String vspId, UDTValue version);
106
107     @Query("update vsp_component_compute set composition_data=? where vsp_id=? and version=?"
108         + " and component_id=? and compute_id=?")
109     ResultSet updateCompositionData(String compositionData, String vspId, UDTValue version,
110                                       String componentId, String computeId);
111
112     @Query("update vsp_component_compute set questionnaire_data=? where vsp_id=? and version=?"
113             + " and component_id=? and compute_id=?")
114     ResultSet updateQuestionnaireData(String questionnaireData, String vspId, UDTValue version,
115                                       String componentId, String computeId);
116
117     @Query("delete from vsp_component_compute where vsp_id=? and version=?")
118     ResultSet deleteAll(String vspId, Version version);
119   }
120 }