Extracted some methods to address cyclomatic complexity.
Created super classes to address duplicate code.
Did not address code coverage.
Change-Id: I2ec07cdad9e671b0e239e2d4ae9395e89b9e4266
Issue-ID: POLICY-1791
Signed-off-by: Jim Hahn <jrh3@att.com>
import javax.ws.rs.PathParam;\r
import javax.ws.rs.Produces;\r
import javax.ws.rs.core.Response;\r
-import javax.ws.rs.core.Response.ResponseBuilder;\r
import org.apache.commons.lang3.tuple.Pair;\r
import org.onap.policy.api.main.rest.provider.HealthCheckProvider;\r
import org.onap.policy.api.main.rest.provider.PolicyProvider;\r
import org.onap.policy.common.endpoints.report.HealthCheckReport;\r
import org.onap.policy.common.endpoints.utils.NetLoggerUtil;\r
import org.onap.policy.common.endpoints.utils.NetLoggerUtil.EventType;\r
-import org.onap.policy.common.utils.coder.Coder;\r
-import org.onap.policy.common.utils.coder.CoderException;\r
-import org.onap.policy.common.utils.coder.StandardCoder;\r
import org.onap.policy.models.base.PfModelException;\r
import org.onap.policy.models.base.PfModelRuntimeException;\r
import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;\r
}),\r
schemes = { SwaggerDefinition.Scheme.HTTP, SwaggerDefinition.Scheme.HTTPS },\r
securityDefinition = @SecurityDefinition(basicAuthDefinitions = { @BasicAuthDefinition(key = "basicAuth") }))\r
-public class ApiRestController {\r
+public class ApiRestController extends CommonRestController {\r
\r
private static final Logger LOGGER = LoggerFactory.getLogger(ApiRestController.class);\r
\r
- private final Coder coder = new StandardCoder();\r
-\r
/**\r
* Retrieves the healthcheck status of the API component.\r
*\r
@HeaderParam("X-ONAP-RequestID") @ApiParam("RequestID for http transaction") UUID requestId) {\r
\r
updateApiStatisticsCounter(Target.OTHER, Result.SUCCESS, HttpMethod.GET);\r
- return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId)\r
- .entity(new HealthCheckProvider().performHealthCheck()).build();\r
+ return makeOkResponse(requestId, new HealthCheckProvider().performHealthCheck());\r
}\r
\r
/**\r
@HeaderParam("X-ONAP-RequestID") @ApiParam("RequestID for http transaction") UUID requestId) {\r
\r
updateApiStatisticsCounter(Target.OTHER, Result.SUCCESS, HttpMethod.GET);\r
- return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId)\r
- .entity(new StatisticsProvider().fetchCurrentStatistics()).build();\r
+\r
+ return makeOkResponse(requestId, new StatisticsProvider().fetchCurrentStatistics());\r
}\r
\r
/**\r
try (PolicyTypeProvider policyTypeProvider = new PolicyTypeProvider()) {\r
ToscaServiceTemplate serviceTemplate = policyTypeProvider.fetchPolicyTypes(null, null);\r
updateApiStatisticsCounter(Target.POLICY_TYPE, Result.SUCCESS, HttpMethod.GET);\r
- return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId)\r
- .entity(serviceTemplate).build();\r
+ return makeOkResponse(requestId, serviceTemplate);\r
} catch (PfModelException | PfModelRuntimeException pfme) {\r
LOGGER.error("GET /policytypes", pfme);\r
updateApiStatisticsCounter(Target.POLICY_TYPE, Result.FAILURE, HttpMethod.GET);\r
- return addLoggingHeaders(addVersionControlHeaders(\r
- Response.status(pfme.getErrorResponse().getResponseCode())), requestId)\r
- .entity(pfme.getErrorResponse()).build();\r
+ return makeErrorResponse(requestId, pfme);\r
}\r
}\r
\r
try (PolicyTypeProvider policyTypeProvider = new PolicyTypeProvider()) {\r
ToscaServiceTemplate serviceTemplate = policyTypeProvider.fetchPolicyTypes(policyTypeId, null);\r
updateApiStatisticsCounter(Target.POLICY_TYPE, Result.SUCCESS, HttpMethod.GET);\r
- return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId)\r
- .entity(serviceTemplate).build();\r
+ return makeOkResponse(requestId, serviceTemplate);\r
} catch (PfModelException | PfModelRuntimeException pfme) {\r
LOGGER.error("GET /policytypes/{}", policyTypeId, pfme);\r
updateApiStatisticsCounter(Target.POLICY_TYPE, Result.FAILURE, HttpMethod.GET);\r
- return addLoggingHeaders(addVersionControlHeaders(\r
- Response.status(pfme.getErrorResponse().getResponseCode())), requestId)\r
- .entity(pfme.getErrorResponse()).build();\r
+ return makeErrorResponse(requestId, pfme);\r
}\r
}\r
\r
try (PolicyTypeProvider policyTypeProvider = new PolicyTypeProvider()) {\r
ToscaServiceTemplate serviceTemplate = policyTypeProvider.fetchPolicyTypes(policyTypeId, versionId);\r
updateApiStatisticsCounter(Target.POLICY_TYPE, Result.SUCCESS, HttpMethod.GET);\r
- return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId)\r
- .entity(serviceTemplate).build();\r
+ return makeOkResponse(requestId, serviceTemplate);\r
} catch (PfModelException | PfModelRuntimeException pfme) {\r
LOGGER.error("GET /policytypes/{}/versions/{}", policyTypeId, versionId, pfme);\r
updateApiStatisticsCounter(Target.POLICY_TYPE, Result.FAILURE, HttpMethod.GET);\r
- return addLoggingHeaders(addVersionControlHeaders(\r
- Response.status(pfme.getErrorResponse().getResponseCode())), requestId)\r
- .entity(pfme.getErrorResponse()).build();\r
+ return makeErrorResponse(requestId, pfme);\r
}\r
}\r
\r
try (PolicyTypeProvider policyTypeProvider = new PolicyTypeProvider()) {\r
ToscaServiceTemplate serviceTemplate = policyTypeProvider.fetchLatestPolicyTypes(policyTypeId);\r
updateApiStatisticsCounter(Target.POLICY_TYPE, Result.SUCCESS, HttpMethod.GET);\r
- return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId)\r
- .entity(serviceTemplate).build();\r
+ return makeOkResponse(requestId, serviceTemplate);\r
} catch (PfModelException | PfModelRuntimeException pfme) {\r
LOGGER.error("GET /policytypes/{}/versions/latest", policyTypeId, pfme);\r
updateApiStatisticsCounter(Target.POLICY_TYPE, Result.FAILURE, HttpMethod.GET);\r
- return addLoggingHeaders(addVersionControlHeaders(\r
- Response.status(pfme.getErrorResponse().getResponseCode())), requestId)\r
- .entity(pfme.getErrorResponse()).build();\r
+ return makeErrorResponse(requestId, pfme);\r
}\r
}\r
\r
try (PolicyTypeProvider policyTypeProvider = new PolicyTypeProvider()) {\r
ToscaServiceTemplate serviceTemplate = policyTypeProvider.createPolicyType(body);\r
updateApiStatisticsCounter(Target.POLICY_TYPE, Result.SUCCESS, HttpMethod.POST);\r
- return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId)\r
- .entity(serviceTemplate).build();\r
+ return makeOkResponse(requestId, serviceTemplate);\r
} catch (PfModelException | PfModelRuntimeException pfme) {\r
LOGGER.error("POST /policytypes", pfme);\r
updateApiStatisticsCounter(Target.POLICY_TYPE, Result.FAILURE, HttpMethod.POST);\r
- return addLoggingHeaders(addVersionControlHeaders(\r
- Response.status(pfme.getErrorResponse().getResponseCode())), requestId)\r
- .entity(pfme.getErrorResponse()).build();\r
+ return makeErrorResponse(requestId, pfme);\r
}\r
}\r
\r
\r
try (PolicyTypeProvider policyTypeProvider = new PolicyTypeProvider()) {\r
ToscaServiceTemplate serviceTemplate = policyTypeProvider.deletePolicyType(policyTypeId, versionId);\r
- return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId)\r
- .entity(serviceTemplate).build();\r
+ return makeOkResponse(requestId, serviceTemplate);\r
} catch (PfModelException | PfModelRuntimeException pfme) {\r
LOGGER.error("DELETE /policytypes/{}/versions/{}", policyTypeId, versionId, pfme);\r
- return addLoggingHeaders(addVersionControlHeaders(\r
- Response.status(pfme.getErrorResponse().getResponseCode())), requestId)\r
- .entity(pfme.getErrorResponse()).build();\r
+ return makeErrorResponse(requestId, pfme);\r
}\r
}\r
\r
ToscaServiceTemplate serviceTemplate =\r
policyProvider.fetchPolicies(policyTypeId, policyTypeVersion, null, null);\r
updateApiStatisticsCounter(Target.POLICY, Result.SUCCESS, HttpMethod.GET);\r
- return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId)\r
- .entity(serviceTemplate).build();\r
+ return makeOkResponse(requestId, serviceTemplate);\r
} catch (PfModelException | PfModelRuntimeException pfme) {\r
LOGGER.error("GET /policytypes/{}/versions/{}/policies", policyTypeId, policyTypeVersion, pfme);\r
updateApiStatisticsCounter(Target.POLICY, Result.FAILURE, HttpMethod.GET);\r
- return addLoggingHeaders(addVersionControlHeaders(\r
- Response.status(pfme.getErrorResponse().getResponseCode())), requestId)\r
- .entity(pfme.getErrorResponse()).build();\r
+ return makeErrorResponse(requestId, pfme);\r
}\r
}\r
\r
ToscaServiceTemplate serviceTemplate = policyProvider\r
.fetchPolicies(policyTypeId, policyTypeVersion, policyId, null);\r
updateApiStatisticsCounter(Target.POLICY, Result.SUCCESS, HttpMethod.GET);\r
- return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId)\r
- .entity(serviceTemplate).build();\r
+ return makeOkResponse(requestId, serviceTemplate);\r
} catch (PfModelException | PfModelRuntimeException pfme) {\r
LOGGER.error("/policytypes/{}/versions/{}/policies/{}", policyTypeId, policyTypeVersion, policyId,\r
pfme);\r
updateApiStatisticsCounter(Target.POLICY, Result.FAILURE, HttpMethod.GET);\r
- return addLoggingHeaders(addVersionControlHeaders(\r
- Response.status(pfme.getErrorResponse().getResponseCode())), requestId)\r
- .entity(pfme.getErrorResponse()).build();\r
+ return makeErrorResponse(requestId, pfme);\r
}\r
}\r
\r
ToscaServiceTemplate serviceTemplate = policyProvider\r
.fetchPolicies(policyTypeId, policyTypeVersion, policyId, policyVersion);\r
updateApiStatisticsCounter(Target.POLICY, Result.SUCCESS, HttpMethod.GET);\r
- return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId)\r
- .entity(serviceTemplate).build();\r
+ return makeOkResponse(requestId, serviceTemplate);\r
} catch (PfModelException | PfModelRuntimeException pfme) {\r
LOGGER.error("GET /policytypes/{}/versions/{}/policies/{}/versions/{}", policyTypeId,\r
policyTypeVersion, policyId, policyVersion, pfme);\r
updateApiStatisticsCounter(Target.POLICY, Result.FAILURE, HttpMethod.GET);\r
- return addLoggingHeaders(addVersionControlHeaders(\r
- Response.status(pfme.getErrorResponse().getResponseCode())), requestId)\r
- .entity(pfme.getErrorResponse()).build();\r
+ return makeErrorResponse(requestId, pfme);\r
}\r
}\r
\r
ToscaServiceTemplate serviceTemplate =\r
policyProvider.fetchLatestPolicies(policyTypeId, policyTypeVersion, policyId);\r
updateApiStatisticsCounter(Target.POLICY, Result.SUCCESS, HttpMethod.GET);\r
- return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId)\r
- .entity(serviceTemplate).build();\r
+ return makeOkResponse(requestId, serviceTemplate);\r
} catch (PfModelException | PfModelRuntimeException pfme) {\r
LOGGER.error("GET /policytypes/{}/versions/{}/policies/{}/versions/latest", policyTypeId,\r
policyTypeVersion, policyId, pfme);\r
updateApiStatisticsCounter(Target.POLICY, Result.FAILURE, HttpMethod.GET);\r
- return addLoggingHeaders(addVersionControlHeaders(\r
- Response.status(pfme.getErrorResponse().getResponseCode())), requestId)\r
- .entity(pfme.getErrorResponse()).build();\r
+ return makeErrorResponse(requestId, pfme);\r
}\r
}\r
\r
Map<Pair<String, String>, List<ToscaPolicy>> deployedPolicies = policyProvider\r
.fetchDeployedPolicies(policyTypeId, policyTypeVersion, policyId);\r
updateApiStatisticsCounter(Target.POLICY, Result.SUCCESS, HttpMethod.GET);\r
- return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId)\r
- .entity(deployedPolicies).build();\r
+ return makeOkResponse(requestId, deployedPolicies);\r
} catch (PfModelException | PfModelRuntimeException pfme) {\r
LOGGER.error("GET /policytypes/{}/versions/{}/policies/{}/versions/deployed", policyTypeId,\r
policyTypeVersion, policyId, pfme);\r
updateApiStatisticsCounter(Target.POLICY, Result.FAILURE, HttpMethod.GET);\r
- return addLoggingHeaders(addVersionControlHeaders(\r
- Response.status(pfme.getErrorResponse().getResponseCode())), requestId)\r
- .entity(pfme.getErrorResponse()).build();\r
+ return makeErrorResponse(requestId, pfme);\r
}\r
}\r
\r
ToscaServiceTemplate serviceTemplate = policyProvider\r
.createPolicy(policyTypeId, policyTypeVersion, body);\r
updateApiStatisticsCounter(Target.POLICY, Result.SUCCESS, HttpMethod.POST);\r
- return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId)\r
- .entity(serviceTemplate).build();\r
+ return makeOkResponse(requestId, serviceTemplate);\r
} catch (PfModelException | PfModelRuntimeException pfme) {\r
LOGGER.error("POST /policytypes/{}/versions/{}/policies", policyTypeId, policyTypeVersion, pfme);\r
updateApiStatisticsCounter(Target.POLICY, Result.FAILURE, HttpMethod.POST);\r
- return addLoggingHeaders(addVersionControlHeaders(\r
- Response.status(pfme.getErrorResponse().getResponseCode())), requestId)\r
- .entity(pfme.getErrorResponse()).build();\r
+ return makeErrorResponse(requestId, pfme);\r
}\r
}\r
\r
try (PolicyProvider policyProvider = new PolicyProvider()) {\r
ToscaServiceTemplate serviceTemplate = policyProvider\r
.deletePolicy(policyTypeId, policyTypeVersion, policyId, policyVersion);\r
- return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId)\r
- .entity(serviceTemplate).build();\r
+ return makeOkResponse(requestId, serviceTemplate);\r
} catch (PfModelException | PfModelRuntimeException pfme) {\r
LOGGER.error("DELETE /policytypes/{}/versions/{}/policies/{}/versions/{}", policyTypeId,\r
policyTypeVersion, policyId, policyVersion, pfme);\r
- return addLoggingHeaders(addVersionControlHeaders(\r
- Response.status(pfme.getErrorResponse().getResponseCode())), requestId)\r
- .entity(pfme.getErrorResponse()).build();\r
- }\r
- }\r
-\r
- private ResponseBuilder addVersionControlHeaders(ResponseBuilder rb) {\r
- return rb.header("X-MinorVersion", "0").header("X-PatchVersion", "0").header("X-LatestVersion", "1.0.0");\r
- }\r
-\r
- private ResponseBuilder addLoggingHeaders(ResponseBuilder rb, UUID requestId) {\r
- if (requestId == null) {\r
- // Generate a random uuid if client does not embed requestId in rest request\r
- return rb.header("X-ONAP-RequestID", UUID.randomUUID());\r
- }\r
- return rb.header("X-ONAP-RequestID", requestId);\r
- }\r
-\r
- /**\r
- * Converts an object to a JSON string.\r
- *\r
- * @param object object to convert\r
- * @return a JSON string representing the object\r
- */\r
- private String toJson(Object object) {\r
- if (object == null) {\r
- return null;\r
- }\r
-\r
- try {\r
- return coder.encode(object);\r
-\r
- } catch (CoderException e) {\r
- LOGGER.warn("cannot convert {} to JSON", object.getClass().getName(), e);\r
- return null;\r
+ return makeErrorResponse(requestId, pfme);\r
}\r
}\r
\r
private void updateApiStatisticsCounter(Target target, Result result, HttpMethod http) {\r
\r
ApiStatisticsManager.updateTotalApiCallCount();\r
- if (target == Target.POLICY) {\r
- if (result == Result.SUCCESS) {\r
- if (http == HttpMethod.GET) {\r
- ApiStatisticsManager.updateApiCallSuccessCount();\r
- ApiStatisticsManager.updateTotalPolicyGetCount();\r
- ApiStatisticsManager.updatePolicyGetSuccessCount();\r
- } else if (http == HttpMethod.POST) {\r
- ApiStatisticsManager.updateApiCallSuccessCount();\r
- ApiStatisticsManager.updateTotalPolicyPostCount();\r
- ApiStatisticsManager.updatePolicyPostSuccessCount();\r
- }\r
- } else {\r
- if (http == HttpMethod.GET) {\r
- ApiStatisticsManager.updateApiCallFailureCount();\r
- ApiStatisticsManager.updateTotalPolicyGetCount();\r
- ApiStatisticsManager.updatePolicyGetFailureCount();\r
- } else {\r
- ApiStatisticsManager.updateApiCallFailureCount();\r
- ApiStatisticsManager.updateTotalPolicyPostCount();\r
- ApiStatisticsManager.updatePolicyPostFailureCount();\r
- }\r
+\r
+ switch (target) {\r
+ case POLICY:\r
+ updatePolicyStats(result, http);\r
+ break;\r
+ case POLICY_TYPE:\r
+ updatePolicyTypeStats(result, http);\r
+ break;\r
+ default:\r
+ ApiStatisticsManager.updateApiCallSuccessCount();\r
+ break;\r
+ }\r
+ }\r
+\r
+ private void updatePolicyStats(Result result, HttpMethod http) {\r
+ if (result == Result.SUCCESS) {\r
+ if (http == HttpMethod.GET) {\r
+ ApiStatisticsManager.updateApiCallSuccessCount();\r
+ ApiStatisticsManager.updateTotalPolicyGetCount();\r
+ ApiStatisticsManager.updatePolicyGetSuccessCount();\r
+ } else if (http == HttpMethod.POST) {\r
+ ApiStatisticsManager.updateApiCallSuccessCount();\r
+ ApiStatisticsManager.updateTotalPolicyPostCount();\r
+ ApiStatisticsManager.updatePolicyPostSuccessCount();\r
}\r
- } else if (target == Target.POLICY_TYPE) {\r
- if (result == Result.SUCCESS) {\r
- if (http == HttpMethod.GET) {\r
- ApiStatisticsManager.updateApiCallSuccessCount();\r
- ApiStatisticsManager.updateTotalPolicyTypeGetCount();\r
- ApiStatisticsManager.updatePolicyTypeGetSuccessCount();\r
- } else if (http == HttpMethod.POST) {\r
- ApiStatisticsManager.updateApiCallSuccessCount();\r
- ApiStatisticsManager.updatePolicyTypePostSuccessCount();\r
- ApiStatisticsManager.updatePolicyTypePostSuccessCount();\r
- }\r
+ } else {\r
+ if (http == HttpMethod.GET) {\r
+ ApiStatisticsManager.updateApiCallFailureCount();\r
+ ApiStatisticsManager.updateTotalPolicyGetCount();\r
+ ApiStatisticsManager.updatePolicyGetFailureCount();\r
} else {\r
- if (http == HttpMethod.GET) {\r
- ApiStatisticsManager.updateApiCallFailureCount();\r
- ApiStatisticsManager.updateTotalPolicyTypeGetCount();\r
- ApiStatisticsManager.updatePolicyTypeGetFailureCount();\r
- } else {\r
- ApiStatisticsManager.updateApiCallFailureCount();\r
- ApiStatisticsManager.updateTotalPolicyTypePostCount();\r
- ApiStatisticsManager.updatePolicyTypePostFailureCount();\r
- }\r
+ ApiStatisticsManager.updateApiCallFailureCount();\r
+ ApiStatisticsManager.updateTotalPolicyPostCount();\r
+ ApiStatisticsManager.updatePolicyPostFailureCount();\r
+ }\r
+ }\r
+ }\r
+\r
+ private void updatePolicyTypeStats(Result result, HttpMethod http) {\r
+ if (result == Result.SUCCESS) {\r
+ if (http == HttpMethod.GET) {\r
+ ApiStatisticsManager.updateApiCallSuccessCount();\r
+ ApiStatisticsManager.updateTotalPolicyTypeGetCount();\r
+ ApiStatisticsManager.updatePolicyTypeGetSuccessCount();\r
+ } else if (http == HttpMethod.POST) {\r
+ ApiStatisticsManager.updateApiCallSuccessCount();\r
+ ApiStatisticsManager.updatePolicyTypePostSuccessCount();\r
+ ApiStatisticsManager.updatePolicyTypePostSuccessCount();\r
}\r
} else {\r
- ApiStatisticsManager.updateApiCallSuccessCount();\r
+ if (http == HttpMethod.GET) {\r
+ ApiStatisticsManager.updateApiCallFailureCount();\r
+ ApiStatisticsManager.updateTotalPolicyTypeGetCount();\r
+ ApiStatisticsManager.updatePolicyTypeGetFailureCount();\r
+ } else {\r
+ ApiStatisticsManager.updateApiCallFailureCount();\r
+ ApiStatisticsManager.updateTotalPolicyTypePostCount();\r
+ ApiStatisticsManager.updatePolicyTypePostFailureCount();\r
+ }\r
}\r
}\r
}
\ No newline at end of file
--- /dev/null
+/*-\r
+ * ============LICENSE_START=======================================================\r
+ * ONAP Policy API\r
+ * ================================================================================\r
+ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.\r
+ * ================================================================================\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ *\r
+ * SPDX-License-Identifier: Apache-2.0\r
+ * ============LICENSE_END=========================================================\r
+ */\r
+\r
+package org.onap.policy.api.main.rest;\r
+\r
+import java.util.UUID;\r
+import javax.ws.rs.core.Response;\r
+import javax.ws.rs.core.Response.ResponseBuilder;\r
+import org.onap.policy.common.utils.coder.Coder;\r
+import org.onap.policy.common.utils.coder.CoderException;\r
+import org.onap.policy.common.utils.coder.StandardCoder;\r
+import org.onap.policy.models.errors.concepts.ErrorResponseInfo;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+\r
+/**\r
+ * Super class from which REST controllers are derived.\r
+ */\r
+public class CommonRestController {\r
+\r
+ private static final Logger LOGGER = LoggerFactory.getLogger(CommonRestController.class);\r
+\r
+ private final Coder coder = new StandardCoder();\r
+\r
+\r
+ protected Response makeOkResponse(UUID requestId, Object respEntity) {\r
+ return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId)\r
+ .entity(respEntity).build();\r
+ }\r
+\r
+ protected <T extends ErrorResponseInfo> Response makeErrorResponse(UUID requestId, T pfme) {\r
+ return addLoggingHeaders(addVersionControlHeaders(Response.status(pfme.getErrorResponse().getResponseCode())),\r
+ requestId).entity(pfme.getErrorResponse()).build();\r
+ }\r
+\r
+ protected ResponseBuilder addVersionControlHeaders(ResponseBuilder rb) {\r
+ return rb.header("X-MinorVersion", "0").header("X-PatchVersion", "0").header("X-LatestVersion", "1.0.0");\r
+ }\r
+\r
+ protected ResponseBuilder addLoggingHeaders(ResponseBuilder rb, UUID requestId) {\r
+ if (requestId == null) {\r
+ // Generate a random uuid if client does not embed requestId in rest request\r
+ return rb.header("X-ONAP-RequestID", UUID.randomUUID());\r
+ }\r
+ return rb.header("X-ONAP-RequestID", requestId);\r
+ }\r
+\r
+ /**\r
+ * Converts an object to a JSON string.\r
+ *\r
+ * @param object object to convert\r
+ * @return a JSON string representing the object\r
+ */\r
+ protected String toJson(Object object) {\r
+ if (object == null) {\r
+ return null;\r
+ }\r
+\r
+ try {\r
+ return coder.encode(object);\r
+\r
+ } catch (CoderException e) {\r
+ LOGGER.warn("cannot convert {} to JSON", object.getClass().getName(), e);\r
+ return null;\r
+ }\r
+ }\r
+}\r
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.common.endpoints.event.comm.Topic.CommInfrastructure;
import org.onap.policy.common.endpoints.utils.NetLoggerUtil;
import org.onap.policy.common.endpoints.utils.NetLoggerUtil.EventType;
-import org.onap.policy.common.utils.coder.Coder;
-import org.onap.policy.common.utils.coder.CoderException;
-import org.onap.policy.common.utils.coder.StandardCoder;
import org.onap.policy.models.base.PfModelException;
import org.onap.policy.models.base.PfModelRuntimeException;
import org.onap.policy.models.tosca.legacy.concepts.LegacyGuardPolicyInput;
@Api(value = "Legacy Policy Design API")
@Produces("application/json")
@Consumes("application/json")
-public class LegacyApiRestController {
+public class LegacyApiRestController extends CommonRestController {
private static final Logger LOGGER = LoggerFactory.getLogger(LegacyApiRestController.class);
- private final Coder coder = new StandardCoder();
-
/**
* Retrieves the latest version of a particular guard policy.
*
try (LegacyGuardPolicyProvider guardPolicyProvider = new LegacyGuardPolicyProvider()) {
Map<String, LegacyGuardPolicyOutput> policies = guardPolicyProvider.fetchGuardPolicy(policyId, null);
- return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId)
- .entity(policies).build();
+ return makeOkResponse(requestId, policies);
} catch (PfModelException | PfModelRuntimeException pfme) {
LOGGER.error("GET /policytypes/onap.policies.controlloop.Guard/versions/1.0.0/policies/{}"
+ "/versions/latest", policyId, pfme);
- return addLoggingHeaders(addVersionControlHeaders(
- Response.status(pfme.getErrorResponse().getResponseCode())), requestId)
- .entity(pfme.getErrorResponse()).build();
+ return makeErrorResponse(requestId, pfme);
}
}
try (LegacyGuardPolicyProvider guardPolicyProvider = new LegacyGuardPolicyProvider()) {
Map<String, LegacyGuardPolicyOutput> policies = guardPolicyProvider
.fetchGuardPolicy(policyId, policyVersion);
- return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId)
- .entity(policies).build();
+ return makeOkResponse(requestId, policies);
} catch (PfModelException | PfModelRuntimeException pfme) {
LOGGER.error("GET /policytypes/onap.policies.controlloop.Guard/versions/1.0.0/policies/{}/versions/{}",
policyId, policyVersion, pfme);
- return addLoggingHeaders(addVersionControlHeaders(
- Response.status(pfme.getErrorResponse().getResponseCode())), requestId)
- .entity(pfme.getErrorResponse()).build();
+ return makeErrorResponse(requestId, pfme);
}
}
try (LegacyGuardPolicyProvider guardPolicyProvider = new LegacyGuardPolicyProvider()) {
Map<String, LegacyGuardPolicyOutput> policy = guardPolicyProvider.createGuardPolicy(body);
- return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId)
- .entity(policy).build();
+ return makeOkResponse(requestId, policy);
} catch (PfModelException | PfModelRuntimeException pfme) {
LOGGER.error("POST /policytypes/onap.policies.controlloop.Guard/versions/1.0.0/policies", pfme);
- return addLoggingHeaders(addVersionControlHeaders(
- Response.status(pfme.getErrorResponse().getResponseCode())), requestId)
- .entity(pfme.getErrorResponse()).build();
+ return makeErrorResponse(requestId, pfme);
}
}
try (LegacyGuardPolicyProvider guardPolicyProvider = new LegacyGuardPolicyProvider()) {
Map<String, LegacyGuardPolicyOutput> policies = guardPolicyProvider
.deleteGuardPolicy(policyId, policyVersion);
- return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId)
- .entity(policies).build();
+ return makeOkResponse(requestId, policies);
} catch (PfModelException | PfModelRuntimeException pfme) {
LOGGER.error("DELETE /policytypes/onap.policies.controlloop.Guard/versions/1.0.0/policies/{}/versions/{}",
policyId, policyVersion, pfme);
- return addLoggingHeaders(addVersionControlHeaders(
- Response.status(pfme.getErrorResponse().getResponseCode())), requestId)
- .entity(pfme.getErrorResponse()).build();
+ return makeErrorResponse(requestId, pfme);
}
}
try (LegacyOperationalPolicyProvider operationalPolicyProvider = new LegacyOperationalPolicyProvider()) {
LegacyOperationalPolicy policy = operationalPolicyProvider.fetchOperationalPolicy(policyId, null);
- return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId)
- .entity(policy).build();
+ return makeOkResponse(requestId, policy);
} catch (PfModelException | PfModelRuntimeException pfme) {
LOGGER.error("GET /policytypes/onap.policies.controlloop.Operational/versions/1.0.0/policies/{}"
+ "/versions/latest", policyId, pfme);
- return addLoggingHeaders(addVersionControlHeaders(
- Response.status(pfme.getErrorResponse().getResponseCode())), requestId)
- .entity(pfme.getErrorResponse()).build();
+ return makeErrorResponse(requestId, pfme);
}
}
try (LegacyOperationalPolicyProvider operationalPolicyProvider = new LegacyOperationalPolicyProvider()) {
LegacyOperationalPolicy policy = operationalPolicyProvider.fetchOperationalPolicy(policyId, policyVersion);
- return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId)
- .entity(policy).build();
+ return makeOkResponse(requestId, policy);
} catch (PfModelException | PfModelRuntimeException pfme) {
LOGGER.error("GET /policytypes/onap.policies.controlloop.Operational/versions/1.0.0/"
+ "policies/{}/versions/{}", policyId, policyVersion, pfme);
- return addLoggingHeaders(addVersionControlHeaders(
- Response.status(pfme.getErrorResponse().getResponseCode())), requestId)
- .entity(pfme.getErrorResponse()).build();
+ return makeErrorResponse(requestId, pfme);
}
}
try (LegacyOperationalPolicyProvider operationalPolicyProvider = new LegacyOperationalPolicyProvider()) {
LegacyOperationalPolicy policy = operationalPolicyProvider.createOperationalPolicy(body);
- return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId)
- .entity(policy).build();
+ return makeOkResponse(requestId, policy);
} catch (PfModelException | PfModelRuntimeException pfme) {
LOGGER.error("POST /policytypes/onap.policies.controlloop.Operational/versions/1.0.0/policies", pfme);
- return addLoggingHeaders(addVersionControlHeaders(
- Response.status(pfme.getErrorResponse().getResponseCode())), requestId)
- .entity(pfme.getErrorResponse()).build();
+ return makeErrorResponse(requestId, pfme);
}
}
try (LegacyOperationalPolicyProvider operationalPolicyProvider = new LegacyOperationalPolicyProvider()) {
LegacyOperationalPolicy policy = operationalPolicyProvider
.deleteOperationalPolicy(policyId, policyVersion);
- return addLoggingHeaders(addVersionControlHeaders(Response.status(Response.Status.OK)), requestId)
- .entity(policy).build();
+ return makeOkResponse(requestId, policy);
} catch (PfModelException | PfModelRuntimeException pfme) {
LOGGER.error("DELETE /policytypes/onap.policies.controlloop.Operational/versions/1.0.0/"
+ "policies/{}/versions/{}", policyId, policyVersion, pfme);
- return addLoggingHeaders(addVersionControlHeaders(
- Response.status(pfme.getErrorResponse().getResponseCode())), requestId)
- .entity(pfme.getErrorResponse()).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);
- }
-
- /**
- * Converts an object to a JSON string.
- *
- * @param object object to convert
- * @return a JSON string representing the object
- */
- private String toJson(Object object) {
- if (object == null) {
- return null;
- }
-
- try {
- return coder.encode(object);
-
- } catch (CoderException e) {
- LOGGER.warn("cannot convert {} to JSON", object.getClass().getName(), e);
- return null;
+ return makeErrorResponse(requestId, pfme);
}
}
}
\ No newline at end of file
--- /dev/null
+/*-\r
+ * ============LICENSE_START=======================================================\r
+ * ONAP Policy API\r
+ * ================================================================================\r
+ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.\r
+ * ================================================================================\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ *\r
+ * SPDX-License-Identifier: Apache-2.0\r
+ * ============LICENSE_END=========================================================\r
+ */\r
+\r
+package org.onap.policy.api.main.rest.provider;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+import java.util.Map;\r
+import javax.ws.rs.core.Response;\r
+import org.onap.policy.api.main.parameters.ApiParameterGroup;\r
+import org.onap.policy.common.parameters.ParameterService;\r
+import org.onap.policy.models.base.PfModelException;\r
+import org.onap.policy.models.pdp.concepts.PdpGroup;\r
+import org.onap.policy.models.provider.PolicyModelsProvider;\r
+import org.onap.policy.models.provider.PolicyModelsProviderFactory;\r
+import org.onap.policy.models.provider.PolicyModelsProviderParameters;\r
+import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;\r
+import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;\r
+\r
+/**\r
+ * Super class for providers that use a model provider.\r
+ */\r
+public class CommonModelProvider implements AutoCloseable {\r
+\r
+ protected final PolicyModelsProvider modelsProvider;\r
+\r
+ /**\r
+ * Constructs the object, populating {@link #modelsProvider}.\r
+ *\r
+ * @throws PfModelException if an error occurs\r
+ */\r
+ public CommonModelProvider() throws PfModelException {\r
+\r
+ ApiParameterGroup parameterGroup = ParameterService.get("ApiGroup");\r
+ PolicyModelsProviderParameters providerParameters = parameterGroup.getDatabaseProviderParameters();\r
+ modelsProvider = new PolicyModelsProviderFactory().createPolicyModelsProvider(providerParameters);\r
+ }\r
+\r
+ /**\r
+ * Closes the connection to database.\r
+ *\r
+ * @throws PfModelException the PfModel parsing exception\r
+ */\r
+ @Override\r
+ public void close() throws PfModelException {\r
+\r
+ modelsProvider.close();\r
+ }\r
+\r
+ /**\r
+ * Checks if service template contains any policy.\r
+ *\r
+ * @param serviceTemplate the service template to check against\r
+ *\r
+ * @return boolean whether service template contains any policy\r
+ */\r
+ protected boolean hasPolicy(ToscaServiceTemplate serviceTemplate) {\r
+\r
+ return hasData(serviceTemplate.getToscaTopologyTemplate().getPolicies());\r
+ }\r
+\r
+ /**\r
+ * Checks if service template contains any policy type.\r
+ *\r
+ * @param serviceTemplate the service template to check against\r
+ *\r
+ * @return boolean whether service template contains any policy type\r
+ */\r
+ protected boolean hasPolicyType(ToscaServiceTemplate serviceTemplate) {\r
+\r
+ return hasData(serviceTemplate.getPolicyTypes());\r
+ }\r
+\r
+ /**\r
+ * Checks if the first element of a list contains data.\r
+ *\r
+ * @param list list to be examined\r
+ * @return {@code true} if the list contains data, {@code false} otherwise\r
+ */\r
+ protected <T> boolean hasData(List<Map<String, T>> list) {\r
+\r
+ return (list != null && !list.isEmpty() && !list.get(0).isEmpty());\r
+ }\r
+\r
+ /**\r
+ * Validates that some text represents a number.\r
+ *\r
+ * @param text text to be validated\r
+ * @param errorMsg error message included in the exception, if the text is not a valid\r
+ * number\r
+ * @throws PfModelException if the text is not a valid number\r
+ */\r
+ protected void validNumber(String text, String errorMsg) throws PfModelException {\r
+ try {\r
+ Integer.parseInt(text);\r
+\r
+ } catch (NumberFormatException exc) {\r
+ throw new PfModelException(Response.Status.BAD_REQUEST, errorMsg, exc);\r
+ }\r
+ }\r
+\r
+ /**\r
+ * Constructs returned message for policy delete rule violation.\r
+ *\r
+ * @param policyId the ID of policy\r
+ * @param policyVersion the version of policy\r
+ * @param pdpGroups the list of pdp groups\r
+ *\r
+ * @return the constructed message\r
+ */\r
+ protected String constructDeletePolicyViolationMessage(String policyId, String policyVersion,\r
+ List<PdpGroup> pdpGroups) {\r
+\r
+ List<String> pdpGroupNameVersionList = new ArrayList<>(pdpGroups.size());\r
+ for (PdpGroup pdpGroup : pdpGroups) {\r
+ pdpGroupNameVersionList.add(pdpGroup.getName() + ":" + pdpGroup.getVersion());\r
+ }\r
+ String deployedPdpGroups = String.join(",", pdpGroupNameVersionList);\r
+ return "policy with ID " + policyId + ":" + policyVersion\r
+ + " cannot be deleted as it is deployed in pdp groups " + deployedPdpGroups;\r
+ }\r
+\r
+ /**\r
+ * Constructs returned message for policy type delete rule violation.\r
+ *\r
+ * @param policyTypeId the ID of policy type\r
+ * @param policyTypeVersion the version of policy type\r
+ * @param policies the list of policies that parameterizes specified policy type\r
+ *\r
+ * @return the constructed message\r
+ */\r
+ protected String constructDeletePolicyTypeViolationMessage(String policyTypeId, String policyTypeVersion,\r
+ List<ToscaPolicy> policies) {\r
+\r
+ List<String> policyNameVersionList = new ArrayList<>(policies.size());\r
+ for (ToscaPolicy policy : policies) {\r
+ policyNameVersionList.add(policy.getName() + ":" + policy.getVersion());\r
+ }\r
+ String parameterizedPolicies = String.join(",", policyNameVersionList);\r
+ return "policy type with ID " + policyTypeId + ":" + policyTypeVersion\r
+ + " cannot be deleted as it is parameterized by policies " + parameterizedPolicies;\r
+ }\r
+}\r
import java.util.List;
import java.util.Map;
import javax.ws.rs.core.Response;
-import org.onap.policy.api.main.parameters.ApiParameterGroup;
-import org.onap.policy.common.parameters.ParameterService;
import org.onap.policy.models.base.PfModelException;
import org.onap.policy.models.pdp.concepts.PdpGroup;
import org.onap.policy.models.pdp.concepts.PdpGroupFilter;
-import org.onap.policy.models.provider.PolicyModelsProvider;
-import org.onap.policy.models.provider.PolicyModelsProviderFactory;
-import org.onap.policy.models.provider.PolicyModelsProviderParameters;
import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyIdentifier;
import org.onap.policy.models.tosca.legacy.concepts.LegacyGuardPolicyInput;
import org.onap.policy.models.tosca.legacy.concepts.LegacyGuardPolicyOutput;
*
* @author Chenfei Gao (cgao@research.att.com)
*/
-public class LegacyGuardPolicyProvider implements AutoCloseable {
+public class LegacyGuardPolicyProvider extends CommonModelProvider {
+
+ private static final String INVALID_POLICY_VERSION = "legacy policy version is not an integer";
- private PolicyModelsProvider modelsProvider;
/**
* Default constructor.
*/
public LegacyGuardPolicyProvider() throws PfModelException {
-
- ApiParameterGroup parameterGroup = ParameterService.get("ApiGroup");
- PolicyModelsProviderParameters providerParameters = parameterGroup.getDatabaseProviderParameters();
- modelsProvider = new PolicyModelsProviderFactory().createPolicyModelsProvider(providerParameters);
+ super();
}
/**
throws PfModelException {
if (policyVersion != null) {
- validateLegacyGuardPolicyVersion(policyVersion);
+ validNumber(policyVersion, INVALID_POLICY_VERSION);
}
return modelsProvider.getGuardPolicy(policyId, policyVersion);
}
public Map<String, LegacyGuardPolicyOutput> deleteGuardPolicy(String policyId, String policyVersion)
throws PfModelException {
- validateLegacyGuardPolicyVersion(policyVersion);
+ validNumber(policyVersion, INVALID_POLICY_VERSION);
validateDeleteEligibility(policyId, policyVersion);
return modelsProvider.deleteGuardPolicy(policyId, policyVersion);
if (!pdpGroups.isEmpty()) {
throw new PfModelException(Response.Status.CONFLICT,
- constructDeleteRuleViolationMessage(policyId, policyVersion, pdpGroups));
+ constructDeletePolicyViolationMessage(policyId, policyVersion, pdpGroups));
}
}
-
- /**
- * Validates whether the legacy guard policy version is an integer.
- *
- * @param policyVersion the version of policy
- *
- * @throws PfModelException the PfModel parsing exception
- */
- private void validateLegacyGuardPolicyVersion(String policyVersion) throws PfModelException {
-
- try {
- Integer.valueOf(policyVersion);
- } catch (NumberFormatException exc) {
- throw new PfModelException(Response.Status.BAD_REQUEST,
- "legacy policy version is not an integer", exc);
- }
- }
-
- /**
- * Constructs returned message for policy delete rule violation.
- *
- * @param policyId the ID of policy
- * @param policyVersion the version of policy
- * @param pdpGroups the list of pdp groups
- *
- * @return the constructed message
- */
- private String constructDeleteRuleViolationMessage(
- String policyId, String policyVersion, List<PdpGroup> pdpGroups) {
-
- List<String> pdpGroupNameVersionList = new ArrayList<>();
- for (PdpGroup pdpGroup : pdpGroups) {
- pdpGroupNameVersionList.add(pdpGroup.getName() + ":" + pdpGroup.getVersion());
- }
- String deployedPdpGroups = String.join(",", pdpGroupNameVersionList);
- return "policy with ID " + policyId + ":" + policyVersion
- + " cannot be deleted as it is deployed in pdp groups " + deployedPdpGroups;
- }
-
- /**
- * Closes the connection to database.
- *
- * @throws PfModelException the PfModel parsing exception
- */
- @Override
- public void close() throws PfModelException {
-
- modelsProvider.close();
- }
}
\ No newline at end of file
import java.util.ArrayList;
import java.util.List;
import javax.ws.rs.core.Response;
-import org.onap.policy.api.main.parameters.ApiParameterGroup;
-import org.onap.policy.common.parameters.ParameterService;
import org.onap.policy.models.base.PfModelException;
import org.onap.policy.models.pdp.concepts.PdpGroup;
import org.onap.policy.models.pdp.concepts.PdpGroupFilter;
-import org.onap.policy.models.provider.PolicyModelsProvider;
-import org.onap.policy.models.provider.PolicyModelsProviderFactory;
-import org.onap.policy.models.provider.PolicyModelsProviderParameters;
import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyIdentifier;
import org.onap.policy.models.tosca.legacy.concepts.LegacyOperationalPolicy;
*
* @author Chenfei Gao (cgao@research.att.com)
*/
-public class LegacyOperationalPolicyProvider implements AutoCloseable {
+public class LegacyOperationalPolicyProvider extends CommonModelProvider {
+
+ private static final String INVALID_POLICY_VERSION = "legacy policy version is not an integer";
- private PolicyModelsProvider modelsProvider;
/**
* Default constructor.
*/
public LegacyOperationalPolicyProvider() throws PfModelException {
-
- ApiParameterGroup parameterGroup = ParameterService.get("ApiGroup");
- PolicyModelsProviderParameters providerParameters = parameterGroup.getDatabaseProviderParameters();
- modelsProvider = new PolicyModelsProviderFactory().createPolicyModelsProvider(providerParameters);
+ super();
}
/**
throws PfModelException {
if (policyVersion != null) {
- validateLegacyOperationalPolicyVersion(policyVersion);
+ validNumber(policyVersion, INVALID_POLICY_VERSION);
}
return modelsProvider.getOperationalPolicy(policyId, policyVersion);
}
public LegacyOperationalPolicy deleteOperationalPolicy(String policyId, String policyVersion)
throws PfModelException {
- validateLegacyOperationalPolicyVersion(policyVersion);
+ validNumber(policyVersion, INVALID_POLICY_VERSION);
validateDeleteEligibility(policyId, policyVersion);
return modelsProvider.deleteOperationalPolicy(policyId, policyVersion);
if (!pdpGroups.isEmpty()) {
throw new PfModelException(Response.Status.CONFLICT,
- constructDeleteRuleViolationMessage(policyId, policyVersion, pdpGroups));
+ constructDeletePolicyViolationMessage(policyId, policyVersion, pdpGroups));
}
}
-
- /**
- * Validates whether the legacy operational policy version is an integer.
- *
- * @param policyVersion the version of policy
- *
- * @throws PfModelException the PfModel parsing exception
- */
- private void validateLegacyOperationalPolicyVersion(String policyVersion) throws PfModelException {
-
- try {
- Integer.valueOf(policyVersion);
- } catch (NumberFormatException exc) {
- throw new PfModelException(Response.Status.BAD_REQUEST,
- "legacy policy version is not an integer", exc);
- }
- }
-
- /**
- * Constructs returned message for policy delete rule violation.
- *
- * @param policyId the ID of policy
- * @param policyVersion the version of policy
- * @param pdpGroups the list of pdp groups
- *
- * @return the constructed message
- */
- private String constructDeleteRuleViolationMessage(
- String policyId, String policyVersion, List<PdpGroup> pdpGroups) {
-
- List<String> pdpGroupNameVersionList = new ArrayList<>();
- for (PdpGroup pdpGroup : pdpGroups) {
- pdpGroupNameVersionList.add(pdpGroup.getName() + ":" + pdpGroup.getVersion());
- }
- String deployedPdpGroups = String.join(",", pdpGroupNameVersionList);
- return "policy with ID " + policyId + ":" + policyVersion
- + " cannot be deleted as it is deployed in pdp groups " + deployedPdpGroups;
- }
-
- /**
- * Closes the connection to database.
- *
- * @throws PfModelException the PfModel parsing exception
- */
- @Override
- public void close() throws PfModelException {
-
- modelsProvider.close();
- }
}
\ No newline at end of file
import java.util.Map;\r
import javax.ws.rs.core.Response;\r
import org.apache.commons.lang3.tuple.Pair;\r
-import org.onap.policy.api.main.parameters.ApiParameterGroup;\r
-import org.onap.policy.common.parameters.ParameterService;\r
import org.onap.policy.models.base.PfModelException;\r
import org.onap.policy.models.pdp.concepts.PdpGroup;\r
import org.onap.policy.models.pdp.concepts.PdpGroupFilter;\r
import org.onap.policy.models.pdp.concepts.PdpSubGroup;\r
import org.onap.policy.models.pdp.enums.PdpState;\r
-import org.onap.policy.models.provider.PolicyModelsProvider;\r
-import org.onap.policy.models.provider.PolicyModelsProviderFactory;\r
-import org.onap.policy.models.provider.PolicyModelsProviderParameters;\r
import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;\r
import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyFilter;\r
import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyIdentifier;\r
*\r
* @author Chenfei Gao (cgao@research.att.com)\r
*/\r
-public class PolicyProvider implements AutoCloseable {\r
-\r
- private PolicyModelsProvider modelsProvider;\r
+public class PolicyProvider extends CommonModelProvider {\r
\r
/**\r
* Default constructor.\r
*/\r
public PolicyProvider() throws PfModelException {\r
-\r
- ApiParameterGroup parameterGroup = ParameterService.get("ApiGroup");\r
- PolicyModelsProviderParameters providerParameters = parameterGroup.getDatabaseProviderParameters();\r
- modelsProvider = new PolicyModelsProviderFactory().createPolicyModelsProvider(providerParameters);\r
+ super();\r
}\r
\r
/**\r
\r
if (!pdpGroups.isEmpty()) {\r
throw new PfModelException(Response.Status.CONFLICT,\r
- constructDeleteRuleViolationMessage(policyId, policyVersion, pdpGroups));\r
+ constructDeletePolicyViolationMessage(policyId, policyVersion, pdpGroups));\r
}\r
}\r
\r
- /**\r
- * Constructs returned message for policy delete rule violation.\r
- *\r
- * @param policyId the ID of policy\r
- * @param policyVersion the version of policy\r
- * @param pdpGroups the list of pdp groups\r
- *\r
- * @return the constructed message\r
- */\r
- private String constructDeleteRuleViolationMessage(\r
- String policyId, String policyVersion, List<PdpGroup> pdpGroups) {\r
-\r
- List<String> pdpGroupNameVersionList = new ArrayList<>();\r
- for (PdpGroup pdpGroup : pdpGroups) {\r
- pdpGroupNameVersionList.add(pdpGroup.getName() + ":" + pdpGroup.getVersion());\r
- }\r
- String deployedPdpGroups = String.join(",", pdpGroupNameVersionList);\r
- return "policy with ID " + policyId + ":" + policyVersion\r
- + " cannot be deleted as it is deployed in pdp groups " + deployedPdpGroups;\r
- }\r
-\r
/**\r
* Constructs the map of deployed pdp groups and deployed policies.\r
*\r
\r
Map<Pair<String, String>, List<ToscaPolicy>> deployedPolicyMap = new HashMap<>();\r
for (PdpGroup pdpGroup : pdpGroups) {\r
- List<ToscaPolicyIdentifier> policyIdentifiers = new ArrayList<>();\r
- for (PdpSubGroup pdpSubGroup : pdpGroup.getPdpSubgroups()) {\r
- for (ToscaPolicyIdentifier policyIdentifier : pdpSubGroup.getPolicies()) {\r
- if (policyId.equalsIgnoreCase(policyIdentifier.getName())) {\r
- policyIdentifiers.add(policyIdentifier);\r
- }\r
- }\r
- }\r
- List<ToscaPolicy> deployedPolicies = new ArrayList<>();\r
- if (!policyIdentifiers.isEmpty()) {\r
- for (ToscaPolicyIdentifier policyIdentifier : policyIdentifiers) {\r
- deployedPolicies.addAll(\r
- modelsProvider.getPolicyList(policyIdentifier.getName(), policyIdentifier.getVersion()));\r
- }\r
- }\r
+ List<ToscaPolicyIdentifier> policyIdentifiers = extractPolicyIdentifiers(policyId, pdpGroup);\r
+ List<ToscaPolicy> deployedPolicies = getDeployedPolicies(policyIdentifiers);\r
if (!deployedPolicies.isEmpty()) {\r
deployedPolicyMap.put(Pair.of(pdpGroup.getName(), pdpGroup.getVersion()), deployedPolicies);\r
}\r
return deployedPolicyMap;\r
}\r
\r
+ private List<ToscaPolicyIdentifier> extractPolicyIdentifiers(String policyId, PdpGroup pdpGroup) {\r
+ List<ToscaPolicyIdentifier> policyIdentifiers = new ArrayList<>();\r
+ for (PdpSubGroup pdpSubGroup : pdpGroup.getPdpSubgroups()) {\r
+ for (ToscaPolicyIdentifier policyIdentifier : pdpSubGroup.getPolicies()) {\r
+ if (policyId.equalsIgnoreCase(policyIdentifier.getName())) {\r
+ policyIdentifiers.add(policyIdentifier);\r
+ }\r
+ }\r
+ }\r
+ return policyIdentifiers;\r
+ }\r
+\r
+ private List<ToscaPolicy> getDeployedPolicies(List<ToscaPolicyIdentifier> policyIdentifiers)\r
+ throws PfModelException {\r
+\r
+ List<ToscaPolicy> deployedPolicies = new ArrayList<>();\r
+ if (!policyIdentifiers.isEmpty()) {\r
+ for (ToscaPolicyIdentifier policyIdentifier : policyIdentifiers) {\r
+ deployedPolicies.addAll(\r
+ modelsProvider.getPolicyList(policyIdentifier.getName(), policyIdentifier.getVersion()));\r
+ }\r
+ }\r
+ return deployedPolicies;\r
+ }\r
+\r
/**\r
* Constructs returned message for not found resource.\r
*\r
return "could not find policy with ID " + policyId + " and type "\r
+ policyTypeId + ":" + policyTypeVersion + " deployed in any pdp group";\r
}\r
-\r
- /**\r
- * Checks if service template contains any policy.\r
- *\r
- * @param serviceTemplate the service template to check against\r
- *\r
- * @return boolean whether service template contains any policy\r
- */\r
- private boolean hasPolicy(ToscaServiceTemplate serviceTemplate) {\r
-\r
- if (serviceTemplate.getToscaTopologyTemplate().getPolicies() == null) {\r
- return false;\r
- } else if (serviceTemplate.getToscaTopologyTemplate().getPolicies().isEmpty()) {\r
- return false;\r
- } else if (serviceTemplate.getToscaTopologyTemplate().getPolicies().get(0).isEmpty()) {\r
- return false;\r
- } else {\r
- return true;\r
- }\r
- }\r
-\r
- /**\r
- * Checks if service template contains any policy type.\r
- *\r
- * @param serviceTemplate the service template to check against\r
- *\r
- * @return boolean whether service template contains any policy type\r
- */\r
- private boolean hasPolicyType(ToscaServiceTemplate serviceTemplate) {\r
-\r
- if (serviceTemplate.getPolicyTypes() == null) {\r
- return false;\r
- } else if (serviceTemplate.getPolicyTypes().isEmpty()) {\r
- return false;\r
- } else if (serviceTemplate.getPolicyTypes().get(0).isEmpty()) {\r
- return false;\r
- } else {\r
- return true;\r
- }\r
- }\r
-\r
- /**\r
- * Closes the connection to database.\r
- *\r
- * @throws PfModelException the PfModel parsing exception\r
- */\r
- @Override\r
- public void close() throws PfModelException {\r
-\r
- modelsProvider.close();\r
- }\r
}\r
\r
package org.onap.policy.api.main.rest.provider;\r
\r
-import java.util.ArrayList;\r
import java.util.List;\r
import javax.ws.rs.core.Response;\r
-import org.onap.policy.api.main.parameters.ApiParameterGroup;\r
-import org.onap.policy.common.parameters.ParameterService;\r
import org.onap.policy.models.base.PfModelException;\r
-import org.onap.policy.models.provider.PolicyModelsProvider;\r
-import org.onap.policy.models.provider.PolicyModelsProviderFactory;\r
-import org.onap.policy.models.provider.PolicyModelsProviderParameters;\r
import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;\r
import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyFilter;\r
import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeFilter;\r
*\r
* @author Chenfei Gao (cgao@research.att.com)\r
*/\r
-public class PolicyTypeProvider implements AutoCloseable {\r
-\r
- private PolicyModelsProvider modelsProvider;\r
+public class PolicyTypeProvider extends CommonModelProvider {\r
\r
/**\r
* Default constructor.\r
*/\r
public PolicyTypeProvider() throws PfModelException {\r
-\r
- ApiParameterGroup parameterGroup = ParameterService.get("ApiGroup");\r
- PolicyModelsProviderParameters providerParameters = parameterGroup.getDatabaseProviderParameters();\r
- modelsProvider = new PolicyModelsProviderFactory().createPolicyModelsProvider(providerParameters);\r
+ super();\r
}\r
\r
/**\r
List<ToscaPolicy> policies = modelsProvider.getFilteredPolicyList(policyFilter);\r
if (!policies.isEmpty()) {\r
throw new PfModelException(Response.Status.CONFLICT,\r
- constructDeleteRuleViolationMessage(policyTypeId, policyTypeVersion, policies));\r
+ constructDeletePolicyTypeViolationMessage(policyTypeId, policyTypeVersion, policies));\r
}\r
}\r
\r
- /**\r
- * Constructs returned message for policy type delete rule violation.\r
- *\r
- * @param policyTypeId the ID of policy type\r
- * @param policyTypeVersion the version of policy type\r
- * @param policies the list of policies that parameterizes specified policy type\r
- *\r
- * @return the constructed message\r
- */\r
- private String constructDeleteRuleViolationMessage(\r
- String policyTypeId, String policyTypeVersion, List<ToscaPolicy> policies) {\r
-\r
- List<String> policyNameVersionList = new ArrayList<>();\r
- for (ToscaPolicy policy : policies) {\r
- policyNameVersionList.add(policy.getName() + ":" + policy.getVersion());\r
- }\r
- String parameterizedPolicies = String.join(",", policyNameVersionList);\r
- return "policy type with ID " + policyTypeId + ":" + policyTypeVersion\r
- + " cannot be deleted as it is parameterized by policies " + parameterizedPolicies;\r
- }\r
-\r
/**\r
* Constructs returned message for not found resource.\r
*\r
\r
return "policy type with ID " + policyTypeId + ":" + policyTypeVersion + " does not exist";\r
}\r
-\r
- /**\r
- * Checks if service template contains any policy type.\r
- *\r
- * @param serviceTemplate the service template to check against\r
- *\r
- * @return boolean whether service template contains any policy type\r
- */\r
- private boolean hasPolicyType(ToscaServiceTemplate serviceTemplate) {\r
-\r
- if (serviceTemplate.getPolicyTypes() == null) {\r
- return false;\r
- } else if (serviceTemplate.getPolicyTypes().isEmpty()) {\r
- return false;\r
- } else if (serviceTemplate.getPolicyTypes().get(0).isEmpty()) {\r
- return false;\r
- } else {\r
- return true;\r
- }\r
- }\r
-\r
- /**\r
- * Closes the connection to database.\r
- *\r
- * @throws PfModelException the PfModel parsing exception\r
- */\r
- @Override
- public void close() throws PfModelException {\r
-\r
- modelsProvider.close();\r
- }\r
}\r