Adding optimization application finish guard
[policy/xacml-pdp.git] / applications / guard / src / main / java / org / onap / policy / xacml / pdp / application / guard / GuardPdpApplication.java
index 1838523..1b12fca 100644 (file)
@@ -24,19 +24,23 @@ package org.onap.policy.xacml.pdp.application.guard;
 
 import com.att.research.xacml.api.Request;
 import com.att.research.xacml.api.Response;
+import com.att.research.xacml.util.XACMLPolicyWriter;
 import com.google.common.collect.Lists;
 
+import java.io.IOException;
+import java.nio.file.Path;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Properties;
 
 import oasis.names.tc.xacml._3_0.core.schema.wd_17.PolicyType;
 
 import org.onap.policy.models.decisions.concepts.DecisionRequest;
 import org.onap.policy.models.decisions.concepts.DecisionResponse;
 import org.onap.policy.pdp.xacml.application.common.ToscaPolicyConversionException;
-import org.onap.policy.pdp.xacml.application.common.std.StdMetadataTranslator;
+import org.onap.policy.pdp.xacml.application.common.XacmlPolicyUtils;
 import org.onap.policy.pdp.xacml.application.common.std.StdXacmlApplicationServiceProvider;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -52,7 +56,7 @@ public class GuardPdpApplication extends StdXacmlApplicationServiceProvider {
     private static final Logger LOGGER = LoggerFactory.getLogger(GuardPdpApplication.class);
     private static final String STRING_VERSION100 = "1.0.0";
     private Map<String, String> supportedPolicyTypes = new HashMap<>();
-    private StdMetadataTranslator translator = new StdMetadataTranslator();
+    private LegacyGuardTranslator translator = new LegacyGuardTranslator();
 
     /** Constructor.
      *
@@ -103,9 +107,37 @@ public class GuardPdpApplication extends StdXacmlApplicationServiceProvider {
                 throw new ToscaPolicyConversionException("Converted 0 policies");
             }
             //
-            // TODO update properties, save to disk, etc.
+            // Create a copy of the properties object
             //
-        } catch (ToscaPolicyConversionException e) {
+            Properties newProperties = this.getProperties();
+            //
+            // Iterate through the policies
+            //
+            for (PolicyType newPolicy : listPolicies) {
+                //
+                // Construct the filename
+                //
+                Path refPath = XacmlPolicyUtils.constructUniquePolicyFilename(newPolicy, this.getDataPath());
+                //
+                // Write the policy to disk
+                // Maybe check for an error
+                //
+                XACMLPolicyWriter.writePolicyFile(refPath, newPolicy);
+                //
+                // Add root policy to properties object
+                //
+                XacmlPolicyUtils.addRootPolicy(newProperties, refPath);
+            }
+            //
+            // Write the properties to disk
+            //
+            XacmlPolicyUtils.storeXacmlProperties(newProperties,
+                    XacmlPolicyUtils.getPropertiesPath(this.getDataPath()));
+            //
+            // Reload the engine
+            //
+            this.createEngine(newProperties);
+        } catch (IOException | ToscaPolicyConversionException e) {
             LOGGER.error("Failed to loadPolicies {}", e);
         }
     }