diff options
Diffstat (limited to 'src/main/java/org/onap/sdc/tosca/parser/elements/queries')
6 files changed, 227 insertions, 33 deletions
diff --git a/src/main/java/org/onap/sdc/tosca/parser/elements/queries/AllEntitiesQuery.java b/src/main/java/org/onap/sdc/tosca/parser/elements/queries/AllEntitiesQuery.java new file mode 100644 index 0000000..7c1cd25 --- /dev/null +++ b/src/main/java/org/onap/sdc/tosca/parser/elements/queries/AllEntitiesQuery.java @@ -0,0 +1,46 @@ +package org.onap.sdc.tosca.parser.elements.queries; + +import com.google.common.collect.Lists; +import org.onap.sdc.tosca.parser.api.IEntityDetails; +import org.onap.sdc.tosca.parser.enums.EntityTemplateType; +import org.onap.sdc.toscaparser.api.NodeTemplate; +import org.onap.sdc.toscaparser.api.ToscaTemplate; + +import java.util.List; + +/** + * Implements EntityQuery object for NodeTemplates, Groups and Policies + */ + +public class AllEntitiesQuery extends EntityQuery { + + AllEntitiesQuery() { + super(EntityTemplateType.ALL, null, null); + } + + @Override + public List<IEntityDetails> getEntitiesFromTopologyTemplate(NodeTemplate nodeTemplate) { + List<IEntityDetails> allEntities = Lists.newArrayList(); + if (nodeTemplate.getSubMappingToscaTemplate() != null) { + allEntities.addAll(GroupEntityQuery.convertGroupLisToEntityDetailsList(nodeTemplate.getSubMappingToscaTemplate().getGroups().stream())); + allEntities.addAll(NodeTemplateEntityQuery.convertNodeTemplatesListToEntityDetailsList(nodeTemplate.getSubMappingToscaTemplate().getNodeTemplates().stream())); + } + if (nodeTemplate.getOriginComponentTemplate() != null) { + allEntities.addAll(PolicyEntityQuery.convertPolicyLisToEntityDetailsList(nodeTemplate.getOriginComponentTemplate().getPolicies().stream())); + } + return allEntities; + } + + + @Override + public List<IEntityDetails> getEntitiesFromService(ToscaTemplate toscaTemplate) { + List<IEntityDetails> allEntities = Lists.newArrayList(); + allEntities.addAll(GroupEntityQuery.convertGroupLisToEntityDetailsList(toscaTemplate.getGroups().stream())); + allEntities.addAll(NodeTemplateEntityQuery.convertNodeTemplatesListToEntityDetailsList(toscaTemplate.getNodeTemplates().stream())); + allEntities.addAll(PolicyEntityQuery.convertPolicyLisToEntityDetailsList(toscaTemplate.getPolicies().stream())); + return allEntities; + } + +} + + diff --git a/src/main/java/org/onap/sdc/tosca/parser/elements/queries/EntityQuery.java b/src/main/java/org/onap/sdc/tosca/parser/elements/queries/EntityQuery.java index ba17423..167a568 100644 --- a/src/main/java/org/onap/sdc/tosca/parser/elements/queries/EntityQuery.java +++ b/src/main/java/org/onap/sdc/tosca/parser/elements/queries/EntityQuery.java @@ -1,11 +1,17 @@ package org.onap.sdc.tosca.parser.elements.queries; -import org.apache.commons.lang3.StringUtils; +import org.onap.sdc.tosca.parser.api.IEntityDetails; import org.onap.sdc.tosca.parser.enums.EntityTemplateType; import org.onap.sdc.tosca.parser.enums.SdcTypes; -import org.onap.sdc.toscaparser.api.EntityTemplate; +import org.onap.sdc.tosca.parser.impl.SdcPropertyNames; +import org.onap.sdc.toscaparser.api.NodeTemplate; +import org.onap.sdc.toscaparser.api.ToscaTemplate; +import org.onap.sdc.toscaparser.api.elements.Metadata; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.util.List; +import java.util.Objects; /** * This class describes an entity searched and retrieved by SDC Tosca Parser API @@ -13,6 +19,8 @@ import java.util.List; */ public abstract class EntityQuery { + private static final Logger logger = LoggerFactory.getLogger(EntityQuery.class.getName()); + private final EntityTemplateType entityType; private final SdcTypes nodeTemplateType; @@ -37,9 +45,9 @@ public abstract class EntityQuery { this.customizationUUID = customizationUUID; } - public abstract List<EntityTemplate> searchByTopologyTemplate(TopologyTemplateQuery topologyTemplateQuery); + public abstract List<IEntityDetails> getEntitiesFromTopologyTemplate(NodeTemplate nodeTemplate); - public abstract EntityTemplateType getType(); + public abstract List<IEntityDetails> getEntitiesFromService(ToscaTemplate toscaTemplate); public EntityTemplateType getEntityType() { return entityType; @@ -61,8 +69,19 @@ public abstract class EntityQuery { return customizationUUID; } - public boolean searchAllEntities() { - return StringUtils.isEmpty(toscaType) && nodeTemplateType == null; + boolean isSearchCriteriaMatched(Metadata metadata, String toscaType, String uuidKeyName, String cuuidKeyName) { + return Objects.nonNull(metadata) + && isStringMatchingOrNull(metadata.getValue(uuidKeyName), getUUID()) + && isStringMatchingOrNull(metadata.getValue(cuuidKeyName), getCustomizationUUID()) + && isStringMatchingOrNull(toscaType, getToscaType()); + } + + boolean isSearchCriteriaMatched(Metadata metadata, String toscaType) { + return isSearchCriteriaMatched(metadata, toscaType, SdcPropertyNames.PROPERTY_NAME_UUID, SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID); + } + + static boolean isStringMatchingOrNull(String currentUid, String uidInQuery) { + return uidInQuery == null || uidInQuery.equals(currentUid); } public static EntityQueryBuilder newBuilder(EntityTemplateType entityTemplateType) { @@ -73,6 +92,12 @@ public abstract class EntityQuery { return new EntityQueryBuilder(sdcType); } + @Override + public String toString() { + return String.format("EntityType=%s, nodeTemplateType=%s, toscaType=%s, uUID=%s, customizationUUID=%s", + entityType, nodeTemplateType, toscaType, uUID, customizationUUID); + } + public static EntityQueryBuilder newBuilder(String toscaType) { return new EntityQueryBuilder(toscaType); } @@ -97,8 +122,13 @@ public abstract class EntityQuery { case POLICY: entityQuery = new PolicyEntityQuery(); break; + case ALL: + entityQuery = new AllEntitiesQuery(); + break; default: - throw new IllegalArgumentException("Wrong entity query type: " + entityTemplateType); + String wrongTypeMsg = (String.format("Wrong entity query type: %s", entityTemplateType)); + logger.error(wrongTypeMsg); + throw new IllegalArgumentException(wrongTypeMsg); } } diff --git a/src/main/java/org/onap/sdc/tosca/parser/elements/queries/GroupEntityQuery.java b/src/main/java/org/onap/sdc/tosca/parser/elements/queries/GroupEntityQuery.java index 37a3ccd..8b1cd25 100644 --- a/src/main/java/org/onap/sdc/tosca/parser/elements/queries/GroupEntityQuery.java +++ b/src/main/java/org/onap/sdc/tosca/parser/elements/queries/GroupEntityQuery.java @@ -1,30 +1,55 @@ package org.onap.sdc.tosca.parser.elements.queries; +import com.google.common.collect.Lists; +import org.onap.sdc.tosca.parser.api.IEntityDetails; +import org.onap.sdc.tosca.parser.elements.EntityDetailsFactory; import org.onap.sdc.tosca.parser.enums.EntityTemplateType; -import org.onap.sdc.toscaparser.api.EntityTemplate; +import org.onap.sdc.toscaparser.api.Group; +import org.onap.sdc.toscaparser.api.NodeTemplate; +import org.onap.sdc.toscaparser.api.ToscaTemplate; import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; /** * Implements EntityQuery object for Groups */ public class GroupEntityQuery extends EntityQuery { - public GroupEntityQuery() { + private static final String VF_MODULE_UUID = "vfModuleModelUUID"; + private static final String VF_MODULE_CUSTOMIZATION_UUID = "vfModuleModelCustomizationUUID"; + + GroupEntityQuery() { super(EntityTemplateType.GROUP, null, null); } @Override - public List<EntityTemplate> searchByTopologyTemplate(TopologyTemplateQuery topologyTemplateQuery) { - return null; + public List<IEntityDetails> getEntitiesFromTopologyTemplate(NodeTemplate nodeTemplate) { + if (nodeTemplate.getSubMappingToscaTemplate() != null) { + return convertGroupLisToEntityDetailsList(filter(nodeTemplate.getSubMappingToscaTemplate().getGroups())); + } + return Lists.newArrayList(); } @Override - public EntityTemplateType getType() { - return EntityTemplateType.GROUP; + public List<IEntityDetails> getEntitiesFromService(ToscaTemplate toscaTemplate) { + return convertGroupLisToEntityDetailsList(filter(toscaTemplate.getGroups())); } - public GroupEntityQuery(String toscaType) { + GroupEntityQuery(String toscaType) { super(EntityTemplateType.GROUP, null, toscaType); } + + static List<IEntityDetails> convertGroupLisToEntityDetailsList(Stream<Group> groups) { + return groups.map(gr->EntityDetailsFactory.createEntityDetails(EntityTemplateType.GROUP, gr)) + .collect(Collectors.toList()); + } + + private Stream<Group> filter(List<Group> groupList) { + return groupList.stream() + .filter(gr->isSearchCriteriaMatched(gr.getMetadata(), gr.getType()) || + isSearchCriteriaMatched(gr.getMetadata(), gr.getType(), VF_MODULE_UUID, VF_MODULE_CUSTOMIZATION_UUID)); + } + } diff --git a/src/main/java/org/onap/sdc/tosca/parser/elements/queries/NodeTemplateEntityQuery.java b/src/main/java/org/onap/sdc/tosca/parser/elements/queries/NodeTemplateEntityQuery.java index 4e01bd8..b5a7a2e 100644 --- a/src/main/java/org/onap/sdc/tosca/parser/elements/queries/NodeTemplateEntityQuery.java +++ b/src/main/java/org/onap/sdc/tosca/parser/elements/queries/NodeTemplateEntityQuery.java @@ -1,34 +1,61 @@ package org.onap.sdc.tosca.parser.elements.queries; +import com.google.common.collect.Lists; +import org.onap.sdc.tosca.parser.api.IEntityDetails; +import org.onap.sdc.tosca.parser.elements.EntityDetailsFactory; import org.onap.sdc.tosca.parser.enums.EntityTemplateType; import org.onap.sdc.tosca.parser.enums.SdcTypes; -import org.onap.sdc.toscaparser.api.EntityTemplate; +import org.onap.sdc.tosca.parser.impl.SdcPropertyNames; +import org.onap.sdc.toscaparser.api.NodeTemplate; +import org.onap.sdc.toscaparser.api.ToscaTemplate; import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; /** * Implements EntityQuery object for NodeTemplates */ public class NodeTemplateEntityQuery extends EntityQuery { - public NodeTemplateEntityQuery() { + NodeTemplateEntityQuery() { super(EntityTemplateType.NODE_TEMPLATE, null, null); } + NodeTemplateEntityQuery(SdcTypes nodeTemplateType) { + super(EntityTemplateType.NODE_TEMPLATE, nodeTemplateType, null); + } + + NodeTemplateEntityQuery(String toscaType) { + super(EntityTemplateType.NODE_TEMPLATE, null, toscaType); + } + @Override - public EntityTemplateType getType() { - return EntityTemplateType.NODE_TEMPLATE; + public List<IEntityDetails> getEntitiesFromTopologyTemplate(NodeTemplate nodeTemplate) { + if (nodeTemplate.getSubMappingToscaTemplate() != null) { + return convertNodeTemplatesListToEntityDetailsList(filter(nodeTemplate.getSubMappingToscaTemplate() + .getNodeTemplates())); + } + return Lists.newArrayList(); } @Override - public List<EntityTemplate> searchByTopologyTemplate(TopologyTemplateQuery topologyTemplateQuery) { - return null; + public List<IEntityDetails> getEntitiesFromService(ToscaTemplate toscaTemplate) { + return convertNodeTemplatesListToEntityDetailsList(filter(toscaTemplate.getNodeTemplates())); } - public NodeTemplateEntityQuery(SdcTypes nodeTemplateType) { - super(EntityTemplateType.NODE_TEMPLATE, nodeTemplateType, null); + static List<IEntityDetails> convertNodeTemplatesListToEntityDetailsList(Stream<NodeTemplate> nodeTemplates) { + return nodeTemplates + .map(nt->EntityDetailsFactory.createEntityDetails(EntityTemplateType.NODE_TEMPLATE, nt)) + .collect(Collectors.toList()); } - public NodeTemplateEntityQuery(String toscaType) { - super(EntityTemplateType.NODE_TEMPLATE, null, toscaType); + private Stream<NodeTemplate> filter(List<NodeTemplate> nodeTemplateList) { + return nodeTemplateList.stream() + .filter(nt->isSearchCriteriaMatched(nt.getMetaData(), nt.getType())) + .filter(nt->getNodeTemplateType() == null || + isStringMatchingOrNull(nt.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_TYPE), + getNodeTemplateType().getValue())); } + + } diff --git a/src/main/java/org/onap/sdc/tosca/parser/elements/queries/PolicyEntityQuery.java b/src/main/java/org/onap/sdc/tosca/parser/elements/queries/PolicyEntityQuery.java index 8ab5e4c..2a0a0ab 100644 --- a/src/main/java/org/onap/sdc/tosca/parser/elements/queries/PolicyEntityQuery.java +++ b/src/main/java/org/onap/sdc/tosca/parser/elements/queries/PolicyEntityQuery.java @@ -1,30 +1,52 @@ package org.onap.sdc.tosca.parser.elements.queries; +import com.google.common.collect.Lists; +import org.onap.sdc.tosca.parser.api.IEntityDetails; +import org.onap.sdc.tosca.parser.elements.EntityDetailsFactory; import org.onap.sdc.tosca.parser.enums.EntityTemplateType; -import org.onap.sdc.toscaparser.api.EntityTemplate; +import org.onap.sdc.toscaparser.api.NodeTemplate; +import org.onap.sdc.toscaparser.api.Policy; +import org.onap.sdc.toscaparser.api.ToscaTemplate; import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; /** * Implements EntityQuery object for Policies */ public class PolicyEntityQuery extends EntityQuery { - public PolicyEntityQuery() { + PolicyEntityQuery() { super(EntityTemplateType.POLICY, null, null); } + PolicyEntityQuery(String toscaType) { + super(EntityTemplateType.POLICY, null, toscaType); + } + @Override - public List<EntityTemplate> searchByTopologyTemplate(TopologyTemplateQuery topologyTemplateQuery) { - return null; + public List<IEntityDetails> getEntitiesFromTopologyTemplate(NodeTemplate nodeTemplate) { + if (nodeTemplate.getOriginComponentTemplate() != null) { + return convertPolicyLisToEntityDetailsList(filter(nodeTemplate.getOriginComponentTemplate().getPolicies())); + } + return Lists.newArrayList(); } @Override - public EntityTemplateType getType() { - return EntityTemplateType.POLICY; + public List<IEntityDetails> getEntitiesFromService(ToscaTemplate toscaTemplate) { + return convertPolicyLisToEntityDetailsList(filter(toscaTemplate.getPolicies())); } - public PolicyEntityQuery(String toscaType) { - super(EntityTemplateType.POLICY, null, toscaType); + static List<IEntityDetails> convertPolicyLisToEntityDetailsList(Stream<Policy> policies) { + return policies + .map(p->EntityDetailsFactory.createEntityDetails(EntityTemplateType.POLICY, p)) + .collect(Collectors.toList()); } + + private Stream<Policy> filter(List<Policy> policyList) { + return policyList.stream() + .filter(p->isSearchCriteriaMatched(p.getMetaDataObj(), p.getType())); + } + } diff --git a/src/main/java/org/onap/sdc/tosca/parser/elements/queries/TopologyTemplateQuery.java b/src/main/java/org/onap/sdc/tosca/parser/elements/queries/TopologyTemplateQuery.java index 47b10a8..668345c 100644 --- a/src/main/java/org/onap/sdc/tosca/parser/elements/queries/TopologyTemplateQuery.java +++ b/src/main/java/org/onap/sdc/tosca/parser/elements/queries/TopologyTemplateQuery.java @@ -1,14 +1,22 @@ package org.onap.sdc.tosca.parser.elements.queries; import org.onap.sdc.tosca.parser.enums.SdcTypes; +import org.onap.sdc.tosca.parser.impl.SdcPropertyNames; +import org.onap.sdc.toscaparser.api.NodeTemplate; +import org.onap.sdc.toscaparser.api.elements.Metadata; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Objects; /** * This class describes a node template instance containing an entity searched and retrieved by SDC Tosca Parser API * It is used as the API input parameter. See the {@link org.onap.sdc.tosca.parser.api.ISdcCsarHelper} */ public class TopologyTemplateQuery { + private static final Logger logger = LoggerFactory.getLogger(TopologyTemplateQuery.class.getName()); - public void setCustomizationUUID(String customizationUUID) { + void setCustomizationUUID(String customizationUUID) { this.customizationUUID = customizationUUID; } @@ -21,6 +29,11 @@ public class TopologyTemplateQuery { } public static TopologyTemplateQueryBuilder newBuilder(SdcTypes sdcType) { + if (!SdcTypes.isComplex(sdcType.getValue())) { + String wrongTypeMsg = (String.format("Given type is not Topology template %s", sdcType)); + logger.error(wrongTypeMsg); + throw new IllegalArgumentException(wrongTypeMsg); + } return new TopologyTemplateQueryBuilder(sdcType); } @@ -32,6 +45,37 @@ public class TopologyTemplateQuery { return customizationUUID; } + public Boolean isMatchingSearchCriteria(NodeTemplate nodeTemplate) { + boolean isMatched = Objects.nonNull(nodeTemplate.getMetaData()) && isSearchedTemplate(nodeTemplate.getMetaData()); + if(logger.isDebugEnabled()) { + logger.debug("Node template {} is{} matching search criteria", nodeTemplate.getName(), isMatched ? "" : " not"); + } + return isMatched; + } + + public boolean isSameSdcType(Metadata metadata) { + final String nodeType = metadata.getValue(SdcPropertyNames.PROPERTY_NAME_TYPE); + return Objects.nonNull(nodeType) && ( + sdcType.getValue().equals(nodeType) || isServiceSearched(nodeType)); + } + + private boolean isSearchedTemplate(Metadata metadata) { + return isSameSdcType(metadata) && + (sdcType == SdcTypes.SERVICE || + //don't check customizationUUID for service + EntityQuery.isStringMatchingOrNull(metadata.getValue(SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID), + getCustomizationUUID())); + } + + private boolean isServiceSearched(String nodeType) { + return sdcType == SdcTypes.SERVICE && SdcTypes.isComplex(nodeType); + } + + @Override + public String toString() { + return String.format("sdcType=%s, customizationUUID=%s", sdcType.getValue(), customizationUUID); + } + public static class TopologyTemplateQueryBuilder { private TopologyTemplateQuery topologyTemplateQuery; private TopologyTemplateQueryBuilder(SdcTypes sdcType) { topologyTemplateQuery = new TopologyTemplateQuery(sdcType);} |