diff options
6 files changed, 65 insertions, 22 deletions
diff --git a/models-provider/src/test/java/org/onap/policy/models/provider/impl/PolicyPersistenceTest.java b/models-provider/src/test/java/org/onap/policy/models/provider/impl/PolicyPersistenceTest.java index a855d5d24..7fa21b021 100644 --- a/models-provider/src/test/java/org/onap/policy/models/provider/impl/PolicyPersistenceTest.java +++ b/models-provider/src/test/java/org/onap/policy/models/provider/impl/PolicyPersistenceTest.java @@ -86,6 +86,8 @@ public class PolicyPersistenceTest { */ @Before public void setupParameters() throws PfModelException, CoderException { + // H2, use "org.mariadb.jdbc.Driver" and "jdbc:mariadb://localhost:3306/policy" for locally installed MariaDB + PolicyModelsProviderParameters parameters = new PolicyModelsProviderParameters(); parameters.setDatabaseDriver("org.h2.Driver"); parameters.setDatabaseUrl("jdbc:h2:mem:testdb"); diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/legacy/concepts/LegacyGuardPolicyContent.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/legacy/concepts/LegacyGuardPolicyContent.java index b46737d2b..91ff150fc 100644 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/legacy/concepts/LegacyGuardPolicyContent.java +++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/legacy/concepts/LegacyGuardPolicyContent.java @@ -28,6 +28,7 @@ import javax.ws.rs.core.Response; import lombok.Data; +import org.onap.policy.common.utils.coder.StandardCoder; import org.onap.policy.models.base.PfModelRuntimeException; import org.onap.policy.models.tosca.legacy.mapping.LegacyGuardPolicyMapper; import org.slf4j.Logger; @@ -55,17 +56,19 @@ public class LegacyGuardPolicyContent { private String guardActiveEnd; /** - * Get contents as a map. + * Get contents as a property map. * * @return the contents as a map. */ public Map<String, String> getAsPropertyMap() { final Map<String, String> propertyMap = new HashMap<>(); + final StandardCoder coder = new StandardCoder(); + try { for (Field field : this.getClass().getDeclaredFields()) { if (field.get(this) != null && field.getType().equals(String.class)) { - propertyMap.put(field.getName(), (String)field.get(this)); + propertyMap.put(field.getName(), coder.encode(field.get(this))); } } } catch (Exception exc) { @@ -77,4 +80,33 @@ public class LegacyGuardPolicyContent { return propertyMap; } + + /** + * Set the contents from a property map. + * + * @param propertyMap the incoming property map + */ + public void setContent(final Map<String, String> propertyMap) { + final StandardCoder coder = new StandardCoder(); + + try { + // @formatter:off + setActor( coder.decode(propertyMap.get("actor"), String.class)); + setClname( coder.decode(propertyMap.get("clname"), String.class)); + setGuardActiveEnd( coder.decode(propertyMap.get("guardActiveEnd"), String.class)); + setGuardActiveStart(coder.decode(propertyMap.get("guardActiveStart"), String.class)); + setLimit( coder.decode(propertyMap.get("limit"), String.class)); + setMax( coder.decode(propertyMap.get("max"), String.class)); + setMin( coder.decode(propertyMap.get("min"), String.class)); + setRecipe( coder.decode(propertyMap.get("recipe"), String.class)); + setTargets( coder.decode(propertyMap.get("targets"), String.class)); + setTimeUnits( coder.decode(propertyMap.get("timeUnits"), String.class)); + setTimeWindow( coder.decode(propertyMap.get("timeWindow"), String.class)); + // @formatter:on + } catch (Exception exc) { + String errorMessage = "could not convert content to a property map"; + LOGGER.warn(errorMessage, exc); + throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, errorMessage, exc); + } + } } diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/legacy/mapping/LegacyGuardPolicyMapper.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/legacy/mapping/LegacyGuardPolicyMapper.java index 0d04cb9d1..8fd883722 100644 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/legacy/mapping/LegacyGuardPolicyMapper.java +++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/legacy/mapping/LegacyGuardPolicyMapper.java @@ -47,13 +47,12 @@ import org.slf4j.LoggerFactory; */ public class LegacyGuardPolicyMapper implements JpaToscaServiceTemplateMapper<LegacyGuardPolicyInput, Map<String, LegacyGuardPolicyOutput>> { + private static final Logger LOGGER = LoggerFactory.getLogger(LegacyGuardPolicyMapper.class); // Tag for metadata fields private static final String POLICY_ID = "policy-id"; private static final String POLICY_VERSION = "policy-version"; - private static final Logger LOGGER = LoggerFactory.getLogger(LegacyGuardPolicyMapper.class); - private static final Map<String, PfConceptKey> GUARD_POLICY_TYPE_MAP = new LinkedHashMap<>(); static { @@ -141,19 +140,7 @@ public class LegacyGuardPolicyMapper } final LegacyGuardPolicyContent content = new LegacyGuardPolicyContent(); - // @formatter:off - content.setActor( toscaPolicy.getProperties().get("actor")); - content.setClname( toscaPolicy.getProperties().get("clname")); - content.setGuardActiveEnd( toscaPolicy.getProperties().get("guardActiveEnd")); - content.setGuardActiveStart(toscaPolicy.getProperties().get("guardActiveStart")); - content.setLimit( toscaPolicy.getProperties().get("limit")); - content.setMax( toscaPolicy.getProperties().get("max")); - content.setMin( toscaPolicy.getProperties().get("min")); - content.setRecipe( toscaPolicy.getProperties().get("recipe")); - content.setTargets( toscaPolicy.getProperties().get("targets")); - content.setTimeUnits( toscaPolicy.getProperties().get("timeUnits")); - content.setTimeWindow( toscaPolicy.getProperties().get("timeWindow")); - // @formatter:on + content.setContent(toscaPolicy.getProperties()); final Map<String, LegacyGuardPolicyContent> propertiesMap = new LinkedHashMap<>(); propertiesMap.put("content", content); diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/legacy/mapping/LegacyOperationalPolicyMapper.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/legacy/mapping/LegacyOperationalPolicyMapper.java index 7caba98d8..2dddda26b 100644 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/legacy/mapping/LegacyOperationalPolicyMapper.java +++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/legacy/mapping/LegacyOperationalPolicyMapper.java @@ -25,6 +25,8 @@ import java.util.Map; import javax.ws.rs.core.Response; +import org.onap.policy.common.utils.coder.CoderException; +import org.onap.policy.common.utils.coder.StandardCoder; import org.onap.policy.models.base.PfConceptKey; import org.onap.policy.models.base.PfModelRuntimeException; import org.onap.policy.models.tosca.legacy.concepts.LegacyOperationalPolicy; @@ -68,7 +70,14 @@ public class LegacyOperationalPolicyMapper final Map<String, String> propertyMap = new HashMap<>(); toscaPolicy.setProperties(propertyMap); - toscaPolicy.getProperties().put(CONTENT_PROPERTY, legacyOperationalPolicy.getContent()); + try { + toscaPolicy.getProperties().put(CONTENT_PROPERTY, + new StandardCoder().encode(legacyOperationalPolicy.getContent())); + } catch (CoderException ce) { + String errorMessage = "encoding of property \"content\" to JSON failed"; + LOGGER.warn(errorMessage, ce); + throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, errorMessage, ce); + } final JpaToscaServiceTemplate serviceTemplate = new JpaToscaServiceTemplate(); serviceTemplate.setToscaDefinitionsVersion("tosca_simple_yaml_1_0"); @@ -105,7 +114,15 @@ public class LegacyOperationalPolicyMapper throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, errorMessage); } - final String content = toscaPolicy.getProperties().get(CONTENT_PROPERTY); + String content = null; + try { + content = new StandardCoder().decode(toscaPolicy.getProperties().get(CONTENT_PROPERTY), String.class); + } catch (CoderException ce) { + String errorMessage = "decoding of property \"content\" from JSON failed"; + LOGGER.warn(errorMessage, ce); + throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, errorMessage, ce); + } + if (content == null) { String errorMessage = "property \"content\" not defined on TOSCA policy"; LOGGER.warn(errorMessage); diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPolicy.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPolicy.java index 3e049ea17..eebacd1d6 100644 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPolicy.java +++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPolicy.java @@ -159,6 +159,8 @@ public class JpaToscaPolicy extends JpaToscaEntityType<ToscaPolicy> implements P if (properties != null) { Map<String, Object> propertyMap = new LinkedHashMap<>(); + final StandardCoder coder = new StandardCoder(); + for (Entry<String, String> entry : properties.entrySet()) { try { // TODO: This is a HACK, we need to validate the properties against their @@ -166,7 +168,7 @@ public class JpaToscaPolicy extends JpaToscaEntityType<ToscaPolicy> implements P // TODO: the policy type from the database and parsing the property value object correctly // TODO: Here we are simply reading a JSON string from the database and deserializing the // TODO: property value from JSON - propertyMap.put(entry.getKey(), new StandardCoder().decode(entry.getValue(), Object.class)); + propertyMap.put(entry.getKey(), coder.decode(entry.getValue(), Object.class)); } catch (CoderException ce) { String errorMessage = "error decoding property JSON value read from database: key=" + entry.getKey() + ", value=" + entry.getValue(); @@ -193,6 +195,8 @@ public class JpaToscaPolicy extends JpaToscaEntityType<ToscaPolicy> implements P if (toscaPolicy.getProperties() != null) { properties = new LinkedHashMap<>(); + final StandardCoder coder = new StandardCoder(); + for (Entry<String, Object> propertyEntry : toscaPolicy.getProperties().entrySet()) { // TODO: This is a HACK, we need to validate the properties against their // TODO: their data type in their policy type definition in TOSCA, which means reading @@ -200,7 +204,7 @@ public class JpaToscaPolicy extends JpaToscaEntityType<ToscaPolicy> implements P // TODO: Here we are simply serializing the property value into a string and storing it // TODO: unvalidated into the database try { - properties.put(propertyEntry.getKey(), new StandardCoder().encode(propertyEntry.getValue())); + properties.put(propertyEntry.getKey(), coder.encode(propertyEntry.getValue())); } catch (CoderException ce) { String errorMessage = "error encoding property JSON value for database: key=" + propertyEntry.getKey() + ", value=" + propertyEntry.getValue(); diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/provider/SimpleToscaProvider.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/provider/SimpleToscaProvider.java index 81a41aa05..761a47c9a 100644 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/provider/SimpleToscaProvider.java +++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/provider/SimpleToscaProvider.java @@ -195,7 +195,6 @@ public class SimpleToscaProvider { for (JpaToscaPolicy policy : serviceTemplate.getTopologyTemplate().getPolicies().getAll(null)) { verifyPolicyTypeForPolicy(dao, policy); - dao.create(policy); } @@ -226,6 +225,7 @@ public class SimpleToscaProvider { ToscaUtils.assertPoliciesExist(serviceTemplate); for (JpaToscaPolicy policy : serviceTemplate.getTopologyTemplate().getPolicies().getAll(null)) { + verifyPolicyTypeForPolicy(dao, policy); dao.update(policy); } @@ -288,6 +288,7 @@ public class SimpleToscaProvider { if (PfKey.NULL_KEY_VERSION.equals(policyTypeKey.getVersion())) { policyType = getLatestPolicyTypeVersion(dao, policyTypeKey.getName()); + policy.getType().setVersion(policyType.getKey().getVersion()); } else { policyType = dao.get(JpaToscaPolicyType.class, policyTypeKey); } |