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());