diff options
author | k.kedron <k.kedron@partner.samsung.com> | 2021-03-17 09:09:29 +0100 |
---|---|---|
committer | k.kedron <k.kedron@partner.samsung.com> | 2021-03-23 13:55:07 +0100 |
commit | 431dd5721e7c37170c254836f4566e48a0cc1837 (patch) | |
tree | 35b6d50fdf81d2bcab54762cefc80032bb872d43 /src/main/java/org/onap/a1pesimulator/controller/RanA1Controller.java | |
parent | 24459b83d85ac601c59c819384259d34289f87ea (diff) |
Initial code check-in for A1 Policy Enforcement Simulator
Issue-ID: INT-1887
Signed-off-by: Krystian Kedron <k.kedron@partner.samsung.com>
Change-Id: I643dadac5386bf21eaa108435c83b69706b0bc1c
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); + } + } +} |