Loading src/main/java/org/etsi/osl/tmf/pcm620/api/ProductOfferingApi.java +20 −0 Original line number Diff line number Diff line Loading @@ -224,4 +224,24 @@ public interface ProductOfferingApi { return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED); } @Operation(summary = "Creates and Retrieves a ProductOffering by ID", operationId = "retrieveProductOffering", description = "This operation retrieves a ProductOffering entity. Attribute selection is enabled for all first level attributes." , tags = { "productOffering", }) @ApiResponses(value = { @ApiResponse(responseCode ="200", description = "Success" ), @ApiResponse(responseCode = "400", description = "Bad Request" ), @ApiResponse(responseCode = "401", description = "Unauthorized" ), @ApiResponse(responseCode = "403", description = "Forbidden" ), @ApiResponse(responseCode = "404", description = "Not Found" ), @ApiResponse(responseCode = "405", description = "Method Not allowed" ), @ApiResponse(responseCode = "409", description = "Conflict" ), @ApiResponse(responseCode = "500", description = "Internal Server Error" ) }) @RequestMapping(value = "/productOffering/fromServiceSpecId/{id}", produces = { "application/json;charset=utf-8" }, method = RequestMethod.POST) default ResponseEntity<ProductOffering> createRetrieveProductOfferingBasedOnServiceSpec( @Parameter(description = "Identifier of the ProductOffering", required = true) @PathVariable("id") String id) { return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED); } } src/main/java/org/etsi/osl/tmf/pcm620/api/ProductOfferingApiController.java +16 −0 Original line number Diff line number Diff line Loading @@ -167,5 +167,21 @@ public class ProductOfferingApiController implements ProductOfferingApi { } } @Override @PreAuthorize("hasAnyAuthority('ROLE_ADMIN')" ) public ResponseEntity<ProductOffering> createRetrieveProductOfferingBasedOnServiceSpec( String id) { try { return new ResponseEntity<ProductOffering>(productOfferingRepoService.createRetrieveProductOfferingBasedOnServiceSpec(id), HttpStatus.OK); } catch (Exception e) { log.error("Couldn't serialize response for content type application/json", e); return new ResponseEntity<ProductOffering>(HttpStatus.INTERNAL_SERVER_ERROR); } } } src/main/java/org/etsi/osl/tmf/pcm620/reposervices/ProductOfferingRepoService.java +89 −2 Original line number Diff line number Diff line Loading @@ -26,21 +26,34 @@ import java.time.OffsetDateTime; import java.time.ZoneOffset; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Optional; import org.etsi.osl.tmf.JsonUtils; import org.etsi.osl.tmf.am651.model.AgreementRef; import org.etsi.osl.tmf.common.model.Any; import org.etsi.osl.tmf.common.model.AttachmentRefOrValue; import org.etsi.osl.tmf.common.model.ELifecycle; import org.etsi.osl.tmf.common.model.TimePeriod; import org.etsi.osl.tmf.common.model.service.ServiceSpecificationRef; import org.etsi.osl.tmf.pcm620.model.BundledProductOffering; import org.etsi.osl.tmf.pcm620.model.ProductOffering; import org.etsi.osl.tmf.pcm620.model.ProductOfferingCreate; import org.etsi.osl.tmf.pcm620.model.ProductOfferingPriceRef; import org.etsi.osl.tmf.pcm620.model.ProductOfferingUpdate; import org.etsi.osl.tmf.pcm620.model.ProductSpecification; import org.etsi.osl.tmf.pcm620.model.ProductSpecificationCharacteristic; import org.etsi.osl.tmf.pcm620.model.ProductSpecificationCharacteristicValue; import org.etsi.osl.tmf.pcm620.model.ProductSpecificationCharacteristicValueUse; import org.etsi.osl.tmf.pcm620.model.ProductSpecificationCreate; import org.etsi.osl.tmf.pcm620.model.ProductSpecificationRef; import org.etsi.osl.tmf.pcm620.repo.ProductOfferingRepository; import org.etsi.osl.tmf.pcm620.repo.ProductSpecificationRepository; import org.etsi.osl.tmf.scm633.model.ServiceSpecCharacteristicValue; import org.etsi.osl.tmf.scm633.model.ServiceSpecification; import org.etsi.osl.tmf.scm633.reposervices.ServiceSpecificationRepoService; import org.hibernate.Hibernate; import org.hibernate.Session; import org.hibernate.SessionFactory; Loading @@ -59,7 +72,11 @@ public class ProductOfferingRepoService { @Autowired ProductOfferingRepository prodsOfferingRepo; @Autowired ProductSpecificationRepoService prodSpecRepoService; @Autowired ServiceSpecificationRepoService serviceSpecificationRepoService; private SessionFactory sessionFactory; Loading Loading @@ -320,6 +337,7 @@ public class ProductOfferingRepoService { if ( prodOfferingUpd.getProductSpecification() != null ) { prodOffering.setProductSpecification( prodOfferingUpd.getProductSpecification() ); prodOffering = copyCharacteristicsFromProdSpec( prodOffering, prodOfferingUpd.getProductSpecification() ); } Loading Loading @@ -543,4 +561,73 @@ public class ProductOfferingRepoService { return prodOffering; } private ProductOffering copyCharacteristicsFromProdSpec(ProductOffering prodOffering, @Valid ProductSpecificationRef productSpecRef) { ProductSpecification prodSpec = prodSpecRepoService.findByUuid( productSpecRef.getId() ); if (prodSpec!= null ) { for (ProductSpecificationCharacteristic prodSpecChar : prodSpec.getProductSpecCharacteristic()) { if ( prodOffering.findCharacteristicByName( prodSpecChar.getName() ) == null ) { ProductSpecificationCharacteristicValueUse pcitem = new ProductSpecificationCharacteristicValueUse(); pcitem.name( prodSpecChar.getName() ); pcitem.setDescription(prodSpecChar.getDescription()); pcitem .maxCardinality(prodSpecChar.getMaxCardinality()) .minCardinality(prodSpecChar.getMinCardinality()) .valueType(prodSpecChar.getValueType()); for (ProductSpecificationCharacteristicValue r : prodSpecChar.getProductSpecCharacteristicValue()) { ProductSpecificationCharacteristicValue pcval = new ProductSpecificationCharacteristicValue(); pcval.isDefault(r.isIsDefault()) .rangeInterval(r.getRangeInterval()) .regex(r.getRegex()) .unitOfMeasure(r.getUnitOfMeasure()) .valueFrom(r.getValueFrom()+"") .valueTo(r.getValueTo()+"") .valueType(r.getValueType()) .value( new Any( r.getValue() ) ); pcitem.addProductSpecCharacteristicValueItem( pcval ); } prodOffering.addProdSpecCharValueUseItem(pcitem ); } } } return prodOffering; } public ProductOffering createRetrieveProductOfferingBasedOnServiceSpec(String id) { ServiceSpecification serviceSpec = serviceSpecificationRepoService.findByUuid(id); ProductSpecificationCreate psc = new ProductSpecificationCreate(); psc.setName(serviceSpec.getName()); psc.setDescription(serviceSpec.getDescription()); ProductSpecification responseProdSpec = prodSpecRepoService.addProductSpecification(psc); responseProdSpec = prodSpecRepoService.addServiceSpecToProductSpec( responseProdSpec, serviceSpec ); ProductOffering pOffer = this.prodOfferingFromPrdSpec( responseProdSpec ); return pOffer; } private ProductOffering prodOfferingFromPrdSpec(ProductSpecification responseProdSpec) { ProductSpecificationRef prodSpecRef = new ProductSpecificationRef(); prodSpecRef.setId(responseProdSpec.getId()); prodSpecRef.setName(responseProdSpec.getName()); ProductOfferingCreate pefCre = new ProductOfferingCreate(); pefCre.setName( responseProdSpec.getName()); pefCre.productSpecification(prodSpecRef); ProductOffering pOffer = this.addProductOffering(pefCre); return pOffer; } } src/main/java/org/etsi/osl/tmf/pcm620/reposervices/ProductSpecificationRepoService.java +72 −3 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Optional; import org.etsi.osl.tmf.common.model.Any; import org.etsi.osl.tmf.common.model.AttachmentRefOrValue; import org.etsi.osl.tmf.common.model.ELifecycle; import org.etsi.osl.tmf.common.model.TimePeriod; Loading @@ -37,12 +38,17 @@ import org.etsi.osl.tmf.common.model.service.ServiceSpecificationRef; import org.etsi.osl.tmf.pcm620.model.BundledProductSpecification; import org.etsi.osl.tmf.pcm620.model.ProductSpecification; import org.etsi.osl.tmf.pcm620.model.ProductSpecificationCharacteristic; import org.etsi.osl.tmf.pcm620.model.ProductSpecificationCharacteristicValue; import org.etsi.osl.tmf.pcm620.model.ProductSpecificationCreate; import org.etsi.osl.tmf.pcm620.model.ProductSpecificationRelationship; import org.etsi.osl.tmf.pcm620.model.ProductSpecificationUpdate; import org.etsi.osl.tmf.pcm620.repo.ProductSpecificationRepository; import org.etsi.osl.tmf.prm669.model.RelatedParty; import org.etsi.osl.tmf.rcm634.model.ResourceSpecificationRef; import org.etsi.osl.tmf.scm633.model.ServiceSpecCharacteristic; import org.etsi.osl.tmf.scm633.model.ServiceSpecCharacteristicValue; import org.etsi.osl.tmf.scm633.model.ServiceSpecification; import org.etsi.osl.tmf.scm633.reposervices.ServiceSpecificationRepoService; import org.hibernate.Hibernate; import org.hibernate.Session; import org.hibernate.SessionFactory; Loading @@ -62,6 +68,8 @@ public class ProductSpecificationRepoService { ProductSpecificationRepository prodsOfferingRepo; @Autowired ServiceSpecificationRepoService serviceSpecificationRepoService; private SessionFactory sessionFactory; Loading Loading @@ -548,7 +556,7 @@ public class ProductSpecificationRepoService { } /** * Update ResourceSpecificationRef list * Update ServiceSpecificationRef list */ if (prodSpecUpd.getServiceSpecification() != null) { Loading @@ -569,6 +577,7 @@ public class ProductSpecificationRepoService { if (!idexists) { prodSpec.getServiceSpecification().add(ar); prodSpec = copyConfigurableCharacteristics( prodSpec, ar ); idAddedUpdated.put(ar.getUuid(), true); } } Loading Loading @@ -598,4 +607,64 @@ public class ProductSpecificationRepoService { return prodSpec; } private ProductSpecification copyConfigurableCharacteristics(ProductSpecification prodSpec, ServiceSpecificationRef ar) { ServiceSpecification sourceSpec = serviceSpecificationRepoService.findByUuid(ar.getId()); if ( sourceSpec != null ) { for (ServiceSpecCharacteristic ssc : sourceSpec.getServiceSpecCharacteristic()) { if (ssc.isConfigurable()!= null && ssc.isConfigurable()) { if ( prodSpec.findProdCharacteristicByName( ssc.getName() ) == null ) { ProductSpecificationCharacteristic cnew = new ProductSpecificationCharacteristic(); cnew.setName( cnew.getName() ); cnew.setDescription( cnew.getDescription()); cnew.isUnique(cnew.isIsUnique()) .extensible(cnew.isExtensible()) .maxCardinality(cnew.getMaxCardinality()) .minCardinality(cnew.getMinCardinality()) .valueType(cnew.getValueType()); for (ServiceSpecCharacteristicValue r : ssc.getServiceSpecCharacteristicValue()) { ProductSpecificationCharacteristicValue pcval = new ProductSpecificationCharacteristicValue(); pcval.isDefault(r.isIsDefault()) .rangeInterval(r.getRangeInterval()) .regex(r.getRegex()) .unitOfMeasure(r.getUnitOfMeasure()) .valueFrom(r.getValueFrom()+"") .valueTo(r.getValueTo()+"") .valueType(r.getValueType()) .value( new Any( r.getValue() ) ); cnew.addProductSpecCharacteristicValueItem( pcval ); } prodSpec.getProductSpecCharacteristic().add( cnew ); } } } } return prodSpec; } public ProductSpecification addServiceSpecToProductSpec(ProductSpecification responseProdSpec, ServiceSpecification serviceSpec) { ServiceSpecificationRef serviceSpecRef = new ServiceSpecificationRef(); serviceSpecRef.setId( serviceSpec.getId() ); serviceSpecRef.setName( serviceSpec.getName()); serviceSpecRef.setVersion(serviceSpec.getVersion()); serviceSpecRef.setReferredType(serviceSpec.getType()); ProductSpecificationUpdate pSpecUpd = new ProductSpecificationUpdate(); pSpecUpd.addServiceSpecificationItem(serviceSpecRef); if (responseProdSpec.getServiceSpecification()!=null) { pSpecUpd.getServiceSpecification().addAll( responseProdSpec.getServiceSpecification() ); } responseProdSpec = updateProductSpecificationDataFromAPIcall(responseProdSpec, pSpecUpd); return responseProdSpec; } } src/test/java/org/etsi/osl/services/api/po622/ProductOrderRepoServiceTest.java +53 −0 Original line number Diff line number Diff line Loading @@ -311,6 +311,36 @@ public class ProductOrderRepoServiceTest { } @WithMockUser(username = "osadmin", roles = {"ADMIN", "USER"}) @Test public void testCreateProductOfferingFromServiceSpec() throws Exception { ServiceSpecification serviceSpec = createServiceSpecification(); String response = mvc .perform(MockMvcRequestBuilders.post("/productCatalogManagement/v4/productOffering/fromServiceSpecId/" + serviceSpec.getId()) .with(SecurityMockMvcRequestPostProcessors.csrf())) .andExpect(status().isOk()) .andExpect(content().contentTypeCompatibleWith(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()).andReturn().getResponse().getContentAsString(); ProductOffering respOff = JsonUtils.toJsonObj(response, ProductOffering.class); assertThat(respOff).isNotNull(); assertThat( respOff.getName() ).isEqualTo( "Test Spec2" ); assertThat( respOff.getProductSpecification() ).isNotNull(); assertThat( respOff.getProductSpecification().getName() ).isEqualTo( "Test Spec2" ); ProductSpecification prodSpec = productSpecificationRepoService.findByUuid( respOff.getProductSpecification().getId() ); assertThat( prodSpec.getName() ).isEqualTo( "Test Spec2" ); assertThat( prodSpec.getServiceSpecification().size() ).isEqualTo( 1 ); assertThat( prodSpec.getProductSpecCharacteristic().size() ).isEqualTo( 2 ); assertThat( respOff.getProdSpecCharValueUse().size() ).isEqualTo( 2 ); } private String createProductOrder() throws Exception { int currSize = productOrderRepoService.findAll().size(); Loading Loading @@ -397,6 +427,29 @@ public class ProductOrderRepoServiceTest { .andExpect(status().isOk()).andReturn().getResponse().getContentAsString(); ProductSpecification responsesSpec = JsonUtils.toJsonObj(response, ProductSpecification.class); return responsesSpec; } private ServiceSpecification createServiceSpecification() throws Exception{ File sspec = new File( "src/test/resources/testServiceSpec2.json" ); InputStream in = new FileInputStream( sspec ); String sspectext = IOUtils.toString(in, "UTF-8"); ServiceSpecificationCreate serviceSpecificationCreate = JsonUtils.toJsonObj( sspectext, ServiceSpecificationCreate.class); String response = mvc.perform(MockMvcRequestBuilders.post("/serviceCatalogManagement/v4/serviceSpecification") .with( SecurityMockMvcRequestPostProcessors.csrf()) .contentType(MediaType.APPLICATION_JSON) .content( JsonUtils.toJson( serviceSpecificationCreate ) )) .andExpect(content().contentTypeCompatibleWith(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) .andReturn().getResponse().getContentAsString(); ServiceSpecification responsesSpec = JsonUtils.toJsonObj(response, ServiceSpecification.class); assertThat( responsesSpec.getName() ).isEqualTo( "Test Spec2" ); return responsesSpec; } } Loading
src/main/java/org/etsi/osl/tmf/pcm620/api/ProductOfferingApi.java +20 −0 Original line number Diff line number Diff line Loading @@ -224,4 +224,24 @@ public interface ProductOfferingApi { return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED); } @Operation(summary = "Creates and Retrieves a ProductOffering by ID", operationId = "retrieveProductOffering", description = "This operation retrieves a ProductOffering entity. Attribute selection is enabled for all first level attributes." , tags = { "productOffering", }) @ApiResponses(value = { @ApiResponse(responseCode ="200", description = "Success" ), @ApiResponse(responseCode = "400", description = "Bad Request" ), @ApiResponse(responseCode = "401", description = "Unauthorized" ), @ApiResponse(responseCode = "403", description = "Forbidden" ), @ApiResponse(responseCode = "404", description = "Not Found" ), @ApiResponse(responseCode = "405", description = "Method Not allowed" ), @ApiResponse(responseCode = "409", description = "Conflict" ), @ApiResponse(responseCode = "500", description = "Internal Server Error" ) }) @RequestMapping(value = "/productOffering/fromServiceSpecId/{id}", produces = { "application/json;charset=utf-8" }, method = RequestMethod.POST) default ResponseEntity<ProductOffering> createRetrieveProductOfferingBasedOnServiceSpec( @Parameter(description = "Identifier of the ProductOffering", required = true) @PathVariable("id") String id) { return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED); } }
src/main/java/org/etsi/osl/tmf/pcm620/api/ProductOfferingApiController.java +16 −0 Original line number Diff line number Diff line Loading @@ -167,5 +167,21 @@ public class ProductOfferingApiController implements ProductOfferingApi { } } @Override @PreAuthorize("hasAnyAuthority('ROLE_ADMIN')" ) public ResponseEntity<ProductOffering> createRetrieveProductOfferingBasedOnServiceSpec( String id) { try { return new ResponseEntity<ProductOffering>(productOfferingRepoService.createRetrieveProductOfferingBasedOnServiceSpec(id), HttpStatus.OK); } catch (Exception e) { log.error("Couldn't serialize response for content type application/json", e); return new ResponseEntity<ProductOffering>(HttpStatus.INTERNAL_SERVER_ERROR); } } }
src/main/java/org/etsi/osl/tmf/pcm620/reposervices/ProductOfferingRepoService.java +89 −2 Original line number Diff line number Diff line Loading @@ -26,21 +26,34 @@ import java.time.OffsetDateTime; import java.time.ZoneOffset; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Optional; import org.etsi.osl.tmf.JsonUtils; import org.etsi.osl.tmf.am651.model.AgreementRef; import org.etsi.osl.tmf.common.model.Any; import org.etsi.osl.tmf.common.model.AttachmentRefOrValue; import org.etsi.osl.tmf.common.model.ELifecycle; import org.etsi.osl.tmf.common.model.TimePeriod; import org.etsi.osl.tmf.common.model.service.ServiceSpecificationRef; import org.etsi.osl.tmf.pcm620.model.BundledProductOffering; import org.etsi.osl.tmf.pcm620.model.ProductOffering; import org.etsi.osl.tmf.pcm620.model.ProductOfferingCreate; import org.etsi.osl.tmf.pcm620.model.ProductOfferingPriceRef; import org.etsi.osl.tmf.pcm620.model.ProductOfferingUpdate; import org.etsi.osl.tmf.pcm620.model.ProductSpecification; import org.etsi.osl.tmf.pcm620.model.ProductSpecificationCharacteristic; import org.etsi.osl.tmf.pcm620.model.ProductSpecificationCharacteristicValue; import org.etsi.osl.tmf.pcm620.model.ProductSpecificationCharacteristicValueUse; import org.etsi.osl.tmf.pcm620.model.ProductSpecificationCreate; import org.etsi.osl.tmf.pcm620.model.ProductSpecificationRef; import org.etsi.osl.tmf.pcm620.repo.ProductOfferingRepository; import org.etsi.osl.tmf.pcm620.repo.ProductSpecificationRepository; import org.etsi.osl.tmf.scm633.model.ServiceSpecCharacteristicValue; import org.etsi.osl.tmf.scm633.model.ServiceSpecification; import org.etsi.osl.tmf.scm633.reposervices.ServiceSpecificationRepoService; import org.hibernate.Hibernate; import org.hibernate.Session; import org.hibernate.SessionFactory; Loading @@ -59,7 +72,11 @@ public class ProductOfferingRepoService { @Autowired ProductOfferingRepository prodsOfferingRepo; @Autowired ProductSpecificationRepoService prodSpecRepoService; @Autowired ServiceSpecificationRepoService serviceSpecificationRepoService; private SessionFactory sessionFactory; Loading Loading @@ -320,6 +337,7 @@ public class ProductOfferingRepoService { if ( prodOfferingUpd.getProductSpecification() != null ) { prodOffering.setProductSpecification( prodOfferingUpd.getProductSpecification() ); prodOffering = copyCharacteristicsFromProdSpec( prodOffering, prodOfferingUpd.getProductSpecification() ); } Loading Loading @@ -543,4 +561,73 @@ public class ProductOfferingRepoService { return prodOffering; } private ProductOffering copyCharacteristicsFromProdSpec(ProductOffering prodOffering, @Valid ProductSpecificationRef productSpecRef) { ProductSpecification prodSpec = prodSpecRepoService.findByUuid( productSpecRef.getId() ); if (prodSpec!= null ) { for (ProductSpecificationCharacteristic prodSpecChar : prodSpec.getProductSpecCharacteristic()) { if ( prodOffering.findCharacteristicByName( prodSpecChar.getName() ) == null ) { ProductSpecificationCharacteristicValueUse pcitem = new ProductSpecificationCharacteristicValueUse(); pcitem.name( prodSpecChar.getName() ); pcitem.setDescription(prodSpecChar.getDescription()); pcitem .maxCardinality(prodSpecChar.getMaxCardinality()) .minCardinality(prodSpecChar.getMinCardinality()) .valueType(prodSpecChar.getValueType()); for (ProductSpecificationCharacteristicValue r : prodSpecChar.getProductSpecCharacteristicValue()) { ProductSpecificationCharacteristicValue pcval = new ProductSpecificationCharacteristicValue(); pcval.isDefault(r.isIsDefault()) .rangeInterval(r.getRangeInterval()) .regex(r.getRegex()) .unitOfMeasure(r.getUnitOfMeasure()) .valueFrom(r.getValueFrom()+"") .valueTo(r.getValueTo()+"") .valueType(r.getValueType()) .value( new Any( r.getValue() ) ); pcitem.addProductSpecCharacteristicValueItem( pcval ); } prodOffering.addProdSpecCharValueUseItem(pcitem ); } } } return prodOffering; } public ProductOffering createRetrieveProductOfferingBasedOnServiceSpec(String id) { ServiceSpecification serviceSpec = serviceSpecificationRepoService.findByUuid(id); ProductSpecificationCreate psc = new ProductSpecificationCreate(); psc.setName(serviceSpec.getName()); psc.setDescription(serviceSpec.getDescription()); ProductSpecification responseProdSpec = prodSpecRepoService.addProductSpecification(psc); responseProdSpec = prodSpecRepoService.addServiceSpecToProductSpec( responseProdSpec, serviceSpec ); ProductOffering pOffer = this.prodOfferingFromPrdSpec( responseProdSpec ); return pOffer; } private ProductOffering prodOfferingFromPrdSpec(ProductSpecification responseProdSpec) { ProductSpecificationRef prodSpecRef = new ProductSpecificationRef(); prodSpecRef.setId(responseProdSpec.getId()); prodSpecRef.setName(responseProdSpec.getName()); ProductOfferingCreate pefCre = new ProductOfferingCreate(); pefCre.setName( responseProdSpec.getName()); pefCre.productSpecification(prodSpecRef); ProductOffering pOffer = this.addProductOffering(pefCre); return pOffer; } }
src/main/java/org/etsi/osl/tmf/pcm620/reposervices/ProductSpecificationRepoService.java +72 −3 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Optional; import org.etsi.osl.tmf.common.model.Any; import org.etsi.osl.tmf.common.model.AttachmentRefOrValue; import org.etsi.osl.tmf.common.model.ELifecycle; import org.etsi.osl.tmf.common.model.TimePeriod; Loading @@ -37,12 +38,17 @@ import org.etsi.osl.tmf.common.model.service.ServiceSpecificationRef; import org.etsi.osl.tmf.pcm620.model.BundledProductSpecification; import org.etsi.osl.tmf.pcm620.model.ProductSpecification; import org.etsi.osl.tmf.pcm620.model.ProductSpecificationCharacteristic; import org.etsi.osl.tmf.pcm620.model.ProductSpecificationCharacteristicValue; import org.etsi.osl.tmf.pcm620.model.ProductSpecificationCreate; import org.etsi.osl.tmf.pcm620.model.ProductSpecificationRelationship; import org.etsi.osl.tmf.pcm620.model.ProductSpecificationUpdate; import org.etsi.osl.tmf.pcm620.repo.ProductSpecificationRepository; import org.etsi.osl.tmf.prm669.model.RelatedParty; import org.etsi.osl.tmf.rcm634.model.ResourceSpecificationRef; import org.etsi.osl.tmf.scm633.model.ServiceSpecCharacteristic; import org.etsi.osl.tmf.scm633.model.ServiceSpecCharacteristicValue; import org.etsi.osl.tmf.scm633.model.ServiceSpecification; import org.etsi.osl.tmf.scm633.reposervices.ServiceSpecificationRepoService; import org.hibernate.Hibernate; import org.hibernate.Session; import org.hibernate.SessionFactory; Loading @@ -62,6 +68,8 @@ public class ProductSpecificationRepoService { ProductSpecificationRepository prodsOfferingRepo; @Autowired ServiceSpecificationRepoService serviceSpecificationRepoService; private SessionFactory sessionFactory; Loading Loading @@ -548,7 +556,7 @@ public class ProductSpecificationRepoService { } /** * Update ResourceSpecificationRef list * Update ServiceSpecificationRef list */ if (prodSpecUpd.getServiceSpecification() != null) { Loading @@ -569,6 +577,7 @@ public class ProductSpecificationRepoService { if (!idexists) { prodSpec.getServiceSpecification().add(ar); prodSpec = copyConfigurableCharacteristics( prodSpec, ar ); idAddedUpdated.put(ar.getUuid(), true); } } Loading Loading @@ -598,4 +607,64 @@ public class ProductSpecificationRepoService { return prodSpec; } private ProductSpecification copyConfigurableCharacteristics(ProductSpecification prodSpec, ServiceSpecificationRef ar) { ServiceSpecification sourceSpec = serviceSpecificationRepoService.findByUuid(ar.getId()); if ( sourceSpec != null ) { for (ServiceSpecCharacteristic ssc : sourceSpec.getServiceSpecCharacteristic()) { if (ssc.isConfigurable()!= null && ssc.isConfigurable()) { if ( prodSpec.findProdCharacteristicByName( ssc.getName() ) == null ) { ProductSpecificationCharacteristic cnew = new ProductSpecificationCharacteristic(); cnew.setName( cnew.getName() ); cnew.setDescription( cnew.getDescription()); cnew.isUnique(cnew.isIsUnique()) .extensible(cnew.isExtensible()) .maxCardinality(cnew.getMaxCardinality()) .minCardinality(cnew.getMinCardinality()) .valueType(cnew.getValueType()); for (ServiceSpecCharacteristicValue r : ssc.getServiceSpecCharacteristicValue()) { ProductSpecificationCharacteristicValue pcval = new ProductSpecificationCharacteristicValue(); pcval.isDefault(r.isIsDefault()) .rangeInterval(r.getRangeInterval()) .regex(r.getRegex()) .unitOfMeasure(r.getUnitOfMeasure()) .valueFrom(r.getValueFrom()+"") .valueTo(r.getValueTo()+"") .valueType(r.getValueType()) .value( new Any( r.getValue() ) ); cnew.addProductSpecCharacteristicValueItem( pcval ); } prodSpec.getProductSpecCharacteristic().add( cnew ); } } } } return prodSpec; } public ProductSpecification addServiceSpecToProductSpec(ProductSpecification responseProdSpec, ServiceSpecification serviceSpec) { ServiceSpecificationRef serviceSpecRef = new ServiceSpecificationRef(); serviceSpecRef.setId( serviceSpec.getId() ); serviceSpecRef.setName( serviceSpec.getName()); serviceSpecRef.setVersion(serviceSpec.getVersion()); serviceSpecRef.setReferredType(serviceSpec.getType()); ProductSpecificationUpdate pSpecUpd = new ProductSpecificationUpdate(); pSpecUpd.addServiceSpecificationItem(serviceSpecRef); if (responseProdSpec.getServiceSpecification()!=null) { pSpecUpd.getServiceSpecification().addAll( responseProdSpec.getServiceSpecification() ); } responseProdSpec = updateProductSpecificationDataFromAPIcall(responseProdSpec, pSpecUpd); return responseProdSpec; } }
src/test/java/org/etsi/osl/services/api/po622/ProductOrderRepoServiceTest.java +53 −0 Original line number Diff line number Diff line Loading @@ -311,6 +311,36 @@ public class ProductOrderRepoServiceTest { } @WithMockUser(username = "osadmin", roles = {"ADMIN", "USER"}) @Test public void testCreateProductOfferingFromServiceSpec() throws Exception { ServiceSpecification serviceSpec = createServiceSpecification(); String response = mvc .perform(MockMvcRequestBuilders.post("/productCatalogManagement/v4/productOffering/fromServiceSpecId/" + serviceSpec.getId()) .with(SecurityMockMvcRequestPostProcessors.csrf())) .andExpect(status().isOk()) .andExpect(content().contentTypeCompatibleWith(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()).andReturn().getResponse().getContentAsString(); ProductOffering respOff = JsonUtils.toJsonObj(response, ProductOffering.class); assertThat(respOff).isNotNull(); assertThat( respOff.getName() ).isEqualTo( "Test Spec2" ); assertThat( respOff.getProductSpecification() ).isNotNull(); assertThat( respOff.getProductSpecification().getName() ).isEqualTo( "Test Spec2" ); ProductSpecification prodSpec = productSpecificationRepoService.findByUuid( respOff.getProductSpecification().getId() ); assertThat( prodSpec.getName() ).isEqualTo( "Test Spec2" ); assertThat( prodSpec.getServiceSpecification().size() ).isEqualTo( 1 ); assertThat( prodSpec.getProductSpecCharacteristic().size() ).isEqualTo( 2 ); assertThat( respOff.getProdSpecCharValueUse().size() ).isEqualTo( 2 ); } private String createProductOrder() throws Exception { int currSize = productOrderRepoService.findAll().size(); Loading Loading @@ -397,6 +427,29 @@ public class ProductOrderRepoServiceTest { .andExpect(status().isOk()).andReturn().getResponse().getContentAsString(); ProductSpecification responsesSpec = JsonUtils.toJsonObj(response, ProductSpecification.class); return responsesSpec; } private ServiceSpecification createServiceSpecification() throws Exception{ File sspec = new File( "src/test/resources/testServiceSpec2.json" ); InputStream in = new FileInputStream( sspec ); String sspectext = IOUtils.toString(in, "UTF-8"); ServiceSpecificationCreate serviceSpecificationCreate = JsonUtils.toJsonObj( sspectext, ServiceSpecificationCreate.class); String response = mvc.perform(MockMvcRequestBuilders.post("/serviceCatalogManagement/v4/serviceSpecification") .with( SecurityMockMvcRequestPostProcessors.csrf()) .contentType(MediaType.APPLICATION_JSON) .content( JsonUtils.toJson( serviceSpecificationCreate ) )) .andExpect(content().contentTypeCompatibleWith(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) .andReturn().getResponse().getContentAsString(); ServiceSpecification responsesSpec = JsonUtils.toJsonObj(response, ServiceSpecification.class); assertThat( responsesSpec.getName() ).isEqualTo( "Test Spec2" ); return responsesSpec; } }