Commit a198269e authored by Kostis Trantzas's avatar Kostis Trantzas
Browse files

Merge branch 'optimize_lcm_characteristics' into 'develop'

fix for #55

See merge request !49
parents a519a063 a2b39b68
Loading
Loading
Loading
Loading
Loading
+67 −17
Original line number Diff line number Diff line
@@ -24,11 +24,14 @@ import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
@@ -350,6 +353,22 @@ public class ServiceRepoService {
				.orElse(null);
	}

	/**
	 * @param id
	 * @param servUpd
	 * @param triggerServiceActionQueue
	 * @param updatedFromParentService
	 * @param updatedFromChildService
	 * @return
	 */
	/**
	 * @param id
	 * @param servUpd
	 * @param triggerServiceActionQueue
	 * @param updatedFromParentService
	 * @param updatedFromChildService
	 * @return
	 */
	/**
	 * @param id
	 * @param servUpd
@@ -572,6 +591,28 @@ public class ServiceRepoService {
		}
		
		
		/**
		 * Check here if the characteristics changed are of interest for LCM rules and further processing by the orchestrator 
		 */
		Characteristic lcmchar = service.getServiceCharacteristicByName("_LCM_CHARACTERISTICS_");
        if ( lcmchar != null && lcmchar.getValue() != null && !lcmchar.getValue().getValue().equals("all") && !charChangedForNotes.equals("")) {
          
          // Split the strings into arrays of values
          String[] arrayA = lcmchar.getValue().getValue().split(",");
          String[] arrayB = charChangedForNotes.split(",");
          // Convert strb values into a set for faster lookup
          Set<String> setB = new HashSet<>(Arrays.asList(arrayB));
          // Check if any value from stra exists in strb
          boolean valueExists = false;
          for (String value : arrayA) {
              if (setB.contains(value)) {
                valueExists = true; // A common value exists
              }
          }
          if (!valueExists) {
            serviceCharacteristicChanged=false;
          }
        }
		
        if (charChangedForNotes.contains( "reconciledAt") ) { //this is just a sync message, so we need to igore such changes
          serviceCharacteristicChanged = false;
@@ -597,7 +638,13 @@ public class ServiceRepoService {
		
		service = this.serviceRepo.save( service );
		
		
	    String requestedServiceAsJson = null;
	    try {
	      requestedServiceAsJson = mapper.writeValueAsString( service );
	    } catch (JsonProcessingException e) {
	      logger.error("cannot umarshall service: " + service.getName() );
	      e.printStackTrace();
	    }
		
		/**
		 * Save in ServiceActionQueueItem
@@ -617,7 +664,7 @@ public class ServiceRepoService {
		  }

		  if ( saqi.getAction() != ServiceActionQueueAction.NONE  ) {
		    this.addServiceActionQueueItem(saqi);					
		    this.addServiceActionQueueItem(service, saqi);					
		  }
		}		

@@ -629,10 +676,10 @@ public class ServiceRepoService {
			saqi.setOriginalServiceInJSON( originaServiceAsJson );		
			if ( service.getState().equals(  ServiceStateType.ACTIVE) ) {
				saqi.setAction( ServiceActionQueueAction.EVALUATE_STATE_CHANGE_TOACTIVE  );	
				this.addServiceActionQueueItem(saqi);			
				this.addServiceActionQueueItem(service, saqi);			
			}else if ( previousState!=null && previousState.equals( ServiceStateType.ACTIVE) ) {
				saqi.setAction( ServiceActionQueueAction.EVALUATE_STATE_CHANGE_TOINACTIVE  );
				this.addServiceActionQueueItem(saqi);
				this.addServiceActionQueueItem(service, saqi);
			}
		}		
		
@@ -644,7 +691,7 @@ public class ServiceRepoService {
			if ( serviceCharacteristicChangedContainsPrimitive ) {
				saqi.setAction( ServiceActionQueueAction.EVALUATE_CHARACTERISTIC_CHANGED_MANODAY2  );					
			}
			this.addServiceActionQueueItem(saqi);
			this.addServiceActionQueueItem(service, saqi);
		}
		
		
@@ -670,7 +717,7 @@ public class ServiceRepoService {
                    e.printStackTrace();
                  }
                  saqi.setAction(ServiceActionQueueAction.EVALUATE_CHILD_CHARACTERISTIC_CHANGED);
                  this.addServiceActionQueueItem(saqi);
                  this.addServiceActionQueueItem(service, saqi);
                }

              }
@@ -685,7 +732,7 @@ public class ServiceRepoService {
                    e.printStackTrace();
                  }
                  saqi.setAction(ServiceActionQueueAction.EVALUATE_CHILD_STATE_CHANGE );
                  this.addServiceActionQueueItem(saqi);
                  this.addServiceActionQueueItem(service, saqi);
                }
              }

@@ -956,17 +1003,20 @@ public class ServiceRepoService {
		return (List<ServiceActionQueueItem>) this.serviceActionQueueRepo.findFirst10ByOrderByInsertedDate();
	}
	
	public ServiceActionQueueItem  addServiceActionQueueItem(@Valid ServiceActionQueueItem item) {
	public ServiceActionQueueItem  addServiceActionQueueItem(Service service, @Valid ServiceActionQueueItem item) {
		logger.debug("Will add ServiceActionQueueItem ServiceRefId: " + item.getServiceRefId() );
		
		
		
		Characteristic lcmchar = service.getServiceCharacteristicByName("_LCM_CHARACTERISTICS_");
		if ( lcmchar == null || lcmchar.getValue() == null) {
		    //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());
	        logger.debug("Will add ServiceActionQueueItem ServiceRefId result: " +result.size() );
	        this.serviceActionQueueRepo.deleteByServiceRefIdAndAction(item.getServiceRefId(), item.getAction());
	          
		}

        return this.serviceActionQueueRepo.save( item);
		
	}

	/**
+4 −1
Original line number Diff line number Diff line
@@ -127,7 +127,10 @@ public class ServiceRepoServiceTest {
    @Test
    public void testDeleteServiceActionQueueItemByUuid() throws Exception {
        ServiceActionQueueItem saqi = new ServiceActionQueueItem();
        ServiceActionQueueItem saqiResponse = serviceRepoService.addServiceActionQueueItem(saqi);
        String response = createService();
        Service aservice = JsonUtils.toJsonObj(response,  Service.class);
        
        ServiceActionQueueItem saqiResponse = serviceRepoService.addServiceActionQueueItem(aservice, saqi);
        String uuid = saqiResponse.getUuid();

        serviceRepoService.deleteServiceActionQueueItemByUuid(uuid);