[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 / zusammen / ComponentDependencyModelDaoZusammenImpl.java
1 package org.openecomp.sdc.vendorsoftwareproduct.dao.impl.zusammen;
2
3 import com.amdocs.zusammen.adaptor.inbound.api.types.item.Element;
4 import com.amdocs.zusammen.adaptor.inbound.api.types.item.ElementInfo;
5 import com.amdocs.zusammen.adaptor.inbound.api.types.item.ZusammenElement;
6 import com.amdocs.zusammen.datatypes.Id;
7 import com.amdocs.zusammen.datatypes.SessionContext;
8 import com.amdocs.zusammen.datatypes.item.Action;
9 import com.amdocs.zusammen.datatypes.item.ElementContext;
10 import com.amdocs.zusammen.datatypes.item.Info;
11 import org.openecomp.core.zusammen.api.ZusammenAdaptor;
12 import org.openecomp.core.zusammen.api.ZusammenUtil;
13 import org.openecomp.sdc.logging.api.Logger;
14 import org.openecomp.sdc.logging.api.LoggerFactory;
15 import org.openecomp.sdc.vendorsoftwareproduct.dao.ComponentDependencyModelDao;
16 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentDependencyModelEntity;
17 import org.openecomp.sdc.versioning.dao.types.Version;
18
19 import java.util.Collection;
20 import java.util.Optional;
21 import java.util.stream.Collectors;
22
23 /**
24  * Created by ayalaben on 5/16/2017.
25  */
26 public class ComponentDependencyModelDaoZusammenImpl implements ComponentDependencyModelDao {
27
28   private static final Logger logger =
29       LoggerFactory.getLogger(OrchestrationTemplateCandidateDaoZusammenImpl.class);
30
31   private ZusammenAdaptor zusammenAdaptor;
32
33   public ComponentDependencyModelDaoZusammenImpl(ZusammenAdaptor zusammenAdaptor) {
34     this.zusammenAdaptor = zusammenAdaptor;
35   }
36
37   @Override
38   public ComponentDependencyModelEntity get(ComponentDependencyModelEntity entity) {
39
40     SessionContext context = ZusammenUtil.createSessionContext();
41     Id itemId = new Id(entity.getVspId()); // entity.getId()?
42     ElementContext elementContext = new ElementContext(itemId,
43         VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor),
44         VspZusammenUtil.getVersionTag(entity.getVersion()));
45
46     Optional<ElementInfo> componentDependencyElement =
47         zusammenAdaptor.getElementInfo(context, elementContext, new Id(entity.getId()));
48
49     if (componentDependencyElement.isPresent()) {
50       addComponentDependencyData(entity, componentDependencyElement.get());
51       return entity;
52     }
53
54     return null;
55   }
56
57   @Override
58   public void create(ComponentDependencyModelEntity entity) {
59
60     ZusammenElement componentDependencies =
61         VspZusammenUtil.buildStructuralElement(StructureElement.ComponentDependencies, null);
62
63     ZusammenElement componentDependency = buildComponentDependencyElement(entity);
64     componentDependency.setAction(Action.CREATE);
65
66     Id itemId = new Id(entity.getVspId());
67     SessionContext context = ZusammenUtil.createSessionContext();
68     ElementContext elementContext = new ElementContext(itemId,
69         VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor));
70
71     Optional<Element> savedElement = zusammenAdaptor.saveElement(context, elementContext,
72         VspZusammenUtil.aggregateElements(componentDependencies, componentDependency),
73         "Create component dependency model");
74
75     savedElement.ifPresent(element ->
76         entity.setId(element.getSubElements().iterator().next().getElementId().getValue()));
77   }
78
79   @Override
80   public void update(ComponentDependencyModelEntity entity) {
81     ZusammenElement componentDependencyElement = buildComponentDependencyElement(entity);
82     componentDependencyElement.setAction(Action.UPDATE);
83
84     Id itemId = new Id(entity.getVspId());
85     SessionContext context = ZusammenUtil.createSessionContext();
86     ElementContext elementContext = new ElementContext(itemId,
87         VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor));
88
89     zusammenAdaptor.saveElement(context, elementContext,
90         componentDependencyElement,
91         String.format("Update component dependency model with id %s", entity.getId()));
92   }
93
94   @Override
95   public void delete(ComponentDependencyModelEntity entity) {
96     ZusammenElement componentDependencyElement = new ZusammenElement();
97     componentDependencyElement.setElementId(new Id(entity.getId()));
98     componentDependencyElement.setAction(Action.DELETE);
99
100     Id itemId = new Id(entity.getVspId());
101     SessionContext context = ZusammenUtil.createSessionContext();
102     ElementContext elementContext = new ElementContext(itemId,
103         VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor));
104
105
106     zusammenAdaptor.saveElement(context, elementContext,
107         componentDependencyElement,
108         String.format("Delete component dependency model with id %s", entity.getId()));
109   }
110
111   @Override
112   public void deleteAll(String vspId, Version version) {
113     ZusammenElement componentDependenciesElement =
114         VspZusammenUtil
115             .buildStructuralElement(StructureElement.ComponentDependencies, Action.DELETE);
116
117     SessionContext context = ZusammenUtil.createSessionContext();
118     Id itemId = new Id(vspId);
119     zusammenAdaptor.saveElement(context, new ElementContext(itemId,
120             VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor)),
121         componentDependenciesElement, "Delete all component dependencies");
122   }
123
124   @Override
125   public void registerVersioning(String versionableEntityType) {
126     //not implemented?
127   }
128
129   @Override
130   public Collection<ComponentDependencyModelEntity> list(ComponentDependencyModelEntity entity) {
131
132     Id itemId = new Id(entity.getVspId());
133     SessionContext context = ZusammenUtil.createSessionContext();
134     ElementContext elementContext = new ElementContext(itemId,
135         VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor),
136         VspZusammenUtil.getVersionTag(entity.getVersion()));
137
138     return zusammenAdaptor.listElementsByName(context, elementContext,
139         null, StructureElement.ComponentDependencies.name())
140         .stream().map(elementInfo -> mapElementInfoToComponentDependencyModel(entity.getVspId(),
141             entity.getVersion(), elementInfo))
142         .collect(Collectors.toList());
143   }
144
145   private static ComponentDependencyModelEntity mapElementInfoToComponentDependencyModel(
146       String vspId, Version version,
147       ElementInfo elementInfo) {
148     ComponentDependencyModelEntity componentDependencyModelEntity =
149         new ComponentDependencyModelEntity(vspId, version, elementInfo.getId().getValue());
150     componentDependencyModelEntity.setSourceComponentId(elementInfo.getInfo()
151         .getProperty(ComponentDependencyModelPropertyName.sourcecomponent_id.name()));
152     componentDependencyModelEntity.setTargetComponentId(elementInfo.getInfo()
153         .getProperty(ComponentDependencyModelPropertyName.targetcomponent_id.name()));
154     componentDependencyModelEntity.setRelation(elementInfo.getInfo()
155         .getProperty(ComponentDependencyModelPropertyName.relation.name()));
156
157     return componentDependencyModelEntity;
158   }
159
160
161   private ZusammenElement buildComponentDependencyElement(ComponentDependencyModelEntity entity) {
162     ZusammenElement componentDependencyElement = new ZusammenElement();
163
164     if (entity.getId() != null) {
165       componentDependencyElement.setElementId(new Id(entity.getId()));
166     }
167
168     Info info = new Info();
169     info.addProperty(ComponentDependencyModelPropertyName.id.name(), entity.getId());
170     info.addProperty(ComponentDependencyModelPropertyName.relation.name(), entity.getRelation());
171     info.addProperty(ComponentDependencyModelPropertyName.sourcecomponent_id.name(),
172         entity.getSourceComponentId());
173     info.addProperty(ComponentDependencyModelPropertyName.targetcomponent_id.name(),
174         entity.getTargetComponentId());
175
176     componentDependencyElement.setInfo(info);
177
178     return componentDependencyElement;
179   }
180
181   private void addComponentDependencyData(ComponentDependencyModelEntity componentDependency,
182                                           ElementInfo componentDependencyElement) {
183     componentDependency.setId(componentDependencyElement.getInfo()
184         .getProperty(ComponentDependencyModelPropertyName.id.name()));
185     componentDependency.setRelation(componentDependencyElement.getInfo()
186         .getProperty(ComponentDependencyModelPropertyName.id.name()));
187     componentDependency.setSourceComponentId(componentDependencyElement.getInfo()
188         .getProperty(ComponentDependencyModelPropertyName.sourcecomponent_id.name()));
189     componentDependency.setTargetComponentId(componentDependencyElement.getInfo()
190         .getProperty(ComponentDependencyModelPropertyName.targetcomponent_id.name()));
191   }
192
193
194   private enum ComponentDependencyModelPropertyName {
195     id,
196     relation,
197     sourcecomponent_id,
198     targetcomponent_id,
199   }
200
201 }