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.
* @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;
}
}