[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 / ImageDaoImpl.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.ImageDao;
15 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ImageEntity;
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 ImageDaoImpl extends CassandraBaseDao<ImageEntity> implements ImageDao {
26
27   private static final NoSqlDb noSqlDb = NoSqlDbFactory.getInstance().createInterface();
28   private static final Mapper<ImageEntity> mapper =
29       noSqlDb.getMappingManager().mapper(ImageEntity.class);
30   private static final ImageAccessor accessor =
31       noSqlDb.getMappingManager().createAccessor(ImageAccessor.class);
32   private static final UDTMapper<Version> versionMapper =
33       noSqlDb.getMappingManager().udtMapper(Version.class);
34
35   @Override
36   public void registerVersioning(String versionableEntityType) {
37
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.IMAGE_NAME,
46         Arrays.asList("vsp_id", "version", "component_id", "name"))));
47
48     VersioningManagerFactory.getInstance().createInterface()
49         .register(versionableEntityType, metadata);
50   }
51
52   @Override
53   protected Mapper<ImageEntity> getMapper() {
54     return mapper;
55   }
56
57   @Override
58   protected Object[] getKeys(ImageEntity entity) {
59     return new Object[]{entity.getVspId(),
60         versionMapper.toUDT(entity.getVersion()), entity.getComponentId(), entity.getId() };
61   }
62
63   @Override
64   public Collection<ImageEntity> list(ImageEntity entity) {
65     return accessor.list(entity.getVspId(), versionMapper.toUDT(entity.getVersion()),
66         entity.getComponentId()).all();
67   }
68
69   @Override
70   public void update(ImageEntity entity) {
71     accessor.updateCompositionData(entity.getVspId(), versionMapper.toUDT(entity.getVersion()),
72         entity.getComponentId(), entity.getId(), entity.getCompositionData());
73   }
74
75   @Override
76   public void updateQuestionnaireData(String vspId, Version version, String componentId,
77                                       String imageId, String questionnaireData) {
78     accessor.updateQuestionnaireData(questionnaireData, vspId, versionMapper.toUDT(version),
79         componentId, imageId);
80   }
81
82   @Override
83   public void delete(ImageEntity entity) {
84     super.delete(entity);
85   }
86
87   @Override
88   public void deleteByVspId(String vspId, Version version) {
89     accessor.deleteByVspId(vspId, versionMapper.toUDT(version));
90   }
91
92   @Override
93   public Collection<ImageEntity> listByVsp(String vspId, Version version) {
94     return accessor.listByVspId(vspId, versionMapper.toUDT(version)).all();
95   }
96
97   @Override
98   public ImageEntity getQuestionnaireData(String vspId, Version version, String componentId,
99                                           String computeId) {
100     return null;
101   }
102
103   @Accessor
104   interface ImageAccessor {
105
106     @Query("select vsp_id, version, component_id, image_id, composition_data from "
107         + "vsp_component_image where vsp_id=? and version=? and component_id=?")
108     Result<ImageEntity> list(String vspId, UDTValue version, String componentId);
109
110     @Query(
111         "insert into vsp_component_image (vsp_id, version, component_id, image_id, "
112             + "composition_data) values (?,?,?,?,?)")
113     ResultSet updateCompositionData(String vspId, UDTValue version, String componentId, String id,
114                                     String compositionData);
115
116     @Query("update vsp_component_image set questionnaire_data=? where vsp_id=? and version=?"
117         + " and component_id=? and image_id=?")
118     ResultSet updateQuestionnaireData(String questionnaireData, String vspId, UDTValue version,
119                                       String componentId, String computeId);
120
121     @Query("delete from vsp_component_image where vsp_id=? and version=?")
122     ResultSet deleteByVspId(String vspId, UDTValue version);
123
124     @Query("select * from vsp_component_image where vsp_id=? and version=?")
125     Result<ImageEntity> listByVspId(String vspId, UDTValue version);
126
127   }
128
129 }