2 * Copyright © 2016-2018 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.sdc.be.tosca.utils;
19 import org.apache.commons.collections.MapUtils;
20 import org.apache.commons.lang.WordUtils;
21 import org.openecomp.sdc.be.datatypes.components.ResourceMetadataDataDefinition;
22 import org.openecomp.sdc.be.datatypes.elements.ArtifactDataDefinition;
23 import org.openecomp.sdc.be.datatypes.elements.OperationDataDefinition;
24 import org.openecomp.sdc.be.model.ArtifactDefinition;
25 import org.openecomp.sdc.be.model.Component;
26 import org.openecomp.sdc.be.model.ComponentInstance;
27 import org.openecomp.sdc.be.model.InterfaceDefinition;
28 import org.openecomp.sdc.be.model.Operation;
29 import org.openecomp.sdc.be.model.Resource;
30 import org.openecomp.sdc.be.model.Service;
31 import org.openecomp.sdc.be.tosca.CsarUtils;
32 import org.openecomp.sdc.common.api.ArtifactGroupTypeEnum;
33 import org.openecomp.sdc.common.api.ArtifactTypeEnum;
36 import java.util.HashMap;
37 import java.util.HashSet;
39 import java.util.Objects;
41 import java.util.stream.Collectors;
43 public class OperationArtifactUtil {
45 public static final String BPMN_ARTIFACT_PATH = "BPMN";
47 private OperationArtifactUtil() {
48 //Hiding implicit public constructor
52 * This method assumes that operation.getImplementation() is not NULL ( it should be verified by the caller method)
54 * @param operation the specific operation name
55 * @return the full path including file name for operation's artifacts
57 public static String createOperationArtifactPath(Component component, ComponentInstance componentInstance,
58 OperationDataDefinition operation, boolean isAssociatedComponent) {
59 if (!(component instanceof Resource || component instanceof Service)) {
63 if (isAssociatedComponent) {
64 // Service Proxy is only in Node Template interface
65 if(componentInstance != null) {
66 return createOperationArtifactPathInService(componentInstance.getToscaComponentName()
67 + "_v" + componentInstance.getComponentVersion(), operation);
69 // Resource Instance is part of Node Type interface
71 ResourceMetadataDataDefinition resourceMetadataDataDefinition =
72 (ResourceMetadataDataDefinition) component.getComponentMetadataDefinition().getMetadataDataDefinition();
73 return createOperationArtifactPathInService(resourceMetadataDataDefinition.getToscaResourceName()
74 + "_v" + component.getVersion(), operation);
77 return createOperationArtifactPathInComponent(operation);
81 private static String createOperationArtifactPathInComponent(OperationDataDefinition operation) {
82 return CsarUtils.ARTIFACTS + File.separator + WordUtils.capitalizeFully(ArtifactGroupTypeEnum.DEPLOYMENT.name())
83 + File.separator + ArtifactTypeEnum.WORKFLOW.name() + File.separator + BPMN_ARTIFACT_PATH
84 + File.separator + operation.getImplementation().getArtifactName();
87 private static String createOperationArtifactPathInService(String toscaComponentName,
88 OperationDataDefinition operation) {
89 return CsarUtils.ARTIFACTS + File.separator + toscaComponentName + File.separator +
90 WordUtils.capitalizeFully(ArtifactGroupTypeEnum.DEPLOYMENT.name()) + File.separator +
91 ArtifactTypeEnum.WORKFLOW.name() + File.separator + BPMN_ARTIFACT_PATH + File.separator +
92 operation.getImplementation().getArtifactName();
95 public static Map<String, ArtifactDefinition> getDistinctInterfaceOperationArtifactsByName(Component originComponent) {
96 Map<String, ArtifactDefinition> distinctInterfaceArtifactsByName = new HashMap<>();
97 Map<String, InterfaceDefinition> interfaces = originComponent.getInterfaces();
98 if (MapUtils.isEmpty(interfaces)) {
99 return distinctInterfaceArtifactsByName;
101 Map<String, ArtifactDefinition> interfaceArtifacts = interfaces.values().stream()
102 .flatMap(interfaceDefinition -> interfaceDefinition.getOperationsMap().values().stream())
103 .map(Operation::getImplementationArtifact).filter(Objects::nonNull)
104 .collect(Collectors.toMap(ArtifactDataDefinition::getUniqueId,
105 artifactDefinition -> artifactDefinition, (a1, a2) -> a1));
106 if (MapUtils.isNotEmpty(interfaceArtifacts)) {
107 Set<String> artifactNameSet = new HashSet<>();
108 for (Map.Entry<String, ArtifactDefinition> interfaceArtifactEntry : interfaceArtifacts.entrySet()) {
109 String artifactName = interfaceArtifactEntry.getValue().getArtifactName();
110 if (artifactNameSet.contains(artifactName)) {
113 distinctInterfaceArtifactsByName.put(interfaceArtifactEntry.getKey(),
114 interfaceArtifactEntry.getValue());
115 artifactNameSet.add(artifactName);
119 return distinctInterfaceArtifactsByName;