aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/org/onap/sdc/tosca/parser/elements
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/onap/sdc/tosca/parser/elements')
-rw-r--r--src/main/java/org/onap/sdc/tosca/parser/elements/EntityDetails.java62
-rw-r--r--src/main/java/org/onap/sdc/tosca/parser/elements/EntityDetailsFactory.java14
-rw-r--r--src/main/java/org/onap/sdc/tosca/parser/elements/GroupEntityDetails.java21
-rw-r--r--src/main/java/org/onap/sdc/tosca/parser/elements/NodeTemplateEntityDetails.java4
-rw-r--r--src/main/java/org/onap/sdc/tosca/parser/elements/PolicyEntityDetails.java33
-rw-r--r--src/main/java/org/onap/sdc/tosca/parser/elements/queries/AllEntitiesQuery.java46
-rw-r--r--src/main/java/org/onap/sdc/tosca/parser/elements/queries/EntityQuery.java44
-rw-r--r--src/main/java/org/onap/sdc/tosca/parser/elements/queries/GroupEntityQuery.java39
-rw-r--r--src/main/java/org/onap/sdc/tosca/parser/elements/queries/NodeTemplateEntityQuery.java47
-rw-r--r--src/main/java/org/onap/sdc/tosca/parser/elements/queries/PolicyEntityQuery.java38
-rw-r--r--src/main/java/org/onap/sdc/tosca/parser/elements/queries/TopologyTemplateQuery.java46
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);}