diff options
Diffstat (limited to 'catalog-be/src/main/java/org/openecomp/sdc/be/tosca/utils/ForwardingPathToscaUtil.java')
-rw-r--r-- | catalog-be/src/main/java/org/openecomp/sdc/be/tosca/utils/ForwardingPathToscaUtil.java | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/utils/ForwardingPathToscaUtil.java b/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/utils/ForwardingPathToscaUtil.java new file mode 100644 index 0000000000..c4905d005e --- /dev/null +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/utils/ForwardingPathToscaUtil.java @@ -0,0 +1,124 @@ +package org.openecomp.sdc.be.tosca.utils; + +import fj.data.Either; +import org.apache.commons.collections.MapUtils; +import org.openecomp.sdc.be.datatypes.elements.ForwardingPathDataDefinition; +import org.openecomp.sdc.be.datatypes.elements.ForwardingPathElementDataDefinition; +import org.openecomp.sdc.be.model.CapabilityDefinition; +import org.openecomp.sdc.be.model.Component; +import org.openecomp.sdc.be.model.ComponentInstance; +import org.openecomp.sdc.be.model.Service; +import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade; +import org.openecomp.sdc.be.tosca.CapabiltyRequirementConvertor; +import org.openecomp.sdc.be.tosca.model.ToscaNodeTemplate; +import org.openecomp.sdc.be.tosca.model.ToscaTemplateRequirement; + +import java.util.*; + +/** + * @author KATYR + * @since November 19, 2017 + */ + +public class ForwardingPathToscaUtil { + public static final String FORWARDS_TO_TOSCA_NAME = + "org.openecomp.relationships.ForwardsTo"; + public static final String PROTOCOL = "protocol"; + public static final String PORTS_RANGE = "target_range"; + public static final String FORWARDER = "forwarder"; + + public static void addForwardingPaths(Service service, Map<String, ToscaNodeTemplate> + nodeTemplates, CapabiltyRequirementConvertor capabiltyRequirementConvertor, Map<String, Component> originComponents, ToscaOperationFacade toscaOperationFacade) { + for (String forwardingPathName : service.getForwardingPaths().keySet()) { + ToscaNodeTemplate forwardingPathNodeTemplate = + new ToscaNodeTemplate(); + final ForwardingPathDataDefinition path = + service.getForwardingPaths().get(forwardingPathName); + forwardingPathNodeTemplate.setType(path.getToscaResourceName()); + + if (Objects.nonNull(path.getDescription())) { + forwardingPathNodeTemplate.setDescription(path + .getDescription()); + } + Map<String, Object> props = new HashMap<>(); + if (Objects.nonNull(path.getDestinationPortNumber())) { + props.put(PORTS_RANGE, Collections.singletonList(path.getDestinationPortNumber())); + } + if (Objects.nonNull(path.getProtocol())) { + props.put(PROTOCOL, path.getProtocol()); + } + if (MapUtils.isNotEmpty(props)) { + forwardingPathNodeTemplate.setProperties(props); + } + + final List<ForwardingPathElementDataDefinition> pathElements = + path.getPathElements() + .getListToscaDataDefinition(); + forwardingPathNodeTemplate.setRequirements(convertPathElementsToRequirements(pathElements, + service, capabiltyRequirementConvertor, originComponents, toscaOperationFacade)); + + nodeTemplates.put(path.getName(), forwardingPathNodeTemplate); + } + + } + + private static List<Map<String, ToscaTemplateRequirement>> convertPathElementsToRequirements( + List<ForwardingPathElementDataDefinition> pathElements, Service service, CapabiltyRequirementConvertor capabiltyRequirementConvertor, Map<String, Component> originComponents,ToscaOperationFacade toscaOperationFacade) { + List<Map<String, ToscaTemplateRequirement>> toscaRequirements = new ArrayList<>(); + for (int i = 0; i <= pathElements.size() -1 ; i++) { + final ForwardingPathElementDataDefinition element = pathElements.get(i); + toscaRequirements.add(handleSingleReq(fetchCPName(service, element.getFromNode(), element.getFromCP(), capabiltyRequirementConvertor, originComponents, toscaOperationFacade), fetchNodeName(service, element.getFromNode()))); + if ( i == pathElements.size() -1) { + toscaRequirements.add(handleSingleReq(fetchCPName(service, element.getToNode(), element.getToCP(), capabiltyRequirementConvertor, originComponents, toscaOperationFacade), fetchNodeName(service, element + .getToNode()))); + } + } + return toscaRequirements; + + } + + private static String fetchNodeName(Service service, String nodeId) { + if (service.getComponentInstanceById(nodeId).isPresent()) { + return service.getComponentInstanceById(nodeId).get().getName(); + } else { + return ""; + } + } + + + private static Map<String, ToscaTemplateRequirement> handleSingleReq( + String fromCP, String fromNode) { + Map<String, ToscaTemplateRequirement> toscaReqMap = new HashMap<>(); + ToscaTemplateRequirement firstReq = new ToscaTemplateRequirement(); + firstReq.setRelationship(FORWARDS_TO_TOSCA_NAME); //todo + firstReq.setCapability(fromCP); + firstReq.setNode(fromNode); + toscaReqMap.put(FORWARDER, firstReq); + + return toscaReqMap; + } + + /** + * @todo handle errors. + */ + private static String fetchCPName(Service service, String nodeID, String cpName, CapabiltyRequirementConvertor capabiltyRequirementConvertor, Map<String, Component> originComponents, ToscaOperationFacade toscaOperationFacade) { + Optional<ComponentInstance> componentInstance = service.getComponentInstanceById(nodeID); + ComponentInstance componentInstanceVal = componentInstance.get(); + String name = componentInstanceVal.getNormalizedName(); + Component component = originComponents.get(componentInstanceVal.getComponentUid()); + if(componentInstanceVal.getIsProxy()){ + component = originComponents.get(componentInstanceVal.getSourceModelUid()); + if (component == null) { + component = toscaOperationFacade.getToscaFullElement(componentInstanceVal.getSourceModelUid()).left().value(); + } + + } + CapabilityDefinition capability = componentInstanceVal.getCapabilities().values().stream().flatMap(capabilityDefinitions -> capabilityDefinitions.stream()) + .filter(capabilityDefinition -> capabilityDefinition.getUniqueId().equals(cpName)).findAny().get(); + List<String> path = capability.getPath(); + List<String> reducedPath = new ArrayList<>(path); + reducedPath.remove(reducedPath.size() - 1); + Either<String, Boolean> stringBooleanEither = capabiltyRequirementConvertor.buildSubstitutedName(originComponents, component, reducedPath, capability.getName()); + return name + "." + stringBooleanEither.left().value(); + } +} |