Commit ff7c68d9 authored by Christos Tranoris's avatar Christos Tranoris
Browse files

fix for #14

parent 759720f9
Loading
Loading
Loading
Loading
Loading
+73 −0
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ package org.etsi.osl.tmf.sim638.model;

import java.time.OffsetDateTime;
import java.util.HashSet;
import java.util.List;
import java.util.Objects;
import java.util.Set;

@@ -35,6 +36,7 @@ import org.etsi.osl.tmf.common.model.service.ServiceRelationship;
import org.etsi.osl.tmf.common.model.service.ServiceSpecificationRef;
import org.etsi.osl.tmf.common.model.service.ServiceStateType;
import org.etsi.osl.tmf.prm669.model.RelatedParty;
import org.etsi.osl.tmf.ri639.model.Resource;
import org.springframework.validation.annotation.Validated;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.persistence.CascadeType;
@@ -781,4 +783,75 @@ public class Service extends BaseRootNamedEntity {
		}
		return null;
	}
	
	/**
	 * @param supportingResources
	 * @return
	 */
	public ServiceStateType findNextStateBasedOnSupportingResources(List<Resource> supportingResources) {
      @Valid
      ServiceStateType nextState = this.getState() ;
      boolean allActive = this.getSupportingResource().size() > 0 ;
      boolean allTerminated = this.getSupportingResource().size() > 0 ;
      boolean existsInactive=false;
      boolean existsTerminated=false;
      boolean existsReserved=false;
      
      for ( Resource res : supportingResources ) {
                    
          if ( res.getResourceStatus() != null ) {
            switch (res.getResourceStatus()) {
              case AVAILABLE: {
                nextState = ServiceStateType.ACTIVE;
                break;
              }
              case STANDBY: {
                nextState = ServiceStateType.RESERVED;
                break;
              }
              case SUSPENDED: {
                nextState = ServiceStateType.INACTIVE;
                break;
              }
              case RESERVED: {
                nextState = ServiceStateType.RESERVED;
                break;
              }
              case UNKNOWN: {
                if (this.getState().equals( ServiceStateType.ACTIVE  )) {
                  nextState = ServiceStateType.TERMINATED;              
                }
                break;
              }
              case ALARM: {
                nextState = ServiceStateType.INACTIVE;
                break;
              }
              default:
                throw new IllegalArgumentException("Unexpected value: " + res.getResourceStatus());
            } 
          }

          allActive = allActive && nextState == ServiceStateType.ACTIVE;
          allTerminated = allTerminated && nextState == ServiceStateType.TERMINATED;
          existsInactive = existsInactive || nextState == ServiceStateType.INACTIVE;
          existsTerminated = existsTerminated || nextState == ServiceStateType.TERMINATED;
          existsReserved = existsReserved || nextState == ServiceStateType.RESERVED;
          
       
          if ( allActive ) {
            return ServiceStateType.ACTIVE ; 
          } else if ( allTerminated ) {
            return ServiceStateType.TERMINATED ; 
          } else if ( existsInactive ) {
            return ServiceStateType.INACTIVE ; 
          } else if ( existsReserved ) {
            return ServiceStateType.RESERVED ; 
          } else if ( existsTerminated ) {
            return ServiceStateType.INACTIVE ; 
          }
	  
      }
      return nextState;      
	}
}