Loading src/main/java/org/etsi/osl/tmf/ri639/api/ResourceApiRouteBuilder.java +1 −1 Original line number Original line Diff line number Diff line Loading @@ -92,7 +92,7 @@ public class ResourceApiRouteBuilder extends RouteBuilder { .log(LoggingLevel.INFO, log, CATALOG_UPD_RESOURCE + " message received!") .log(LoggingLevel.INFO, log, CATALOG_UPD_RESOURCE + " message received!") .to("log:DEBUG?showBody=true&showHeaders=true") .to("log:DEBUG?showBody=true&showHeaders=true") .unmarshal().json( JsonLibrary.Jackson, ResourceUpdate.class, true) .unmarshal().json( JsonLibrary.Jackson, ResourceUpdate.class, true) .bean( resourceRepoService, "updateResource(${header.resourceId}, ${body}, ${header.propagateToSO} )") .bean( resourceRepoService, "updateResource(${header.resourceId}, ${body}, ${header.triggerServiceActionQueue} )") .marshal().json( JsonLibrary.Jackson) .marshal().json( JsonLibrary.Jackson) .convertBodyTo( String.class ); .convertBodyTo( String.class ); Loading src/main/java/org/etsi/osl/tmf/ri639/reposervices/ResourceRepoService.java +1 −1 Original line number Original line Diff line number Diff line Loading @@ -284,7 +284,7 @@ public class ResourceRepoService { @Transactional @Transactional public Resource updateResource(String id, @Valid ResourceUpdate resourceUpd, public Resource updateResource(String id, @Valid ResourceUpdate resourceUpd, boolean propagateToSO) { boolean triggerServiceActionQueue) { Resource resource = this.getResourceEager(id); Resource resource = this.getResourceEager(id); if (resource == null) { if (resource == null) { Loading src/main/java/org/etsi/osl/tmf/scm633/reposervices/ServiceSpecificationRepoService.java +47 −45 Original line number Original line Diff line number Diff line Loading @@ -571,9 +571,10 @@ public class ServiceSpecificationRepoService { /** /** * Also, * Also, * we will add by default all the characteristics of this service to the related bundle parent service * we will add by default all the characteristics of this service to the related bundle parent service * Removed to try new approach with rules */ */ serviceSpec = copyCharacteristicsOfServiceId( ar.getId(), serviceSpec); //serviceSpec = copyCharacteristicsOfServiceId( ar.getId(), serviceSpec); } } } } Loading Loading @@ -619,7 +620,7 @@ public class ServiceSpecificationRepoService { * Also, * Also, * we will add by default all the characteristics of this rSpec to the related bundle parent service * we will add by default all the characteristics of this rSpec to the related bundle parent service */ */ serviceSpec = copyCharacteristicsOfResourceSpecId( ar.getId(), serviceSpec); //serviceSpec = copyCharacteristicsOfResourceSpecId( ar.getId(), serviceSpec); } } } } Loading Loading @@ -696,24 +697,24 @@ public class ServiceSpecificationRepoService { return targetServiceSpec; return targetServiceSpec; } } private ServiceSpecification copyCharacteristicsOfResourceSpecId(String sourceResourceSpecid, ServiceSpecification targetServiceSpec) { // private ServiceSpecification copyCharacteristicsOfResourceSpecId(String sourceResourceSpecid, ServiceSpecification targetServiceSpec) { // ResourceSpecification rSpec = resourceSpecRepoService.findByUuid( sourceResourceSpecid ); // ResourceSpecification rSpec = resourceSpecRepoService.findByUuid( sourceResourceSpecid ); // if ( rSpec != null ) { // if ( rSpec != null ) { for (ResourceSpecificationCharacteristic sourceChar : rSpec.getResourceSpecCharacteristic()) { // for (ResourceSpecificationCharacteristic sourceChar : rSpec.getResourceSpecCharacteristic()) { ServiceSpecCharacteristic serviceSpecCharacteristicItem = copyResourceCharacteristic( sourceChar ); // ServiceSpecCharacteristic serviceSpecCharacteristicItem = copyResourceCharacteristic( sourceChar ); //serviceSpecCharacteristicItem.setName( rSpec.getName() + "::" +sourceChar.getName() ); // //serviceSpecCharacteristicItem.setName( rSpec.getName() + "::" +sourceChar.getName() ); serviceSpecCharacteristicItem.setName( sourceChar.getName() ); // serviceSpecCharacteristicItem.setName( sourceChar.getName() ); // if ( targetServiceSpec.findSpecCharacteristicByName( serviceSpecCharacteristicItem.getName() ) == null ) { // if ( targetServiceSpec.findSpecCharacteristicByName( serviceSpecCharacteristicItem.getName() ) == null ) { targetServiceSpec.getServiceSpecCharacteristic().add( serviceSpecCharacteristicItem ); // targetServiceSpec.getServiceSpecCharacteristic().add( serviceSpecCharacteristicItem ); } // } } // } } // } // return targetServiceSpec; // return targetServiceSpec; } // } public ServiceSpecification cloneServiceSpecification(String uuid) { public ServiceSpecification cloneServiceSpecification(String uuid) { ServiceSpecification source = this.findByUuid(uuid); ServiceSpecification source = this.findByUuid(uuid); Loading Loading @@ -1410,11 +1411,12 @@ public class ServiceSpecificationRepoService { serviceSpec.setType("ResourceFacingServiceSpecification"); serviceSpec.setType("ResourceFacingServiceSpecification"); for (ResourceSpecificationCharacteristic sourceChar : rSpec.getResourceSpecCharacteristic()) { ServiceSpecCharacteristic serviceSpecCharacteristicItem = copyResourceCharacteristic( sourceChar ); // for (ResourceSpecificationCharacteristic sourceChar : rSpec.getResourceSpecCharacteristic()) { serviceSpecCharacteristicItem.setName( rSpec.getName() + "::" +sourceChar.getName() ); // ServiceSpecCharacteristic serviceSpecCharacteristicItem = copyResourceCharacteristic( sourceChar ); serviceSpec.addServiceSpecCharacteristicItem(serviceSpecCharacteristicItem ); // serviceSpecCharacteristicItem.setName( rSpec.getName() + "::" +sourceChar.getName() ); } // serviceSpec.addServiceSpecCharacteristicItem(serviceSpecCharacteristicItem ); // } ResourceSpecificationRef resourceSpecRef = new ResourceSpecificationRef(); ResourceSpecificationRef resourceSpecRef = new ResourceSpecificationRef(); Loading @@ -1427,25 +1429,25 @@ public class ServiceSpecificationRepoService { return serviceSpec; return serviceSpec; } } private ServiceSpecCharacteristic copyResourceCharacteristic( ResourceSpecificationCharacteristic sourceChar ) { // private ServiceSpecCharacteristic copyResourceCharacteristic( ResourceSpecificationCharacteristic sourceChar ) { // ServiceSpecCharacteristic serviceSpecCharacteristicItem = new ServiceSpecCharacteristic(); // ServiceSpecCharacteristic serviceSpecCharacteristicItem = new ServiceSpecCharacteristic(); serviceSpecCharacteristicItem.setDescription( sourceChar.getDescription()); // serviceSpecCharacteristicItem.setDescription( sourceChar.getDescription()); serviceSpecCharacteristicItem.valueType( sourceChar.getValueType() ); // serviceSpecCharacteristicItem.valueType( sourceChar.getValueType() ); serviceSpecCharacteristicItem.configurable(sourceChar.isConfigurable()); // serviceSpecCharacteristicItem.configurable(sourceChar.isConfigurable()); serviceSpecCharacteristicItem.setMinCardinality( sourceChar.getMinCardinality() ); // serviceSpecCharacteristicItem.setMinCardinality( sourceChar.getMinCardinality() ); serviceSpecCharacteristicItem.setMaxCardinality( sourceChar.getMaxCardinality() ); // serviceSpecCharacteristicItem.setMaxCardinality( sourceChar.getMaxCardinality() ); serviceSpecCharacteristicItem.setValidFor( sourceChar.getValidFor() ); // serviceSpecCharacteristicItem.setValidFor( sourceChar.getValidFor() ); for (ResourceSpecificationCharacteristicValue cv : sourceChar.getResourceSpecCharacteristicValue()) { // for (ResourceSpecificationCharacteristicValue cv : sourceChar.getResourceSpecCharacteristicValue()) { ServiceSpecCharacteristicValue serviceSpecCharacteristicValueItem = new ServiceSpecCharacteristicValue(); // ServiceSpecCharacteristicValue serviceSpecCharacteristicValueItem = new ServiceSpecCharacteristicValue(); serviceSpecCharacteristicValueItem.setValue( new Any( cv.getValue().getValue(), cv.getValue().getAlias())); // serviceSpecCharacteristicValueItem.setValue( new Any( cv.getValue().getValue(), cv.getValue().getAlias())); serviceSpecCharacteristicValueItem.isDefault( cv.isIsDefault() ); // serviceSpecCharacteristicValueItem.isDefault( cv.isIsDefault() ); serviceSpecCharacteristicValueItem.setUnitOfMeasure( cv.getUnitOfMeasure() ); // serviceSpecCharacteristicValueItem.setUnitOfMeasure( cv.getUnitOfMeasure() ); serviceSpecCharacteristicItem.addServiceSpecCharacteristicValueItem(serviceSpecCharacteristicValueItem ); // serviceSpecCharacteristicItem.addServiceSpecCharacteristicValueItem(serviceSpecCharacteristicValueItem ); } // } return serviceSpecCharacteristicItem; // return serviceSpecCharacteristicItem; } // } // Loading src/main/java/org/etsi/osl/tmf/sim638/api/ServiceApiRouteBuilder.java +1 −1 Original line number Original line Diff line number Diff line Loading @@ -131,7 +131,7 @@ public class ServiceApiRouteBuilder extends RouteBuilder { .log(LoggingLevel.INFO, log, CATALOG_UPD_SERVICE + " message received and will be processed for service inventory!") .log(LoggingLevel.INFO, log, CATALOG_UPD_SERVICE + " message received and will be processed for service inventory!") .to("log:DEBUG?showBody=true&showHeaders=true") .to("log:DEBUG?showBody=true&showHeaders=true") .unmarshal().json( JsonLibrary.Jackson, ServiceUpdate.class, true) .unmarshal().json( JsonLibrary.Jackson, ServiceUpdate.class, true) .bean( serviceRepoService, "updateService(${header.serviceid}, ${body}, ${header.propagateToSO} )") .bean( serviceRepoService, "updateService(${header.serviceid}, ${body}, ${header.triggerServiceActionQueue} )") .marshal().json( JsonLibrary.Jackson) .marshal().json( JsonLibrary.Jackson) .convertBodyTo( String.class ); .convertBodyTo( String.class ); Loading src/main/java/org/etsi/osl/tmf/sim638/service/ServiceRepoService.java +121 −85 Original line number Original line Diff line number Diff line Loading @@ -340,8 +340,16 @@ public class ServiceRepoService { .orElse(null); .orElse(null); } } /** * @param id * @param servUpd * @param triggerServiceActionQueue * @param updatedFromParentService * @param updatedFromChildService * @return */ @Transactional @Transactional public Service updateService(String id, @Valid ServiceUpdate servUpd, boolean propagateToSO, Service updatedFromParentService, Service updatedFromChildService ) { public Service updateService(String id, @Valid ServiceUpdate servUpd, boolean triggerServiceActionQueue, Service updatedFromParentService, Service updatedFromChildService ) { //Service service = this.findByUuid(id); //Service service = this.findByUuid(id); Service service = this.getServiceEager(id); Service service = this.getServiceEager(id); Loading Loading @@ -452,7 +460,7 @@ public class ServiceRepoService { boolean serviceCharacteristicChangedContainsPrimitive = false; boolean serviceCharacteristicChangedContainsPrimitive = false; String charChangedForNotes = ""; String charChangedForNotes = ""; List<Characteristic> childCharacteristicsChanged = new ArrayList<>(); //List<Characteristic> childCharacteristicsChanged = new ArrayList<>(); //logger.info("==> Will update serviceToString: " + service.toString() ); //logger.info("==> Will update serviceToString: " + service.toString() ); Loading @@ -466,12 +474,15 @@ public class ServiceRepoService { Characteristic origChar = service.getServiceCharacteristicByName( n.getName() ); Characteristic origChar = service.getServiceCharacteristicByName( n.getName() ); if ( ( origChar !=null ) && ( origChar.getValue() !=null ) && ( origChar.getValue().getValue() !=null )) { if ( ( origChar !=null ) && ( origChar.getValue() !=null ) && ( origChar.getValue().getValue() !=null )) { if ( !origChar.getValue().getValue().equals(n.getValue().getValue()) ) { if ( !origChar.getValue().getValue().equals(n.getValue().getValue()) ) { if ( n.getName().contains("::") ) { // if ( n.getName().contains("::") ) { childCharacteristicsChanged.add(n); //the characteristic needs later to be propagated to its children // childCharacteristicsChanged.add(n); //the characteristic needs later to be propagated to its children // // } } if ( !n.getName().contains("::") ) { //it is not a child characteristic serviceCharacteristicChanged = true; //change only characteristics of this service serviceCharacteristicChanged = true; //change only characteristics of this service charChangedForNotes += n.getName(); charChangedForNotes += n.getName() + ", "; } if ( n.getName().toUpperCase().contains( "PRIMITIVE::" ) ){ if ( n.getName().toUpperCase().contains( "PRIMITIVE::" ) ){ serviceCharacteristicChangedContainsPrimitive = true; serviceCharacteristicChangedContainsPrimitive = true; } } Loading @@ -484,9 +495,11 @@ public class ServiceRepoService { ); ); } else { } else { service.addServiceCharacteristicItem(n); service.addServiceCharacteristicItem(n); if ( !n.getName().contains("::") ) { //it is not a child characteristic serviceCharacteristicChanged = true; serviceCharacteristicChanged = true; charChangedForNotes += n.getName() + ", "; charChangedForNotes += n.getName() + ", "; } } } } } } } Loading Loading @@ -555,7 +568,7 @@ public class ServiceRepoService { * Save in ServiceActionQueueItem * Save in ServiceActionQueueItem */ */ if (propagateToSO && stateChanged) { if (triggerServiceActionQueue && stateChanged) { ServiceActionQueueItem saqi = new ServiceActionQueueItem(); ServiceActionQueueItem saqi = new ServiceActionQueueItem(); saqi.setServiceRefId( id ); saqi.setServiceRefId( id ); saqi.setOriginalServiceInJSON( originaServiceAsJson ); saqi.setOriginalServiceInJSON( originaServiceAsJson ); Loading Loading @@ -588,7 +601,7 @@ public class ServiceRepoService { } } } } if ( serviceCharacteristicChanged && service.getState().equals( ServiceStateType.ACTIVE) && previousState!=null && previousState.equals( ServiceStateType.ACTIVE) ) { if ( serviceCharacteristicChanged && service.getState().equals( ServiceStateType.ACTIVE) && previousState!=null && previousState.equals( ServiceStateType.ACTIVE) && triggerServiceActionQueue ) { ServiceActionQueueItem saqi = new ServiceActionQueueItem(); ServiceActionQueueItem saqi = new ServiceActionQueueItem(); saqi.setServiceRefId( id ); saqi.setServiceRefId( id ); saqi.setOriginalServiceInJSON( originaServiceAsJson ); saqi.setOriginalServiceInJSON( originaServiceAsJson ); Loading @@ -596,65 +609,88 @@ public class ServiceRepoService { if ( serviceCharacteristicChangedContainsPrimitive ) { if ( serviceCharacteristicChangedContainsPrimitive ) { saqi.setAction( ServiceActionQueueAction.EVALUATE_CHARACTERISTIC_CHANGED_MANODAY2 ); saqi.setAction( ServiceActionQueueAction.EVALUATE_CHARACTERISTIC_CHANGED_MANODAY2 ); } } this.addServiceActionQueueItem(saqi); this.addServiceActionQueueItem(saqi); } } if ( serviceCharacteristicChanged) { /* /* * Update any parent service * Update any parent service */ */ for (ServiceRelationship serviceRelationship : service.getServiceRelationship()) { for (ServiceRelationship serviceRelationship : service.getServiceRelationship()) { if (serviceRelationship.getRelationshipType().equals("ChildService")) { if (serviceRelationship.getRelationshipType().equals("ChildService")) { if (serviceRelationship.getService() != null) { if (serviceRelationship.getService() != null) { if ( updatedFromParentService == null || (updatedFromParentService!=null && !updatedFromParentService.getId().equals(serviceRelationship.getService().getId())) ) { //avoid circular propagateCharacteristicsToParentService(service, serviceRelationship.getService().getId()); } if (serviceCharacteristicChanged) { if (updatedFromParentService == null || (updatedFromParentService != null && !updatedFromParentService.getId().equals(serviceRelationship.getService().getId()))) { // avoid circular ServiceActionQueueItem saqi = new ServiceActionQueueItem(); // this will trigger lcm rule to parent saqi.setServiceRefId(serviceRelationship.getService().getId()); try { saqi.setOriginalServiceInJSON( mapper.writeValueAsString( service ) ); //pass the child service as is } catch (JsonProcessingException e) { e.printStackTrace(); } } } saqi.setAction(ServiceActionQueueAction.EVALUATE_CHILD_CHARACTERISTIC_CHANGED); } this.addServiceActionQueueItem(saqi); } } if ( childCharacteristicsChanged.size()>0 ) { } if ( service.getSupportingService() != null ) { //propagate to children //copy characteristics values from CFS Service to its supporting services. for (ServiceRef sref : service.getSupportingService() ) { Service aSupportingService = this.findByUuid( sref.getId() ); ServiceUpdate supd = new ServiceUpdate(); boolean foundCharacteristicForChild = false; for (Characteristic supportingServiceChar : aSupportingService.getServiceCharacteristic() ) { for (Characteristic serviceCharacteristic : childCharacteristicsChanged ) { if (stateChanged) { if ( serviceCharacteristic.getName().contains( aSupportingService.getName() + "::" + supportingServiceChar.getName() )) { if (updatedFromParentService == null || (updatedFromParentService != null && !updatedFromParentService.getId().equals(serviceRelationship.getService().getId()))) { // avoid circular //supportingServiceChar.setValue( serviceCharacteristic.getValue() ); ServiceActionQueueItem saqi = new ServiceActionQueueItem(); // this will trigger lcm rule to parent Characteristic cNew = new Characteristic(); saqi.setServiceRefId(serviceRelationship.getService().getId()); cNew.setName(supportingServiceChar.getName()); try { cNew.value( new Any( serviceCharacteristic.getValue() )); saqi.setOriginalServiceInJSON( mapper.writeValueAsString( service ) ); //pass the child service as is supd.addServiceCharacteristicItem( cNew ); } catch (JsonProcessingException e) { foundCharacteristicForChild = true; e.printStackTrace(); } } saqi.setAction(ServiceActionQueueAction.EVALUATE_CHILD_STATE_CHANGE ); this.addServiceActionQueueItem(saqi); } } } } if ( foundCharacteristicForChild ) { Note n = new Note(); n.setText("Child Characteristics Changed" ); n.setAuthor( "SIM638-API" ); n.setDate( OffsetDateTime.now(ZoneOffset.UTC).toString() ); supd.addNoteItem( n ); if ( updatedFromChildService == null || (updatedFromChildService!=null && !updatedFromChildService.getId().equals( aSupportingService.getId())) ) { //avoid circular this.updateService( aSupportingService.getId(), supd , false, service, null); //update the service } } } } } } } // if ( childCharacteristicsChanged.size()>0 ) { } // if ( service.getSupportingService() != null ) { //propagate to children // //copy characteristics values from CFS Service to its supporting services. // for (ServiceRef sref : service.getSupportingService() ) { // Service aSupportingService = this.findByUuid( sref.getId() ); // ServiceUpdate supd = new ServiceUpdate(); // boolean foundCharacteristicForChild = false; // for (Characteristic supportingServiceChar : aSupportingService.getServiceCharacteristic() ) { // // for (Characteristic serviceCharacteristic : childCharacteristicsChanged ) { // if ( serviceCharacteristic.getName().contains( aSupportingService.getName() + "::" + supportingServiceChar.getName() )) { // //supportingServiceChar.setValue( serviceCharacteristic.getValue() ); // Characteristic cNew = new Characteristic(); // cNew.setName(supportingServiceChar.getName()); // cNew.value( new Any( serviceCharacteristic.getValue() )); // supd.addServiceCharacteristicItem( cNew ); // foundCharacteristicForChild = true; // } // } // } // // if ( foundCharacteristicForChild ) { // Note n = new Note(); // n.setText("Child Characteristics Changed" ); // n.setAuthor( "SIM638-API" ); // n.setDate( OffsetDateTime.now(ZoneOffset.UTC).toString() ); // supd.addNoteItem( n ); // if ( updatedFromChildService == null || // (updatedFromChildService!=null && !updatedFromChildService.getId().equals( aSupportingService.getId())) ) { //avoid circular // this.updateService( aSupportingService.getId(), supd , false, service, null); //update the service // } // } // } // // } // } Loading Loading @@ -692,19 +728,19 @@ public class ServiceRepoService { * @param service * @param service * @param parentService * @param parentService */ */ private void propagateCharacteristicsToParentService(Service childService, String parentServiceId) { // private void propagateCharacteristicsToParentService(Service childService, String parentServiceId) { // ServiceUpdate servUpd = new ServiceUpdate(); // ServiceUpdate servUpd = new ServiceUpdate(); // for (Characteristic n : childService.getServiceCharacteristic()) { // for (Characteristic n : childService.getServiceCharacteristic()) { Characteristic serviceCharacteristicItem = new Characteristic(); // Characteristic serviceCharacteristicItem = new Characteristic(); serviceCharacteristicItem.setName( childService.getName() + "::" + n.getName()); // serviceCharacteristicItem.setName( childService.getName() + "::" + n.getName()); serviceCharacteristicItem.setValue( new Any( n.getValue() )); // serviceCharacteristicItem.setValue( new Any( n.getValue() )); servUpd.addServiceCharacteristicItem(serviceCharacteristicItem); // servUpd.addServiceCharacteristicItem(serviceCharacteristicItem); } // } // this.updateService( parentServiceId, servUpd, false, null, childService); // this.updateService( parentServiceId, servUpd, false, null, childService); } // } public String getServiceEagerAsString(String id) throws JsonProcessingException { public String getServiceEagerAsString(String id) throws JsonProcessingException { Service s = this.getServiceEager(id); Service s = this.getServiceEager(id); Loading Loading @@ -801,8 +837,8 @@ public class ServiceRepoService { logger.debug("Will add ServiceActionQueueItem ServiceRefId: " + item.getServiceRefId() ); logger.debug("Will add ServiceActionQueueItem ServiceRefId: " + item.getServiceRefId() ); //find any similar action inqueue and delete them, so to keep this one as the most recent //find any similar action inqueue and delete them, so to keep this one as the most recent //List<ServiceActionQueueItem> result = this.serviceActionQueueRepo.findByServiceRefIdAndAction(item.getServiceRefId(), item.getAction()); List<ServiceActionQueueItem> result = this.serviceActionQueueRepo.findByServiceRefIdAndAction(item.getServiceRefId(), item.getAction()); //logger.debug("Will add ServiceActionQueueItem ServiceRefId result: " +result.size() ); logger.debug("Will add ServiceActionQueueItem ServiceRefId result: " +result.size() ); this.serviceActionQueueRepo.deleteByServiceRefIdAndAction(item.getServiceRefId(), item.getAction()); this.serviceActionQueueRepo.deleteByServiceRefIdAndAction(item.getServiceRefId(), item.getAction()); return this.serviceActionQueueRepo.save( item); return this.serviceActionQueueRepo.save( item); Loading Loading
src/main/java/org/etsi/osl/tmf/ri639/api/ResourceApiRouteBuilder.java +1 −1 Original line number Original line Diff line number Diff line Loading @@ -92,7 +92,7 @@ public class ResourceApiRouteBuilder extends RouteBuilder { .log(LoggingLevel.INFO, log, CATALOG_UPD_RESOURCE + " message received!") .log(LoggingLevel.INFO, log, CATALOG_UPD_RESOURCE + " message received!") .to("log:DEBUG?showBody=true&showHeaders=true") .to("log:DEBUG?showBody=true&showHeaders=true") .unmarshal().json( JsonLibrary.Jackson, ResourceUpdate.class, true) .unmarshal().json( JsonLibrary.Jackson, ResourceUpdate.class, true) .bean( resourceRepoService, "updateResource(${header.resourceId}, ${body}, ${header.propagateToSO} )") .bean( resourceRepoService, "updateResource(${header.resourceId}, ${body}, ${header.triggerServiceActionQueue} )") .marshal().json( JsonLibrary.Jackson) .marshal().json( JsonLibrary.Jackson) .convertBodyTo( String.class ); .convertBodyTo( String.class ); Loading
src/main/java/org/etsi/osl/tmf/ri639/reposervices/ResourceRepoService.java +1 −1 Original line number Original line Diff line number Diff line Loading @@ -284,7 +284,7 @@ public class ResourceRepoService { @Transactional @Transactional public Resource updateResource(String id, @Valid ResourceUpdate resourceUpd, public Resource updateResource(String id, @Valid ResourceUpdate resourceUpd, boolean propagateToSO) { boolean triggerServiceActionQueue) { Resource resource = this.getResourceEager(id); Resource resource = this.getResourceEager(id); if (resource == null) { if (resource == null) { Loading
src/main/java/org/etsi/osl/tmf/scm633/reposervices/ServiceSpecificationRepoService.java +47 −45 Original line number Original line Diff line number Diff line Loading @@ -571,9 +571,10 @@ public class ServiceSpecificationRepoService { /** /** * Also, * Also, * we will add by default all the characteristics of this service to the related bundle parent service * we will add by default all the characteristics of this service to the related bundle parent service * Removed to try new approach with rules */ */ serviceSpec = copyCharacteristicsOfServiceId( ar.getId(), serviceSpec); //serviceSpec = copyCharacteristicsOfServiceId( ar.getId(), serviceSpec); } } } } Loading Loading @@ -619,7 +620,7 @@ public class ServiceSpecificationRepoService { * Also, * Also, * we will add by default all the characteristics of this rSpec to the related bundle parent service * we will add by default all the characteristics of this rSpec to the related bundle parent service */ */ serviceSpec = copyCharacteristicsOfResourceSpecId( ar.getId(), serviceSpec); //serviceSpec = copyCharacteristicsOfResourceSpecId( ar.getId(), serviceSpec); } } } } Loading Loading @@ -696,24 +697,24 @@ public class ServiceSpecificationRepoService { return targetServiceSpec; return targetServiceSpec; } } private ServiceSpecification copyCharacteristicsOfResourceSpecId(String sourceResourceSpecid, ServiceSpecification targetServiceSpec) { // private ServiceSpecification copyCharacteristicsOfResourceSpecId(String sourceResourceSpecid, ServiceSpecification targetServiceSpec) { // ResourceSpecification rSpec = resourceSpecRepoService.findByUuid( sourceResourceSpecid ); // ResourceSpecification rSpec = resourceSpecRepoService.findByUuid( sourceResourceSpecid ); // if ( rSpec != null ) { // if ( rSpec != null ) { for (ResourceSpecificationCharacteristic sourceChar : rSpec.getResourceSpecCharacteristic()) { // for (ResourceSpecificationCharacteristic sourceChar : rSpec.getResourceSpecCharacteristic()) { ServiceSpecCharacteristic serviceSpecCharacteristicItem = copyResourceCharacteristic( sourceChar ); // ServiceSpecCharacteristic serviceSpecCharacteristicItem = copyResourceCharacteristic( sourceChar ); //serviceSpecCharacteristicItem.setName( rSpec.getName() + "::" +sourceChar.getName() ); // //serviceSpecCharacteristicItem.setName( rSpec.getName() + "::" +sourceChar.getName() ); serviceSpecCharacteristicItem.setName( sourceChar.getName() ); // serviceSpecCharacteristicItem.setName( sourceChar.getName() ); // if ( targetServiceSpec.findSpecCharacteristicByName( serviceSpecCharacteristicItem.getName() ) == null ) { // if ( targetServiceSpec.findSpecCharacteristicByName( serviceSpecCharacteristicItem.getName() ) == null ) { targetServiceSpec.getServiceSpecCharacteristic().add( serviceSpecCharacteristicItem ); // targetServiceSpec.getServiceSpecCharacteristic().add( serviceSpecCharacteristicItem ); } // } } // } } // } // return targetServiceSpec; // return targetServiceSpec; } // } public ServiceSpecification cloneServiceSpecification(String uuid) { public ServiceSpecification cloneServiceSpecification(String uuid) { ServiceSpecification source = this.findByUuid(uuid); ServiceSpecification source = this.findByUuid(uuid); Loading Loading @@ -1410,11 +1411,12 @@ public class ServiceSpecificationRepoService { serviceSpec.setType("ResourceFacingServiceSpecification"); serviceSpec.setType("ResourceFacingServiceSpecification"); for (ResourceSpecificationCharacteristic sourceChar : rSpec.getResourceSpecCharacteristic()) { ServiceSpecCharacteristic serviceSpecCharacteristicItem = copyResourceCharacteristic( sourceChar ); // for (ResourceSpecificationCharacteristic sourceChar : rSpec.getResourceSpecCharacteristic()) { serviceSpecCharacteristicItem.setName( rSpec.getName() + "::" +sourceChar.getName() ); // ServiceSpecCharacteristic serviceSpecCharacteristicItem = copyResourceCharacteristic( sourceChar ); serviceSpec.addServiceSpecCharacteristicItem(serviceSpecCharacteristicItem ); // serviceSpecCharacteristicItem.setName( rSpec.getName() + "::" +sourceChar.getName() ); } // serviceSpec.addServiceSpecCharacteristicItem(serviceSpecCharacteristicItem ); // } ResourceSpecificationRef resourceSpecRef = new ResourceSpecificationRef(); ResourceSpecificationRef resourceSpecRef = new ResourceSpecificationRef(); Loading @@ -1427,25 +1429,25 @@ public class ServiceSpecificationRepoService { return serviceSpec; return serviceSpec; } } private ServiceSpecCharacteristic copyResourceCharacteristic( ResourceSpecificationCharacteristic sourceChar ) { // private ServiceSpecCharacteristic copyResourceCharacteristic( ResourceSpecificationCharacteristic sourceChar ) { // ServiceSpecCharacteristic serviceSpecCharacteristicItem = new ServiceSpecCharacteristic(); // ServiceSpecCharacteristic serviceSpecCharacteristicItem = new ServiceSpecCharacteristic(); serviceSpecCharacteristicItem.setDescription( sourceChar.getDescription()); // serviceSpecCharacteristicItem.setDescription( sourceChar.getDescription()); serviceSpecCharacteristicItem.valueType( sourceChar.getValueType() ); // serviceSpecCharacteristicItem.valueType( sourceChar.getValueType() ); serviceSpecCharacteristicItem.configurable(sourceChar.isConfigurable()); // serviceSpecCharacteristicItem.configurable(sourceChar.isConfigurable()); serviceSpecCharacteristicItem.setMinCardinality( sourceChar.getMinCardinality() ); // serviceSpecCharacteristicItem.setMinCardinality( sourceChar.getMinCardinality() ); serviceSpecCharacteristicItem.setMaxCardinality( sourceChar.getMaxCardinality() ); // serviceSpecCharacteristicItem.setMaxCardinality( sourceChar.getMaxCardinality() ); serviceSpecCharacteristicItem.setValidFor( sourceChar.getValidFor() ); // serviceSpecCharacteristicItem.setValidFor( sourceChar.getValidFor() ); for (ResourceSpecificationCharacteristicValue cv : sourceChar.getResourceSpecCharacteristicValue()) { // for (ResourceSpecificationCharacteristicValue cv : sourceChar.getResourceSpecCharacteristicValue()) { ServiceSpecCharacteristicValue serviceSpecCharacteristicValueItem = new ServiceSpecCharacteristicValue(); // ServiceSpecCharacteristicValue serviceSpecCharacteristicValueItem = new ServiceSpecCharacteristicValue(); serviceSpecCharacteristicValueItem.setValue( new Any( cv.getValue().getValue(), cv.getValue().getAlias())); // serviceSpecCharacteristicValueItem.setValue( new Any( cv.getValue().getValue(), cv.getValue().getAlias())); serviceSpecCharacteristicValueItem.isDefault( cv.isIsDefault() ); // serviceSpecCharacteristicValueItem.isDefault( cv.isIsDefault() ); serviceSpecCharacteristicValueItem.setUnitOfMeasure( cv.getUnitOfMeasure() ); // serviceSpecCharacteristicValueItem.setUnitOfMeasure( cv.getUnitOfMeasure() ); serviceSpecCharacteristicItem.addServiceSpecCharacteristicValueItem(serviceSpecCharacteristicValueItem ); // serviceSpecCharacteristicItem.addServiceSpecCharacteristicValueItem(serviceSpecCharacteristicValueItem ); } // } return serviceSpecCharacteristicItem; // return serviceSpecCharacteristicItem; } // } // Loading
src/main/java/org/etsi/osl/tmf/sim638/api/ServiceApiRouteBuilder.java +1 −1 Original line number Original line Diff line number Diff line Loading @@ -131,7 +131,7 @@ public class ServiceApiRouteBuilder extends RouteBuilder { .log(LoggingLevel.INFO, log, CATALOG_UPD_SERVICE + " message received and will be processed for service inventory!") .log(LoggingLevel.INFO, log, CATALOG_UPD_SERVICE + " message received and will be processed for service inventory!") .to("log:DEBUG?showBody=true&showHeaders=true") .to("log:DEBUG?showBody=true&showHeaders=true") .unmarshal().json( JsonLibrary.Jackson, ServiceUpdate.class, true) .unmarshal().json( JsonLibrary.Jackson, ServiceUpdate.class, true) .bean( serviceRepoService, "updateService(${header.serviceid}, ${body}, ${header.propagateToSO} )") .bean( serviceRepoService, "updateService(${header.serviceid}, ${body}, ${header.triggerServiceActionQueue} )") .marshal().json( JsonLibrary.Jackson) .marshal().json( JsonLibrary.Jackson) .convertBodyTo( String.class ); .convertBodyTo( String.class ); Loading
src/main/java/org/etsi/osl/tmf/sim638/service/ServiceRepoService.java +121 −85 Original line number Original line Diff line number Diff line Loading @@ -340,8 +340,16 @@ public class ServiceRepoService { .orElse(null); .orElse(null); } } /** * @param id * @param servUpd * @param triggerServiceActionQueue * @param updatedFromParentService * @param updatedFromChildService * @return */ @Transactional @Transactional public Service updateService(String id, @Valid ServiceUpdate servUpd, boolean propagateToSO, Service updatedFromParentService, Service updatedFromChildService ) { public Service updateService(String id, @Valid ServiceUpdate servUpd, boolean triggerServiceActionQueue, Service updatedFromParentService, Service updatedFromChildService ) { //Service service = this.findByUuid(id); //Service service = this.findByUuid(id); Service service = this.getServiceEager(id); Service service = this.getServiceEager(id); Loading Loading @@ -452,7 +460,7 @@ public class ServiceRepoService { boolean serviceCharacteristicChangedContainsPrimitive = false; boolean serviceCharacteristicChangedContainsPrimitive = false; String charChangedForNotes = ""; String charChangedForNotes = ""; List<Characteristic> childCharacteristicsChanged = new ArrayList<>(); //List<Characteristic> childCharacteristicsChanged = new ArrayList<>(); //logger.info("==> Will update serviceToString: " + service.toString() ); //logger.info("==> Will update serviceToString: " + service.toString() ); Loading @@ -466,12 +474,15 @@ public class ServiceRepoService { Characteristic origChar = service.getServiceCharacteristicByName( n.getName() ); Characteristic origChar = service.getServiceCharacteristicByName( n.getName() ); if ( ( origChar !=null ) && ( origChar.getValue() !=null ) && ( origChar.getValue().getValue() !=null )) { if ( ( origChar !=null ) && ( origChar.getValue() !=null ) && ( origChar.getValue().getValue() !=null )) { if ( !origChar.getValue().getValue().equals(n.getValue().getValue()) ) { if ( !origChar.getValue().getValue().equals(n.getValue().getValue()) ) { if ( n.getName().contains("::") ) { // if ( n.getName().contains("::") ) { childCharacteristicsChanged.add(n); //the characteristic needs later to be propagated to its children // childCharacteristicsChanged.add(n); //the characteristic needs later to be propagated to its children // // } } if ( !n.getName().contains("::") ) { //it is not a child characteristic serviceCharacteristicChanged = true; //change only characteristics of this service serviceCharacteristicChanged = true; //change only characteristics of this service charChangedForNotes += n.getName(); charChangedForNotes += n.getName() + ", "; } if ( n.getName().toUpperCase().contains( "PRIMITIVE::" ) ){ if ( n.getName().toUpperCase().contains( "PRIMITIVE::" ) ){ serviceCharacteristicChangedContainsPrimitive = true; serviceCharacteristicChangedContainsPrimitive = true; } } Loading @@ -484,9 +495,11 @@ public class ServiceRepoService { ); ); } else { } else { service.addServiceCharacteristicItem(n); service.addServiceCharacteristicItem(n); if ( !n.getName().contains("::") ) { //it is not a child characteristic serviceCharacteristicChanged = true; serviceCharacteristicChanged = true; charChangedForNotes += n.getName() + ", "; charChangedForNotes += n.getName() + ", "; } } } } } } } Loading Loading @@ -555,7 +568,7 @@ public class ServiceRepoService { * Save in ServiceActionQueueItem * Save in ServiceActionQueueItem */ */ if (propagateToSO && stateChanged) { if (triggerServiceActionQueue && stateChanged) { ServiceActionQueueItem saqi = new ServiceActionQueueItem(); ServiceActionQueueItem saqi = new ServiceActionQueueItem(); saqi.setServiceRefId( id ); saqi.setServiceRefId( id ); saqi.setOriginalServiceInJSON( originaServiceAsJson ); saqi.setOriginalServiceInJSON( originaServiceAsJson ); Loading Loading @@ -588,7 +601,7 @@ public class ServiceRepoService { } } } } if ( serviceCharacteristicChanged && service.getState().equals( ServiceStateType.ACTIVE) && previousState!=null && previousState.equals( ServiceStateType.ACTIVE) ) { if ( serviceCharacteristicChanged && service.getState().equals( ServiceStateType.ACTIVE) && previousState!=null && previousState.equals( ServiceStateType.ACTIVE) && triggerServiceActionQueue ) { ServiceActionQueueItem saqi = new ServiceActionQueueItem(); ServiceActionQueueItem saqi = new ServiceActionQueueItem(); saqi.setServiceRefId( id ); saqi.setServiceRefId( id ); saqi.setOriginalServiceInJSON( originaServiceAsJson ); saqi.setOriginalServiceInJSON( originaServiceAsJson ); Loading @@ -596,65 +609,88 @@ public class ServiceRepoService { if ( serviceCharacteristicChangedContainsPrimitive ) { if ( serviceCharacteristicChangedContainsPrimitive ) { saqi.setAction( ServiceActionQueueAction.EVALUATE_CHARACTERISTIC_CHANGED_MANODAY2 ); saqi.setAction( ServiceActionQueueAction.EVALUATE_CHARACTERISTIC_CHANGED_MANODAY2 ); } } this.addServiceActionQueueItem(saqi); this.addServiceActionQueueItem(saqi); } } if ( serviceCharacteristicChanged) { /* /* * Update any parent service * Update any parent service */ */ for (ServiceRelationship serviceRelationship : service.getServiceRelationship()) { for (ServiceRelationship serviceRelationship : service.getServiceRelationship()) { if (serviceRelationship.getRelationshipType().equals("ChildService")) { if (serviceRelationship.getRelationshipType().equals("ChildService")) { if (serviceRelationship.getService() != null) { if (serviceRelationship.getService() != null) { if ( updatedFromParentService == null || (updatedFromParentService!=null && !updatedFromParentService.getId().equals(serviceRelationship.getService().getId())) ) { //avoid circular propagateCharacteristicsToParentService(service, serviceRelationship.getService().getId()); } if (serviceCharacteristicChanged) { if (updatedFromParentService == null || (updatedFromParentService != null && !updatedFromParentService.getId().equals(serviceRelationship.getService().getId()))) { // avoid circular ServiceActionQueueItem saqi = new ServiceActionQueueItem(); // this will trigger lcm rule to parent saqi.setServiceRefId(serviceRelationship.getService().getId()); try { saqi.setOriginalServiceInJSON( mapper.writeValueAsString( service ) ); //pass the child service as is } catch (JsonProcessingException e) { e.printStackTrace(); } } } saqi.setAction(ServiceActionQueueAction.EVALUATE_CHILD_CHARACTERISTIC_CHANGED); } this.addServiceActionQueueItem(saqi); } } if ( childCharacteristicsChanged.size()>0 ) { } if ( service.getSupportingService() != null ) { //propagate to children //copy characteristics values from CFS Service to its supporting services. for (ServiceRef sref : service.getSupportingService() ) { Service aSupportingService = this.findByUuid( sref.getId() ); ServiceUpdate supd = new ServiceUpdate(); boolean foundCharacteristicForChild = false; for (Characteristic supportingServiceChar : aSupportingService.getServiceCharacteristic() ) { for (Characteristic serviceCharacteristic : childCharacteristicsChanged ) { if (stateChanged) { if ( serviceCharacteristic.getName().contains( aSupportingService.getName() + "::" + supportingServiceChar.getName() )) { if (updatedFromParentService == null || (updatedFromParentService != null && !updatedFromParentService.getId().equals(serviceRelationship.getService().getId()))) { // avoid circular //supportingServiceChar.setValue( serviceCharacteristic.getValue() ); ServiceActionQueueItem saqi = new ServiceActionQueueItem(); // this will trigger lcm rule to parent Characteristic cNew = new Characteristic(); saqi.setServiceRefId(serviceRelationship.getService().getId()); cNew.setName(supportingServiceChar.getName()); try { cNew.value( new Any( serviceCharacteristic.getValue() )); saqi.setOriginalServiceInJSON( mapper.writeValueAsString( service ) ); //pass the child service as is supd.addServiceCharacteristicItem( cNew ); } catch (JsonProcessingException e) { foundCharacteristicForChild = true; e.printStackTrace(); } } saqi.setAction(ServiceActionQueueAction.EVALUATE_CHILD_STATE_CHANGE ); this.addServiceActionQueueItem(saqi); } } } } if ( foundCharacteristicForChild ) { Note n = new Note(); n.setText("Child Characteristics Changed" ); n.setAuthor( "SIM638-API" ); n.setDate( OffsetDateTime.now(ZoneOffset.UTC).toString() ); supd.addNoteItem( n ); if ( updatedFromChildService == null || (updatedFromChildService!=null && !updatedFromChildService.getId().equals( aSupportingService.getId())) ) { //avoid circular this.updateService( aSupportingService.getId(), supd , false, service, null); //update the service } } } } } } } // if ( childCharacteristicsChanged.size()>0 ) { } // if ( service.getSupportingService() != null ) { //propagate to children // //copy characteristics values from CFS Service to its supporting services. // for (ServiceRef sref : service.getSupportingService() ) { // Service aSupportingService = this.findByUuid( sref.getId() ); // ServiceUpdate supd = new ServiceUpdate(); // boolean foundCharacteristicForChild = false; // for (Characteristic supportingServiceChar : aSupportingService.getServiceCharacteristic() ) { // // for (Characteristic serviceCharacteristic : childCharacteristicsChanged ) { // if ( serviceCharacteristic.getName().contains( aSupportingService.getName() + "::" + supportingServiceChar.getName() )) { // //supportingServiceChar.setValue( serviceCharacteristic.getValue() ); // Characteristic cNew = new Characteristic(); // cNew.setName(supportingServiceChar.getName()); // cNew.value( new Any( serviceCharacteristic.getValue() )); // supd.addServiceCharacteristicItem( cNew ); // foundCharacteristicForChild = true; // } // } // } // // if ( foundCharacteristicForChild ) { // Note n = new Note(); // n.setText("Child Characteristics Changed" ); // n.setAuthor( "SIM638-API" ); // n.setDate( OffsetDateTime.now(ZoneOffset.UTC).toString() ); // supd.addNoteItem( n ); // if ( updatedFromChildService == null || // (updatedFromChildService!=null && !updatedFromChildService.getId().equals( aSupportingService.getId())) ) { //avoid circular // this.updateService( aSupportingService.getId(), supd , false, service, null); //update the service // } // } // } // // } // } Loading Loading @@ -692,19 +728,19 @@ public class ServiceRepoService { * @param service * @param service * @param parentService * @param parentService */ */ private void propagateCharacteristicsToParentService(Service childService, String parentServiceId) { // private void propagateCharacteristicsToParentService(Service childService, String parentServiceId) { // ServiceUpdate servUpd = new ServiceUpdate(); // ServiceUpdate servUpd = new ServiceUpdate(); // for (Characteristic n : childService.getServiceCharacteristic()) { // for (Characteristic n : childService.getServiceCharacteristic()) { Characteristic serviceCharacteristicItem = new Characteristic(); // Characteristic serviceCharacteristicItem = new Characteristic(); serviceCharacteristicItem.setName( childService.getName() + "::" + n.getName()); // serviceCharacteristicItem.setName( childService.getName() + "::" + n.getName()); serviceCharacteristicItem.setValue( new Any( n.getValue() )); // serviceCharacteristicItem.setValue( new Any( n.getValue() )); servUpd.addServiceCharacteristicItem(serviceCharacteristicItem); // servUpd.addServiceCharacteristicItem(serviceCharacteristicItem); } // } // this.updateService( parentServiceId, servUpd, false, null, childService); // this.updateService( parentServiceId, servUpd, false, null, childService); } // } public String getServiceEagerAsString(String id) throws JsonProcessingException { public String getServiceEagerAsString(String id) throws JsonProcessingException { Service s = this.getServiceEager(id); Service s = this.getServiceEager(id); Loading Loading @@ -801,8 +837,8 @@ public class ServiceRepoService { logger.debug("Will add ServiceActionQueueItem ServiceRefId: " + item.getServiceRefId() ); logger.debug("Will add ServiceActionQueueItem ServiceRefId: " + item.getServiceRefId() ); //find any similar action inqueue and delete them, so to keep this one as the most recent //find any similar action inqueue and delete them, so to keep this one as the most recent //List<ServiceActionQueueItem> result = this.serviceActionQueueRepo.findByServiceRefIdAndAction(item.getServiceRefId(), item.getAction()); List<ServiceActionQueueItem> result = this.serviceActionQueueRepo.findByServiceRefIdAndAction(item.getServiceRefId(), item.getAction()); //logger.debug("Will add ServiceActionQueueItem ServiceRefId result: " +result.size() ); logger.debug("Will add ServiceActionQueueItem ServiceRefId result: " +result.size() ); this.serviceActionQueueRepo.deleteByServiceRefIdAndAction(item.getServiceRefId(), item.getAction()); this.serviceActionQueueRepo.deleteByServiceRefIdAndAction(item.getServiceRefId(), item.getAction()); return this.serviceActionQueueRepo.save( item); return this.serviceActionQueueRepo.save( item); Loading