d98a67c72a028611917cd883c602875a473c1340
[sdc.git] /
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.sdc.datatypes.model.ElementType;
13 import org.openecomp.sdc.vendorsoftwareproduct.dao.ComponentDependencyModelDao;
14 import org.openecomp.sdc.vendorsoftwareproduct.dao.impl.zusammen.convertor.ElementToComponentDependencyModelConvertor;
15 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentDependencyModelEntity;
16 import org.openecomp.types.ElementPropertyName;
17
18 import java.util.ArrayList;
19 import java.util.Collection;
20 import java.util.Optional;
21 import java.util.stream.Collectors;
22
23 import static org.openecomp.core.zusammen.api.ZusammenUtil.buildElement;
24 import static org.openecomp.core.zusammen.api.ZusammenUtil.buildStructuralElement;
25 import static org.openecomp.core.zusammen.api.ZusammenUtil.createSessionContext;
26
27 /**
28  * Created by ayalaben on 5/16/2017.
29  */
30 public class ComponentDependencyModelDaoZusammenImpl implements ComponentDependencyModelDao {
31
32   private ZusammenAdaptor zusammenAdaptor;
33
34   public ComponentDependencyModelDaoZusammenImpl(ZusammenAdaptor zusammenAdaptor) {
35     this.zusammenAdaptor = zusammenAdaptor;
36   }
37
38   @Override
39   public ComponentDependencyModelEntity get(ComponentDependencyModelEntity dependency) {
40
41     SessionContext context = createSessionContext();
42     ElementContext elementContext =
43         new ElementContext(dependency.getVspId(), dependency.getVersion().getId());
44
45     Optional<ElementInfo> componentDependencyElement =
46         zusammenAdaptor.getElementInfo(context, elementContext, new Id(dependency.getId()));
47
48     if (componentDependencyElement.isPresent()) {
49       ElementToComponentDependencyModelConvertor convertor = new
50           ElementToComponentDependencyModelConvertor();
51
52       ComponentDependencyModelEntity entity = convertor.convert(componentDependencyElement.get());
53       entity.setVspId(dependency.getVspId());
54       entity.setVersion(dependency.getVersion());
55       return entity;
56     }
57
58     return null;
59   }
60
61   @Override
62   public void create(ComponentDependencyModelEntity dependency) {
63     ZusammenElement componentDependency =
64         buildComponentDependencyElement(dependency, Action.CREATE);
65
66     ZusammenElement componentDependencies =
67         buildStructuralElement(ElementType.ComponentDependencies, Action.IGNORE);
68     componentDependencies.addSubElement(componentDependency);
69
70     ZusammenElement vspModel = buildStructuralElement(ElementType.VspModel, Action.IGNORE);
71     vspModel.addSubElement(componentDependencies);
72
73     SessionContext context = createSessionContext();
74     ElementContext elementContext =
75         new ElementContext(dependency.getVspId(), dependency.getVersion().getId());
76
77     Element compDepsSavedElement = zusammenAdaptor
78         .saveElement(context, elementContext, vspModel, "Create component dependency model");
79
80     dependency.setId(compDepsSavedElement.getSubElements().iterator().next()
81         .getSubElements().iterator().next().getElementId().getValue());
82   }
83
84   @Override
85   public void update(ComponentDependencyModelEntity dependency) {
86     ZusammenElement componentDependencyElement =
87         buildComponentDependencyElement(dependency, Action.UPDATE);
88
89     SessionContext context = createSessionContext();
90     ElementContext elementContext =
91         new ElementContext(dependency.getVspId(), dependency.getVersion().getId());
92
93     zusammenAdaptor.saveElement(context, elementContext, componentDependencyElement,
94         String.format("Update component dependency model with id %s", dependency.getId()));
95   }
96
97   @Override
98   public void delete(ComponentDependencyModelEntity dependency) {
99     ZusammenElement componentDependencyElement =
100         buildElement(new Id(dependency.getId()), Action.DELETE);
101
102     SessionContext context = createSessionContext();
103     ElementContext elementContext =
104         new ElementContext(dependency.getVspId(), dependency.getVersion().getId());
105
106     zusammenAdaptor.saveElement(context, elementContext, componentDependencyElement,
107         String.format("Delete component dependency model with id %s", dependency.getId()));
108   }
109
110   @Override
111   public void registerVersioning(String versionableEntityType) {
112     //not implemented?
113   }
114
115   @Override
116   public Collection<ComponentDependencyModelEntity> list(
117       ComponentDependencyModelEntity dependency) {
118     SessionContext context = createSessionContext();
119     ElementContext elementContext =
120         new ElementContext(dependency.getVspId(), dependency.getVersion().getId());
121
122     Optional<ElementInfo> vspModel = zusammenAdaptor
123         .getElementInfoByName(context, elementContext, null, ElementType.VspModel.name());
124     if (!vspModel.isPresent()) {
125       return new ArrayList<>();
126     }
127
128     ElementToComponentDependencyModelConvertor convertor =
129         new ElementToComponentDependencyModelConvertor();
130     return zusammenAdaptor.listElementsByName(context, elementContext, vspModel.get().getId(),
131         ElementType.ComponentDependencies.name()).stream()
132         .map(elementInfo -> {
133           ComponentDependencyModelEntity entity = convertor.convert(elementInfo);
134           entity.setVspId(dependency.getVspId());
135           entity.setVersion(dependency.getVersion());
136           entity.setId(elementInfo.getId().getValue());
137           return entity;
138         })
139         .collect(Collectors.toList());
140   }
141
142   private ZusammenElement buildComponentDependencyElement(ComponentDependencyModelEntity compDep,
143                                                           Action action) {
144     ZusammenElement componentDependencyElement =
145         buildElement(compDep.getId() == null ? null : new Id(compDep.getId()), action);
146
147     Info info = new Info();
148     info.addProperty(ElementPropertyName.elementType.name(), ElementType.ComponentDependency);
149     info.addProperty(ComponentDependencyModelPropertyName.RELATION.getVal(), compDep.getRelation());
150     info.addProperty(ComponentDependencyModelPropertyName.SOURCE_COMPONENT_ID.getVal(),
151         compDep.getSourceComponentId());
152     info.addProperty(ComponentDependencyModelPropertyName.TARGET_COMPONENT_ID.getVal(),
153         compDep.getTargetComponentId());
154
155     componentDependencyElement.setInfo(info);
156
157     return componentDependencyElement;
158   }
159
160   private enum ComponentDependencyModelPropertyName {
161     ID("id"),
162     RELATION("relation"),
163     SOURCE_COMPONENT_ID("sourcecomponent_id"),
164     TARGET_COMPONENT_ID("targetcomponent_id");
165
166     private String val;
167
168     ComponentDependencyModelPropertyName(String val){
169       this.val=val;
170     }
171
172     public String getVal() {
173       return val;
174     }
175   }
176 }