Adding optimization application finish guard
[policy/xacml-pdp.git] / applications / common / src / main / java / org / onap / policy / pdp / xacml / application / common / std / StdCombinedPolicyRequest.java
index 3914ba6..3038b65 100644 (file)
@@ -27,27 +27,41 @@ import com.att.research.xacml.std.annotations.XACMLRequest;
 import com.att.research.xacml.std.annotations.XACMLResource;
 import com.att.research.xacml.std.annotations.XACMLSubject;
 
+import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Map;
 import java.util.Map.Entry;
 
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
 import org.onap.policy.models.decisions.concepts.DecisionRequest;
 
+@Getter
+@Setter
+@ToString
 @XACMLRequest(ReturnPolicyIdList = true)
 public class StdCombinedPolicyRequest {
 
-    public StdCombinedPolicyRequest() {
-        super();
-    }
-
     @XACMLSubject(includeInResults = true)
-    String onapName = "DCAE";
+    private String onapName;
 
-    @XACMLResource(includeInResults = true)
-    String resource = "onap.policies.Monitoring";
+    @XACMLSubject(attributeId = "urn:org:onap:onap-component", includeInResults = true)
+    private String onapComponent;
+
+    @XACMLSubject(attributeId = "urn:org:onap:onap-instance",  includeInResults = true)
+    private String onapInstance;
 
     @XACMLAction()
-    String action = "configure";
+    private String action;
+
+    @XACMLResource(includeInResults = true)
+    private Collection<String> resource = new ArrayList<>();
 
+    public StdCombinedPolicyRequest() {
+        super();
+    }
 
     /**
      * Parses the DecisionRequest into a MonitoringRequest.
@@ -55,30 +69,57 @@ public class StdCombinedPolicyRequest {
      * @param decisionRequest Input DecisionRequest
      * @return MonitoringRequest
      */
+    @SuppressWarnings({"unchecked", "rawtypes"})
     public static StdCombinedPolicyRequest createInstance(DecisionRequest decisionRequest) {
+        //
+        // Create our request object
+        //
         StdCombinedPolicyRequest request = new StdCombinedPolicyRequest();
+        //
+        // Add the subject attributes
+        //
         request.onapName = decisionRequest.getOnapName();
+        request.onapComponent = decisionRequest.getOnapComponent();
+        request.onapInstance = decisionRequest.getOnapInstance();
+        //
+        // Add the action attribute
+        //
         request.action = decisionRequest.getAction();
-
+        //
+        // Add the resource attributes
+        //
         Map<String, Object> resources = decisionRequest.getResource();
-        for (Entry<String, Object> entry : resources.entrySet()) {
-            if ("policy-id".equals(entry.getKey())) {
-                //
-                // TODO handle lists of policies
-                //
-                request.resource = entry.getValue().toString();
+        for (Entry<String, Object> entrySet : resources.entrySet()) {
+            if ("policy-id".equals(entrySet.getKey())) {
+                if (entrySet.getValue() instanceof Collection) {
+                    addPolicyIds(request, (Collection) entrySet.getValue());
+                } else if (entrySet.getValue() instanceof String) {
+                    request.resource.add(entrySet.getValue().toString());
+                }
                 continue;
             }
-            if ("policy-type".equals(entry.getKey())) {
-                //
-                // TODO handle lists of policies
-                //
-                request.resource = entry.getValue().toString();
+            if ("policy-type".equals(entrySet.getKey())) {
+                if (entrySet.getValue() instanceof Collection) {
+                    addPolicyTypes(request, (Collection) entrySet.getValue());
+                } else if (entrySet.getValue() instanceof String) {
+                    request.resource.add(entrySet.getValue().toString());
+                }
             }
         }
-        //
-        // TODO handle a bad incoming request. Do that here?
-        //
+        return request;
+    }
+
+    private static StdCombinedPolicyRequest addPolicyIds(StdCombinedPolicyRequest request, Collection<Object> ids) {
+        for (Object id : ids) {
+            request.resource.add(id.toString());
+        }
+        return request;
+    }
+
+    private static StdCombinedPolicyRequest addPolicyTypes(StdCombinedPolicyRequest request, Collection<Object> types) {
+        for (Object type : types) {
+            request.resource.add(type.toString());
+        }
         return request;
     }
 }