aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLathish <lathishbabu.ganesan@est.tech>2020-12-11 14:47:43 +0000
committerLathish <lathishbabu.ganesan@est.tech>2021-01-07 11:45:00 +0000
commit157f8cb05752a6bff2b7b9ad192acba4b6def6c3 (patch)
treeb932bfe23ebfb6d0fd6fcd67f68a24219901b987
parentd7cc059bfce52da57e8cc12e17280641878bce19 (diff)
Global Exception Handler
Issue-ID: CCSDK-3054 Change-Id: I0281e616b58bb405b4f79d046af5c30b82753ea0 Signed-off-by: Lathish <lathishbabu.ganesan@est.tech>
-rw-r--r--a1-policy-management/api/pms-api.json35
-rw-r--r--a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v1/PolicyController.java102
-rw-r--r--a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v1/RicRepositoryController.java16
-rw-r--r--a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/ErrorResponse.java4
-rw-r--r--a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/PolicyController.java103
-rw-r--r--a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/RicRepositoryController.java45
-rw-r--r--a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/exceptions/EntityNotFoundException.java34
-rw-r--r--a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/exceptions/GlobalExceptionHandler.java43
-rw-r--r--a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/exceptions/InvalidRequestException.java34
-rw-r--r--a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/repository/Policies.java6
-rw-r--r--a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/repository/PolicyTypes.java6
-rw-r--r--a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/repository/Rics.java13
12 files changed, 254 insertions, 187 deletions
diff --git a/a1-policy-management/api/pms-api.json b/a1-policy-management/api/pms-api.json
index 173d8df1..126eab56 100644
--- a/a1-policy-management/api/pms-api.json
+++ b/a1-policy-management/api/pms-api.json
@@ -17,7 +17,7 @@
"401": {"description": "Unauthorized"},
"403": {"description": "Forbidden"},
"404": {
- "schema": {"type": "string"},
+ "schema": {"$ref": "#/definitions/error_information"},
"description": "Near-RT RIC is not found"
}
},
@@ -79,7 +79,7 @@
"summary": "Returns service information",
"deprecated": false,
"produces": ["*/*"],
- "operationId": "getServicesUsingGET",
+ "operationId": "getServicesUsingGET_1",
"responses": {
"200": {
"schema": {
@@ -109,7 +109,7 @@
"summary": "Delete a service",
"deprecated": false,
"produces": ["*/*"],
- "operationId": "deleteServiceUsingDELETE",
+ "operationId": "deleteServiceUsingDELETE_1",
"responses": {
"200": {
"schema": {"type": "string"},
@@ -141,7 +141,7 @@
"summary": "Unregister a service",
"deprecated": false,
"produces": ["*/*"],
- "operationId": "deleteServiceUsingDELETE_1",
+ "operationId": "deleteServiceUsingDELETE",
"responses": {
"200": {"description": "Not used"},
"401": {"description": "Unauthorized"},
@@ -177,7 +177,10 @@
},
"401": {"description": "Unauthorized"},
"403": {"description": "Forbidden"},
- "404": {"description": "Policy is not found"}
+ "404": {
+ "schema": {"$ref": "#/definitions/error_information"},
+ "description": "Policy is not found"
+ }
},
"parameters": [{
"in": "query",
@@ -409,7 +412,7 @@
"401": {"description": "Unauthorized"},
"403": {"description": "Forbidden"},
"404": {
- "schema": {"type": "string"},
+ "schema": {"$ref": "#/definitions/error_information"},
"description": "The policy type is not found"
}
},
@@ -427,7 +430,7 @@
"summary": "Query Near-RT RIC information",
"deprecated": false,
"produces": ["*/*"],
- "operationId": "getRicsUsingGET",
+ "operationId": "getRicsUsingGET_1",
"responses": {
"200": {
"schema": {
@@ -511,7 +514,7 @@
"deprecated": false,
"produces": ["application/json"],
"description": "The call returns all Near-RT RICs that supports a given policy type identity",
- "operationId": "getRicsUsingGET_1",
+ "operationId": "getRicsUsingGET",
"responses": {
"200": {
"schema": {"$ref": "#/definitions/ric_info_list_v2"},
@@ -651,7 +654,7 @@
"401": {"description": "Unauthorized"},
"403": {"description": "Forbidden"},
"404": {
- "schema": {"type": "string"},
+ "schema": {"$ref": "#/definitions/error_information"},
"description": "Near-RT RIC is not found"
}
},
@@ -717,7 +720,7 @@
"deprecated": false,
"produces": ["application/json"],
"description": "Either information about a registered service with given identity or all registered services are returned.",
- "operationId": "getServicesUsingGET_1",
+ "operationId": "getServicesUsingGET",
"responses": {
"200": {
"schema": {"$ref": "#/definitions/service_list_v2"},
@@ -745,7 +748,7 @@
"deprecated": false,
"produces": ["*/*"],
"description": "Registering a service is needed to:<ul><li>Get callbacks.<\/li><li>Activate supervision of the service. If a service is inactive, its policies will be deleted.<\/li><\/ul>",
- "operationId": "putServiceUsingPUT_1",
+ "operationId": "putServiceUsingPUT",
"responses": {
"200": {
"schema": {"type": "object"},
@@ -778,7 +781,7 @@
"summary": "Returns the name of a RIC managing one Mananged Element",
"deprecated": false,
"produces": ["*/*"],
- "operationId": "getRicUsingGET",
+ "operationId": "getRicUsingGET_1",
"responses": {
"200": {
"schema": {"type": "string"},
@@ -805,7 +808,7 @@
"summary": "Heartbeat from a service",
"deprecated": false,
"produces": ["*/*"],
- "operationId": "keepAliveServiceUsingPUT",
+ "operationId": "keepAliveServiceUsingPUT_1",
"responses": {
"200": {
"schema": {"type": "string"},
@@ -831,7 +834,7 @@
"summary": "Heartbeat indicates that the service is running",
"deprecated": false,
"produces": ["*/*"],
- "operationId": "keepAliveServiceUsingPUT_1",
+ "operationId": "keepAliveServiceUsingPUT",
"responses": {
"200": {
"schema": {"type": "object"},
@@ -876,7 +879,7 @@
"deprecated": false,
"produces": ["application/json"],
"description": "Either a Near-RT RIC identity or a Mananged Element identity can be specified.<br>The intention with Mananged Element identity is the ID used in O1 for accessing the traffical element (such as the ID of CU).",
- "operationId": "getRicUsingGET_1",
+ "operationId": "getRicUsingGET",
"responses": {
"200": {
"schema": {"$ref": "#/definitions/ric_info_v2"},
@@ -962,7 +965,7 @@
"summary": "Register a service",
"deprecated": false,
"produces": ["*/*"],
- "operationId": "putServiceUsingPUT",
+ "operationId": "putServiceUsingPUT_1",
"responses": {
"200": {
"schema": {"type": "string"},
diff --git a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v1/PolicyController.java b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v1/PolicyController.java
index e1d60de3..6c5ebd90 100644
--- a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v1/PolicyController.java
+++ b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v1/PolicyController.java
@@ -39,7 +39,8 @@ import lombok.Getter;
import org.onap.ccsdk.oran.a1policymanagementservice.clients.A1ClientFactory;
import org.onap.ccsdk.oran.a1policymanagementservice.controllers.VoidResponse;
-import org.onap.ccsdk.oran.a1policymanagementservice.exceptions.ServiceException;
+import org.onap.ccsdk.oran.a1policymanagementservice.controllers.v2.ErrorResponse;
+import org.onap.ccsdk.oran.a1policymanagementservice.exceptions.EntityNotFoundException;
import org.onap.ccsdk.oran.a1policymanagementservice.repository.ImmutablePolicy;
import org.onap.ccsdk.oran.a1policymanagementservice.repository.Lock.LockType;
import org.onap.ccsdk.oran.a1policymanagementservice.repository.Policies;
@@ -97,38 +98,30 @@ public class PolicyController {
@ApiOperation(value = "Returns policy type schema definitions")
@ApiResponses(value = {
@ApiResponse(code = 200, message = "Policy schemas", response = Object.class, responseContainer = "List"), //
- @ApiResponse(code = 404, message = "Near-RT RIC is not found", response = String.class)})
+ @ApiResponse(code = 404, message = "Near-RT RIC is not found", response = ErrorResponse.ErrorInfo.class)})
public ResponseEntity<String> getPolicySchemas( //
@ApiParam(name = "ric", required = false, value = "The name of the Near-RT RIC to get the definitions for.") //
- @RequestParam(name = "ric", required = false) String ricName) {
+ @RequestParam(name = "ric", required = false) String ricName) throws EntityNotFoundException {
if (ricName == null) {
Collection<PolicyType> types = this.policyTypes.getAll();
return new ResponseEntity<>(toPolicyTypeSchemasJson(types), HttpStatus.OK);
} else {
- try {
- Collection<PolicyType> types = rics.getRic(ricName).getSupportedPolicyTypes();
- return new ResponseEntity<>(toPolicyTypeSchemasJson(types), HttpStatus.OK);
- } catch (ServiceException e) {
- return new ResponseEntity<>(e.toString(), HttpStatus.NOT_FOUND);
- }
+ Collection<PolicyType> types = rics.getRic(ricName).getSupportedPolicyTypes();
+ return new ResponseEntity<>(toPolicyTypeSchemasJson(types), HttpStatus.OK);
}
}
@GetMapping("/policy_schema")
@ApiOperation(value = "Returns one policy type schema definition")
@ApiResponses(value = { //
- @ApiResponse(code = 200, message = "Policy schema", response = Object.class),
- @ApiResponse(code = 404, message = "The policy type is not found", response = String.class)})
+ @ApiResponse(code = 200, message = "Policy schema", response = Object.class), @ApiResponse(code = 404,
+ message = "The policy type is not found", response = ErrorResponse.ErrorInfo.class)})
public ResponseEntity<String> getPolicySchema( //
@ApiParam(name = "id", required = true,
value = "The identity of the policy type to get the definition for.") //
- @RequestParam(name = "id", required = true) String id) {
- try {
- PolicyType type = policyTypes.getType(id);
- return new ResponseEntity<>(type.schema(), HttpStatus.OK);
- } catch (ServiceException e) {
- return new ResponseEntity<>(e.toString(), HttpStatus.NOT_FOUND);
- }
+ @RequestParam(name = "id", required = true) String id) throws EntityNotFoundException {
+ PolicyType type = policyTypes.getType(id);
+ return new ResponseEntity<>(type.schema(), HttpStatus.OK);
}
@GetMapping("/policy_types")
@@ -136,20 +129,16 @@ public class PolicyController {
@ApiResponses(value = {
@ApiResponse(code = 200, message = "Policy type names", response = String.class,
responseContainer = "List"),
- @ApiResponse(code = 404, message = "Near-RT RIC is not found", response = String.class)})
+ @ApiResponse(code = 404, message = "Near-RT RIC is not found", response = ErrorResponse.ErrorInfo.class)})
public ResponseEntity<String> getPolicyTypes( //
@ApiParam(name = "ric", required = false, value = "The name of the Near-RT RIC to get types for.") //
- @RequestParam(name = "ric", required = false) String ricName) {
+ @RequestParam(name = "ric", required = false) String ricName) throws EntityNotFoundException {
if (ricName == null) {
Collection<PolicyType> types = this.policyTypes.getAll();
return new ResponseEntity<>(toPolicyTypeIdsJson(types), HttpStatus.OK);
} else {
- try {
- Collection<PolicyType> types = rics.getRic(ricName).getSupportedPolicyTypes();
- return new ResponseEntity<>(toPolicyTypeIdsJson(types), HttpStatus.OK);
- } catch (ServiceException e) {
- return new ResponseEntity<>(e.toString(), HttpStatus.NOT_FOUND);
- }
+ Collection<PolicyType> types = rics.getRic(ricName).getSupportedPolicyTypes();
+ return new ResponseEntity<>(toPolicyTypeIdsJson(types), HttpStatus.OK);
}
}
@@ -157,17 +146,13 @@ public class PolicyController {
@ApiOperation(value = "Returns a policy configuration") //
@ApiResponses(value = { //
@ApiResponse(code = 200, message = "Policy found", response = Object.class), //
- @ApiResponse(code = 404, message = "Policy is not found")} //
+ @ApiResponse(code = 404, message = "Policy is not found", response = ErrorResponse.ErrorInfo.class)} //
)
public ResponseEntity<String> getPolicy( //
@ApiParam(name = "id", required = true, value = "The identity of the policy instance.") //
- @RequestParam(name = "id", required = true) String id) {
- try {
- Policy p = policies.getPolicy(id);
- return new ResponseEntity<>(p.json(), HttpStatus.OK);
- } catch (ServiceException e) {
- return new ResponseEntity<>(e.getMessage(), HttpStatus.NOT_FOUND);
- }
+ @RequestParam(name = "id", required = true) String id) throws EntityNotFoundException {
+ Policy p = policies.getPolicy(id);
+ return new ResponseEntity<>(p.json(), HttpStatus.OK);
}
@DeleteMapping("/policy")
@@ -179,23 +164,19 @@ public class PolicyController {
@ApiResponse(code = 423, message = "Near-RT RIC is not operational", response = String.class)})
public Mono<ResponseEntity<Object>> deletePolicy( //
@ApiParam(name = "id", required = true, value = "The identity of the policy instance.") //
- @RequestParam(name = "id", required = true) String id) {
- try {
- Policy policy = policies.getPolicy(id);
- keepServiceAlive(policy.ownerServiceId());
- Ric ric = policy.ric();
- return ric.getLock().lock(LockType.SHARED) //
- .flatMap(notUsed -> assertRicStateIdle(ric)) //
- .flatMap(notUsed -> a1ClientFactory.createA1Client(policy.ric())) //
- .doOnNext(notUsed -> policies.remove(policy)) //
- .flatMap(client -> client.deletePolicy(policy)) //
- .doOnNext(notUsed -> ric.getLock().unlockBlocking()) //
- .doOnError(notUsed -> ric.getLock().unlockBlocking()) //
- .flatMap(notUsed -> Mono.just(new ResponseEntity<>(HttpStatus.NO_CONTENT)))
- .onErrorResume(this::handleException);
- } catch (ServiceException e) {
- return Mono.just(new ResponseEntity<>(HttpStatus.NOT_FOUND));
- }
+ @RequestParam(name = "id", required = true) String id) throws EntityNotFoundException {
+ Policy policy = policies.getPolicy(id);
+ keepServiceAlive(policy.ownerServiceId());
+ Ric ric = policy.ric();
+ return ric.getLock().lock(LockType.SHARED) //
+ .flatMap(notUsed -> assertRicStateIdle(ric)) //
+ .flatMap(notUsed -> a1ClientFactory.createA1Client(policy.ric())) //
+ .doOnNext(notUsed -> policies.remove(policy)) //
+ .flatMap(client -> client.deletePolicy(policy)) //
+ .doOnNext(notUsed -> ric.getLock().unlockBlocking()) //
+ .doOnError(notUsed -> ric.getLock().unlockBlocking()) //
+ .flatMap(notUsed -> Mono.just(new ResponseEntity<>(HttpStatus.NO_CONTENT)))
+ .onErrorResume(this::handleException);
}
@PutMapping(path = "/policy")
@@ -364,17 +345,14 @@ public class PolicyController {
)
public Mono<ResponseEntity<String>> getPolicyStatus( //
@ApiParam(name = "id", required = true, value = "The identity of the policy.") @RequestParam(name = "id", //
- required = true) String id) {
- try {
- Policy policy = policies.getPolicy(id);
-
- return a1ClientFactory.createA1Client(policy.ric()) //
- .flatMap(client -> client.getPolicyStatus(policy)) //
- .flatMap(status -> Mono.just(new ResponseEntity<>(status, HttpStatus.OK)))
- .onErrorResume(this::handleException);
- } catch (ServiceException e) {
- return Mono.just(new ResponseEntity<>(e.getMessage(), HttpStatus.NOT_FOUND));
- }
+ required = true) String id)
+ throws EntityNotFoundException {
+ Policy policy = policies.getPolicy(id);
+
+ return a1ClientFactory.createA1Client(policy.ric()) //
+ .flatMap(client -> client.getPolicyStatus(policy)) //
+ .flatMap(status -> Mono.just(new ResponseEntity<>(status, HttpStatus.OK)))
+ .onErrorResume(this::handleException);
}
private void keepServiceAlive(String name) {
diff --git a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v1/RicRepositoryController.java b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v1/RicRepositoryController.java
index 4e57ada8..224935e3 100644
--- a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v1/RicRepositoryController.java
+++ b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v1/RicRepositoryController.java
@@ -31,8 +31,8 @@ import io.swagger.annotations.ApiResponses;
import java.util.ArrayList;
import java.util.List;
-import java.util.Optional;
+import org.onap.ccsdk.oran.a1policymanagementservice.exceptions.EntityNotFoundException;
import org.onap.ccsdk.oran.a1policymanagementservice.repository.PolicyTypes;
import org.onap.ccsdk.oran.a1policymanagementservice.repository.Ric;
import org.onap.ccsdk.oran.a1policymanagementservice.repository.Rics;
@@ -58,6 +58,8 @@ public class RicRepositoryController {
/**
* Example: http://localhost:8081/rics?managedElementId=kista_1
+ *
+ * @throws EntityNotFoundException
*/
@GetMapping("/ric")
@ApiOperation(value = "Returns the name of a RIC managing one Mananged Element")
@@ -67,14 +69,10 @@ public class RicRepositoryController {
})
public ResponseEntity<String> getRic( //
@ApiParam(name = "managedElementId", required = true, value = "The identity of the Managed Element") //
- @RequestParam(name = "managedElementId", required = true) String managedElementId) {
- Optional<Ric> ric = this.rics.lookupRicForManagedElement(managedElementId);
-
- if (ric.isPresent()) {
- return new ResponseEntity<>(ric.get().id(), HttpStatus.OK);
- } else {
- return new ResponseEntity<>("No RIC found", HttpStatus.NOT_FOUND);
- }
+ @RequestParam(name = "managedElementId", required = true) String managedElementId)
+ throws EntityNotFoundException {
+ Ric ric = this.rics.lookupRicForManagedElement(managedElementId);
+ return new ResponseEntity<>(ric.id(), HttpStatus.OK);
}
/**
diff --git a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/ErrorResponse.java b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/ErrorResponse.java
index 988fbc2a..da321655 100644
--- a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/ErrorResponse.java
+++ b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/ErrorResponse.java
@@ -33,7 +33,7 @@ import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import reactor.core.publisher.Mono;
-class ErrorResponse {
+public class ErrorResponse {
private static Gson gson = new GsonBuilder() //
.create(); //
@@ -97,7 +97,7 @@ class ErrorResponse {
return new ResponseEntity<>(json, headers, code);
}
- static ResponseEntity<Object> create(Exception e, HttpStatus code) {
+ public static ResponseEntity<Object> create(Exception e, HttpStatus code) {
return create(e.toString(), code);
}
diff --git a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/PolicyController.java b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/PolicyController.java
index ea047cb5..850635f6 100644
--- a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/PolicyController.java
+++ b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/PolicyController.java
@@ -39,7 +39,7 @@ import lombok.Getter;
import org.onap.ccsdk.oran.a1policymanagementservice.clients.A1ClientFactory;
import org.onap.ccsdk.oran.a1policymanagementservice.controllers.VoidResponse;
-import org.onap.ccsdk.oran.a1policymanagementservice.exceptions.ServiceException;
+import org.onap.ccsdk.oran.a1policymanagementservice.exceptions.EntityNotFoundException;
import org.onap.ccsdk.oran.a1policymanagementservice.repository.ImmutablePolicy;
import org.onap.ccsdk.oran.a1policymanagementservice.repository.Lock.LockType;
import org.onap.ccsdk.oran.a1policymanagementservice.repository.Policies;
@@ -104,14 +104,10 @@ public class PolicyController {
@ApiResponse(code = 200, message = "Policy type", response = PolicyTypeInfo.class), //
@ApiResponse(code = 404, message = "Policy type is not found", response = ErrorResponse.ErrorInfo.class)})
public ResponseEntity<Object> getPolicyType( //
- @PathVariable("policytype_id") String policyTypeId) {
- try {
- PolicyType type = policyTypes.getType(policyTypeId);
- PolicyTypeInfo info = new PolicyTypeInfo(type.schema());
- return new ResponseEntity<>(gson.toJson(info), HttpStatus.OK);
- } catch (ServiceException e) {
- return ErrorResponse.create(e, HttpStatus.NOT_FOUND);
- }
+ @PathVariable("policytype_id") String policyTypeId) throws EntityNotFoundException {
+ PolicyType type = policyTypes.getType(policyTypeId);
+ PolicyTypeInfo info = new PolicyTypeInfo(type.schema());
+ return new ResponseEntity<>(gson.toJson(info), HttpStatus.OK);
}
@GetMapping(path = Consts.V2_API_ROOT + "/policy-types", produces = MediaType.APPLICATION_JSON_VALUE)
@@ -121,17 +117,13 @@ public class PolicyController {
public ResponseEntity<Object> getPolicyTypes( //
@ApiParam(name = Consts.RIC_ID_PARAM, required = false,
value = "The identity of the Near-RT RIC to get types for.") //
- @RequestParam(name = Consts.RIC_ID_PARAM, required = false) String ricId) {
+ @RequestParam(name = Consts.RIC_ID_PARAM, required = false) String ricId) throws EntityNotFoundException {
if (ricId == null) {
Collection<PolicyType> types = this.policyTypes.getAll();
return new ResponseEntity<>(toPolicyTypeIdsJson(types), HttpStatus.OK);
} else {
- try {
- Collection<PolicyType> types = rics.getRic(ricId).getSupportedPolicyTypes();
- return new ResponseEntity<>(toPolicyTypeIdsJson(types), HttpStatus.OK);
- } catch (ServiceException e) {
- return ErrorResponse.create(e, HttpStatus.NOT_FOUND);
- }
+ Collection<PolicyType> types = rics.getRic(ricId).getSupportedPolicyTypes();
+ return new ResponseEntity<>(toPolicyTypeIdsJson(types), HttpStatus.OK);
}
}
@@ -142,13 +134,9 @@ public class PolicyController {
@ApiResponse(code = 404, message = "Policy is not found", response = ErrorResponse.ErrorInfo.class)} //
)
public ResponseEntity<Object> getPolicy( //
- @PathVariable(name = Consts.POLICY_ID_PARAM, required = true) String id) {
- try {
- Policy p = policies.getPolicy(id);
- return new ResponseEntity<>(gson.toJson(toPolicyInfo(p)), HttpStatus.OK);
- } catch (ServiceException e) {
- return ErrorResponse.create(e, HttpStatus.NOT_FOUND);
- }
+ @PathVariable(name = Consts.POLICY_ID_PARAM, required = true) String id) throws EntityNotFoundException {
+ Policy p = policies.getPolicy(id);
+ return new ResponseEntity<>(gson.toJson(toPolicyInfo(p)), HttpStatus.OK);
}
@DeleteMapping(Consts.V2_API_ROOT + "/policies/{policy_id:.+}")
@@ -160,23 +148,19 @@ public class PolicyController {
@ApiResponse(code = 423, message = "Near-RT RIC is not operational",
response = ErrorResponse.ErrorInfo.class)})
public Mono<ResponseEntity<Object>> deletePolicy( //
- @PathVariable(Consts.POLICY_ID_PARAM) String policyId) {
- try {
- Policy policy = policies.getPolicy(policyId);
- keepServiceAlive(policy.ownerServiceId());
- Ric ric = policy.ric();
- return ric.getLock().lock(LockType.SHARED) //
- .flatMap(notUsed -> assertRicStateIdle(ric)) //
- .flatMap(notUsed -> a1ClientFactory.createA1Client(policy.ric())) //
- .doOnNext(notUsed -> policies.remove(policy)) //
- .flatMap(client -> client.deletePolicy(policy)) //
- .doOnNext(notUsed -> ric.getLock().unlockBlocking()) //
- .doOnError(notUsed -> ric.getLock().unlockBlocking()) //
- .flatMap(notUsed -> Mono.just(new ResponseEntity<>(HttpStatus.NO_CONTENT)))
- .onErrorResume(this::handleException);
- } catch (ServiceException e) {
- return ErrorResponse.createMono(e, HttpStatus.NOT_FOUND);
- }
+ @PathVariable(Consts.POLICY_ID_PARAM) String policyId) throws EntityNotFoundException {
+ Policy policy = policies.getPolicy(policyId);
+ keepServiceAlive(policy.ownerServiceId());
+ Ric ric = policy.ric();
+ return ric.getLock().lock(LockType.SHARED) //
+ .flatMap(notUsed -> assertRicStateIdle(ric)) //
+ .flatMap(notUsed -> a1ClientFactory.createA1Client(policy.ric())) //
+ .doOnNext(notUsed -> policies.remove(policy)) //
+ .flatMap(client -> client.deletePolicy(policy)) //
+ .doOnNext(notUsed -> ric.getLock().unlockBlocking()) //
+ .doOnError(notUsed -> ric.getLock().unlockBlocking()) //
+ .flatMap(notUsed -> Mono.just(new ResponseEntity<>(HttpStatus.NO_CONTENT)))
+ .onErrorResume(this::handleException);
}
@PutMapping(path = Consts.V2_API_ROOT + "/policies", produces = MediaType.APPLICATION_JSON_VALUE)
@@ -189,7 +173,7 @@ public class PolicyController {
@ApiResponse(code = 404, message = "Near-RT RIC or policy type is not found",
response = ErrorResponse.ErrorInfo.class) //
})
- public Mono<ResponseEntity<Object>> putPolicy(@RequestBody PolicyInfo policyInfo) {
+ public Mono<ResponseEntity<Object>> putPolicy(@RequestBody PolicyInfo policyInfo) throws EntityNotFoundException {
if (!policyInfo.validate()) {
return ErrorResponse.createMono("Missing required parameter in body", HttpStatus.BAD_REQUEST);
@@ -199,7 +183,7 @@ public class PolicyController {
PolicyType type = policyTypes.get(policyInfo.policyTypeId);
keepServiceAlive(policyInfo.serviceId);
if (ric == null || type == null) {
- return ErrorResponse.createMono("Near-RT RIC or policy type not found", HttpStatus.NOT_FOUND);
+ throw new EntityNotFoundException("Near-RT RIC or policy type not found");
}
Policy policy = ImmutablePolicy.builder() //
.id(policyInfo.policyId) //
@@ -293,13 +277,14 @@ public class PolicyController {
@RequestParam(name = Consts.RIC_ID_PARAM, required = false) String ric, //
@ApiParam(name = Consts.SERVICE_ID_PARAM, required = false,
value = "The identity of the service to get policies for.") //
- @RequestParam(name = Consts.SERVICE_ID_PARAM, required = false) String service) //
+ @RequestParam(name = Consts.SERVICE_ID_PARAM, required = false) String service)
+ throws EntityNotFoundException //
{
if ((type != null && this.policyTypes.get(type) == null)) {
- return ErrorResponse.create("Policy type not found", HttpStatus.NOT_FOUND);
+ throw new EntityNotFoundException("Policy type not found");
}
if ((ric != null && this.rics.get(ric) == null)) {
- return ErrorResponse.create("Near-RT RIC not found", HttpStatus.NOT_FOUND);
+ throw new EntityNotFoundException("Near-RT RIC not found");
}
String filteredPolicies = policiesToJson(filter(type, ric, service));
@@ -320,13 +305,14 @@ public class PolicyController {
@RequestParam(name = Consts.RIC_ID_PARAM, required = false) String ricId, //
@ApiParam(name = Consts.SERVICE_ID_PARAM, required = false,
value = "The identity of the service to get policies for.") //
- @RequestParam(name = Consts.SERVICE_ID_PARAM, required = false) String serviceId) //
+ @RequestParam(name = Consts.SERVICE_ID_PARAM, required = false) String serviceId)
+ throws EntityNotFoundException //
{
if ((policyTypeId != null && this.policyTypes.get(policyTypeId) == null)) {
- return ErrorResponse.create("Policy type not found", HttpStatus.NOT_FOUND);
+ throw new EntityNotFoundException("Policy type not found");
}
if ((ricId != null && this.rics.get(ricId) == null)) {
- return ErrorResponse.create("Near-RT RIC not found", HttpStatus.NOT_FOUND);
+ throw new EntityNotFoundException("Near-RT RIC not found");
}
String policyIdsJson = toPolicyIdsJson(filter(policyTypeId, ricId, serviceId));
@@ -340,23 +326,20 @@ public class PolicyController {
@ApiResponse(code = 404, message = "Policy is not found", response = ErrorResponse.ErrorInfo.class)} //
)
public Mono<ResponseEntity<Object>> getPolicyStatus( //
- @PathVariable(Consts.POLICY_ID_PARAM) String policyId) {
- try {
- Policy policy = policies.getPolicy(policyId);
-
- return a1ClientFactory.createA1Client(policy.ric()) //
- .flatMap(client -> client.getPolicyStatus(policy).onErrorResume(e -> Mono.just("{}"))) //
- .flatMap(status -> createPolicyStatus(policy, status)) //
- .onErrorResume(this::handleException);
- } catch (ServiceException e) {
- return ErrorResponse.createMono(e, HttpStatus.NOT_FOUND);
- }
+ @PathVariable(Consts.POLICY_ID_PARAM) String policyId) throws EntityNotFoundException {
+ Policy policy = policies.getPolicy(policyId);
+
+ return a1ClientFactory.createA1Client(policy.ric()) //
+ .flatMap(client -> client.getPolicyStatus(policy).onErrorResume(e -> Mono.just("{}"))) //
+ .flatMap(status -> createPolicyStatus(policy, status)) //
+ .onErrorResume(this::handleException);
+
}
private Mono<ResponseEntity<Object>> createPolicyStatus(Policy policy, String statusFromNearRic) {
PolicyStatusInfo info = new PolicyStatusInfo(policy.lastModified(), fromJson(statusFromNearRic));
String str = gson.toJson(info);
- return Mono.just(new ResponseEntity<>((Object) str, HttpStatus.OK));
+ return Mono.just(new ResponseEntity<>(str, HttpStatus.OK));
}
private void keepServiceAlive(String name) {
diff --git a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/RicRepositoryController.java b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/RicRepositoryController.java
index a77a7e7e..f07efa2c 100644
--- a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/RicRepositoryController.java
+++ b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/RicRepositoryController.java
@@ -31,9 +31,9 @@ import io.swagger.annotations.ApiResponses;
import java.util.ArrayList;
import java.util.List;
-import java.util.Optional;
-import org.onap.ccsdk.oran.a1policymanagementservice.exceptions.ServiceException;
+import org.onap.ccsdk.oran.a1policymanagementservice.exceptions.EntityNotFoundException;
+import org.onap.ccsdk.oran.a1policymanagementservice.exceptions.InvalidRequestException;
import org.onap.ccsdk.oran.a1policymanagementservice.repository.PolicyTypes;
import org.onap.ccsdk.oran.a1policymanagementservice.repository.Ric;
import org.onap.ccsdk.oran.a1policymanagementservice.repository.Rics;
@@ -65,6 +65,8 @@ public class RicRepositoryController {
/**
* Example: http://localhost:8081/v2/rics/ric?managed_element_id=kista_1
+ *
+ * @throws EntityNotFoundException
*/
@GetMapping(path = Consts.V2_API_ROOT + "/rics/ric", produces = MediaType.APPLICATION_JSON_VALUE)
@ApiOperation(value = GET_RIC_BRIEF, notes = GET_RIC_DETAILS)
@@ -78,25 +80,18 @@ public class RicRepositoryController {
@RequestParam(name = Consts.MANAGED_ELEMENT_ID_PARAM, required = false) String managedElementId,
@ApiParam(name = Consts.RIC_ID_PARAM, required = false,
value = "The identity of a Near-RT RIC to get information for.") //
- @RequestParam(name = Consts.RIC_ID_PARAM, required = false) String ricId) {
- try {
- if (managedElementId != null && ricId != null) {
- return ErrorResponse.create("Give one query parameter", HttpStatus.BAD_REQUEST);
- } else if (managedElementId != null) {
- Optional<Ric> ric = this.rics.lookupRicForManagedElement(managedElementId);
- if (ric.isPresent()) {
- return new ResponseEntity<>(gson.toJson(toRicInfo(ric.get())), HttpStatus.OK);
- } else {
- return ErrorResponse.create("No Near-RT RIC managing the ME is found", HttpStatus.NOT_FOUND);
- }
- } else if (ricId != null) {
- RicInfo info = toRicInfo(this.rics.getRic(ricId));
- return new ResponseEntity<>(gson.toJson(info), HttpStatus.OK);
- } else {
- return ErrorResponse.create("Give one query parameter", HttpStatus.BAD_REQUEST);
- }
- } catch (ServiceException e) {
- return ErrorResponse.create(e, HttpStatus.NOT_FOUND);
+ @RequestParam(name = Consts.RIC_ID_PARAM, required = false) String ricId)
+ throws EntityNotFoundException, InvalidRequestException {
+ if (managedElementId != null && ricId != null) {
+ throw new InvalidRequestException("Give one query parameter");
+ } else if (managedElementId != null) {
+ Ric ric = this.rics.lookupRicForManagedElement(managedElementId);
+ return new ResponseEntity<>(gson.toJson(toRicInfo(ric)), HttpStatus.OK);
+ } else if (ricId != null) {
+ RicInfo info = toRicInfo(this.rics.getRic(ricId));
+ return new ResponseEntity<>(gson.toJson(info), HttpStatus.OK);
+ } else {
+ throw new InvalidRequestException("Give one query parameter");
}
}
@@ -105,6 +100,7 @@ public class RicRepositoryController {
/**
* @return a Json array of all RIC data Example: http://localhost:8081/v2/ric
+ * @throws EntityNotFoundException
*/
@GetMapping(path = Consts.V2_API_ROOT + "/rics", produces = MediaType.APPLICATION_JSON_VALUE)
@ApiOperation(value = "Query Near-RT RIC information", notes = QUERY_RIC_INFO_DETAILS)
@@ -114,11 +110,10 @@ public class RicRepositoryController {
public ResponseEntity<Object> getRics( //
@ApiParam(name = Consts.POLICY_TYPE_ID_PARAM, required = false,
value = "The identity of a policy type. If given, all Near-RT RICs supporteing the policy type are returned") //
- @RequestParam(name = Consts.POLICY_TYPE_ID_PARAM, required = false) String supportingPolicyType
-
- ) {
+ @RequestParam(name = Consts.POLICY_TYPE_ID_PARAM, required = false) String supportingPolicyType)
+ throws EntityNotFoundException {
if ((supportingPolicyType != null) && (this.types.get(supportingPolicyType) == null)) {
- return ErrorResponse.create("Policy type not found", HttpStatus.NOT_FOUND);
+ throw new EntityNotFoundException("Policy type not found");
}
List<RicInfo> result = new ArrayList<>();
diff --git a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/exceptions/EntityNotFoundException.java b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/exceptions/EntityNotFoundException.java
new file mode 100644
index 00000000..ee9b7bf2
--- /dev/null
+++ b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/exceptions/EntityNotFoundException.java
@@ -0,0 +1,34 @@
+/*-
+ * ========================LICENSE_START=================================
+ * ONAP : ccsdk oran
+ * ======================================================================
+ * Copyright (C) 2019-2020 Nordix Foundation. 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.
+ * ========================LICENSE_END===================================
+ */
+
+package org.onap.ccsdk.oran.a1policymanagementservice.exceptions;
+
+public class EntityNotFoundException extends ServiceException {
+
+ private static final long serialVersionUID = 1L;
+
+ public EntityNotFoundException(String message) {
+ super(message);
+ }
+
+ public EntityNotFoundException(String message, Exception originalException) {
+ super(message, originalException);
+ }
+}
diff --git a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/exceptions/GlobalExceptionHandler.java b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/exceptions/GlobalExceptionHandler.java
new file mode 100644
index 00000000..9d20d33f
--- /dev/null
+++ b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/exceptions/GlobalExceptionHandler.java
@@ -0,0 +1,43 @@
+/*-
+ * ========================LICENSE_START=================================
+ * ONAP : ccsdk oran
+ * ======================================================================
+ * Copyright (C) 2019-2020 Nordix Foundation. 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.
+ * ========================LICENSE_END===================================
+ */
+
+package org.onap.ccsdk.oran.a1policymanagementservice.exceptions;
+
+import org.onap.ccsdk.oran.a1policymanagementservice.controllers.v2.ErrorResponse;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.ControllerAdvice;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;
+
+@ControllerAdvice(annotations = RestController.class)
+public class GlobalExceptionHandler extends ResponseEntityExceptionHandler {
+
+ @ExceptionHandler(EntityNotFoundException.class)
+ public final ResponseEntity<Object> handleNotFoundException(EntityNotFoundException ex) {
+ return ErrorResponse.create(ex, HttpStatus.NOT_FOUND);
+ }
+
+ @ExceptionHandler(InvalidRequestException.class)
+ public final ResponseEntity<Object> handleInvalidRequestException(InvalidRequestException ex) {
+ return ErrorResponse.create(ex, HttpStatus.BAD_REQUEST);
+ }
+}
diff --git a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/exceptions/InvalidRequestException.java b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/exceptions/InvalidRequestException.java
new file mode 100644
index 00000000..6ffd216b
--- /dev/null
+++ b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/exceptions/InvalidRequestException.java
@@ -0,0 +1,34 @@
+/*-
+ * ========================LICENSE_START=================================
+ * ONAP : ccsdk oran
+ * ======================================================================
+ * Copyright (C) 2019-2020 Nordix Foundation. 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.
+ * ========================LICENSE_END===================================
+ */
+
+package org.onap.ccsdk.oran.a1policymanagementservice.exceptions;
+
+public class InvalidRequestException extends ServiceException {
+
+ private static final long serialVersionUID = 1L;
+
+ public InvalidRequestException(String message) {
+ super(message);
+ }
+
+ public InvalidRequestException(String message, Exception originalException) {
+ super(message, originalException);
+ }
+}
diff --git a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/repository/Policies.java b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/repository/Policies.java
index 4df2504b..882d3368 100644
--- a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/repository/Policies.java
+++ b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/repository/Policies.java
@@ -27,7 +27,7 @@ import java.util.Map;
import java.util.Set;
import java.util.Vector;
-import org.onap.ccsdk.oran.a1policymanagementservice.exceptions.ServiceException;
+import org.onap.ccsdk.oran.a1policymanagementservice.exceptions.EntityNotFoundException;
public class Policies {
private Map<String, Policy> policiesId = new HashMap<>();
@@ -72,10 +72,10 @@ public class Policies {
return policiesId.get(id);
}
- public synchronized Policy getPolicy(String id) throws ServiceException {
+ public synchronized Policy getPolicy(String id) throws EntityNotFoundException {
Policy p = policiesId.get(id);
if (p == null) {
- throw new ServiceException("Could not find policy: " + id);
+ throw new EntityNotFoundException("Could not find policy: " + id);
}
return p;
}
diff --git a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/repository/PolicyTypes.java b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/repository/PolicyTypes.java
index db25d9cc..7bf03782 100644
--- a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/repository/PolicyTypes.java
+++ b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/repository/PolicyTypes.java
@@ -25,15 +25,15 @@ import java.util.HashMap;
import java.util.Map;
import java.util.Vector;
-import org.onap.ccsdk.oran.a1policymanagementservice.exceptions.ServiceException;
+import org.onap.ccsdk.oran.a1policymanagementservice.exceptions.EntityNotFoundException;
public class PolicyTypes {
private Map<String, PolicyType> types = new HashMap<>();
- public synchronized PolicyType getType(String name) throws ServiceException {
+ public synchronized PolicyType getType(String name) throws EntityNotFoundException {
PolicyType t = types.get(name);
if (t == null) {
- throw new ServiceException("Could not find type: " + name);
+ throw new EntityNotFoundException("Could not find type: " + name);
}
return t;
}
diff --git a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/repository/Rics.java b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/repository/Rics.java
index b6ec7491..e4918e76 100644
--- a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/repository/Rics.java
+++ b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/repository/Rics.java
@@ -23,10 +23,9 @@ package org.onap.ccsdk.oran.a1policymanagementservice.repository;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
-import java.util.Optional;
import java.util.Vector;
-import org.onap.ccsdk.oran.a1policymanagementservice.exceptions.ServiceException;
+import org.onap.ccsdk.oran.a1policymanagementservice.exceptions.EntityNotFoundException;
import org.springframework.lang.Nullable;
/**
@@ -43,10 +42,10 @@ public class Rics {
return new Vector<>(registeredRics.values());
}
- public synchronized Ric getRic(String ricId) throws ServiceException {
+ public synchronized Ric getRic(String ricId) throws EntityNotFoundException {
Ric ric = registeredRics.get(ricId);
if (ric == null) {
- throw new ServiceException("Could not find ric: " + ricId);
+ throw new EntityNotFoundException("Could not find ric: " + ricId);
}
return ric;
}
@@ -67,12 +66,12 @@ public class Rics {
this.registeredRics.clear();
}
- public synchronized Optional<Ric> lookupRicForManagedElement(String managedElementId) {
+ public synchronized Ric lookupRicForManagedElement(String managedElementId) throws EntityNotFoundException {
for (Ric ric : this.registeredRics.values()) {
if (ric.getManagedElementIds().contains(managedElementId)) {
- return Optional.of(ric);
+ return ric;
}
}
- return Optional.empty();
+ throw new EntityNotFoundException("No Near-RT RIC managing the ME is found");
}
}