Upgrade Java 17 in xacml-pdp
[policy/xacml-pdp.git] / main / src / main / java / org / onap / policy / pdpx / main / rest / provider / DecisionProvider.java
index a5141b9..7bc23b1 100644 (file)
@@ -1,6 +1,7 @@
 /*-
  * ============LICENSE_START=======================================================
- * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2019-2020, 2022 AT&T Intellectual Property. All rights reserved.
+ * Modifications Copyright (C) 2023 Nordix Foundation.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -20,6 +21,7 @@
 
 package org.onap.policy.pdpx.main.rest.provider;
 
+import com.att.research.xacml.api.Request;
 import com.att.research.xacml.api.Response;
 import com.att.research.xacml.api.Result;
 import java.util.Map;
@@ -30,6 +32,7 @@ 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.onap.policy.pdpx.main.rest.XacmlPdpStatisticsManager;
+import org.onap.policy.xacml.pdp.application.nativ.NativePdpApplication;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -39,9 +42,10 @@ public class DecisionProvider {
 
     /**
      * Retrieves the policy decision for the specified parameters.
-     * @param body
      *
-     * @return the Decision object
+     * @param request DecisionRequest
+     * @param queryParams Map of parameters
+     * @return DecisionResponse
      */
     public DecisionResponse fetchDecision(DecisionRequest request, Map<String, String[]> queryParams) {
         LOGGER.debug("Fetching decision {}", request);
@@ -56,50 +60,84 @@ public class DecisionProvider {
         //
         // Calculate statistics
         //
-        this.calculateStatistic(decision.getValue());
+        this.calculateStatistic(decision.getValue(), application.applicationName());
         //
         // Return the decision
         //
         return decision.getKey();
     }
 
+    /**
+     * Retrieves the policy decision for the native xacml request.
+     *
+     * @param request the xacml request
+     * @return the xacml response
+     */
+    public Response fetchNativeDecision(Request request) {
+        LOGGER.debug("Fetching decision {}", request);
+        //
+        // Assign native request to native application directly
+        //
+        XacmlApplicationServiceProvider nativeApp = findNativeApplication();
+        //
+        // Make xacml decision
+        //
+        Response decision = ((NativePdpApplication) nativeApp).makeNativeDecision(request);
+        LOGGER.debug("Xacml decision {}", decision);
+        //
+        // Calculate statistics
+        //
+        this.calculateStatistic(decision, nativeApp.applicationName());
+        //
+        // Return the string decision
+        //
+        return decision;
+    }
+
     private XacmlApplicationServiceProvider findApplication(DecisionRequest request) {
         XacmlApplicationServiceProvider application = XacmlPdpApplicationManager.getCurrent().findApplication(request);
         if (application != null) {
             return application;
         }
-        throw new DecisionException(javax.ws.rs.core.Response.Status.BAD_REQUEST,
+        throw new DecisionException(jakarta.ws.rs.core.Response.Status.BAD_REQUEST,
                 "No application for action " + request.getAction());
     }
 
-    private void calculateStatistic(Response xacmlResponse) {
+    private XacmlApplicationServiceProvider findNativeApplication() {
+        XacmlApplicationServiceProvider application = XacmlPdpApplicationManager.getCurrent().findNativeApplication();
+        if (application instanceof NativePdpApplication) {
+            return application;
+        }
+        throw new DecisionException(jakarta.ws.rs.core.Response.Status.INTERNAL_SERVER_ERROR,
+                "Native PDP application cannot be found");
+    }
 
+    private void calculateStatistic(Response xacmlResponse, String appName) {
+        if (xacmlResponse == null) {
+            XacmlPdpStatisticsManager.getCurrent().updateErrorCount();
+            return;
+        }
         for (Result result : xacmlResponse.getResults()) {
             switch (result.getDecision()) {
                 case PERMIT:
-                    XacmlPdpStatisticsManager.getCurrent().updatePermitDecisionsCount();
+                    XacmlPdpStatisticsManager.getCurrent().updatePermitDecisionsCount(appName);
                     break;
 
                 case DENY:
-                    XacmlPdpStatisticsManager.getCurrent().updateDenyDecisionsCount();
+                    XacmlPdpStatisticsManager.getCurrent().updateDenyDecisionsCount(appName);
                     break;
 
-                case INDETERMINATE:
-                case INDETERMINATE_DENY:
-                case INDETERMINATE_DENYPERMIT:
-                case INDETERMINATE_PERMIT:
-                    XacmlPdpStatisticsManager.getCurrent().updateIndeterminantDecisionsCount();
+                case INDETERMINATE, INDETERMINATE_DENY, INDETERMINATE_DENYPERMIT, INDETERMINATE_PERMIT:
+                    XacmlPdpStatisticsManager.getCurrent().updateIndeterminantDecisionsCount(appName);
                     break;
 
                 case NOTAPPLICABLE:
-                    XacmlPdpStatisticsManager.getCurrent().updateNotApplicableDecisionsCount();
+                    XacmlPdpStatisticsManager.getCurrent().updateNotApplicableDecisionsCount(appName);
                     break;
 
                 default:
                     break;
-
             }
         }
     }
-
 }