aboutsummaryrefslogtreecommitdiffstats
path: root/applications/common/src/main/java/org/onap
diff options
context:
space:
mode:
Diffstat (limited to 'applications/common/src/main/java/org/onap')
-rw-r--r--applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/std/StdMatchableTranslator.java64
1 files changed, 61 insertions, 3 deletions
diff --git a/applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/std/StdMatchableTranslator.java b/applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/std/StdMatchableTranslator.java
index addb0df3..ae09ec10 100644
--- a/applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/std/StdMatchableTranslator.java
+++ b/applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/std/StdMatchableTranslator.java
@@ -332,20 +332,60 @@ public class StdMatchableTranslator extends StdBaseTranslator {
//
// Iterate the properties
//
+ int totalWeight = findMatchableFromMap(properties, policyTypes, targetType);
+ LOGGER.info("Total weight is {}", totalWeight);
+ return Pair.of(targetType, totalWeight);
+ }
+
+ @SuppressWarnings("unchecked")
+ protected int findMatchableFromList(List<Object> listProperties, Collection<ToscaPolicyType> policyTypes,
+ TargetType targetType) {
+ LOGGER.info("findMatchableFromList {}", listProperties);
+ int totalWeight = 0;
+ for (Object property : listProperties) {
+ if (property instanceof List) {
+ totalWeight += findMatchableFromList((List<Object>) property, policyTypes, targetType);
+ } else if (property instanceof Map) {
+ totalWeight += findMatchableFromMap((Map<String, Object>) property, policyTypes, targetType);
+ }
+ }
+ return totalWeight;
+ }
+
+ protected int findMatchableFromMap(Map<String, Object> properties, Collection<ToscaPolicyType> policyTypes,
+ TargetType targetType) {
+ LOGGER.info("findMatchableFromMap {}", properties);
int totalWeight = 0;
for (Entry<String, Object> entrySet : properties.entrySet()) {
//
- // Find matchable properties
+ // Is this a matchable property?
//
if (isMatchable(entrySet.getKey(), policyTypes)) {
LOGGER.info("Found matchable property {}", entrySet.getKey());
int weight = generateMatchable(targetType, entrySet.getKey(), entrySet.getValue());
LOGGER.info("Weight is {}", weight);
totalWeight += weight;
+ } else {
+ //
+ // Check if we need to search deeper
+ //
+ totalWeight += checkDeeperForMatchable(entrySet.getValue(), policyTypes, targetType);
}
}
- LOGGER.info("Total weight is {}", totalWeight);
- return Pair.of(targetType, totalWeight);
+ return totalWeight;
+ }
+
+ @SuppressWarnings("unchecked")
+ protected int checkDeeperForMatchable(Object property, Collection<ToscaPolicyType> policyTypes,
+ TargetType targetType) {
+ if (property instanceof List) {
+ return findMatchableFromList((List<Object>) property, policyTypes, targetType);
+ } else if (property instanceof Map) {
+ return findMatchableFromMap((Map<String, Object>) property, policyTypes,
+ targetType);
+ }
+ LOGGER.info("checkDeeperForMatchable not necessary for {}", property);
+ return 0;
}
/**
@@ -362,11 +402,28 @@ public class StdMatchableTranslator extends StdBaseTranslator {
if (checkIsMatchableProperty(propertyName, propertiesEntry)) {
return true;
}
+ //
+ // Check if its a list or map
+ //
+ if (isListOrMap(propertiesEntry.getValue().getType())
+ && ! isYamlType(propertiesEntry.getValue().getEntrySchema().getType())) {
+ LOGGER.info("need to search list or map");
+ }
}
}
+ LOGGER.info("isMatchable false for {}", propertyName);
return false;
}
+ private boolean isListOrMap(String type) {
+ return "list".equalsIgnoreCase(type) || "map".equalsIgnoreCase(type);
+ }
+
+ private boolean isYamlType(String type) {
+ return "string".equalsIgnoreCase(type) || "integer".equalsIgnoreCase(type) || "float".equalsIgnoreCase(type)
+ || "boolean".equalsIgnoreCase(type) || "timestamp".equalsIgnoreCase(type);
+ }
+
/**
* checkIsMatchableProperty - checks the policy contents for matchable field. If the metadata doesn't exist,
* then definitely not. If the property doesn't exist, then definitely not. Otherwise need to have a metadata
@@ -665,6 +722,7 @@ public class StdMatchableTranslator extends StdBaseTranslator {
LOGGER.error("parameters: {} ", this.apiRestParameters);
return null;
}
+ LOGGER.info("Successfully pulled {}", policyTypeId);
//
// Store it locally
//