diff options
author | Chenfei Gao <cgao@research.att.com> | 2019-03-17 22:16:18 -0400 |
---|---|---|
committer | Chenfei Gao <cgao@research.att.com> | 2019-03-17 22:34:41 -0400 |
commit | ca2b1d4bccd05cb8510ef0800d2fc18a34eb4c9a (patch) | |
tree | 1573015cca83e718922fb9c407ad1d67574db838 /main/src | |
parent | 281859327610680edd33851cf0763902b1473141 (diff) |
Add API endpoints for legacy policies
Includes:
a) Added separate endpoints for legacy guard and ops policies
b) Added legacy policy providers
c) Added hotfix for models package name
d) Added new REST controller to http server properties
Issue-ID: POLICY-1515
Change-Id: Id69c88810efc8b76fccc62f386d6e189ba297b1e
Signed-off-by: Chenfei Gao <cgao@research.att.com>
Diffstat (limited to 'main/src')
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;
}
}
|