ListDataDefinition<OperationInputDefinition> inputs = operationEntry.getValue().getInputs();
String expectedOperationIdentifier =
interfaceDefinitionEntry.getValue().getType() + "." + operationEntry.getValue().getName();
- if (!currentOperationIdentifier.equals(expectedOperationIdentifier) && !inputs.isEmpty()) {
+ if (!currentOperationIdentifier.equals(expectedOperationIdentifier) && Objects.nonNull(inputs) && !inputs.isEmpty()) {
otherOperationInputs.addAll(inputs.getListToscaDataDefinition());
}
}
import org.openecomp.sdc.be.dao.cassandra.CassandraOperationStatus;
import org.openecomp.sdc.be.dao.cassandra.SdcSchemaFilesCassandraDao;
import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
+import org.openecomp.sdc.be.datatypes.enums.OriginTypeEnum;
import org.openecomp.sdc.be.impl.ComponentsUtils;
import org.openecomp.sdc.be.model.*;
import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade;
}
private Either<ZipOutputStream, ResponseFormat> writeComponentInterface(Component component, ZipOutputStream zip,
- String fileName, boolean isAssociatedResourceComponent) {
+ String fileName, boolean isAssociatedComponent) {
try {
Either<ToscaRepresentation, ToscaError> componentInterface = toscaExportUtils
- .exportComponentInterface(component, isAssociatedResourceComponent);
+ .exportComponentInterface(component, isAssociatedComponent);
ToscaRepresentation componentInterfaceYaml = componentInterface.left().value();
String mainYaml = componentInterfaceYaml.getMainYaml();
String interfaceFileName = DEFINITIONS_PATH + ToscaExportHandler.getInterfaceFilename(fileName);
ComponentTypeArtifacts componentInstanceArtifacts = componentTypeArtifacts.get(keyAssetName);
ArtifactsInfo componentArtifacts2 = componentInstanceArtifacts.getComponentArtifacts();
String pathWithAssetName = currentPath + keyAssetName + "/";
- Either<ZipOutputStream, ResponseFormat> writeArtifactsInfoToSpecifiedtPath = writeArtifactsInfoToSpecifiedPath(
+ Either<ZipOutputStream, ResponseFormat> writeArtifactsInfoToSpecifiedPath = writeArtifactsInfoToSpecifiedPath(
mainComponent, componentArtifacts2, zipstream, pathWithAssetName, isInCertificationRequest);
- if (writeArtifactsInfoToSpecifiedtPath.isRight()) {
- return writeArtifactsInfoToSpecifiedtPath;
+ if (writeArtifactsInfoToSpecifiedPath.isRight()) {
+ return writeArtifactsInfoToSpecifiedPath;
}
}
}
private ComponentTypeArtifacts collectComponentTypeArtifacts(Map<String, ComponentTypeArtifacts> resourcesArtifacts,
- ComponentInstance componentInstance, Resource fetchedComponent) {
+ ComponentInstance componentInstance, Component fetchedComponent) {
String toscaComponentName = componentInstance.getToscaComponentName() + "_v"
+ componentInstance.getComponentVersion();
ComponentInstance componentInstance, Map<String, ComponentTypeArtifacts> resourcesTypeArtifacts,
ComponentTypeArtifacts instanceArtifactsLocation) {
// 1. get the component instance component
- String componentUid = componentInstance.getComponentUid();
- Either<Resource, StorageOperationStatus> resource = toscaOperationFacade.getToscaElement(componentUid);
- if (resource.isRight()) {
+ String componentUid;
+ if (componentInstance.getOriginType() == OriginTypeEnum.ServiceProxy) {
+ componentUid = componentInstance.getSourceModelUid();
+ }
+ else {
+ componentUid = componentInstance.getComponentUid();
+ }
+ Either<Component, StorageOperationStatus> component = toscaOperationFacade.getToscaElement(componentUid);
+ if (component.isRight()) {
log.error("Failed to fetch resource with id {} for instance {}", componentUid, parentComponent.getUUID());
return Either.right(componentsUtils.getResponseFormat(ActionStatus.ASSET_NOT_FOUND_DURING_CSAR_CREATION,
parentComponent.getComponentType().getValue(), parentComponent.getUUID(),
componentInstance.getOriginType().getComponentType().getValue(), componentUid));
}
- Resource fetchedComponent = resource.left().value();
+ Component fetchedComponent = component.left().value();
// 2. fill the artifacts for the current component parent type
ComponentTypeArtifacts componentParentArtifacts = collectComponentTypeArtifacts(resourcesTypeArtifacts,
}
public Either<ToscaRepresentation, ToscaError> exportComponentInterface(Component component,
- boolean isAssociatedResourceComponent) {
+ boolean isAssociatedComponent) {
if (null == DEFAULT_IMPORTS) {
log.debug(FAILED_TO_GET_DEFAULT_IMPORTS_CONFIGURATION);
return Either.right(ToscaError.GENERAL_ERROR);
toscaTemplate.setImports(new ArrayList<>(DEFAULT_IMPORTS));
Map<String, ToscaNodeType> nodeTypes = new HashMap<>();
Either<ToscaTemplate, ToscaError> toscaTemplateRes = convertInterfaceNodeType(new HashMap<>(), component,
- toscaTemplate, nodeTypes, isAssociatedResourceComponent);
+ toscaTemplate, nodeTypes, isAssociatedComponent);
if (toscaTemplateRes.isRight()) {
return Either.right(toscaTemplateRes.right().value());
}
private Either<ToscaTemplate, ToscaError> convertInterfaceNodeType(Map<String, Component> componentsCache,
Component component, ToscaTemplate toscaNode,
Map<String, ToscaNodeType> nodeTypes,
- boolean isAssociatedResourceComponent) {
+ boolean isAssociatedComponent) {
log.debug("start convert node type for {}", component.getUniqueId());
ToscaNodeType toscaNodeType = createNodeType(component);
List<InputDefinition> inputDef = component.getInputs();
Map<String, ToscaProperty> mergedProperties = new HashMap<>();
- addInterfaceDefinitionElement(component, toscaNodeType, dataTypes, isAssociatedResourceComponent);
+ addInterfaceDefinitionElement(component, toscaNodeType, dataTypes, isAssociatedComponent);
if (inputDef != null) {
addInputsToProperties(dataTypes, inputDef, mergedProperties);
}
.getUniqueId(), instInterface));
interfaces = InterfacesOperationsToscaUtil
- .getInterfacesMap(parentComponent, tmpInterfaces, dataTypes, true, true);
+ .getInterfacesMap(parentComponent, componentInstance, tmpInterfaces, dataTypes, true, true);
}
} else {
interfaces =
import org.openecomp.sdc.be.datatypes.elements.OperationDataDefinition;
import org.openecomp.sdc.be.datatypes.elements.OperationInputDefinition;
import org.openecomp.sdc.be.model.Component;
+import org.openecomp.sdc.be.model.ComponentInstance;
import org.openecomp.sdc.be.model.DataTypeDefinition;
import org.openecomp.sdc.be.model.InterfaceDefinition;
import org.openecomp.sdc.be.model.Product;
*/
public static void addInterfaceDefinitionElement(Component component, ToscaNodeType nodeType,
Map<String, DataTypeDefinition> dataTypes,
- boolean isAssociatedResourceComponent) {
+ boolean isAssociatedComponent) {
if (component instanceof Product) {
return;
}
return;
}
Map<String, Object> toscaInterfaceDefinitions = getInterfacesMap(component, dataTypes,
- isAssociatedResourceComponent);
+ isAssociatedComponent);
if (MapUtils.isNotEmpty(toscaInterfaceDefinitions)) {
nodeType.setInterfaces(toscaInterfaceDefinitions);
}
private static Map<String, Object> getInterfacesMap(Component component,
Map<String, DataTypeDefinition> dataTypes,
- boolean isAssociatedResourceComponent) {
- return getInterfacesMap(component, component.getInterfaces(), dataTypes, isAssociatedResourceComponent, false);
+ boolean isAssociatedComponent) {
+ return getInterfacesMap(component, null, component.getInterfaces(), dataTypes, isAssociatedComponent, false);
}
public static Map<String, Object> getInterfacesMap(Component component,
+ ComponentInstance componentInstance,
Map<String, InterfaceDefinition> interfaces,
Map<String, DataTypeDefinition> dataTypes,
- boolean isAssociatedResourceComponent,
+ boolean isAssociatedComponent,
boolean isServiceProxyInterface) {
if(MapUtils.isEmpty(interfaces)) {
return null;
ToscaLifecycleOperationDefinition toscaOperation = new ToscaLifecycleOperationDefinition();
if (isArtifactPresent(operationEntry)) {
operationArtifactPath = OperationArtifactUtil
- .createOperationArtifactPath(component, operationEntry.getValue(),
- isAssociatedResourceComponent);
+ .createOperationArtifactPath(component, componentInstance, operationEntry.getValue(),
+ isAssociatedComponent);
toscaOperation.setImplementation(operationArtifactPath);
}
toscaOperation.setDescription(operationEntry.getValue().getDescription());
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
+import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
import org.openecomp.sdc.be.datatypes.elements.OperationDataDefinition;
import org.openecomp.sdc.be.model.ArtifactDefinition;
import org.openecomp.sdc.be.model.Component;
+import org.openecomp.sdc.be.model.ComponentInstance;
import org.openecomp.sdc.be.model.InterfaceDefinition;
import org.openecomp.sdc.be.model.Operation;
import org.openecomp.sdc.be.model.Resource;
* @param operation the specific operation name
* @return the full path including file name for operation's artifacts
*/
- static String createOperationArtifactPath(Component component, OperationDataDefinition operation,
- boolean isAssociatedResourceComponent) {
+ static String createOperationArtifactPath(Component component, ComponentInstance componentInstance,
+ OperationDataDefinition operation, boolean isAssociatedComponent) {
if (!(component instanceof Resource || component instanceof Service)) {
return null;
}
- if (isAssociatedResourceComponent) {
- ResourceMetadataDataDefinition resourceMetadataDataDefinition = (ResourceMetadataDataDefinition)
- component.getComponentMetadataDefinition().getMetadataDataDefinition();
- return createOperationArtifactPathInService(resourceMetadataDataDefinition.getToscaResourceName() +
- "_v" + component.getVersion(), operation);
+
+ if (isAssociatedComponent) {
+ // Service Proxy is only in Node Template interface
+ if(componentInstance != null) {
+ return createOperationArtifactPathInService(componentInstance.getToscaComponentName()
+ + "_v" + component.getVersion(), operation);
+ }
+ // Resource Instance is part of Node Type interface
+ else {
+ ResourceMetadataDataDefinition resourceMetadataDataDefinition =
+ (ResourceMetadataDataDefinition) component.getComponentMetadataDefinition().getMetadataDataDefinition();
+ return createOperationArtifactPathInService(resourceMetadataDataDefinition.getToscaResourceName()
+ + "_v" + component.getVersion(), operation);
+ }
}
- return createOperationArtifactPathInResource(operation);
+ return createOperationArtifactPathInComponent(operation);
}
- private static String createOperationArtifactPathInResource(OperationDataDefinition operation) {
+ private static String createOperationArtifactPathInComponent(OperationDataDefinition operation) {
return CsarUtils.ARTIFACTS + File.separator + WordUtils.capitalizeFully(ArtifactGroupTypeEnum.DEPLOYMENT.name())
+ File.separator + ArtifactTypeEnum.WORKFLOW.name() + File.separator + BPMN_ARTIFACT_PATH
+ File.separator + operation.getImplementation().getArtifactName();
}
Map<String, ArtifactDefinition> interfaceArtifacts = interfaces.values().stream()
.flatMap(interfaceDefinition -> interfaceDefinition.getOperationsMap().values().stream())
- .map(Operation::getImplementationArtifact)
+ .map(Operation::getImplementationArtifact).filter(Objects::nonNull)
.collect(Collectors.toMap(ArtifactDataDefinition::getUniqueId,
artifactDefinition -> artifactDefinition));
if (MapUtils.isNotEmpty(interfaceArtifacts)) {
component.setInterfaces(new HashMap<>());
component.getInterfaces().put(interfaceType, addedInterface);
Map<String, Object> interfacesMap = InterfacesOperationsToscaUtil
- .getInterfacesMap(component, component.getInterfaces(), null, false, true);
+ .getInterfacesMap(component, null, component.getInterfaces(), null, false, true);
ToscaNodeType nodeType = new ToscaNodeType();
nodeType.setInterfaces(interfacesMap);
ToscaExportHandler handler = new ToscaExportHandler();
import org.openecomp.sdc.be.datatypes.elements.OperationDataDefinition;
import org.openecomp.sdc.be.model.ArtifactDefinition;
import org.openecomp.sdc.be.model.Component;
+import org.openecomp.sdc.be.model.ComponentInstance;
import org.openecomp.sdc.be.model.ComponentMetadataDefinition;
import org.openecomp.sdc.be.model.InterfaceDefinition;
import org.openecomp.sdc.be.model.Resource;
final ArtifactDataDefinition implementation = new ArtifactDataDefinition();
implementation.setArtifactName("createBPMN.bpmn");
op.setImplementation(implementation);
- final String actualArtifactPath = OperationArtifactUtil.createOperationArtifactPath(component, op, false);
+ final String actualArtifactPath = OperationArtifactUtil.createOperationArtifactPath(component, null, op, false);
String expectedArtifactPath = CsarUtils.ARTIFACTS + File.separator +
WordUtils.capitalizeFully(ArtifactGroupTypeEnum.DEPLOYMENT.name()) + File.separator +
ArtifactTypeEnum.WORKFLOW.name() + File.separator + BPMN_ARTIFACT_PATH + File.separator +
@Test
public void testCorrectPathForOperationArtifactsInService() {
- ResourceMetadataDataDefinition componentMetadataDataDefinition = new ResourceMetadataDataDefinition();
- componentMetadataDataDefinition.setToscaResourceName("org.openecomp.resource.vf.TestResource");
- final ComponentMetadataDefinition componentMetadataDefinition =
- new ComponentMetadataDefinition(componentMetadataDataDefinition);
- Component component = new Resource(componentMetadataDefinition);
+ Component component = new Resource();
component.setVersion("1.0");
+ ComponentInstance componentInstance = new ComponentInstance();
+ componentInstance.setToscaComponentName("org.openecomp.resource.vf.TestResource");
final OperationDataDefinition op = new OperationDataDefinition();
final ArtifactDataDefinition implementation = new ArtifactDataDefinition();
implementation.setArtifactName("createBPMN.bpmn");
op.setImplementation(implementation);
- final String actualArtifactPath = OperationArtifactUtil.createOperationArtifactPath(component, op, true);
+ final String actualArtifactPath = OperationArtifactUtil.createOperationArtifactPath(component, componentInstance, op, true);
String expectedArtifactPath = CsarUtils.ARTIFACTS + File.separator +
"org.openecomp.resource.vf.TestResource_v1.0" + File.separator +
WordUtils.capitalizeFully(ArtifactGroupTypeEnum.DEPLOYMENT.name()) + File.separator +
private Either<ImmutablePair<TopologyTemplate, String>, StorageOperationStatus> addServiceInstanceInterfacesToProxyServiceInstance(TopologyTemplate updatedContainer, ComponentInstance componentInstance) {
Map<String, Object> interfaces = componentInstance.getInterfaces();
- if(interfaces != null && !interfaces.isEmpty()) {
+ if(MapUtils.isNotEmpty(interfaces)){
Map<String, InterfaceDataDefinition> interfacesMap = interfaces.entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, e -> (InterfaceDataDefinition) e.getValue()));
- MapInterfaceDataDefinition instIntrefaces = new MapInterfaceDataDefinition(interfacesMap);
+ MapInterfaceDataDefinition instInterfaces = new MapInterfaceDataDefinition(interfacesMap);
Map<String, MapInterfaceDataDefinition> instInterfacesMap = new HashMap<>();
- instInterfacesMap.put(componentInstance.getUniqueId(), instIntrefaces);
+ instInterfacesMap.put(componentInstance.getUniqueId(), instInterfaces);
updatedContainer.setComponentInstInterfaces(instInterfacesMap);
StorageOperationStatus status =
addToscaDataDeepElementsBlockToToscaElement(updatedContainer.getUniqueId(),
- EdgeLabelEnum.INST_INTERFACES, VertexTypeEnum.INST_INTERFACES, instIntrefaces,
+ EdgeLabelEnum.INST_INTERFACES, VertexTypeEnum.INST_INTERFACES, instInterfaces,
componentInstance.getUniqueId());
if(status != StorageOperationStatus.OK) {