import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
+
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
-import java.util.Vector;
import org.oransc.policyagent.clients.A1ClientFactory;
import org.oransc.policyagent.configuration.ApplicationConfig;
@ApiOperation(value = "Returns policy type schema definitions")
@ApiResponses(
value = {
- @ApiResponse(code = 200, message = "Policy schemas", response = String.class, responseContainer = "List")})
+ @ApiResponse(code = 200, message = "Policy schemas", response = Object.class, responseContainer = "List")})
public ResponseEntity<String> getPolicySchemas(@RequestParam(name = "ric", required = false) String ricName) {
synchronized (this.policyTypes) {
if (ricName == null) {
.ownerServiceName(service) //
.lastModified(getTimeStampUtc()) //
.build();
- return a1ClientFactory.createA1Client(ric) //
+
+ return validateModifiedPolicy(policy) //
+ .flatMap(x -> a1ClientFactory.createA1Client(ric)) //
.flatMap(client -> client.putPolicy(policy)) //
.doOnNext(notUsed -> policies.put(policy)) //
.flatMap(notUsed -> Mono.just(new ResponseEntity<>(HttpStatus.OK)));
return Mono.just(new ResponseEntity<>(HttpStatus.NOT_FOUND));
}
+ private Mono<Object> validateModifiedPolicy(Policy policy) {
+ // Check that ric is not updated
+ Policy current = this.policies.get(policy.id());
+ if (current != null) {
+ if (!current.ric().name().equals(policy.ric().name())) {
+ return Mono.error(new Exception("Policy cannot change RIC or service"));
+ }
+ }
+ return Mono.just("OK");
+ }
+
@GetMapping("/policies")
@ApiOperation(value = "Query policies")
@ApiResponses(
for (Policy p : policies) {
PolicyInfo policyInfo = new PolicyInfo();
policyInfo.id = p.id();
- policyInfo.json = p.json();
+ policyInfo.json = fromJson(p.json());
policyInfo.ric = p.ric().name();
policyInfo.type = p.type().name();
policyInfo.service = p.ownerServiceName();
return gson.toJson(v);
}
+ private Object fromJson(String jsonStr) {
+ return gson.fromJson(jsonStr, Object.class);
+ }
+
private String toPolicyTypeSchemasJson(Collection<PolicyType> types) {
StringBuilder result = new StringBuilder();
result.append("[");