package org.onap.policy.pdpx.main.rest.provider;
-import org.onap.policy.pdpx.main.rest.model.Decision;
+import javax.ws.rs.core.Response.Status;
+
+import org.onap.policy.models.decisions.concepts.DecisionException;
+import org.onap.policy.models.decisions.concepts.DecisionRequest;
+import org.onap.policy.models.decisions.concepts.DecisionResponse;
+import org.onap.policy.pdp.xacml.application.common.XacmlApplicationServiceProvider;
+import org.onap.policy.pdpx.main.rest.XacmlPdpApplicationManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
public class DecisionProvider {
+ private static final Logger LOGGER = LoggerFactory.getLogger(DecisionProvider.class);
/**
* Retrieves the policy decision for the specified parameters.
+ * @param body
*
* @return the Decision object
*/
- public Decision fetchDecision() {
- // placeholder
- return new Decision();
+ public DecisionResponse fetchDecision(DecisionRequest request) {
+ LOGGER.debug("Fetching decision {}", request);
+ //
+ // Find application for this decision
+ //
+ XacmlApplicationServiceProvider application = findApplication(request);
+ //
+ // Cannot find application for action
+ //
+ return application.makeDecision(request);
+ }
+
+ private XacmlApplicationServiceProvider findApplication(DecisionRequest request) {
+ XacmlApplicationServiceProvider application = XacmlPdpApplicationManager.findApplication(request);
+ if (application != null) {
+ return application;
+ }
+ throw new DecisionException(Status.BAD_REQUEST, "No application for action " + request.getAction());
}
}