From 61b66236ebda171d6a9f1cce9a7bb31395a7e432 Mon Sep 17 00:00:00 2001 From: Chenfei Gao Date: Fri, 15 Mar 2019 11:28:16 -0400 Subject: Hotfix for compilation errors Added hotfix for compilation errors due to model package name change. Issue-ID: POLICY-1515 Change-Id: Ia58671234bc5a5cfe201ee448d38adca870333b3 Signed-off-by: Chenfei Gao --- main/pom.xml | 5 + .../policy/api/main/rest/ApiRestController.java | 1783 ++++++++++---------- .../onap/policy/api/main/rest/ApiRestServer.java | 51 +- .../api/main/rest/provider/PolicyProvider.java | 164 +- .../api/main/rest/provider/PolicyTypeProvider.java | 148 +- 5 files changed, 1082 insertions(+), 1069 deletions(-) (limited to 'main') diff --git a/main/pom.xml b/main/pom.xml index c1ac1733..db306112 100644 --- a/main/pom.xml +++ b/main/pom.xml @@ -58,6 +58,11 @@ policy-models-tosca ${policy.models.version} + + org.onap.policy.models + policy-models-provider + ${policy.models.version} + org.projectlombok lombok diff --git a/main/src/main/java/org/onap/policy/api/main/rest/ApiRestController.java b/main/src/main/java/org/onap/policy/api/main/rest/ApiRestController.java index d3ff0465..9ec97bd2 100644 --- a/main/src/main/java/org/onap/policy/api/main/rest/ApiRestController.java +++ b/main/src/main/java/org/onap/policy/api/main/rest/ApiRestController.java @@ -1,892 +1,891 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP Policy API - * ================================================================================ - * Copyright (C) 2018 Samsung Electronics Co., Ltd. All rights reserved. - * 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.api.main.rest; - -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import io.swagger.annotations.ApiParam; -import io.swagger.annotations.ApiResponse; -import io.swagger.annotations.ApiResponses; -import io.swagger.annotations.Authorization; -import io.swagger.annotations.BasicAuthDefinition; -import io.swagger.annotations.Extension; -import io.swagger.annotations.ExtensionProperty; -import io.swagger.annotations.Info; -import io.swagger.annotations.ResponseHeader; -import io.swagger.annotations.SecurityDefinition; -import io.swagger.annotations.SwaggerDefinition; -import java.util.UUID; -import javax.ws.rs.Consumes; -import javax.ws.rs.DELETE; -import javax.ws.rs.GET; -import javax.ws.rs.HeaderParam; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.Response.ResponseBuilder; -import org.onap.policy.api.main.rest.provider.HealthCheckProvider; -import org.onap.policy.api.main.rest.provider.PolicyProvider; -import org.onap.policy.api.main.rest.provider.PolicyTypeProvider; -import org.onap.policy.api.main.rest.provider.StatisticsProvider; -import org.onap.policy.common.endpoints.report.HealthCheckReport; -import org.onap.policy.models.tosca.ToscaPolicy; -import org.onap.policy.models.tosca.ToscaPolicyList; -import org.onap.policy.models.tosca.ToscaPolicyType; -import org.onap.policy.models.tosca.ToscaPolicyTypeList; - -/** - * Class to provide REST API services. - */ -@Path("/policy/api/v1") -@Api(value = "Policy Design API") -@Produces(MediaType.APPLICATION_JSON) -@Consumes(MediaType.APPLICATION_JSON) -@SwaggerDefinition(info = @Info( - description = "Policy Design API is publicly exposed for clients to Create/Read/Update/Delete" - + " policy types, policy type implementation and policies which can be recognized" - + " and executable by incorporated policy engines. It is an" - + " independent component running rest service that takes all policy design API calls" - + " from clients and then assign them to different API working functions. Besides" - + " that, API is also exposed for clients to retrieve healthcheck status of this API" - + " rest service and the statistics report including the counters of API invocation.", - version = "1.0.0", - title = "Policy Design", - extensions = { - @Extension(properties = { - @ExtensionProperty(name = "planned-retirement-date", value = "tbd"), - @ExtensionProperty(name = "component", value = "Policy Framework") - }) - }), - schemes = { SwaggerDefinition.Scheme.HTTP, SwaggerDefinition.Scheme.HTTPS }, - securityDefinition = @SecurityDefinition(basicAuthDefinitions = { @BasicAuthDefinition(key = "basicAuth") })) -public class ApiRestController { - - /** - * Retrieves the healthcheck status of the API component. - * - * @return the Response object containing the results of the API operation - */ - @GET - @Path("/healthcheck") - @ApiOperation(value = "Perform a system healthcheck", - notes = "Returns healthy status of the Policy API component", - response = HealthCheckReport.class, - responseHeaders = { - @ResponseHeader(name = "X-MinorVersion", - description = "Used to request or communicate a MINOR version back from the client" - + " to the server, and from the server back to the client", - response = String.class), - @ResponseHeader(name = "X-PatchVersion", - description = "Used only to communicate a PATCH version in a response for" - + " troubleshooting purposes only, and will not be provided by" - + " the client on request", - response = String.class), - @ResponseHeader(name = "X-LatestVersion", - description = "Used only to communicate an API's latest version", - response = String.class), - @ResponseHeader(name = "X-ONAP-RequestID", - description = "Used to track REST transactions for logging purpose", - response = UUID.class) - }, - authorizations = @Authorization(value = "basicAuth"), - tags = { "HealthCheck", }, - extensions = { - @Extension(name = "interface info", properties = { - @ExtensionProperty(name = "api-version", value = "1.0.0"), - @ExtensionProperty(name = "last-mod-release", value = "Dublin") - }) - }) - @ApiResponses(value = { - @ApiResponse(code = 401, message = "Authentication Error"), - @ApiResponse(code = 403, message = "Authorization Error"), - @ApiResponse(code = 500, message = "Internal Server Error") - }) - public Response getHealthCheck( - @HeaderParam("X-ONAP-RequestID") @ApiParam("RequestID for http transaction") UUID requestId) { - return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId) - .entity(new HealthCheckProvider().performHealthCheck()).build(); - } - - /** - * Retrieves the statistics report of the API component. - * - * @return the Response object containing the results of the API operation - */ - @GET - @Path("/statistics") - @ApiOperation(value = "Retrieve current statistics", - notes = "Returns current statistics including the counters of API invocation", - response = StatisticsReport.class, - responseHeaders = { - @ResponseHeader(name = "X-MinorVersion", - description = "Used to request or communicate a MINOR version back from the client" - + " to the server, and from the server back to the client", - response = String.class), - @ResponseHeader(name = "X-PatchVersion", - description = "Used only to communicate a PATCH version in a response for" - + " troubleshooting purposes only, and will not be provided by" - + " the client on request", - response = String.class), - @ResponseHeader(name = "X-LatestVersion", - description = "Used only to communicate an API's latest version", - response = String.class), - @ResponseHeader(name = "X-ONAP-RequestID", - description = "Used to track REST transactions for logging purpose", - response = UUID.class) - }, - authorizations = @Authorization(value = "basicAuth"), - tags = { "Statistics", }, - extensions = { - @Extension(name = "interface info", properties = { - @ExtensionProperty(name = "api-version", value = "1.0.0"), - @ExtensionProperty(name = "last-mod-release", value = "Dublin") - }) - }) - @ApiResponses(value = { - @ApiResponse(code = 401, message = "Authentication Error"), - @ApiResponse(code = 403, message = "Authorization Error"), - @ApiResponse(code = 500, message = "Internal Server Error") - }) - public Response getStatistics( - @HeaderParam("X-ONAP-RequestID") @ApiParam("RequestID for http transaction") UUID requestId) { - return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId) - .entity(new StatisticsProvider().fetchCurrentStatistics()).build(); - } - - /** - * Retrieves all available policy types. - * - * @return the Response object containing the results of the API operation - */ - @GET - @Path("/policytypes") - @ApiOperation(value = "Retrieve existing policy types", - notes = "Returns a list of existing policy types stored in Policy Framework", - response = ToscaPolicyTypeList.class, - responseHeaders = { - @ResponseHeader(name = "X-MinorVersion", - description = "Used to request or communicate a MINOR version back from the client" - + " to the server, and from the server back to the client", - response = String.class), - @ResponseHeader(name = "X-PatchVersion", - description = "Used only to communicate a PATCH version in a response for" - + " troubleshooting purposes only, and will not be provided by" - + " the client on request", - response = String.class), - @ResponseHeader(name = "X-LatestVersion", - description = "Used only to communicate an API's latest version", - response = String.class), - @ResponseHeader(name = "X-ONAP-RequestID", - description = "Used to track REST transactions for logging purpose", - response = UUID.class) - }, - authorizations = @Authorization(value = "basicAuth"), - tags = { "PolicyType", }, - extensions = { - @Extension(name = "interface info", properties = { - @ExtensionProperty(name = "api-version", value = "1.0.0"), - @ExtensionProperty(name = "last-mod-release", value = "Dublin") - }) - }) - @ApiResponses(value = { - @ApiResponse(code = 401, message = "Authentication Error"), - @ApiResponse(code = 403, message = "Authorization Error"), - @ApiResponse(code = 500, message = "Internal Server Error") - }) - public Response getAllPolicyTypes( - @HeaderParam("X-ONAP-RequestID") @ApiParam("RequestID for http transaction") UUID requestId) { - return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId) - .entity(new PolicyTypeProvider().fetchPolicyTypes(null, null)).build(); - } - - /** - * Retrieves all versions of a particular policy type. - * - * @param policyTypeId the ID of specified policy type - * - * @return the Response object containing the results of the API operation - */ - @GET - @Path("/policytypes/{policyTypeId}") - @ApiOperation(value = "Retrieve all available versions of a policy type", - notes = "Returns a list of all available versions for the specified policy type", - response = ToscaPolicyTypeList.class, - responseHeaders = { - @ResponseHeader(name = "X-MinorVersion", - description = "Used to request or communicate a MINOR version back from the client" - + " to the server, and from the server back to the client", - response = String.class), - @ResponseHeader(name = "X-PatchVersion", - description = "Used only to communicate a PATCH version in a response for" - + " troubleshooting purposes only, and will not be provided by" - + " the client on request", - response = String.class), - @ResponseHeader(name = "X-LatestVersion", - description = "Used only to communicate an API's latest version", - response = String.class), - @ResponseHeader(name = "X-ONAP-RequestID", - description = "Used to track REST transactions for logging purpose", - response = UUID.class) - }, - authorizations = @Authorization(value = "basicAuth"), - tags = { "PolicyType", }, - extensions = { - @Extension(name = "interface info", properties = { - @ExtensionProperty(name = "api-version", value = "1.0.0"), - @ExtensionProperty(name = "last-mod-release", value = "Dublin") - }) - }) - @ApiResponses(value = { - @ApiResponse(code = 401, message = "Authentication Error"), - @ApiResponse(code = 403, message = "Authorization Error"), - @ApiResponse(code = 404, message = "Resource Not Found"), - @ApiResponse(code = 500, message = "Internal Server Error") - }) - public Response getAllVersionsOfPolicyType( - @PathParam("policyTypeId") @ApiParam(value = "ID of policy type", required = true) String policyTypeId, - @HeaderParam("X-ONAP-RequestID") @ApiParam("RequestID for http transaction") UUID requestId) { - return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId) - .entity(new PolicyTypeProvider().fetchPolicyTypes(policyTypeId, null)).build(); - } - - /** - * Retrieves specified version of a particular policy type. - * - * @param policyTypeId the ID of specified policy type - * @param versionId the version of specified policy type - * - * @return the Response object containing the results of the API operation - */ - @GET - @Path("/policytypes/{policyTypeId}/versions/{versionId}") - @ApiOperation(value = "Retrieve one particular version of a policy type", - notes = "Returns a particular version for the specified policy type", - response = ToscaPolicyTypeList.class, - responseHeaders = { - @ResponseHeader(name = "X-MinorVersion", - description = "Used to request or communicate a MINOR version back from the client" - + " to the server, and from the server back to the client", - response = String.class), - @ResponseHeader(name = "X-PatchVersion", - description = "Used only to communicate a PATCH version in a response for" - + " troubleshooting purposes only, and will not be provided by" - + " the client on request", - response = String.class), - @ResponseHeader(name = "X-LatestVersion", - description = "Used only to communicate an API's latest version", - response = String.class), - @ResponseHeader(name = "X-ONAP-RequestID", - description = "Used to track REST transactions for logging purpose", - response = UUID.class) - }, - authorizations = @Authorization(value = "basicAuth"), - tags = { "PolicyType", }, - extensions = { - @Extension(name = "interface info", properties = { - @ExtensionProperty(name = "api-version", value = "1.0.0"), - @ExtensionProperty(name = "last-mod-release", value = "Dublin") - }) - }) - @ApiResponses(value = { - @ApiResponse(code = 401, message = "Authentication Error"), - @ApiResponse(code = 403, message = "Authorization Error"), - @ApiResponse(code = 404, message = "Resource Not Found"), - @ApiResponse(code = 500, message = "Internal Server Error") - }) - public Response getSpecificVersionOfPolicyType( - @PathParam("policyTypeId") @ApiParam(value = "ID of policy type", required = true) String policyTypeId, - @PathParam("versionId") @ApiParam(value = "Version of policy type", required = true) String versionId, - @HeaderParam("X-ONAP-RequestID") @ApiParam("RequestID for http transaction") UUID requestId) { - return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId) - .entity(new PolicyTypeProvider().fetchPolicyTypes(policyTypeId, versionId)).build(); - } - - /** - * Creates a new policy type. - * - * @param body the body of policy type following TOSCA definition - * - * @return the Response object containing the results of the API operation - */ - @POST - @Path("/policytypes") - @ApiOperation(value = "Create a new policy type", - notes = "Client should provide TOSCA body of the new policy type", - authorizations = @Authorization(value = "basicAuth"), - tags = { "PolicyType", }, - extensions = { - @Extension(name = "interface info", properties = { - @ExtensionProperty(name = "api-version", value = "1.0.0"), - @ExtensionProperty(name = "last-mod-release", value = "Dublin") - }) - }) - @ApiResponses(value = { - @ApiResponse(code = 201, message = "Resource successfully created", - responseHeaders = { - @ResponseHeader(name = "X-MinorVersion", - description = "Used to request or communicate a MINOR version back from the client" - + " to the server, and from the server back to the client", - response = String.class), - @ResponseHeader(name = "X-PatchVersion", - description = "Used only to communicate a PATCH version in a response for" - + " troubleshooting purposes only, and will not be provided by" - + " the client on request", - response = String.class), - @ResponseHeader(name = "X-LatestVersion", - description = "Used only to communicate an API's latest version", - response = String.class), - @ResponseHeader(name = "X-ONAP-RequestID", - description = "Used to track REST transactions for logging purpose", - response = UUID.class) - }), - @ApiResponse(code = 400, message = "Invalid Body"), - @ApiResponse(code = 401, message = "Authentication Error"), - @ApiResponse(code = 403, message = "Authorization Error"), - @ApiResponse(code = 500, message = "Internal Server Error") - }) - public Response createPolicyType( - @ApiParam(value = "Entity body of policy type", required = true) ToscaPolicyType body, - @HeaderParam("X-ONAP-RequestID") @ApiParam("RequestID for http transaction") UUID requestId) { - return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId) - .entity(new PolicyTypeProvider().createPolicyType(body)).build(); - } - - /** - * Deletes all versions of a particular policy type. - * - * @param policyTypeId the ID of specified policy type - * - * @return the Response object containing the results of the API operation - */ - @DELETE - @Path("/policytypes/{policyTypeId}") - @ApiOperation(value = "Delete all versions of a policy type", - notes = "Rule 1: pre-defined policy types cannot be deleted;" - + "Rule 2: policy types that are in use (parameterized by a TOSCA policy) cannot be deleted." - + "The parameterizing TOSCA policies must be deleted first;", - authorizations = @Authorization(value = "basicAuth"), - tags = { "PolicyType", }, - extensions = { - @Extension(name = "interface info", properties = { - @ExtensionProperty(name = "api-version", value = "1.0.0"), - @ExtensionProperty(name = "last-mod-release", value = "Dublin") - }) - }) - @ApiResponses(value = { - @ApiResponse(code = 204, message = "Resources successfully deleted, no content returned", - responseHeaders = { - @ResponseHeader(name = "X-MinorVersion", - description = "Used to request or communicate a MINOR version back from the client" - + " to the server, and from the server back to the client", - response = String.class), - @ResponseHeader(name = "X-PatchVersion", - description = "Used only to communicate a PATCH version in a response for" - + " troubleshooting purposes only, and will not be provided by" - + " the client on request", - response = String.class), - @ResponseHeader(name = "X-LatestVersion", - description = "Used only to communicate an API's latest version", - response = String.class), - @ResponseHeader(name = "X-ONAP-RequestID", - description = "Used to track REST transactions for logging purpose", - response = UUID.class) - }), - @ApiResponse(code = 401, message = "Authentication Error"), - @ApiResponse(code = 403, message = "Authorization Error"), - @ApiResponse(code = 404, message = "Resource Not Found"), - @ApiResponse(code = 409, message = "Delete Conflict, Rule Violation"), - @ApiResponse(code = 500, message = "Internal Server Error") - }) - public Response deleteAllVersionsOfPolicyType( - @PathParam("policyTypeId") @ApiParam(value = "ID of policy type", required = true) String policyTypeId, - @HeaderParam("X-ONAP-RequestID") @ApiParam("RequestID for http transaction") UUID requestId) { - return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId) - .entity(new PolicyTypeProvider().deletePolicyTypes(policyTypeId, null)).build(); - } - - /** - * Deletes specified version of a particular policy type. - * - * @param policyTypeId the ID of specified policy type - * @param versionId the version of specified policy type - * - * @return the Response object containing the results of the API operation - */ - @DELETE - @Path("/policytypes/{policyTypeId}/versions/{versionId}") - @ApiOperation(value = "Delete one version of a policy type", - notes = "Rule 1: pre-defined policy types cannot be deleted;" - + "Rule 2: policy types that are in use (parameterized by a TOSCA policy) cannot be deleted." - + "The parameterizing TOSCA policies must be deleted first;", - authorizations = @Authorization(value = "basicAuth"), - tags = { "PolicyType", }, - extensions = { - @Extension(name = "interface info", properties = { - @ExtensionProperty(name = "api-version", value = "1.0.0"), - @ExtensionProperty(name = "last-mod-release", value = "Dublin") - }) - }) - @ApiResponses(value = { - @ApiResponse(code = 204, message = "Resource successfully deleted, no content returned", - responseHeaders = { - @ResponseHeader(name = "X-MinorVersion", - description = "Used to request or communicate a MINOR version back from the client" - + " to the server, and from the server back to the client", - response = String.class), - @ResponseHeader(name = "X-PatchVersion", - description = "Used only to communicate a PATCH version in a response for" - + " troubleshooting purposes only, and will not be provided by" - + " the client on request", - response = String.class), - @ResponseHeader(name = "X-LatestVersion", - description = "Used only to communicate an API's latest version", - response = String.class), - @ResponseHeader(name = "X-ONAP-RequestID", - description = "Used to track REST transactions for logging purpose", - response = UUID.class) - }), - @ApiResponse(code = 401, message = "Authentication Error"), - @ApiResponse(code = 403, message = "Authorization Error"), - @ApiResponse(code = 404, message = "Resource Not Found"), - @ApiResponse(code = 409, message = "Delete Conflict, Rule Violation"), - @ApiResponse(code = 500, message = "Internal Server Error") - }) - public Response deleteSpecificVersionOfPolicyType( - @PathParam("policyTypeId") @ApiParam(value = "ID of policy type", required = true) String policyTypeId, - @PathParam("versionId") @ApiParam(value = "Version of policy type", required = true) String versionId, - @HeaderParam("X-ONAP-RequestID") @ApiParam("RequestID for http transaction") UUID requestId) { - return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId) - .entity(new PolicyTypeProvider().deletePolicyTypes(policyTypeId, versionId)).build(); - } - - /** - * Retrieves all versions of a particular policy. - * - * @param policyTypeId the ID of specified policy type - * @param policyTypeVersion the version of specified policy type - * - * @return the Response object containing the results of the API operation - */ - @GET - @Path("/policytypes/{policyTypeId}/versions/{policyTypeVersion}/policies") - @ApiOperation(value = "Retrieve all versions of a policy created for a particular policy type version", - notes = "Returns a list of all versions of specified policy created for the specified policy type version", - response = ToscaPolicyList.class, - responseHeaders = { - @ResponseHeader(name = "X-MinorVersion", - description = "Used to request or communicate a MINOR version back from the client" - + " to the server, and from the server back to the client", - response = String.class), - @ResponseHeader(name = "X-PatchVersion", - description = "Used only to communicate a PATCH version in a response for" - + " troubleshooting purposes only, and will not be provided by" - + " the client on request", - response = String.class), - @ResponseHeader(name = "X-LatestVersion", - description = "Used only to communicate an API's latest version", - response = String.class), - @ResponseHeader(name = "X-ONAP-RequestID", - description = "Used to track REST transactions for logging purpose", - response = UUID.class) - }, - authorizations = @Authorization(value = "basicAuth"), - tags = { "Policy", }, - extensions = { - @Extension(name = "interface info", properties = { - @ExtensionProperty(name = "api-version", value = "1.0.0"), - @ExtensionProperty(name = "last-mod-release", value = "Dublin") - }) - }) - @ApiResponses(value = { - @ApiResponse(code = 401, message = "Authentication Error"), - @ApiResponse(code = 403, message = "Authorization Error"), - @ApiResponse(code = 404, message = "Resource Not Found"), - @ApiResponse(code = 500, message = "Internal Server Error") - }) - public Response getAllPolicies( - @PathParam("policyTypeId") @ApiParam(value = "ID of policy type", required = true) String policyTypeId, - @PathParam("policyTypeVersion") - @ApiParam(value = "Version of policy type", required = true) String policyTypeVersion, - @HeaderParam("X-ONAP-RequestID") @ApiParam("RequestID for http transaction") UUID requestId) { - return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId) - .entity(new PolicyProvider().fetchPolicies(policyTypeId, policyTypeVersion, null, null)).build(); - } - - /** - * Retrieves all versions of a particular policy. - * - * @param policyTypeId the ID of specified policy type - * @param policyTypeVersion the version of specified policy type - * @param policyId the ID of specified policy - * - * @return the Response object containing the results of the API operation - */ - @GET - @Path("/policytypes/{policyTypeId}/versions/{policyTypeVersion}/policies/{policyId}") - @ApiOperation(value = "Retrieve all version details of a policy created for a particular policy type version", - notes = "Returns a list of all version details of the specified policy", - response = ToscaPolicyList.class, - responseHeaders = { - @ResponseHeader(name = "X-MinorVersion", - description = "Used to request or communicate a MINOR version back from the client" - + " to the server, and from the server back to the client", - response = String.class), - @ResponseHeader(name = "X-PatchVersion", - description = "Used only to communicate a PATCH version in a response for" - + " troubleshooting purposes only, and will not be provided by" - + " the client on request", - response = String.class), - @ResponseHeader(name = "X-LatestVersion", - description = "Used only to communicate an API's latest version", - response = String.class), - @ResponseHeader(name = "X-ONAP-RequestID", - description = "Used to track REST transactions for logging purpose", - response = UUID.class) - }, - authorizations = @Authorization(value = "basicAuth"), - tags = { "Policy", }, - extensions = { - @Extension(name = "interface info", properties = { - @ExtensionProperty(name = "api-version", value = "1.0.0"), - @ExtensionProperty(name = "last-mod-release", value = "Dublin") - }) - }) - @ApiResponses(value = { - @ApiResponse(code = 401, message = "Authentication Error"), - @ApiResponse(code = 403, message = "Authorization Error"), - @ApiResponse(code = 404, message = "Resource Not Found"), - @ApiResponse(code = 500, message = "Internal Server Error") - }) - public Response getAllVersionsOfPolicy( - @PathParam("policyTypeId") @ApiParam(value = "ID of policy type", required = true) String policyTypeId, - @PathParam("policyTypeVersion") - @ApiParam(value = "Version of policy type", required = true) String policyTypeVersion, - @PathParam("policyId") @ApiParam(value = "ID of policy", required = true) String policyId, - @HeaderParam("X-ONAP-RequestID") @ApiParam("RequestID for http transaction") UUID requestId) { - return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId) - .entity(new PolicyProvider().fetchPolicies(policyTypeId, policyTypeVersion, policyId, null)).build(); - } - - /** - * Retrieves the specified version of a particular policy. - * - * @param policyTypeId the ID of specified policy type - * @param policyTypeVersion the version of specified policy type - * @param policyId the ID of specified policy - * @param policyVersion the version of specified policy - * - * @return the Response object containing the results of the API operation - */ - @GET - @Path("/policytypes/{policyTypeId}/versions/{policyTypeVersion}/policies/{policyId}/versions/{policyVersion}") - @ApiOperation(value = "Retrieve one version of a policy created for a particular policy type version", - notes = "Returns a particular version of specified policy created for the specified policy type version", - response = ToscaPolicyList.class, - responseHeaders = { - @ResponseHeader(name = "X-MinorVersion", - description = "Used to request or communicate a MINOR version back from the client" - + " to the server, and from the server back to the client", - response = String.class), - @ResponseHeader(name = "X-PatchVersion", - description = "Used only to communicate a PATCH version in a response for" - + " troubleshooting purposes only, and will not be provided by" - + " the client on request", - response = String.class), - @ResponseHeader(name = "X-LatestVersion", - description = "Used only to communicate an API's latest version", - response = String.class), - @ResponseHeader(name = "X-ONAP-RequestID", - description = "Used to track REST transactions for logging purpose", - response = UUID.class) - }, - authorizations = @Authorization(value = "basicAuth"), - tags = { "Policy", }, - extensions = { - @Extension(name = "interface info", properties = { - @ExtensionProperty(name = "api-version", value = "1.0.0"), - @ExtensionProperty(name = "last-mod-release", value = "Dublin") - }) - }) - @ApiResponses(value = { - @ApiResponse(code = 401, message = "Authentication Error"), - @ApiResponse(code = 403, message = "Authorization Error"), - @ApiResponse(code = 404, message = "Resource Not Found"), - @ApiResponse(code = 500, message = "Internal Server Error") - }) - public Response getSpecificVersionOfPolicy( - @PathParam("policyTypeId") @ApiParam(value = "ID of policy type", required = true) String policyTypeId, - @PathParam("policyTypeVersion") - @ApiParam(value = "Version of policy type", required = true) String policyTypeVersion, - @PathParam("policyId") @ApiParam(value = "ID of policy", required = true) String policyId, - @PathParam("policyVersion") @ApiParam(value = "Version of policy", required = true) String policyVersion, - @HeaderParam("X-ONAP-RequestID") @ApiParam("RequestID for http transaction") UUID requestId) { - return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId) - .entity(new PolicyProvider().fetchPolicies(policyTypeId, policyTypeVersion, - policyId, policyVersion)).build(); - } - - /** - * Retrieves either latest or deployed version of a particular policy depending on query parameter. - * - * @param policyTypeId the ID of specified policy type - * @param policyTypeVersion the version of specified policy type - * @param policyId the ID of specified policy - * - * @return the Response object containing the results of the API operation - */ - @GET - @Path("/policytypes/{policyTypeId}/versions/{policyTypeVersion}/policies/{policyId}/versions") - @ApiOperation(value = "Retrieve either latest or deployed version of a particular policy depending on query param", - notes = "Returns either latest or deployed version of specified policy depending on query param", - response = ToscaPolicyList.class, - responseHeaders = { - @ResponseHeader(name = "X-MinorVersion", - description = "Used to request or communicate a MINOR version back from the client" - + " to the server, and from the server back to the client", - response = String.class), - @ResponseHeader(name = "X-PatchVersion", - description = "Used only to communicate a PATCH version in a response for" - + " troubleshooting purposes only, and will not be provided by" - + " the client on request", - response = String.class), - @ResponseHeader(name = "X-LatestVersion", - description = "Used only to communicate an API's latest version", - response = String.class), - @ResponseHeader(name = "X-ONAP-RequestID", - description = "Used to track REST transactions for logging purpose", - response = UUID.class) - }, - authorizations = @Authorization(value = "basicAuth"), - tags = { "Policy", }, - extensions = { - @Extension(name = "interface info", properties = { - @ExtensionProperty(name = "api-version", value = "1.0.0"), - @ExtensionProperty(name = "last-mod-release", value = "Dublin") - }) - }) - @ApiResponses(value = { - @ApiResponse(code = 401, message = "Authentication Error"), - @ApiResponse(code = 403, message = "Authorization Error"), - @ApiResponse(code = 404, message = "Resource Not Found"), - @ApiResponse(code = 500, message = "Internal Server Error") - }) - public Response getEitherLatestOrDeployedVersionOfPolicy( - @PathParam("policyTypeId") @ApiParam(value = "ID of policy type", required = true) String policyTypeId, - @PathParam("policyTypeVersion") - @ApiParam(value = "Version of policy type", required = true) String policyTypeVersion, - @PathParam("policyId") @ApiParam(value = "ID of policy", required = true) String policyId, - @QueryParam("type") - @ApiParam(value = "Version that can only be 'latest' or 'deployed'", required = true) String type, - @HeaderParam("X-ONAP-RequestID") @ApiParam("RequestID for http transaction") UUID requestId) { - return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId) - .entity(new PolicyProvider().fetchPolicies(policyTypeId, policyTypeVersion, policyId, type)).build(); - } - - /** - * Creates a new policy for a particular policy type and version. - * - * @param policyTypeId the ID of specified policy type - * @param policyTypeVersion the version of specified policy type - * @param body the body of policy following TOSCA definition - * - * @return the Response object containing the results of the API operation - */ - @POST - @Path("/policytypes/{policyTypeId}/versions/{policyTypeVersion}/policies") - @ApiOperation(value = "Create a new policy for a policy type version", - notes = "Client should provide TOSCA body of the new policy", - authorizations = @Authorization(value = "basicAuth"), - tags = { "Policy", }, - extensions = { - @Extension(name = "interface info", properties = { - @ExtensionProperty(name = "api-version", value = "1.0.0"), - @ExtensionProperty(name = "last-mod-release", value = "Dublin") - }) - }) - @ApiResponses(value = { - @ApiResponse(code = 201, message = "Resource successfully created", - responseHeaders = { - @ResponseHeader(name = "X-MinorVersion", - description = "Used to request or communicate a MINOR version back from the client" - + " to the server, and from the server back to the client", - response = String.class), - @ResponseHeader(name = "X-PatchVersion", - description = "Used only to communicate a PATCH version in a response for" - + " troubleshooting purposes only, and will not be provided by" - + " the client on request", - response = String.class), - @ResponseHeader(name = "X-LatestVersion", - description = "Used only to communicate an API's latest version", - response = String.class), - @ResponseHeader(name = "X-ONAP-RequestID", - description = "Used to track REST transactions for logging purpose", - response = UUID.class) - }), - @ApiResponse(code = 400, message = "Invalid Body"), - @ApiResponse(code = 401, message = "Authentication Error"), - @ApiResponse(code = 403, message = "Authorization Error"), - @ApiResponse(code = 404, message = "Resource Not Found"), - @ApiResponse(code = 500, message = "Internal Server Error") - }) - public Response createPolicy( - @PathParam("policyTypeId") @ApiParam(value = "ID of policy type", required = true) String policyTypeId, - @PathParam("policyTypeVersion") - @ApiParam(value = "Version of policy type", required = true) String policyTypeVersion, - @HeaderParam("X-ONAP-RequestID") @ApiParam("RequestID for http transaction") UUID requestId, - @ApiParam(value = "Entity body of policy", required = true) ToscaPolicy body) { - return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId) - .entity(new PolicyProvider().createPolicy(policyTypeId, policyTypeVersion, body)).build(); - } - - /** - * Deletes all versions of a particular policy. - * - * @param policyTypeId the ID of specified policy type - * @param policyTypeVersion the version of specified policy type - * @param policyId the ID of specified policy - * - * @return the Response object containing the results of the API operation - */ - @DELETE - @Path("/policytypes/{policyTypeId}/versions/{policyTypeVersion}/policies/{policyId}") - @ApiOperation(value = "Delete all versions of a policy", - notes = "Rule: the version that has been deployed in PDP group(s) cannot be deleted", - authorizations = @Authorization(value = "basicAuth"), - tags = { "Policy", }, - extensions = { - @Extension(name = "interface info", properties = { - @ExtensionProperty(name = "api-version", value = "1.0.0"), - @ExtensionProperty(name = "last-mod-release", value = "Dublin") - }) - }) - @ApiResponses(value = { - @ApiResponse(code = 204, message = "Resources successfully deleted, no content returned", - responseHeaders = { - @ResponseHeader(name = "X-MinorVersion", - description = "Used to request or communicate a MINOR version back from the client" - + " to the server, and from the server back to the client", - response = String.class), - @ResponseHeader(name = "X-PatchVersion", - description = "Used only to communicate a PATCH version in a response for" - + " troubleshooting purposes only, and will not be provided by" - + " the client on request", - response = String.class), - @ResponseHeader(name = "X-LatestVersion", - description = "Used only to communicate an API's latest version", - response = String.class), - @ResponseHeader(name = "X-ONAP-RequestID", - description = "Used to track REST transactions for logging purpose", - response = UUID.class) - }), - @ApiResponse(code = 401, message = "Authentication Error"), - @ApiResponse(code = 403, message = "Authorization Error"), - @ApiResponse(code = 404, message = "Resource Not Found"), - @ApiResponse(code = 409, message = "Delete Conflict, Rule Violation"), - @ApiResponse(code = 500, message = "Internal Server Error") - }) - public Response deleteAllVersionsOfPolicy( - @PathParam("policyTypeId") @ApiParam(value = "ID of policy type", required = true) String policyTypeId, - @PathParam("policyTypeVersion") - @ApiParam(value = "Version of policy type", required = true) String policyTypeVersion, - @PathParam("policyId") @ApiParam(value = "ID of policy", required = true) String policyId, - @HeaderParam("X-ONAP-RequestID") @ApiParam("RequestID for http transaction") UUID requestId) { - return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId) - .entity(new PolicyProvider().deletePolicies(policyTypeId, policyTypeVersion, policyId, null)).build(); - } - - /** - * Deletes the specified version of a particular policy. - * - * @param policyTypeId the ID of specified policy type - * @param policyTypeVersion the version of specified policy type - * @param policyId the ID of specified policy - * @param policyVersion the version of specified policy - * - * @return the Response object containing the results of the API operation - */ - @DELETE - @Path("/policytypes/{policyTypeId}/versions/{policyTypeVersion}/policies/{policyId}/versions/{policyVersion}") - @ApiOperation(value = "Delete a particular version of a policy", - notes = "Rule: the version that has been deployed in PDP group(s) cannot be deleted", - authorizations = @Authorization(value = "basicAuth"), - tags = { "Policy", }, - extensions = { - @Extension(name = "interface info", properties = { - @ExtensionProperty(name = "api-version", value = "1.0.0"), - @ExtensionProperty(name = "last-mod-release", value = "Dublin") - }) - }) - @ApiResponses(value = { - @ApiResponse(code = 204, message = "Resource successfully deleted, no content returned", - responseHeaders = { - @ResponseHeader(name = "X-MinorVersion", - description = "Used to request or communicate a MINOR version back from the client" - + " to the server, and from the server back to the client", - response = String.class), - @ResponseHeader(name = "X-PatchVersion", - description = "Used only to communicate a PATCH version in a response for" - + " troubleshooting purposes only, and will not be provided by" - + " the client on request", - response = String.class), - @ResponseHeader(name = "X-LatestVersion", - description = "Used only to communicate an API's latest version", - response = String.class), - @ResponseHeader(name = "X-ONAP-RequestID", - description = "Used to track REST transactions for logging purpose", - response = UUID.class) - }), - @ApiResponse(code = 401, message = "Authentication Error"), - @ApiResponse(code = 403, message = "Authorization Error"), - @ApiResponse(code = 404, message = "Resource Not Found"), - @ApiResponse(code = 409, message = "Delete Conflict, Rule Violation"), - @ApiResponse(code = 500, message = "Internal Server Error") - }) - public Response deleteSpecificVersionOfPolicy( - @PathParam("policyTypeId") @ApiParam(value = "PolicyType ID", required = true) String policyTypeId, - @PathParam("policyTypeVersion") - @ApiParam(value = "Version of policy type", required = true) String policyTypeVersion, - @PathParam("policyId") @ApiParam(value = "ID of policy", required = true) String policyId, - @PathParam("policyVersion") @ApiParam(value = "Version of policy", required = true) String policyVersion, - @HeaderParam("X-ONAP-RequestID") @ApiParam("RequestID for http transaction") UUID requestId) { - return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId) - .entity(new PolicyProvider().deletePolicies(policyTypeId, policyTypeVersion, - policyId, policyVersion)).build(); - } - - private ResponseBuilder addVersionControlHeaders(ResponseBuilder rb) { - return rb.header("X-MinorVersion", "0").header("X-PatchVersion", "0").header("X-LatestVersion", "1.0.0"); - } - - private ResponseBuilder addLoggingHeaders(ResponseBuilder rb, UUID requestId) { - if (requestId == null) { - // Generate a random uuid if client does not embed requestId in rest request - return rb.header("X-ONAP-RequestID", UUID.randomUUID()); - } - return rb.header("X-ONAP-RequestID", requestId); - } -} +/*- + * ============LICENSE_START======================================================= + * ONAP Policy API + * ================================================================================ + * Copyright (C) 2018 Samsung Electronics Co., Ltd. All rights reserved. + * 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.api.main.rest; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import io.swagger.annotations.ApiResponse; +import io.swagger.annotations.ApiResponses; +import io.swagger.annotations.Authorization; +import io.swagger.annotations.BasicAuthDefinition; +import io.swagger.annotations.Extension; +import io.swagger.annotations.ExtensionProperty; +import io.swagger.annotations.Info; +import io.swagger.annotations.ResponseHeader; +import io.swagger.annotations.SecurityDefinition; +import io.swagger.annotations.SwaggerDefinition; +import java.util.UUID; +import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; +import javax.ws.rs.GET; +import javax.ws.rs.HeaderParam; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import javax.ws.rs.core.Response.ResponseBuilder; +import org.onap.policy.api.main.rest.provider.HealthCheckProvider; +import org.onap.policy.api.main.rest.provider.PolicyProvider; +import org.onap.policy.api.main.rest.provider.PolicyTypeProvider; +import org.onap.policy.api.main.rest.provider.StatisticsProvider; +import org.onap.policy.common.endpoints.report.HealthCheckReport; +import org.onap.policy.models.tosca.concepts.ToscaServiceTemplate; + +/** + * Class to provide REST API services. + */ +@Path("/policy/api/v1") +@Api(value = "Policy Design API") +@Produces(MediaType.APPLICATION_JSON) +@Consumes(MediaType.APPLICATION_JSON) +@SwaggerDefinition(info = @Info( + description = "Policy Design API is publicly exposed for clients to Create/Read/Update/Delete" + + " policy types, policy type implementation and policies which can be recognized" + + " and executable by incorporated policy engines. It is an" + + " independent component running rest service that takes all policy design API calls" + + " from clients and then assign them to different API working functions. Besides" + + " that, API is also exposed for clients to retrieve healthcheck status of this API" + + " rest service and the statistics report including the counters of API invocation.", + version = "1.0.0", + title = "Policy Design", + extensions = { + @Extension(properties = { + @ExtensionProperty(name = "planned-retirement-date", value = "tbd"), + @ExtensionProperty(name = "component", value = "Policy Framework") + }) + }), + schemes = { SwaggerDefinition.Scheme.HTTP, SwaggerDefinition.Scheme.HTTPS }, + securityDefinition = @SecurityDefinition(basicAuthDefinitions = { @BasicAuthDefinition(key = "basicAuth") })) +public class ApiRestController { + + /** + * Retrieves the healthcheck status of the API component. + * + * @return the Response object containing the results of the API operation + */ + @GET + @Path("/healthcheck") + @ApiOperation(value = "Perform a system healthcheck", + notes = "Returns healthy status of the Policy API component", + response = HealthCheckReport.class, + responseHeaders = { + @ResponseHeader(name = "X-MinorVersion", + description = "Used to request or communicate a MINOR version back from the client" + + " to the server, and from the server back to the client", + response = String.class), + @ResponseHeader(name = "X-PatchVersion", + description = "Used only to communicate a PATCH version in a response for" + + " troubleshooting purposes only, and will not be provided by" + + " the client on request", + response = String.class), + @ResponseHeader(name = "X-LatestVersion", + description = "Used only to communicate an API's latest version", + response = String.class), + @ResponseHeader(name = "X-ONAP-RequestID", + description = "Used to track REST transactions for logging purpose", + response = UUID.class) + }, + authorizations = @Authorization(value = "basicAuth"), + tags = { "HealthCheck", }, + extensions = { + @Extension(name = "interface info", properties = { + @ExtensionProperty(name = "api-version", value = "1.0.0"), + @ExtensionProperty(name = "last-mod-release", value = "Dublin") + }) + }) + @ApiResponses(value = { + @ApiResponse(code = 401, message = "Authentication Error"), + @ApiResponse(code = 403, message = "Authorization Error"), + @ApiResponse(code = 500, message = "Internal Server Error") + }) + public Response getHealthCheck( + @HeaderParam("X-ONAP-RequestID") @ApiParam("RequestID for http transaction") UUID requestId) { + return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId) + .entity(new HealthCheckProvider().performHealthCheck()).build(); + } + + /** + * Retrieves the statistics report of the API component. + * + * @return the Response object containing the results of the API operation + */ + @GET + @Path("/statistics") + @ApiOperation(value = "Retrieve current statistics", + notes = "Returns current statistics including the counters of API invocation", + response = StatisticsReport.class, + responseHeaders = { + @ResponseHeader(name = "X-MinorVersion", + description = "Used to request or communicate a MINOR version back from the client" + + " to the server, and from the server back to the client", + response = String.class), + @ResponseHeader(name = "X-PatchVersion", + description = "Used only to communicate a PATCH version in a response for" + + " troubleshooting purposes only, and will not be provided by" + + " the client on request", + response = String.class), + @ResponseHeader(name = "X-LatestVersion", + description = "Used only to communicate an API's latest version", + response = String.class), + @ResponseHeader(name = "X-ONAP-RequestID", + description = "Used to track REST transactions for logging purpose", + response = UUID.class) + }, + authorizations = @Authorization(value = "basicAuth"), + tags = { "Statistics", }, + extensions = { + @Extension(name = "interface info", properties = { + @ExtensionProperty(name = "api-version", value = "1.0.0"), + @ExtensionProperty(name = "last-mod-release", value = "Dublin") + }) + }) + @ApiResponses(value = { + @ApiResponse(code = 401, message = "Authentication Error"), + @ApiResponse(code = 403, message = "Authorization Error"), + @ApiResponse(code = 500, message = "Internal Server Error") + }) + public Response getStatistics( + @HeaderParam("X-ONAP-RequestID") @ApiParam("RequestID for http transaction") UUID requestId) { + return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId) + .entity(new StatisticsProvider().fetchCurrentStatistics()).build(); + } + + /** + * Retrieves all available policy types. + * + * @return the Response object containing the results of the API operation + */ + @GET + @Path("/policytypes") + @ApiOperation(value = "Retrieve existing policy types", + notes = "Returns a list of existing policy types stored in Policy Framework", + response = ToscaServiceTemplate.class, + responseHeaders = { + @ResponseHeader(name = "X-MinorVersion", + description = "Used to request or communicate a MINOR version back from the client" + + " to the server, and from the server back to the client", + response = String.class), + @ResponseHeader(name = "X-PatchVersion", + description = "Used only to communicate a PATCH version in a response for" + + " troubleshooting purposes only, and will not be provided by" + + " the client on request", + response = String.class), + @ResponseHeader(name = "X-LatestVersion", + description = "Used only to communicate an API's latest version", + response = String.class), + @ResponseHeader(name = "X-ONAP-RequestID", + description = "Used to track REST transactions for logging purpose", + response = UUID.class) + }, + authorizations = @Authorization(value = "basicAuth"), + tags = { "PolicyType", }, + extensions = { + @Extension(name = "interface info", properties = { + @ExtensionProperty(name = "api-version", value = "1.0.0"), + @ExtensionProperty(name = "last-mod-release", value = "Dublin") + }) + }) + @ApiResponses(value = { + @ApiResponse(code = 401, message = "Authentication Error"), + @ApiResponse(code = 403, message = "Authorization Error"), + @ApiResponse(code = 500, message = "Internal Server Error") + }) + public Response getAllPolicyTypes( + @HeaderParam("X-ONAP-RequestID") @ApiParam("RequestID for http transaction") UUID requestId) { + return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId) + .entity(new PolicyTypeProvider().fetchPolicyTypes(null, null)).build(); + } + + /** + * Retrieves all versions of a particular policy type. + * + * @param policyTypeId the ID of specified policy type + * + * @return the Response object containing the results of the API operation + */ + @GET + @Path("/policytypes/{policyTypeId}") + @ApiOperation(value = "Retrieve all available versions of a policy type", + notes = "Returns a list of all available versions for the specified policy type", + response = ToscaServiceTemplate.class, + responseHeaders = { + @ResponseHeader(name = "X-MinorVersion", + description = "Used to request or communicate a MINOR version back from the client" + + " to the server, and from the server back to the client", + response = String.class), + @ResponseHeader(name = "X-PatchVersion", + description = "Used only to communicate a PATCH version in a response for" + + " troubleshooting purposes only, and will not be provided by" + + " the client on request", + response = String.class), + @ResponseHeader(name = "X-LatestVersion", + description = "Used only to communicate an API's latest version", + response = String.class), + @ResponseHeader(name = "X-ONAP-RequestID", + description = "Used to track REST transactions for logging purpose", + response = UUID.class) + }, + authorizations = @Authorization(value = "basicAuth"), + tags = { "PolicyType", }, + extensions = { + @Extension(name = "interface info", properties = { + @ExtensionProperty(name = "api-version", value = "1.0.0"), + @ExtensionProperty(name = "last-mod-release", value = "Dublin") + }) + }) + @ApiResponses(value = { + @ApiResponse(code = 401, message = "Authentication Error"), + @ApiResponse(code = 403, message = "Authorization Error"), + @ApiResponse(code = 404, message = "Resource Not Found"), + @ApiResponse(code = 500, message = "Internal Server Error") + }) + public Response getAllVersionsOfPolicyType( + @PathParam("policyTypeId") @ApiParam(value = "ID of policy type", required = true) String policyTypeId, + @HeaderParam("X-ONAP-RequestID") @ApiParam("RequestID for http transaction") UUID requestId) { + return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId) + .entity(new PolicyTypeProvider().fetchPolicyTypes(policyTypeId, null)).build(); + } + + /** + * Retrieves specified version of a particular policy type. + * + * @param policyTypeId the ID of specified policy type + * @param versionId the version of specified policy type + * + * @return the Response object containing the results of the API operation + */ + @GET + @Path("/policytypes/{policyTypeId}/versions/{versionId}") + @ApiOperation(value = "Retrieve one particular version of a policy type", + notes = "Returns a particular version for the specified policy type", + response = ToscaServiceTemplate.class, + responseHeaders = { + @ResponseHeader(name = "X-MinorVersion", + description = "Used to request or communicate a MINOR version back from the client" + + " to the server, and from the server back to the client", + response = String.class), + @ResponseHeader(name = "X-PatchVersion", + description = "Used only to communicate a PATCH version in a response for" + + " troubleshooting purposes only, and will not be provided by" + + " the client on request", + response = String.class), + @ResponseHeader(name = "X-LatestVersion", + description = "Used only to communicate an API's latest version", + response = String.class), + @ResponseHeader(name = "X-ONAP-RequestID", + description = "Used to track REST transactions for logging purpose", + response = UUID.class) + }, + authorizations = @Authorization(value = "basicAuth"), + tags = { "PolicyType", }, + extensions = { + @Extension(name = "interface info", properties = { + @ExtensionProperty(name = "api-version", value = "1.0.0"), + @ExtensionProperty(name = "last-mod-release", value = "Dublin") + }) + }) + @ApiResponses(value = { + @ApiResponse(code = 401, message = "Authentication Error"), + @ApiResponse(code = 403, message = "Authorization Error"), + @ApiResponse(code = 404, message = "Resource Not Found"), + @ApiResponse(code = 500, message = "Internal Server Error") + }) + public Response getSpecificVersionOfPolicyType( + @PathParam("policyTypeId") @ApiParam(value = "ID of policy type", required = true) String policyTypeId, + @PathParam("versionId") @ApiParam(value = "Version of policy type", required = true) String versionId, + @HeaderParam("X-ONAP-RequestID") @ApiParam("RequestID for http transaction") UUID requestId) { + return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId) + .entity(new PolicyTypeProvider().fetchPolicyTypes(policyTypeId, versionId)).build(); + } + + /** + * Creates a new policy type. + * + * @param body the body of policy type following TOSCA definition + * + * @return the Response object containing the results of the API operation + */ + @POST + @Path("/policytypes") + @ApiOperation(value = "Create a new policy type", + notes = "Client should provide TOSCA body of the new policy type", + authorizations = @Authorization(value = "basicAuth"), + tags = { "PolicyType", }, + extensions = { + @Extension(name = "interface info", properties = { + @ExtensionProperty(name = "api-version", value = "1.0.0"), + @ExtensionProperty(name = "last-mod-release", value = "Dublin") + }) + }) + @ApiResponses(value = { + @ApiResponse(code = 201, message = "Resource successfully created", + responseHeaders = { + @ResponseHeader(name = "X-MinorVersion", + description = "Used to request or communicate a MINOR version back from the client" + + " to the server, and from the server back to the client", + response = String.class), + @ResponseHeader(name = "X-PatchVersion", + description = "Used only to communicate a PATCH version in a response for" + + " troubleshooting purposes only, and will not be provided by" + + " the client on request", + response = String.class), + @ResponseHeader(name = "X-LatestVersion", + description = "Used only to communicate an API's latest version", + response = String.class), + @ResponseHeader(name = "X-ONAP-RequestID", + description = "Used to track REST transactions for logging purpose", + response = UUID.class) + }), + @ApiResponse(code = 400, message = "Invalid Body"), + @ApiResponse(code = 401, message = "Authentication Error"), + @ApiResponse(code = 403, message = "Authorization Error"), + @ApiResponse(code = 500, message = "Internal Server Error") + }) + public Response createPolicyType( + @ApiParam(value = "Entity body of policy type", required = true) ToscaServiceTemplate body, + @HeaderParam("X-ONAP-RequestID") @ApiParam("RequestID for http transaction") UUID requestId) { + return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId) + .entity(new PolicyTypeProvider().createPolicyType(body)).build(); + } + + /** + * Deletes all versions of a particular policy type. + * + * @param policyTypeId the ID of specified policy type + * + * @return the Response object containing the results of the API operation + */ + @DELETE + @Path("/policytypes/{policyTypeId}") + @ApiOperation(value = "Delete all versions of a policy type", + notes = "Rule 1: pre-defined policy types cannot be deleted;" + + "Rule 2: policy types that are in use (parameterized by a TOSCA policy) cannot be deleted." + + "The parameterizing TOSCA policies must be deleted first;", + authorizations = @Authorization(value = "basicAuth"), + tags = { "PolicyType", }, + extensions = { + @Extension(name = "interface info", properties = { + @ExtensionProperty(name = "api-version", value = "1.0.0"), + @ExtensionProperty(name = "last-mod-release", value = "Dublin") + }) + }) + @ApiResponses(value = { + @ApiResponse(code = 204, message = "Resources successfully deleted, no content returned", + responseHeaders = { + @ResponseHeader(name = "X-MinorVersion", + description = "Used to request or communicate a MINOR version back from the client" + + " to the server, and from the server back to the client", + response = String.class), + @ResponseHeader(name = "X-PatchVersion", + description = "Used only to communicate a PATCH version in a response for" + + " troubleshooting purposes only, and will not be provided by" + + " the client on request", + response = String.class), + @ResponseHeader(name = "X-LatestVersion", + description = "Used only to communicate an API's latest version", + response = String.class), + @ResponseHeader(name = "X-ONAP-RequestID", + description = "Used to track REST transactions for logging purpose", + response = UUID.class) + }), + @ApiResponse(code = 401, message = "Authentication Error"), + @ApiResponse(code = 403, message = "Authorization Error"), + @ApiResponse(code = 404, message = "Resource Not Found"), + @ApiResponse(code = 409, message = "Delete Conflict, Rule Violation"), + @ApiResponse(code = 500, message = "Internal Server Error") + }) + public Response deleteAllVersionsOfPolicyType( + @PathParam("policyTypeId") @ApiParam(value = "ID of policy type", required = true) String policyTypeId, + @HeaderParam("X-ONAP-RequestID") @ApiParam("RequestID for http transaction") UUID requestId) { + return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId) + .entity(new PolicyTypeProvider().deletePolicyTypes(policyTypeId, null)).build(); + } + + /** + * Deletes specified version of a particular policy type. + * + * @param policyTypeId the ID of specified policy type + * @param versionId the version of specified policy type + * + * @return the Response object containing the results of the API operation + */ + @DELETE + @Path("/policytypes/{policyTypeId}/versions/{versionId}") + @ApiOperation(value = "Delete one version of a policy type", + notes = "Rule 1: pre-defined policy types cannot be deleted;" + + "Rule 2: policy types that are in use (parameterized by a TOSCA policy) cannot be deleted." + + "The parameterizing TOSCA policies must be deleted first;", + authorizations = @Authorization(value = "basicAuth"), + tags = { "PolicyType", }, + extensions = { + @Extension(name = "interface info", properties = { + @ExtensionProperty(name = "api-version", value = "1.0.0"), + @ExtensionProperty(name = "last-mod-release", value = "Dublin") + }) + }) + @ApiResponses(value = { + @ApiResponse(code = 204, message = "Resource successfully deleted, no content returned", + responseHeaders = { + @ResponseHeader(name = "X-MinorVersion", + description = "Used to request or communicate a MINOR version back from the client" + + " to the server, and from the server back to the client", + response = String.class), + @ResponseHeader(name = "X-PatchVersion", + description = "Used only to communicate a PATCH version in a response for" + + " troubleshooting purposes only, and will not be provided by" + + " the client on request", + response = String.class), + @ResponseHeader(name = "X-LatestVersion", + description = "Used only to communicate an API's latest version", + response = String.class), + @ResponseHeader(name = "X-ONAP-RequestID", + description = "Used to track REST transactions for logging purpose", + response = UUID.class) + }), + @ApiResponse(code = 401, message = "Authentication Error"), + @ApiResponse(code = 403, message = "Authorization Error"), + @ApiResponse(code = 404, message = "Resource Not Found"), + @ApiResponse(code = 409, message = "Delete Conflict, Rule Violation"), + @ApiResponse(code = 500, message = "Internal Server Error") + }) + public Response deleteSpecificVersionOfPolicyType( + @PathParam("policyTypeId") @ApiParam(value = "ID of policy type", required = true) String policyTypeId, + @PathParam("versionId") @ApiParam(value = "Version of policy type", required = true) String versionId, + @HeaderParam("X-ONAP-RequestID") @ApiParam("RequestID for http transaction") UUID requestId) { + return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId) + .entity(new PolicyTypeProvider().deletePolicyTypes(policyTypeId, versionId)).build(); + } + + /** + * Retrieves all versions of a particular policy. + * + * @param policyTypeId the ID of specified policy type + * @param policyTypeVersion the version of specified policy type + * + * @return the Response object containing the results of the API operation + */ + @GET + @Path("/policytypes/{policyTypeId}/versions/{policyTypeVersion}/policies") + @ApiOperation(value = "Retrieve all versions of a policy created for a particular policy type version", + notes = "Returns a list of all versions of specified policy created for the specified policy type version", + response = ToscaServiceTemplate.class, + responseHeaders = { + @ResponseHeader(name = "X-MinorVersion", + description = "Used to request or communicate a MINOR version back from the client" + + " to the server, and from the server back to the client", + response = String.class), + @ResponseHeader(name = "X-PatchVersion", + description = "Used only to communicate a PATCH version in a response for" + + " troubleshooting purposes only, and will not be provided by" + + " the client on request", + response = String.class), + @ResponseHeader(name = "X-LatestVersion", + description = "Used only to communicate an API's latest version", + response = String.class), + @ResponseHeader(name = "X-ONAP-RequestID", + description = "Used to track REST transactions for logging purpose", + response = UUID.class) + }, + authorizations = @Authorization(value = "basicAuth"), + tags = { "Policy", }, + extensions = { + @Extension(name = "interface info", properties = { + @ExtensionProperty(name = "api-version", value = "1.0.0"), + @ExtensionProperty(name = "last-mod-release", value = "Dublin") + }) + }) + @ApiResponses(value = { + @ApiResponse(code = 401, message = "Authentication Error"), + @ApiResponse(code = 403, message = "Authorization Error"), + @ApiResponse(code = 404, message = "Resource Not Found"), + @ApiResponse(code = 500, message = "Internal Server Error") + }) + public Response getAllPolicies( + @PathParam("policyTypeId") @ApiParam(value = "ID of policy type", required = true) String policyTypeId, + @PathParam("policyTypeVersion") + @ApiParam(value = "Version of policy type", required = true) String policyTypeVersion, + @HeaderParam("X-ONAP-RequestID") @ApiParam("RequestID for http transaction") UUID requestId) { + return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId) + .entity(new PolicyProvider().fetchPolicies(policyTypeId, policyTypeVersion, null, null)).build(); + } + + /** + * Retrieves all versions of a particular policy. + * + * @param policyTypeId the ID of specified policy type + * @param policyTypeVersion the version of specified policy type + * @param policyId the ID of specified policy + * + * @return the Response object containing the results of the API operation + */ + @GET + @Path("/policytypes/{policyTypeId}/versions/{policyTypeVersion}/policies/{policyId}") + @ApiOperation(value = "Retrieve all version details of a policy created for a particular policy type version", + notes = "Returns a list of all version details of the specified policy", + response = ToscaServiceTemplate.class, + responseHeaders = { + @ResponseHeader(name = "X-MinorVersion", + description = "Used to request or communicate a MINOR version back from the client" + + " to the server, and from the server back to the client", + response = String.class), + @ResponseHeader(name = "X-PatchVersion", + description = "Used only to communicate a PATCH version in a response for" + + " troubleshooting purposes only, and will not be provided by" + + " the client on request", + response = String.class), + @ResponseHeader(name = "X-LatestVersion", + description = "Used only to communicate an API's latest version", + response = String.class), + @ResponseHeader(name = "X-ONAP-RequestID", + description = "Used to track REST transactions for logging purpose", + response = UUID.class) + }, + authorizations = @Authorization(value = "basicAuth"), + tags = { "Policy", }, + extensions = { + @Extension(name = "interface info", properties = { + @ExtensionProperty(name = "api-version", value = "1.0.0"), + @ExtensionProperty(name = "last-mod-release", value = "Dublin") + }) + }) + @ApiResponses(value = { + @ApiResponse(code = 401, message = "Authentication Error"), + @ApiResponse(code = 403, message = "Authorization Error"), + @ApiResponse(code = 404, message = "Resource Not Found"), + @ApiResponse(code = 500, message = "Internal Server Error") + }) + public Response getAllVersionsOfPolicy( + @PathParam("policyTypeId") @ApiParam(value = "ID of policy type", required = true) String policyTypeId, + @PathParam("policyTypeVersion") + @ApiParam(value = "Version of policy type", required = true) String policyTypeVersion, + @PathParam("policyId") @ApiParam(value = "ID of policy", required = true) String policyId, + @HeaderParam("X-ONAP-RequestID") @ApiParam("RequestID for http transaction") UUID requestId) { + return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId) + .entity(new PolicyProvider().fetchPolicies(policyTypeId, policyTypeVersion, policyId, null)).build(); + } + + /** + * Retrieves the specified version of a particular policy. + * + * @param policyTypeId the ID of specified policy type + * @param policyTypeVersion the version of specified policy type + * @param policyId the ID of specified policy + * @param policyVersion the version of specified policy + * + * @return the Response object containing the results of the API operation + */ + @GET + @Path("/policytypes/{policyTypeId}/versions/{policyTypeVersion}/policies/{policyId}/versions/{policyVersion}") + @ApiOperation(value = "Retrieve one version of a policy created for a particular policy type version", + notes = "Returns a particular version of specified policy created for the specified policy type version", + response = ToscaServiceTemplate.class, + responseHeaders = { + @ResponseHeader(name = "X-MinorVersion", + description = "Used to request or communicate a MINOR version back from the client" + + " to the server, and from the server back to the client", + response = String.class), + @ResponseHeader(name = "X-PatchVersion", + description = "Used only to communicate a PATCH version in a response for" + + " troubleshooting purposes only, and will not be provided by" + + " the client on request", + response = String.class), + @ResponseHeader(name = "X-LatestVersion", + description = "Used only to communicate an API's latest version", + response = String.class), + @ResponseHeader(name = "X-ONAP-RequestID", + description = "Used to track REST transactions for logging purpose", + response = UUID.class) + }, + authorizations = @Authorization(value = "basicAuth"), + tags = { "Policy", }, + extensions = { + @Extension(name = "interface info", properties = { + @ExtensionProperty(name = "api-version", value = "1.0.0"), + @ExtensionProperty(name = "last-mod-release", value = "Dublin") + }) + }) + @ApiResponses(value = { + @ApiResponse(code = 401, message = "Authentication Error"), + @ApiResponse(code = 403, message = "Authorization Error"), + @ApiResponse(code = 404, message = "Resource Not Found"), + @ApiResponse(code = 500, message = "Internal Server Error") + }) + public Response getSpecificVersionOfPolicy( + @PathParam("policyTypeId") @ApiParam(value = "ID of policy type", required = true) String policyTypeId, + @PathParam("policyTypeVersion") + @ApiParam(value = "Version of policy type", required = true) String policyTypeVersion, + @PathParam("policyId") @ApiParam(value = "ID of policy", required = true) String policyId, + @PathParam("policyVersion") @ApiParam(value = "Version of policy", required = true) String policyVersion, + @HeaderParam("X-ONAP-RequestID") @ApiParam("RequestID for http transaction") UUID requestId) { + return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId) + .entity(new PolicyProvider().fetchPolicies(policyTypeId, policyTypeVersion, + policyId, policyVersion)).build(); + } + + /** + * Retrieves either latest or deployed version of a particular policy depending on query parameter. + * + * @param policyTypeId the ID of specified policy type + * @param policyTypeVersion the version of specified policy type + * @param policyId the ID of specified policy + * + * @return the Response object containing the results of the API operation + */ + @GET + @Path("/policytypes/{policyTypeId}/versions/{policyTypeVersion}/policies/{policyId}/versions") + @ApiOperation(value = "Retrieve either latest or deployed version of a particular policy depending on query param", + notes = "Returns either latest or deployed version of specified policy depending on query param", + response = ToscaServiceTemplate.class, + responseHeaders = { + @ResponseHeader(name = "X-MinorVersion", + description = "Used to request or communicate a MINOR version back from the client" + + " to the server, and from the server back to the client", + response = String.class), + @ResponseHeader(name = "X-PatchVersion", + description = "Used only to communicate a PATCH version in a response for" + + " troubleshooting purposes only, and will not be provided by" + + " the client on request", + response = String.class), + @ResponseHeader(name = "X-LatestVersion", + description = "Used only to communicate an API's latest version", + response = String.class), + @ResponseHeader(name = "X-ONAP-RequestID", + description = "Used to track REST transactions for logging purpose", + response = UUID.class) + }, + authorizations = @Authorization(value = "basicAuth"), + tags = { "Policy", }, + extensions = { + @Extension(name = "interface info", properties = { + @ExtensionProperty(name = "api-version", value = "1.0.0"), + @ExtensionProperty(name = "last-mod-release", value = "Dublin") + }) + }) + @ApiResponses(value = { + @ApiResponse(code = 401, message = "Authentication Error"), + @ApiResponse(code = 403, message = "Authorization Error"), + @ApiResponse(code = 404, message = "Resource Not Found"), + @ApiResponse(code = 500, message = "Internal Server Error") + }) + public Response getEitherLatestOrDeployedVersionOfPolicy( + @PathParam("policyTypeId") @ApiParam(value = "ID of policy type", required = true) String policyTypeId, + @PathParam("policyTypeVersion") + @ApiParam(value = "Version of policy type", required = true) String policyTypeVersion, + @PathParam("policyId") @ApiParam(value = "ID of policy", required = true) String policyId, + @QueryParam("type") + @ApiParam(value = "Version that can only be 'latest' or 'deployed'", required = true) String type, + @HeaderParam("X-ONAP-RequestID") @ApiParam("RequestID for http transaction") UUID requestId) { + return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId) + .entity(new PolicyProvider().fetchPolicies(policyTypeId, policyTypeVersion, policyId, type)).build(); + } + + /** + * Creates a new policy for a particular policy type and version. + * + * @param policyTypeId the ID of specified policy type + * @param policyTypeVersion the version of specified policy type + * @param body the body of policy following TOSCA definition + * + * @return the Response object containing the results of the API operation + */ + @POST + @Path("/policytypes/{policyTypeId}/versions/{policyTypeVersion}/policies") + @Consumes("application/json") + @Produces("application/json") + @ApiOperation(value = "Create a new policy for a policy type version", + notes = "Client should provide TOSCA body of the new policy", + authorizations = @Authorization(value = "basicAuth"), + tags = { "Policy", }, + extensions = { + @Extension(name = "interface info", properties = { + @ExtensionProperty(name = "api-version", value = "1.0.0"), + @ExtensionProperty(name = "last-mod-release", value = "Dublin") + }) + }) + @ApiResponses(value = { + @ApiResponse(code = 201, message = "Resource successfully created", + responseHeaders = { + @ResponseHeader(name = "X-MinorVersion", + description = "Used to request or communicate a MINOR version back from the client" + + " to the server, and from the server back to the client", + response = String.class), + @ResponseHeader(name = "X-PatchVersion", + description = "Used only to communicate a PATCH version in a response for" + + " troubleshooting purposes only, and will not be provided by" + + " the client on request", + response = String.class), + @ResponseHeader(name = "X-LatestVersion", + description = "Used only to communicate an API's latest version", + response = String.class), + @ResponseHeader(name = "X-ONAP-RequestID", + description = "Used to track REST transactions for logging purpose", + response = UUID.class) + }), + @ApiResponse(code = 400, message = "Invalid Body"), + @ApiResponse(code = 401, message = "Authentication Error"), + @ApiResponse(code = 403, message = "Authorization Error"), + @ApiResponse(code = 404, message = "Resource Not Found"), + @ApiResponse(code = 500, message = "Internal Server Error") + }) + public Response createPolicy( + @PathParam("policyTypeId") @ApiParam(value = "ID of policy type", required = true) String policyTypeId, + @PathParam("policyTypeVersion") + @ApiParam(value = "Version of policy type", required = true) String policyTypeVersion, + @HeaderParam("X-ONAP-RequestID") @ApiParam("RequestID for http transaction") UUID requestId, + @ApiParam(value = "Entity body of policy", required = true) ToscaServiceTemplate body) { + return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId) + .entity(new PolicyProvider().createPolicy(policyTypeId, policyTypeVersion, body)).build(); + } + + /** + * Deletes all versions of a particular policy. + * + * @param policyTypeId the ID of specified policy type + * @param policyTypeVersion the version of specified policy type + * @param policyId the ID of specified policy + * + * @return the Response object containing the results of the API operation + */ + @DELETE + @Path("/policytypes/{policyTypeId}/versions/{policyTypeVersion}/policies/{policyId}") + @ApiOperation(value = "Delete all versions of a policy", + notes = "Rule: the version that has been deployed in PDP group(s) cannot be deleted", + authorizations = @Authorization(value = "basicAuth"), + tags = { "Policy", }, + extensions = { + @Extension(name = "interface info", properties = { + @ExtensionProperty(name = "api-version", value = "1.0.0"), + @ExtensionProperty(name = "last-mod-release", value = "Dublin") + }) + }) + @ApiResponses(value = { + @ApiResponse(code = 204, message = "Resources successfully deleted, no content returned", + responseHeaders = { + @ResponseHeader(name = "X-MinorVersion", + description = "Used to request or communicate a MINOR version back from the client" + + " to the server, and from the server back to the client", + response = String.class), + @ResponseHeader(name = "X-PatchVersion", + description = "Used only to communicate a PATCH version in a response for" + + " troubleshooting purposes only, and will not be provided by" + + " the client on request", + response = String.class), + @ResponseHeader(name = "X-LatestVersion", + description = "Used only to communicate an API's latest version", + response = String.class), + @ResponseHeader(name = "X-ONAP-RequestID", + description = "Used to track REST transactions for logging purpose", + response = UUID.class) + }), + @ApiResponse(code = 401, message = "Authentication Error"), + @ApiResponse(code = 403, message = "Authorization Error"), + @ApiResponse(code = 404, message = "Resource Not Found"), + @ApiResponse(code = 409, message = "Delete Conflict, Rule Violation"), + @ApiResponse(code = 500, message = "Internal Server Error") + }) + public Response deleteAllVersionsOfPolicy( + @PathParam("policyTypeId") @ApiParam(value = "ID of policy type", required = true) String policyTypeId, + @PathParam("policyTypeVersion") + @ApiParam(value = "Version of policy type", required = true) String policyTypeVersion, + @PathParam("policyId") @ApiParam(value = "ID of policy", required = true) String policyId, + @HeaderParam("X-ONAP-RequestID") @ApiParam("RequestID for http transaction") UUID requestId) { + return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId) + .entity(new PolicyProvider().deletePolicies(policyTypeId, policyTypeVersion, policyId, null)).build(); + } + + /** + * Deletes the specified version of a particular policy. + * + * @param policyTypeId the ID of specified policy type + * @param policyTypeVersion the version of specified policy type + * @param policyId the ID of specified policy + * @param policyVersion the version of specified policy + * + * @return the Response object containing the results of the API operation + */ + @DELETE + @Path("/policytypes/{policyTypeId}/versions/{policyTypeVersion}/policies/{policyId}/versions/{policyVersion}") + @ApiOperation(value = "Delete a particular version of a policy", + notes = "Rule: the version that has been deployed in PDP group(s) cannot be deleted", + authorizations = @Authorization(value = "basicAuth"), + tags = { "Policy", }, + extensions = { + @Extension(name = "interface info", properties = { + @ExtensionProperty(name = "api-version", value = "1.0.0"), + @ExtensionProperty(name = "last-mod-release", value = "Dublin") + }) + }) + @ApiResponses(value = { + @ApiResponse(code = 204, message = "Resource successfully deleted, no content returned", + responseHeaders = { + @ResponseHeader(name = "X-MinorVersion", + description = "Used to request or communicate a MINOR version back from the client" + + " to the server, and from the server back to the client", + response = String.class), + @ResponseHeader(name = "X-PatchVersion", + description = "Used only to communicate a PATCH version in a response for" + + " troubleshooting purposes only, and will not be provided by" + + " the client on request", + response = String.class), + @ResponseHeader(name = "X-LatestVersion", + description = "Used only to communicate an API's latest version", + response = String.class), + @ResponseHeader(name = "X-ONAP-RequestID", + description = "Used to track REST transactions for logging purpose", + response = UUID.class) + }), + @ApiResponse(code = 401, message = "Authentication Error"), + @ApiResponse(code = 403, message = "Authorization Error"), + @ApiResponse(code = 404, message = "Resource Not Found"), + @ApiResponse(code = 409, message = "Delete Conflict, Rule Violation"), + @ApiResponse(code = 500, message = "Internal Server Error") + }) + public Response deleteSpecificVersionOfPolicy( + @PathParam("policyTypeId") @ApiParam(value = "PolicyType ID", required = true) String policyTypeId, + @PathParam("policyTypeVersion") + @ApiParam(value = "Version of policy type", required = true) String policyTypeVersion, + @PathParam("policyId") @ApiParam(value = "ID of policy", required = true) String policyId, + @PathParam("policyVersion") @ApiParam(value = "Version of policy", required = true) String policyVersion, + @HeaderParam("X-ONAP-RequestID") @ApiParam("RequestID for http transaction") UUID requestId) { + return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId) + .entity(new PolicyProvider().deletePolicies(policyTypeId, policyTypeVersion, + policyId, policyVersion)).build(); + } + + private ResponseBuilder addVersionControlHeaders(ResponseBuilder rb) { + return rb.header("X-MinorVersion", "0").header("X-PatchVersion", "0").header("X-LatestVersion", "1.0.0"); + } + + private ResponseBuilder addLoggingHeaders(ResponseBuilder rb, UUID requestId) { + if (requestId == null) { + // Generate a random uuid if client does not embed requestId in rest request + return rb.header("X-ONAP-RequestID", UUID.randomUUID()); + } + return rb.header("X-ONAP-RequestID", requestId); + } +} diff --git a/main/src/main/java/org/onap/policy/api/main/rest/ApiRestServer.java b/main/src/main/java/org/onap/policy/api/main/rest/ApiRestServer.java index cf27bacb..a78649d4 100644 --- a/main/src/main/java/org/onap/policy/api/main/rest/ApiRestServer.java +++ b/main/src/main/java/org/onap/policy/api/main/rest/ApiRestServer.java @@ -1,7 +1,7 @@ /*- * ============LICENSE_START======================================================= - * ONAP Policy API - * ================================================================================ + * ONAP Policy API + * ================================================================================ * Copyright (C) 2018 Samsung Electronics Co., Ltd. All rights reserved. * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. * ================================================================================ @@ -30,18 +30,18 @@ import org.onap.policy.api.main.parameters.RestServerParameters; import org.onap.policy.api.main.rest.aaf.AafApiFilter; import org.onap.policy.common.capabilities.Startable; import org.onap.policy.common.endpoints.http.server.HttpServletServer; +import org.onap.policy.common.endpoints.properties.PolicyEndPointProperties; +import org.onap.policy.models.tosca.serialization.simple.ToscaServiceTemplateMessageBodyHandler; import org.slf4j.Logger; import org.slf4j.LoggerFactory; + /** * Class to manage life cycle of api rest server. * */ public class ApiRestServer implements Startable { - private static final String SEPARATOR = "."; - private static final String HTTP_SERVER_SERVICES = "http.server.services"; - private static final Logger LOGGER = LoggerFactory.getLogger(ApiRestServer.class); private List servers = new ArrayList<>(); @@ -76,7 +76,7 @@ public class ApiRestServer implements Startable { } return true; } - + /** * Creates the server properties object using restServerParameters. * @@ -84,23 +84,28 @@ public class ApiRestServer implements Startable { */ private Properties getServerProperties() { final Properties props = new Properties(); - props.setProperty(HTTP_SERVER_SERVICES, restServerParameters.getName()); - props.setProperty(HTTP_SERVER_SERVICES + SEPARATOR + restServerParameters.getName() + ".host", - restServerParameters.getHost()); - props.setProperty(HTTP_SERVER_SERVICES + SEPARATOR + restServerParameters.getName() + ".port", - Integer.toString(restServerParameters.getPort())); - props.setProperty(HTTP_SERVER_SERVICES + SEPARATOR + restServerParameters.getName() + ".restClasses", - ApiRestController.class.getCanonicalName()); - props.setProperty(HTTP_SERVER_SERVICES + SEPARATOR + restServerParameters.getName() + ".managed", "false"); - props.setProperty(HTTP_SERVER_SERVICES + SEPARATOR + restServerParameters.getName() + ".swagger", "true"); - props.setProperty(HTTP_SERVER_SERVICES + SEPARATOR + restServerParameters.getName() + ".userName", - restServerParameters.getUserName()); - props.setProperty(HTTP_SERVER_SERVICES + SEPARATOR + restServerParameters.getName() + ".password", - restServerParameters.getPassword()); - props.setProperty(HTTP_SERVER_SERVICES + SEPARATOR + restServerParameters.getName() + ".https", - String.valueOf(restServerParameters.isHttps())); - props.setProperty(HTTP_SERVER_SERVICES + SEPARATOR + restServerParameters.getName() + ".aaf", - String.valueOf(restServerParameters.isAaf())); + final String svcpfx = + PolicyEndPointProperties.PROPERTY_HTTP_SERVER_SERVICES + "." + restServerParameters.getName(); + + props.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_SERVER_SERVICES, restServerParameters.getName()); + props.setProperty(svcpfx + PolicyEndPointProperties.PROPERTY_HTTP_HOST_SUFFIX, restServerParameters.getHost()); + props.setProperty(svcpfx + PolicyEndPointProperties.PROPERTY_HTTP_PORT_SUFFIX, + Integer.toString(restServerParameters.getPort())); + props.setProperty(svcpfx + PolicyEndPointProperties.PROPERTY_HTTP_REST_CLASSES_SUFFIX, + ApiRestController.class.getCanonicalName()); + props.setProperty(svcpfx + PolicyEndPointProperties.PROPERTY_MANAGED_SUFFIX, "false"); + props.setProperty(svcpfx + PolicyEndPointProperties.PROPERTY_HTTP_SWAGGER_SUFFIX, "true"); + props.setProperty(svcpfx + PolicyEndPointProperties.PROPERTY_HTTP_AUTH_USERNAME_SUFFIX, + restServerParameters.getUserName()); + props.setProperty(svcpfx + PolicyEndPointProperties.PROPERTY_HTTP_AUTH_PASSWORD_SUFFIX, + restServerParameters.getPassword()); + props.setProperty(svcpfx + PolicyEndPointProperties.PROPERTY_HTTP_HTTPS_SUFFIX, + String.valueOf(restServerParameters.isHttps())); + props.setProperty(svcpfx + PolicyEndPointProperties.PROPERTY_AAF_SUFFIX, + String.valueOf(restServerParameters.isAaf())); + props.setProperty(svcpfx + PolicyEndPointProperties.PROPERTY_HTTP_SERIALIZATION_PROVIDER, + ToscaServiceTemplateMessageBodyHandler.class.getName()); + return props; } diff --git a/main/src/main/java/org/onap/policy/api/main/rest/provider/PolicyProvider.java b/main/src/main/java/org/onap/policy/api/main/rest/provider/PolicyProvider.java index c02ce6c7..4181f98c 100644 --- a/main/src/main/java/org/onap/policy/api/main/rest/provider/PolicyProvider.java +++ b/main/src/main/java/org/onap/policy/api/main/rest/provider/PolicyProvider.java @@ -1,81 +1,83 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP Policy API - * ================================================================================ - * 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.api.main.rest.provider; - -import org.onap.policy.models.tosca.ToscaPolicy; -import org.onap.policy.models.tosca.ToscaPolicyList; - -/** - * Class to provide all kinds of policy operations. - */ -public class PolicyProvider { - - private static final String POST_OK = "Successfully created"; - private static final String DELETE_OK = "Successfully deleted"; - - /** - * Retrieves a list of policies matching specified ID and version of both policy type and policy. - * - * @param policyTypeId the ID of policy type - * @param policyTypeVersion the version of policy type - * @param policyId the ID of policy - * @param policyVersion the version of policy - * - * @return the ToscaPolicyList object containing a list of policies matching specified fields - */ - public ToscaPolicyList fetchPolicies(String policyTypeId, String policyTypeVersion, - String policyId, String policyVersion) { - // placeholder - return new ToscaPolicyList(); - } - - /** - * Creates a new policy for a policy type ID and version. - * - * @param policyTypeId the ID of policy type - * @param policyTypeVersion the version of policy type - * @param body the entity body of policy - * - * @return a string message indicating the operation results - */ - public String createPolicy(String policyTypeId, String policyTypeVersion, ToscaPolicy body) { - // placeholder - return POST_OK; - } - - /** - * Deletes the policies matching specified ID and version of both policy type and policy. - * - * @param policyTypeId the ID of policy type - * @param policyTypeVersion the version of policy type - * @param policyId the ID of policy - * @param policyVersion the version of policy - * - * @return a string message indicating the operation results - */ - public String deletePolicies(String policyTypeId, String policyTypeVersion, - String policyId, String policyVersion) { - // placeholder - return DELETE_OK; - } -} +/*- + * ============LICENSE_START======================================================= + * ONAP Policy API + * ================================================================================ + * 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.api.main.rest.provider; + +import org.onap.policy.models.tosca.concepts.ToscaServiceTemplate; + +/** + * Class to provide all kinds of policy operations. + */ +public class PolicyProvider { + + private static final String POST_OK = "Successfully created"; + private static final String DELETE_OK = "Successfully deleted"; + + /** + * Retrieves a list of policies matching specified ID and version of both policy type and policy. + * + * @param policyTypeId the ID of policy type + * @param policyTypeVersion the version of policy type + * @param policyId the ID of policy + * @param policyVersion the version of policy + * + * @return the ToscaPolicyList object containing a list of policies matching specified fields + */ + public ToscaServiceTemplate fetchPolicies(String policyTypeId, String policyTypeVersion, + String policyId, String policyVersion) { + // placeholder + // something like return new PolicyModelProvider().getPolicies(); + return new ToscaServiceTemplate(); + } + + /** + * Creates a new policy for a policy type ID and version. + * + * @param policyTypeId the ID of policy type + * @param policyTypeVersion the version of policy type + * @param body the entity body of policy + * + * @return a string message indicating the operation results + */ + public String createPolicy(String policyTypeId, String policyTypeVersion, ToscaServiceTemplate body) { + // placeholder + // something like return new PolicyModelProvider().createPolicies(); + return POST_OK; + } + + /** + * Deletes the policies matching specified ID and version of both policy type and policy. + * + * @param policyTypeId the ID of policy type + * @param policyTypeVersion the version of policy type + * @param policyId the ID of policy + * @param policyVersion the version of policy + * + * @return a string message indicating the operation results + */ + public String deletePolicies(String policyTypeId, String policyTypeVersion, + String policyId, String policyVersion) { + // placeholder + // something like return new PolicyModelProvider().deletePolicies(); + return DELETE_OK; + } +} diff --git a/main/src/main/java/org/onap/policy/api/main/rest/provider/PolicyTypeProvider.java b/main/src/main/java/org/onap/policy/api/main/rest/provider/PolicyTypeProvider.java index 67c4237c..32d16dd7 100644 --- a/main/src/main/java/org/onap/policy/api/main/rest/provider/PolicyTypeProvider.java +++ b/main/src/main/java/org/onap/policy/api/main/rest/provider/PolicyTypeProvider.java @@ -1,73 +1,75 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP Policy API - * ================================================================================ - * 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.api.main.rest.provider; - -import org.onap.policy.models.tosca.ToscaPolicyType; -import org.onap.policy.models.tosca.ToscaPolicyTypeList; - -/** - * Class to provide all kinds of policy type operations. - */ -public class PolicyTypeProvider { - - private static final String POST_OK = "Successfully created"; - private static final String DELETE_OK = "Successfully deleted"; - - /** - * Retrieves a list of policy types matching specified policy type ID and version. - * - * @param policyTypeId the ID of policy type - * @param policyTypeVersion the version of policy type - * - * @return the ToscaPolicyTypeList object containing a list of policy types matching specified fields - */ - public ToscaPolicyTypeList fetchPolicyTypes(String policyTypeId, String policyTypeVersion) { - // placeholder - return new ToscaPolicyTypeList(); - } - - /** - * Creates a new policy type. - * - * @param body the entity body of policy type - * - * @return a string message indicating the operation results - */ - public String createPolicyType(ToscaPolicyType body) { - // placeholder - return POST_OK; - } - - /** - * Delete the policy types matching specified policy type ID and version. - * - * @param policyTypeId the ID of policy type - * @param policyTypeVersion the version of policy type - * - * @return a string message indicating the operation results - */ - public String deletePolicyTypes(String policyTypeId, String policyTypeVersion) { - // placeholder - return DELETE_OK; - } -} +/*- + * ============LICENSE_START======================================================= + * ONAP Policy API + * ================================================================================ + * 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.api.main.rest.provider; + +import org.onap.policy.models.tosca.concepts.ToscaServiceTemplate; + +/** + * Class to provide all kinds of policy type operations. + */ +public class PolicyTypeProvider { + + private static final String POST_OK = "Successfully created"; + private static final String DELETE_OK = "Successfully deleted"; + + /** + * Retrieves a list of policy types matching specified policy type ID and version. + * + * @param policyTypeId the ID of policy type + * @param policyTypeVersion the version of policy type + * + * @return the ToscaPolicyTypeList object containing a list of policy types matching specified fields + */ + public ToscaServiceTemplate fetchPolicyTypes(String policyTypeId, String policyTypeVersion) { + // placeholder + // something like return new PolicyModelProvider().getPolicyTypes(); + return new ToscaServiceTemplate(); + } + + /** + * Creates a new policy type. + * + * @param body the entity body of policy type + * + * @return a string message indicating the operation results + */ + public String createPolicyType(ToscaServiceTemplate body) { + // placeholder + // something like return new PolicyModelProvider().createPolicyTypes(); + return POST_OK; + } + + /** + * Delete the policy types matching specified policy type ID and version. + * + * @param policyTypeId the ID of policy type + * @param policyTypeVersion the version of policy type + * + * @return a string message indicating the operation results + */ + public String deletePolicyTypes(String policyTypeId, String policyTypeVersion) { + // placeholder + // something like return new PolicyModelProvider().deletePolicyTypes(); + return DELETE_OK; + } +} -- cgit 1.2.3-korg