diff options
7 files changed, 878 insertions, 44 deletions
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 e7deb118..0f68882f 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 @@ -46,7 +46,6 @@ 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;
@@ -54,15 +53,17 @@ 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;
+import org.onap.policy.models.tosca.simple.concepts.ToscaServiceTemplate;
/**
* Class to provide REST API services.
+ *
+ * @author Chenfei Gao (cgao@research.att.com)
*/
@Path("/policy/api/v1")
@Api(value = "Policy Design API")
-@Produces(MediaType.APPLICATION_JSON)
-@Consumes(MediaType.APPLICATION_JSON)
+@Produces({"application/json", "application/yaml"})
+@Consumes({"application/json", "application/yaml"})
@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"
@@ -336,14 +337,7 @@ public class ApiRestController { 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",
+ response = ToscaServiceTemplate.class,
responseHeaders = {
@ResponseHeader(name = "X-MinorVersion",
description = "Used to request or communicate a MINOR version back from the client"
@@ -360,7 +354,14 @@ public class ApiRestController { @ResponseHeader(name = "X-ONAP-RequestID",
description = "Used to track REST transactions for logging purpose",
response = UUID.class)
- }),
+ },
+ 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 = 400, message = "Invalid Body"),
@ApiResponse(code = 401, message = "Authentication Error"),
@ApiResponse(code = 403, message = "Authorization Error"),
@@ -715,20 +716,11 @@ public class ApiRestController { */
@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",
+ response = ToscaServiceTemplate.class,
responseHeaders = {
@ResponseHeader(name = "X-MinorVersion",
description = "Used to request or communicate a MINOR version back from the client"
@@ -745,7 +737,14 @@ public class ApiRestController { @ResponseHeader(name = "X-ONAP-RequestID",
description = "Used to track REST transactions for logging purpose",
response = UUID.class)
- }),
+ },
+ 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 = 400, message = "Invalid Body"),
@ApiResponse(code = 401, message = "Authentication Error"),
@ApiResponse(code = 403, message = "Authorization Error"),
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 a78649d4..46ec34d7 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 @@ -31,7 +31,7 @@ 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.onap.policy.models.tosca.simple.serialization.ToscaServiceTemplateMessageBodyHandler; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -92,7 +92,8 @@ public class ApiRestServer implements Startable { props.setProperty(svcpfx + PolicyEndPointProperties.PROPERTY_HTTP_PORT_SUFFIX, Integer.toString(restServerParameters.getPort())); props.setProperty(svcpfx + PolicyEndPointProperties.PROPERTY_HTTP_REST_CLASSES_SUFFIX, - ApiRestController.class.getCanonicalName()); + String.join(",", LegacyApiRestController.class.getCanonicalName(), + 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, diff --git a/main/src/main/java/org/onap/policy/api/main/rest/LegacyApiRestController.java b/main/src/main/java/org/onap/policy/api/main/rest/LegacyApiRestController.java new file mode 100644 index 00000000..8e00b436 --- /dev/null +++ b/main/src/main/java/org/onap/policy/api/main/rest/LegacyApiRestController.java @@ -0,0 +1,689 @@ +/*- + * ============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; + +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.Extension; +import io.swagger.annotations.ExtensionProperty; +import io.swagger.annotations.ResponseHeader; +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.core.Response; +import javax.ws.rs.core.Response.ResponseBuilder; +import org.onap.policy.api.main.rest.provider.LegacyGuardPolicyProvider; +import org.onap.policy.api.main.rest.provider.LegacyOperationalPolicyProvider; +import org.onap.policy.models.tosca.legacy.concepts.LegacyGuardPolicy; +import org.onap.policy.models.tosca.legacy.concepts.LegacyOperationalPolicy; +import org.onap.policy.models.tosca.simple.concepts.ToscaServiceTemplate; + +/** + * Class to provide legacy REST API services. + * + * @author Chenfei Gao (cgao@research.att.com) + */ +@Path("/policy/api/v1") +@Api(value = "Legacy Policy Design API") +@Produces({"application/json; vnd.onap.guard", "application/json; vnd.onap.operational"}) +@Consumes({"application/json; vnd.onap.guard", "application/json; vnd.onap.operational"}) +public class LegacyApiRestController { + + /** + * Retrieves all versions of guard policies. + * + * @return the Response object containing the results of the API operation + */ + @GET + @Path("/policytypes/onap.policy.controlloop.guard/versions/1.0.0/policies") + @Produces("application/json; vnd.onap.guard") + @ApiOperation(value = "Retrieve all versions of guard policies", + notes = "Returns a list of all versions of guard policies", + 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 = { "Legacy Guard 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 = 500, message = "Internal Server Error") + }) + public Response getAllGuardPolicies( + @HeaderParam("X-ONAP-RequestID") @ApiParam("RequestID for http transaction") UUID requestId) { + return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId) + .entity(new LegacyGuardPolicyProvider().fetchGuardPolicies(null, null)).build(); + } + + /** + * Retrieves all versions of a particular guard policy. + * + * @param policyId the ID of specified guard policy + * + * @return the Response object containing the results of the API operation + */ + @GET + @Path("/policytypes/onap.policy.controlloop.guard/versions/1.0.0/policies/{policyId}") + @Produces("application/json; vnd.onap.guard") + @ApiOperation(value = "Retrieve all versions of a particular guard policy", + notes = "Returns a list of all versions of the specified guard 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 = { "Legacy Guard 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 getAllVersionsOfGuardPolicy( + @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 LegacyGuardPolicyProvider().fetchGuardPolicies(policyId, null)).build(); + } + + /** + * Retrieves the specified version of a particular guard policy. + * + * @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/onap.policy.controlloop.guard/versions/1.0.0/policies/{policyId}/versions/{policyVersion}") + @Produces("application/json; vnd.onap.guard") + @ApiOperation(value = "Retrieve one version of a particular guard policy", + notes = "Returns a particular version of a specified guard 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 = { "Legacy Guard 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 getSpecificVersionOfGuardPolicy( + @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 LegacyGuardPolicyProvider().fetchGuardPolicies(policyId, policyVersion)).build(); + } + + /** + * Creates a new guard policy. + * + * @param body the body of policy + * + * @return the Response object containing the results of the API operation + */ + @POST + @Path("/policytypes/onap.policy.controlloop.guard/versions/1.0.0/policies") + @Consumes("application/json; vnd.onap.guard") + @Produces("application/json; vnd.onap.guard") + @ApiOperation(value = "Create a new guard policy", + notes = "Client should provide entity body of the new guard policy", + authorizations = @Authorization(value = "basicAuth"), + tags = { "Legacy Guard 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) + }, + 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 = 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 createGuardPolicy( + @HeaderParam("X-ONAP-RequestID") @ApiParam("RequestID for http transaction") UUID requestId, + @ApiParam(value = "Entity body of policy", required = true) LegacyGuardPolicy body) { + return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId) + .entity(new LegacyGuardPolicyProvider().createGuardPolicy(body)).build(); + } + + /** + * Deletes all versions of a particular guard policy. + * + * @param policyId the ID of specified policy + * + * @return the Response object containing the results of the API operation + */ + @DELETE + @Path("/policytypes/onap.policy.controlloop.guard/versions/1.0.0/policies/{policyId}") + @ApiOperation(value = "Delete all versions of a guard policy", + notes = "Rule: the version that has been deployed in PDP group(s) cannot be deleted", + authorizations = @Authorization(value = "basicAuth"), + tags = { "Legacy Guard 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 deleteAllVersionsOfGuardPolicy( + @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 LegacyGuardPolicyProvider().deleteGuardPolicies(policyId, null)).build(); + } + + /** + * Deletes the specified version of a particular guard policy. + * + * @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/onap.policy.controlloop.guard/versions/1.0.0/policies/{policyId}/versions/{policyVersion}") + @ApiOperation(value = "Delete a particular version of a guard policy", + notes = "Rule: the version that has been deployed in PDP group(s) cannot be deleted", + authorizations = @Authorization(value = "basicAuth"), + tags = { "Legacy Guard 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 deleteSpecificVersionOfGuardPolicy( + @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 LegacyGuardPolicyProvider().deleteGuardPolicies(policyId, policyVersion)).build(); + } + + /** + * Retrieves all versions of operational policies. + * + * @return the Response object containing the results of the API operation + */ + @GET + @Path("/policytypes/onap.policy.controlloop.operational/versions/1.0.0/policies") + @Produces("application/json; vnd.onap.operational") + @ApiOperation(value = "Retrieve all versions of operational policies", + notes = "Returns a list of all versions of operational policies", + 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 = { "Legacy Operational 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 = 500, message = "Internal Server Error") + }) + public Response getAllOperationalPolicies( + @HeaderParam("X-ONAP-RequestID") @ApiParam("RequestID for http transaction") UUID requestId) { + return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId) + .entity(new LegacyOperationalPolicyProvider().fetchOperationalPolicies(null, null)).build(); + } + + /** + * Retrieves all versions of a particular operational policy. + * + * @param policyId the ID of specified operational policy + * + * @return the Response object containing the results of the API operation + */ + @GET + @Path("/policytypes/onap.policy.controlloop.operational/versions/1.0.0/policies/{policyId}") + @Produces("application/json; vnd.onap.operational") + @ApiOperation(value = "Retrieve all versions of a particular operational policy", + notes = "Returns a list of all versions of the specified operational 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 = { "Legacy Operational 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 getAllVersionsOfOperationalPolicy( + @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 LegacyOperationalPolicyProvider().fetchOperationalPolicies(policyId, null)).build(); + } + + /** + * Retrieves the specified version of a particular operational policy. + * + * @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/onap.policy.controlloop.operational/versions/1.0.0/" + + "policies/{policyId}/versions/{policyVersion}") + @Produces("application/json; vnd.onap.operational") + @ApiOperation(value = "Retrieve one version of a particular operational policy", + notes = "Returns a particular version of a specified operational 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 = { "Legacy Operational 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 getSpecificVersionOfOperationalPolicy( + @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 LegacyOperationalPolicyProvider().fetchOperationalPolicies(policyId, policyVersion)).build(); + } + + /** + * Creates a new operational policy. + * + * @param body the body of policy + * + * @return the Response object containing the results of the API operation + */ + @POST + @Path("/policytypes/onap.policy.controlloop.operational/versions/1.0.0/policies") + @Consumes("application/json; vnd.onap.operational") + @Produces("application/json; vnd.onap.operational") + @ApiOperation(value = "Create a new operational policy", + notes = "Client should provide entity body of the new operational policy", + authorizations = @Authorization(value = "basicAuth"), + tags = { "Legacy Operational 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) + }, + 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 = 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 createOperationalPolicy( + @HeaderParam("X-ONAP-RequestID") @ApiParam("RequestID for http transaction") UUID requestId, + @ApiParam(value = "Entity body of policy", required = true) LegacyOperationalPolicy body) { + return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId) + .entity(new LegacyOperationalPolicyProvider().createOperationalPolicy(body)).build(); + } + + /** + * Deletes all versions of a particular operational policy. + * + * @param policyId the ID of specified policy + * + * @return the Response object containing the results of the API operation + */ + @DELETE + @Path("/policytypes/onap.policy.controlloop.operational/versions/1.0.0/policies/{policyId}") + @ApiOperation(value = "Delete all versions of a operational policy", + notes = "Rule: the version that has been deployed in PDP group(s) cannot be deleted", + authorizations = @Authorization(value = "basicAuth"), + tags = { "Legacy Operational 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 deleteAllVersionsOfOperationalPolicy( + @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 LegacyOperationalPolicyProvider().deleteOperationalPolicies(policyId, null)).build(); + } + + /** + * Deletes the specified version of a particular operational policy. + * + * @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/onap.policy.controlloop.operational/versions/1.0.0/" + + "policies/{policyId}/versions/{policyVersion}") + @ApiOperation(value = "Delete a particular version of a specified operational policy", + notes = "Rule: the version that has been deployed in PDP group(s) cannot be deleted", + authorizations = @Authorization(value = "basicAuth"), + tags = { "Legacy Operational 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 deleteSpecificVersionOfOperationalPolicy( + @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 LegacyOperationalPolicyProvider().deleteOperationalPolicies(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); + } +}
\ No newline at end of file diff --git a/main/src/main/java/org/onap/policy/api/main/rest/provider/LegacyGuardPolicyProvider.java b/main/src/main/java/org/onap/policy/api/main/rest/provider/LegacyGuardPolicyProvider.java new file mode 100644 index 00000000..f627493c --- /dev/null +++ b/main/src/main/java/org/onap/policy/api/main/rest/provider/LegacyGuardPolicyProvider.java @@ -0,0 +1,74 @@ +/*- + * ============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.legacy.concepts.LegacyGuardPolicy; +import org.onap.policy.models.tosca.simple.concepts.ToscaServiceTemplate; + +/** + * Class to provide all kinds of legacy guard policy operations. + * + * @author Chenfei Gao (cgao@research.att.com) + */ +public class LegacyGuardPolicyProvider { + + private static final String DELETE_OK = "Successfully deleted"; + + /** + * Retrieves a list of guard policies matching specified ID and version. + * + * @param policyId the ID of policy + * @param policyVersion the version of policy + * + * @return the ToscaServiceTemplate object + */ + public ToscaServiceTemplate fetchGuardPolicies(String policyId, String policyVersion) { + // placeholder + return new ToscaServiceTemplate(); + } + + /** + * Creates a new guard policy. + * + * @param body the entity body of policy + * + * @return the ToscaServiceTemplate object + */ + public ToscaServiceTemplate createGuardPolicy(LegacyGuardPolicy body) { + // placeholder + return new ToscaServiceTemplate(); + } + + /** + * Deletes the guard policies matching specified ID and version. + * + * @param policyId the ID of policy + * @param policyVersion the version of policy + * + * @return a string message indicating the operation results + */ + public String deleteGuardPolicies(String policyId, String policyVersion) { + // placeholder + return DELETE_OK; + } +}
\ No newline at end of file diff --git a/main/src/main/java/org/onap/policy/api/main/rest/provider/LegacyOperationalPolicyProvider.java b/main/src/main/java/org/onap/policy/api/main/rest/provider/LegacyOperationalPolicyProvider.java new file mode 100644 index 00000000..7d3e1875 --- /dev/null +++ b/main/src/main/java/org/onap/policy/api/main/rest/provider/LegacyOperationalPolicyProvider.java @@ -0,0 +1,74 @@ +/*- + * ============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.legacy.concepts.LegacyOperationalPolicy; +import org.onap.policy.models.tosca.simple.concepts.ToscaServiceTemplate; + +/** + * Class to provide all kinds of legacy operational policy operations. + * + * @author Chenfei Gao (cgao@research.att.com) + */ +public class LegacyOperationalPolicyProvider { + + private static final String DELETE_OK = "Successfully deleted"; + + /** + * Retrieves a list of operational policies matching specified ID and version. + * + * @param policyId the ID of policy + * @param policyVersion the version of policy + * + * @return the ToscaServiceTemplate object + */ + public ToscaServiceTemplate fetchOperationalPolicies(String policyId, String policyVersion) { + // placeholder + return new ToscaServiceTemplate(); + } + + /** + * Creates a new operational policy. + * + * @param body the entity body of policy + * + * @return the LegacyOperationalPolicy object + */ + public LegacyOperationalPolicy createOperationalPolicy(LegacyOperationalPolicy body) { + // placeholder + return new LegacyOperationalPolicy(); + } + + /** + * Deletes the operational policies matching specified ID and version. + * + * @param policyId the ID of policy + * @param policyVersion the version of policy + * + * @return a string message indicating the operation results + */ + public String deleteOperationalPolicies(String policyId, String policyVersion) { + // placeholder + return DELETE_OK; + } +}
\ No newline at end of file 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 2c5e63a9..690bdbd0 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 @@ -22,14 +22,15 @@ package org.onap.policy.api.main.rest.provider;
-import org.onap.policy.models.tosca.concepts.ToscaServiceTemplate;
+import org.onap.policy.models.tosca.simple.concepts.ToscaServiceTemplate;
/**
* Class to provide all kinds of policy operations.
+ *
+ * @author Chenfei Gao (cgao@research.att.com)
*/
public class PolicyProvider {
- private static final String POST_OK = "Successfully created";
private static final String DELETE_OK = "Successfully deleted";
/**
@@ -40,12 +41,11 @@ public class PolicyProvider { * @param policyId the ID of policy
* @param policyVersion the version of policy
*
- * @return the ToscaPolicyList object containing a list of policies matching specified fields
+ * @return the ToscaServiceTemplate object
*/
public ToscaServiceTemplate fetchPolicies(String policyTypeId, String policyTypeVersion,
String policyId, String policyVersion) {
// placeholder
- // something like return new PolicyModelProvider().getPolicies(<blah>);
return new ToscaServiceTemplate();
}
@@ -56,12 +56,12 @@ public class PolicyProvider { * @param policyTypeVersion the version of policy type
* @param body the entity body of policy
*
- * @return a string message indicating the operation results
+ * @return the ToscaServiceTemplate object
*/
- public String createPolicy(String policyTypeId, String policyTypeVersion, ToscaServiceTemplate body) {
+ public ToscaServiceTemplate createPolicy(String policyTypeId, String policyTypeVersion,
+ ToscaServiceTemplate body) {
// placeholder
- // something like return new PolicyModelProvider().createPolicies(<blah>);
- return POST_OK;
+ return new ToscaServiceTemplate();
}
/**
@@ -77,7 +77,6 @@ public class PolicyProvider { public String deletePolicies(String policyTypeId, String policyTypeVersion,
String policyId, String policyVersion) {
// placeholder
- // something like return new PolicyModelProvider().deletePolicies(<blah>);
return DELETE_OK;
}
}
\ No newline at end of file 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 32d16dd7..5038e315 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 @@ -22,14 +22,15 @@ package org.onap.policy.api.main.rest.provider;
-import org.onap.policy.models.tosca.concepts.ToscaServiceTemplate;
+import org.onap.policy.models.tosca.simple.concepts.ToscaServiceTemplate;
/**
* Class to provide all kinds of policy type operations.
+ *
+ * @author Chenfei Gao (cgao@research.att.com)
*/
public class PolicyTypeProvider {
- private static final String POST_OK = "Successfully created";
private static final String DELETE_OK = "Successfully deleted";
/**
@@ -38,11 +39,10 @@ public class PolicyTypeProvider { * @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
+ * @return the ToscaServiceTemplate object
*/
public ToscaServiceTemplate fetchPolicyTypes(String policyTypeId, String policyTypeVersion) {
// placeholder
- // something like return new PolicyModelProvider().getPolicyTypes(<blah>);
return new ToscaServiceTemplate();
}
@@ -51,12 +51,11 @@ public class PolicyTypeProvider { *
* @param body the entity body of policy type
*
- * @return a string message indicating the operation results
+ * @return the ToscaServiceTemplate objects
*/
- public String createPolicyType(ToscaServiceTemplate body) {
+ public ToscaServiceTemplate createPolicyType(ToscaServiceTemplate body) {
// placeholder
- // something like return new PolicyModelProvider().createPolicyTypes(<blah>);
- return POST_OK;
+ return new ToscaServiceTemplate();
}
/**
@@ -69,7 +68,6 @@ public class PolicyTypeProvider { */
public String deletePolicyTypes(String policyTypeId, String policyTypeVersion) {
// placeholder
- // something like return new PolicyModelProvider().deletePolicyTypes(<blah>);
return DELETE_OK;
}
}
|