Loading src/main/java/org/etsi/osl/tmf/configuration/SwaggerDocumentationConfig.java +38 −2 Viewed Changes for src/main/java/org/etsi/osl/tmf/configuration/SwaggerDocumentationConfig.java: 38 added lines, 2 removed lines. Original line number Diff line number Diff line Loading @@ -139,7 +139,7 @@ public class SwaggerDocumentationConfig { @Bean public OpenApiCustomizer scm622OpenAPI() { public OpenApiCustomizer po622OpenAPI() { return openApi -> openApi .specVersion( SpecVersion.V30 ).addSecurityItem(new SecurityRequirement().addList("security_auth")) .info(new Info().title("TMF 622 Product Ordering") Loading @@ -161,13 +161,49 @@ public class SwaggerDocumentationConfig { SpringDocUtils.getConfig().replaceWithClass(java.time.OffsetDateTime.class, java.util.Date.class); return GroupedOpenApi.builder() .group("tmf-api-622-ProductOrderingManagement-v4.0.0") .addOpenApiCustomizer( this.scm622OpenAPI() ) .addOpenApiCustomizer( this.po622OpenAPI() ) .packagesToScan("org.etsi.osl.tmf.po622.api") .build(); } /** * TMF 637 Product Inventory Management * @return */ @Bean public OpenApiCustomizer pim637penAPI() { return openApi -> openApi .specVersion( SpecVersion.V30 ).addSecurityItem(new SecurityRequirement().addList("security_auth")) .info(new Info().title("TMF 637 Product Inventory Management") .description("**TMF API Reference : TMF 637 - Product Inventory Management** Release : 19.0 - June 2019\n\nThe Product Inventory Management API provides standardized mechanism for product inventory management such as creation, update and retrieval of the representation of a product in the inventory. It also allows the notification of events related to product lifecycle **Product resource** A product offering procured by a customer or other interested party playing a party role. A product is realized as one or more service(s) and / or resource(s). Product Inventory API performs the following operations on product : - Retrieval of a product or a collection of products depending on filter criteria - Partial update of a product (including updating rules and for administration purpose) - Creation of a product (including default values and creation rules and for administration purpose) - Deletion of a product (for administration purposes) - Notification of events on product. Copyright © TM Forum 2019. All Rights Reserved ") .version("4.0.0") .license(new License().name("Apache 2.0").url("https://osl.etsi.org"))) .externalDocs(new ExternalDocumentation() .description("TMF API Tables") .url("https://www.tmforum.org/oda/open-apis/table")); } @Bean public GroupedOpenApi pim637() { SpringDocUtils.getConfig().replaceWithClass(java.time.LocalDate.class, java.sql.Date.class); SpringDocUtils.getConfig().replaceWithClass(java.time.OffsetDateTime.class, java.util.Date.class); return GroupedOpenApi.builder() .group("tmf-api-637-ProductInventoryManagement-v4.0.0") .addOpenApiCustomizer( this.pim637penAPI() ) .packagesToScan("org.etsi.osl.tmf.pim637.api") .build(); } /** * TMF 634 Resource Catalog Management * @return Loading src/main/java/org/etsi/osl/tmf/pcm620/api/ProductOfferingApi.java +20 −0 Viewed Changes for src/main/java/org/etsi/osl/tmf/pcm620/api/ProductOfferingApi.java: 20 added lines, 0 removed lines. 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 Viewed Changes for src/main/java/org/etsi/osl/tmf/pcm620/api/ProductOfferingApiController.java: 16 added lines, 0 removed lines. 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/api/ProductSpecificationApiRouteBuilder.java 0 → 100644 +95 −0 Viewed Changes for src/main/java/org/etsi/osl/tmf/pcm620/api/ProductSpecificationApiRouteBuilder.java: 95 added lines, 0 removed lines. Original line number Diff line number Diff line package org.etsi.osl.tmf.pcm620.api; import org.apache.camel.LoggingLevel; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.model.dataformat.JsonLibrary; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.etsi.osl.tmf.pcm620.model.ProductSpecificationCreate; import org.etsi.osl.tmf.pcm620.model.ProductSpecificationUpdate; import org.etsi.osl.tmf.pcm620.reposervices.ProductOfferingRepoService; import org.etsi.osl.tmf.pcm620.reposervices.ProductSpecificationRepoService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; import org.springframework.stereotype.Component; @Configuration //@RefreshScope @Component public class ProductSpecificationApiRouteBuilder extends RouteBuilder { private static final transient Log logger = LogFactory.getLog(ProductSpecificationApiRouteBuilder.class.getName()); @Value("${CATALOG_GET_PRODUCTSPEC_BY_ID}") private String CATALOG_GET_PRODUCTSPEC_BY_ID = ""; @Value("${CATALOG_ADD_PRODUCTSPEC}") private String CATALOG_ADD_PRODUCTSPEC = ""; @Value("${CATALOG_UPD_PRODUCTSPEC}") private String CATALOG_UPD_PRODUCTSPEC = ""; @Value("${CATALOG_UPDADD_PRODUCTSPEC}") private String CATALOG_UPDADD_PRODUCTSPEC = ""; @Value("${CATALOG_GET_PRODUCTOFFERING_BY_ID}") private String CATALOG_GET_PRODUCTOFFERING_BY_ID = ""; @Autowired ProductSpecificationRepoService productSpecificationRepoService; @Autowired ProductOfferingRepoService productOfferingRepoService; @Override public void configure() throws Exception { from( CATALOG_GET_PRODUCTSPEC_BY_ID ) .log(LoggingLevel.INFO, log, CATALOG_GET_PRODUCTSPEC_BY_ID + " message received!") .to("log:DEBUG?showBody=true&showHeaders=true") .bean( productSpecificationRepoService, "findByUuidEager") .marshal().json( JsonLibrary.Jackson, String.class) .convertBodyTo( String.class ); from( CATALOG_ADD_PRODUCTSPEC ) .log(LoggingLevel.INFO, log, CATALOG_ADD_PRODUCTSPEC + " message received!") .to("log:DEBUG?showBody=true&showHeaders=true") .unmarshal().json( JsonLibrary.Jackson, ProductSpecificationCreate .class, true) .bean( productSpecificationRepoService, "addProductSpecification(${body})") .marshal().json( JsonLibrary.Jackson) .convertBodyTo( String.class ); from( CATALOG_UPD_PRODUCTSPEC ) .log(LoggingLevel.INFO, log, CATALOG_UPD_PRODUCTSPEC + " message received!") .to("log:DEBUG?showBody=true&showHeaders=true") .unmarshal().json( JsonLibrary.Jackson, ProductSpecificationUpdate.class, true) .bean( productSpecificationRepoService, "updateProductSpecification(${header.serviceSpecId}, ${body} )") .marshal().json( JsonLibrary.Jackson) .convertBodyTo( String.class ); from( CATALOG_UPDADD_PRODUCTSPEC ) .log(LoggingLevel.INFO, log, CATALOG_UPD_PRODUCTSPEC + " message received!") .to("log:DEBUG?showBody=true&showHeaders=true") .unmarshal().json( JsonLibrary.Jackson, ProductSpecificationUpdate.class, true) .bean( productSpecificationRepoService, "updateOrAddProductSpecification(${header.serviceSpecId}, ${header.forceId}, ${body} )") .marshal().json( JsonLibrary.Jackson) .convertBodyTo( String.class ); from( CATALOG_GET_PRODUCTOFFERING_BY_ID ) .log(LoggingLevel.INFO, log, CATALOG_GET_PRODUCTOFFERING_BY_ID + " message received!") .to("log:DEBUG?showBody=true&showHeaders=true") .bean( productOfferingRepoService, "findByUuidEager") .marshal().json( JsonLibrary.Jackson, String.class) .convertBodyTo( String.class ); } } src/main/java/org/etsi/osl/tmf/pcm620/reposervices/ProductOfferingRepoService.java +90 −0 Viewed Changes for src/main/java/org/etsi/osl/tmf/pcm620/reposervices/ProductOfferingRepoService.java: 90 added lines, 0 removed lines. 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 @@ -205,6 +222,8 @@ public class ProductOfferingRepoService { try { dd = session.get(ProductOffering.class, id); if (dd == null) { tx.rollback(); session.close(); return this.findByUuid(id);// last resort } Hibernate.initialize(dd.getAttachment()); Loading @@ -221,6 +240,7 @@ public class ProductOfferingRepoService { Hibernate.initialize(dd.getProductOfferingTerm() ); Hibernate.initialize(dd.getServiceCandidate() ); Hibernate.initialize(dd.getResourceCandidate() ); Hibernate.initialize(dd.getChannel()); tx.commit(); } finally { Loading Loading @@ -320,6 +340,7 @@ public class ProductOfferingRepoService { if ( prodOfferingUpd.getProductSpecification() != null ) { prodOffering.setProductSpecification( prodOfferingUpd.getProductSpecification() ); prodOffering = copyCharacteristicsFromProdSpec( prodOffering, prodOfferingUpd.getProductSpecification() ); } Loading Loading @@ -543,4 +564,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; } } Loading
src/main/java/org/etsi/osl/tmf/configuration/SwaggerDocumentationConfig.java +38 −2 Viewed Changes for src/main/java/org/etsi/osl/tmf/configuration/SwaggerDocumentationConfig.java: 38 added lines, 2 removed lines. Original line number Diff line number Diff line Loading @@ -139,7 +139,7 @@ public class SwaggerDocumentationConfig { @Bean public OpenApiCustomizer scm622OpenAPI() { public OpenApiCustomizer po622OpenAPI() { return openApi -> openApi .specVersion( SpecVersion.V30 ).addSecurityItem(new SecurityRequirement().addList("security_auth")) .info(new Info().title("TMF 622 Product Ordering") Loading @@ -161,13 +161,49 @@ public class SwaggerDocumentationConfig { SpringDocUtils.getConfig().replaceWithClass(java.time.OffsetDateTime.class, java.util.Date.class); return GroupedOpenApi.builder() .group("tmf-api-622-ProductOrderingManagement-v4.0.0") .addOpenApiCustomizer( this.scm622OpenAPI() ) .addOpenApiCustomizer( this.po622OpenAPI() ) .packagesToScan("org.etsi.osl.tmf.po622.api") .build(); } /** * TMF 637 Product Inventory Management * @return */ @Bean public OpenApiCustomizer pim637penAPI() { return openApi -> openApi .specVersion( SpecVersion.V30 ).addSecurityItem(new SecurityRequirement().addList("security_auth")) .info(new Info().title("TMF 637 Product Inventory Management") .description("**TMF API Reference : TMF 637 - Product Inventory Management** Release : 19.0 - June 2019\n\nThe Product Inventory Management API provides standardized mechanism for product inventory management such as creation, update and retrieval of the representation of a product in the inventory. It also allows the notification of events related to product lifecycle **Product resource** A product offering procured by a customer or other interested party playing a party role. A product is realized as one or more service(s) and / or resource(s). Product Inventory API performs the following operations on product : - Retrieval of a product or a collection of products depending on filter criteria - Partial update of a product (including updating rules and for administration purpose) - Creation of a product (including default values and creation rules and for administration purpose) - Deletion of a product (for administration purposes) - Notification of events on product. Copyright © TM Forum 2019. All Rights Reserved ") .version("4.0.0") .license(new License().name("Apache 2.0").url("https://osl.etsi.org"))) .externalDocs(new ExternalDocumentation() .description("TMF API Tables") .url("https://www.tmforum.org/oda/open-apis/table")); } @Bean public GroupedOpenApi pim637() { SpringDocUtils.getConfig().replaceWithClass(java.time.LocalDate.class, java.sql.Date.class); SpringDocUtils.getConfig().replaceWithClass(java.time.OffsetDateTime.class, java.util.Date.class); return GroupedOpenApi.builder() .group("tmf-api-637-ProductInventoryManagement-v4.0.0") .addOpenApiCustomizer( this.pim637penAPI() ) .packagesToScan("org.etsi.osl.tmf.pim637.api") .build(); } /** * TMF 634 Resource Catalog Management * @return Loading
src/main/java/org/etsi/osl/tmf/pcm620/api/ProductOfferingApi.java +20 −0 Viewed Changes for src/main/java/org/etsi/osl/tmf/pcm620/api/ProductOfferingApi.java: 20 added lines, 0 removed lines. 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 Viewed Changes for src/main/java/org/etsi/osl/tmf/pcm620/api/ProductOfferingApiController.java: 16 added lines, 0 removed lines. 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/api/ProductSpecificationApiRouteBuilder.java 0 → 100644 +95 −0 Viewed Changes for src/main/java/org/etsi/osl/tmf/pcm620/api/ProductSpecificationApiRouteBuilder.java: 95 added lines, 0 removed lines. Original line number Diff line number Diff line package org.etsi.osl.tmf.pcm620.api; import org.apache.camel.LoggingLevel; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.model.dataformat.JsonLibrary; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.etsi.osl.tmf.pcm620.model.ProductSpecificationCreate; import org.etsi.osl.tmf.pcm620.model.ProductSpecificationUpdate; import org.etsi.osl.tmf.pcm620.reposervices.ProductOfferingRepoService; import org.etsi.osl.tmf.pcm620.reposervices.ProductSpecificationRepoService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; import org.springframework.stereotype.Component; @Configuration //@RefreshScope @Component public class ProductSpecificationApiRouteBuilder extends RouteBuilder { private static final transient Log logger = LogFactory.getLog(ProductSpecificationApiRouteBuilder.class.getName()); @Value("${CATALOG_GET_PRODUCTSPEC_BY_ID}") private String CATALOG_GET_PRODUCTSPEC_BY_ID = ""; @Value("${CATALOG_ADD_PRODUCTSPEC}") private String CATALOG_ADD_PRODUCTSPEC = ""; @Value("${CATALOG_UPD_PRODUCTSPEC}") private String CATALOG_UPD_PRODUCTSPEC = ""; @Value("${CATALOG_UPDADD_PRODUCTSPEC}") private String CATALOG_UPDADD_PRODUCTSPEC = ""; @Value("${CATALOG_GET_PRODUCTOFFERING_BY_ID}") private String CATALOG_GET_PRODUCTOFFERING_BY_ID = ""; @Autowired ProductSpecificationRepoService productSpecificationRepoService; @Autowired ProductOfferingRepoService productOfferingRepoService; @Override public void configure() throws Exception { from( CATALOG_GET_PRODUCTSPEC_BY_ID ) .log(LoggingLevel.INFO, log, CATALOG_GET_PRODUCTSPEC_BY_ID + " message received!") .to("log:DEBUG?showBody=true&showHeaders=true") .bean( productSpecificationRepoService, "findByUuidEager") .marshal().json( JsonLibrary.Jackson, String.class) .convertBodyTo( String.class ); from( CATALOG_ADD_PRODUCTSPEC ) .log(LoggingLevel.INFO, log, CATALOG_ADD_PRODUCTSPEC + " message received!") .to("log:DEBUG?showBody=true&showHeaders=true") .unmarshal().json( JsonLibrary.Jackson, ProductSpecificationCreate .class, true) .bean( productSpecificationRepoService, "addProductSpecification(${body})") .marshal().json( JsonLibrary.Jackson) .convertBodyTo( String.class ); from( CATALOG_UPD_PRODUCTSPEC ) .log(LoggingLevel.INFO, log, CATALOG_UPD_PRODUCTSPEC + " message received!") .to("log:DEBUG?showBody=true&showHeaders=true") .unmarshal().json( JsonLibrary.Jackson, ProductSpecificationUpdate.class, true) .bean( productSpecificationRepoService, "updateProductSpecification(${header.serviceSpecId}, ${body} )") .marshal().json( JsonLibrary.Jackson) .convertBodyTo( String.class ); from( CATALOG_UPDADD_PRODUCTSPEC ) .log(LoggingLevel.INFO, log, CATALOG_UPD_PRODUCTSPEC + " message received!") .to("log:DEBUG?showBody=true&showHeaders=true") .unmarshal().json( JsonLibrary.Jackson, ProductSpecificationUpdate.class, true) .bean( productSpecificationRepoService, "updateOrAddProductSpecification(${header.serviceSpecId}, ${header.forceId}, ${body} )") .marshal().json( JsonLibrary.Jackson) .convertBodyTo( String.class ); from( CATALOG_GET_PRODUCTOFFERING_BY_ID ) .log(LoggingLevel.INFO, log, CATALOG_GET_PRODUCTOFFERING_BY_ID + " message received!") .to("log:DEBUG?showBody=true&showHeaders=true") .bean( productOfferingRepoService, "findByUuidEager") .marshal().json( JsonLibrary.Jackson, String.class) .convertBodyTo( String.class ); } }
src/main/java/org/etsi/osl/tmf/pcm620/reposervices/ProductOfferingRepoService.java +90 −0 Viewed Changes for src/main/java/org/etsi/osl/tmf/pcm620/reposervices/ProductOfferingRepoService.java: 90 added lines, 0 removed lines. 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 @@ -205,6 +222,8 @@ public class ProductOfferingRepoService { try { dd = session.get(ProductOffering.class, id); if (dd == null) { tx.rollback(); session.close(); return this.findByUuid(id);// last resort } Hibernate.initialize(dd.getAttachment()); Loading @@ -221,6 +240,7 @@ public class ProductOfferingRepoService { Hibernate.initialize(dd.getProductOfferingTerm() ); Hibernate.initialize(dd.getServiceCandidate() ); Hibernate.initialize(dd.getResourceCandidate() ); Hibernate.initialize(dd.getChannel()); tx.commit(); } finally { Loading Loading @@ -320,6 +340,7 @@ public class ProductOfferingRepoService { if ( prodOfferingUpd.getProductSpecification() != null ) { prodOffering.setProductSpecification( prodOfferingUpd.getProductSpecification() ); prodOffering = copyCharacteristicsFromProdSpec( prodOffering, prodOfferingUpd.getProductSpecification() ); } Loading Loading @@ -543,4 +564,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; } }