Merge "Change vFW payload from pg-streams to streams"
authorJorge Hernandez <jorge.hernandez-herrero@att.com>
Thu, 9 May 2019 20:02:29 +0000 (20:02 +0000)
committerGerrit Code Review <gerrit@onap.org>
Thu, 9 May 2019 20:02:29 +0000 (20:02 +0000)
models-provider/src/test/java/org/onap/policy/models/provider/impl/PolicyPersistenceTest.java
models-tosca/src/main/java/org/onap/policy/models/tosca/legacy/concepts/LegacyGuardPolicyContent.java
models-tosca/src/main/java/org/onap/policy/models/tosca/legacy/mapping/LegacyGuardPolicyMapper.java
models-tosca/src/main/java/org/onap/policy/models/tosca/legacy/mapping/LegacyOperationalPolicyMapper.java
models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPolicy.java
models-tosca/src/main/java/org/onap/policy/models/tosca/simple/provider/SimpleToscaProvider.java

index a855d5d..7fa21b0 100644 (file)
@@ -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");
index b46737d..91ff150 100644 (file)
@@ -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);
+        }
+    }
 }
index 0d04cb9..8fd8837 100644 (file)
@@ -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);
index 7caba98..2dddda2 100644 (file)
@@ -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);
index 3e049ea..eebacd1 100644 (file)
@@ -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();
index 81a41aa..761a47c 100644 (file)
@@ -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);
         }