diff --git a/src/main/java/org/etsi/osl/tmf/ri639/api/ResourceApiRouteBuilder.java b/src/main/java/org/etsi/osl/tmf/ri639/api/ResourceApiRouteBuilder.java index 17f3ec5a7707a7772789844775ad0b58307deac4..fc6252fb05e6d79fbf958ccdbd8348d8fa1114b9 100644 --- a/src/main/java/org/etsi/osl/tmf/ri639/api/ResourceApiRouteBuilder.java +++ b/src/main/java/org/etsi/osl/tmf/ri639/api/ResourceApiRouteBuilder.java @@ -92,7 +92,7 @@ public class ResourceApiRouteBuilder extends RouteBuilder { .log(LoggingLevel.INFO, log, CATALOG_UPD_RESOURCE + " message received!") .to("log:DEBUG?showBody=true&showHeaders=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) .convertBodyTo( String.class ); diff --git a/src/main/java/org/etsi/osl/tmf/sim638/service/ServiceRepoService.java b/src/main/java/org/etsi/osl/tmf/sim638/service/ServiceRepoService.java index 429af505315d602735864d2102c834efbd9aa29a..843bcf1a21df58027ca0256bee85358a7b808cb5 100644 --- a/src/main/java/org/etsi/osl/tmf/sim638/service/ServiceRepoService.java +++ b/src/main/java/org/etsi/osl/tmf/sim638/service/ServiceRepoService.java @@ -23,6 +23,7 @@ import java.io.UnsupportedEncodingException; import java.time.OffsetDateTime; import java.time.ZoneOffset; import java.util.ArrayList; +import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -46,6 +47,7 @@ import org.etsi.osl.tmf.ri639.model.Resource; import org.etsi.osl.tmf.ri639.model.ResourceAttributeValueChangeNotification; import org.etsi.osl.tmf.ri639.model.ResourceCreateNotification; import org.etsi.osl.tmf.ri639.model.ResourceStateChangeNotification; +import org.etsi.osl.tmf.ri639.repo.ResourceRepository; import org.etsi.osl.tmf.scm633.reposervices.ServiceSpecificationRepoService; import org.etsi.osl.tmf.sim638.api.ServiceApiRouteBuilderEvents; import org.etsi.osl.tmf.sim638.model.Service; @@ -88,6 +90,10 @@ public class ServiceRepoService { @Autowired ServiceRepository serviceRepo; + + @Autowired + ResourceRepository resourceRepo; + @Autowired ServiceActionQueueRepository serviceActionQueueRepo; @@ -1005,126 +1011,59 @@ public class ServiceRepoService { @Transactional - public void resourceCreatedEvent(@Valid ResourceCreateNotification resNotif) { - + public void resourceCreatedEvent(@Valid ResourceCreateNotification resNotif) { logger.debug("resourceCreatedEvent"); Resource res = resNotif.getEvent().getEvent().getResource(); - logger.info("Will update services related to this resource with id = " + res.getId() ); - - var aservices = findServicesHavingThisSupportingResourceID( res.getId() ); - - for (Service as : aservices) { - ServiceUpdate supd = new ServiceUpdate(); - - Service aService = findByUuid(as.getId()); - - //if ( aService.getState().equals( ServiceStateType.ACTIVE ) ) { - if ( res.getResourceStatus() != null ) { - switch (res.getResourceStatus()) { - case STANDBY: { - supd.setState( ServiceStateType.RESERVED); - break; - } - case SUSPENDED: { - supd.setState( ServiceStateType.INACTIVE); - break; - } - case RESERVED: { - supd.setState( ServiceStateType.RESERVED); - break; - } - case UNKNOWN: { - if (aService.getState().equals( ServiceStateType.ACTIVE )) { - supd.setState( ServiceStateType.TERMINATED); - } - break; - } - case ALARM: { - supd.setState( ServiceStateType.INACTIVE); - break; - } - default: - break; - } - } - - - Note n = new Note(); - n.setText("Supporting Resource "+ res.getId() + " State Changed with status: " + res.getResourceStatus()); - n.setAuthor( "SIM638-API" ); - n.setDate( OffsetDateTime.now(ZoneOffset.UTC).toString() ); - supd.addNoteItem( n ); - - this.updateService( aService.getId(), supd , true, null, null); //update the service - //} //if ( aService.getState().equals( ServiceStateType.ACTIVE ) ) { - } - - - updateResourceFromKubernetesLabel( res ); - - + updateServiceFromresourceChange(res); } - @Transactional - public void resourceStateChangedEvent(@Valid ResourceStateChangeNotification resNotif) { - - logger.debug("resourceStateChangedEvent"); + @Transactional + public void resourceStateChangedEvent(@Valid ResourceStateChangeNotification resNotif) { + + logger.debug("resourceStateChangedEvent"); Resource res = resNotif.getEvent().getEvent().getResource(); - logger.info("Will update services related to this resource with id = " + res.getId() ); - - var aservices = findServicesHavingThisSupportingResourceID( res.getId() ); + updateServiceFromresourceChange(res); + } + private void updateServiceFromresourceChange(Resource res) { + + logger.info("Will update services related to this resource with id = " + res.getId() ); + var aservices = findServicesHavingThisSupportingResourceID(res.getId()); + for (Service as : aservices) { + + Service aService = findByUuid(as.getId()); + + + List rlist = new ArrayList(); + for (ResourceRef rref : aService.getSupportingResource()) { + Optional result = resourceRepo.findByUuid(rref.getId()); + if (result.isPresent()) { + rlist.add( result.get() ); + } + } + + rlist.add(res); //add also this one + + ServiceStateType nextState = aService.findNextStateBasedOnSupportingResources(rlist); + ServiceUpdate supd = new ServiceUpdate(); - - Service aService = findByUuid(as.getId()); - - //if ( aService.getState().equals( ServiceStateType.ACTIVE ) ) { - if ( res.getResourceStatus() != null ) { - switch (res.getResourceStatus()) { - case STANDBY: { - supd.setState( ServiceStateType.RESERVED); - break; - } - case SUSPENDED: { - supd.setState( ServiceStateType.INACTIVE); - break; - } - case RESERVED: { - supd.setState( ServiceStateType.RESERVED); - break; - } - case UNKNOWN: { - if (aService.getState().equals( ServiceStateType.ACTIVE )) { - supd.setState( ServiceStateType.TERMINATED); - } - break; - } - case ALARM: { - supd.setState( ServiceStateType.INACTIVE); - break; - } - default: - break; - } - } - - - Note n = new Note(); - n.setText("Supporting Resource "+ res.getId() + " State Changed with status: " + res.getResourceStatus()); - n.setAuthor( "SIM638-API" ); - n.setDate( OffsetDateTime.now(ZoneOffset.UTC).toString() ); - supd.addNoteItem( n ); - - this.updateService( aService.getId(), supd , true, null, null); //update the service - //} //if ( aService.getState().equals( ServiceStateType.ACTIVE ) ) { + supd.setState(nextState); + Note n = new Note(); + n.setText("Supporting Resource " + res.getId() + " State Changed with status: " + + res.getResourceStatus() + ".Next state is " + nextState); + n.setAuthor("SIM638-API"); + n.setDate(OffsetDateTime.now(ZoneOffset.UTC).toString()); + supd.addNoteItem(n); + + this.updateService(aService.getId(), supd, true, null, null); // update the service } - - - updateResourceFromKubernetesLabel( res ); - - + + + updateResourceFromKubernetesLabel(res); + + } private void updateResourceFromKubernetesLabel(Resource res) {