2 * Copyright © 2016-2017 European Support Limited
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 package org.openecomp.core.zusammen.plugin;
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;
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;
45 import static org.openecomp.core.zusammen.plugin.ZusammenPluginConstants.ROOT_ELEMENTS_PARENT_ID;
47 public class ZusammenPluginUtil {
49 public static String getSpaceName(SessionContext context, Space space) {
52 return ZusammenPluginConstants.PUBLIC_SPACE;
54 return getPrivateSpaceName(context);
56 throw new IllegalArgumentException(String.format("Space %s is not supported.", space));
60 public static String getPrivateSpaceName(SessionContext context) {
61 return context.getUser().getUserName();
64 public static ElementContext getPrivateElementContext(ElementContext elementContext) {
65 return new ElementContext(elementContext.getItemId(),elementContext.getVersionId(),Id.ZERO);
69 public static VersionEntity convertToVersionEntity(Id versionId, Id baseVersionId,
71 Date modificationTime) {
73 return convertToVersionEntity(versionId, null, baseVersionId,
74 creationTime, modificationTime);
77 public static VersionEntity convertToVersionEntity(Id versionId, Id revisionId, Id baseVersionId,
79 Date modificationTime) {
80 VersionEntity version = new VersionEntity(versionId);
81 version.setBaseId(baseVersionId);
82 version.setCreationTime(creationTime);
83 version.setModificationTime(modificationTime);
87 public static ItemVersion convertToItemVersion(VersionEntity versionEntity,
88 ItemVersionData itemVersionData) {
89 ItemVersion itemVersion = new ItemVersion();
90 itemVersion.setId(versionEntity.getId());
92 itemVersion.setBaseId(versionEntity.getBaseId());
93 itemVersion.setCreationTime(versionEntity.getCreationTime());
94 itemVersion.setModificationTime(versionEntity.getModificationTime());
95 itemVersion.setData(itemVersionData);
99 public static ElementEntity convertToElementEntity(CollaborationElement element) {
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());
108 elementEntity.setInfo(element.getInfo());
110 elementEntity.setRelations(element.getRelations());
112 if (element.getData() != null) {
113 elementEntity.setData(ByteBuffer.wrap(FileUtils.toByteArray(element.getData())));
115 if (element.getSearchableData() != null) {
116 elementEntity.setSearchableData(
117 ByteBuffer.wrap(FileUtils.toByteArray(element.getSearchableData())));
119 if (element.getVisualization() != null) {
120 elementEntity.setVisualization(
121 ByteBuffer.wrap(FileUtils.toByteArray(element.getVisualization())));
123 elementEntity.setElementHash(new Id(calculateElementHash(elementEntity)));
125 return elementEntity;
128 public static ElementDescriptor convertToElementDescriptor(
129 ElementContext elementContext, ElementEntity elementEntity) {
130 if (elementEntity == null) {
133 ElementDescriptor element = new ElementDescriptor(elementContext.getItemId(),
134 elementContext.getVersionId(), elementEntity.getNamespace(), elementEntity.getId());
136 mapElementEntityToDescriptor(elementEntity, element);
140 public static CollaborationElement convertToCollaborationElement(
141 ElementContext elementContext, ElementEntity elementEntity) {
142 CollaborationElement element = new CollaborationElement(elementContext.getItemId(),
143 elementContext.getVersionId(), elementEntity.getNamespace(), elementEntity.getId());
145 mapElementEntityToDescriptor(elementEntity, element);
147 if (elementEntity.getData() != null) {
148 element.setData(new ByteArrayInputStream(elementEntity.getData().array()));
150 if (elementEntity.getSearchableData() != null) {
151 element.setSearchableData(
152 new ByteArrayInputStream(elementEntity.getSearchableData().array()));
154 if (elementEntity.getVisualization() != null) {
155 element.setVisualization(new ByteArrayInputStream(elementEntity.getVisualization().array()));
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;
168 public static ItemVersionChange convertToVersionChange(ElementContext elementContext,
169 ElementEntity versionDataElement,
171 ItemVersionChange versionChange = new ItemVersionChange();
173 ItemVersion itemVersion = new ItemVersion();
174 itemVersion.setId(elementContext.getVersionId());
176 itemVersion.setData(convertToVersionData(versionDataElement));
178 versionChange.setItemVersion(itemVersion);
179 versionChange.setAction(action);
180 return versionChange;
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;
191 public static CollaborationElementConflict getElementConflict(ElementContext elementContext,
192 ElementEntity localElement,
193 ElementEntity remoteElement) {
194 CollaborationElementConflict elementConflict = new CollaborationElementConflict();
196 .setLocalElement(convertToCollaborationElement(elementContext, localElement));
197 elementConflict.setRemoteElement(
198 convertToCollaborationElement(elementContext, remoteElement));
199 return elementConflict;
202 public static ItemVersionData convertToVersionData(ElementEntity versionDataElement) {
203 ItemVersionData versionData = new ItemVersionData();
204 versionData.setInfo(versionDataElement.getInfo());
205 versionData.setRelations(versionDataElement.getRelations());
209 private static void mapElementEntityToDescriptor(ElementEntity elementEntity,
210 ElementDescriptor elementDescriptor) {
211 Id parentId = ROOT_ELEMENTS_PARENT_ID.equals(elementEntity.getParentId())
213 : elementEntity.getParentId();
215 elementDescriptor.setParentId(parentId);
216 elementDescriptor.setInfo(elementEntity.getInfo());
217 elementDescriptor.setRelations(elementEntity.getRelations());
218 elementDescriptor.setSubElements(elementEntity.getSubElementIds());
221 public static String calculateElementHash(ElementEntity elementEntity) {
222 StringBuffer elementHash = new StringBuffer();
223 if (elementEntity.getData() != null) {
224 elementHash.append(calculateSHA1(elementEntity.getData().array()));
226 elementHash.append("0");
228 elementHash.append("_");
229 if (elementEntity.getVisualization() != null) {
230 elementHash.append(calculateSHA1(elementEntity.getVisualization().array()));
232 elementHash.append("0");
234 elementHash.append("_");
236 if (elementEntity.getSearchableData() != null) {
237 elementHash.append(calculateSHA1(elementEntity.getSearchableData().array()));
239 elementHash.append("0");
241 elementHash.append("_");
243 if (elementEntity.getInfo() != null) {
244 elementHash.append(calculateSHA1(JsonUtil.object2Json(elementEntity.getInfo()).getBytes()));
246 elementHash.append("0");
248 elementHash.append("_");
250 if (elementEntity.getRelations() != null) {
252 .append(calculateSHA1(JsonUtil.object2Json(elementEntity.getRelations()).getBytes()));
254 elementHash.append("0");
257 return elementHash.toString();
260 private static String calculateSHA1(byte[] content2Convert) {
261 MessageDigest md = null;
263 md = MessageDigest.getInstance("SHA-1");
264 } catch (NoSuchAlgorithmException e) {
265 throw new RuntimeException(e);
267 return Base64.getEncoder().encodeToString(md.digest(content2Convert));
271 public static StateElement getStateElement(ElementContext elementContext, ElementEntity
273 Id parentId = ROOT_ELEMENTS_PARENT_ID.equals(elementEntity.getParentId())
275 : elementEntity.getParentId();
276 StateElement element = new StateElement(elementContext.getItemId(),
277 elementContext.getVersionId(), elementEntity.getNamespace(), elementEntity.getId());
279 element.setParentId(parentId);
280 element.setInfo(elementEntity.getInfo());
281 element.setRelations(elementEntity.getRelations());
282 element.setSubElements(elementEntity.getSubElementIds());