Stubbed endpoints for Decision API and swagger 70/78870/4
authorMichael Mokry <michael.mokry@att.com>
Wed, 20 Feb 2019 16:13:53 +0000 (10:13 -0600)
committerMichael Mokry <michael.mokry@att.com>
Tue, 26 Feb 2019 20:55:57 +0000 (14:55 -0600)
Includes:
1) Decision API endpoint with Swagger annotations
2) Provider class for Decision added to new provider package
3) Moved other provider classes to provider package
4) Decision model class added to new model package

Note: This is just a draft and still needs a lot of work, please do not
merge.  Thanks in advance for the review comments.

Issue-ID: POLICY-1516
Change-Id: Id7414b6cb3eee1b877a0c11521babbef4938a68f
Signed-off-by: Michael Mokry <michael.mokry@att.com>
main/src/main/java/org/onap/policy/pdpx/main/rest/XacmlPdpRestController.java
main/src/main/java/org/onap/policy/pdpx/main/rest/model/Decision.java [new file with mode: 0644]
main/src/main/java/org/onap/policy/pdpx/main/rest/model/StatisticsReport.java [moved from main/src/main/java/org/onap/policy/pdpx/main/rest/StatisticsReport.java with 99% similarity]
main/src/main/java/org/onap/policy/pdpx/main/rest/provider/DecisionProvider.java [new file with mode: 0644]
main/src/main/java/org/onap/policy/pdpx/main/rest/provider/HealthCheckProvider.java [moved from main/src/main/java/org/onap/policy/pdpx/main/rest/HealthCheckProvider.java with 97% similarity]
main/src/main/java/org/onap/policy/pdpx/main/rest/provider/StatisticsProvider.java [moved from main/src/main/java/org/onap/policy/pdpx/main/rest/StatisticsProvider.java with 94% similarity]
main/src/test/java/org/onap/policy/pdpx/main/rest/TestStatisticsReport.java
main/src/test/java/org/onap/policy/pdpx/main/rest/TestXacmlPdpRestServer.java
main/src/test/java/org/onap/policy/pdpx/main/rest/TestXacmlPdpStatistics.java

index b061c96..dc091f0 100644 (file)
@@ -22,44 +22,80 @@ package org.onap.policy.pdpx.main.rest;
 
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.annotations.ApiResponses;
+import io.swagger.annotations.Authorization;
+import io.swagger.annotations.BasicAuthDefinition;
 import io.swagger.annotations.Info;
+import io.swagger.annotations.SecurityDefinition;
 import io.swagger.annotations.SwaggerDefinition;
 import io.swagger.annotations.Tag;
+import javax.ws.rs.Consumes;
 import javax.ws.rs.GET;
+import javax.ws.rs.POST;
 import javax.ws.rs.Path;
 import javax.ws.rs.Produces;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 import org.onap.policy.common.endpoints.report.HealthCheckReport;
-
-
+import org.onap.policy.pdpx.main.rest.model.Decision;
+import org.onap.policy.pdpx.main.rest.model.StatisticsReport;
+import org.onap.policy.pdpx.main.rest.provider.DecisionProvider;
+import org.onap.policy.pdpx.main.rest.provider.HealthCheckProvider;
+import org.onap.policy.pdpx.main.rest.provider.StatisticsProvider;
 
 /**
  * Class to provide xacml pdp REST services.
  *
  */
-@Path("/")
+@Path("/policy/pdpx/v1")
 @Api
 @Produces(MediaType.APPLICATION_JSON)
+@Consumes(MediaType.APPLICATION_JSON)
 @SwaggerDefinition(info = @Info(description = "Policy Xacml PDP Service", version = "v1.0", title = "Policy Xacml PDP"),
         consumes = {MediaType.APPLICATION_JSON}, produces = {MediaType.APPLICATION_JSON},
-        schemes = {SwaggerDefinition.Scheme.HTTP},
-        tags = {@Tag(name = "policy-pdpx", description = "Policy Xacml PDP Service Operations")})
+        schemes = {SwaggerDefinition.Scheme.HTTP, SwaggerDefinition.Scheme.HTTPS},
+        tags = {@Tag(name = "policy-pdpx", description = "Policy Xacml PDP Service Operations")},
+        securityDefinition = @SecurityDefinition(basicAuthDefinitions = {@BasicAuthDefinition(key = "basicAuth")}))
 public class XacmlPdpRestController {
 
     @GET
-    @Path("healthcheck")
+    @Path("/healthcheck")
     @ApiOperation(value = "Perform a system healthcheck",
-            notes = "Provides healthy status of the Policy Xacml PDP component", response = HealthCheckReport.class)
+            notes = "Provides healthy status of the Policy Xacml PDP component", response = HealthCheckReport.class,
+            authorizations = @Authorization(value = "basicAuth"))
+    @ApiResponses(value = {
+            @ApiResponse(code = 401, message = "Authentication Error"),
+            @ApiResponse(code = 403, message = "Authorization Error"),
+            @ApiResponse(code = 500, message = "Internal Server Error")})
     public Response healthcheck() {
         return Response.status(Response.Status.OK).entity(new HealthCheckProvider().performHealthCheck()).build();
     }
 
     @GET
-    @Path("statistics")
+    @Path("/statistics")
     @ApiOperation(value = "Fetch current statistics",
-            notes = "Provides current statistics of the Policy Xacml PDP component", response = StatisticsReport.class)
+            notes = "Provides current statistics of the Policy Xacml PDP component", response = StatisticsReport.class,
+            authorizations = @Authorization(value = "basicAuth"))
+    @ApiResponses(value = {
+            @ApiResponse(code = 401, message = "Authentication Error"),
+            @ApiResponse(code = 403, message = "Authorization Error"),
+            @ApiResponse(code = 500, message = "Internal Server Error")})
     public Response statistics() {
         return Response.status(Response.Status.OK).entity(new StatisticsProvider().fetchCurrentStatistics()).build();
     }
+
+    @POST
+    @Path("/decision")
+    @ApiOperation(value = "Fetch the decision using specified decision parameters",
+            notes = "Returns the policy decision from Policy Xacml PDP", response = Decision.class,
+            authorizations = @Authorization(value = "basicAuth"),
+            tags = {"Decision",})
+    @ApiResponses(value = {@ApiResponse(code = 400, message = "Bad Request"),
+            @ApiResponse(code = 401, message = "Authentication Error"),
+            @ApiResponse(code = 403, message = "Authorization Error"),
+            @ApiResponse(code = 500, message = "Internal Server Error")})
+    public Response decision(Decision body) {
+        return Response.status(Response.Status.OK).entity(new DecisionProvider().fetchDecision()).build();
+    }
 }
diff --git a/main/src/main/java/org/onap/policy/pdpx/main/rest/model/Decision.java b/main/src/main/java/org/onap/policy/pdpx/main/rest/model/Decision.java
new file mode 100644 (file)
index 0000000..d09dac9
--- /dev/null
@@ -0,0 +1,27 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.pdpx.main.rest.model;
+
+public class Decision {
+
+    //TODO
+
+}
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.pdpx.main.rest;
+package org.onap.policy.pdpx.main.rest.model;
 
 /**
  * Class to represent statistics report of xacmlPdp service.
diff --git a/main/src/main/java/org/onap/policy/pdpx/main/rest/provider/DecisionProvider.java b/main/src/main/java/org/onap/policy/pdpx/main/rest/provider/DecisionProvider.java
new file mode 100644 (file)
index 0000000..6219004
--- /dev/null
@@ -0,0 +1,38 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.pdpx.main.rest.provider;
+
+import org.onap.policy.pdpx.main.rest.model.Decision;
+
+
+public class DecisionProvider {
+
+    /**
+     * Retrieves the policy decision for the specified parameters.
+     *
+     * @return the Decision object
+     */
+    public Decision fetchDecision() {
+        // placeholder
+        return new Decision();
+    }
+
+}
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.pdpx.main.rest;
+package org.onap.policy.pdpx.main.rest.provider;
 
 import org.onap.policy.common.endpoints.report.HealthCheckReport;
 import org.onap.policy.pdpx.main.startstop.XacmlPdpActivator;
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.pdpx.main.rest;
+package org.onap.policy.pdpx.main.rest.provider;
 
 import org.onap.policy.pdpx.main.rest.XacmlPdpStatisticsManager;
+import org.onap.policy.pdpx.main.rest.model.StatisticsReport;
 import org.onap.policy.pdpx.main.startstop.XacmlPdpActivator;
 
 /**
index a116a15..eca28d0 100644 (file)
@@ -23,12 +23,14 @@ package org.onap.policy.pdpx.main.rest;
 import com.openpojo.reflection.filters.FilterClassName;
 import com.openpojo.validation.Validator;
 import com.openpojo.validation.ValidatorBuilder;
+import com.openpojo.validation.rule.impl.GetterMustExistRule;
 import com.openpojo.validation.rule.impl.SetterMustExistRule;
 import com.openpojo.validation.test.impl.GetterTester;
 import com.openpojo.validation.test.impl.SetterTester;
 
 import org.junit.Test;
 import org.onap.policy.common.utils.validation.ToStringTester;
+import org.onap.policy.pdpx.main.rest.model.StatisticsReport;
 
 /**
  * Class to perform unit testing of {@link StatisticsReport}.
@@ -39,7 +41,7 @@ public class TestStatisticsReport {
     @Test
     public void testStatisticsReport() {
         final Validator validator = ValidatorBuilder.create().with(new ToStringTester()).with(new SetterMustExistRule())
-                .with(new SetterTester()).with(new GetterTester()).build();
+                .with(new GetterMustExistRule()).with(new SetterTester()).with(new GetterTester()).build();
         validator.validate(StatisticsReport.class.getPackage().getName(),
                 new FilterClassName(StatisticsReport.class.getName()));
     }
index d9a0e9b..2170c8a 100644 (file)
@@ -109,7 +109,7 @@ public class TestXacmlPdpRestServer {
         clientConfig.register(feature);
 
         final Client client = ClientBuilder.newClient(clientConfig);
-        final WebTarget webTarget = client.target("http://localhost:6969/healthcheck");
+        final WebTarget webTarget = client.target("http://localhost:6969/policy/pdpx/v1/healthcheck");
 
         final Invocation.Builder invocationBuilder = webTarget.request(MediaType.APPLICATION_JSON);
 
index b38e92d..ee05ff0 100644 (file)
@@ -38,6 +38,7 @@ import org.onap.policy.pdpx.main.PolicyXacmlPdpException;
 import org.onap.policy.pdpx.main.parameters.CommonTestData;
 import org.onap.policy.pdpx.main.parameters.RestServerParameters;
 import org.onap.policy.pdpx.main.rest.XacmlPdpStatisticsManager;
+import org.onap.policy.pdpx.main.rest.model.StatisticsReport;
 import org.onap.policy.pdpx.main.startstop.Main;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -103,7 +104,7 @@ public class TestXacmlPdpStatistics {
         clientConfig.register(feature);
 
         final Client client = ClientBuilder.newClient(clientConfig);
-        final WebTarget webTarget = client.target("http://localhost:6969/statistics");
+        final WebTarget webTarget = client.target("http://localhost:6969/policy/pdpx/v1/statistics");
 
         final Invocation.Builder invocationBuilder = webTarget.request(MediaType.APPLICATION_JSON);