diff options
Diffstat (limited to 'src/main/java/org/onap/sdc/tosca/parser/elements')
11 files changed, 325 insertions, 69 deletions
diff --git a/src/main/java/org/onap/sdc/tosca/parser/elements/EntityDetails.java b/src/main/java/org/onap/sdc/tosca/parser/elements/EntityDetails.java index 91c7144..2567700 100644 --- a/src/main/java/org/onap/sdc/tosca/parser/elements/EntityDetails.java +++ b/src/main/java/org/onap/sdc/tosca/parser/elements/EntityDetails.java @@ -2,23 +2,24 @@ package org.onap.sdc.tosca.parser.elements; import org.onap.sdc.tosca.parser.api.IEntityDetails; import org.onap.sdc.tosca.parser.enums.EntityTemplateType; +import org.onap.sdc.toscaparser.api.CapabilityAssignment; import org.onap.sdc.toscaparser.api.EntityTemplate; -import org.onap.sdc.toscaparser.api.NodeTemplate; import org.onap.sdc.toscaparser.api.Property; +import org.onap.sdc.toscaparser.api.RequirementAssignment; -import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; public abstract class EntityDetails implements IEntityDetails { private final EntityTemplate entityTemplate; + private final IEntityDetails parentNodeTemplate; - private final IEntityDetails parentNode; - - EntityDetails(EntityTemplate entityTemplate, NodeTemplate parentNode) { + EntityDetails(EntityTemplate entityTemplate) { this.entityTemplate = entityTemplate; - this.parentNode = EntityDetailsFactory.createEntityDetails(EntityTemplateType.NODE_TEMPLATE, parentNode, null); + this.parentNodeTemplate = EntityDetailsFactory.createEntityDetails(EntityTemplateType.NODE_TEMPLATE, entityTemplate.getParentNodeTemplate()); } @Override @@ -36,27 +37,54 @@ public abstract class EntityDetails implements IEntityDetails { } @Override - public List<Property> getPropertyList() { - return entityTemplate.getPropertiesObjects(); + public List<IEntityDetails> getMemberNodes() { + return Collections.emptyList(); } @Override - public List<IEntityDetails> getMemberNodes() { - List<IEntityDetails> ntList = new ArrayList<>(); - ntList.add(getParent()); - return ntList; + public IEntityDetails getParent() { + return parentNodeTemplate; } @Override - public IEntityDetails getParent() { - //todo - update after adding parent to the EntityTemplate class - return parentNode; + public Map<String, RequirementAssignment> getRequirements() { + return entityTemplate.getRequirements() + .getAll() + .stream() + .collect(Collectors.toMap(RequirementAssignment::getName, ra->ra)); + } + + @Override + public Map<String, CapabilityAssignment> getCapabilities() { + return entityTemplate.getCapabilities() + .getAll() + .stream() + .collect(Collectors.toMap(CapabilityAssignment::getName, ca->ca)); + } + + @Override + public List<String> getTargets() { + return Collections.emptyList(); + } + + @Override + public List<IEntityDetails> getTargetNodes() { + return Collections.emptyList(); } @Override public String getPath() { - //todo - update after adding parent to the EntityTemplate class - return "jenny vTSBC vlan VNF 0#abstract_ssc#ssc_ssc_avpn_port_0"; + StringBuilder pathBld = new StringBuilder(""); + EntityTemplate currentEntityParent = entityTemplate.getParentNodeTemplate(); + + while (currentEntityParent != null) { + if (pathBld.length() != 0) { + pathBld.insert(0,"#"); + } + pathBld.insert(0, currentEntityParent.getName()); + currentEntityParent = currentEntityParent.getParentNodeTemplate(); + } + return pathBld.toString(); } diff --git a/src/main/java/org/onap/sdc/tosca/parser/elements/EntityDetailsFactory.java b/src/main/java/org/onap/sdc/tosca/parser/elements/EntityDetailsFactory.java index 65968b8..e8477c6 100644 --- a/src/main/java/org/onap/sdc/tosca/parser/elements/EntityDetailsFactory.java +++ b/src/main/java/org/onap/sdc/tosca/parser/elements/EntityDetailsFactory.java @@ -2,25 +2,25 @@ package org.onap.sdc.tosca.parser.elements; import org.onap.sdc.tosca.parser.enums.EntityTemplateType; import org.onap.sdc.toscaparser.api.EntityTemplate; -import org.onap.sdc.toscaparser.api.NodeTemplate; public class EntityDetailsFactory { private EntityDetailsFactory(){} - //TODO: the parent should be retrieved from the entityTemplate and not passed as a separate parameter - public static EntityDetails createEntityDetails(EntityTemplateType entityTemplateType, EntityTemplate entityTemplate, NodeTemplate parent) { + public static EntityDetails createEntityDetails(EntityTemplateType entityTemplateType, EntityTemplate entityTemplate) { EntityDetails entityDetails = null; - if (entityTemplate != null) { + if (entityTemplate != null && entityTemplateType != null) { switch (entityTemplateType) { case NODE_TEMPLATE: - entityDetails = new NodeTemplateEntityDetails(entityTemplate, parent); + entityDetails = new NodeTemplateEntityDetails(entityTemplate); break; case POLICY: - entityDetails = new PolicyEntityDetails(entityTemplate, parent); + entityDetails = new PolicyEntityDetails(entityTemplate); break; case GROUP: - entityDetails = new GroupEntityDetails(entityTemplate, parent); + entityDetails = new GroupEntityDetails(entityTemplate); + break; + default: break; } } diff --git a/src/main/java/org/onap/sdc/tosca/parser/elements/GroupEntityDetails.java b/src/main/java/org/onap/sdc/tosca/parser/elements/GroupEntityDetails.java index 82488a7..32a91aa 100644 --- a/src/main/java/org/onap/sdc/tosca/parser/elements/GroupEntityDetails.java +++ b/src/main/java/org/onap/sdc/tosca/parser/elements/GroupEntityDetails.java @@ -4,18 +4,28 @@ import org.onap.sdc.tosca.parser.api.IEntityDetails; 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.elements.Metadata; +import java.util.Collections; import java.util.List; import java.util.stream.Collectors; public class GroupEntityDetails extends EntityDetails { private final Group group; + private final List<IEntityDetails> memberNodes; - GroupEntityDetails(EntityTemplate entityTemplate, NodeTemplate parentNode) { - super(entityTemplate,parentNode); + GroupEntityDetails(EntityTemplate entityTemplate) { + super(entityTemplate); group = (Group)getEntityTemplate(); + if (group.getMemberNodes() != null) { + memberNodes = group.getMemberNodes() + .stream() + .map(m->EntityDetailsFactory.createEntityDetails(EntityTemplateType.NODE_TEMPLATE, m)) + .collect(Collectors.toList()); + } + else { + memberNodes = Collections.emptyList(); + } } @Override @@ -25,10 +35,7 @@ public class GroupEntityDetails extends EntityDetails { @Override public List<IEntityDetails> getMemberNodes() { - return group.getMemberNodes() - .stream() - .map(m->EntityDetailsFactory.createEntityDetails(EntityTemplateType.NODE_TEMPLATE, m, null)) - .collect(Collectors.toList()); + return memberNodes; } @Override diff --git a/src/main/java/org/onap/sdc/tosca/parser/elements/NodeTemplateEntityDetails.java b/src/main/java/org/onap/sdc/tosca/parser/elements/NodeTemplateEntityDetails.java index c6dd69f..ad3b1a0 100644 --- a/src/main/java/org/onap/sdc/tosca/parser/elements/NodeTemplateEntityDetails.java +++ b/src/main/java/org/onap/sdc/tosca/parser/elements/NodeTemplateEntityDetails.java @@ -9,8 +9,8 @@ public class NodeTemplateEntityDetails extends EntityDetails { private final NodeTemplate nodeTemplate; - NodeTemplateEntityDetails(EntityTemplate entityTemplate, NodeTemplate parentNode) { - super(entityTemplate, parentNode); + NodeTemplateEntityDetails(EntityTemplate entityTemplate) { + super(entityTemplate); nodeTemplate = (NodeTemplate)getEntityTemplate(); } diff --git a/src/main/java/org/onap/sdc/tosca/parser/elements/PolicyEntityDetails.java b/src/main/java/org/onap/sdc/tosca/parser/elements/PolicyEntityDetails.java index 39027c3..7b97175 100644 --- a/src/main/java/org/onap/sdc/tosca/parser/elements/PolicyEntityDetails.java +++ b/src/main/java/org/onap/sdc/tosca/parser/elements/PolicyEntityDetails.java @@ -1,17 +1,22 @@ package org.onap.sdc.tosca.parser.elements; +import org.onap.sdc.tosca.parser.api.IEntityDetails; 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.elements.Metadata; +import java.util.List; +import java.util.stream.Collectors; + public class PolicyEntityDetails extends EntityDetails { + private static final String NODE_TEMPLATES_TARGET_TYPE = "node_templates"; + private final Policy policy; - PolicyEntityDetails(EntityTemplate entityTemplate, NodeTemplate parentNode) { - super(entityTemplate, parentNode); + PolicyEntityDetails(EntityTemplate entityTemplate) { + super(entityTemplate); policy = (Policy)getEntityTemplate(); } @@ -24,4 +29,26 @@ public class PolicyEntityDetails extends EntityDetails { public Metadata getMetadata() { return policy.getMetaDataObj(); } + + @Override + public List<String> getTargets() { + if (policy.getTargets() != null) { + return policy.getTargets(); + } + return super.getTargets(); + } + + @Override + public List<IEntityDetails> getTargetNodes() { + if (policy.getTargetsType().equals(NODE_TEMPLATES_TARGET_TYPE)) { + return policy.getTargetsList() + .stream() + .map(o->EntityDetailsFactory.createEntityDetails(EntityTemplateType.NODE_TEMPLATE, (EntityTemplate)o)) + .collect(Collectors.toList()); + } + return policy.getTargetsList() + .stream() + .map(o->EntityDetailsFactory.createEntityDetails(EntityTemplateType.GROUP, (EntityTemplate)o)) + .collect(Collectors.toList()); + } } 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);} |