Loading src/main/java/org/etsi/osl/tmf/so641/api/ServiceOrderApiController.java +12 −4 Original line number Diff line number Diff line Loading @@ -32,6 +32,7 @@ import org.etsi.osl.tmf.so641.model.ServiceOrderCreate; import org.etsi.osl.tmf.so641.model.ServiceOrderUpdate; import org.etsi.osl.tmf.so641.reposervices.ServiceOrderRepoService; import org.etsi.osl.tmf.util.AddUserAsOwnerToRelatedParties; import org.etsi.osl.tmf.util.ServiceOrderValidator; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; Loading @@ -46,10 +47,8 @@ import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.oauth2.jwt.Jwt; import org.springframework.security.oauth2.server.resource.authentication.JwtAuthenticationToken; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.WebDataBinder; import org.springframework.web.bind.annotation.*; import org.etsi.osl.model.nfv.UserRoleType; import io.swagger.v3.oas.annotations.Parameter; Loading Loading @@ -79,6 +78,15 @@ public class ServiceOrderApiController implements ServiceOrderApi { @Autowired ServiceOrderApiRouteBuilder serviceOrderApiRouteBuilder; @Autowired private ServiceOrderValidator serviceOrderValidator; // Custom validation resulting from ServiceSpecCharacteristicValue range interval and type validation (https://labs.etsi.org/rep/groups/osl/code/-/epics/30) @InitBinder protected void initBinder(WebDataBinder binder) { binder.addValidators(serviceOrderValidator); } @org.springframework.beans.factory.annotation.Autowired public ServiceOrderApiController(ObjectMapper objectMapper, HttpServletRequest request) { this.objectMapper = objectMapper; Loading src/main/java/org/etsi/osl/tmf/util/ServiceOrderValidator.java 0 → 100644 +58 −0 Original line number Diff line number Diff line package org.etsi.osl.tmf.util; import org.etsi.osl.tmf.common.model.service.Characteristic; import org.etsi.osl.tmf.scm633.model.ServiceSpecCharacteristic; import org.etsi.osl.tmf.scm633.model.ServiceSpecification; import org.etsi.osl.tmf.scm633.reposervices.ServiceSpecificationRepoService; import org.etsi.osl.tmf.so641.model.ServiceOrderCreate; import org.etsi.osl.tmf.so641.model.ServiceOrderItem; import org.etsi.osl.tmf.so641.model.ServiceOrderUpdate; import org.etsi.osl.tmf.so641.model.ServiceRestriction; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.validation.Errors; import org.springframework.validation.Validator; @Component public class ServiceOrderValidator implements Validator { @Autowired private ServiceSpecificationRepoService serviceSpecificationRepoService; @Override public boolean supports(Class<?> clazz) { return ServiceOrderCreate.class.isAssignableFrom(clazz) || ServiceOrderUpdate.class.isAssignableFrom(clazz); } @Override public void validate(Object target, Errors errors) { if (!(target instanceof ServiceOrderCreate)) { return; } ServiceOrderCreate create = (ServiceOrderCreate) target; for (ServiceOrderItem orderItem: create.getOrderItem()) { if (orderItem.getService() == null) { return; } ServiceRestriction service = orderItem.getService(); if (service.getServiceCharacteristic() == null || service.getServiceSpecification() == null) { return; } String serviceSpecificationId = service.getServiceSpecification().getId(); ServiceSpecification serviceSpecification = serviceSpecificationRepoService.findByUuid(serviceSpecificationId); CharacteristicParser characteristicParser = new CharacteristicParser(); for (Characteristic characteristic: service.getServiceCharacteristic()) { ServiceSpecCharacteristic serviceSpecCharacteristic = serviceSpecification.findSpecCharacteristicByName(characteristic.getName()); serviceSpecCharacteristic.setServiceSpecCharacteristicValue(characteristicParser.toSetOfCharacteristicValues(characteristic)); if (serviceSpecCharacteristic.getServiceSpecCharacteristicValue().stream() .anyMatch(value -> { ServiceSpecCharacteristicValueValidator serviceSpecCharacteristicValueValidator = new ServiceSpecCharacteristicValueValidator(value); return !serviceSpecCharacteristicValueValidator.validateType() || !serviceSpecCharacteristicValueValidator.isWithinRangeInterval(); })) { errors.reject("invalid.request"); return; } } } } } src/test/java/org/etsi/osl/services/api/so641/ServiceOrderApiControllerTest.java +1 −2 Original line number Diff line number Diff line Loading @@ -430,12 +430,11 @@ public class ServiceOrderApiControllerTest extends BaseIT { private ServiceOrderCreate createServiceOrderWithCharacteristicValue(String characteristicValue) throws Exception { File sspec = new File("src/test/resources/testServiceSpecValidRangeInterval.json"); File sspec = new File("src/test/resources/reposervices/scm633/testServiceSpecValidRangeInterval.json"); InputStream in = new FileInputStream(sspec); String sspectext = IOUtils.toString(in, "UTF-8"); ServiceSpecificationCreate sspeccr = JsonUtils.toJsonObj(sspectext, ServiceSpecificationCreate.class); sspeccr.setName("Spec1"); ServiceSpecification responsesSpec = createServiceSpec(sspeccr); ServiceOrderCreate serviceOrder = new ServiceOrderCreate(); Loading Loading
src/main/java/org/etsi/osl/tmf/so641/api/ServiceOrderApiController.java +12 −4 Original line number Diff line number Diff line Loading @@ -32,6 +32,7 @@ import org.etsi.osl.tmf.so641.model.ServiceOrderCreate; import org.etsi.osl.tmf.so641.model.ServiceOrderUpdate; import org.etsi.osl.tmf.so641.reposervices.ServiceOrderRepoService; import org.etsi.osl.tmf.util.AddUserAsOwnerToRelatedParties; import org.etsi.osl.tmf.util.ServiceOrderValidator; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; Loading @@ -46,10 +47,8 @@ import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.oauth2.jwt.Jwt; import org.springframework.security.oauth2.server.resource.authentication.JwtAuthenticationToken; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.WebDataBinder; import org.springframework.web.bind.annotation.*; import org.etsi.osl.model.nfv.UserRoleType; import io.swagger.v3.oas.annotations.Parameter; Loading Loading @@ -79,6 +78,15 @@ public class ServiceOrderApiController implements ServiceOrderApi { @Autowired ServiceOrderApiRouteBuilder serviceOrderApiRouteBuilder; @Autowired private ServiceOrderValidator serviceOrderValidator; // Custom validation resulting from ServiceSpecCharacteristicValue range interval and type validation (https://labs.etsi.org/rep/groups/osl/code/-/epics/30) @InitBinder protected void initBinder(WebDataBinder binder) { binder.addValidators(serviceOrderValidator); } @org.springframework.beans.factory.annotation.Autowired public ServiceOrderApiController(ObjectMapper objectMapper, HttpServletRequest request) { this.objectMapper = objectMapper; Loading
src/main/java/org/etsi/osl/tmf/util/ServiceOrderValidator.java 0 → 100644 +58 −0 Original line number Diff line number Diff line package org.etsi.osl.tmf.util; import org.etsi.osl.tmf.common.model.service.Characteristic; import org.etsi.osl.tmf.scm633.model.ServiceSpecCharacteristic; import org.etsi.osl.tmf.scm633.model.ServiceSpecification; import org.etsi.osl.tmf.scm633.reposervices.ServiceSpecificationRepoService; import org.etsi.osl.tmf.so641.model.ServiceOrderCreate; import org.etsi.osl.tmf.so641.model.ServiceOrderItem; import org.etsi.osl.tmf.so641.model.ServiceOrderUpdate; import org.etsi.osl.tmf.so641.model.ServiceRestriction; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.validation.Errors; import org.springframework.validation.Validator; @Component public class ServiceOrderValidator implements Validator { @Autowired private ServiceSpecificationRepoService serviceSpecificationRepoService; @Override public boolean supports(Class<?> clazz) { return ServiceOrderCreate.class.isAssignableFrom(clazz) || ServiceOrderUpdate.class.isAssignableFrom(clazz); } @Override public void validate(Object target, Errors errors) { if (!(target instanceof ServiceOrderCreate)) { return; } ServiceOrderCreate create = (ServiceOrderCreate) target; for (ServiceOrderItem orderItem: create.getOrderItem()) { if (orderItem.getService() == null) { return; } ServiceRestriction service = orderItem.getService(); if (service.getServiceCharacteristic() == null || service.getServiceSpecification() == null) { return; } String serviceSpecificationId = service.getServiceSpecification().getId(); ServiceSpecification serviceSpecification = serviceSpecificationRepoService.findByUuid(serviceSpecificationId); CharacteristicParser characteristicParser = new CharacteristicParser(); for (Characteristic characteristic: service.getServiceCharacteristic()) { ServiceSpecCharacteristic serviceSpecCharacteristic = serviceSpecification.findSpecCharacteristicByName(characteristic.getName()); serviceSpecCharacteristic.setServiceSpecCharacteristicValue(characteristicParser.toSetOfCharacteristicValues(characteristic)); if (serviceSpecCharacteristic.getServiceSpecCharacteristicValue().stream() .anyMatch(value -> { ServiceSpecCharacteristicValueValidator serviceSpecCharacteristicValueValidator = new ServiceSpecCharacteristicValueValidator(value); return !serviceSpecCharacteristicValueValidator.validateType() || !serviceSpecCharacteristicValueValidator.isWithinRangeInterval(); })) { errors.reject("invalid.request"); return; } } } } }
src/test/java/org/etsi/osl/services/api/so641/ServiceOrderApiControllerTest.java +1 −2 Original line number Diff line number Diff line Loading @@ -430,12 +430,11 @@ public class ServiceOrderApiControllerTest extends BaseIT { private ServiceOrderCreate createServiceOrderWithCharacteristicValue(String characteristicValue) throws Exception { File sspec = new File("src/test/resources/testServiceSpecValidRangeInterval.json"); File sspec = new File("src/test/resources/reposervices/scm633/testServiceSpecValidRangeInterval.json"); InputStream in = new FileInputStream(sspec); String sspectext = IOUtils.toString(in, "UTF-8"); ServiceSpecificationCreate sspeccr = JsonUtils.toJsonObj(sspectext, ServiceSpecificationCreate.class); sspeccr.setName("Spec1"); ServiceSpecification responsesSpec = createServiceSpec(sspeccr); ServiceOrderCreate serviceOrder = new ServiceOrderCreate(); Loading