diff options
author | Lasse Kaihlavirta <l.kaihlavirt@partner.samsung.com> | 2021-03-24 08:56:10 +0000 |
---|---|---|
committer | Gerrit Code Review <gerrit@onap.org> | 2021-03-24 08:56:10 +0000 |
commit | 29e0ba3179409458b96089dd37452d4a11cc32d3 (patch) | |
tree | 615dfa2bb37b0cc6a1c5605b15b5253a2404d224 /src/main/java/org/onap/a1pesimulator/controller/RanA1Controller.java | |
parent | 14433f2704a39d737e79543fe66db53d6d288697 (diff) | |
parent | 5ea372baed3b743dbf3ddeffb8fe1a0acdf376d6 (diff) |
Merge changes Idbdec7b3,I643dadac,I2f54e1d5,I2ead5203
* changes:
Provide initial a1-pe-sim docs
Initial code check-in for A1 Policy Enforcement Simulator
Add basic .gitignore
Add linters setup
Diffstat (limited to 'src/main/java/org/onap/a1pesimulator/controller/RanA1Controller.java')
-rw-r--r-- | src/main/java/org/onap/a1pesimulator/controller/RanA1Controller.java | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/src/main/java/org/onap/a1pesimulator/controller/RanA1Controller.java b/src/main/java/org/onap/a1pesimulator/controller/RanA1Controller.java new file mode 100644 index 0000000..4262d27 --- /dev/null +++ b/src/main/java/org/onap/a1pesimulator/controller/RanA1Controller.java @@ -0,0 +1,123 @@ +/* + * Copyright (C) 2021 Samsung Electronics + * 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 + */ + +package org.onap.a1pesimulator.controller; + +import java.io.IOException; +import java.net.URISyntaxException; +import java.util.Collection; +import org.onap.a1pesimulator.data.PolicyNotification; +import org.onap.a1pesimulator.data.PolicyNotificationActionEnum; +import org.onap.a1pesimulator.service.a1.A1Service; +import org.onap.a1pesimulator.service.a1.OnPolicyAction; +import org.onap.a1pesimulator.service.a1.PolicyInstancesHolder; +import org.springframework.http.ResponseEntity; +import org.springframework.messaging.simp.SimpMessagingTemplate; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * A1 interface facade + * Only operations defined by OSC_2.1.0 should be provided here + */ + +@RestController +@RequestMapping({"${restapi.version}/a1-p"}) +public class RanA1Controller { + + private static final String TOPIC_POLICY = "/topic/policy"; + private final SimpMessagingTemplate messagingTemplate; + private final A1Service a1Service; + private final Collection<OnPolicyAction> onPolicyActions; + private final PolicyInstancesHolder policyHolder; + + public RanA1Controller(A1Service a1Service, SimpMessagingTemplate messagingTemplate, + Collection<OnPolicyAction> onPolicyActions, PolicyInstancesHolder policyHolder) { + this.a1Service = a1Service; + this.messagingTemplate = messagingTemplate; + this.onPolicyActions = onPolicyActions; + this.policyHolder = policyHolder; + } + + @GetMapping(value = "/healthcheck") + public ResponseEntity<String> healthcheck() throws URISyntaxException { + return a1Service.healthCheck(); + } + + @PutMapping(value = "/policytypes/{policyTypeId}") + public ResponseEntity<String> putPolicySchema(@PathVariable Integer policyTypeId, @RequestBody String body) + throws URISyntaxException { + return a1Service.putPolicySchema(policyTypeId, body); + } + + @PutMapping(value = "/policytypes/{policyTypeId}/policies/{policyInstanceId}") + public ResponseEntity<String> putPolicyInstance(@PathVariable Integer policyTypeId, + @PathVariable String policyInstanceId, @RequestBody String body) throws URISyntaxException { + ResponseEntity<String> response = a1Service.putPolicy(policyTypeId, policyInstanceId, body); + if (!response.getStatusCode().is2xxSuccessful()) { + return response; + } + policyHolder.addPolicy(policyInstanceId, body); + onPolicyActions.forEach(action -> handleOnPolicyAction(policyTypeId, policyInstanceId, body, action)); + messagingTemplate.convertAndSend(TOPIC_POLICY, + new PolicyNotification(policyInstanceId, policyTypeId, PolicyNotificationActionEnum.CREATED, body)); + return response; + } + + @DeleteMapping(value = "/policytypes/{policyTypeId}/policies/{policyInstanceId}") + public ResponseEntity<String> deletePolicyInstance(@PathVariable Integer policyTypeId, + @PathVariable String policyInstanceId) throws URISyntaxException { + ResponseEntity<String> response = a1Service.deletePolicy(policyTypeId, policyInstanceId); + if (!response.getStatusCode().is2xxSuccessful()) { + return response; + } + + policyHolder.removePolicy(policyInstanceId); + messagingTemplate.convertAndSend(TOPIC_POLICY, + new PolicyNotification(policyInstanceId, policyTypeId, PolicyNotificationActionEnum.DELETED)); + return response; + } + + @GetMapping(value = "/policytypes") + public ResponseEntity<String> getPolicyTypeIds() throws URISyntaxException { + return a1Service.getPolicyTypeIds(); + } + + @GetMapping(value = "/policytypes/{policyTypeId}") + public ResponseEntity<String> getPolicyType(@PathVariable Integer policyTypeId) throws URISyntaxException { + return a1Service.getPolicyType(policyTypeId); + } + + @GetMapping(value = "/policytypes/{policyTypeId}/policies") + public ResponseEntity<String> getPolicyIdsOfType(@PathVariable Integer policyTypeId) + throws URISyntaxException, IOException { + return a1Service.getPolicyIdsOfType(policyTypeId); + } + + @GetMapping(value = "/policytypes/{policyTypeId}/policies/{policyInstanceId}") + public ResponseEntity<String> getPolicy(@PathVariable Integer policyTypeId, @PathVariable String policyInstanceId) + throws URISyntaxException { + return a1Service.getPolicy(policyTypeId, policyInstanceId); + } + + private void handleOnPolicyAction(Integer policyTypeId, String policyId, String body, OnPolicyAction action) { + if (action.isForMe(policyTypeId, policyId, body)) { + action.onPolicy(policyTypeId, policyId, body); + } + } +} |