b49433ccd52ba59b12983aefbd8fd725cad98bcb
[sdc/sdc-workflow-designer.git] / workflow-designer-be / src / main / java / org / onap / sdc / workflow / persistence / impl / ArtifactRepositoryImpl.java
1 /*
2  * Copyright © 2018 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.onap.sdc.workflow.persistence.impl;
18
19 import static org.openecomp.core.zusammen.api.ZusammenUtil.buildStructuralElement;
20 import static org.openecomp.core.zusammen.api.ZusammenUtil.createSessionContext;
21
22 import com.amdocs.zusammen.adaptor.inbound.api.types.item.Element;
23 import com.amdocs.zusammen.adaptor.inbound.api.types.item.ElementInfo;
24 import com.amdocs.zusammen.adaptor.inbound.api.types.item.ZusammenElement;
25 import com.amdocs.zusammen.datatypes.SessionContext;
26 import com.amdocs.zusammen.datatypes.item.Action;
27 import com.amdocs.zusammen.datatypes.item.ElementContext;
28 import java.io.ByteArrayInputStream;
29 import java.io.IOException;
30 import java.io.InputStream;
31 import java.util.Arrays;
32 import java.util.Optional;
33 import org.apache.commons.io.IOUtils;
34 import org.onap.sdc.workflow.persistence.ArtifactRepository;
35 import org.onap.sdc.workflow.persistence.types.ArtifactEntity;
36 import org.onap.sdc.workflow.persistence.types.WorkflowElementType;
37 import org.openecomp.core.zusammen.api.ZusammenAdaptor;
38 import org.openecomp.core.zusammen.api.ZusammenAdaptorFactory;
39 import org.springframework.stereotype.Repository;
40
41 @Repository
42 public class ArtifactRepositoryImpl implements ArtifactRepository {
43
44     private static final String FILE_NAME_PROPERTY = "fileName";
45     private static final String EMPTY_DATA = "{}";
46     private ZusammenAdaptor zusammenAdaptor = ZusammenAdaptorFactory.getInstance().createInterface();
47
48
49     @Override
50     public void update(String workflowId, String versionId, ArtifactEntity artifactEntity) {
51
52         ZusammenElement artifactElement = buildStructuralElement(WorkflowElementType.ARTIFACT.name(), Action.UPDATE);
53         artifactElement.setData(artifactEntity.getArtifactData());
54         artifactElement.getInfo().addProperty(FILE_NAME_PROPERTY, artifactEntity.getFileName());
55
56         SessionContext context = createSessionContext();
57         ElementContext elementContext = new ElementContext(workflowId, versionId);
58
59         zusammenAdaptor
60                 .saveElement(context, elementContext, artifactElement, "Update WorkflowVersion Artifact Element");
61     }
62
63     @Override
64     public Optional<ArtifactEntity> get(String workflowId, String versionId) {
65         SessionContext context = createSessionContext();
66         ElementContext elementContext = new ElementContext(workflowId, versionId);
67
68         Optional<Element> elementOptional =
69                 zusammenAdaptor.getElementByName(context, elementContext, null, WorkflowElementType.ARTIFACT.name());
70
71         if (!elementOptional.isPresent() || hasEmptyData(elementOptional.get().getData())) {
72             return Optional.empty();
73         }
74
75         Element artifactElement = elementOptional.get();
76
77         ArtifactEntity artifact = new ArtifactEntity(artifactElement.getInfo().getProperty(FILE_NAME_PROPERTY),
78                 artifactElement.getData());
79
80         return Optional.of(artifact);
81     }
82
83     @Override
84     public boolean isExist(String workflowId, String versionId) {
85         SessionContext context = createSessionContext();
86         ElementContext elementContext = new ElementContext(workflowId, versionId);
87
88         Optional<ElementInfo> optionalElementInfo = zusammenAdaptor.getElementInfoByName(context, elementContext, null,
89                 WorkflowElementType.ARTIFACT.name());
90         return optionalElementInfo.isPresent() && optionalElementInfo.get().getInfo().getProperties()
91                                                                      .containsKey(FILE_NAME_PROPERTY);
92     }
93
94     @Override
95     public void createStructure(String workflowId, String versionId) {
96         SessionContext context = createSessionContext();
97         ElementContext elementContext = new ElementContext(workflowId, versionId);
98
99         ZusammenElement artifactElement = buildStructuralElement(WorkflowElementType.ARTIFACT.name(), Action.CREATE);
100         artifactElement.setData(new ByteArrayInputStream(EMPTY_DATA.getBytes()));
101
102         zusammenAdaptor
103                 .saveElement(context, elementContext, artifactElement, "Create WorkflowVersion Artifact Element");
104
105     }
106
107     @Override
108     public void delete(String workflowId, String versionId) {
109         SessionContext context = createSessionContext();
110         ElementContext elementContext = new ElementContext(workflowId, versionId);
111
112         ZusammenElement artifactElement = buildStructuralElement(WorkflowElementType.ARTIFACT.name(), Action.UPDATE);
113         artifactElement.setData(new ByteArrayInputStream(EMPTY_DATA.getBytes()));
114         artifactElement.getInfo().getProperties().remove(FILE_NAME_PROPERTY);
115
116         zusammenAdaptor
117                 .saveElement(context, elementContext, artifactElement, "Delete WorkflowVersion Artifact Data");
118
119     }
120
121     private boolean hasEmptyData(InputStream elementData) {
122
123         byte[] byteElementData;
124         try {
125             byteElementData = IOUtils.toByteArray(elementData);
126         } catch (IOException ex) {
127             return false;
128         }
129         return Arrays.equals(EMPTY_DATA.getBytes(), byteElementData);
130     }
131 }