Add collaboration feature
[sdc.git] / openecomp-be / lib / openecomp-core-lib / openecomp-zusammen-lib / openecomp-zusammen-plugin / src / main / java / org / openecomp / core / zusammen / plugin / ZusammenPluginUtil.java
1 /*
2  * Copyright © 2016-2017 European Support Limited
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 package org.openecomp.core.zusammen.plugin;
18
19 import com.amdocs.zusammen.datatypes.Id;
20 import com.amdocs.zusammen.datatypes.SessionContext;
21 import com.amdocs.zusammen.datatypes.Space;
22 import com.amdocs.zusammen.datatypes.item.Action;
23 import com.amdocs.zusammen.datatypes.item.ElementContext;
24 import com.amdocs.zusammen.datatypes.item.ItemVersion;
25 import com.amdocs.zusammen.datatypes.item.ItemVersionChange;
26 import com.amdocs.zusammen.datatypes.item.ItemVersionData;
27 import com.amdocs.zusammen.datatypes.item.ItemVersionDataConflict;
28 import com.amdocs.zusammen.sdk.collaboration.types.CollaborationElement;
29 import com.amdocs.zusammen.sdk.collaboration.types.CollaborationElementChange;
30 import com.amdocs.zusammen.sdk.collaboration.types.CollaborationElementConflict;
31 import com.amdocs.zusammen.sdk.state.types.StateElement;
32 import com.amdocs.zusammen.sdk.types.ElementDescriptor;
33 import com.amdocs.zusammen.utils.fileutils.FileUtils;
34 import com.amdocs.zusammen.utils.fileutils.json.JsonUtil;
35 import org.openecomp.core.zusammen.plugin.dao.types.ElementEntity;
36 import org.openecomp.core.zusammen.plugin.dao.types.VersionEntity;
37
38 import java.io.ByteArrayInputStream;
39 import java.nio.ByteBuffer;
40 import java.security.MessageDigest;
41 import java.security.NoSuchAlgorithmException;
42 import java.util.Base64;
43 import java.util.Date;
44
45 import static org.openecomp.core.zusammen.plugin.ZusammenPluginConstants.ROOT_ELEMENTS_PARENT_ID;
46
47 public class ZusammenPluginUtil {
48
49   public static String getSpaceName(SessionContext context, Space space) {
50     switch (space) {
51       case PUBLIC:
52         return ZusammenPluginConstants.PUBLIC_SPACE;
53       case PRIVATE:
54         return getPrivateSpaceName(context);
55       default:
56         throw new IllegalArgumentException(String.format("Space %s is not supported.", space));
57     }
58   }
59
60   public static String getPrivateSpaceName(SessionContext context) {
61     return context.getUser().getUserName();
62   }
63
64   public static ElementContext getPrivateElementContext(ElementContext elementContext) {
65     return new ElementContext(elementContext.getItemId(),elementContext.getVersionId(),Id.ZERO);
66   }
67
68
69   public static VersionEntity convertToVersionEntity(Id versionId, Id baseVersionId,
70                                                      Date creationTime,
71                                                      Date modificationTime) {
72
73     return convertToVersionEntity(versionId, null, baseVersionId,
74         creationTime, modificationTime);
75   }
76
77   public static VersionEntity convertToVersionEntity(Id versionId, Id revisionId, Id baseVersionId,
78                                                      Date creationTime,
79                                                      Date modificationTime) {
80     VersionEntity version = new VersionEntity(versionId);
81     version.setBaseId(baseVersionId);
82     version.setCreationTime(creationTime);
83     version.setModificationTime(modificationTime);
84     return version;
85   }
86
87   public static ItemVersion convertToItemVersion(VersionEntity versionEntity,
88                                                  ItemVersionData itemVersionData) {
89     ItemVersion itemVersion = new ItemVersion();
90     itemVersion.setId(versionEntity.getId());
91
92     itemVersion.setBaseId(versionEntity.getBaseId());
93     itemVersion.setCreationTime(versionEntity.getCreationTime());
94     itemVersion.setModificationTime(versionEntity.getModificationTime());
95     itemVersion.setData(itemVersionData);
96     return itemVersion;
97   }
98
99   public static ElementEntity convertToElementEntity(CollaborationElement element) {
100
101     ElementEntity elementEntity = new ElementEntity(element.getId());
102     elementEntity.setNamespace(element.getNamespace());
103     elementEntity.setParentId(element.getParentId() == null
104         ? ROOT_ELEMENTS_PARENT_ID
105         : element.getParentId());
106
107
108     elementEntity.setInfo(element.getInfo());
109
110     elementEntity.setRelations(element.getRelations());
111
112     if (element.getData() != null) {
113       elementEntity.setData(ByteBuffer.wrap(FileUtils.toByteArray(element.getData())));
114     }
115     if (element.getSearchableData() != null) {
116       elementEntity.setSearchableData(
117           ByteBuffer.wrap(FileUtils.toByteArray(element.getSearchableData())));
118     }
119     if (element.getVisualization() != null) {
120       elementEntity.setVisualization(
121           ByteBuffer.wrap(FileUtils.toByteArray(element.getVisualization())));
122     }
123     elementEntity.setElementHash(new Id(calculateElementHash(elementEntity)));
124
125     return elementEntity;
126   }
127
128   public static ElementDescriptor convertToElementDescriptor(
129       ElementContext elementContext, ElementEntity elementEntity) {
130     if (elementEntity == null) {
131       return null;
132     }
133     ElementDescriptor element = new ElementDescriptor(elementContext.getItemId(),
134         elementContext.getVersionId(), elementEntity.getNamespace(), elementEntity.getId());
135
136     mapElementEntityToDescriptor(elementEntity, element);
137     return element;
138   }
139
140   public static CollaborationElement convertToCollaborationElement(
141       ElementContext elementContext, ElementEntity elementEntity) {
142     CollaborationElement element = new CollaborationElement(elementContext.getItemId(),
143         elementContext.getVersionId(), elementEntity.getNamespace(), elementEntity.getId());
144
145     mapElementEntityToDescriptor(elementEntity, element);
146
147     if (elementEntity.getData() != null) {
148       element.setData(new ByteArrayInputStream(elementEntity.getData().array()));
149     }
150     if (elementEntity.getSearchableData() != null) {
151       element.setSearchableData(
152           new ByteArrayInputStream(elementEntity.getSearchableData().array()));
153     }
154     if (elementEntity.getVisualization() != null) {
155       element.setVisualization(new ByteArrayInputStream(elementEntity.getVisualization().array()));
156     }
157     return element;
158   }
159
160   public static CollaborationElementChange convertToElementChange(
161       ElementContext changedElementContext, ElementEntity changedElement, Action action) {
162     CollaborationElementChange elementChange = new CollaborationElementChange();
163     elementChange.setElement(convertToCollaborationElement(changedElementContext, changedElement));
164     elementChange.setAction(action);
165     return elementChange;
166   }
167
168   public static ItemVersionChange convertToVersionChange(ElementContext elementContext,
169                                                          ElementEntity versionDataElement,
170                                                          Action action) {
171     ItemVersionChange versionChange = new ItemVersionChange();
172
173     ItemVersion itemVersion = new ItemVersion();
174     itemVersion.setId(elementContext.getVersionId());
175
176     itemVersion.setData(convertToVersionData(versionDataElement));
177
178     versionChange.setItemVersion(itemVersion);
179     versionChange.setAction(action);
180     return versionChange;
181   }
182
183   public static ItemVersionDataConflict getVersionConflict(ElementEntity localVesionData,
184                                                            ElementEntity remoteVersionData) {
185     ItemVersionDataConflict versionConflict = new ItemVersionDataConflict();
186     versionConflict.setLocalData(convertToVersionData(localVesionData));
187     versionConflict.setRemoteData(convertToVersionData(remoteVersionData));
188     return versionConflict;
189   }
190
191   public static CollaborationElementConflict getElementConflict(ElementContext elementContext,
192                                                                 ElementEntity localElement,
193                                                                 ElementEntity remoteElement) {
194     CollaborationElementConflict elementConflict = new CollaborationElementConflict();
195     elementConflict
196         .setLocalElement(convertToCollaborationElement(elementContext, localElement));
197     elementConflict.setRemoteElement(
198         convertToCollaborationElement(elementContext, remoteElement));
199     return elementConflict;
200   }
201
202   public static ItemVersionData convertToVersionData(ElementEntity versionDataElement) {
203     ItemVersionData versionData = new ItemVersionData();
204     versionData.setInfo(versionDataElement.getInfo());
205     versionData.setRelations(versionDataElement.getRelations());
206     return versionData;
207   }
208
209   private static void mapElementEntityToDescriptor(ElementEntity elementEntity,
210                                                    ElementDescriptor elementDescriptor) {
211     Id parentId = ROOT_ELEMENTS_PARENT_ID.equals(elementEntity.getParentId())
212         ? null
213         : elementEntity.getParentId();
214
215     elementDescriptor.setParentId(parentId);
216     elementDescriptor.setInfo(elementEntity.getInfo());
217     elementDescriptor.setRelations(elementEntity.getRelations());
218     elementDescriptor.setSubElements(elementEntity.getSubElementIds());
219   }
220
221   public static String calculateElementHash(ElementEntity elementEntity) {
222     StringBuffer elementHash = new StringBuffer();
223     if (elementEntity.getData() != null) {
224       elementHash.append(calculateSHA1(elementEntity.getData().array()));
225     } else {
226       elementHash.append("0");
227     }
228     elementHash.append("_");
229     if (elementEntity.getVisualization() != null) {
230       elementHash.append(calculateSHA1(elementEntity.getVisualization().array()));
231     } else {
232       elementHash.append("0");
233     }
234     elementHash.append("_");
235
236     if (elementEntity.getSearchableData() != null) {
237       elementHash.append(calculateSHA1(elementEntity.getSearchableData().array()));
238     } else {
239       elementHash.append("0");
240     }
241     elementHash.append("_");
242
243     if (elementEntity.getInfo() != null) {
244       elementHash.append(calculateSHA1(JsonUtil.object2Json(elementEntity.getInfo()).getBytes()));
245     } else {
246       elementHash.append("0");
247     }
248     elementHash.append("_");
249
250     if (elementEntity.getRelations() != null) {
251       elementHash
252           .append(calculateSHA1(JsonUtil.object2Json(elementEntity.getRelations()).getBytes()));
253     } else {
254       elementHash.append("0");
255     }
256
257     return elementHash.toString();
258   }
259
260   private static String calculateSHA1(byte[] content2Convert) {
261     MessageDigest md = null;
262     try {
263       md = MessageDigest.getInstance("SHA-1");
264     } catch (NoSuchAlgorithmException e) {
265       throw new RuntimeException(e);
266     }
267     return Base64.getEncoder().encodeToString(md.digest(content2Convert));
268   }
269
270
271   public static StateElement getStateElement(ElementContext elementContext, ElementEntity
272       elementEntity) {
273     Id parentId = ROOT_ELEMENTS_PARENT_ID.equals(elementEntity.getParentId())
274         ? null
275         : elementEntity.getParentId();
276     StateElement element = new StateElement(elementContext.getItemId(),
277         elementContext.getVersionId(), elementEntity.getNamespace(), elementEntity.getId());
278
279     element.setParentId(parentId);
280     element.setInfo(elementEntity.getInfo());
281     element.setRelations(elementEntity.getRelations());
282     element.setSubElements(elementEntity.getSubElementIds());
283     return element;
284   }
285
286
287 }