diff options
Diffstat (limited to 'catalog-model/src/main/java/org/openecomp/sdc/be/model/operations/impl/ResourceOperation.java')
-rw-r--r-- | catalog-model/src/main/java/org/openecomp/sdc/be/model/operations/impl/ResourceOperation.java | 643 |
1 files changed, 308 insertions, 335 deletions
diff --git a/catalog-model/src/main/java/org/openecomp/sdc/be/model/operations/impl/ResourceOperation.java b/catalog-model/src/main/java/org/openecomp/sdc/be/model/operations/impl/ResourceOperation.java index 22c693d8b3..4dce650f18 100644 --- a/catalog-model/src/main/java/org/openecomp/sdc/be/model/operations/impl/ResourceOperation.java +++ b/catalog-model/src/main/java/org/openecomp/sdc/be/model/operations/impl/ResourceOperation.java @@ -21,6 +21,7 @@ package org.openecomp.sdc.be.model.operations.impl; import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.List; @@ -33,6 +34,8 @@ import java.util.function.Predicate; import java.util.regex.Pattern; import java.util.stream.Collectors; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.tuple.ImmutablePair; import org.apache.tinkerpop.gremlin.structure.Vertex; import org.openecomp.sdc.be.config.BeEcompErrorManager; @@ -79,14 +82,19 @@ import org.openecomp.sdc.be.model.operations.api.IAttributeOperation; import org.openecomp.sdc.be.model.operations.api.IElementOperation; import org.openecomp.sdc.be.model.operations.api.IResourceOperation; import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus; +import org.openecomp.sdc.be.model.operations.migration.MigrationErrorInformer; import org.openecomp.sdc.be.model.operations.utils.GraphDeleteUtil; import org.openecomp.sdc.be.resources.data.ComponentMetadataData; +import org.openecomp.sdc.be.resources.data.PropertyData; import org.openecomp.sdc.be.resources.data.ResourceMetadataData; import org.openecomp.sdc.be.resources.data.TagData; import org.openecomp.sdc.be.resources.data.UniqueIdData; import org.openecomp.sdc.be.resources.data.UserData; import org.openecomp.sdc.be.resources.data.category.CategoryData; import org.openecomp.sdc.be.resources.data.category.SubCategoryData; +import org.openecomp.sdc.common.api.ArtifactTypeEnum; +import org.openecomp.sdc.common.datastructure.Wrapper; +import org.openecomp.sdc.common.util.PairUtils; import org.openecomp.sdc.common.util.ValidationUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -97,9 +105,11 @@ import com.google.gson.GsonBuilder; import com.thinkaurelius.titan.core.TitanGraph; import com.thinkaurelius.titan.core.TitanVertex; +import fj.Function; import fj.data.Either; @org.springframework.stereotype.Component("resource-operation") +@Deprecated public class ResourceOperation extends ComponentOperation implements IResourceOperation { public ResourceOperation() { @@ -139,8 +149,8 @@ public class ResourceOperation extends ComponentOperation implements IResourceOp private GraphDeleteUtil graphDeleteUtil = new GraphDeleteUtil(); - private static Pattern uuidNewVersion = Pattern.compile("^\\d{1,}.1"); - private static Pattern uuidNormativeNewVersion = Pattern.compile("^\\d{1,}.0"); + public static Pattern uuidNewVersion = Pattern.compile("^\\d{1,}.1"); + public static Pattern uuidNormativeNewVersion = Pattern.compile("^\\d{1,}.0"); @Override public Either<Resource, StorageOperationStatus> createResource(Resource resource) { @@ -169,19 +179,18 @@ public class ResourceOperation extends ComponentOperation implements IResourceOp if (findUser.isRight()) { TitanOperationStatus status = findUser.right().value(); - log.error("Cannot find user " + userId + " in the graph. status is " + status); + log.error("Cannot find user {} in the graph. status is {}", userId, status); return sendError(status, StorageOperationStatus.USER_NOT_FOUND); } TitanVertex creatorVertex = findUser.left().value(); TitanVertex updaterVertex = creatorVertex; - String updaterUserId = resource.getLastUpdaterUserId(); if (updaterUserId != null && !updaterUserId.equals(userId)) { findUser = findUserVertex(updaterUserId); if (findUser.isRight()) { TitanOperationStatus status = findUser.right().value(); - log.error("Cannot find user " + userId + " in the graph. status is " + status); + log.error("Cannot find user {} in the graph. status is {}", userId, status); return sendError(status, StorageOperationStatus.USER_NOT_FOUND); } else { updaterVertex = findUser.left().value(); @@ -232,8 +241,8 @@ public class ResourceOperation extends ComponentOperation implements IResourceOp result = Either.right(associateCategory); return result; } - - TitanOperationStatus associateProperties = associatePropertiesToResource(metadataVertex, resourceUniqueId, resource.getProperties()); + + TitanOperationStatus associateProperties = associatePropertiesToResource(metadataVertex, resourceUniqueId, resource.getProperties(), derivedResources); if (associateProperties != TitanOperationStatus.OK) { result = Either.right(DaoStatusConverter.convertTitanStatusToStorageStatus(associateProperties)); return result; @@ -302,13 +311,13 @@ public class ResourceOperation extends ComponentOperation implements IResourceOp result = this.getResource(resourceUniqueId, true); if (result.isRight()) { - log.error("Cannot get full resource from the graph. status is " + result.right().value()); + log.error("Cannot get full resource from the graph. status is {}", result.right().value()); return Either.right(result.right().value()); } if (log.isDebugEnabled()) { String json = prettyJson.toJson(result.left().value()); - log.debug("Resource retrieved is " + json); + log.debug("Resource retrieved is {}", json); } return result; @@ -335,7 +344,7 @@ public class ResourceOperation extends ComponentOperation implements IResourceOp Either<CategoryData, StorageOperationStatus> categoryResult = elementOperation.getNewCategoryData(categoryName, NodeTypeEnum.ResourceNewCategory, CategoryData.class); if (categoryResult.isRight()) { StorageOperationStatus status = categoryResult.right().value(); - log.error("Cannot find category " + categoryName + " in the graph. status is " + status); + log.error("Cannot find category {} in the graph. status is {}", categoryName, status); return categoryResult.right().value(); } categoryData = categoryResult.left().value(); @@ -343,16 +352,16 @@ public class ResourceOperation extends ComponentOperation implements IResourceOp Either<List<ImmutablePair<SubCategoryData, GraphEdge>>, TitanOperationStatus> childrenNodes = titanGenericDao.getChildrenNodes(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.ResourceNewCategory), (String) categoryData.getUniqueId(), GraphEdgeLabels.SUB_CATEGORY, NodeTypeEnum.ResourceSubcategory, SubCategoryData.class); if (childrenNodes.isRight()) { - log.debug("Faield to fetch sub categories for resource category" + categoryData.getCategoryDataDefinition().getName()); + log.debug("Faield to fetch sub categories for resource category {}", categoryData.getCategoryDataDefinition().getName()); return DaoStatusConverter.convertTitanStatusToStorageStatus(childrenNodes.right().value()); } for (ImmutablePair<SubCategoryData, GraphEdge> pair : childrenNodes.left().value()) { SubCategoryData subcategoryData = pair.left; if (subcategoryData.getSubCategoryDataDefinition().getName().equals(subcategoryName)) { Either<GraphRelation, TitanOperationStatus> result = titanGenericDao.createRelation(resourceData, subcategoryData, GraphEdgeLabels.CATEGORY, null); - log.debug("After associating resource " + resourceData.getUniqueId() + " to subcategory " + subcategoryData + ". Edge type is " + GraphEdgeLabels.CATEGORY); + log.debug("After associating resource {} to subcategory {}. Edge type is {}", resourceData.getUniqueId(), subcategoryData, GraphEdgeLabels.CATEGORY); if (result.isRight()) { - log.error("Faield to associate resource " + resourceData.getUniqueId() + " to category " + categoryData + ". Edge type is " + GraphEdgeLabels.CATEGORY); + log.error("Faield to associate resource {} to category {}. Edge type is {}", resourceData.getUniqueId(), categoryData, GraphEdgeLabels.CATEGORY); return DaoStatusConverter.convertTitanStatusToStorageStatus(result.right().value()); } @@ -492,15 +501,34 @@ public class ResourceOperation extends ComponentOperation implements IResourceOp StorageOperationStatus status = StorageOperationStatus.OK; if (artifacts != null) { + Map<ArtifactDefinition, ArtifactDefinition> heatEnvMap = new HashMap<ArtifactDefinition, ArtifactDefinition>(); for (Entry<String, ArtifactDefinition> entry : artifacts.entrySet()) { ArtifactDefinition artifactDefinition = entry.getValue(); - status = artifactOperation.addArifactToComponent(artifactDefinition, resourceId, NodeTypeEnum.Resource, false, metadataVertex); + + ArtifactTypeEnum artifactType = ArtifactTypeEnum.findType(artifactDefinition.getArtifactType()); + if(artifactType != ArtifactTypeEnum.HEAT_ENV){ + status = artifactOperation.addArifactToComponent(artifactDefinition, resourceId, NodeTypeEnum.Resource, false, metadataVertex); + }else{ + Optional<ArtifactDefinition> op = artifacts.values().stream().filter(p -> p.getUniqueId().equals(artifactDefinition.getGeneratedFromId())).findAny(); + if(op.isPresent()){ + heatEnvMap.put(artifactDefinition, op.get()); + } + + + } if (!status.equals(StorageOperationStatus.OK)) { return status; } } + for(Entry<ArtifactDefinition, ArtifactDefinition> entry : heatEnvMap.entrySet()){ + Either<ArtifactDefinition, StorageOperationStatus> addHeatEnvArtifact = artifactOperation.addHeatEnvArtifact(entry.getKey(), entry.getValue(), resourceId, NodeTypeEnum.Resource, false); + if (addHeatEnvArtifact.isRight()) { + log.debug("failed to create heat env artifact on resource instance"); + return addHeatEnvArtifact.right().value(); + } + } } return status; @@ -539,7 +567,7 @@ public class ResourceOperation extends ComponentOperation implements IResourceOp } } - private TitanOperationStatus associatePropertiesToResource(TitanVertex metadatVertex, String resourceId, List<PropertyDefinition> properties) { + private TitanOperationStatus associatePropertiesToResource(TitanVertex metadatVertex, String resourceId, List<PropertyDefinition> properties, List<ResourceMetadataData> derivedResources) { Either<Map<String, DataTypeDefinition>, TitanOperationStatus> allDataTypes = applicationDataTypeCache.getAll(); if (allDataTypes.isRight()) { @@ -547,21 +575,82 @@ public class ResourceOperation extends ComponentOperation implements IResourceOp log.debug("Cannot find any data type. Status is {}.", status); return status; } - + Map<String, PropertyDefinition> convertedProperties = new HashMap<>(); if (properties != null) { for (PropertyDefinition propertyDefinition : properties) { convertedProperties.put(propertyDefinition.getName(), propertyDefinition); } - TitanOperationStatus operationStatus = propertyOperation.addPropertiesToGraph(metadatVertex, convertedProperties, allDataTypes.left().value(), resourceId); - return operationStatus; + + Either<Map<String, PropertyDefinition>, TitanOperationStatus> getPropertiesOfAllDerivedFromRes = getPropertiesOfAllDerivedFrom(derivedResources); + + if(getPropertiesOfAllDerivedFromRes.isRight()){ + TitanOperationStatus status = getPropertiesOfAllDerivedFromRes.right().value(); + log.debug("Cannot fetch properties of all derived from resources. Status is {}.", status); + return status; + } + + Map<String, PropertyDefinition> allDerivedFromProperties = getPropertiesOfAllDerivedFromRes.left().value(); + + TitanOperationStatus validatePropertyNamesUniqunessStatus = validatePropertyNamesUniquness(properties, allDerivedFromProperties); + + if(validatePropertyNamesUniqunessStatus != TitanOperationStatus.OK){ + return validatePropertyNamesUniqunessStatus; + } + + return propertyOperation.addPropertiesToGraph(metadatVertex, convertedProperties, allDataTypes.left().value(), resourceId); } return TitanOperationStatus.OK; } + private TitanOperationStatus validatePropertyNamesUniquness(List<PropertyDefinition> properties, Map<String, PropertyDefinition> allDerivedFromProperties) { + + TitanOperationStatus result = TitanOperationStatus.OK; + Optional<PropertyDefinition> propertyOptional= properties.stream() + //filters out properties with the same name and different type + .filter(prop -> allDerivedFromProperties.containsKey(prop.getName()) && !prop.getType().equals(allDerivedFromProperties.get(prop.getName()).getType())) + //Searches for any matching value + .findAny(); + if(propertyOptional.isPresent()){ + log.error("Property with name {} and type {} already exists in derived from resource. ", propertyOptional.get().getName(), allDerivedFromProperties.get( propertyOptional.get().getName()).getType()); + result = TitanOperationStatus.ALREADY_EXIST; + } + return result; + } + + private Either<Map<String, PropertyDefinition>, TitanOperationStatus> getPropertiesOfAllDerivedFrom(List<ResourceMetadataData> derivedResources) { + Map<String, PropertyDefinition> allDerivedProperties = new HashMap<>(); + Either<Map<String, PropertyDefinition>, TitanOperationStatus> getPropertiesOfAllDerivedFromRes = Either.left(allDerivedProperties); + String currResourceName = null ; + if(!CollectionUtils.isEmpty(derivedResources)){ + try{ + for(int i = derivedResources.size() - 1; i >= 0 ; --i){ + ResourceMetadataData currDerivedResource = derivedResources.get(i); + currResourceName = currDerivedResource.getMetadataDataDefinition().getName(); + Either<List<ImmutablePair<PropertyData, GraphEdge>>, TitanOperationStatus> res = + titanGenericDao.getChildrenNodes( currDerivedResource.getUniqueIdKey(), (String)currDerivedResource.getUniqueId(), GraphEdgeLabels.PROPERTY, NodeTypeEnum.Property, PropertyData.class); + if(res.isRight() && res.right().value() != TitanOperationStatus.NOT_FOUND){ + getPropertiesOfAllDerivedFromRes = Either.right(res.right().value()); + break; + }else if(res.isLeft()){ + allDerivedProperties.putAll(res.left().value().stream() + //Maps PropertyData converted to PropertyDefinition + .map(pair-> propertyOperation.convertPropertyDataToPropertyDefinition(pair.getLeft(), (String)pair.getRight().getProperties().get(GraphPropertiesDictionary.NAME.getProperty()), (String)currDerivedResource.getUniqueId())) + //and collects it to a map + .collect(Collectors.toMap(entry->entry.getName(), entry->entry))); + } + } + } + catch(Exception e){ + log.error("Exception occured during fetch properties of resource {}. ", currResourceName); + } + } + return getPropertiesOfAllDerivedFromRes; + } + private TitanOperationStatus associateAttributesToResource(TitanVertex metadataVertex, List<AttributeDefinition> attributes, String resourceId) { TitanOperationStatus operationStatus = TitanOperationStatus.OK; @@ -605,7 +694,7 @@ public class ResourceOperation extends ComponentOperation implements IResourceOp // TODO Evg : need to change too.. if (derivedResources != null) { for (ResourceMetadataData derivedResource : derivedResources) { - log.debug("After associating resource " + resourceData.getUniqueId() + " to parent resource " + derivedResource.getUniqueId() + ". Edge type is " + GraphEdgeLabels.DERIVED_FROM); + log.debug("After associating resource {} to parent resource {}. Edge type is {}", resourceData.getUniqueId(), derivedResource.getUniqueId(), GraphEdgeLabels.DERIVED_FROM); Either<GraphRelation, TitanOperationStatus> createRelationResult = titanGenericDao.createRelation(resourceData, derivedResource, GraphEdgeLabels.DERIVED_FROM, null); if (createRelationResult.isRight()) { log.error("Failed to associate resource {} to derived ", resourceData.getUniqueId()); @@ -636,26 +725,27 @@ public class ResourceOperation extends ComponentOperation implements IResourceOp List<ResourceMetadataData> resources = null; if (getParentResources.isRight()) { /* - * log.debug( "Cannot find parent resource by tosca resource name" + parentResource + " in the graph. Try to find by name"); Map<String, Object> propertiesWithResourceNameToMatch = new HashMap<String, Object>(); + * log.debug( "Cannot find parent resource by tosca resource name {} in the graph. Try to find by name", parentResource); + * Map<String, Object> propertiesWithResourceNameToMatch = new HashMap<String, Object>(); * propertiesWithResourceNameToMatch.put( GraphPropertiesDictionary.STATE.getProperty(), LifecycleStateEnum.CERTIFIED.name()); propertiesWithResourceNameToMatch.put( GraphPropertiesDictionary.NAME.getProperty(), parentResource); * propertiesWithResourceNameToMatch.put( GraphPropertiesDictionary.IS_HIGHEST_VERSION.getProperty( ), true); * * getParentResources = titanGenericDao.getByCriteria(NodeTypeEnum.Resource, propertiesWithResourceNameToMatch, ResourceData.class); if (getParentResources.isRight()) { log.error( * "Cannot find parent resource by tosca resource name" + parentResource + " in the graph."); return Either.right(StorageOperationStatus. PARENT_RESOURCE_NOT_FOUND); }else{ resources = getParentResources.left().value(); - * + * hea * } */ - log.error("Cannot find parent resource by tosca resource name" + parentResource + " in the graph."); + log.error("Cannot find parent resource by tosca resource name {} in the graph.", parentResource); return Either.right(StorageOperationStatus.PARENT_RESOURCE_NOT_FOUND); } else { resources = getParentResources.left().value(); if (resources == null || resources.size() == 0) { - log.error("Cannot find parent resource by tosc name" + parentResource + " in the graph. resources size is empty"); + log.error("Cannot find parent resource by tosc name {} in the graph. resources size is empty", parentResource); return Either.right(StorageOperationStatus.PARENT_RESOURCE_NOT_FOUND); } else { if (resources.size() > 1) { - log.error("Multiple parent resources called " + parentResource + " found in the graph."); + log.error("Multiple parent resources called {} found in the graph.", parentResource); return Either.right(StorageOperationStatus.MULTIPLE_PARENT_RESOURCE_FOUND); } ResourceMetadataData parentResourceData = resources.get(0); @@ -714,133 +804,6 @@ public class ResourceOperation extends ComponentOperation implements IResourceOp return getResource(uniqueId, componentParametersView, inTransaction); } - // public Either<Resource, StorageOperationStatus> getResource(String - // uniqueId, boolean inTransaction) { - // - // Resource resource = null; - // try { - // - // NodeTypeEnum resourceNodeType = NodeTypeEnum.Resource; - // NodeTypeEnum compInstNodeType = NodeTypeEnum.Resource; - // - // Either<ResourceMetadataData, StorageOperationStatus> - // componentByLabelAndId = getComponentByLabelAndId(uniqueId, - // resourceNodeType, ResourceMetadataData.class); - // if (componentByLabelAndId.isRight()) { - // return Either.right(componentByLabelAndId.right().value()); - // } - // ResourceMetadataData resourceData = componentByLabelAndId.left().value(); - // resource = convertResourceDataToResource(resourceData); - // - // TitanOperationStatus status = setResourceCreatorFromGraph(resource, - // uniqueId); - // if (status != TitanOperationStatus.OK) { - // return - // Either.right(DaoStatusConverter.convertTitanStatusToStorageStatus(status)); - // } - // - // status = setResourceLastModifierFromGraph(resource, uniqueId); - // if (status != TitanOperationStatus.OK) { - // return - // Either.right(DaoStatusConverter.convertTitanStatusToStorageStatus(status)); - // } - // - // status = setResourcePropertiesFromGraph(uniqueId, resource); - // if (status != TitanOperationStatus.OK) { - // return - // Either.right(DaoStatusConverter.convertTitanStatusToStorageStatus(status)); - // } - // - // status = setResourceAttributesFromGraph(uniqueId, resource); - // if (status != TitanOperationStatus.OK) { - // return - // Either.right(DaoStatusConverter.convertTitanStatusToStorageStatus(status)); - // } - // - // status = setResourceDerivedFromGraph(uniqueId, resource); - // if (status != TitanOperationStatus.OK) { - // return - // Either.right(DaoStatusConverter.convertTitanStatusToStorageStatus(status)); - // } - // - // status = setComponentCategoriesFromGraph(resource); - // if (status != TitanOperationStatus.OK) { - // return - // Either.right(DaoStatusConverter.convertTitanStatusToStorageStatus(status)); - // } - // - // status = setComponentInstancesFromGraph(uniqueId, resource, - // resourceNodeType, compInstNodeType); - // if (status != TitanOperationStatus.OK) { - // return - // Either.right(DaoStatusConverter.convertTitanStatusToStorageStatus(status)); - // - // } - // - // StorageOperationStatus setRequirementsStatus = - // setResourceRequirementsFromGraph(uniqueId, resource, true); - // if (setRequirementsStatus != StorageOperationStatus.OK) { - // log.error("Failed to set requirement of resource " + uniqueId + ". status - // is " + setRequirementsStatus); - // return Either.right(setRequirementsStatus); - // } - // - // StorageOperationStatus storageStatus = - // setResourceCapabilitiesFromGraph(uniqueId, resource); - // if (storageStatus != StorageOperationStatus.OK) { - // return Either.right(storageStatus); - // } - // - // storageStatus = setArtifactFromGraph(uniqueId, resource); - // if (storageStatus != StorageOperationStatus.OK) { - // return Either.right(storageStatus); - // } - // - // status = setComponentInstancesAttributesFromGraph(uniqueId, resource); - // if (status != TitanOperationStatus.OK) { - // return - // Either.right(DaoStatusConverter.convertTitanStatusToStorageStatus(status)); - // - // } - // - // status = setComponentInstancesPropertiesFromGraph(uniqueId, resource); - // if (status != TitanOperationStatus.OK) { - // return - // Either.right(DaoStatusConverter.convertTitanStatusToStorageStatus(status)); - // - // } - // - // storageStatus = setResourceInterfacesFromGraph(uniqueId, resource); - // if (storageStatus != StorageOperationStatus.OK) { - // return Either.right(storageStatus); - // } - // - // storageStatus = setResourceAdditionalInformationFromGraph(uniqueId, - // resource); - // if (storageStatus != StorageOperationStatus.OK) { - // return Either.right(storageStatus); - // } - // status = setAllVersions(resource); - // if (status != TitanOperationStatus.OK) { - // return - // Either.right(DaoStatusConverter.convertTitanStatusToStorageStatus(status)); - // } - // - // status = setGroupsFromGraph(uniqueId, resource, NodeTypeEnum.Resource); - // if (status != TitanOperationStatus.OK) { - // return - // Either.right(DaoStatusConverter.convertTitanStatusToStorageStatus(status)); - // } - // - // } finally { - // if (false == inTransaction) { - // titanGenericDao.commit(); - // } - // } - // - // return Either.left(resource); - // } - private TitanOperationStatus setComponentInstancesAttributesFromGraph(String uniqueId, Resource component) { Map<String, List<ComponentInstanceAttribute>> resourceInstancesAttributes = new HashMap<>(); TitanOperationStatus status = TitanOperationStatus.OK; @@ -863,114 +826,6 @@ public class ResourceOperation extends ComponentOperation implements IResourceOp } - // public Either<Resource, StorageOperationStatus> getResource_tx(String - // uniqueId, boolean inTransaction) { - // - // Resource resource = null; - // try { - // - // NodeTypeEnum resourceNodeType = NodeTypeEnum.Resource; - // NodeTypeEnum compInstNodeType = NodeTypeEnum.Resource; - // - // Either<ResourceMetadataData, StorageOperationStatus> - // componentByLabelAndId = getComponentByLabelAndId_tx(uniqueId, - // resourceNodeType, ResourceMetadataData.class); - // if (componentByLabelAndId.isRight()) { - // return Either.right(componentByLabelAndId.right().value()); - // } - // ResourceMetadataData resourceData = componentByLabelAndId.left().value(); - // resource = convertResourceDataToResource(resourceData); - // - // TitanOperationStatus status = setResourceCreatorFromGraph(resource, - // uniqueId); - // if (status != TitanOperationStatus.OK) { - // return - // Either.right(DaoStatusConverter.convertTitanStatusToStorageStatus(status)); - // } - // - // status = setResourceLastModifierFromGraph(resource, uniqueId); - // if (status != TitanOperationStatus.OK) { - // return - // Either.right(DaoStatusConverter.convertTitanStatusToStorageStatus(status)); - // } - // - // status = setResourcePropertiesFromGraph(uniqueId, resource); - // if (status != TitanOperationStatus.OK) { - // return - // Either.right(DaoStatusConverter.convertTitanStatusToStorageStatus(status)); - // } - // - // status = setResourceDerivedFromGraph(uniqueId, resource); - // if (status != TitanOperationStatus.OK) { - // return - // Either.right(DaoStatusConverter.convertTitanStatusToStorageStatus(status)); - // } - // - // status = setComponentCategoriesFromGraph(resource); - // if (status != TitanOperationStatus.OK) { - // return - // Either.right(DaoStatusConverter.convertTitanStatusToStorageStatus(status)); - // } - // - // status = setComponentInstancesFromGraph(uniqueId, resource, - // resourceNodeType, compInstNodeType); - // if (status != TitanOperationStatus.OK) { - // return - // Either.right(DaoStatusConverter.convertTitanStatusToStorageStatus(status)); - // - // } - // - // StorageOperationStatus setRequirementsStatus = - // setResourceRequirementsFromGraph(uniqueId, resource, true); - // if (setRequirementsStatus != StorageOperationStatus.OK) { - // log.error("Failed to set requirement of resource " + uniqueId + ". status - // is " + setRequirementsStatus); - // return Either.right(setRequirementsStatus); - // } - // - // StorageOperationStatus storageStatus = - // setResourceCapabilitiesFromGraph(uniqueId, resource); - // if (storageStatus != StorageOperationStatus.OK) { - // return Either.right(storageStatus); - // } - // - // storageStatus = setArtifactFromGraph(uniqueId, resource); - // if (storageStatus != StorageOperationStatus.OK) { - // return Either.right(storageStatus); - // } - // - // status = setComponentInstancesPropertiesFromGraph(uniqueId, resource); - // if (status != TitanOperationStatus.OK) { - // return - // Either.right(DaoStatusConverter.convertTitanStatusToStorageStatus(status)); - // - // } - // - // storageStatus = setResourceInterfacesFromGraph(uniqueId, resource); - // if (storageStatus != StorageOperationStatus.OK) { - // return Either.right(storageStatus); - // } - // - // storageStatus = setResourceAdditionalInformationFromGraph(uniqueId, - // resource); - // if (storageStatus != StorageOperationStatus.OK) { - // return Either.right(storageStatus); - // } - // status = setAllVersions(resource); - // if (status != TitanOperationStatus.OK) { - // return - // Either.right(DaoStatusConverter.convertTitanStatusToStorageStatus(status)); - // } - // - // } finally { - // if (false == inTransaction) { - // titanGenericDao.commit(); - // } - // } - // - // return Either.left(resource); - // } - private StorageOperationStatus setResourceAdditionalInformationFromGraph(String uniqueId, Resource resource) { List<AdditionalInformationDefinition> additionalInformation = new ArrayList<>(); @@ -1019,7 +874,11 @@ public class ResourceOperation extends ComponentOperation implements IResourceOp } } else { Map<String, CapabilityDefinition> capabilities = result.left().value(); - if (capabilities == null || capabilities.isEmpty()) { + if (capabilities != null && !capabilities.isEmpty() && resource.getResourceType().equals(ResourceTypeEnum.VF)) { + log.error(String.format("VF %s has direct capabilities.!!!!!!!!!!!!!", resource.getName())); + MigrationErrorInformer.addMalformedVF(resource.getUniqueId()); + } + if (capabilities == null || capabilities.isEmpty() || resource.getResourceType().equals(ResourceTypeEnum.VF)) { Either<Map<String, List<CapabilityDefinition>>, TitanOperationStatus> eitherCapabilities = super.getCapabilities(resource, NodeTypeEnum.Resource, true); if (eitherCapabilities.isLeft()) { retStatus = StorageOperationStatus.OK; @@ -1086,7 +945,11 @@ public class ResourceOperation extends ComponentOperation implements IResourceOp } } else { Map<String, RequirementDefinition> requirements = result.left().value(); - if (requirements == null || requirements.isEmpty()) { + if (requirements != null && !requirements.isEmpty() && resource.getResourceType().equals(ResourceTypeEnum.VF)) { + log.error(String.format("VF %s has direct requirements.!!!!!!!!!!!!!", resource.getName())); + MigrationErrorInformer.addMalformedVF(resource.getUniqueId()); + } + if (requirements == null || requirements.isEmpty() || resource.getResourceType() == ResourceTypeEnum.VF) { Either<Map<String, List<RequirementDefinition>>, TitanOperationStatus> eitherCapabilities = super.getRequirements(resource, NodeTypeEnum.Resource, true); if (eitherCapabilities.isLeft()) { retStatus = StorageOperationStatus.OK; @@ -1197,10 +1060,8 @@ public class ResourceOperation extends ComponentOperation implements IResourceOp log.debug("Found parent node {}", value); UserData userData = value.getKey(); - if (log.isDebugEnabled()) { + if (log.isDebugEnabled()) log.debug("Build resource : set last modifier userId to {}", userData.getUserId()); - } - String fullName = buildFullName(userData); if (log.isDebugEnabled()) log.debug("Build resource : set last modifier full name to {}", fullName); @@ -1222,9 +1083,8 @@ public class ResourceOperation extends ComponentOperation implements IResourceOp if (log.isDebugEnabled()) log.debug("Found parent node {}", value); UserData userData = value.getKey(); - if (log.isDebugEnabled()) { + if (log.isDebugEnabled()) log.debug("Build resource : set creator userId to {}", userData.getUserId()); - } String fullName = buildFullName(userData); if (log.isDebugEnabled()) log.debug("Build resource : set creator full name to {}", fullName); @@ -1310,7 +1170,7 @@ public class ResourceOperation extends ComponentOperation implements IResourceOp propertiesToMatch.put(GraphPropertiesDictionary.NAME.getProperty(), resourceName); Either<List<ResourceMetadataData>, TitanOperationStatus> getParentResources = titanGenericDao.getByCriteria(NodeTypeEnum.Resource, propertiesToMatch, ResourceMetadataData.class); - log.debug("result after searching for resources called " + resourceName + " is " + getParentResources); + log.debug("result after searching for resources called {} is {}", resourceName, getParentResources); if (getParentResources.isRight()) { TitanOperationStatus titanStatus = getParentResources.right().value(); if (titanStatus == TitanOperationStatus.NOT_FOUND) { @@ -1321,7 +1181,7 @@ public class ResourceOperation extends ComponentOperation implements IResourceOp } else { List<ResourceMetadataData> value = getParentResources.left().value(); int numberOFResources = (value == null ? 0 : value.size()); - log.debug("The number of resources returned after searching for resource called " + resourceName + " is " + numberOFResources); + log.debug("The number of resources returned after searching for resource called {} is {}", resourceName, numberOFResources); return Either.left(numberOFResources); } } @@ -1418,67 +1278,67 @@ public class ResourceOperation extends ComponentOperation implements IResourceOp if (iterator != null && iterator.hasNext()) { Vertex rootVertex = iterator.next(); TitanOperationStatus deleteChildrenNodes = graphDeleteUtil.deleteChildrenNodes(rootVertex, GraphEdgeLabels.PROPERTY); - log.debug("After deleting properties nodes in the graph. status is " + deleteChildrenNodes); + log.debug("After deleting properties nodes in the graph. status is {}", deleteChildrenNodes); if (deleteChildrenNodes != TitanOperationStatus.OK) { result = Either.right(DaoStatusConverter.convertTitanStatusToStorageStatus(deleteChildrenNodes)); return result; } StorageOperationStatus removeInterfacesFromResource = removeInterfacesFromResource(resource); - log.debug("After deleting interfaces nodes in the graph. status is " + removeInterfacesFromResource); + log.debug("After deleting interfaces nodes in the graph. status is {}", removeInterfacesFromResource); if (!removeInterfacesFromResource.equals(StorageOperationStatus.OK)) { result = Either.right(removeInterfacesFromResource); return result; } StorageOperationStatus removeArtifactsFromResource = removeArtifactsFromResource(resource); - log.debug("After deleting artifacts nodes in the graph. status is " + removeArtifactsFromResource); + log.debug("After deleting artifacts nodes in the graph. status is {}", removeArtifactsFromResource); if (!removeArtifactsFromResource.equals(StorageOperationStatus.OK)) { result = Either.right(removeArtifactsFromResource); return result; } StorageOperationStatus removeCapabilitiesFromResource = removeCapabilitiesFromResource(resource); - log.debug("After deleting capabilities nodes in the graph. status is " + removeCapabilitiesFromResource); + log.debug("After deleting capabilities nodes in the graph. status is {}", removeCapabilitiesFromResource); if (!removeCapabilitiesFromResource.equals(StorageOperationStatus.OK)) { result = Either.right(removeCapabilitiesFromResource); return result; } StorageOperationStatus removeRequirementsFromResource = removeRequirementsFromResource(resource); - log.debug("After deleting requirements nodes in the graph. status is " + removeRequirementsFromResource); + log.debug("After deleting requirements nodes in the graph. status is {}", removeRequirementsFromResource); if (!removeRequirementsFromResource.equals(StorageOperationStatus.OK)) { result = Either.right(removeRequirementsFromResource); return result; } StorageOperationStatus removeRIsFromResource = removeResourceInstanceFromResource(resource); - log.debug("After deleting resource instance nodes in the graph. status is " + removeRIsFromResource); + log.debug("After deleting resource instance nodes in the graph. status is {}", removeRIsFromResource); if (!removeRIsFromResource.equals(StorageOperationStatus.OK)) { result = Either.right(removeRIsFromResource); return result; } StorageOperationStatus removeAttributesFromResource = removeAttributesFromResource(resource); - log.debug("After deleting requirements nodes in the graph. status is " + removeRequirementsFromResource); + log.debug("After deleting requirements nodes in the graph. status is {}", removeRequirementsFromResource); if (removeAttributesFromResource != StorageOperationStatus.OK) { result = Either.right(removeAttributesFromResource); return result; } StorageOperationStatus removeInputsFromResource = removeInputsFromComponent(NodeTypeEnum.Resource, resource); - log.debug("After deleting requirements nodes in the graph. status is " + removeInputsFromResource); + log.debug("After deleting requirements nodes in the graph. status is {}", removeInputsFromResource); if (removeInputsFromResource != StorageOperationStatus.OK) { result = Either.right(removeInputsFromResource); return result; } StorageOperationStatus removeAdditionalInformationFromResource = super.deleteAdditionalInformation(NodeTypeEnum.Resource, resource.getUniqueId()); - log.debug("After deleting additional information node in the graph. status is " + removeAdditionalInformationFromResource); + log.debug("After deleting additional information node in the graph. status is {}", removeAdditionalInformationFromResource); if (!removeAdditionalInformationFromResource.equals(StorageOperationStatus.OK)) { result = Either.right(removeAdditionalInformationFromResource); return result; } StorageOperationStatus removeGroupsFromResource = super.deleteGroups(NodeTypeEnum.Resource, resource.getUniqueId()); - log.debug("After deleting group nodes in the graph. status is " + removeGroupsFromResource); + log.debug("After deleting group nodes in the graph. status is {}", removeGroupsFromResource); if (!removeGroupsFromResource.equals(StorageOperationStatus.OK)) { result = Either.right(removeGroupsFromResource); return result; @@ -1698,12 +1558,12 @@ public class ResourceOperation extends ComponentOperation implements IResourceOp categoryRelation.setFrom(relationEndPoint); Either<GraphRelation, TitanOperationStatus> deleteOutgoingRelation = titanGenericDao.deleteOutgoingRelation(categoryRelation); if (deleteOutgoingRelation.isRight()) { - log.error("Failed to delete category from resource " + resourceData.getUniqueId() + ". Edge type is " + GraphEdgeLabels.CATEGORY); + log.error("Failed to delete category from resource {}. Edge type is {}", resourceData.getUniqueId(), GraphEdgeLabels.CATEGORY); result = DaoStatusConverter.convertTitanStatusToStorageStatus(deleteOutgoingRelation.right().value()); return result; } - log.debug("After removing edge from graph " + deleteOutgoingRelation); + log.debug("After removing edge from graph {}", deleteOutgoingRelation); return assosiateMetadataToCategory(resource, resourceData); } @@ -1718,15 +1578,15 @@ public class ResourceOperation extends ComponentOperation implements IResourceOp lastModifierRelation.setTo(relationEndPoint); Either<GraphRelation, TitanOperationStatus> deleteIncomingRelation = titanGenericDao.deleteIncomingRelation(lastModifierRelation); if (deleteIncomingRelation.isRight()) { - log.error("Failed to delete user from resource " + resourceData.getUniqueId() + ". Edge type is " + GraphEdgeLabels.LAST_MODIFIER); + log.error("Failed to delete user from resource {}. Edge type is {}", resourceData.getUniqueId(),GraphEdgeLabels.LAST_MODIFIER); result = DaoStatusConverter.convertTitanStatusToStorageStatus(deleteIncomingRelation.right().value()); return result; } Either<GraphRelation, TitanOperationStatus> createRelation = titanGenericDao.createRelation(modifierUserData, resourceData, GraphEdgeLabels.LAST_MODIFIER, null); - log.debug("After associating user " + modifierUserData + " to resource " + resourceData.getUniqueId() + ". Edge type is " + GraphEdgeLabels.LAST_MODIFIER); + log.debug("After associating user {} to resource {}. Edge type is {}", modifierUserData, resourceData.getUniqueId(), GraphEdgeLabels.LAST_MODIFIER); if (createRelation.isRight()) { - log.error("Failed to associate user " + modifierUserData + " to resource " + resourceData.getUniqueId() + ". Edge type is " + GraphEdgeLabels.LAST_MODIFIER); + log.error("Failed to associate user {} to resource {}. Edge type is {}", modifierUserData, resourceData.getUniqueId(), GraphEdgeLabels.LAST_MODIFIER); result = DaoStatusConverter.convertTitanStatusToStorageStatus(createRelation.right().value()); return result; } @@ -1783,6 +1643,30 @@ public class ResourceOperation extends ComponentOperation implements IResourceOp public Either<Boolean, StorageOperationStatus> validateToscaResourceNameExists(String templateName) { return validateToscaResourceNameUniqueness(templateName, titanGenericDao); } + + //Tal G for US815447 + public Either<Boolean, StorageOperationStatus> validateToscaResourceNameExtends(String templateNameCurrent, String templateNameExtends) { + + String currentTemplateNameChecked = templateNameExtends; + + while(currentTemplateNameChecked != null && !currentTemplateNameChecked.equalsIgnoreCase(templateNameCurrent)){ + Either<Resource, StorageOperationStatus> latestByToscaResourceName = getLatestByToscaResourceName(currentTemplateNameChecked, true); + + if(latestByToscaResourceName.isRight()){ + return latestByToscaResourceName.right().value() == StorageOperationStatus.NOT_FOUND ? Either.left(false) : Either.right(latestByToscaResourceName.right().value()); + } + + Resource value = latestByToscaResourceName.left().value(); + + if(value.getDerivedFrom() != null){ + currentTemplateNameChecked = value.getDerivedFrom().get(0); + } else { + currentTemplateNameChecked = null; + } + } + + return (currentTemplateNameChecked != null && currentTemplateNameChecked.equalsIgnoreCase(templateNameCurrent)) ? Either.left(true) : Either.left(false); + } public Either<List<ArtifactDefinition>, StorageOperationStatus> getAdditionalArtifacts(String resourceId, boolean recursively, boolean inTransaction) { List<ArtifactDefinition> artifacts = new ArrayList<>(); @@ -1798,12 +1682,12 @@ public class ResourceOperation extends ComponentOperation implements IResourceOp for (Entry<String, InterfaceDefinition> entry : interfaces.entrySet()) { InterfaceDefinition interfaceDefinition = entry.getValue(); - Map<String, Operation> operations = interfaceDefinition.getOperations(); + Map<String, Operation> operations = interfaceDefinition.getOperationsMap(); if (operations != null && !operations.isEmpty()) { for (Entry<String, Operation> opEntry : operations.entrySet()) { Operation operation = opEntry.getValue(); - ArtifactDefinition artifactDefinition = operation.getImplementation(); + ArtifactDefinition artifactDefinition = operation.getImplementationArtifact(); if (artifactDefinition != null) { artifacts.add(artifactDefinition); } @@ -1825,6 +1709,13 @@ public class ResourceOperation extends ComponentOperation implements IResourceOp return (Either<T, StorageOperationStatus>) getResource(id, inTransaction); } + // @Override + // public <T> Either<T, StorageOperationStatus> getComponent_tx(String id, + // boolean inTransaction) { + // return (Either<T, StorageOperationStatus>) getResource_tx(id, + // inTransaction); + // } + private Optional<ImmutablePair<SubCategoryData, GraphEdge>> validateCategoryHierarcy(List<ImmutablePair<SubCategoryData, GraphEdge>> childNodes, String subCategoryName) { Predicate<ImmutablePair<SubCategoryData, GraphEdge>> matchName = p -> p.getLeft().getSubCategoryDataDefinition().getName().equals(subCategoryName); return childNodes.stream().filter(matchName).findAny(); @@ -1850,8 +1741,9 @@ public class ResourceOperation extends ComponentOperation implements IResourceOp String subCategoryName = filters.get(FilterKeyEnum.SUB_CATEGORY); String categoryName = filters.get(FilterKeyEnum.CATEGORY); + ResourceTypeEnum resourceType = ResourceTypeEnum.getType( filters.get(FilterKeyEnum.RESOURCE_TYPE)); Either<List<ImmutablePair<SubCategoryData, GraphEdge>>, StorageOperationStatus> subcategories = null; - Optional<ImmutablePair<SubCategoryData, GraphEdge>> subCategoryData = null; + Optional<ImmutablePair<SubCategoryData, GraphEdge>> subCategoryData; if (categoryName != null) { subcategories = getAllSubCategories(categoryName); @@ -1867,20 +1759,59 @@ public class ResourceOperation extends ComponentOperation implements IResourceOp return Either.right(StorageOperationStatus.MATCH_NOT_FOUND); } return fetchByCategoryOrSubCategoryUid((String) subCategoryData.get().getLeft().getUniqueId(), NodeTypeEnum.ResourceSubcategory, GraphEdgeLabels.SUB_CATEGORY.getProperty(), NodeTypeEnum.Resource, inTransaction, - ResourceMetadataData.class); + ResourceMetadataData.class, resourceType); } - return fetchByCategoryOrSubCategoryName(subCategoryName, NodeTypeEnum.ResourceSubcategory, GraphEdgeLabels.SUB_CATEGORY.getProperty(), NodeTypeEnum.Resource, inTransaction, ResourceMetadataData.class); + return fetchByCategoryOrSubCategoryName(subCategoryName, NodeTypeEnum.ResourceSubcategory, GraphEdgeLabels.SUB_CATEGORY.getProperty(), NodeTypeEnum.Resource, inTransaction, ResourceMetadataData.class, resourceType); } - return fetchByMainCategory(subcategories.left().value(), inTransaction); + if(subcategories != null){ + return fetchByMainCategory(subcategories.left().value(), inTransaction, resourceType); + } + return fetchByResourceType(NodeTypeEnum.Resource, filters.get(FilterKeyEnum.RESOURCE_TYPE), ResourceMetadataData.class, inTransaction); } - private <T> Either<List<T>, StorageOperationStatus> fetchByMainCategory(List<ImmutablePair<SubCategoryData, GraphEdge>> subcategories, boolean inTransaction) { + @SuppressWarnings("unchecked") + private <T, S extends ComponentMetadataData> Either<List<T>, StorageOperationStatus> fetchByResourceType(NodeTypeEnum nodeType, String resourceType, + Class<S> clazz, boolean inTransaction) { + List<T> components = null; + TitanOperationStatus status; + Wrapper<StorageOperationStatus> statusWrapper = new Wrapper<>(); + Either<List<T>, StorageOperationStatus> result; + try { + Map<String, Object> props = new HashMap<>(); + props.put(GraphPropertiesDictionary.RESOURCE_TYPE.getProperty(), resourceType); + props.put(GraphPropertiesDictionary.IS_HIGHEST_VERSION.getProperty(), true); + Either<List<S>, TitanOperationStatus> getResources = titanGenericDao.getByCriteria(nodeType, props, clazz); + if (getResources.isRight()) { + status = getResources.right().value(); + if(status != TitanOperationStatus.NOT_FOUND){ + statusWrapper.setInnerElement(DaoStatusConverter.convertTitanStatusToStorageStatus(status)); + }else{ + components = new ArrayList<>(); + } + }else{ + components = getResources.left().value().stream(). + map(c->(T)convertComponentMetadataDataToComponent(c)).collect(Collectors.toList()); + } + if(!statusWrapper.isEmpty()){ + result = Either.right(statusWrapper.getInnerElement()); + }else{ + result = Either.left(components); + } + return result; + } finally { + if (!inTransaction) { + titanGenericDao.commit(); + } + } + } + + private <T> Either<List<T>, StorageOperationStatus> fetchByMainCategory(List<ImmutablePair<SubCategoryData, GraphEdge>> subcategories, boolean inTransaction, ResourceTypeEnum resourceType) { List<T> components = new ArrayList<>(); for (ImmutablePair<SubCategoryData, GraphEdge> subCategory : subcategories) { Either<List<T>, StorageOperationStatus> fetched = fetchByCategoryOrSubCategoryUid((String) subCategory.getLeft().getUniqueId(), NodeTypeEnum.ResourceSubcategory, GraphEdgeLabels.SUB_CATEGORY.getProperty(), NodeTypeEnum.Resource, - inTransaction, ResourceMetadataData.class); + inTransaction, ResourceMetadataData.class, resourceType); if (fetched.isRight()) { // return fetched; continue; @@ -1906,6 +1837,52 @@ public class ResourceOperation extends ComponentOperation implements IResourceOp return getComponentCatalogData(NodeTypeEnum.Resource, propertiesToMatch, Resource.class, ResourceMetadataData.class, inTransaction); } + @Override + public Either<List<Resource>, StorageOperationStatus> getAllDerivedResources(Resource resource) { + try { + Either<List<ImmutablePair<ResourceMetadataData, GraphEdge>>, TitanOperationStatus> childrenNodes = getDerivingChildren(resource); + return childrenNodes.either((childrenPairs) -> convertToResources(PairUtils.leftSequence(childrenPairs)), + (status) -> Either.right(DaoStatusConverter.convertTitanStatusToStorageStatus(status))); + } finally { + titanGenericDao.commit(); + } + } + + @Override + public Either<List<Resource>, StorageOperationStatus> getRootResources() { + Map<String, Object> rootToscaResource = new HashMap<>(); + rootToscaResource.put(GraphPropertiesDictionary.TOSCA_RESOURCE_NAME.getProperty(), Resource.ROOT_RESOURCE); + return getResourceListByCriteria(rootToscaResource, false); + } + + @Override + public Either<List<Resource>, StorageOperationStatus> getVFResources() { + Map<String, Object> rootToscaResource = new HashMap<>(); + rootToscaResource.put(GraphPropertiesDictionary.RESOURCE_TYPE.getProperty(), ResourceTypeEnum.VF); + return getResourceListByCriteria(rootToscaResource, false); + } + + @Override + public Either<List<Resource>, StorageOperationStatus> getAll() { + Either<List<Resource>, StorageOperationStatus> resourceListByCriteria = getResourceListByCriteria(new HashMap<>(), false); + if (resourceListByCriteria.isRight() && resourceListByCriteria.right().value() == StorageOperationStatus.NOT_FOUND) { + return Either.left(Collections.emptyList()); + } + return resourceListByCriteria; + } + + + private Either<List<ImmutablePair<ResourceMetadataData, GraphEdge>>, TitanOperationStatus> getDerivingChildren(Resource resource) { + return titanGenericDao.getParentNodes(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.Resource), resource.getUniqueId(), GraphEdgeLabels.DERIVED_FROM, NodeTypeEnum.Resource, ResourceMetadataData.class); + } + + private Either<List<Resource>, StorageOperationStatus> convertToResources(List<ResourceMetadataData> resourcesMetaData) { + List<Either<Resource, StorageOperationStatus>> resources = resourcesMetaData.stream() + .map(resourceMetaData -> this.getResource(resourceMetaData.getMetadataDataDefinition().getUniqueId())) + .collect(Collectors.toList()); + return Either.sequenceLeft(fj.data.List.iterableList(resources)).bimap(fj.data.List::toJavaList, Function.identity()); + } + protected TitanOperationStatus findResourcesPathRecursively(String resourceId, List<ResourceMetadataData> resourcesPathList) { Either<ResourceMetadataData, TitanOperationStatus> nodeRes = this.titanGenericDao.getNode(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.Resource), resourceId, ResourceMetadataData.class); @@ -2106,7 +2083,7 @@ public class ResourceOperation extends ComponentOperation implements IResourceOp } long endFetchAllFromCache = System.currentTimeMillis(); - log.debug("Fetch all catalog resources metadata from cache took " + (endFetchAllFromCache - startFetchAllFromCache) + " ms"); + log.debug("Fetch all catalog resources metadata from cache took {} ms", (endFetchAllFromCache - startFetchAllFromCache)); long startFetchFromGraph = System.currentTimeMillis(); log.debug("The number of resources needed to be fetch as light component is {}", notCertifiedHighest.size()); @@ -2115,13 +2092,13 @@ public class ResourceOperation extends ComponentOperation implements IResourceOp log.trace("Fetch catalog resource non cached {} {}", uniqueId, data.getMetadataDataDefinition().getName()); Either<Resource, StorageOperationStatus> component = getLightComponent(uniqueId, inTransaction); if (component.isRight()) { - log.debug("Failed to get Service for id = " + data.getUniqueId() + " error : " + component.right().value() + " skip resource"); + log.debug("Failed to get Service for id = {} error : {} skip resource", data.getUniqueId(), component.right().value()); } else { result.add(component.left().value()); } } long endFetchFromGraph = System.currentTimeMillis(); - log.debug("Fetch catalog resources from graph took " + (endFetchFromGraph - startFetchFromGraph) + " ms"); + log.debug("Fetch catalog resources from graph took {} ms", (endFetchFromGraph - startFetchFromGraph)); return Either.left(result); @@ -2141,7 +2118,7 @@ public class ResourceOperation extends ComponentOperation implements IResourceOp return getResourceCatalogDataLatestCertifiedAndNonCertified(inTransaction, propertiesToMatch); } - private Either<List<Resource>, StorageOperationStatus> getResourceCatalogDataLatestCertifiedAndNonCertified(boolean inTransaction, Map<String, Object> otherToMatch) { + public Either<List<Resource>, StorageOperationStatus> getResourceCatalogDataLatestCertifiedAndNonCertified(boolean inTransaction, Map<String, Object> otherToMatch) { Map<String, Object> propertiesToMatch = new HashMap<>(); if (otherToMatch != null) { @@ -2169,7 +2146,7 @@ public class ResourceOperation extends ComponentOperation implements IResourceOp for (ResourceMetadataData data : listOfHighest) { Either<Resource, StorageOperationStatus> component = getLightComponent(data.getMetadataDataDefinition().getUniqueId(), inTransaction); if (component.isRight()) { - log.debug("Failed to get Service for id = " + data.getUniqueId() + " error : " + component.right().value() + " skip resource"); + log.debug("Failed to get Service for id = {} error : {} skip resource", data.getUniqueId(), component.right().value()); } else { result.add(component.left().value()); } @@ -2193,7 +2170,7 @@ public class ResourceOperation extends ComponentOperation implements IResourceOp if (resource.isLeft()) { resources.add(resource.left().value()); } else { - log.debug("Failed to fetch resource for name = " + data.getMetadataDataDefinition().getName() + " and id = " + data.getUniqueId()); + log.debug("Failed to fetch resource for name = {} and id = {}", data.getUniqueId(), data.getMetadataDataDefinition().getName()); } } return Either.left(resources); @@ -2253,16 +2230,11 @@ public class ResourceOperation extends ComponentOperation implements IResourceOp } List<ResourceMetadataData> dataList = byCriteria.left().value(); if (dataList != null && !dataList.isEmpty()) { - // if (dataList.size() > 1) { - // log.debug("More that one instance of resource for name =" + - // nameValue + " and version = " + version); - // return Either.right(StorageOperationStatus.GENERAL_ERROR); - // } for (ResourceMetadataData resourceData : dataList) { // ResourceMetadataData resourceData = dataList.get(0); Either<Resource, StorageOperationStatus> resource = getResource(resourceData.getMetadataDataDefinition().getUniqueId(), inTransaction); if (resource.isRight()) { - log.debug("Failed to fetch resource for name = " + resourceData.getMetadataDataDefinition().getName() + " and id = " + resourceData.getUniqueId()); + log.debug("Failed to fetch resource for name = {} and id = {}", resourceData.getMetadataDataDefinition().getName(), resourceData.getUniqueId()); return Either.right(resource.right().value()); } resourcesList.add(resource.left().value()); @@ -2287,7 +2259,7 @@ public class ResourceOperation extends ComponentOperation implements IResourceOp } List<Resource> resourcesList = byNamesAndVersion.left().value(); if (resourcesList.size() > 1) { - log.debug("More that one instance of resource for name =" + name + " and version = " + version); + log.debug("More that one instance of resource for name = {} and version = {}", name, version); return Either.right(StorageOperationStatus.GENERAL_ERROR); } return Either.left(resourcesList.get(0)); @@ -2345,7 +2317,7 @@ public class ResourceOperation extends ComponentOperation implements IResourceOp try { - log.debug("In updateResource. received resource = " + (resource == null ? null : resource.toString())); + log.debug("In updateResource. received resource = {}", (resource == null ? null : resource.toString())); if (resource == null) { log.error("Resource object is null"); result = Either.right(StorageOperationStatus.BAD_REQUEST); @@ -2355,7 +2327,7 @@ public class ResourceOperation extends ComponentOperation implements IResourceOp ResourceMetadataData resourceData = new ResourceMetadataData(); resourceData.getMetadataDataDefinition().setUniqueId(resource.getUniqueId()); resourceData.getMetadataDataDefinition().setHighestVersion(resource.isHighestVersion()); - log.debug("After converting resource to ResourceData. ResourceData = " + resourceData); + log.debug("After converting resource to ResourceData. ResourceData = {}", resourceData); if (resourceData.getUniqueId() == null) { log.error("Resource id is missing in the request."); @@ -2365,14 +2337,14 @@ public class ResourceOperation extends ComponentOperation implements IResourceOp Either<ResourceMetadataData, TitanOperationStatus> updateNode = titanGenericDao.updateNode(resourceData, ResourceMetadataData.class); if (updateNode.isRight()) { - log.error("Failed to update resource " + resource.getUniqueId() + ". status is " + updateNode.right().value()); + log.error("Failed to update resource {}. status is {}", resource.getUniqueId(), updateNode.right().value()); result = Either.right(DaoStatusConverter.convertTitanStatusToStorageStatus(updateNode.right().value())); return result; } Either<Resource, StorageOperationStatus> updatedResource = getResource(resource.getUniqueId(), true); if (updatedResource.isRight()) { - log.error("Resource id is missing in the request. status is " + updatedResource.right().value()); + log.error("Resource id is missing in the request. status is {}", updatedResource.right().value()); result = Either.right(StorageOperationStatus.BAD_REQUEST); return result; } @@ -2382,7 +2354,7 @@ public class ResourceOperation extends ComponentOperation implements IResourceOp if (log.isDebugEnabled()) { String json = prettyJson.toJson(result.left().value()); - log.debug("Resource retrieved after update is " + json); + log.debug("Resource retrieved after update is {}", json); } return result; @@ -2430,7 +2402,7 @@ public class ResourceOperation extends ComponentOperation implements IResourceOp for (ResourceMetadataData resourceData : resourceDataList) { Either<Resource, StorageOperationStatus> resource = getResource(resourceData.getMetadataDataDefinition().getUniqueId()); if (resource.isRight()) { - log.debug("Failed to fetch resource for id = " + resourceData.getUniqueId() + " error is " + resource.right().value()); + log.debug("Failed to fetch resource for id = {} error is {}", resourceData.getUniqueId(), resource.right().value()); return Either.right(resource.right().value()); } result.add(resource.left().value()); @@ -2539,20 +2511,21 @@ public class ResourceOperation extends ComponentOperation implements IResourceOp } other.setVersion(version); other.setUniqueId(null); - + List<InputDefinition> inputs = other.getInputs(); Map<String, List<ComponentInstanceProperty>> inputsPropMap = new HashMap<String, List<ComponentInstanceProperty>>(); - - if (inputs != null) { - for (InputDefinition input : inputs) { - - Either<List<ComponentInstanceProperty>, TitanOperationStatus> inputPropStatus = inputOperation.getComponentInstancePropertiesByInputId(input.getUniqueId()); - if (inputPropStatus.isLeft()) { - if (inputPropStatus.left().value() != null) + + if(inputs != null){ + for(InputDefinition input: inputs){ + + Either<List<ComponentInstanceProperty>, TitanOperationStatus> inputPropStatus = inputOperation.getComponentInstancePropertiesByInputId(input.getUniqueId()); + if(inputPropStatus.isLeft()){ + if(inputPropStatus.left().value() != null) inputsPropMap.put(input.getName(), inputPropStatus.left().value()); - + } - + + } } @@ -2607,15 +2580,10 @@ public class ResourceOperation extends ComponentOperation implements IResourceOp result = this.getResource(resource.getUniqueId(), true); if (result.isRight()) { - log.error("Cannot get full service from the graph. status is " + result.right().value()); + log.error("Cannot get full service from the graph. status is {}", result.right().value()); return Either.right(result.right().value()); } - if (log.isDebugEnabled()) { - String json = prettyJson.toJson(result.left().value()); - // log.debug("Resource retrieved is {}", json); - } - return result; } finally { if (false == inTransaction) { @@ -2713,13 +2681,13 @@ public class ResourceOperation extends ComponentOperation implements IResourceOp SubCategoryDefinition currSubcategory = currentCategory.getSubcategories().get(0); SubCategoryDefinition newSubcategory = newCategory.getSubcategories().get(0); if (newSubcategory.getName() != null && false == newSubcategory.getName().equals(currSubcategory.getName())) { - log.debug("Going to update the category of the resource from " + currentCategory + " to " + newCategory); + log.debug("Going to update the category of the resource from {} to {}", currentCategory, newCategory); categoryWasChanged = true; } } if (categoryWasChanged) { status = moveCategoryEdge((Resource) component, (ResourceMetadataData) componentData, newCategory); - log.debug("Going to update the category of the resource from " + currentCategory + " to " + newCategory + ". status is " + status); + log.debug("Going to update the category of the resource from {} to {}. status is {}", currentCategory, newCategory, status); } return status; } @@ -2810,7 +2778,12 @@ public class ResourceOperation extends ComponentOperation implements IResourceOp List<ResourceMetadataData> resourceMetadataDataList = null; Either<List<ResourceMetadataData>, TitanOperationStatus> byCsar = titanGenericDao.getByCriteria(NodeTypeEnum.Resource, props, ResourceMetadataData.class); if (byCsar.isRight()) { - if (TitanOperationStatus.NOT_FOUND.equals(byCsar.right().value())) { + if (TitanOperationStatus.NOT_FOUND == byCsar.right().value()) { + //Fix Defect DE256036 + if( StringUtils.isEmpty(systemName)){ + return Either.right(DaoStatusConverter.convertTitanStatusToStorageStatus(TitanOperationStatus.NOT_FOUND)); + } + props.clear(); props.put(GraphPropertiesDictionary.IS_HIGHEST_VERSION.getProperty(), true); props.put(GraphPropertiesDictionary.SYSTEM_NAME.getProperty(), systemName); @@ -2820,7 +2793,7 @@ public class ResourceOperation extends ComponentOperation implements IResourceOp return Either.right(DaoStatusConverter.convertTitanStatusToStorageStatus(bySystemname.right().value())); } if (bySystemname.left().value().size() > 2) { - log.debug("getLatestResourceByCsarOrName - getByCriteria(by system name) must return only 2 latest version, but was returned - " + bySystemname.left().value().size()); + log.debug("getLatestResourceByCsarOrName - getByCriteria(by system name) must return only 2 latest version, but was returned - {}", bySystemname.left().value().size()); return Either.right(StorageOperationStatus.GENERAL_ERROR); } resourceMetadataDataList = bySystemname.left().value(); @@ -2850,7 +2823,7 @@ public class ResourceOperation extends ComponentOperation implements IResourceOp } else { resourceMetadataDataList = byCsar.left().value(); if (resourceMetadataDataList.size() > 2) { - log.debug("getLatestResourceByCsarOrName - getByCriteria(by csar) must return only 2 latest version, but was returned - " + byCsar.left().value().size()); + log.debug("getLatestResourceByCsarOrName - getByCriteria(by csar) must return only 2 latest version, but was returned - {}", byCsar.left().value().size()); return Either.right(StorageOperationStatus.GENERAL_ERROR); } if (resourceMetadataDataList.size() == 1) { @@ -2889,7 +2862,7 @@ public class ResourceOperation extends ComponentOperation implements IResourceOp return Either.left(byCsar.left().value()); } - private Either<Resource, StorageOperationStatus> getResource(String uniqueId, ComponentParametersView componentParametersView, boolean inTransaction) { + public Either<Resource, StorageOperationStatus> getResource(String uniqueId, ComponentParametersView componentParametersView, boolean inTransaction) { Resource resource = null; try { @@ -2971,7 +2944,7 @@ public class ResourceOperation extends ComponentOperation implements IResourceOp if (false == componentParametersView.isIgnoreRequirements()) { StorageOperationStatus setRequirementsStatus = setResourceRequirementsFromGraph(uniqueId, resource, true); if (setRequirementsStatus != StorageOperationStatus.OK) { - log.error("Failed to set requirement of resource " + uniqueId + ". status is " + setRequirementsStatus); + log.error("Failed to set requirement of resource {}. status is {}", uniqueId, setRequirementsStatus); return Either.right(setRequirementsStatus); } } @@ -2979,7 +2952,7 @@ public class ResourceOperation extends ComponentOperation implements IResourceOp if (false == componentParametersView.isIgnoreInputs()) { status = setComponentInputsFromGraph(uniqueId, resource, true); if (status != TitanOperationStatus.OK) { - log.error("Failed to set inputs of resource " + uniqueId + ". status is " + status); + log.error("Failed to set inputs of resource {}. status is {}", uniqueId, status); return Either.right(DaoStatusConverter.convertTitanStatusToStorageStatus(status)); } @@ -3008,7 +2981,7 @@ public class ResourceOperation extends ComponentOperation implements IResourceOp } if (false == componentParametersView.isIgnoreComponentInstancesProperties()) { - status = setComponentInstancesPropertiesFromGraph(uniqueId, resource); + status = setComponentInstancesPropertiesFromGraph(resource); if (status != TitanOperationStatus.OK) { return Either.right(DaoStatusConverter.convertTitanStatusToStorageStatus(status)); |