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 2202dcf4b0005cd46d353d2082be85056a97024a..9e7bb038f73479632e8f636bb600bbf8ab7cd946 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 @@ -1155,14 +1155,16 @@ public class ServiceRepoService { public void updateServicesHavingThisSupportingResource(@Valid Resource res) { try { - logger.debug("================> Will update services related to this resource with id = " + res.getId() ); + logger.debug("Will update services related to this resource with id = " + res.getId() ); + var aservices = findServicesHavingThisSupportingResourceID( res.getId() ); + + logger.debug("services.found = " + aservices.size() ); for (Service as : aservices) { - Service aService = getServiceEager(as.getId()); - - ServiceStateType nextState = aService.getState(); + Service aService = findByUuid(as.getId()); + List<Resource> rlist = new ArrayList<Resource>(); for (ResourceRef rref : aService.getSupportingResource()) { Optional<Resource> result = resourceRepo.findByUuid(rref.getId()); @@ -1170,101 +1172,41 @@ public class ServiceRepoService { rlist.add( result.get() ); } } + + rlist.add(res); //add also this one - //copy characteristics, from resource to service - - /* - * Construct characteristic name - */ - String kind = ""; - String resourcename = res.getName() ; - - org.etsi.osl.tmf.ri639.model.Characteristic ckind = res.getResourceCharacteristicByName("Kind"); - if ( ckind != null && ckind.getValue() != null) { - kind = ckind.getValue().getValue() ; //example "ConfigMap" - } - - if ( res.getName().indexOf('@')>0) { - String firstToken = res.getName().substring( 0, res.getName().indexOf('@') ); - resourcename = firstToken ; //example "cr0fc1234-amf" - } - - Boolean resourceIsSameKind = aService.checkIsKindResource(res); - if (resourceIsSameKind) { //if this service is the same kind as the resource then don't prefix the characteristic - kind = ""; - resourcename=""; - //rlist.add(res); //add only this one - }else { - //enable the following to remove crXXXXXX prefix in name -// org.etsi.osl.tmf.ri639.model.Characteristic kubinstance = res.getResourceCharacteristicByName("app.kubernetes.io/instance"); -// if ( kubinstance != null && kubinstance.getValue() != null) { -// String removePrefix = kubinstance.getValue().getValue(); -// resourcename = resourcename.replace( removePrefix + "-", ""); -// resourcename = resourcename.replace( removePrefix, ""); -// } - kind = kind + "."; - resourcename = resourcename + "."; - } - - - - ServiceUpdate supd = new ServiceUpdate(); - nextState = aService.findNextStateBasedOnResourceList(rlist); - supd.setState(nextState); - String stateText=""; - if ( !aService.getState().equals(nextState)) { - stateText = "State changed from " + aService.getState() + " to " + nextState + "."; - logger.debug("====================> stateText = " + stateText); - for (Resource r : rlist) { - logger.debug("==================> s:"+ r.getResourceStatus().name()+ ", name:"+ r.getName() ); - + ServiceStateType nextState = aService.findNextStateBasedOnSupportingResources(rlist); + + ServiceUpdate supd = new ServiceUpdate(); + supd.setState(nextState); + String stateText=""; + if ( !aService.getState().equals(nextState)) { + stateText = "State changed from " + aService.getState() + " to " + nextState + "."; } - } - - //adding all characteristics from service - for (Characteristic ch : aService.getServiceCharacteristic()) { - supd.addServiceCharacteristicItem(ch); - } - - - String dontCopyChars = "clusterMasterURL,currentContextCluster,fullResourceName,Kind,apiGroup,UID,metadata"; - String[] arrayDontCopyChars = dontCopyChars.split(","); - Set<String> setB = new HashSet<>(Arrays.asList(arrayDontCopyChars)); - for (org.etsi.osl.tmf.ri639.model.Characteristic rChar : res.getResourceCharacteristic()) { - if ( resourceIsSameKind || ( !setB.contains( rChar.getName()) && !rChar.getName().startsWith("org.etsi.osl") ) ){ //don;t copy characteristics in set - if ( rChar.getValue() != null ) { - - String characteristicname = kind + resourcename + rChar.getName(); - if ( supd.getServiceCharacteristicByName( characteristicname ) != null ) { - supd.getServiceCharacteristicByName( characteristicname ) .value(new Any( rChar.getValue() )); - } else { - Characteristic cNew = new Characteristic(); - cNew.setName( characteristicname ); - cNew.value( new Any( rChar.getValue() )); - supd.addServiceCharacteristicItem( cNew ); - - } - - - } + + + //copy characteristics, from resource to service + + for (org.etsi.osl.tmf.ri639.model.Characteristic rChar : res.getResourceCharacteristic()) { + Characteristic cNew = new Characteristic(); + cNew.setName( rChar.getName()); + cNew.value( new Any( rChar.getValue() )); + supd.addServiceCharacteristicItem( cNew ); } - - } - - Characteristic noteCheck = as.getServiceCharacteristicByName("_DETAILED_NOTES_"); - if ( noteCheck!= null - && noteCheck.getValue() != null - && noteCheck.getValue().getValue() != null - && !noteCheck.getValue().getValue().equals("")) { - Note n = new Note(); - n.setText(stateText + "Supporting Resource changed with id: " + res.getId()); - 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 + Characteristic noteCheck = as.getServiceCharacteristicByName("_DETAILED_NOTES_"); + if ( noteCheck!= null + && noteCheck.getValue() != null + && noteCheck.getValue().getValue() != null + && !noteCheck.getValue().getValue().equals("")) { + Note n = new Note(); + n.setText(stateText + "Supporting Resource changed with id: " + res.getId()); + 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 } @@ -1276,8 +1218,6 @@ public class ServiceRepoService { } - - @Transactional public void resourceCreatedEvent(@Valid ResourceCreateNotification resNotif) { try { @@ -1307,10 +1247,12 @@ public class ServiceRepoService { @Transactional private void updateServiceFromresourceChange(Resource res) { - - addAnyNewRelatedResourcesFromKubernetesLabel(res); + updateServicesHavingThisSupportingResource(res); - + + addAnyNewRelatedResourcesFromKubernetesLabel(res); + + } /** @@ -1331,7 +1273,7 @@ public class ServiceRepoService { String serviceId = res.getResourceCharacteristicByName("org.etsi.osl.serviceId").getValue().getValue(); logger.debug("rserviceId: " + serviceId); - Service aService = getServiceEager( serviceId ); + Service aService = findByUuid( serviceId ); if ( aService !=null ) { logger.debug("aService found "); Boolean resourceFoundInSupportedResourcesOfService = false; @@ -1350,7 +1292,14 @@ public class ServiceRepoService { rref.id(res.getId()).name(res.getName()); supd.addSupportingResourceItem(rref ); - + //copy characteristics from resource to service + for (org.etsi.osl.tmf.ri639.model.Characteristic rChar : res.getResourceCharacteristic()) { + Characteristic cNew = new Characteristic(); + cNew.setName( rChar.getName()); + cNew.value( new Any( rChar.getValue() )); + supd.addServiceCharacteristicItem( cNew ); + } + Note n = new Note(); n.setText("Supporting Resource "+ res.getId() + " Added in service" );