Removed checkstyle warnings 53/37153/1
authormmis <michael.morris@ericsson.com>
Tue, 20 Mar 2018 15:02:53 +0000 (15:02 +0000)
committermmis <michael.morris@ericsson.com>
Tue, 20 Mar 2018 15:09:50 +0000 (15:09 +0000)
Removed checkstyle warnings in policy/common/im

Issue-ID: POLICY-695
Change-Id: I32b4797249386c0d1bd0f50792880a1759503a67
Signed-off-by: mmis <michael.morris@ericsson.com>
29 files changed:
integrity-monitor/src/main/java/org/onap/policy/common/im/AdministrativeStateException.java
integrity-monitor/src/main/java/org/onap/policy/common/im/AllSeemsWellException.java
integrity-monitor/src/main/java/org/onap/policy/common/im/ForwardProgressException.java
integrity-monitor/src/main/java/org/onap/policy/common/im/IntegrityMonitor.java
integrity-monitor/src/main/java/org/onap/policy/common/im/IntegrityMonitorException.java
integrity-monitor/src/main/java/org/onap/policy/common/im/IntegrityMonitorProperties.java
integrity-monitor/src/main/java/org/onap/policy/common/im/IntegrityMonitorPropertiesException.java
integrity-monitor/src/main/java/org/onap/policy/common/im/StandbyStatusException.java
integrity-monitor/src/main/java/org/onap/policy/common/im/StateChangeNotifier.java
integrity-monitor/src/main/java/org/onap/policy/common/im/StateElement.java
integrity-monitor/src/main/java/org/onap/policy/common/im/StateManagement.java
integrity-monitor/src/main/java/org/onap/policy/common/im/StateTransition.java
integrity-monitor/src/main/java/org/onap/policy/common/im/StateTransitionException.java
integrity-monitor/src/main/java/org/onap/policy/common/im/jmx/ComponentAdmin.java
integrity-monitor/src/main/java/org/onap/policy/common/im/jmx/ComponentAdminException.java
integrity-monitor/src/main/java/org/onap/policy/common/im/jmx/ComponentAdminMBean.java
integrity-monitor/src/main/java/org/onap/policy/common/im/jmx/JmxAgentConnection.java
integrity-monitor/src/main/java/org/onap/policy/common/im/jpa/ForwardProgressEntity.java
integrity-monitor/src/main/java/org/onap/policy/common/im/jpa/ImTestEntity.java
integrity-monitor/src/main/java/org/onap/policy/common/im/jpa/ResourceRegistrationEntity.java
integrity-monitor/src/main/java/org/onap/policy/common/im/jpa/StateManagementEntity.java
integrity-monitor/src/test/java/org/onap/policy/common/im/AllSeemsWellTest.java
integrity-monitor/src/test/java/org/onap/policy/common/im/ExceptionsTest.java
integrity-monitor/src/test/java/org/onap/policy/common/im/IntegrityMonitorTest.java
integrity-monitor/src/test/java/org/onap/policy/common/im/IntegrityMonitorTestBase.java
integrity-monitor/src/test/java/org/onap/policy/common/im/StateManagementEntityTest.java
integrity-monitor/src/test/java/org/onap/policy/common/im/StateManagementTest.java
integrity-monitor/src/test/java/org/onap/policy/common/im/StateTransitionTest.java
integrity-monitor/src/test/java/org/onap/policy/common/im/exceptions/EntityRetrievalExceptionTest.java

index 600d860..14e0f0a 100644 (file)
 package org.onap.policy.common.im;
 
 public class AdministrativeStateException extends IntegrityMonitorException {
-       private static final long serialVersionUID = 1L;
-       public AdministrativeStateException() {
-               super();
-       }
-       public AdministrativeStateException(String message) {
-               super(message);
-       }
+    private static final long serialVersionUID = 1L;
 
-       public AdministrativeStateException(Throwable cause) {
-               super(cause);
-       }
-       public AdministrativeStateException(String message, Throwable cause) {
-               super(message, cause);
-       }
+    public AdministrativeStateException() {
+        super();
+    }
+
+    public AdministrativeStateException(String message) {
+        super(message);
+    }
+
+    public AdministrativeStateException(Throwable cause) {
+        super(cause);
+    }
+
+    public AdministrativeStateException(String message, Throwable cause) {
+        super(message, cause);
+    }
 }
index 588a4d6..1583a9d 100644 (file)
 package org.onap.policy.common.im;
 
 public class AllSeemsWellException extends IntegrityMonitorException {
-       
-       /**
-        * 
-        */
-       private static final long serialVersionUID = 1L;
 
-       public AllSeemsWellException(){
-               super();
-       }
+    private static final long serialVersionUID = 1L;
 
-       public AllSeemsWellException(String msg) {
-               super(msg);
-       }
-       
-       public AllSeemsWellException(String msg, Exception cause) {
-               super(msg, cause);
-       }
+    public AllSeemsWellException() {
+        super();
+    }
 
-       public AllSeemsWellException(Exception cause) {
-               super(cause);
-       }
+    public AllSeemsWellException(String msg) {
+        super(msg);
+    }
+
+    public AllSeemsWellException(String msg, Exception cause) {
+        super(msg, cause);
+    }
+
+    public AllSeemsWellException(Exception cause) {
+        super(cause);
+    }
 }
index 5825c3a..a72fe9e 100644 (file)
 package org.onap.policy.common.im;
 
 public class ForwardProgressException extends IntegrityMonitorException {
-       private static final long serialVersionUID = 1L;
-       public ForwardProgressException() {
-               super();
-       }
-       public ForwardProgressException(String message) {
-               super(message);
-       }
+    private static final long serialVersionUID = 1L;
 
-       public ForwardProgressException(Throwable cause) {
-               super(cause);
-       }
-       public ForwardProgressException(String message, Throwable cause) {
-               super(message, cause);
-       }
+    public ForwardProgressException() {
+        super();
+    }
+
+    public ForwardProgressException(String message) {
+        super(message);
+    }
+
+    public ForwardProgressException(Throwable cause) {
+        super(cause);
+    }
+
+    public ForwardProgressException(String message, Throwable cause) {
+        super(message, cause);
+    }
 }
index 880d39f..c32a221 100644 (file)
@@ -54,1917 +54,1919 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
- * IntegrityMonitor Main class for monitoring the integrity of a resource and
- * managing its state. State management follows the X.731 ITU standard.
+ * IntegrityMonitor Main class for monitoring the integrity of a resource and managing its state.
+ * State management follows the X.731 ITU standard.
  */
 public class IntegrityMonitor {
-       private static final Logger logger = LoggerFactory.getLogger(IntegrityMonitor.class.getName());
+    private static final Logger logger = LoggerFactory.getLogger(IntegrityMonitor.class.getName());
 
-       // only allow one instance of IntegrityMonitor
-       private static IntegrityMonitor instance = null;
+    // only allow one instance of IntegrityMonitor
+    private static IntegrityMonitor instance = null;
 
-       private static String resourceName = null;
-       boolean alarmExists = false;
+    private static String resourceName = null;
+    boolean alarmExists = false;
 
-       /*
-        * Error message that is written by the dependencyCheck() method. It is made
-        * available externally through the evaluateSanity() method.
-        */
-       private String dependencyCheckErrorMsg = "";
+    /*
+     * Error message that is written by the dependencyCheck() method. It is made available
+     * externally through the evaluateSanity() method.
+     */
+    private String dependencyCheckErrorMsg = "";
 
-       // The entity manager factory for JPA access
-       private EntityManagerFactory emf;
-       private EntityManager em;
+    // The entity manager factory for JPA access
+    private EntityManagerFactory emf;
+    private EntityManager em;
 
-       // Persistence Unit for JPA
-       public static final String PERSISTENCE_UNIT = "operationalPU";
-
-       private static String persistenceUnit = PERSISTENCE_UNIT;
-
-       private static final long CYCLE_INTERVAL_MILLIS = 1000l;
-
-       private static long cycleIntervalMillis = CYCLE_INTERVAL_MILLIS;
-
-       /**
-        * Units used for intervals extracted from the properties, which are
-        * typically given in seconds.
-        */
-       private static TimeUnit propertyUnits = TimeUnit.SECONDS;
-
-       private StateManagement stateManager = null;
-
-       private FPManager fpManager = null;
-
-       // The forward progress counter is incremented as the
-       // process being monitored makes forward progress
-       private int fpCounter = 0;
-       private int lastFpCounter = 0;
-
-       // elapsed time since last FP counter check
-       private long elapsedTime = 0;
-
-       // elapsed time since last test transaction check
-       private long elapsedTestTransTime = 0;
-
-       // elapsed time since last write Fpc check
-       private long elapsedWriteFpcTime = 0;
-
-       // last dependency health check time. Initialize so that the periodic check
-       // starts after 60 seconds.
-       // This allows time for dependents to come up.
-       private long lastDependencyCheckTime = System.currentTimeMillis();
-
-       // Time of the last state audit. It is initialized at the time of the IM
-       // construction
-       private Date lastStateAuditTime = new Date();
-
-       // Interval between state audits in ms. We leave it turned off by default so
-       // that it will only
-       // be run on the nodes which we want doing the audit. In particular, we only
-       // want it to run
-       // on the droolspdps
-       private static long stateAuditIntervalMs = 0L;
-
-       // the number of cycles since 'fpCounter' was last changed
-       private int missedCycles = 0;
-
-       // forward progress monitoring interval
-       private static long monitorIntervalMs = 1000L * IntegrityMonitorProperties.DEFAULT_MONITOR_INTERVAL;
-       // The number of periods the counter fails to increment before an alarm is
-       // raised.
-       private static int failedCounterThreshold = IntegrityMonitorProperties.DEFAULT_FAILED_COUNTER_THRESHOLD;
-       // test transaction interval
-       private static long testTransIntervalMs = 1000L * IntegrityMonitorProperties.DEFAULT_TEST_INTERVAL;
-       // write Fpc to DB interval
-       private static long writeFpcIntervalMs = 1000L * IntegrityMonitorProperties.DEFAULT_WRITE_FPC_INTERVAL;
-       // check the health of dependencies
-       private static long checkDependencyIntervalMs = 1000L
-                       * IntegrityMonitorProperties.DEFAULT_CHECK_DEPENDENCY_INTERVAL;
-
-       // A lead subsystem will have dependency groups with resource names in the
-       // properties file.
-       // For non-lead subsystems, the dependency_group property will be absent.
-       private static String[] depGroups = null;
-
-       private static boolean isUnitTesting = false;
-
-       // can turn on health checking of dependents via jmx test() call by setting
-       // this property to true
-       private static boolean testViaJmx = false;
-
-       private static String jmxFqdn = null;
-
-       // this is the max interval allowed without any forward progress
-       // counter updates
-       private static long maxFpcUpdateIntervalMs = 1000L * IntegrityMonitorProperties.DEFAULT_MAX_FPC_UPDATE_INTERVAL;
-
-       // Node types
-       private enum NodeType {
-               PDP_XACML, PDP_DROOLS, PAP, PAP_ADMIN, LOGPARSER, BRMS_GATEWAY, ASTRA_GATEWAY, ELK_SERVER, PYPDP
-
-       }
-
-       private static String siteName;
-       private static String nodeType;
-       private Date refreshStateAuditLastRunDate;
-       private static long refreshStateAuditIntervalMs = 600000; // run it once per
-                                                                                                                               // 10 minutes
-
-       // lock objects
-       private final Object evaluateSanityLock = new Object();
-       private final Object fpMonitorCycleLock = new Object();
-       private final Object dependencyCheckLock = new Object();
-       private final Object testTransactionLock = new Object();
-       private final Object startTransactionLock = new Object();
-       private final Object endTransactionLock = new Object();
-       private final Object checkTestTransactionLock = new Object();
-       private final Object checkWriteFpcLock = new Object();
-       private static final Object getInstanceLock = new Object();
-       private final Object refreshStateAuditLock = new Object();
-       private final Object imFlushLock = new Object();
-
-       private Map<String, String> allSeemsWellMap;
-       private Map<String, String> allNotWellMap;
-
-       /**
-        * IntegrityMonitor constructor. It is invoked from the getInstance() method
-        * in this class or from the constructor of a child or sub-class. A class
-        * can extend the IntegrityMonitor class if there is a need to override any
-        * of the base methods (ex. subsystemTest()). Only one instance is allowed
-        * to be created per resource name.
-        * 
-        * @param resourceName
-        *            The resource name of the resource
-        * @param properties
-        *            a set of properties passed in from the resource
-        * @throws IntegrityMonitorException
-        *             if any errors are encountered in the constructor
-        */
-       protected IntegrityMonitor(String resourceName, Properties properties) throws IntegrityMonitorException {
-
-               this(resourceName, properties, null);
-       }
-
-       /**
-        * IntegrityMonitor constructor. It is invoked from the getInstance() method
-        * in this class or from the constructor of a child or sub-class. A class
-        * can extend the IntegrityMonitor class if there is a need to override any
-        * of the base methods (ex. subsystemTest()). Only one instance is allowed
-        * to be created per resource name.
-        * 
-        * @param resourceName
-        *            The resource name of the resource
-        * @param properties
-        *            a set of properties passed in from the resource
-        * @param queue
-        *            queue to use to control the FPManager thread, or {@code null}
-        * @throws IntegrityMonitorException
-        *             if any errors are encountered in the constructor
-        */
-       protected IntegrityMonitor(String resourceName, Properties properties, BlockingQueue<CountDownLatch> queue)
-                       throws IntegrityMonitorException {
-
-               // singleton check since this constructor can be called from a child or
-               // sub-class
-               if (instance != null) {
-                       String msg = "IM object exists and only one instance allowed";
-                       logger.error("{}", msg);
-                       throw new IntegrityMonitorException("IntegrityMonitor constructor exception: " + msg);
-               }
-               instance = this;
-
-               IntegrityMonitor.resourceName = resourceName;
-
-               /*
-                * Validate that the properties file contains all the needed properties.
-                * Throws an IntegrityMonitorPropertiesException
-                */
-               validateProperties(properties);
-
-               // construct jmx url
-               String jmxUrl = getJmxUrl();
-
-               //
-               // Create the entity manager factory
-               //
-               emf = Persistence.createEntityManagerFactory(persistenceUnit, properties);
-               //
-               // Did it get created?
-               //
-               if (emf == null) {
-                       logger.error("Error creating IM entity manager factory with persistence unit: {}", persistenceUnit);
-                       throw new IntegrityMonitorException("Unable to create IM Entity Manager Factory");
-               }
-
-               // add entry to forward progress and resource registration tables in DB
-
-               // Start a transaction
-               em = emf.createEntityManager();
-               EntityTransaction et = em.getTransaction();
-
-               et.begin();
-
-               try {
-                       // if ForwardProgress entry exists for resourceName, update it. If
-                       // not found, create a new entry
-                       Query fquery = em.createQuery("Select f from ForwardProgressEntity f where f.resourceName=:rn");
-                       fquery.setParameter("rn", resourceName);
-
-                       @SuppressWarnings("rawtypes")
-                       List fpList = fquery.setLockMode(LockModeType.NONE).setFlushMode(FlushModeType.COMMIT).getResultList();
-                       ForwardProgressEntity fpx = null;
-                       if (!fpList.isEmpty()) {
-                               // ignores multiple results
-                               fpx = (ForwardProgressEntity) fpList.get(0);
-                               // refresh the object from DB in case cached data was returned
-                               em.refresh(fpx);
-                               if (logger.isDebugEnabled()) {
-                                       logger.debug("Resource {} exists and will be updated - old fpc= {}, lastUpdated= {}", resourceName,
-                                                       fpx.getFpcCount(), fpx.getLastUpdated());
-                               }
-                               fpx.setFpcCount(fpCounter);
-                       } else {
-                               // Create a forward progress object
-                               logger.debug("Adding resource {} to ForwardProgress table", resourceName);
-                               fpx = new ForwardProgressEntity();
-                       }
-                       // update/set columns in entry
-                       fpx.setResourceName(resourceName);
-                       em.persist(fpx);
-                       // flush to the DB
-                       synchronized (imFlushLock) {
-                               em.flush();
-                       }
-
-                       // if ResourceRegistration entry exists for resourceName, update it.
-                       // If not found, create a new entry
-                       Query rquery = em.createQuery("Select r from ResourceRegistrationEntity r where r.resourceName=:rn");
-                       rquery.setParameter("rn", resourceName);
-
-                       @SuppressWarnings("rawtypes")
-                       List rrList = rquery.setLockMode(LockModeType.NONE).setFlushMode(FlushModeType.COMMIT).getResultList();
-                       ResourceRegistrationEntity rrx = null;
-                       if (!rrList.isEmpty()) {
-                               // ignores multiple results
-                               rrx = (ResourceRegistrationEntity) rrList.get(0);
-                               // refresh the object from DB in case cached data was returned
-                               em.refresh(rrx);
-                               if (logger.isDebugEnabled()) {
-                                       logger.debug("Resource {} exists and will be updated - old url= {}, createdDate={}", resourceName,
-                                                       rrx.getResourceUrl(), rrx.getCreatedDate());
-                               }
-                               rrx.setLastUpdated(new Date());
-                       } else {
-                               // register resource by adding entry to table in DB
-                               logger.debug("Adding resource {} to ResourceRegistration table", resourceName);
-                               rrx = new ResourceRegistrationEntity();
-                       }
-                       // update/set columns in entry
-                       rrx.setResourceName(resourceName);
-                       rrx.setResourceUrl(jmxUrl);
-                       rrx.setNodeType(nodeType);
-                       rrx.setSite(siteName);
-                       em.persist(rrx);
-                       // flush to the DB
-                       synchronized (imFlushLock) {
-                               et.commit();
-                       }
-
-               } catch (Exception e) {
-                       logger.error("IntegrityMonitor constructor DB table update failed with exception: ", e);
-                       try {
-                               if (et.isActive()) {
-                                       synchronized (imFlushLock) {
-                                               et.rollback();
-                                       }
-                               }
-                       } catch (Exception e1) {
-                               logger.error("IntegrityMonitor constructor threw exception: ", e1);
-                       }
-                       throw e;
-               }
-
-               try {
-                       // create instance of StateMangement class and pass emf to it
-                       stateManager = new StateManagement(emf, resourceName);
-
-                       /**
-                        * Initialize the state and status attributes. This will maintain any
-                        * Administrative state value but will set the operational state =
-                        * enabled, availability status = null, standby status = null. The
-                        * integrity monitor will set the operational state via the FPManager
-                        * and the owning application must set the standby status by calling
-                        * promote/demote on the StateManager.
-                        */
-                       stateManager.initializeState();
-                       
-               } catch(StateManagementException e) {
-                       throw new IntegrityMonitorException(e);
-               }
-
-               // create management bean
-               try {
-                       new ComponentAdmin(resourceName, this, stateManager);
-               } catch (Exception e) {
-                       logger.error("ComponentAdmin constructor exception: {}", e.toString(), e);
-               }
-
-               fpManager = new FPManager(queue);
-
-       }
-
-       /**
-        * Get an instance of IntegrityMonitor for a given resource name. It creates
-        * one if it does not exist. Only one instance is allowed to be created per
-        * resource name.
-        * 
-        * @param resourceName
-        *            The resource name of the resource
-        * @param properties
-        *            a set of properties passed in from the resource
-        * @return The new instance of IntegrityMonitor
-        * @throws IntegrityMonitorException
-        *             if unable to create jmx url or the constructor returns an
-        *             exception
-        */
-       public static IntegrityMonitor getInstance(String resourceName, Properties properties) throws IntegrityMonitorException {
-               return getInstance(resourceName, properties, null);
-       }
-
-       /**
-        * Get an instance of IntegrityMonitor for a given resource name. It creates
-        * one if it does not exist. Only one instance is allowed to be created per
-        * resource name.
-        * 
-        * @param resourceName
-        *            The resource name of the resource
-        * @param properties
-        *            a set of properties passed in from the resource
-        * @param queue
-        *            queue to use to control the FPManager thread, or {@code null}
-        * @return The new instance of IntegrityMonitor
-        * @throws IntegrityMonitorException
-        *             if unable to create jmx url or the constructor returns an
-        *             exception
-        */
-       protected static IntegrityMonitor getInstance(String resourceName, Properties properties,
-                       BlockingQueue<CountDownLatch> queue) throws IntegrityMonitorException {
-
-               synchronized (getInstanceLock) {
-                       logger.debug("getInstance() called - resourceName= {}", resourceName);
-                       if (resourceName == null || resourceName.isEmpty() || properties == null) {
-                               logger.error("Error: getIntegrityMonitorInstance() called with invalid input");
-                               return null;
-                       }
-
-                       if (instance == null) {
-                               logger.debug("Creating new instance of IntegrityMonitor");
-                               instance = new IntegrityMonitor(resourceName, properties, queue);
-                       }
-                       return instance;
-               }
-       }
-
-       public static IntegrityMonitor getInstance() throws IntegrityMonitorException {
-               logger.debug("getInstance() called");
-               if (instance == null) {
-                       String msg = "No IntegrityMonitor instance exists."
-                                       + " Please use the method IntegrityMonitor.getInstance(String resourceName, Properties properties)";
-                       throw new IntegrityMonitorPropertiesException(msg);
-               } else {
-                       return instance;
-               }
-       }
-
-       /*
-        * This is a facility used by JUnit testing to destroy the IntegrityMonitor
-        * instance before creating a new one. It waits a bit to allow the FPManager
-        * to fully exit.
-        */
-       public static void deleteInstance() throws IntegrityMonitorException {
-               logger.debug("deleteInstance() called");
-               synchronized (getInstanceLock) {
-                       if (isUnitTesting() && instance != null && instance.getFPManager() != null) {
-                               FPManager fpm = instance.getFPManager();
-
-                               // Stop the FPManager thread
-                               fpm.stopAndExit();
-
-                               try {
-                                       // Make sure it has exited
-                                       fpm.join(2000L);
-                               } catch (InterruptedException e) {
-                                       logger.error("deleteInstance: Interrupted while waiting for FPManaager to fully exit", e);
-                                       Thread.currentThread().interrupt();
-                               }
-
-                               if (fpm.isAlive()) {
-                                       logger.error("IntegrityMonitor.deleteInstance() Failed to kill FPManager thread");
-                                       throw new IntegrityMonitorException(
-                                                       "IntegrityMonitor.deleteInstance() Failed to kill FPManager thread");
-                               }
-
-                               instance = null;
-                       }
-               }
-               logger.debug("deleteInstance() exit");
-       }
-
-       private FPManager getFPManager() {
-               return fpManager;
-       }
-
-       private static String getJmxUrl() throws IntegrityMonitorException {
-
-               // get the jmx remote port and construct the JMX URL
-               Properties systemProps = System.getProperties();
-               String jmxPort = systemProps.getProperty("com.sun.management.jmxremote.port");
-               String jmxErrMsg;
-               if (jmxPort == null) {
-                       jmxErrMsg = "System property com.sun.management.jmxremote.port for JMX remote port is not set";
-                       logger.error("{}", jmxErrMsg);
-                       throw new IntegrityMonitorException("getJmxUrl exception: " + jmxErrMsg);
-               }
-
-               int port = 0;
-               try {
-                       port = Integer.parseInt(jmxPort);
-               } catch (NumberFormatException e) {
-                       jmxErrMsg = "JMX remote port is not a valid integer value - " + jmxPort;
-                       logger.error("{}", jmxErrMsg);
-                       throw new IntegrityMonitorException("getJmxUrl exception: " + jmxErrMsg);
-               }
-
-               try {
-                       if (jmxFqdn == null) {
-                               jmxFqdn = InetAddress.getLocalHost().getCanonicalHostName(); // get
-                                                                                                                                                               // FQDN
-                                                                                                                                                               // of
-                                                                                                                                                               // this
-                                                                                                                                                               // host
-                       }
-               } catch (Exception e) {
-                       String msg = "getJmxUrl could not get hostname";
-                       logger.error("{}", msg, e);
-                       throw new IntegrityMonitorException("getJmxUrl Exception: " + msg);
-               }
-               if (jmxFqdn == null) {
-                       String msg = "getJmxUrl encountered null hostname";
-                       logger.error("{}", msg);
-                       throw new IntegrityMonitorException("getJmxUrl error: " + msg);
-               }
-
-               // assemble the jmx url
-               String jmxUrl = "service:jmx:rmi:///jndi/rmi://" + jmxFqdn + ":" + port + "/jmxrmi";
-
-               logger.debug("IntegerityMonitor - jmx url={}", jmxUrl);
-
-               return jmxUrl;
-       }
-
-       /**
-        * evaluateSanity() is designed to be called by an external entity to
-        * evealuate the sanity of the node. It checks the operational and
-        * administrative states and the standby status. If the operational state is
-        * disabled, it will include the dependencyCheckErrorMsg which includes
-        * information about any dependency (node) which has failed.
-        */
-       public void evaluateSanity() throws IntegrityMonitorException {
-               logger.debug("evaluateSanity called ....");
-               synchronized (evaluateSanityLock) {
-
-                       String errorMsg = dependencyCheckErrorMsg;
-                       logger.debug("evaluateSanity dependencyCheckErrorMsg = {}", errorMsg);
-                       // check op state and throw exception if disabled
-                       if ((stateManager.getOpState() != null) && stateManager.getOpState().equals(StateManagement.DISABLED)) {
-                               String msg = "Resource " + resourceName + " operation state is disabled. " + errorMsg;
-                               logger.debug("{}", msg);
-                               throw new IntegrityMonitorException(msg);
-                       }
-
-                       // check admin state and throw exception if locked
-                       if ((stateManager.getAdminState() != null) && stateManager.getAdminState().equals(StateManagement.LOCKED)) {
-                               String msg = "Resource " + resourceName + " is administratively locked";
-                               logger.debug("{}", msg);
-                               throw new AdministrativeStateException("IntegrityMonitor Admin State Exception: " + msg);
-                       }
-                       // check standby state and throw exception if cold standby
-                       if ((stateManager.getStandbyStatus() != null)
-                                       && stateManager.getStandbyStatus().equals(StateManagement.COLD_STANDBY)) {
-                               String msg = "Resource " + resourceName + " is cold standby";
-                               logger.debug("{}", msg);
-                               throw new StandbyStatusException("IntegrityMonitor Standby Status Exception: " + msg);
-                       }
-
-               }
-
-       }
-
-       /*
-        * This method checks the forward progress counter and the state of a
-        * dependency. If the dependency is unavailable or failed, an error message
-        * is created which is checked when evaluateSanity interface is called. If
-        * the error message is set then the evaluateSanity will return an error.
-        */
-       public String stateCheck(String dep) {
-               logger.debug("checking state of dependent resource: {}", dep);
-               String errorMsg = null;
-               ForwardProgressEntity forwardProgressEntity = null;
-               StateManagementEntity stateManagementEntity = null;
-
-               // Start a transaction
-               EntityTransaction et = em.getTransaction();
-               et.begin();
-
-               try {
-                       Query query = em.createQuery("Select p from ForwardProgressEntity p where p.resourceName=:resource");
-                       query.setParameter("resource", dep);
-
-                       @SuppressWarnings("rawtypes")
-                       List fpList = query.setLockMode(LockModeType.NONE).setFlushMode(FlushModeType.COMMIT).getResultList();
-
-                       if (!fpList.isEmpty()) {
-                               // exists
-                               forwardProgressEntity = (ForwardProgressEntity) fpList.get(0);
-                               // refresh the object from DB in case cached data was returned
-                               em.refresh(forwardProgressEntity);
-                               logger.debug("Found entry in ForwardProgressEntity table for dependent Resource={}", dep);
-                       } else {
-                               errorMsg = dep + ": resource not found in ForwardProgressEntity database table";
-                               logger.error("{}", errorMsg);
-                       }
-                       synchronized (imFlushLock) {
-                               et.commit();
-                       }
-               } catch (Exception ex) {
-                       // log an error
-                       errorMsg = dep + ": ForwardProgressEntity DB operation failed with exception: ";
-                       logger.error("{}", errorMsg, ex);
-                       synchronized (imFlushLock) {
-                               if (et.isActive()) {
-                                       et.rollback();
-                               }
-                       }
-               }
-
-               if (errorMsg == null) {
-                       // Start a transaction
-                       et = em.getTransaction();
-                       et.begin();
-                       try {
-                               // query if StateManagement entry exists for dependent resource
-                               Query query = em.createQuery("Select p from StateManagementEntity p where p.resourceName=:resource");
-                               query.setParameter("resource", dep);
-
-                               @SuppressWarnings("rawtypes")
-                               List smList = query.setLockMode(LockModeType.NONE).setFlushMode(FlushModeType.COMMIT).getResultList();
-                               if (!smList.isEmpty()) {
-                                       // exist
-                                       stateManagementEntity = (StateManagementEntity) smList.get(0);
-                                       // refresh the object from DB in case cached data was
-                                       // returned
-                                       em.refresh(stateManagementEntity);
-                                       logger.debug("Found entry in StateManagementEntity table for dependent Resource={}", dep);
-                               } else {
-                                       errorMsg = dep + ": resource not found in state management entity database table";
-                                       logger.error("{}", errorMsg);
-                               }
-
-                               synchronized (imFlushLock) {
-                                       et.commit();
-                               }
-                       } catch (Exception e) {
-                               // log an error
-                               errorMsg = dep + ": StateManagementEntity DB read failed with exception: ";
-                               logger.error("{}", errorMsg, e);
-                               synchronized (imFlushLock) {
-                                       if (et.isActive()) {
-                                               et.rollback();
-                                       }
-                               }
-                       }
-               }
-
-               // verify that the ForwardProgress is current (check last_updated)
-               if (errorMsg == null) {
-                       if (forwardProgressEntity != null && stateManagementEntity != null) {
-                               Date date = new Date();
-                               long diffMs = date.getTime() - forwardProgressEntity.getLastUpdated().getTime();
-                               logger.debug("IntegrityMonitor.stateCheck(): diffMs = {}", diffMs);
-
-                               // Threshold for a stale entry
-                               long staleMs = maxFpcUpdateIntervalMs;
-                               logger.debug("IntegrityMonitor.stateCheck(): staleMs = {}", staleMs);
-
-                               if (diffMs > staleMs) {
-                                       // ForwardProgress is stale. Disable it
-                                       try {
-                                               if (!stateManagementEntity.getOpState().equals(StateManagement.DISABLED)) {
-                                                       logger.debug("IntegrityMonitor.stateCheck(): Changing OpStat = disabled for {}", dep);
-                                                       stateManager.disableFailed(dep);
-                                               }
-                                       } catch (Exception e) {
-                                               String msg = "IntegrityMonitor.stateCheck(): Failed to diableFail dependent resource = " + dep
-                                                               + "; " + e.getMessage();
-                                               logger.error("{}", msg, e);
-                                       }
-                               }
-                       } else {
-
-                               if (forwardProgressEntity == null) {
-                                       String msg = "IntegrityMonitor.stateCheck(): Failed to diableFail dependent resource = " + dep
-                                                       + "; " + " forwardProgressEntity == null.";
-                                       logger.error("{}", msg);
-                               }
-
-                               else {
-                                       String msg = "IntegrityMonitor.stateCheck(): Failed to diableFail dependent resource = " + dep
-                                                       + "; " + " stateManagementEntity == null.";
-                                       logger.error("{}", msg);
-                               }
-                       }
-               }
-
-               // check operation, admin and standby states of dependent resource
-               if (errorMsg == null) {
-                       if (stateManagementEntity != null) {
-                               if ((stateManager.getAdminState() != null)
-                                               && stateManagementEntity.getAdminState().equals(StateManagement.LOCKED)) {
-                                       errorMsg = dep + ": resource is administratively locked";
-                                       logger.error("{}", errorMsg);
-                               } else if ((stateManager.getOpState() != null)
-                                               && stateManagementEntity.getOpState().equals(StateManagement.DISABLED)) {
-                                       errorMsg = dep + ": resource is operationally disabled";
-                                       logger.error("{}", errorMsg);
-                               } else if ((stateManager.getStandbyStatus() != null)
-                                               && stateManagementEntity.getStandbyStatus().equals(StateManagement.COLD_STANDBY)) {
-                                       errorMsg = dep + ": resource is cold standby";
-                                       logger.error("{}", errorMsg);
-                               }
-                       } else {
-                               errorMsg = dep + ": could not check standy state of resource. stateManagementEntity == null.";
-                               logger.error("{}", errorMsg);
-                       }
-               }
-
-               String returnMsg = "IntegrityMonitor.stateCheck(): returned error_msg: " + errorMsg;
-               logger.debug("{}", returnMsg);
-               return errorMsg;
-       }
-
-       private String fpCheck(String dep) {
-               logger.debug("checking forward progress count of dependent resource: {}", dep);
-
-               String errorMsg = null;
-
-               // check FPC count - a changing FPC count indicates the resource JVM is
-               // running
-
-               // Start a transaction
-               EntityTransaction et = em.getTransaction();
-               et.begin();
-               try {
-                       Query fquery = em.createQuery("Select f from ForwardProgressEntity f where f.resourceName=:rn");
-                       fquery.setParameter("rn", dep);
-
-                       @SuppressWarnings("rawtypes")
-                       List fpList = fquery.setLockMode(LockModeType.NONE).setFlushMode(FlushModeType.COMMIT).getResultList();
-                       ForwardProgressEntity fpx;
-                       if (!fpList.isEmpty()) {
-                               // ignores multiple results
-                               fpx = (ForwardProgressEntity) fpList.get(0);
-                               // refresh the object from DB in case cached data was returned
-                               em.refresh(fpx);
-                               if (logger.isDebugEnabled()) {
-                                       logger.debug("Dependent resource {} - fpc= {}, lastUpdated={}", dep, fpx.getFpcCount(),
-                                                       fpx.getLastUpdated());
-                               }
-                               long currTime = System.currentTimeMillis();
-                               // if dependent resource FPC has not been updated, consider it
-                               // an error
-                               if ((currTime - fpx.getLastUpdated().getTime()) > maxFpcUpdateIntervalMs) {
-                                       errorMsg = dep + ": FP count has not been updated in the last " + maxFpcUpdateIntervalMs + "ms";
-                                       logger.error("{}", errorMsg);
-                                       try {
-                                               // create instance of StateMangement class for dependent
-                                               StateManagement depStateManager = new StateManagement(emf, dep);
-                                               if (!depStateManager.getOpState().equals(StateManagement.DISABLED)) {
-                                                       logger.debug(
-                                                                       "Forward progress not detected for dependent resource {}. Setting dependent's state to disable failed.",
-                                                                       dep);
-                                                       depStateManager.disableFailed();
-                                               }
-                                       } catch (Exception e) {
-                                               // ignore errors
-                                               logger.error("Update dependent state failed with exception: ", e);
-                                       }
-                               }
-                       } else {
-                               // resource entry not found in FPC table
-                               errorMsg = dep + ": resource not found in ForwardProgressEntity table in the DB";
-                               logger.error("{}", errorMsg);
-                       }
-                       synchronized (imFlushLock) {
-                               et.commit();
-                       }
-               } catch (Exception e) {
-                       // log an error and continue
-                       errorMsg = dep + ": ForwardProgressEntity DB read failed with exception: ";
-                       logger.error("{}", errorMsg, e);
-                       synchronized (imFlushLock) {
-                               if (et.isActive()) {
-                                       et.rollback();
-                               }
-                       }
-               }
-
-               return errorMsg;
-       }
-
-       public List<ForwardProgressEntity> getAllForwardProgressEntity() {
-               logger.debug("getAllForwardProgressEntity: entry");
-               ArrayList<ForwardProgressEntity> fpList = new ArrayList<>();
-               // Start a transaction
-               EntityTransaction et = em.getTransaction();
-               et.begin();
-               try {
-                       Query fquery = em.createQuery("Select e from ForwardProgressEntity e");
-                       @SuppressWarnings("rawtypes")
-                       List myList = fquery.setLockMode(LockModeType.NONE).setFlushMode(FlushModeType.COMMIT).getResultList();
-                       synchronized (imFlushLock) {
-                               et.commit();
-                       }
-                       logger.debug("getAllForwardProgressEntity: myList.size(): {}", myList.size());
-                       if (!myList.isEmpty()) {
-                               for (int i = 0; i < myList.size(); i++) {
-                                       if (logger.isDebugEnabled()) {
-                                               logger.debug("getAllForwardProgressEntity: myList.get({}).getResourceName(): {}", i,
-                                                               ((ForwardProgressEntity) myList.get(i)).getResourceName());
-                                       }
-                                       fpList.add((ForwardProgressEntity) myList.get(i));
-                               }
-                       }
-                       synchronized (imFlushLock) {
-                               if (et.isActive()) {
-                                       et.commit();
-                               }
-                       }
-               } catch (Exception e) {
-                       // log an error and continue
-                       String msg = "getAllForwardProgessEntity DB read failed with exception: ";
-                       logger.error("{}", msg, e);
-                       synchronized (imFlushLock) {
-                               if (et.isActive()) {
-                                       et.rollback();
-                               }
-                       }
-               }
-               return fpList;
-       }
-
-       private String jmxCheck(String dep) {
-               logger.debug("checking health of dependent by calling test() via JMX on resource: {}", dep);
-
-               String errorMsg = null;
-
-               // get the JMX URL from the database
-               String jmxUrl = null;
-               // Start a transaction
-               EntityTransaction et = em.getTransaction();
-               et.begin();
-               try {
-                       // query if ResourceRegistration entry exists for resourceName
-                       Query rquery = em.createQuery("Select r from ResourceRegistrationEntity r where r.resourceName=:rn");
-                       rquery.setParameter("rn", dep);
-
-                       @SuppressWarnings("rawtypes")
-                       List rrList = rquery.setLockMode(LockModeType.NONE).setFlushMode(FlushModeType.COMMIT).getResultList();
-                       ResourceRegistrationEntity rrx = null;
-
-                       if (!rrList.isEmpty()) {
-                               // ignores multiple results
-                               rrx = (ResourceRegistrationEntity) rrList.get(0);
-                               // refresh the object from DB in case cached data was returned
-                               em.refresh(rrx);
-                               jmxUrl = rrx.getResourceUrl();
-                               if (logger.isDebugEnabled()) {
-                                       logger.debug("Dependent Resource={}, url={}, createdDate={}", dep, jmxUrl, rrx.getCreatedDate());
-                               }
-                       } else {
-                               errorMsg = dep + ": resource not found in ResourceRegistrationEntity table in the DB";
-                               logger.error("{}", errorMsg);
-                       }
-
-                       synchronized (imFlushLock) {
-                               et.commit();
-                       }
-               } catch (Exception e) {
-                       errorMsg = dep + ": ResourceRegistrationEntity DB read failed with exception: ";
-                       logger.error("{}", errorMsg, e);
-                       synchronized (imFlushLock) {
-                               if (et.isActive()) {
-                                       et.rollback();
-                               }
-                       }
-               }
-
-               if (jmxUrl != null) {
-                       JmxAgentConnection jmxAgentConnection = null;
-                       try {
-                               jmxAgentConnection = new JmxAgentConnection(jmxUrl);
-                               MBeanServerConnection mbeanServer = jmxAgentConnection.getMBeanConnection();
-                               ComponentAdminMBean admin = JMX.newMXBeanProxy(mbeanServer, ComponentAdmin.getObjectName(dep),
-                                               ComponentAdminMBean.class);
-
-                               // invoke the test method via the jmx proxy
-                               admin.test();
-                               logger.debug("Dependent resource {} sanity test passed", dep);
-                       } catch (Exception e) {
-                               errorMsg = dep + ": resource sanity test failed with exception: ";
-                               logger.error("{}", errorMsg, e);
-                       } finally {
-                               // close the JMX connector
-                               if (jmxAgentConnection != null) {
-                                       jmxAgentConnection.disconnect();
-                               }
-                       }
-               }
-
-               return errorMsg;
-       }
-
-       public String dependencyCheck() {
-               logger.debug("dependencyCheck: entry");
-               synchronized (dependencyCheckLock) {
-
-                       // Start with the error message empty
-                       String errorMsg = "";
-                       boolean dependencyFailure = false;
-
-                       /*
-                        * Before we check dependency groups we need to check subsystemTest.
-                        */
-                       try {
-                               // Test any subsystems that are not covered under the dependency
-                               // relationship
-                               subsystemTest();
-                       } catch (Exception e) {
-                               logger.error("IntegrityMonitor threw exception", e);
-                               dependencyFailure = true;
-                               // This indicates a subsystemTest failure
-                               try {
-                                       if (logger.isDebugEnabled()) {
-                                               logger.debug(
-                                                               "{}: There has been a subsystemTest failure with error:{} Updating this resource's state to disableDependency",
-                                                               resourceName, e.getMessage());
-                                       }
-                                       // Capture the subsystemTest failure info
-                                       if (!errorMsg.isEmpty()) {
-                                               errorMsg = errorMsg.concat(",");
-                                       }
-                                       errorMsg = errorMsg.concat(resourceName + ": " + e.getMessage());
-                                       this.stateManager.disableDependency();
-                               } catch (Exception ex) {
-                                       logger.error("IntegrityMonitor threw exception.", ex);
-                                       if (!errorMsg.isEmpty()) {
-                                               errorMsg = errorMsg.concat(",");
-                                       }
-                                       errorMsg = errorMsg.concat("\n" + resourceName
-                                                       + ": Failed to disable dependency after subsystemTest failure due to: " + ex.getMessage());
-                               }
-                       }
-
-                       // Check the sanity of dependents for lead subcomponents
-                       if (depGroups != null && depGroups.length > 0) {
-                               // check state of resources in dependency groups
-                               for (String group : depGroups) {
-                                       group = group.trim();
-                                       if (group.isEmpty()) {
-                                               // ignore empty group
-                                               continue;
-                                       }
-                                       String[] dependencies = group.split(",");
-                                       if (logger.isDebugEnabled()) {
-                                               logger.debug("group dependencies = {}", Arrays.toString(dependencies));
-                                       }
-                                       int realDepCount = 0;
-                                       int failDepCount = 0;
-                                       for (String dep : dependencies) {
-                                               dep = dep.trim();
-                                               if (dep.isEmpty()) {
-                                                       // ignore empty dependency
-                                                       continue;
-                                               }
-                                               realDepCount++; // this is a valid dependency whose
-                                                                               // state is tracked
-                                               String failMsg = fpCheck(dep); // if a resource is
-                                                                                                               // down, its FP count
-                                                                                                               // will not be
-                                                                                                               // incremented
-                                               if (failMsg == null) {
-                                                       if (testViaJmx) {
-                                                               failMsg = jmxCheck(dep);
-                                                       } else {
-                                                               failMsg = stateCheck(dep);
-                                                       }
-                                               }
-                                               if (failMsg != null) {
-                                                       failDepCount++;
-                                                       if (!errorMsg.isEmpty()) {
-                                                               errorMsg = errorMsg.concat(", ");
-                                                       }
-                                                       errorMsg = errorMsg.concat(failMsg);
-                                               }
-                                       } // end for (String dep : dependencies)
-
-                                       // if all dependencies in a group are failed, set this
-                                       // resource's state to disable dependency
-                                       if ((realDepCount > 0) && (failDepCount == realDepCount)) {
-                                               dependencyFailure = true;
-                                               try {
-                                                       logger.debug(
-                                                                       "All dependents in group {} have failed their health check. Updating this resource's state to disableDependency",
-                                                                       group);
-                                                       if (stateManager.getAvailStatus() == null || !((stateManager.getAvailStatus())
-                                                                       .equals(StateManagement.DEPENDENCY)
-                                                                       || (stateManager.getAvailStatus()).equals(StateManagement.DEPENDENCY_FAILED))) {
-                                                               // Note: redundant calls are made by
-                                                               // refreshStateAudit
-                                                               this.stateManager.disableDependency();
-                                                       }
-                                               } catch (Exception e) {
-                                                       logger.error("IntegrityMonitor threw exception.", e);
-                                                       if (!errorMsg.isEmpty()) {
-                                                               errorMsg = errorMsg.concat(",");
-                                                       }
-                                                       errorMsg = errorMsg.concat(resourceName + ": Failed to disable dependency");
-                                                       break; // break out on failure and skip checking
-                                                                       // other groups
-                                               }
-                                       }
-                                       // check the next group
-
-                               } // end for (String group : depGroups)
-
-                               /*
-                                * We have checked all the dependency groups. If all are ok and
-                                * subsystemTest passed, dependencyFailure == false
-                                */
-                               if (!dependencyFailure) {
-                                       try {
-                                               logger.debug(
-                                                               "All dependency groups have at least one viable member. Updating this resource's state to enableNoDependency");
-                                               if (stateManager.getAvailStatus() != null
-                                                               && ((stateManager.getAvailStatus()).equals(StateManagement.DEPENDENCY)
-                                                                               || (stateManager.getAvailStatus()).equals(StateManagement.DEPENDENCY_FAILED))) {
-                                                       // Note: redundant calls are made by
-                                                       // refreshStateAudit
-                                                       this.stateManager.enableNoDependency();
-                                               } // The refreshStateAudit will catch the case where it
-                                                       // is disabled but availStatus != failed
-                                       } catch (Exception e) {
-                                               logger.error("IntegrityMonitor threw exception.", e);
-                                               if (!errorMsg.isEmpty()) {
-                                                       errorMsg = errorMsg.concat(",");
-                                               }
-                                               errorMsg = errorMsg.concat(resourceName + ": Failed to enable no dependency");
-                                       }
-                               }
-                       } else if (!dependencyFailure) {
-                               /*
-                                * This is put here to clean up when no dependency group should
-                                * exist, but one was erroneously added which caused the state
-                                * to be disabled/dependency/coldstandby and later removed. We
-                                * saw this happen in the lab, but is not very likely in a
-                                * production environment...but you never know.
-                                */
-                               try {
-                                       logger.debug("There are no dependents. Updating this resource's state to enableNoDependency");
-                                       if (stateManager.getAvailStatus() != null
-                                                       && ((stateManager.getAvailStatus()).equals(StateManagement.DEPENDENCY)
-                                                                       || (stateManager.getAvailStatus()).equals(StateManagement.DEPENDENCY_FAILED))) {
-                                               // Note: redundant calls are made by refreshStateAudit
-                                               this.stateManager.enableNoDependency();
-                                       } // The refreshStateAudit will catch the case where it is
-                                               // disabled but availStatus != failed
-                               } catch (Exception e) {
-                                       logger.error("IntegrityMonitor threw exception.", e);
-                                       if (!errorMsg.isEmpty()) {
-                                               errorMsg = errorMsg.concat(",");
-                                       }
-                                       errorMsg = errorMsg.concat(resourceName + ": Failed to enable no dependency");
-                               }
-                       }
-
-                       if (!errorMsg.isEmpty()) {
-                               logger.error("Sanity failure detected in a dependent resource: {}", errorMsg);
-
-                       }
-
-                       dependencyCheckErrorMsg = errorMsg;
-                       lastDependencyCheckTime = System.currentTimeMillis();
-                       logger.debug("dependencyCheck: exit");
-                       return errorMsg;
-               }
-       }
-
-       /**
-        * Execute a test transaction. It is called when the test transaction timer
-        * fires. It could be overridden to provide additional test functionality.
-        * If overridden, the overriding method must invoke startTransaction() and
-        * endTransaction() and check if the allNotWellMap is empty.
-        */
-       public void testTransaction() {
-               synchronized (testTransactionLock) {
-                       logger.debug("testTransaction: entry");
-                       //
-                       // startTransaction() not required for testTransaction
-                       //
-
-                       // end transaction - increments local FP counter
-                       endTransaction();
-               }
-       }
-
-       /**
-        * Additional testing for subsystems that do not have a /test interface (for
-        * ex. 3rd party processes like elk). This method would be overridden by the
-        * subsystem.
-        */
-       public void subsystemTest() throws IntegrityMonitorException {
-               // Testing provided by subsystem
-               logger.debug("IntegrityMonitor subsystemTest() OK");
-       }
-
-       /**
-        * Checks admin state and resets transaction timer. Called by application at
-        * the start of a transaction.
-        * 
-        * @throws AdministrativeStateException
-        *             throws admin state exception if resource is locked
-        * @throws StandbyStatusException
-        */
-       public void startTransaction() throws IntegrityMonitorException {
-
-               synchronized (startTransactionLock) {
-                       // check admin state and throw exception if locked
-                       if ((stateManager.getAdminState() != null) && stateManager.getAdminState().equals(StateManagement.LOCKED)) {
-                               String msg = "Resource " + resourceName + " is administratively locked";
-
-                               throw new AdministrativeStateException("IntegrityMonitor Admin State Exception: " + msg);
-                       }
-                       // check standby state and throw exception if locked
-
-                       if ((stateManager.getStandbyStatus() != null)
-                                       && (stateManager.getStandbyStatus().equals(StateManagement.HOT_STANDBY)
-                                                       || stateManager.getStandbyStatus().equals(StateManagement.COLD_STANDBY))) {
-                               String msg = "Resource " + resourceName + " is standby";
-
-                               throw new StandbyStatusException("IntegrityMonitor Standby Status Exception: " + msg);
-                       }
-
-                       // reset transactionTimer so it will not fire
-                       elapsedTestTransTime = 0;
-               }
-       }
-
-       /**
-        * Increment the local forward progress counter. Called by application at
-        * the end of each transaction (successful or not).
-        */
-       public void endTransaction() {
-               synchronized (endTransactionLock) {
-                       if (getAllNotWellMap() != null) {
-                               if (!(getAllNotWellMap().isEmpty())) {
-                                       /*
-                                        * An entity has reported that it is not well. We must not
-                                        * allow the the forward progress counter to advance.
-                                        */
-                                       String msg = "allNotWellMap:";
-                                       for (Entry<String, String> entry : allNotWellMap.entrySet()) {
-                                               msg = msg.concat("\nkey = " + entry.getKey() + " msg = " + entry.getValue());
-                                       }
-                                       logger.error("endTransaction: allNotWellMap is NOT EMPTY.  Not advancing forward"
-                                                       + "progress counter. \n{}\n", msg);
-                                       return;
-                               } else {
-                                       if (logger.isDebugEnabled()) {
-                                               if (getAllSeemsWellMap() != null) {
-                                                       if (!(getAllSeemsWellMap().isEmpty())) {
-                                                               String msg = "allSeemsWellMap:";
-                                                               for (Entry<String, String> entry : allSeemsWellMap.entrySet()) {
-                                                                       msg = msg.concat("\nkey = " + entry.getKey() + " msg = " + entry.getValue());
-                                                               }
-                                                               logger.debug(
-                                                                               "endTransaction: allNotWellMap IS EMPTY and allSeemsWellMap is NOT EMPTY.  Advancing forward"
-                                                                                               + "progress counter. \n{}\n",
-                                                                               msg);
-                                                       }
-                                               }
-                                       }
-                               }
-                       }
-                       // increment local FPC
-                       fpCounter++;
-               }
-       }
-
-       // update FP count in DB with local FP count
-       private void writeFpc() throws IntegrityMonitorException {
-
-               // Start a transaction
-               EntityTransaction et = em.getTransaction();
-
-               if (!et.isActive()) {
-                       et.begin();
-               }
-
-               try {
-                       // query if ForwardProgress entry exists for resourceName
-                       Query fquery = em.createQuery("Select f from ForwardProgressEntity f where f.resourceName=:rn");
-                       fquery.setParameter("rn", resourceName);
-
-                       @SuppressWarnings("rawtypes")
-                       List fpList = fquery.setLockMode(LockModeType.NONE).setFlushMode(FlushModeType.COMMIT).getResultList();
-                       ForwardProgressEntity fpx;
-                       if (!fpList.isEmpty()) {
-                               // ignores multiple results
-                               fpx = (ForwardProgressEntity) fpList.get(0);
-                               // refresh the object from DB in case cached data was returned
-                               em.refresh(fpx);
-                               if (logger.isDebugEnabled()) {
-                                       logger.debug("Updating FP entry: Resource={}, fpcCount={}, lastUpdated={}, new fpcCount={}",
-                                                       resourceName, fpx.getFpcCount(), fpx.getLastUpdated(), fpCounter);
-                               }
-                               fpx.setFpcCount(fpCounter);
-                               em.persist(fpx);
-                               // flush to the DB and commit
-                               synchronized (imFlushLock) {
-                                       et.commit();
-                               }
-                       } else {
-                               // Error - FP entry does not exist
-                               String msg = "FP entry not found in database for resource " + resourceName;
-                               throw new IntegrityMonitorException(msg);
-                       }
-               } catch (Exception e) {
-                       try {
-                               synchronized (imFlushLock) {
-                                       if (et.isActive()) {
-                                               et.rollback();
-                                       }
-                               }
-                       } catch (Exception e1) {
-                               logger.error("IntegrityMonitor threw exception.", e1);
-                       }
-                       logger.error("writeFpc DB table commit failed with exception: {}", e);
-                       throw e;
-               }
-       }
-
-       // retrieve state manager reference
-       public final StateManagement getStateManager() {
-               return this.stateManager;
-       }
-
-       /**
-        * Read and validate properties
-        * 
-        * @throws IntegrityMonitorPropertiesException
-        */
-       private static void validateProperties(Properties prop) throws IntegrityMonitorPropertiesException {
-
-               if (prop.getProperty(IntegrityMonitorProperties.DB_DRIVER) == null) {
-                       String msg = IntegrityMonitorProperties.DB_DRIVER + " property is null";
-                       logger.error("{}", msg);
-                       throw new IntegrityMonitorPropertiesException("IntegrityMonitor Property Exception: " + msg);
-               }
-
-               if (prop.getProperty(IntegrityMonitorProperties.DB_URL) == null) {
-                       String msg = IntegrityMonitorProperties.DB_URL + " property is null";
-                       logger.error("{}", msg);
-                       throw new IntegrityMonitorPropertiesException("IntegrityMonitor Property Exception: " + msg);
-               }
-
-               if (prop.getProperty(IntegrityMonitorProperties.DB_USER) == null) {
-                       String msg = IntegrityMonitorProperties.DB_USER + " property is null";
-                       logger.error("{}", msg);
-                       throw new IntegrityMonitorPropertiesException("IntegrityMonitor Property Exception: " + msg);
-               }
-
-               if (prop.getProperty(IntegrityMonitorProperties.DB_PWD) == null) {
-                       String msg = IntegrityMonitorProperties.DB_PWD + " property is null";
-                       logger.error("{}", msg);
-                       throw new IntegrityMonitorPropertiesException("IntegrityMonitor Property Exception: " + msg);
-               }
-
-               if (prop.getProperty(IntegrityMonitorProperties.FP_MONITOR_INTERVAL) != null) {
-                       try {
-                               monitorIntervalMs = toMillis(
-                                               Integer.parseInt(prop.getProperty(IntegrityMonitorProperties.FP_MONITOR_INTERVAL).trim()));
-                       } catch (NumberFormatException e) {
-                               logger.warn("Ignored invalid property: {}", IntegrityMonitorProperties.FP_MONITOR_INTERVAL, e);
-                       }
-               }
-
-               if (prop.getProperty(IntegrityMonitorProperties.FAILED_COUNTER_THRESHOLD) != null) {
-                       try {
-                               failedCounterThreshold = Integer
-                                               .parseInt(prop.getProperty(IntegrityMonitorProperties.FAILED_COUNTER_THRESHOLD).trim());
-                       } catch (NumberFormatException e) {
-                               logger.warn("Ignored invalid property: {}", IntegrityMonitorProperties.FAILED_COUNTER_THRESHOLD, e);
-                       }
-               }
-
-               if (prop.getProperty(IntegrityMonitorProperties.TEST_TRANS_INTERVAL) != null) {
-                       try {
-                               testTransIntervalMs = toMillis(
-                                               Integer.parseInt(prop.getProperty(IntegrityMonitorProperties.TEST_TRANS_INTERVAL).trim()));
-                       } catch (NumberFormatException e) {
-                               logger.warn("Ignored invalid property: {}", IntegrityMonitorProperties.TEST_TRANS_INTERVAL, e);
-                       }
-               }
-
-               if (prop.getProperty(IntegrityMonitorProperties.WRITE_FPC_INTERVAL) != null) {
-                       try {
-                               writeFpcIntervalMs = toMillis(
-                                               Integer.parseInt(prop.getProperty(IntegrityMonitorProperties.WRITE_FPC_INTERVAL).trim()));
-                       } catch (NumberFormatException e) {
-                               logger.warn("Ignored invalid property: {}", IntegrityMonitorProperties.WRITE_FPC_INTERVAL, e);
-                       }
-               }
-
-               if (prop.getProperty(IntegrityMonitorProperties.CHECK_DEPENDENCY_INTERVAL) != null) {
-                       try {
-                               checkDependencyIntervalMs = toMillis(Integer
-                                               .parseInt(prop.getProperty(IntegrityMonitorProperties.CHECK_DEPENDENCY_INTERVAL).trim()));
-                       } catch (NumberFormatException e) {
-                               logger.warn("Ignored invalid property: {}", IntegrityMonitorProperties.CHECK_DEPENDENCY_INTERVAL, e);
-                       }
-               }
-
-               // dependency_groups are a semi-colon separated list of groups
-               // each group is a comma separated list of resource names
-               // For ex. dependency_groups = site_1.pap_1,site_1.pap_2 ; site_1.pdp_1,
-               // site_1.pdp_2
-               if (prop.getProperty(IntegrityMonitorProperties.DEPENDENCY_GROUPS) != null) {
-                       try {
-                               depGroups = prop.getProperty(IntegrityMonitorProperties.DEPENDENCY_GROUPS).split(";");
-                               if (logger.isDebugEnabled()) {
-                                       logger.debug("dependency groups property = {}", Arrays.toString(depGroups));
-                               }
-                       } catch (Exception e) {
-                               logger.warn("Ignored invalid property: {}", IntegrityMonitorProperties.DEPENDENCY_GROUPS, e);
-                       }
-               }
-
-               siteName = prop.getProperty(IntegrityMonitorProperties.SITE_NAME);
-               if (siteName == null) {
-                       String msg = IntegrityMonitorProperties.SITE_NAME + " property is null";
-                       logger.error("{}", msg);
-                       throw new IntegrityMonitorPropertiesException("IntegrityMonitor Property Exception: " + msg);
-               } else {
-                       siteName = siteName.trim();
-               }
-
-               nodeType = prop.getProperty(IntegrityMonitorProperties.NODE_TYPE);
-               if (nodeType == null) {
-                       String msg = IntegrityMonitorProperties.NODE_TYPE + " property is null";
-                       logger.error("{}", msg);
-                       throw new IntegrityMonitorPropertiesException("IntegrityMonitor Property Exception: " + msg);
-               } else {
-                       nodeType = nodeType.trim();
-                       if (!isNodeTypeEnum(nodeType)) {
-                               String msg = IntegrityMonitorProperties.NODE_TYPE + " property " + nodeType + " is invalid";
-                               logger.error("{}", msg);
-                               throw new IntegrityMonitorPropertiesException("IntegrityMonitor Property Exception: " + msg);
-                       }
-               }
-
-               if (prop.getProperty(IntegrityMonitorProperties.TEST_VIA_JMX) != null) {
-                       String jmxTest = prop.getProperty(IntegrityMonitorProperties.TEST_VIA_JMX).trim();
-                       testViaJmx = Boolean.parseBoolean(jmxTest);
-               }
-
-               if (prop.getProperty(IntegrityMonitorProperties.JMX_FQDN) != null) {
-                       jmxFqdn = prop.getProperty(IntegrityMonitorProperties.JMX_FQDN).trim();
-                       if (jmxFqdn.isEmpty()) {
-                               jmxFqdn = null;
-                       }
-               }
-
-               if (prop.getProperty(IntegrityMonitorProperties.MAX_FPC_UPDATE_INTERVAL) != null) {
-                       try {
-                               maxFpcUpdateIntervalMs = toMillis(
-                                               Integer.parseInt(prop.getProperty(IntegrityMonitorProperties.MAX_FPC_UPDATE_INTERVAL).trim()));
-                       } catch (NumberFormatException e) {
-                               logger.warn("Ignored invalid property: {}", IntegrityMonitorProperties.MAX_FPC_UPDATE_INTERVAL, e);
-                       }
-               }
-
-               if (prop.getProperty(IntegrityMonitorProperties.STATE_AUDIT_INTERVAL_MS) != null) {
-                       try {
-                               stateAuditIntervalMs = Long
-                                               .parseLong(prop.getProperty(IntegrityMonitorProperties.STATE_AUDIT_INTERVAL_MS));
-                       } catch (NumberFormatException e) {
-                               logger.warn("Ignored invalid property: {}", IntegrityMonitorProperties.STATE_AUDIT_INTERVAL_MS, e);
-                       }
-               }
-
-               if (prop.getProperty(IntegrityMonitorProperties.REFRESH_STATE_AUDIT_INTERVAL_MS) != null) {
-                       try {
-                               refreshStateAuditIntervalMs = Long
-                                               .parseLong(prop.getProperty(IntegrityMonitorProperties.REFRESH_STATE_AUDIT_INTERVAL_MS));
-                       } catch (NumberFormatException e) {
-                               logger.warn("Ignored invalid property: {}", IntegrityMonitorProperties.REFRESH_STATE_AUDIT_INTERVAL_MS,
-                                               e);
-                       }
-               }
-
-               logger.debug("IntegrityMonitor.validateProperties(): Property values \n" + "maxFpcUpdateIntervalMs = {}\n",
-                               maxFpcUpdateIntervalMs);
-
-               return;
-       }
-
-       public static void updateProperties(Properties newprop) {
-               if (isUnitTesting()) {
-                       try {
-                               validateProperties(newprop);
-                       } catch (IntegrityMonitorPropertiesException e) {
-                               logger.error("IntegrityMonitor threw exception.", e);
-                       }
-               } else {
-                       logger.debug("Update integrity monitor properties not allowed");
-               }
-       }
-
-       private static boolean isNodeTypeEnum(String nodeType) {
-               String upper = nodeType.toUpperCase();
-               for (NodeType n : NodeType.values()) {
-                       if (n.toString().equals(upper)) {
-                               return true;
-                       }
-               }
-               return false;
-       }
-
-       /**
-        * Look for "Forward Progress" -- if the 'FPMonitor' is stalled for too
-        * long, the operational state is changed to 'Disabled', and an alarm is
-        * set. The state is restored when forward progress continues.
-        */
-       private void fpMonitorCycle() {
-               logger.debug("fpMonitorCycle(): entry");
-               synchronized (fpMonitorCycleLock) {
-                       // monitoring interval checks
-                       if (monitorIntervalMs <= 0) {
-                               logger.debug("fpMonitorCycle(): disabled");
-                               elapsedTime = 0;
-                               return; // monitoring is disabled
-                       }
-
-                       elapsedTime = elapsedTime + cycleIntervalMillis;
-                       if (elapsedTime < monitorIntervalMs) {
-                               return; // monitoring interval not reached
-                       }
-
-                       elapsedTime = 0; // reset elapsed time
-
-                       try {
-                               if (fpCounter == lastFpCounter) {
-                                       // no forward progress
-                                       missedCycles += 1;
-                                       if (missedCycles >= failedCounterThreshold && !alarmExists) {
-                                               logger.debug("Forward progress not detected for resource {}. Setting state to disable failed.",
-                                                               resourceName);
-                                               if (!(stateManager.getOpState()).equals(StateManagement.DISABLED)) {
-                                                       // Note: The refreshStateAudit will make redundant
-                                                       // calls
-                                                       stateManager.disableFailed();
-                                               } // The refreshStateAudit will catch the case where
-                                                       // opStat = disabled and availState !
-                                                       // failed/dependency.failed
-                                               alarmExists = true;
-                                       }
-                               } else {
-                                       // forward progress has occurred
-                                       lastFpCounter = fpCounter;
-                                       missedCycles = 0;
-                                       // set op state to enabled
-                                       logger.debug("Forward progress detected for resource {}. Setting state to enable not failed.",
-                                                       resourceName);
-                                       if (!(stateManager.getOpState()).equals(StateManagement.ENABLED)) {
-                                               // Note: The refreshStateAudit will make redundant calls
-                                               stateManager.enableNotFailed();
-                                       } // The refreshStateAudit will catch the case where
-                                               // opState=enabled and availStatus != null
-                                       alarmExists = false;
-                               }
-                       } catch (Exception e) {
-                               // log error
-                               logger.error("FP Monitor encountered error. ", e);
-                       }
-               }
-               logger.debug("fpMonitorCycle(): exit");
-       }
-
-       /**
-        * Look for "Forward Progress" on other nodes. If they are not making
-        * forward progress, check their operational state. If it is not disabled,
-        * then disable them.
-        */
-       private void stateAudit() {
-               logger.debug("IntegrityMonitor.stateAudit(): entry");
-               if (stateAuditIntervalMs <= 0) {
-                       logger.debug("IntegrityMonitor.stateAudit(): disabled");
-                       return; // stateAudit is disabled
-               }
-
-               // Only run from nodes that are operational
-               if (stateManager.getOpState().equals(StateManagement.DISABLED)) {
-                       logger.debug("IntegrityMonitor.stateAudit(): DISABLED. returning");
-                       return;
-               }
-               if (stateManager.getAdminState().equals(StateManagement.LOCKED)) {
-                       logger.debug("IntegrityMonitor.stateAudit(): LOCKED. returning");
-                       return;
-               }
-               if (!stateManager.getStandbyStatus().equals(StateManagement.NULL_VALUE)
-                               && stateManager.getStandbyStatus() != null) {
-                       if (!stateManager.getStandbyStatus().equals(StateManagement.PROVIDING_SERVICE)) {
-                               logger.debug("IntegrityMonitor.stateAudit(): NOT PROVIDING_SERVICE. returning");
-                               return;
-                       }
-               }
-
-               Date date = new Date();
-               long timeSinceLastStateAudit = date.getTime() - lastStateAuditTime.getTime();
-               if (timeSinceLastStateAudit < stateAuditIntervalMs) {
-                       logger.debug("IntegrityMonitor.stateAudit(): Not time to run. returning");
-                       return;
-               }
-
-               executeStateAudit();
-
-               lastStateAuditTime = date;
-
-               logger.debug("IntegrityMonitor.stateAudit(): exit");
-       }// end stateAudit()
-
-       public void executeStateAudit() {
-               logger.debug("IntegrityMonitor.executeStateAudit(): entry");
-               Date date = new Date();
-
-               // Get all entries in the forwardprogressentity table
-               List<ForwardProgressEntity> fpList = getAllForwardProgressEntity();
-
-               // Check if each forwardprogressentity entry is current
-               for (ForwardProgressEntity fpe : fpList) {
-                       // If the this is my ForwardProgressEntity, continue
-                       if (fpe.getResourceName().equals(IntegrityMonitor.resourceName)) {
-                               continue;
-                       }
-                       // Make sure you are not getting a cached version
-                       em.refresh(fpe);
-                       long diffMs = date.getTime() - fpe.getLastUpdated().getTime();
-                       if (logger.isDebugEnabled()) {
-                               logger.debug("IntegrityMonitor.executeStateAudit(): resource = {}, diffMs = {}", fpe.getResourceName(),
-                                               diffMs);
-                       }
-
-                       // Threshold for a stale entry
-                       long staleMs = maxFpcUpdateIntervalMs;
-                       if (logger.isDebugEnabled()) {
-                               logger.debug("IntegrityMonitor.executeStateAudit(): resource = {}, staleMs = {}", fpe.getResourceName(),
-                                               staleMs);
-                       }
-
-                       if (diffMs > staleMs) {
-                               // ForwardProgress is stale. Disable it
-                               // Start a transaction
-                               logger.debug("IntegrityMonitor.executeStateAudit(): resource = {}, FPC is stale. Disabling it");
-                               EntityTransaction et = em.getTransaction();
-                               et.begin();
-                               StateManagementEntity sme = null;
-                               try {
-                                       // query if StateManagement entry exists for fpe resource
-                                       Query query = em
-                                                       .createQuery("Select p from StateManagementEntity p where p.resourceName=:resource");
-                                       query.setParameter("resource", fpe.getResourceName());
-
-                                       @SuppressWarnings("rawtypes")
-                                       List smList = query.setLockMode(LockModeType.NONE).setFlushMode(FlushModeType.COMMIT)
-                                                       .getResultList();
-                                       if (!smList.isEmpty()) {
-                                               // exists
-                                               sme = (StateManagementEntity) smList.get(0);
-                                               // refresh the object from DB in case cached data was
-                                               // returned
-                                               em.refresh(sme);
-                                               if (logger.isDebugEnabled()) {
-                                                       logger.debug(
-                                                                       "IntegrityMonitor.executeStateAudit(): Found entry in StateManagementEntity table for Resource={}",
-                                                                       sme.getResourceName());
-                                               }
-                                       } else {
-                                               String msg = "IntegrityMonitor.executeStateAudit(): " + fpe.getResourceName()
-                                                               + ": resource not found in state management entity database table";
-                                               logger.error("{}", msg);
-                                       }
-                                       synchronized (imFlushLock) {
-                                               et.commit();
-                                       }
-                               } catch (Exception e) {
-                                       // log an error
-                                       logger.error(
-                                                       "IntegrityMonitor.executeStateAudit(): {}: StateManagementEntity DB read failed with exception: ",
-                                                       fpe.getResourceName(), e);
-                                       synchronized (imFlushLock) {
-                                               if (et.isActive()) {
-                                                       et.rollback();
-                                               }
-                                       }
-                               }
-
-                               if (sme != null && !sme.getOpState().equals(StateManagement.DISABLED)) {
-                                       if (logger.isDebugEnabled()) {
-                                               logger.debug("IntegrityMonitor.executeStateAudit(): Changing OpStat = disabled for {}",
-                                                               sme.getResourceName());
-                                       }
-                                       try {
-                                               stateManager.disableFailed(sme.getResourceName());
-                                       } catch (Exception e) {
-                                               String msg = "IntegrityMonitor.executeStateAudit(): Failed to disable " + sme.getResourceName();
-                                               logger.error("{}", msg, e);
-                                       }
-                               }
-                       } // end if(diffMs > staleMs)
-               } // end for(ForwardProgressEntity fpe : fpList)
-               logger.debug("IntegrityMonitor.executeStateAudit(): exit");
-       }
-
-       /**
-        * Execute a test transaction when test transaction interval has elapsed.
-        */
-       private void checkTestTransaction() {
-               logger.debug("checkTestTransaction(): entry");
-               synchronized (checkTestTransactionLock) {
-
-                       // test transaction timer checks
-                       if (testTransIntervalMs <= 0) {
-                               logger.debug("checkTestTransaction(): disabled");
-                               elapsedTestTransTime = 0;
-                               return; // test transaction is disabled
-                       }
-
-                       elapsedTestTransTime = elapsedTestTransTime + cycleIntervalMillis;
-                       if (elapsedTestTransTime < testTransIntervalMs) {
-                               return; // test transaction interval not reached
-                       }
-
-                       elapsedTestTransTime = 0; // reset elapsed time
-
-                       // execute test transaction
-                       testTransaction();
-               }
-               logger.debug("checkTestTransaction(): exit");
-       }
-
-       /**
-        * Updates Fpc counter in database when write Fpc interval has elapsed.
-        */
-       private void checkWriteFpc() {
-               logger.debug("checkWriteFpc(): entry");
-               synchronized (checkWriteFpcLock) {
-
-                       // test transaction timer checks
-                       if (writeFpcIntervalMs <= 0) {
-                               logger.debug("checkWriteFpc(): disabled");
-                               elapsedWriteFpcTime = 0;
-                               return; // write Fpc is disabled
-                       }
-
-                       elapsedWriteFpcTime = elapsedWriteFpcTime + cycleIntervalMillis;
-                       if (elapsedWriteFpcTime < writeFpcIntervalMs) {
-                               return; // write Fpc interval not reached
-                       }
-
-                       elapsedWriteFpcTime = 0; // reset elapsed time
-
-                       // write Fpc to database
-                       try {
-                               writeFpc();
-                       } catch (Exception e) {
-                               logger.error("IntegrityMonitor threw exception.", e);
-                       }
-               }
-               logger.debug("checkWriteFpc(): exit");
-       }
-
-       /**
-        * Execute a dependency health check periodically which also updates this
-        * resource's state.
-        */
-       private void checkDependentHealth() {
-               logger.debug("checkDependentHealth: entry");
-               if (checkDependencyIntervalMs <= 0) {
-                       logger.debug("checkDependentHealth: disabled");
-                       return; // dependency monitoring is disabled
-               }
-
-               long currTime = System.currentTimeMillis();
-               logger.debug("checkDependentHealth currTime - lastDependencyCheckTime = {}",
-                               currTime - lastDependencyCheckTime);
-               if ((currTime - lastDependencyCheckTime) > checkDependencyIntervalMs) {
-                       // execute dependency check and update this resource's state
-
-                       dependencyCheck();
-               }
-               logger.debug("checkDependentHealth: exit");
-       }
-
-       /*
-        * This is a simple refresh audit which is periodically run to assure that
-        * the states and status attributes are aligned and notifications are sent
-        * to any listeners. It is possible for state/status to get out of synch and
-        * notified systems to be out of synch due to database corruption (manual or
-        * otherwise) or because a node became isolated.
-        * 
-        * When the operation (lock/unlock) is called, it will cause a re-evaluation
-        * of the state and send a notification to all registered observers.
-        */
-       private void refreshStateAudit() {
-               logger.debug("refreshStateAudit(): entry");
-               if (refreshStateAuditIntervalMs <= 0) {
-                       // The audit is disabled
-                       logger.debug("refreshStateAudit(): disabled");
-                       return;
-               }
-               executeRefreshStateAudit();
-               logger.debug("refreshStateAudit(): exit");
-       }
-
-       public void executeRefreshStateAudit() {
-               logger.debug("executeRefreshStateAudit(): entry");
-               synchronized (refreshStateAuditLock) {
-                       logger.debug("refreshStateAudit: entry");
-                       Date now = new Date();
-                       long nowMs = now.getTime();
-                       long lastTimeMs = refreshStateAuditLastRunDate.getTime();
-                       logger.debug("refreshStateAudit: ms since last run = {}", nowMs - lastTimeMs);
-
-                       if ((nowMs - lastTimeMs) > refreshStateAuditIntervalMs) {
-                               String adminState = stateManager.getAdminState();
-                               logger.debug("refreshStateAudit: adminState = {}", adminState);
-                               if (adminState.equals(StateManagement.LOCKED)) {
-                                       try {
-                                               logger.debug("refreshStateAudit: calling lock()");
-                                               stateManager.lock();
-                                       } catch (Exception e) {
-                                               logger.error("refreshStateAudit: caught unexpected exception from stateManager.lock(): ", e);
-                                       }
-                               } else {// unlocked
-                                       try {
-                                               logger.debug("refreshStateAudit: calling unlock()");
-                                               stateManager.unlock();
-                                       } catch (Exception e) {
-                                               logger.error("refreshStateAudit: caught unexpected exception from stateManager.unlock(): ", e);
-                                       }
-                               }
-                               refreshStateAuditLastRunDate = new Date();
-                               logger.debug("refreshStateAudit: exit");
-                       }
-               }
-               logger.debug("executeRefreshStateAudit(): exit");
-       }
-
-       /**
-        * The following nested class periodically performs the forward progress
-        * check, checks dependencies, does a refresh state audit and runs the
-        * stateAudit.
-        */
-       class FPManager extends Thread {
-               private final CountDownLatch stopper = new CountDownLatch(1);
-
-               private BlockingQueue<CountDownLatch> queue;
-               private CountDownLatch progressLatch = null;
-
-               // Constructor - start FP manager thread
-               FPManager(BlockingQueue<CountDownLatch> queue) {
-                       this.queue = queue;
-                       // set now as the last time the refreshStateAudit ran
-                       IntegrityMonitor.this.refreshStateAuditLastRunDate = new Date();
-                       // start thread
-                       this.start();
-               }
-
-               @Override
-               public void run() {
-                       logger.debug("FPManager thread running");
-
-                       try {
-                               getLatch();
-                               decrementLatch();
-
-                               while (!stopper.await(cycleIntervalMillis, TimeUnit.MILLISECONDS)) {
-                                       getLatch();
-                                       IntegrityMonitor.this.runOnce();
-                                       decrementLatch();
-                               }
-
-                       } catch (InterruptedException e) {
-                               logger.debug("IntegrityMonitor threw exception.", e);
-                               Thread.currentThread().interrupt();
-                       }
-               }
-
-               public void stopAndExit() {
-                       stopper.countDown();
-                       this.interrupt();
-               }
-
-               /**
-                * Gets the next latch from the queue.
-                * 
-                * @throws InterruptedException
-                * 
-                */
-               private void getLatch() throws InterruptedException {
-                       if (queue != null) {
-                               progressLatch = queue.take();
-                       }
-               }
-
-               /**
-                * Decrements the current latch.
-                */
-               private void decrementLatch() {
-                       if (progressLatch != null) {
-                               progressLatch.countDown();
-                       }
-               }
-
-       }
-
-       private void runOnce() {
-               try {
-                       logger.debug("FPManager calling fpMonitorCycle()");
-                       // check forward progress timer
-                       fpMonitorCycle();
-
-                       logger.debug("FPManager calling checkTestTransaction()");
-                       // check test transaction timer
-                       checkTestTransaction();
-
-                       logger.debug("FPManager calling checkWriteFpc()");
-                       // check write Fpc timer
-                       checkWriteFpc();
-
-                       logger.debug("FPManager calling checkDependentHealth()");
-                       // check dependency health
-                       checkDependentHealth();
-
-                       logger.debug("FPManager calling refreshStateAudit()");
-                       // check if it is time to run the refreshStateAudit
-                       refreshStateAudit();
-
-                       logger.debug("FPManager calling stateAudit()");
-                       // check if it is time to run the stateAudit
-                       stateAudit();
-
-               } catch (Exception e) {
-                       logger.error("Ignore FPManager thread processing timer(s) exception: ", e);
-               }
-       }
-
-       public void allSeemsWell(@NotNull String key, @NotNull Boolean asw, @NotNull String msg)
-                       throws AllSeemsWellException {
-
-               logger.debug("allSeemsWell entry: key = {}, asw = {}, msg = {}", key, asw, msg);
-               if (key == null || key.isEmpty()) {
-                       logger.error("allSeemsWell: 'key' has no visible content");
-                       throw new IllegalArgumentException("allSeemsWell: 'key' has no visible content");
-               }
-               if (asw == null) {
-                       logger.error("allSeemsWell: 'asw' is null");
-                       throw new IllegalArgumentException("allSeemsWell: 'asw' is null");
-               }
-               if (msg == null || msg.isEmpty()) {
-                       logger.error("allSeemsWell: 'msg' has no visible content");
-                       throw new IllegalArgumentException("allSeemsWell: 'msg' has no visible content");
-               }
-
-               if (allSeemsWellMap == null) {
-                       allSeemsWellMap = new HashMap<>();
-               }
-
-               if (allNotWellMap == null) {
-                       allNotWellMap = new HashMap<>();
-               }
-
-               if (asw) {
-                       logger.info("allSeemsWell: ALL SEEMS WELL: key = {}, msg = {}", key, msg);
-                       try {
-                               allSeemsWellMap.put(key, msg);
-                       } catch (Exception e) {
-                               String exceptMsg = "allSeemsWell: encountered an exception with allSeemsWellMap.put(" + key + "," + msg
-                                               + ")";
-                               logger.error(exceptMsg);
-                               throw new AllSeemsWellException(exceptMsg, e);
-                       }
-
-                       try {
-                               allNotWellMap.remove(key);
-                       } catch (Exception e) {
-                               String exceptMsg = "allSeemsWell: encountered an exception with allNotWellMap.delete(" + key + ")";
-                               logger.error(exceptMsg);
-                               throw new AllSeemsWellException(exceptMsg, e);
-                       }
-
-               } else {
-                       logger.error("allSeemsWell: ALL NOT WELL: key = {}, msg = {}", key, msg);
-                       try {
-                               allSeemsWellMap.remove(key);
-                       } catch (Exception e) {
-                               String exceptMsg = "allSeemsWell: encountered an exception with allSeemsWellMap.remove(" + key + ")";
-                               logger.error(exceptMsg);
-                               throw new AllSeemsWellException(exceptMsg, e);
-                       }
-
-                       try {
-                               allNotWellMap.put(key, msg);
-                       } catch (Exception e) {
-                               String exceptMsg = "allSeemsWell: encountered an exception with allNotWellMap.put(" + key + msg + ")";
-                               logger.error(exceptMsg);
-                               throw new AllSeemsWellException(exceptMsg, e);
-                       }
-               }
-
-               if (logger.isDebugEnabled()) {
-                       for (Entry<String, String> entry : allSeemsWellMap.entrySet()) {
-                               logger.debug("allSeemsWellMap: key = {}  msg = {}", entry.getKey(), entry.getValue());
-                       }
-                       for (Entry<String, String> entry : allNotWellMap.entrySet()) {
-                               logger.debug("allNotWellMap: key = {}  msg = {}", entry.getKey(), entry.getValue());
-                       }
-                       logger.debug("allSeemsWell exit");
-               }
-       }
-
-       /**
-        * Converts the given value to milliseconds using the current
-        * {@link #propertyUnits}.
-        * 
-        * @param value
-        *            value to be converted, or -1
-        * @return the value, in milliseconds, or -1
-        */
-       private static long toMillis(long value) {
-               return (value < 0 ? -1 : propertyUnits.toMillis(value));
-       }
-
-       public Map<String, String> getAllSeemsWellMap() {
-               return allSeemsWellMap;
-       }
-
-       public Map<String, String> getAllNotWellMap() {
-               return allNotWellMap;
-       }
-
-       /*
-        * The remaining methods are used by JUnit tests.
-        */
-
-       public static boolean isUnitTesting() {
-               return isUnitTesting;
-       }
-
-       public static void setUnitTesting(boolean isUnitTesting) {
-               IntegrityMonitor.isUnitTesting = isUnitTesting;
-       }
-
-       protected static TimeUnit getPropertyUnits() {
-               return propertyUnits;
-       }
-
-       protected static void setPropertyUnits(TimeUnit propertyUnits) {
-               IntegrityMonitor.propertyUnits = propertyUnits;
-       }
-
-       protected static long getCycleIntervalMillis() {
-               return cycleIntervalMillis;
-       }
-
-       protected static void setCycleIntervalMillis(long cycleIntervalMillis) {
-               IntegrityMonitor.cycleIntervalMillis = cycleIntervalMillis;
-       }
-
-       protected static String getPersistenceUnit() {
-               return persistenceUnit;
-       }
-
-       protected static void setPersistenceUnit(String persistenceUnit) {
-               IntegrityMonitor.persistenceUnit = persistenceUnit;
-       }
+    // Persistence Unit for JPA
+    public static final String PERSISTENCE_UNIT = "operationalPU";
+
+    private static String persistenceUnit = PERSISTENCE_UNIT;
+
+    private static final long CYCLE_INTERVAL_MILLIS = 1000L;
+
+    private static long cycleIntervalMillis = CYCLE_INTERVAL_MILLIS;
+
+    /**
+     * Units used for intervals extracted from the properties, which are typically given in seconds.
+     */
+    private static TimeUnit propertyUnits = TimeUnit.SECONDS;
+
+    private StateManagement stateManager = null;
+
+    private FpManager fpManager = null;
+
+    // The forward progress counter is incremented as the
+    // process being monitored makes forward progress
+    private int fpCounter = 0;
+    private int lastFpCounter = 0;
+
+    // elapsed time since last FP counter check
+    private long elapsedTime = 0;
+
+    // elapsed time since last test transaction check
+    private long elapsedTestTransTime = 0;
+
+    // elapsed time since last write Fpc check
+    private long elapsedWriteFpcTime = 0;
+
+    // last dependency health check time. Initialize so that the periodic check
+    // starts after 60 seconds.
+    // This allows time for dependents to come up.
+    private long lastDependencyCheckTime = System.currentTimeMillis();
+
+    // Time of the last state audit. It is initialized at the time of the IM
+    // construction
+    private Date lastStateAuditTime = new Date();
+
+    // Interval between state audits in ms. We leave it turned off by default so
+    // that it will only
+    // be run on the nodes which we want doing the audit. In particular, we only
+    // want it to run
+    // on the droolspdps
+    private static long stateAuditIntervalMs = 0L;
+
+    // the number of cycles since 'fpCounter' was last changed
+    private int missedCycles = 0;
+
+    // forward progress monitoring interval
+    private static long monitorIntervalMs = 1000L * IntegrityMonitorProperties.DEFAULT_MONITOR_INTERVAL;
+    // The number of periods the counter fails to increment before an alarm is
+    // raised.
+    private static int failedCounterThreshold = IntegrityMonitorProperties.DEFAULT_FAILED_COUNTER_THRESHOLD;
+    // test transaction interval
+    private static long testTransIntervalMs = 1000L * IntegrityMonitorProperties.DEFAULT_TEST_INTERVAL;
+    // write Fpc to DB interval
+    private static long writeFpcIntervalMs = 1000L * IntegrityMonitorProperties.DEFAULT_WRITE_FPC_INTERVAL;
+    // check the health of dependencies
+    private static long checkDependencyIntervalMs =
+            1000L * IntegrityMonitorProperties.DEFAULT_CHECK_DEPENDENCY_INTERVAL;
+
+    // A lead subsystem will have dependency groups with resource names in the
+    // properties file.
+    // For non-lead subsystems, the dependency_group property will be absent.
+    private static String[] depGroups = null;
+
+    private static boolean isUnitTesting = false;
+
+    // can turn on health checking of dependents via jmx test() call by setting
+    // this property to true
+    private static boolean testViaJmx = false;
+
+    private static String jmxFqdn = null;
+
+    // this is the max interval allowed without any forward progress
+    // counter updates
+    private static long maxFpcUpdateIntervalMs = 1000L * IntegrityMonitorProperties.DEFAULT_MAX_FPC_UPDATE_INTERVAL;
+
+    // Node types
+    private enum NodeType {
+        PDP_XACML, PDP_DROOLS, PAP, PAP_ADMIN, LOGPARSER, BRMS_GATEWAY, ASTRA_GATEWAY, ELK_SERVER, PYPDP
+
+    }
+
+    private static String siteName;
+    private static String nodeType;
+    private Date refreshStateAuditLastRunDate;
+    private static long refreshStateAuditIntervalMs = 600000; // run it once per 10 minutes
+
+    // lock objects
+    private final Object evaluateSanityLock = new Object();
+    private final Object fpMonitorCycleLock = new Object();
+    private final Object dependencyCheckLock = new Object();
+    private final Object testTransactionLock = new Object();
+    private final Object startTransactionLock = new Object();
+    private final Object endTransactionLock = new Object();
+    private final Object checkTestTransactionLock = new Object();
+    private final Object checkWriteFpcLock = new Object();
+    private static final Object getInstanceLock = new Object();
+    private final Object refreshStateAuditLock = new Object();
+    private final Object imFlushLock = new Object();
+
+    private Map<String, String> allSeemsWellMap;
+    private Map<String, String> allNotWellMap;
+
+    /**
+     * IntegrityMonitor constructor. It is invoked from the getInstance() method in this class or
+     * from the constructor of a child or sub-class. A class can extend the IntegrityMonitor class
+     * if there is a need to override any of the base methods (ex. subsystemTest()). Only one
+     * instance is allowed to be created per resource name.
+     * 
+     * @param resourceName The resource name of the resource
+     * @param properties a set of properties passed in from the resource
+     * @throws IntegrityMonitorException if any errors are encountered in the constructor
+     */
+    protected IntegrityMonitor(String resourceName, Properties properties) throws IntegrityMonitorException {
+
+        this(resourceName, properties, null);
+    }
+
+    /**
+     * IntegrityMonitor constructor. It is invoked from the getInstance() method in this class or
+     * from the constructor of a child or sub-class. A class can extend the IntegrityMonitor class
+     * if there is a need to override any of the base methods (ex. subsystemTest()). Only one
+     * instance is allowed to be created per resource name.
+     * 
+     * @param resourceName The resource name of the resource
+     * @param properties a set of properties passed in from the resource
+     * @param queue queue to use to control the FPManager thread, or {@code null}
+     * @throws IntegrityMonitorException if any errors are encountered in the constructor
+     */
+    protected IntegrityMonitor(String resourceName, Properties properties, BlockingQueue<CountDownLatch> queue)
+            throws IntegrityMonitorException {
+
+        // singleton check since this constructor can be called from a child or
+        // sub-class
+        if (instance != null) {
+            String msg = "IM object exists and only one instance allowed";
+            logger.error("{}", msg);
+            throw new IntegrityMonitorException("IntegrityMonitor constructor exception: " + msg);
+        }
+        instance = this;
+
+        IntegrityMonitor.resourceName = resourceName;
+
+        /*
+         * Validate that the properties file contains all the needed properties. Throws an
+         * IntegrityMonitorPropertiesException
+         */
+        validateProperties(properties);
+
+        // construct jmx url
+        String jmxUrl = getJmxUrl();
+
+        //
+        // Create the entity manager factory
+        //
+        emf = Persistence.createEntityManagerFactory(persistenceUnit, properties);
+        //
+        // Did it get created?
+        //
+        if (emf == null) {
+            logger.error("Error creating IM entity manager factory with persistence unit: {}", persistenceUnit);
+            throw new IntegrityMonitorException("Unable to create IM Entity Manager Factory");
+        }
+
+        // add entry to forward progress and resource registration tables in DB
+
+        // Start a transaction
+        em = emf.createEntityManager();
+        EntityTransaction et = em.getTransaction();
+
+        et.begin();
+
+        try {
+            // if ForwardProgress entry exists for resourceName, update it. If
+            // not found, create a new entry
+            Query fquery = em.createQuery("Select f from ForwardProgressEntity f where f.resourceName=:rn");
+            fquery.setParameter("rn", resourceName);
+
+            @SuppressWarnings("rawtypes")
+            List fpList = fquery.setLockMode(LockModeType.NONE).setFlushMode(FlushModeType.COMMIT).getResultList();
+            ForwardProgressEntity fpx = null;
+            if (!fpList.isEmpty()) {
+                // ignores multiple results
+                fpx = (ForwardProgressEntity) fpList.get(0);
+                // refresh the object from DB in case cached data was returned
+                em.refresh(fpx);
+                if (logger.isDebugEnabled()) {
+                    logger.debug("Resource {} exists and will be updated - old fpc= {}, lastUpdated= {}", resourceName,
+                            fpx.getFpcCount(), fpx.getLastUpdated());
+                }
+                fpx.setFpcCount(fpCounter);
+            } else {
+                // Create a forward progress object
+                logger.debug("Adding resource {} to ForwardProgress table", resourceName);
+                fpx = new ForwardProgressEntity();
+            }
+            // update/set columns in entry
+            fpx.setResourceName(resourceName);
+            em.persist(fpx);
+            // flush to the DB
+            synchronized (imFlushLock) {
+                em.flush();
+            }
+
+            // if ResourceRegistration entry exists for resourceName, update it.
+            // If not found, create a new entry
+            Query rquery = em.createQuery("Select r from ResourceRegistrationEntity r where r.resourceName=:rn");
+            rquery.setParameter("rn", resourceName);
+
+            @SuppressWarnings("rawtypes")
+            List rrList = rquery.setLockMode(LockModeType.NONE).setFlushMode(FlushModeType.COMMIT).getResultList();
+            ResourceRegistrationEntity rrx = null;
+            if (!rrList.isEmpty()) {
+                // ignores multiple results
+                rrx = (ResourceRegistrationEntity) rrList.get(0);
+                // refresh the object from DB in case cached data was returned
+                em.refresh(rrx);
+                if (logger.isDebugEnabled()) {
+                    logger.debug("Resource {} exists and will be updated - old url= {}, createdDate={}", resourceName,
+                            rrx.getResourceUrl(), rrx.getCreatedDate());
+                }
+                rrx.setLastUpdated(new Date());
+            } else {
+                // register resource by adding entry to table in DB
+                logger.debug("Adding resource {} to ResourceRegistration table", resourceName);
+                rrx = new ResourceRegistrationEntity();
+            }
+            // update/set columns in entry
+            rrx.setResourceName(resourceName);
+            rrx.setResourceUrl(jmxUrl);
+            rrx.setNodeType(nodeType);
+            rrx.setSite(siteName);
+            em.persist(rrx);
+            // flush to the DB
+            synchronized (imFlushLock) {
+                et.commit();
+            }
+
+        } catch (Exception e) {
+            logger.error("IntegrityMonitor constructor DB table update failed with exception: ", e);
+            try {
+                if (et.isActive()) {
+                    synchronized (imFlushLock) {
+                        et.rollback();
+                    }
+                }
+            } catch (Exception e1) {
+                logger.error("IntegrityMonitor constructor threw exception: ", e1);
+            }
+            throw e;
+        }
+
+        try {
+            // create instance of StateMangement class and pass emf to it
+            stateManager = new StateManagement(emf, resourceName);
+
+            /**
+             * Initialize the state and status attributes. This will maintain any Administrative
+             * state value but will set the operational state = enabled, availability status = null,
+             * standby status = null. The integrity monitor will set the operational state via the
+             * FPManager and the owning application must set the standby status by calling
+             * promote/demote on the StateManager.
+             */
+            stateManager.initializeState();
+
+        } catch (StateManagementException e) {
+            throw new IntegrityMonitorException(e);
+        }
+
+        // create management bean
+        try {
+            new ComponentAdmin(resourceName, this, stateManager);
+        } catch (Exception e) {
+            logger.error("ComponentAdmin constructor exception: {}", e.toString(), e);
+        }
+
+        fpManager = new FpManager(queue);
+
+    }
+
+    /**
+     * Get an instance of IntegrityMonitor for a given resource name. It creates one if it does not
+     * exist. Only one instance is allowed to be created per resource name.
+     * 
+     * @param resourceName The resource name of the resource
+     * @param properties a set of properties passed in from the resource
+     * @return The new instance of IntegrityMonitor
+     * @throws IntegrityMonitorException if unable to create jmx url or the constructor returns an
+     *         exception
+     */
+    public static IntegrityMonitor getInstance(String resourceName, Properties properties)
+            throws IntegrityMonitorException {
+        return getInstance(resourceName, properties, null);
+    }
+
+    /**
+     * Get an instance of IntegrityMonitor for a given resource name. It creates one if it does not
+     * exist. Only one instance is allowed to be created per resource name.
+     * 
+     * @param resourceName The resource name of the resource
+     * @param properties a set of properties passed in from the resource
+     * @param queue queue to use to control the FPManager thread, or {@code null}
+     * @return The new instance of IntegrityMonitor
+     * @throws IntegrityMonitorException if unable to create jmx url or the constructor returns an
+     *         exception
+     */
+    protected static IntegrityMonitor getInstance(String resourceName, Properties properties,
+            BlockingQueue<CountDownLatch> queue) throws IntegrityMonitorException {
+
+        synchronized (getInstanceLock) {
+            logger.debug("getInstance() called - resourceName= {}", resourceName);
+            if (resourceName == null || resourceName.isEmpty() || properties == null) {
+                logger.error("Error: getIntegrityMonitorInstance() called with invalid input");
+                return null;
+            }
+
+            if (instance == null) {
+                logger.debug("Creating new instance of IntegrityMonitor");
+                instance = new IntegrityMonitor(resourceName, properties, queue);
+            }
+            return instance;
+        }
+    }
+
+    /**
+     * Get the single instance.
+     * 
+     * @return the instance
+     * @throws IntegrityMonitorException if no instance exists
+     */
+    public static IntegrityMonitor getInstance() throws IntegrityMonitorException {
+        logger.debug("getInstance() called");
+        if (instance == null) {
+            String msg = "No IntegrityMonitor instance exists."
+                    + " Please use the method IntegrityMonitor.getInstance(String resourceName, Properties properties)";
+            throw new IntegrityMonitorPropertiesException(msg);
+        } else {
+            return instance;
+        }
+    }
+
+    /**
+     * This is a facility used by JUnit testing to destroy the IntegrityMonitor instance before
+     * creating a new one. It waits a bit to allow the FPManager to fully exit.
+     */
+    public static void deleteInstance() throws IntegrityMonitorException {
+        logger.debug("deleteInstance() called");
+        synchronized (getInstanceLock) {
+            if (isUnitTesting() && instance != null && instance.getFpManager() != null) {
+                FpManager fpm = instance.getFpManager();
+
+                // Stop the FPManager thread
+                fpm.stopAndExit();
+
+                try {
+                    // Make sure it has exited
+                    fpm.join(2000L);
+                } catch (InterruptedException e) {
+                    logger.error("deleteInstance: Interrupted while waiting for FPManaager to fully exit", e);
+                    Thread.currentThread().interrupt();
+                }
+
+                if (fpm.isAlive()) {
+                    logger.error("IntegrityMonitor.deleteInstance() Failed to kill FPManager thread");
+                    throw new IntegrityMonitorException(
+                            "IntegrityMonitor.deleteInstance() Failed to kill FPManager thread");
+                }
+
+                instance = null;
+            }
+        }
+        logger.debug("deleteInstance() exit");
+    }
+
+    private FpManager getFpManager() {
+        return fpManager;
+    }
+
+    private static String getJmxUrl() throws IntegrityMonitorException {
+
+        // get the jmx remote port and construct the JMX URL
+        Properties systemProps = System.getProperties();
+        String jmxPort = systemProps.getProperty("com.sun.management.jmxremote.port");
+        String jmxErrMsg;
+        if (jmxPort == null) {
+            jmxErrMsg = "System property com.sun.management.jmxremote.port for JMX remote port is not set";
+            logger.error("{}", jmxErrMsg);
+            throw new IntegrityMonitorException("getJmxUrl exception: " + jmxErrMsg);
+        }
+
+        int port = 0;
+        try {
+            port = Integer.parseInt(jmxPort);
+        } catch (NumberFormatException e) {
+            jmxErrMsg = "JMX remote port is not a valid integer value - " + jmxPort;
+            logger.error("{}", jmxErrMsg);
+            throw new IntegrityMonitorException("getJmxUrl exception: " + jmxErrMsg);
+        }
+
+        try {
+            if (jmxFqdn == null) {
+                // get FQDN of this host
+                jmxFqdn = InetAddress.getLocalHost().getCanonicalHostName();
+            }
+        } catch (Exception e) {
+            String msg = "getJmxUrl could not get hostname";
+            logger.error("{}", msg, e);
+            throw new IntegrityMonitorException("getJmxUrl Exception: " + msg);
+        }
+        if (jmxFqdn == null) {
+            String msg = "getJmxUrl encountered null hostname";
+            logger.error("{}", msg);
+            throw new IntegrityMonitorException("getJmxUrl error: " + msg);
+        }
+
+        // assemble the jmx url
+        String jmxUrl = "service:jmx:rmi:///jndi/rmi://" + jmxFqdn + ":" + port + "/jmxrmi";
+
+        logger.debug("IntegerityMonitor - jmx url={}", jmxUrl);
+
+        return jmxUrl;
+    }
+
+    /**
+     * evaluateSanity() is designed to be called by an external entity to evealuate the sanity of
+     * the node. It checks the operational and administrative states and the standby status. If the
+     * operational state is disabled, it will include the dependencyCheckErrorMsg which includes
+     * information about any dependency (node) which has failed.
+     */
+    public void evaluateSanity() throws IntegrityMonitorException {
+        logger.debug("evaluateSanity called ....");
+        synchronized (evaluateSanityLock) {
+
+            String errorMsg = dependencyCheckErrorMsg;
+            logger.debug("evaluateSanity dependencyCheckErrorMsg = {}", errorMsg);
+            // check op state and throw exception if disabled
+            if ((stateManager.getOpState() != null) && stateManager.getOpState().equals(StateManagement.DISABLED)) {
+                String msg = "Resource " + resourceName + " operation state is disabled. " + errorMsg;
+                logger.debug("{}", msg);
+                throw new IntegrityMonitorException(msg);
+            }
+
+            // check admin state and throw exception if locked
+            if ((stateManager.getAdminState() != null) && stateManager.getAdminState().equals(StateManagement.LOCKED)) {
+                String msg = "Resource " + resourceName + " is administratively locked";
+                logger.debug("{}", msg);
+                throw new AdministrativeStateException("IntegrityMonitor Admin State Exception: " + msg);
+            }
+            // check standby state and throw exception if cold standby
+            if ((stateManager.getStandbyStatus() != null)
+                    && stateManager.getStandbyStatus().equals(StateManagement.COLD_STANDBY)) {
+                String msg = "Resource " + resourceName + " is cold standby";
+                logger.debug("{}", msg);
+                throw new StandbyStatusException("IntegrityMonitor Standby Status Exception: " + msg);
+            }
+
+        }
+
+    }
+
+    /**
+     * This method checks the forward progress counter and the state of a dependency. If the
+     * dependency is unavailable or failed, an error message is created which is checked when
+     * evaluateSanity interface is called. If the error message is set then the evaluateSanity will
+     * return an error.
+     * 
+     * @param dep the dependency
+     */
+    public String stateCheck(String dep) {
+        logger.debug("checking state of dependent resource: {}", dep);
+        String errorMsg = null;
+        ForwardProgressEntity forwardProgressEntity = null;
+        StateManagementEntity stateManagementEntity = null;
+
+        // Start a transaction
+        EntityTransaction et = em.getTransaction();
+        et.begin();
+
+        try {
+            Query query = em.createQuery("Select p from ForwardProgressEntity p where p.resourceName=:resource");
+            query.setParameter("resource", dep);
+
+            @SuppressWarnings("rawtypes")
+            List fpList = query.setLockMode(LockModeType.NONE).setFlushMode(FlushModeType.COMMIT).getResultList();
+
+            if (!fpList.isEmpty()) {
+                // exists
+                forwardProgressEntity = (ForwardProgressEntity) fpList.get(0);
+                // refresh the object from DB in case cached data was returned
+                em.refresh(forwardProgressEntity);
+                logger.debug("Found entry in ForwardProgressEntity table for dependent Resource={}", dep);
+            } else {
+                errorMsg = dep + ": resource not found in ForwardProgressEntity database table";
+                logger.error("{}", errorMsg);
+            }
+            synchronized (imFlushLock) {
+                et.commit();
+            }
+        } catch (Exception ex) {
+            // log an error
+            errorMsg = dep + ": ForwardProgressEntity DB operation failed with exception: ";
+            logger.error("{}", errorMsg, ex);
+            synchronized (imFlushLock) {
+                if (et.isActive()) {
+                    et.rollback();
+                }
+            }
+        }
+
+        if (errorMsg == null) {
+            // Start a transaction
+            et = em.getTransaction();
+            et.begin();
+            try {
+                // query if StateManagement entry exists for dependent resource
+                Query query = em.createQuery("Select p from StateManagementEntity p where p.resourceName=:resource");
+                query.setParameter("resource", dep);
+
+                @SuppressWarnings("rawtypes")
+                List smList = query.setLockMode(LockModeType.NONE).setFlushMode(FlushModeType.COMMIT).getResultList();
+                if (!smList.isEmpty()) {
+                    // exist
+                    stateManagementEntity = (StateManagementEntity) smList.get(0);
+                    // refresh the object from DB in case cached data was
+                    // returned
+                    em.refresh(stateManagementEntity);
+                    logger.debug("Found entry in StateManagementEntity table for dependent Resource={}", dep);
+                } else {
+                    errorMsg = dep + ": resource not found in state management entity database table";
+                    logger.error("{}", errorMsg);
+                }
+
+                synchronized (imFlushLock) {
+                    et.commit();
+                }
+            } catch (Exception e) {
+                // log an error
+                errorMsg = dep + ": StateManagementEntity DB read failed with exception: ";
+                logger.error("{}", errorMsg, e);
+                synchronized (imFlushLock) {
+                    if (et.isActive()) {
+                        et.rollback();
+                    }
+                }
+            }
+        }
+
+        // verify that the ForwardProgress is current (check last_updated)
+        if (errorMsg == null) {
+            if (forwardProgressEntity != null && stateManagementEntity != null) {
+                Date date = new Date();
+                long diffMs = date.getTime() - forwardProgressEntity.getLastUpdated().getTime();
+                logger.debug("IntegrityMonitor.stateCheck(): diffMs = {}", diffMs);
+
+                // Threshold for a stale entry
+                long staleMs = maxFpcUpdateIntervalMs;
+                logger.debug("IntegrityMonitor.stateCheck(): staleMs = {}", staleMs);
+
+                if (diffMs > staleMs) {
+                    // ForwardProgress is stale. Disable it
+                    try {
+                        if (!stateManagementEntity.getOpState().equals(StateManagement.DISABLED)) {
+                            logger.debug("IntegrityMonitor.stateCheck(): Changing OpStat = disabled for {}", dep);
+                            stateManager.disableFailed(dep);
+                        }
+                    } catch (Exception e) {
+                        String msg = "IntegrityMonitor.stateCheck(): Failed to diableFail dependent resource = " + dep
+                                + "; " + e.getMessage();
+                        logger.error("{}", msg, e);
+                    }
+                }
+            } else {
+
+                if (forwardProgressEntity == null) {
+                    String msg = "IntegrityMonitor.stateCheck(): Failed to diableFail dependent resource = " + dep
+                            + "; " + " forwardProgressEntity == null.";
+                    logger.error("{}", msg);
+                }
+
+                else {
+                    String msg = "IntegrityMonitor.stateCheck(): Failed to diableFail dependent resource = " + dep
+                            + "; " + " stateManagementEntity == null.";
+                    logger.error("{}", msg);
+                }
+            }
+        }
+
+        // check operation, admin and standby states of dependent resource
+        if (errorMsg == null) {
+            if (stateManagementEntity != null) {
+                if ((stateManager.getAdminState() != null)
+                        && stateManagementEntity.getAdminState().equals(StateManagement.LOCKED)) {
+                    errorMsg = dep + ": resource is administratively locked";
+                    logger.error("{}", errorMsg);
+                } else if ((stateManager.getOpState() != null)
+                        && stateManagementEntity.getOpState().equals(StateManagement.DISABLED)) {
+                    errorMsg = dep + ": resource is operationally disabled";
+                    logger.error("{}", errorMsg);
+                } else if ((stateManager.getStandbyStatus() != null)
+                        && stateManagementEntity.getStandbyStatus().equals(StateManagement.COLD_STANDBY)) {
+                    errorMsg = dep + ": resource is cold standby";
+                    logger.error("{}", errorMsg);
+                }
+            } else {
+                errorMsg = dep + ": could not check standy state of resource. stateManagementEntity == null.";
+                logger.error("{}", errorMsg);
+            }
+        }
+
+        String returnMsg = "IntegrityMonitor.stateCheck(): returned error_msg: " + errorMsg;
+        logger.debug("{}", returnMsg);
+        return errorMsg;
+    }
+
+    private String fpCheck(String dep) {
+        logger.debug("checking forward progress count of dependent resource: {}", dep);
+
+        String errorMsg = null;
+
+        // check FPC count - a changing FPC count indicates the resource JVM is
+        // running
+
+        // Start a transaction
+        EntityTransaction et = em.getTransaction();
+        et.begin();
+        try {
+            Query fquery = em.createQuery("Select f from ForwardProgressEntity f where f.resourceName=:rn");
+            fquery.setParameter("rn", dep);
+
+            @SuppressWarnings("rawtypes")
+            List fpList = fquery.setLockMode(LockModeType.NONE).setFlushMode(FlushModeType.COMMIT).getResultList();
+            ForwardProgressEntity fpx;
+            if (!fpList.isEmpty()) {
+                // ignores multiple results
+                fpx = (ForwardProgressEntity) fpList.get(0);
+                // refresh the object from DB in case cached data was returned
+                em.refresh(fpx);
+                if (logger.isDebugEnabled()) {
+                    logger.debug("Dependent resource {} - fpc= {}, lastUpdated={}", dep, fpx.getFpcCount(),
+                            fpx.getLastUpdated());
+                }
+                long currTime = System.currentTimeMillis();
+                // if dependent resource FPC has not been updated, consider it
+                // an error
+                if ((currTime - fpx.getLastUpdated().getTime()) > maxFpcUpdateIntervalMs) {
+                    errorMsg = dep + ": FP count has not been updated in the last " + maxFpcUpdateIntervalMs + "ms";
+                    logger.error("{}", errorMsg);
+                    try {
+                        // create instance of StateMangement class for dependent
+                        StateManagement depStateManager = new StateManagement(emf, dep);
+                        if (!depStateManager.getOpState().equals(StateManagement.DISABLED)) {
+                            logger.debug("Forward progress not detected for dependent resource {}. Setting dependent's "
+                                    + "state to disable failed.", dep);
+                            depStateManager.disableFailed();
+                        }
+                    } catch (Exception e) {
+                        // ignore errors
+                        logger.error("Update dependent state failed with exception: ", e);
+                    }
+                }
+            } else {
+                // resource entry not found in FPC table
+                errorMsg = dep + ": resource not found in ForwardProgressEntity table in the DB";
+                logger.error("{}", errorMsg);
+            }
+            synchronized (imFlushLock) {
+                et.commit();
+            }
+        } catch (Exception e) {
+            // log an error and continue
+            errorMsg = dep + ": ForwardProgressEntity DB read failed with exception: ";
+            logger.error("{}", errorMsg, e);
+            synchronized (imFlushLock) {
+                if (et.isActive()) {
+                    et.rollback();
+                }
+            }
+        }
+
+        return errorMsg;
+    }
+
+    /**
+     * Get all forward progress entities.
+     * 
+     * @return list of all forward progress entities
+     */
+    public List<ForwardProgressEntity> getAllForwardProgressEntity() {
+        logger.debug("getAllForwardProgressEntity: entry");
+        ArrayList<ForwardProgressEntity> fpList = new ArrayList<>();
+        // Start a transaction
+        EntityTransaction et = em.getTransaction();
+        et.begin();
+        try {
+            Query fquery = em.createQuery("Select e from ForwardProgressEntity e");
+            @SuppressWarnings("rawtypes")
+            List myList = fquery.setLockMode(LockModeType.NONE).setFlushMode(FlushModeType.COMMIT).getResultList();
+            synchronized (imFlushLock) {
+                et.commit();
+            }
+            logger.debug("getAllForwardProgressEntity: myList.size(): {}", myList.size());
+            if (!myList.isEmpty()) {
+                for (int i = 0; i < myList.size(); i++) {
+                    if (logger.isDebugEnabled()) {
+                        logger.debug("getAllForwardProgressEntity: myList.get({}).getResourceName(): {}", i,
+                                ((ForwardProgressEntity) myList.get(i)).getResourceName());
+                    }
+                    fpList.add((ForwardProgressEntity) myList.get(i));
+                }
+            }
+            synchronized (imFlushLock) {
+                if (et.isActive()) {
+                    et.commit();
+                }
+            }
+        } catch (Exception e) {
+            // log an error and continue
+            String msg = "getAllForwardProgessEntity DB read failed with exception: ";
+            logger.error("{}", msg, e);
+            synchronized (imFlushLock) {
+                if (et.isActive()) {
+                    et.rollback();
+                }
+            }
+        }
+        return fpList;
+    }
+
+    private String jmxCheck(String dep) {
+        logger.debug("checking health of dependent by calling test() via JMX on resource: {}", dep);
+
+        String errorMsg = null;
+
+        // get the JMX URL from the database
+        String jmxUrl = null;
+        // Start a transaction
+        EntityTransaction et = em.getTransaction();
+        et.begin();
+        try {
+            // query if ResourceRegistration entry exists for resourceName
+            Query rquery = em.createQuery("Select r from ResourceRegistrationEntity r where r.resourceName=:rn");
+            rquery.setParameter("rn", dep);
+
+            @SuppressWarnings("rawtypes")
+            List rrList = rquery.setLockMode(LockModeType.NONE).setFlushMode(FlushModeType.COMMIT).getResultList();
+            ResourceRegistrationEntity rrx = null;
+
+            if (!rrList.isEmpty()) {
+                // ignores multiple results
+                rrx = (ResourceRegistrationEntity) rrList.get(0);
+                // refresh the object from DB in case cached data was returned
+                em.refresh(rrx);
+                jmxUrl = rrx.getResourceUrl();
+                if (logger.isDebugEnabled()) {
+                    logger.debug("Dependent Resource={}, url={}, createdDate={}", dep, jmxUrl, rrx.getCreatedDate());
+                }
+            } else {
+                errorMsg = dep + ": resource not found in ResourceRegistrationEntity table in the DB";
+                logger.error("{}", errorMsg);
+            }
+
+            synchronized (imFlushLock) {
+                et.commit();
+            }
+        } catch (Exception e) {
+            errorMsg = dep + ": ResourceRegistrationEntity DB read failed with exception: ";
+            logger.error("{}", errorMsg, e);
+            synchronized (imFlushLock) {
+                if (et.isActive()) {
+                    et.rollback();
+                }
+            }
+        }
+
+        if (jmxUrl != null) {
+            JmxAgentConnection jmxAgentConnection = null;
+            try {
+                jmxAgentConnection = new JmxAgentConnection(jmxUrl);
+                MBeanServerConnection mbeanServer = jmxAgentConnection.getMBeanConnection();
+                ComponentAdminMBean admin =
+                        JMX.newMXBeanProxy(mbeanServer, ComponentAdmin.getObjectName(dep), ComponentAdminMBean.class);
+
+                // invoke the test method via the jmx proxy
+                admin.test();
+                logger.debug("Dependent resource {} sanity test passed", dep);
+            } catch (Exception e) {
+                errorMsg = dep + ": resource sanity test failed with exception: ";
+                logger.error("{}", errorMsg, e);
+            } finally {
+                // close the JMX connector
+                if (jmxAgentConnection != null) {
+                    jmxAgentConnection.disconnect();
+                }
+            }
+        }
+
+        return errorMsg;
+    }
+
+    /**
+     * Perform a dependency check.
+     * 
+     * @return an error message detailing any issues found
+     */
+    public String dependencyCheck() {
+        logger.debug("dependencyCheck: entry");
+        synchronized (dependencyCheckLock) {
+
+            // Start with the error message empty
+            String errorMsg = "";
+            boolean dependencyFailure = false;
+
+            /*
+             * Before we check dependency groups we need to check subsystemTest.
+             */
+            try {
+                // Test any subsystems that are not covered under the dependency
+                // relationship
+                subsystemTest();
+            } catch (Exception e) {
+                logger.error("IntegrityMonitor threw exception", e);
+                dependencyFailure = true;
+                // This indicates a subsystemTest failure
+                try {
+                    if (logger.isDebugEnabled()) {
+                        logger.debug(
+                                "{}: There has been a subsystemTest failure with error:{} Updating this resource's "
+                                        + "state to disableDependency",
+                                resourceName, e.getMessage());
+                    }
+                    // Capture the subsystemTest failure info
+                    if (!errorMsg.isEmpty()) {
+                        errorMsg = errorMsg.concat(",");
+                    }
+                    errorMsg = errorMsg.concat(resourceName + ": " + e.getMessage());
+                    this.stateManager.disableDependency();
+                } catch (Exception ex) {
+                    logger.error("IntegrityMonitor threw exception.", ex);
+                    if (!errorMsg.isEmpty()) {
+                        errorMsg = errorMsg.concat(",");
+                    }
+                    errorMsg = errorMsg.concat("\n" + resourceName
+                            + ": Failed to disable dependency after subsystemTest failure due to: " + ex.getMessage());
+                }
+            }
+
+            // Check the sanity of dependents for lead subcomponents
+            if (depGroups != null && depGroups.length > 0) {
+                // check state of resources in dependency groups
+                for (String group : depGroups) {
+                    group = group.trim();
+                    if (group.isEmpty()) {
+                        // ignore empty group
+                        continue;
+                    }
+                    String[] dependencies = group.split(",");
+                    if (logger.isDebugEnabled()) {
+                        logger.debug("group dependencies = {}", Arrays.toString(dependencies));
+                    }
+                    int realDepCount = 0;
+                    int failDepCount = 0;
+                    for (String dep : dependencies) {
+                        dep = dep.trim();
+                        if (dep.isEmpty()) {
+                            // ignore empty dependency
+                            continue;
+                        }
+                        realDepCount++; // this is a valid dependency whose state is tracked
+                        // if a resource is down, its FP count will not be incremented
+                        String failMsg = fpCheck(dep);
+                        if (failMsg == null) {
+                            if (testViaJmx) {
+                                failMsg = jmxCheck(dep);
+                            } else {
+                                failMsg = stateCheck(dep);
+                            }
+                        }
+                        if (failMsg != null) {
+                            failDepCount++;
+                            if (!errorMsg.isEmpty()) {
+                                errorMsg = errorMsg.concat(", ");
+                            }
+                            errorMsg = errorMsg.concat(failMsg);
+                        }
+                    } // end for (String dep : dependencies)
+
+                    // if all dependencies in a group are failed, set this
+                    // resource's state to disable dependency
+                    if ((realDepCount > 0) && (failDepCount == realDepCount)) {
+                        dependencyFailure = true;
+                        try {
+                            logger.debug("All dependents in group {} have failed their health check. Updating this "
+                                    + "resource's state to disableDependency", group);
+                            if (stateManager.getAvailStatus() == null || !((stateManager.getAvailStatus())
+                                    .equals(StateManagement.DEPENDENCY)
+                                    || (stateManager.getAvailStatus()).equals(StateManagement.DEPENDENCY_FAILED))) {
+                                // Note: redundant calls are made by
+                                // refreshStateAudit
+                                this.stateManager.disableDependency();
+                            }
+                        } catch (Exception e) {
+                            logger.error("IntegrityMonitor threw exception.", e);
+                            if (!errorMsg.isEmpty()) {
+                                errorMsg = errorMsg.concat(",");
+                            }
+                            errorMsg = errorMsg.concat(resourceName + ": Failed to disable dependency");
+                            break; // break out on failure and skip checking other groups
+                        }
+                    }
+                    // check the next group
+
+                } // end for (String group : depGroups)
+
+                /*
+                 * We have checked all the dependency groups. If all are ok and subsystemTest
+                 * passed, dependencyFailure == false
+                 */
+                if (!dependencyFailure) {
+                    try {
+                        logger.debug(
+                                "All dependency groups have at least one viable member. Updating this resource's state"
+                                        + " to enableNoDependency");
+                        if (stateManager.getAvailStatus() != null
+                                && ((stateManager.getAvailStatus()).equals(StateManagement.DEPENDENCY)
+                                        || (stateManager.getAvailStatus()).equals(StateManagement.DEPENDENCY_FAILED))) {
+                            // Note: redundant calls are made by
+                            // refreshStateAudit
+                            this.stateManager.enableNoDependency();
+                        }
+                        // The refreshStateAudit will catch the case where it is disabled but
+                        // availStatus != failed
+                    } catch (Exception e) {
+                        logger.error("IntegrityMonitor threw exception.", e);
+                        if (!errorMsg.isEmpty()) {
+                            errorMsg = errorMsg.concat(",");
+                        }
+                        errorMsg = errorMsg.concat(resourceName + ": Failed to enable no dependency");
+                    }
+                }
+            } else if (!dependencyFailure) {
+                /*
+                 * This is put here to clean up when no dependency group should exist, but one was
+                 * erroneously added which caused the state to be disabled/dependency/coldstandby
+                 * and later removed. We saw this happen in the lab, but is not very likely in a
+                 * production environment...but you never know.
+                 */
+                try {
+                    logger.debug("There are no dependents. Updating this resource's state to enableNoDependency");
+                    if (stateManager.getAvailStatus() != null
+                            && ((stateManager.getAvailStatus()).equals(StateManagement.DEPENDENCY)
+                                    || (stateManager.getAvailStatus()).equals(StateManagement.DEPENDENCY_FAILED))) {
+                        // Note: redundant calls are made by refreshStateAudit
+                        this.stateManager.enableNoDependency();
+                    }
+                    // The refreshStateAudit will catch the case where it is disabled but
+                    // availStatus != failed
+                } catch (Exception e) {
+                    logger.error("IntegrityMonitor threw exception.", e);
+                    if (!errorMsg.isEmpty()) {
+                        errorMsg = errorMsg.concat(",");
+                    }
+                    errorMsg = errorMsg.concat(resourceName + ": Failed to enable no dependency");
+                }
+            }
+
+            if (!errorMsg.isEmpty()) {
+                logger.error("Sanity failure detected in a dependent resource: {}", errorMsg);
+
+            }
+
+            dependencyCheckErrorMsg = errorMsg;
+            lastDependencyCheckTime = System.currentTimeMillis();
+            logger.debug("dependencyCheck: exit");
+            return errorMsg;
+        }
+    }
+
+    /**
+     * Execute a test transaction. It is called when the test transaction timer fires. It could be
+     * overridden to provide additional test functionality. If overridden, the overriding method
+     * must invoke startTransaction() and endTransaction() and check if the allNotWellMap is empty.
+     */
+    public void testTransaction() {
+        synchronized (testTransactionLock) {
+            logger.debug("testTransaction: entry");
+            //
+            // startTransaction() not required for testTransaction
+            //
+
+            // end transaction - increments local FP counter
+            endTransaction();
+        }
+    }
+
+    /**
+     * Additional testing for subsystems that do not have a /test interface (for ex. 3rd party
+     * processes like elk). This method would be overridden by the subsystem.
+     */
+    public void subsystemTest() throws IntegrityMonitorException {
+        // Testing provided by subsystem
+        logger.debug("IntegrityMonitor subsystemTest() OK");
+    }
+
+    /**
+     * Checks admin state and resets transaction timer. Called by application at the start of a
+     * transaction.
+     * 
+     * @throws AdministrativeStateException throws admin state exception if resource is locked
+     * @throws StandbyStatusException if resource is in standby
+     */
+    public void startTransaction() throws AdministrativeStateException, StandbyStatusException {
+
+        synchronized (startTransactionLock) {
+            // check admin state and throw exception if locked
+            if ((stateManager.getAdminState() != null) && stateManager.getAdminState().equals(StateManagement.LOCKED)) {
+                String msg = "Resource " + resourceName + " is administratively locked";
+
+                throw new AdministrativeStateException("IntegrityMonitor Admin State Exception: " + msg);
+            }
+            // check standby state and throw exception if locked
+
+            if ((stateManager.getStandbyStatus() != null)
+                    && (stateManager.getStandbyStatus().equals(StateManagement.HOT_STANDBY)
+                            || stateManager.getStandbyStatus().equals(StateManagement.COLD_STANDBY))) {
+                String msg = "Resource " + resourceName + " is standby";
+
+                throw new StandbyStatusException("IntegrityMonitor Standby Status Exception: " + msg);
+            }
+
+            // reset transactionTimer so it will not fire
+            elapsedTestTransTime = 0;
+        }
+    }
+
+    /**
+     * Increment the local forward progress counter. Called by application at the end of each
+     * transaction (successful or not).
+     */
+    public void endTransaction() {
+        synchronized (endTransactionLock) {
+            if (getAllNotWellMap() != null) {
+                if (!(getAllNotWellMap().isEmpty())) {
+                    /*
+                     * An entity has reported that it is not well. We must not allow the the forward
+                     * progress counter to advance.
+                     */
+                    String msg = "allNotWellMap:";
+                    for (Entry<String, String> entry : allNotWellMap.entrySet()) {
+                        msg = msg.concat("\nkey = " + entry.getKey() + " msg = " + entry.getValue());
+                    }
+                    logger.error("endTransaction: allNotWellMap is NOT EMPTY.  Not advancing forward"
+                            + "progress counter. \n{}\n", msg);
+                    return;
+                } else {
+                    if (logger.isDebugEnabled()) {
+                        if (getAllSeemsWellMap() != null) {
+                            if (!(getAllSeemsWellMap().isEmpty())) {
+                                String msg = "allSeemsWellMap:";
+                                for (Entry<String, String> entry : allSeemsWellMap.entrySet()) {
+                                    msg = msg.concat("\nkey = " + entry.getKey() + " msg = " + entry.getValue());
+                                }
+                                logger.debug(
+                                        "endTransaction: allNotWellMap IS EMPTY and allSeemsWellMap is NOT EMPTY.  "
+                                                + "Advancing forward progress counter. \n{}\n",
+                                        msg);
+                            }
+                        }
+                    }
+                }
+            }
+            // increment local FPC
+            fpCounter++;
+        }
+    }
+
+    // update FP count in DB with local FP count
+    private void writeFpc() throws IntegrityMonitorException {
+
+        // Start a transaction
+        EntityTransaction et = em.getTransaction();
+
+        if (!et.isActive()) {
+            et.begin();
+        }
+
+        try {
+            // query if ForwardProgress entry exists for resourceName
+            Query fquery = em.createQuery("Select f from ForwardProgressEntity f where f.resourceName=:rn");
+            fquery.setParameter("rn", resourceName);
+
+            @SuppressWarnings("rawtypes")
+            List fpList = fquery.setLockMode(LockModeType.NONE).setFlushMode(FlushModeType.COMMIT).getResultList();
+            ForwardProgressEntity fpx;
+            if (!fpList.isEmpty()) {
+                // ignores multiple results
+                fpx = (ForwardProgressEntity) fpList.get(0);
+                // refresh the object from DB in case cached data was returned
+                em.refresh(fpx);
+                if (logger.isDebugEnabled()) {
+                    logger.debug("Updating FP entry: Resource={}, fpcCount={}, lastUpdated={}, new fpcCount={}",
+                            resourceName, fpx.getFpcCount(), fpx.getLastUpdated(), fpCounter);
+                }
+                fpx.setFpcCount(fpCounter);
+                em.persist(fpx);
+                // flush to the DB and commit
+                synchronized (imFlushLock) {
+                    et.commit();
+                }
+            } else {
+                // Error - FP entry does not exist
+                String msg = "FP entry not found in database for resource " + resourceName;
+                throw new IntegrityMonitorException(msg);
+            }
+        } catch (Exception e) {
+            try {
+                synchronized (imFlushLock) {
+                    if (et.isActive()) {
+                        et.rollback();
+                    }
+                }
+            } catch (Exception e1) {
+                logger.error("IntegrityMonitor threw exception.", e1);
+            }
+            logger.error("writeFpc DB table commit failed with exception: {}", e);
+            throw e;
+        }
+    }
+
+    // retrieve state manager reference
+    public final StateManagement getStateManager() {
+        return this.stateManager;
+    }
+
+    /**
+     * Read and validate properties.
+     * 
+     * @throws IntegrityMonitorPropertiesException if a property is invalid
+     */
+    private static void validateProperties(Properties prop) throws IntegrityMonitorPropertiesException {
+
+        if (prop.getProperty(IntegrityMonitorProperties.DB_DRIVER) == null) {
+            String msg = IntegrityMonitorProperties.DB_DRIVER + " property is null";
+            logger.error("{}", msg);
+            throw new IntegrityMonitorPropertiesException("IntegrityMonitor Property Exception: " + msg);
+        }
+
+        if (prop.getProperty(IntegrityMonitorProperties.DB_URL) == null) {
+            String msg = IntegrityMonitorProperties.DB_URL + " property is null";
+            logger.error("{}", msg);
+            throw new IntegrityMonitorPropertiesException("IntegrityMonitor Property Exception: " + msg);
+        }
+
+        if (prop.getProperty(IntegrityMonitorProperties.DB_USER) == null) {
+            String msg = IntegrityMonitorProperties.DB_USER + " property is null";
+            logger.error("{}", msg);
+            throw new IntegrityMonitorPropertiesException("IntegrityMonitor Property Exception: " + msg);
+        }
+
+        if (prop.getProperty(IntegrityMonitorProperties.DB_PWD) == null) {
+            String msg = IntegrityMonitorProperties.DB_PWD + " property is null";
+            logger.error("{}", msg);
+            throw new IntegrityMonitorPropertiesException("IntegrityMonitor Property Exception: " + msg);
+        }
+
+        if (prop.getProperty(IntegrityMonitorProperties.FP_MONITOR_INTERVAL) != null) {
+            try {
+                monitorIntervalMs = toMillis(
+                        Integer.parseInt(prop.getProperty(IntegrityMonitorProperties.FP_MONITOR_INTERVAL).trim()));
+            } catch (NumberFormatException e) {
+                logger.warn("Ignored invalid property: {}", IntegrityMonitorProperties.FP_MONITOR_INTERVAL, e);
+            }
+        }
+
+        if (prop.getProperty(IntegrityMonitorProperties.FAILED_COUNTER_THRESHOLD) != null) {
+            try {
+                failedCounterThreshold =
+                        Integer.parseInt(prop.getProperty(IntegrityMonitorProperties.FAILED_COUNTER_THRESHOLD).trim());
+            } catch (NumberFormatException e) {
+                logger.warn("Ignored invalid property: {}", IntegrityMonitorProperties.FAILED_COUNTER_THRESHOLD, e);
+            }
+        }
+
+        if (prop.getProperty(IntegrityMonitorProperties.TEST_TRANS_INTERVAL) != null) {
+            try {
+                testTransIntervalMs = toMillis(
+                        Integer.parseInt(prop.getProperty(IntegrityMonitorProperties.TEST_TRANS_INTERVAL).trim()));
+            } catch (NumberFormatException e) {
+                logger.warn("Ignored invalid property: {}", IntegrityMonitorProperties.TEST_TRANS_INTERVAL, e);
+            }
+        }
+
+        if (prop.getProperty(IntegrityMonitorProperties.WRITE_FPC_INTERVAL) != null) {
+            try {
+                writeFpcIntervalMs = toMillis(
+                        Integer.parseInt(prop.getProperty(IntegrityMonitorProperties.WRITE_FPC_INTERVAL).trim()));
+            } catch (NumberFormatException e) {
+                logger.warn("Ignored invalid property: {}", IntegrityMonitorProperties.WRITE_FPC_INTERVAL, e);
+            }
+        }
+
+        if (prop.getProperty(IntegrityMonitorProperties.CHECK_DEPENDENCY_INTERVAL) != null) {
+            try {
+                checkDependencyIntervalMs = toMillis(Integer
+                        .parseInt(prop.getProperty(IntegrityMonitorProperties.CHECK_DEPENDENCY_INTERVAL).trim()));
+            } catch (NumberFormatException e) {
+                logger.warn("Ignored invalid property: {}", IntegrityMonitorProperties.CHECK_DEPENDENCY_INTERVAL, e);
+            }
+        }
+
+        // dependency_groups are a semi-colon separated list of groups
+        // each group is a comma separated list of resource names
+        // For ex. dependency_groups = site_1.pap_1,site_1.pap_2 ; site_1.pdp_1,
+        // site_1.pdp_2
+        if (prop.getProperty(IntegrityMonitorProperties.DEPENDENCY_GROUPS) != null) {
+            try {
+                depGroups = prop.getProperty(IntegrityMonitorProperties.DEPENDENCY_GROUPS).split(";");
+                if (logger.isDebugEnabled()) {
+                    logger.debug("dependency groups property = {}", Arrays.toString(depGroups));
+                }
+            } catch (Exception e) {
+                logger.warn("Ignored invalid property: {}", IntegrityMonitorProperties.DEPENDENCY_GROUPS, e);
+            }
+        }
+
+        siteName = prop.getProperty(IntegrityMonitorProperties.SITE_NAME);
+        if (siteName == null) {
+            String msg = IntegrityMonitorProperties.SITE_NAME + " property is null";
+            logger.error("{}", msg);
+            throw new IntegrityMonitorPropertiesException("IntegrityMonitor Property Exception: " + msg);
+        } else {
+            siteName = siteName.trim();
+        }
+
+        nodeType = prop.getProperty(IntegrityMonitorProperties.NODE_TYPE);
+        if (nodeType == null) {
+            String msg = IntegrityMonitorProperties.NODE_TYPE + " property is null";
+            logger.error("{}", msg);
+            throw new IntegrityMonitorPropertiesException("IntegrityMonitor Property Exception: " + msg);
+        } else {
+            nodeType = nodeType.trim();
+            if (!isNodeTypeEnum(nodeType)) {
+                String msg = IntegrityMonitorProperties.NODE_TYPE + " property " + nodeType + " is invalid";
+                logger.error("{}", msg);
+                throw new IntegrityMonitorPropertiesException("IntegrityMonitor Property Exception: " + msg);
+            }
+        }
+
+        if (prop.getProperty(IntegrityMonitorProperties.TEST_VIA_JMX) != null) {
+            String jmxTest = prop.getProperty(IntegrityMonitorProperties.TEST_VIA_JMX).trim();
+            testViaJmx = Boolean.parseBoolean(jmxTest);
+        }
+
+        if (prop.getProperty(IntegrityMonitorProperties.JMX_FQDN) != null) {
+            jmxFqdn = prop.getProperty(IntegrityMonitorProperties.JMX_FQDN).trim();
+            if (jmxFqdn.isEmpty()) {
+                jmxFqdn = null;
+            }
+        }
+
+        if (prop.getProperty(IntegrityMonitorProperties.MAX_FPC_UPDATE_INTERVAL) != null) {
+            try {
+                maxFpcUpdateIntervalMs = toMillis(
+                        Integer.parseInt(prop.getProperty(IntegrityMonitorProperties.MAX_FPC_UPDATE_INTERVAL).trim()));
+            } catch (NumberFormatException e) {
+                logger.warn("Ignored invalid property: {}", IntegrityMonitorProperties.MAX_FPC_UPDATE_INTERVAL, e);
+            }
+        }
+
+        if (prop.getProperty(IntegrityMonitorProperties.STATE_AUDIT_INTERVAL_MS) != null) {
+            try {
+                stateAuditIntervalMs =
+                        Long.parseLong(prop.getProperty(IntegrityMonitorProperties.STATE_AUDIT_INTERVAL_MS));
+            } catch (NumberFormatException e) {
+                logger.warn("Ignored invalid property: {}", IntegrityMonitorProperties.STATE_AUDIT_INTERVAL_MS, e);
+            }
+        }
+
+        if (prop.getProperty(IntegrityMonitorProperties.REFRESH_STATE_AUDIT_INTERVAL_MS) != null) {
+            try {
+                refreshStateAuditIntervalMs =
+                        Long.parseLong(prop.getProperty(IntegrityMonitorProperties.REFRESH_STATE_AUDIT_INTERVAL_MS));
+            } catch (NumberFormatException e) {
+                logger.warn("Ignored invalid property: {}", IntegrityMonitorProperties.REFRESH_STATE_AUDIT_INTERVAL_MS,
+                        e);
+            }
+        }
+
+        logger.debug("IntegrityMonitor.validateProperties(): Property values \n" + "maxFpcUpdateIntervalMs = {}\n",
+                maxFpcUpdateIntervalMs);
+
+        return;
+    }
+
+    /**
+     * Update properties.
+     * 
+     * @param newprop the new properties
+     */
+    public static void updateProperties(Properties newprop) {
+        if (isUnitTesting()) {
+            try {
+                validateProperties(newprop);
+            } catch (IntegrityMonitorPropertiesException e) {
+                logger.error("IntegrityMonitor threw exception.", e);
+            }
+        } else {
+            logger.debug("Update integrity monitor properties not allowed");
+        }
+    }
+
+    private static boolean isNodeTypeEnum(String nodeType) {
+        String upper = nodeType.toUpperCase();
+        for (NodeType n : NodeType.values()) {
+            if (n.toString().equals(upper)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Look for "Forward Progress" -- if the 'FPMonitor' is stalled for too long, the operational
+     * state is changed to 'Disabled', and an alarm is set. The state is restored when forward
+     * progress continues.
+     */
+    private void fpMonitorCycle() {
+        logger.debug("fpMonitorCycle(): entry");
+        synchronized (fpMonitorCycleLock) {
+            // monitoring interval checks
+            if (monitorIntervalMs <= 0) {
+                logger.debug("fpMonitorCycle(): disabled");
+                elapsedTime = 0;
+                return; // monitoring is disabled
+            }
+
+            elapsedTime = elapsedTime + cycleIntervalMillis;
+            if (elapsedTime < monitorIntervalMs) {
+                return; // monitoring interval not reached
+            }
+
+            elapsedTime = 0; // reset elapsed time
+
+            try {
+                if (fpCounter == lastFpCounter) {
+                    // no forward progress
+                    missedCycles += 1;
+                    if (missedCycles >= failedCounterThreshold && !alarmExists) {
+                        logger.debug("Forward progress not detected for resource {}. Setting state to disable failed.",
+                                resourceName);
+                        if (!(stateManager.getOpState()).equals(StateManagement.DISABLED)) {
+                            // Note: The refreshStateAudit will make redundant
+                            // calls
+                            stateManager.disableFailed();
+                        }
+                        // The refreshStateAudit will catch the case where opStat = disabled and
+                        // availState ! failed/dependency.failed
+                        alarmExists = true;
+                    }
+                } else {
+                    // forward progress has occurred
+                    lastFpCounter = fpCounter;
+                    missedCycles = 0;
+                    // set op state to enabled
+                    logger.debug("Forward progress detected for resource {}. Setting state to enable not failed.",
+                            resourceName);
+                    if (!(stateManager.getOpState()).equals(StateManagement.ENABLED)) {
+                        // Note: The refreshStateAudit will make redundant calls
+                        stateManager.enableNotFailed();
+                    }
+                    // The refreshStateAudit will catch the case where opState=enabled and
+                    // availStatus != null
+                    alarmExists = false;
+                }
+            } catch (Exception e) {
+                // log error
+                logger.error("FP Monitor encountered error. ", e);
+            }
+        }
+        logger.debug("fpMonitorCycle(): exit");
+    }
+
+    /**
+     * Look for "Forward Progress" on other nodes. If they are not making forward progress, check
+     * their operational state. If it is not disabled, then disable them.
+     */
+    private void stateAudit() {
+        logger.debug("IntegrityMonitor.stateAudit(): entry");
+        if (stateAuditIntervalMs <= 0) {
+            logger.debug("IntegrityMonitor.stateAudit(): disabled");
+            return; // stateAudit is disabled
+        }
+
+        // Only run from nodes that are operational
+        if (stateManager.getOpState().equals(StateManagement.DISABLED)) {
+            logger.debug("IntegrityMonitor.stateAudit(): DISABLED. returning");
+            return;
+        }
+        if (stateManager.getAdminState().equals(StateManagement.LOCKED)) {
+            logger.debug("IntegrityMonitor.stateAudit(): LOCKED. returning");
+            return;
+        }
+        if (!stateManager.getStandbyStatus().equals(StateManagement.NULL_VALUE)
+                && stateManager.getStandbyStatus() != null) {
+            if (!stateManager.getStandbyStatus().equals(StateManagement.PROVIDING_SERVICE)) {
+                logger.debug("IntegrityMonitor.stateAudit(): NOT PROVIDING_SERVICE. returning");
+                return;
+            }
+        }
+
+        Date date = new Date();
+        long timeSinceLastStateAudit = date.getTime() - lastStateAuditTime.getTime();
+        if (timeSinceLastStateAudit < stateAuditIntervalMs) {
+            logger.debug("IntegrityMonitor.stateAudit(): Not time to run. returning");
+            return;
+        }
+
+        executeStateAudit();
+
+        lastStateAuditTime = date;
+
+        logger.debug("IntegrityMonitor.stateAudit(): exit");
+    }
+
+    /**
+     * Execute state audit.
+     */
+    public void executeStateAudit() {
+        logger.debug("IntegrityMonitor.executeStateAudit(): entry");
+        Date date = new Date();
+
+        // Get all entries in the forwardprogressentity table
+        List<ForwardProgressEntity> fpList = getAllForwardProgressEntity();
+
+        // Check if each forwardprogressentity entry is current
+        for (ForwardProgressEntity fpe : fpList) {
+            // If the this is my ForwardProgressEntity, continue
+            if (fpe.getResourceName().equals(IntegrityMonitor.resourceName)) {
+                continue;
+            }
+            // Make sure you are not getting a cached version
+            em.refresh(fpe);
+            long diffMs = date.getTime() - fpe.getLastUpdated().getTime();
+            if (logger.isDebugEnabled()) {
+                logger.debug("IntegrityMonitor.executeStateAudit(): resource = {}, diffMs = {}", fpe.getResourceName(),
+                        diffMs);
+            }
+
+            // Threshold for a stale entry
+            long staleMs = maxFpcUpdateIntervalMs;
+            if (logger.isDebugEnabled()) {
+                logger.debug("IntegrityMonitor.executeStateAudit(): resource = {}, staleMs = {}", fpe.getResourceName(),
+                        staleMs);
+            }
+
+            if (diffMs > staleMs) {
+                // ForwardProgress is stale. Disable it
+                // Start a transaction
+                logger.debug("IntegrityMonitor.executeStateAudit(): resource = {}, FPC is stale. Disabling it");
+                EntityTransaction et = em.getTransaction();
+                et.begin();
+                StateManagementEntity sme = null;
+                try {
+                    // query if StateManagement entry exists for fpe resource
+                    Query query =
+                            em.createQuery("Select p from StateManagementEntity p where p.resourceName=:resource");
+                    query.setParameter("resource", fpe.getResourceName());
+
+                    @SuppressWarnings("rawtypes")
+                    List smList =
+                            query.setLockMode(LockModeType.NONE).setFlushMode(FlushModeType.COMMIT).getResultList();
+                    if (!smList.isEmpty()) {
+                        // exists
+                        sme = (StateManagementEntity) smList.get(0);
+                        // refresh the object from DB in case cached data was
+                        // returned
+                        em.refresh(sme);
+                        if (logger.isDebugEnabled()) {
+                            logger.debug(
+                                    "IntegrityMonitor.executeStateAudit(): Found entry in StateManagementEntity table "
+                                            + "for Resource={}",
+                                    sme.getResourceName());
+                        }
+                    } else {
+                        String msg = "IntegrityMonitor.executeStateAudit(): " + fpe.getResourceName()
+                                + ": resource not found in state management entity database table";
+                        logger.error("{}", msg);
+                    }
+                    synchronized (imFlushLock) {
+                        et.commit();
+                    }
+                } catch (Exception e) {
+                    // log an error
+                    logger.error("IntegrityMonitor.executeStateAudit(): {}: StateManagementEntity DB read failed with "
+                            + "exception: ", fpe.getResourceName(), e);
+                    synchronized (imFlushLock) {
+                        if (et.isActive()) {
+                            et.rollback();
+                        }
+                    }
+                }
+
+                if (sme != null && !sme.getOpState().equals(StateManagement.DISABLED)) {
+                    if (logger.isDebugEnabled()) {
+                        logger.debug("IntegrityMonitor.executeStateAudit(): Changing OpStat = disabled for {}",
+                                sme.getResourceName());
+                    }
+                    try {
+                        stateManager.disableFailed(sme.getResourceName());
+                    } catch (Exception e) {
+                        String msg = "IntegrityMonitor.executeStateAudit(): Failed to disable " + sme.getResourceName();
+                        logger.error("{}", msg, e);
+                    }
+                }
+            } // end if(diffMs > staleMs)
+        } // end for(ForwardProgressEntity fpe : fpList)
+        logger.debug("IntegrityMonitor.executeStateAudit(): exit");
+    }
+
+    /**
+     * Execute a test transaction when test transaction interval has elapsed.
+     */
+    private void checkTestTransaction() {
+        logger.debug("checkTestTransaction(): entry");
+        synchronized (checkTestTransactionLock) {
+
+            // test transaction timer checks
+            if (testTransIntervalMs <= 0) {
+                logger.debug("checkTestTransaction(): disabled");
+                elapsedTestTransTime = 0;
+                return; // test transaction is disabled
+            }
+
+            elapsedTestTransTime = elapsedTestTransTime + cycleIntervalMillis;
+            if (elapsedTestTransTime < testTransIntervalMs) {
+                return; // test transaction interval not reached
+            }
+
+            elapsedTestTransTime = 0; // reset elapsed time
+
+            // execute test transaction
+            testTransaction();
+        }
+        logger.debug("checkTestTransaction(): exit");
+    }
+
+    /**
+     * Updates Fpc counter in database when write Fpc interval has elapsed.
+     */
+    private void checkWriteFpc() {
+        logger.debug("checkWriteFpc(): entry");
+        synchronized (checkWriteFpcLock) {
+
+            // test transaction timer checks
+            if (writeFpcIntervalMs <= 0) {
+                logger.debug("checkWriteFpc(): disabled");
+                elapsedWriteFpcTime = 0;
+                return; // write Fpc is disabled
+            }
+
+            elapsedWriteFpcTime = elapsedWriteFpcTime + cycleIntervalMillis;
+            if (elapsedWriteFpcTime < writeFpcIntervalMs) {
+                return; // write Fpc interval not reached
+            }
+
+            elapsedWriteFpcTime = 0; // reset elapsed time
+
+            // write Fpc to database
+            try {
+                writeFpc();
+            } catch (Exception e) {
+                logger.error("IntegrityMonitor threw exception.", e);
+            }
+        }
+        logger.debug("checkWriteFpc(): exit");
+    }
+
+    /**
+     * Execute a dependency health check periodically which also updates this resource's state.
+     */
+    private void checkDependentHealth() {
+        logger.debug("checkDependentHealth: entry");
+        if (checkDependencyIntervalMs <= 0) {
+            logger.debug("checkDependentHealth: disabled");
+            return; // dependency monitoring is disabled
+        }
+
+        long currTime = System.currentTimeMillis();
+        logger.debug("checkDependentHealth currTime - lastDependencyCheckTime = {}",
+                currTime - lastDependencyCheckTime);
+        if ((currTime - lastDependencyCheckTime) > checkDependencyIntervalMs) {
+            // execute dependency check and update this resource's state
+
+            dependencyCheck();
+        }
+        logger.debug("checkDependentHealth: exit");
+    }
+
+    /*
+     * This is a simple refresh audit which is periodically run to assure that the states and status
+     * attributes are aligned and notifications are sent to any listeners. It is possible for
+     * state/status to get out of synch and notified systems to be out of synch due to database
+     * corruption (manual or otherwise) or because a node became isolated.
+     * 
+     * When the operation (lock/unlock) is called, it will cause a re-evaluation of the state and
+     * send a notification to all registered observers.
+     */
+    private void refreshStateAudit() {
+        logger.debug("refreshStateAudit(): entry");
+        if (refreshStateAuditIntervalMs <= 0) {
+            // The audit is disabled
+            logger.debug("refreshStateAudit(): disabled");
+            return;
+        }
+        executeRefreshStateAudit();
+        logger.debug("refreshStateAudit(): exit");
+    }
+
+    /**
+     * Execute refresh state audit.
+     */
+    public void executeRefreshStateAudit() {
+        logger.debug("executeRefreshStateAudit(): entry");
+        synchronized (refreshStateAuditLock) {
+            logger.debug("refreshStateAudit: entry");
+            Date now = new Date();
+            long nowMs = now.getTime();
+            long lastTimeMs = refreshStateAuditLastRunDate.getTime();
+            logger.debug("refreshStateAudit: ms since last run = {}", nowMs - lastTimeMs);
+
+            if ((nowMs - lastTimeMs) > refreshStateAuditIntervalMs) {
+                String adminState = stateManager.getAdminState();
+                logger.debug("refreshStateAudit: adminState = {}", adminState);
+                if (adminState.equals(StateManagement.LOCKED)) {
+                    try {
+                        logger.debug("refreshStateAudit: calling lock()");
+                        stateManager.lock();
+                    } catch (Exception e) {
+                        logger.error("refreshStateAudit: caught unexpected exception from stateManager.lock(): ", e);
+                    }
+                } else { // unlocked
+                    try {
+                        logger.debug("refreshStateAudit: calling unlock()");
+                        stateManager.unlock();
+                    } catch (Exception e) {
+                        logger.error("refreshStateAudit: caught unexpected exception from stateManager.unlock(): ", e);
+                    }
+                }
+                refreshStateAuditLastRunDate = new Date();
+                logger.debug("refreshStateAudit: exit");
+            }
+        }
+        logger.debug("executeRefreshStateAudit(): exit");
+    }
+
+    /**
+     * The following nested class periodically performs the forward progress check, checks
+     * dependencies, does a refresh state audit and runs the stateAudit.
+     */
+    class FpManager extends Thread {
+        private final CountDownLatch stopper = new CountDownLatch(1);
+
+        private BlockingQueue<CountDownLatch> queue;
+        private CountDownLatch progressLatch = null;
+
+        // Constructor - start FP manager thread
+        FpManager(BlockingQueue<CountDownLatch> queue) {
+            this.queue = queue;
+            // set now as the last time the refreshStateAudit ran
+            IntegrityMonitor.this.refreshStateAuditLastRunDate = new Date();
+            // start thread
+            this.start();
+        }
+
+        @Override
+        public void run() {
+            logger.debug("FPManager thread running");
+
+            try {
+                getLatch();
+                decrementLatch();
+
+                while (!stopper.await(cycleIntervalMillis, TimeUnit.MILLISECONDS)) {
+                    getLatch();
+                    IntegrityMonitor.this.runOnce();
+                    decrementLatch();
+                }
+
+            } catch (InterruptedException e) {
+                logger.debug("IntegrityMonitor threw exception.", e);
+                Thread.currentThread().interrupt();
+            }
+        }
+
+        public void stopAndExit() {
+            stopper.countDown();
+            this.interrupt();
+        }
+
+        /**
+         * Gets the next latch from the queue.
+         * 
+         * @throws InterruptedException
+         * 
+         */
+        private void getLatch() throws InterruptedException {
+            if (queue != null) {
+                progressLatch = queue.take();
+            }
+        }
+
+        /**
+         * Decrements the current latch.
+         */
+        private void decrementLatch() {
+            if (progressLatch != null) {
+                progressLatch.countDown();
+            }
+        }
+
+    }
+
+    private void runOnce() {
+        try {
+            logger.debug("FPManager calling fpMonitorCycle()");
+            // check forward progress timer
+            fpMonitorCycle();
+
+            logger.debug("FPManager calling checkTestTransaction()");
+            // check test transaction timer
+            checkTestTransaction();
+
+            logger.debug("FPManager calling checkWriteFpc()");
+            // check write Fpc timer
+            checkWriteFpc();
+
+            logger.debug("FPManager calling checkDependentHealth()");
+            // check dependency health
+            checkDependentHealth();
+
+            logger.debug("FPManager calling refreshStateAudit()");
+            // check if it is time to run the refreshStateAudit
+            refreshStateAudit();
+
+            logger.debug("FPManager calling stateAudit()");
+            // check if it is time to run the stateAudit
+            stateAudit();
+
+        } catch (Exception e) {
+            logger.error("Ignore FPManager thread processing timer(s) exception: ", e);
+        }
+    }
+
+    /**
+     * Set all seems well or not well for the specified key.
+     * 
+     * @param key the key
+     * @param asw <code>true</code> if all seems well for the key, <code>false</code> if all seems
+     *        not well for the key
+     * @param msg message to add for the key
+     * @throws AllSeemsWellException if an error occurs
+     */
+    public void allSeemsWell(@NotNull String key, @NotNull Boolean asw, @NotNull String msg)
+            throws AllSeemsWellException {
+
+        logger.debug("allSeemsWell entry: key = {}, asw = {}, msg = {}", key, asw, msg);
+        if (key == null || key.isEmpty()) {
+            logger.error("allSeemsWell: 'key' has no visible content");
+            throw new IllegalArgumentException("allSeemsWell: 'key' has no visible content");
+        }
+        if (asw == null) {
+            logger.error("allSeemsWell: 'asw' is null");
+            throw new IllegalArgumentException("allSeemsWell: 'asw' is null");
+        }
+        if (msg == null || msg.isEmpty()) {
+            logger.error("allSeemsWell: 'msg' has no visible content");
+            throw new IllegalArgumentException("allSeemsWell: 'msg' has no visible content");
+        }
+
+        if (allSeemsWellMap == null) {
+            allSeemsWellMap = new HashMap<>();
+        }
+
+        if (allNotWellMap == null) {
+            allNotWellMap = new HashMap<>();
+        }
+
+        if (asw) {
+            logger.info("allSeemsWell: ALL SEEMS WELL: key = {}, msg = {}", key, msg);
+            try {
+                allSeemsWellMap.put(key, msg);
+            } catch (Exception e) {
+                String exceptMsg =
+                        "allSeemsWell: encountered an exception with allSeemsWellMap.put(" + key + "," + msg + ")";
+                logger.error(exceptMsg);
+                throw new AllSeemsWellException(exceptMsg, e);
+            }
+
+            try {
+                allNotWellMap.remove(key);
+            } catch (Exception e) {
+                String exceptMsg = "allSeemsWell: encountered an exception with allNotWellMap.delete(" + key + ")";
+                logger.error(exceptMsg);
+                throw new AllSeemsWellException(exceptMsg, e);
+            }
+
+        } else {
+            logger.error("allSeemsWell: ALL NOT WELL: key = {}, msg = {}", key, msg);
+            try {
+                allSeemsWellMap.remove(key);
+            } catch (Exception e) {
+                String exceptMsg = "allSeemsWell: encountered an exception with allSeemsWellMap.remove(" + key + ")";
+                logger.error(exceptMsg);
+                throw new AllSeemsWellException(exceptMsg, e);
+            }
+
+            try {
+                allNotWellMap.put(key, msg);
+            } catch (Exception e) {
+                String exceptMsg = "allSeemsWell: encountered an exception with allNotWellMap.put(" + key + msg + ")";
+                logger.error(exceptMsg);
+                throw new AllSeemsWellException(exceptMsg, e);
+            }
+        }
+
+        if (logger.isDebugEnabled()) {
+            for (Entry<String, String> entry : allSeemsWellMap.entrySet()) {
+                logger.debug("allSeemsWellMap: key = {}  msg = {}", entry.getKey(), entry.getValue());
+            }
+            for (Entry<String, String> entry : allNotWellMap.entrySet()) {
+                logger.debug("allNotWellMap: key = {}  msg = {}", entry.getKey(), entry.getValue());
+            }
+            logger.debug("allSeemsWell exit");
+        }
+    }
+
+    /**
+     * Converts the given value to milliseconds using the current {@link #propertyUnits}.
+     * 
+     * @param value value to be converted, or -1
+     * @return the value, in milliseconds, or -1
+     */
+    private static long toMillis(long value) {
+        return (value < 0 ? -1 : propertyUnits.toMillis(value));
+    }
+
+    public Map<String, String> getAllSeemsWellMap() {
+        return allSeemsWellMap;
+    }
+
+    public Map<String, String> getAllNotWellMap() {
+        return allNotWellMap;
+    }
+
+    /*
+     * The remaining methods are used by JUnit tests.
+     */
+
+    public static boolean isUnitTesting() {
+        return isUnitTesting;
+    }
+
+    public static void setUnitTesting(boolean isUnitTesting) {
+        IntegrityMonitor.isUnitTesting = isUnitTesting;
+    }
+
+    protected static TimeUnit getPropertyUnits() {
+        return propertyUnits;
+    }
+
+    protected static void setPropertyUnits(TimeUnit propertyUnits) {
+        IntegrityMonitor.propertyUnits = propertyUnits;
+    }
+
+    protected static long getCycleIntervalMillis() {
+        return cycleIntervalMillis;
+    }
+
+    protected static void setCycleIntervalMillis(long cycleIntervalMillis) {
+        IntegrityMonitor.cycleIntervalMillis = cycleIntervalMillis;
+    }
+
+    protected static String getPersistenceUnit() {
+        return persistenceUnit;
+    }
+
+    protected static void setPersistenceUnit(String persistenceUnit) {
+        IntegrityMonitor.persistenceUnit = persistenceUnit;
+    }
 }
index f01be27..6e1d0c0 100644 (file)
 
 package org.onap.policy.common.im;
 
-public class IntegrityMonitorException extends Exception{
-       private static final long serialVersionUID = 1L;
-       public IntegrityMonitorException() {
-               super();
-       }
-       public IntegrityMonitorException(String message) {
-               super(message);
-       }
-
-       public IntegrityMonitorException(Throwable cause) {
-               super(cause);
-       }
-       public IntegrityMonitorException(String message, Throwable cause) {
-               super(message, cause);
-       }
-
-       public IntegrityMonitorException(String message, Throwable cause, 
-                                       boolean enableSuppression, boolean writableStackTrace)
-       {
-               super(message, cause, enableSuppression, writableStackTrace);
-       }
+public class IntegrityMonitorException extends Exception {
+    private static final long serialVersionUID = 1L;
+
+    public IntegrityMonitorException() {
+        super();
+    }
+
+    public IntegrityMonitorException(String message) {
+        super(message);
+    }
+
+    public IntegrityMonitorException(Throwable cause) {
+        super(cause);
+    }
+
+    public IntegrityMonitorException(String message, Throwable cause) {
+        super(message, cause);
+    }
+
+    public IntegrityMonitorException(String message, Throwable cause, boolean enableSuppression,
+            boolean writableStackTrace) {
+        super(message, cause, enableSuppression, writableStackTrace);
+    }
 
 }
index b495db7..8589170 100644 (file)
@@ -22,40 +22,40 @@ package org.onap.policy.common.im;
 
 public class IntegrityMonitorProperties {
 
-       private IntegrityMonitorProperties() {}
-       
-       public static final String DB_DRIVER = "javax.persistence.jdbc.driver";
-       public static final String DB_URL = "javax.persistence.jdbc.url";
-       public static final String DB_USER = "javax.persistence.jdbc.user";
-       public static final String DB_PWD = "javax.persistence.jdbc.password";
-       
-       // intervals specified are in seconds
-       public static final int DEFAULT_MONITOR_INTERVAL = 30;
-       public static final int DEFAULT_FAILED_COUNTER_THRESHOLD = 3;
-       public static final int DEFAULT_TEST_INTERVAL = 10;
-       public static final int DEFAULT_WRITE_FPC_INTERVAL = 5;
-       public static final int DEFAULT_MAX_FPC_UPDATE_INTERVAL = 120;
-       public static final int DEFAULT_CHECK_DEPENDENCY_INTERVAL = 10;
-       
-       public static final String FP_MONITOR_INTERVAL = "fp_monitor_interval";
-       public static final String FAILED_COUNTER_THRESHOLD = "failed_counter_threshold";
-       public static final String TEST_TRANS_INTERVAL = "test_trans_interval";
-       public static final String WRITE_FPC_INTERVAL = "write_fpc_interval";
-       public static final String CHECK_DEPENDENCY_INTERVAL = "check_dependency_interval";
-       
-       public static final String DEPENDENCY_GROUPS = "dependency_groups";
-       public static final String SITE_NAME = "site_name";
-       public static final String NODE_TYPE = "node_type";
-       
-       public static final String TEST_VIA_JMX = "test_via_jmx";
-       public static final String JMX_FQDN = "jmx_fqdn";
-       public static final String MAX_FPC_UPDATE_INTERVAL = "max_fpc_update_interval";
-       public static final String STATE_AUDIT_INTERVAL_MS = "state_audit_interval_ms";
-       public static final String REFRESH_STATE_AUDIT_INTERVAL_MS = "refresh_state_audit_interval_ms";
-       
-       // AllSeemsWell types
-       public static final Boolean ALLNOTWELL=Boolean.FALSE;
-       public static final Boolean ALLSEEMSWELL=Boolean.TRUE;
-
-       
+    private IntegrityMonitorProperties() {}
+
+    public static final String DB_DRIVER = "javax.persistence.jdbc.driver";
+    public static final String DB_URL = "javax.persistence.jdbc.url";
+    public static final String DB_USER = "javax.persistence.jdbc.user";
+    public static final String DB_PWD = "javax.persistence.jdbc.password";
+
+    // intervals specified are in seconds
+    public static final int DEFAULT_MONITOR_INTERVAL = 30;
+    public static final int DEFAULT_FAILED_COUNTER_THRESHOLD = 3;
+    public static final int DEFAULT_TEST_INTERVAL = 10;
+    public static final int DEFAULT_WRITE_FPC_INTERVAL = 5;
+    public static final int DEFAULT_MAX_FPC_UPDATE_INTERVAL = 120;
+    public static final int DEFAULT_CHECK_DEPENDENCY_INTERVAL = 10;
+
+    public static final String FP_MONITOR_INTERVAL = "fp_monitor_interval";
+    public static final String FAILED_COUNTER_THRESHOLD = "failed_counter_threshold";
+    public static final String TEST_TRANS_INTERVAL = "test_trans_interval";
+    public static final String WRITE_FPC_INTERVAL = "write_fpc_interval";
+    public static final String CHECK_DEPENDENCY_INTERVAL = "check_dependency_interval";
+
+    public static final String DEPENDENCY_GROUPS = "dependency_groups";
+    public static final String SITE_NAME = "site_name";
+    public static final String NODE_TYPE = "node_type";
+
+    public static final String TEST_VIA_JMX = "test_via_jmx";
+    public static final String JMX_FQDN = "jmx_fqdn";
+    public static final String MAX_FPC_UPDATE_INTERVAL = "max_fpc_update_interval";
+    public static final String STATE_AUDIT_INTERVAL_MS = "state_audit_interval_ms";
+    public static final String REFRESH_STATE_AUDIT_INTERVAL_MS = "refresh_state_audit_interval_ms";
+
+    // AllSeemsWell types
+    public static final Boolean ALLNOTWELL = Boolean.FALSE;
+    public static final Boolean ALLSEEMSWELL = Boolean.TRUE;
+
+
 }
index 0d73e8b..d3533f1 100644 (file)
 package org.onap.policy.common.im;
 
 public class IntegrityMonitorPropertiesException extends IntegrityMonitorException {
-       private static final long serialVersionUID = 1L;
-       public IntegrityMonitorPropertiesException() {
-               super();
-       }
-       public IntegrityMonitorPropertiesException(String message) {
-               super(message);
-       }
+    private static final long serialVersionUID = 1L;
 
-       public IntegrityMonitorPropertiesException(Throwable cause) {
-               super(cause);
-       }
-       public IntegrityMonitorPropertiesException(String message, Throwable cause) {
-               super(message, cause);
-       }
+    public IntegrityMonitorPropertiesException() {
+        super();
+    }
+
+    public IntegrityMonitorPropertiesException(String message) {
+        super(message);
+    }
+
+    public IntegrityMonitorPropertiesException(Throwable cause) {
+        super(cause);
+    }
+
+    public IntegrityMonitorPropertiesException(String message, Throwable cause) {
+        super(message, cause);
+    }
 }
index 3d27a4c..352df38 100644 (file)
 package org.onap.policy.common.im;
 
 public class StandbyStatusException extends IntegrityMonitorException {
-       /**
-        * 
-        */
-       private static final long serialVersionUID = -5262512285108747134L;
-
-       public StandbyStatusException()
-       {
-               super();
-       }
-
-       public StandbyStatusException(String message)
-       {
-               super(message);
-       }
-
-       public StandbyStatusException(Throwable cause)
-       {
-               super(cause);
-       }
-
-       public StandbyStatusException(String message, Throwable cause)
-       {
-               super(message, cause);
-       }
-
-       public StandbyStatusException(String message, Throwable cause, 
-                                       boolean enableSuppression, boolean writableStackTrace)
-       {
-               super(message, cause, enableSuppression, writableStackTrace);
-       }
+
+    private static final long serialVersionUID = -5262512285108747134L;
+
+    public StandbyStatusException() {
+        super();
+    }
+
+    public StandbyStatusException(String message) {
+        super(message);
+    }
+
+    public StandbyStatusException(Throwable cause) {
+        super(cause);
+    }
+
+    public StandbyStatusException(String message, Throwable cause) {
+        super(message, cause);
+    }
+
+    public StandbyStatusException(String message, Throwable cause, boolean enableSuppression,
+            boolean writableStackTrace) {
+        super(message, cause, enableSuppression, writableStackTrace);
+    }
 }
index 0d4bd02..a678319 100644 (file)
  */
 
 package org.onap.policy.common.im;
-import java.util.Observable; 
-import java.util.Observer; 
+
+import java.util.Observable;
+import java.util.Observer;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 /* 
@@ -39,41 +40,42 @@ import org.slf4j.LoggerFactory;
 
 
 
-
 /**
- * 
- * StateChangeNotifier class implements the Observer pattern and is used to distribute
- * state change notifications to any entity that registers a derived class with an 
- * instance of the StateManagement class. 
+ * StateChangeNotifier class implements the Observer pattern and is used to distribute state change
+ * notifications to any entity that registers a derived class with an instance of the
+ * StateManagement class.
  *
  */
-public class StateChangeNotifier implements Observer { 
-       private static final Logger logger = LoggerFactory.getLogger(StateChangeNotifier.class);
-       //The observable class 
-       StateManagement stateManagement; 
-       // A string argument passed by the observable class when 
-       // Observable:notifyObservers(Object arg) is called 
-       String message; 
-       @Override 
-       public void update(Observable o, Object arg) { 
-               this.stateManagement = (StateManagement) o; 
-               this.message = (String) arg; 
-               handleStateChange(); 
-       } 
-       public void handleStateChange() {
-               if(logger.isDebugEnabled()){
-                       logger.debug("handleStateChange, message: {}", this.message);
-               }
-       }
+public class StateChangeNotifier implements Observer {
+    private static final Logger logger = LoggerFactory.getLogger(StateChangeNotifier.class);
+    // The observable class
+    StateManagement stateManagement;
+
+    // A string argument passed by the observable class when
+    // Observable:notifyObservers(Object arg) is called
+    String message;
+
+    @Override
+    public void update(Observable observable, Object arg) {
+        this.stateManagement = (StateManagement) observable;
+        this.message = (String) arg;
+        handleStateChange();
+    }
+
+    /**
+     * Handle state change.
+     */
+    public void handleStateChange() {
+        if (logger.isDebugEnabled()) {
+            logger.debug("handleStateChange, message: {}", this.message);
+        }
+    }
 
-       public StateManagement getStateManagement() {
-               return stateManagement;
-       }
+    public StateManagement getStateManagement() {
+        return stateManagement;
+    }
 
-       public String getMessage() {
-               return message;
-       }
-} 
\ No newline at end of file
+    public String getMessage() {
+        return message;
+    }
+}
index fd5afc6..030a037 100644 (file)
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * Integrity Monitor
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
 
 package org.onap.policy.common.im;
 
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 public class StateElement {
-       private static final Logger logger = LoggerFactory.getLogger(StateElement.class);
-
-       String adminState = null; 
-       String opState = null; 
-       String availStatus = null;
-       String standbyStatus = null;
-       String actionName = null; 
-       String endingAdminState = null; 
-       String endingOpState = null; 
-       String endingAvailStatus = null;
-       String endingStandbyStatus = null;
-       String exception  = null;
-        
-       public StateElement()
-       {
-               // Empty constructor
-       }
-       
-       public String getAdminState()
-       {
-           return this.adminState; 
-    }
-
-       public void setAdminState(String adminState) 
-       {
-               this.adminState         = adminState;
-       }
-       
-       public String getOpState()
-       {
-           return this.opState; 
-    }
-       
-       public void setOpState(String opState) 
-       {
-               this.opState = opState;
-       }
-       
-       public String getAvailStatus()
-       {
-           return this.availStatus; 
-    }  
-       
-       public void setAvailStatus(String availStatus) 
-       {
-               this.availStatus = availStatus;
-       }
-       
-       public String getStandbyStatus()
-       {
-           return this.standbyStatus; 
-    }  
-       
-       public void setStandbyStatus(String standbyStatus) 
-       {
-               this.standbyStatus = standbyStatus;
-       }
-       
-       public String getActionName()
-       {
-           return this.actionName; 
-    }  
-       
-       public void setActionName(String actionName) 
-       {
-               this.actionName = actionName;
-       }
-       
-       public String getEndingAdminState()
-       {
-           return this.endingAdminState; 
-    }  
-       
-       public void setEndingAdminState(String endingAdminState) 
-       {
-               this.endingAdminState = endingAdminState;
-       }
-       
-       public String getEndingOpState()
-       {
-           return this.endingOpState; 
-    }  
-       
-       public void setEndingOpState(String endingOpState) 
-       {
-               this.endingOpState = endingOpState;
-       }
-       
-       public String getEndingAvailStatus()
-       {
-           return this.endingAvailStatus; 
-    }  
-       
-       public void setEndingAvailStatus(String endingAvailStatus) 
-       {
-               this.endingAvailStatus = endingAvailStatus;
-       }
-       
-       public String getEndingStandbyStatus()
-       {
-           return this.endingStandbyStatus; 
-    }  
-       
-       public void setEndingStandbyStatus(String endingStandbyStatus) 
-       {
-               this.endingStandbyStatus = endingStandbyStatus;
-       }
-       
-       public String getException()
-       {
-           return this.exception; 
-    }  
-       
-       public void setException(String exception) 
-       {
-               this.exception = exception;
-       }
-       
-       public void displayStateElement()
-       {
-               if(logger.isDebugEnabled()){
-                       logger.debug("adminState=[{}], opState=[{}], availStatus=[{}], standbyStatus=[{}], " +
-                               "actionName=[{}], endingAdminState=[{}], endingOpState=[{}], " +
-                               "endingAvailStatus=[{}], endingStandbyStatus=[{}], exception=[{}]",
-                                       getAdminState(), 
-                                       getOpState(), 
-                                       getAvailStatus(), 
-                                       getStandbyStatus(), 
-                                       getActionName(),
-                                       getEndingAdminState(), 
-                                       getEndingOpState(),
-                                       getEndingAvailStatus(), 
-                                       getEndingStandbyStatus(), 
-                                       getException());
-               }
-       }
+    private static final Logger logger = LoggerFactory.getLogger(StateElement.class);
+
+    String adminState = null;
+    String opState = null;
+    String availStatus = null;
+    String standbyStatus = null;
+    String actionName = null;
+    String endingAdminState = null;
+    String endingOpState = null;
+    String endingAvailStatus = null;
+    String endingStandbyStatus = null;
+    String exception = null;
+
+    public StateElement() {
+        // Empty constructor
+    }
+
+    public String getAdminState() {
+        return this.adminState;
+    }
+
+    public void setAdminState(String adminState) {
+        this.adminState = adminState;
+    }
+
+    public String getOpState() {
+        return this.opState;
+    }
+
+    public void setOpState(String opState) {
+        this.opState = opState;
+    }
+
+    public String getAvailStatus() {
+        return this.availStatus;
+    }
+
+    public void setAvailStatus(String availStatus) {
+        this.availStatus = availStatus;
+    }
+
+    public String getStandbyStatus() {
+        return this.standbyStatus;
+    }
+
+    public void setStandbyStatus(String standbyStatus) {
+        this.standbyStatus = standbyStatus;
+    }
+
+    public String getActionName() {
+        return this.actionName;
+    }
+
+    public void setActionName(String actionName) {
+        this.actionName = actionName;
+    }
+
+    public String getEndingAdminState() {
+        return this.endingAdminState;
+    }
+
+    public void setEndingAdminState(String endingAdminState) {
+        this.endingAdminState = endingAdminState;
+    }
+
+    public String getEndingOpState() {
+        return this.endingOpState;
+    }
+
+    public void setEndingOpState(String endingOpState) {
+        this.endingOpState = endingOpState;
+    }
+
+    public String getEndingAvailStatus() {
+        return this.endingAvailStatus;
+    }
+
+    public void setEndingAvailStatus(String endingAvailStatus) {
+        this.endingAvailStatus = endingAvailStatus;
+    }
+
+    public String getEndingStandbyStatus() {
+        return this.endingStandbyStatus;
+    }
+
+    public void setEndingStandbyStatus(String endingStandbyStatus) {
+        this.endingStandbyStatus = endingStandbyStatus;
+    }
+
+    public String getException() {
+        return this.exception;
+    }
+
+    public void setException(String exception) {
+        this.exception = exception;
+    }
+
+    /**
+     * Display the state element.
+     */
+    public void displayStateElement() {
+        if (logger.isDebugEnabled()) {
+            logger.debug(
+                    "adminState=[{}], opState=[{}], availStatus=[{}], standbyStatus=[{}], "
+                            + "actionName=[{}], endingAdminState=[{}], endingOpState=[{}], "
+                            + "endingAvailStatus=[{}], endingStandbyStatus=[{}], exception=[{}]",
+                    getAdminState(), getOpState(), getAvailStatus(), getStandbyStatus(), getActionName(),
+                    getEndingAdminState(), getEndingOpState(), getEndingAvailStatus(), getEndingStandbyStatus(),
+                    getException());
+        }
+    }
 }
index 5cafd87..dbb278e 100644 (file)
@@ -23,927 +23,952 @@ package org.onap.policy.common.im;
 import java.util.Date;
 import java.util.List;
 import java.util.Observable;
+
 import javax.persistence.EntityManager;
 import javax.persistence.EntityManagerFactory;
 import javax.persistence.FlushModeType;
 import javax.persistence.LockModeType;
 import javax.persistence.TypedQuery;
+
 import org.onap.policy.common.im.exceptions.EntityRetrievalException;
 import org.onap.policy.common.im.jpa.StateManagementEntity;
 import org.onap.policy.common.utils.jpa.EntityMgrCloser;
 import org.onap.policy.common.utils.jpa.EntityTransCloser;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+
 /**
- * 
- * StateManagement class handles all state changes per the Telecom standard X.731.
- * It extends the Observable class and, thus, has an interface to register
- * instances of the StateChangeNotifier/Observer class.  When any state change
- * occurs, the registered observers are notified.
+ * StateManagement class handles all state changes per the Telecom standard X.731. It extends the
+ * Observable class and, thus, has an interface to register instances of the
+ * StateChangeNotifier/Observer class. When any state change occurs, the registered observers are
+ * notified.
  *
  */
 public class StateManagement extends Observable {
-  private static final String RESOURCE_NAME = "resource";
-  private static final String GET_STATE_MANAGEMENT_ENTITY_QUERY =
+    private static final String RESOURCE_NAME = "resource";
+    private static final String GET_STATE_MANAGEMENT_ENTITY_QUERY =
             "Select p from StateManagementEntity p where p.resourceName=:" + RESOURCE_NAME;
-  private static final Logger logger = LoggerFactory.getLogger(StateManagement.class);
-  public static final String LOCKED               = "locked";   
-  public static final String UNLOCKED             = "unlocked";   
-  public static final String ENABLED              = "enabled"; 
-  public static final String DISABLED             = "disabled";
-  public static final String ENABLE_NOT_FAILED    = "enableNotFailed";   
-  public static final String DISABLE_FAILED       = "disableFailed"; 
-  public static final String FAILED               = "failed"; 
-  public static final String DEPENDENCY           = "dependency"; 
-  public static final String DEPENDENCY_FAILED    = "dependency,failed";
-  public static final String DISABLE_DEPENDENCY   = "disableDependency";
-  public static final String ENABLE_NO_DEPENDENCY = "enableNoDependency";
-  public static final String NULL_VALUE           = "null";
-  public static final String LOCK                 = "lock";   
-  public static final String UNLOCK               = "unlock";  
-  public static final String PROMOTE              = "promote"; 
-  public static final String DEMOTE               = "demote"; 
-  public static final String HOT_STANDBY          = "hotstandby"; 
-  public static final String COLD_STANDBY         = "coldstandby"; 
-  public static final String PROVIDING_SERVICE    = "providingservice"; 
-  
-  public static final String ADMIN_STATE     = "adminState"; 
-  public static final String OPERATION_STATE = "opState"; 
-  public static final String AVAILABLE_STATUS= "availStatus"; 
-  public static final String STANDBY_STATUS  = "standbyStatus"; 
-  
-  private String resourceName = null; 
-  private String adminState = null; 
-  private String opState = null; 
-  private String availStatus = null; 
-  private String standbyStatus = null; 
-  private final EntityManagerFactory emf;
-  private StateTransition st = null;
-    
-  /*
-        * Guarantees single-threadedness of all actions. Only one action can execute
-        * at a time. That avoids race conditions between actions being called
-        * from different places.
-        * 
-        * Some actions can take significant time to complete and, if another conflicting
-        * action is called during its execution, it could put the system in an inconsistent
-        * state.  This very thing happened when demote was called and the active/standby
-        * algorithm, seeing the state attempted to promote the PDP-D.
-        * 
-        */
-       private static final Object SYNCLOCK = new Object();
-       private static final Object FLUSHLOCK = new Object();
-       
-  /**
-   * StateManagement constructor
-   * @param entityManagerFactory
-   * @param resourceName
-   * @throws StateManagementException
-   */
-  public StateManagement(final EntityManagerFactory entityManagerFactory, final String resourceName) throws StateManagementException
-  {
-         emf = entityManagerFactory;
-         if(logger.isDebugEnabled()){
-                 logger.debug("StateManagement: constructor, resourceName: {}", resourceName);
-         }
-         
-         final EntityManager em = emf.createEntityManager();
-         try(EntityMgrCloser emc = new EntityMgrCloser(em);
-                         MyTransaction et = new MyTransaction(em)) {
-
-             this.resourceName = resourceName; 
-             if(logger.isDebugEnabled()){
-                 logger.debug("resourceName = {}", this.resourceName);
-             }
-             
-
-             try {
-               //Create a StateManagementEntity object
-                 if(logger.isDebugEnabled()){
-                         logger.debug("findStateManagementEntity for {}", this.resourceName); 
-                 }
-               final StateManagementEntity sm = findStateManagementEntity(em, this.resourceName); 
-
-               //persist the administrative state
-               if(logger.isDebugEnabled()){
-                               logger.debug("Persist adminstrative state, resourceName = {}", this.resourceName); 
-               }
-               em.persist(sm);
+    private static final Logger logger = LoggerFactory.getLogger(StateManagement.class);
+    public static final String LOCKED = "locked";
+    public static final String UNLOCKED = "unlocked";
+    public static final String ENABLED = "enabled";
+    public static final String DISABLED = "disabled";
+    public static final String ENABLE_NOT_FAILED = "enableNotFailed";
+    public static final String DISABLE_FAILED = "disableFailed";
+    public static final String FAILED = "failed";
+    public static final String DEPENDENCY = "dependency";
+    public static final String DEPENDENCY_FAILED = "dependency,failed";
+    public static final String DISABLE_DEPENDENCY = "disableDependency";
+    public static final String ENABLE_NO_DEPENDENCY = "enableNoDependency";
+    public static final String NULL_VALUE = "null";
+    public static final String LOCK = "lock";
+    public static final String UNLOCK = "unlock";
+    public static final String PROMOTE = "promote";
+    public static final String DEMOTE = "demote";
+    public static final String HOT_STANDBY = "hotstandby";
+    public static final String COLD_STANDBY = "coldstandby";
+    public static final String PROVIDING_SERVICE = "providingservice";
+
+    public static final String ADMIN_STATE = "adminState";
+    public static final String OPERATION_STATE = "opState";
+    public static final String AVAILABLE_STATUS = "availStatus";
+    public static final String STANDBY_STATUS = "standbyStatus";
+
+    private String resourceName = null;
+    private String adminState = null;
+    private String opState = null;
+    private String availStatus = null;
+    private String standbyStatus = null;
+    private final EntityManagerFactory emf;
+    private StateTransition st = null;
+
+    /*
+     * Guarantees single-threadedness of all actions. Only one action can execute at a time. That
+     * avoids race conditions between actions being called from different places.
+     * 
+     * Some actions can take significant time to complete and, if another conflicting action is
+     * called during its execution, it could put the system in an inconsistent state. This very
+     * thing happened when demote was called and the active/standby algorithm, seeing the state
+     * attempted to promote the PDP-D.
+     * 
+     */
+    private static final Object SYNCLOCK = new Object();
+    private static final Object FLUSHLOCK = new Object();
+
+    /**
+     * StateManagement constructor.
+     * 
+     * @param entityManagerFactory the entity manager factory
+     * @param resourceName the resource name
+     * @throws StateManagementException if an error occurs
+     */
+    public StateManagement(final EntityManagerFactory entityManagerFactory, final String resourceName)
+            throws StateManagementException {
+        emf = entityManagerFactory;
+        if (logger.isDebugEnabled()) {
+            logger.debug("StateManagement: constructor, resourceName: {}", resourceName);
+        }
+
+        final EntityManager em = emf.createEntityManager();
+        try (EntityMgrCloser emc = new EntityMgrCloser(em); MyTransaction et = new MyTransaction(em)) {
+
+            this.resourceName = resourceName;
+            if (logger.isDebugEnabled()) {
+                logger.debug("resourceName = {}", this.resourceName);
+            }
+
+
+            try {
+                // Create a StateManagementEntity object
+                if (logger.isDebugEnabled()) {
+                    logger.debug("findStateManagementEntity for {}", this.resourceName);
+                }
+                final StateManagementEntity sm = findStateManagementEntity(em, this.resourceName);
+
+                // persist the administrative state
+                if (logger.isDebugEnabled()) {
+                    logger.debug("Persist adminstrative state, resourceName = {}", this.resourceName);
+                }
+                em.persist(sm);
+                et.commit();
+
+                // Load the StateTransition hash table
+                st = new StateTransition();
+
+                if (logger.isDebugEnabled()) {
+                    logger.debug("StateManagement: constructor end, resourceName: {}", this.resourceName);
+                }
+            } catch (final Exception ex) {
+                logger.error("StateManagement: constructor caught unexpected exception: ", ex);
+                throw new StateManagementException("StateManagement: Exception: " + ex.toString(), ex);
+            }
+        }
+    }
+
+    /**
+     * initializeState() is called when it is necessary to set the StateManagement to a known
+     * initial state. It preserves the Administrative State since it must persist across node
+     * reboots. Starting from this state, the IntegrityMonitory will determine the Operational State
+     * and the owning application will set the StandbyStatus.
+     */
+    public void initializeState() throws StateManagementException {
+        synchronized (SYNCLOCK) {
+            if (logger.isDebugEnabled()) {
+                logger.debug("\nStateManagement: SYNCLOCK initializeState() operation for resourceName = {}\n",
+                        this.resourceName);
+                logger.debug("StateManagement: initializeState() operation started, resourceName = {}",
+                        this.resourceName);
+            }
+            final EntityManager em = emf.createEntityManager();
+
+            try (EntityMgrCloser emc = new EntityMgrCloser(em); MyTransaction et = new MyTransaction(em)) {
+
+                if (logger.isDebugEnabled()) {
+                    logger.debug("findStateManagementEntity for {}", this.resourceName);
+                }
+                final StateManagementEntity sm = findStateManagementEntity(em, this.resourceName);
+                // set state
+                sm.setAdminState(sm.getAdminState()); // preserve the Admin state
+                sm.setOpState(StateManagement.ENABLED);
+                sm.setAvailStatus(StateManagement.NULL_VALUE);
+                sm.setStandbyStatus(StateManagement.NULL_VALUE);
+
+                em.persist(sm);
+                et.commit();
+                setChanged();
+                notifyObservers(ADMIN_STATE);
+
+                if (logger.isDebugEnabled()) {
+                    logger.debug("StateManagement: initializeState() operation completed, resourceName = {}",
+                            this.resourceName);
+                }
+            } catch (final Exception ex) {
+                logger.error("StateManagement.initializeState() caught unexpected exception: ", ex);
+                throw new StateManagementException("StateManagement.initializeState() Exception: " + ex);
+            }
+        }
+    }
+
+    /**
+     * lock() changes the administrative state to locked.
+     * 
+     * @throws StateManagementException if an error occurs
+     */
+    public void lock() throws StateManagementException {
+        synchronized (SYNCLOCK) {
+            if (logger.isDebugEnabled()) {
+                logger.debug("\nStateManagement: SYNCLOCK lock() operation for resourceName = {}\n", this.resourceName);
+                logger.debug("StateManagement: lock() operation started, resourceName = {}", this.resourceName);
+            }
+            final EntityManager em = emf.createEntityManager();
+
+            try (EntityMgrCloser emc = new EntityMgrCloser(em); MyTransaction et = new MyTransaction(em)) {
+
+                if (logger.isDebugEnabled()) {
+                    logger.debug("findStateManagementEntity for {}", this.resourceName);
+                }
+                final StateManagementEntity sm = findStateManagementEntity(em, this.resourceName);
+
+                final StateElement stateElement = st.getEndingState(sm.getAdminState(), sm.getOpState(),
+                        sm.getAvailStatus(), sm.getStandbyStatus(), LOCK);
+
+                sm.setAdminState(stateElement.getEndingAdminState());
+                sm.setOpState(stateElement.getEndingOpState());
+                sm.setAvailStatus(stateElement.getEndingAvailStatus());
+                sm.setStandbyStatus(stateElement.getEndingStandbyStatus());
+
+                em.persist(sm);
+                et.commit();
+                setChanged();
+                notifyObservers(ADMIN_STATE);
+
+                if (logger.isDebugEnabled()) {
+                    logger.debug("StateManagement: lock() operation completed, resourceName = {}", this.resourceName);
+                }
+            } catch (final Exception ex) {
+                logger.error("StateManagement.lock() caught unexpected exception: ", ex);
+                throw new StateManagementException("StateManagement.lock() Exception: " + ex.toString());
+            }
+        }
+    }
+
+    /**
+     * unlock() changes the administrative state to unlocked.
+     * 
+     * @throws StateManagementException if an error occurs
+     */
+    public void unlock() throws StateManagementException {
+        synchronized (SYNCLOCK) {
+            if (logger.isDebugEnabled()) {
+                logger.debug("\nStateManagement: SYNCLOCK unlock() operation for resourceName = {}\n",
+                        this.resourceName);
+                logger.debug("StateManagement: unlock() operation started, resourceName = {}", this.resourceName);
+            }
+            final EntityManager em = emf.createEntityManager();
+
+            try (EntityMgrCloser emc = new EntityMgrCloser(em); MyTransaction et = new MyTransaction(em)) {
+
+                if (logger.isDebugEnabled()) {
+                    logger.debug("findStateManagementEntity for {}", this.resourceName);
+                }
+                final StateManagementEntity sm = findStateManagementEntity(em, this.resourceName);
+                final StateElement stateElement = st.getEndingState(sm.getAdminState(), sm.getOpState(),
+                        sm.getAvailStatus(), sm.getStandbyStatus(), UNLOCK);
+                // set transition state
+                sm.setAdminState(stateElement.getEndingAdminState());
+                sm.setOpState(stateElement.getEndingOpState());
+                sm.setAvailStatus(stateElement.getEndingAvailStatus());
+                sm.setStandbyStatus(stateElement.getEndingStandbyStatus());
+
+                em.persist(sm);
+                et.commit();
+                setChanged();
+                notifyObservers(ADMIN_STATE);
+
+                if (logger.isDebugEnabled()) {
+                    logger.debug("StateManagement: unlock() operation completed, resourceName = {}", this.resourceName);
+                }
+            } catch (final Exception ex) {
+                logger.error("StateManagement.unlock() caught unexpected exception: ", ex);
+                throw new StateManagementException("StateManagement.unlock() Exception: " + ex);
+            }
+        }
+    }
+
+    /**
+     * enableNotFailed() removes the "failed" availability status and changes the operational state
+     * to enabled if no dependency is also failed.
+     * 
+     * @throws StateManagementException if an error occurs
+     */
+    public void enableNotFailed() throws StateManagementException {
+        synchronized (SYNCLOCK) {
+            if (logger.isDebugEnabled()) {
+                logger.debug("\nStateManagement: SYNCLOCK enabledNotFailed() operation for resourceName = {}\n",
+                        this.resourceName);
+                logger.debug("StateManagement: enableNotFailed() operation started, resourceName = {}",
+                        this.resourceName);
+            }
+            final EntityManager em = emf.createEntityManager();
+
+            try (EntityMgrCloser emc = new EntityMgrCloser(em); MyTransaction et = new MyTransaction(em)) {
+
+                if (logger.isDebugEnabled()) {
+                    logger.debug("findStateManagementEntity for {}", this.resourceName);
+                }
+                final StateManagementEntity sm = findStateManagementEntity(em, this.resourceName);
+                final StateElement stateElement = st.getEndingState(sm.getAdminState(), sm.getOpState(),
+                        sm.getAvailStatus(), sm.getStandbyStatus(), ENABLE_NOT_FAILED);
+                // set transition state
+                sm.setAdminState(stateElement.getEndingAdminState());
+                sm.setOpState(stateElement.getEndingOpState());
+                sm.setAvailStatus(stateElement.getEndingAvailStatus());
+                sm.setStandbyStatus(stateElement.getEndingStandbyStatus());
+
+                em.persist(sm);
+                et.commit();
+
+                setChanged();
+                notifyObservers(OPERATION_STATE);
+
+                if (logger.isDebugEnabled()) {
+                    logger.debug("StateManagement enableNotFailed() operation completed, resourceName = {}",
+                            this.resourceName);
+                }
+            } catch (final Exception ex) {
+                logger.error("StateManagement.enableNotFailed() caught unexpected exception: ", ex);
+                throw new StateManagementException("StateManagement.enableNotFailed() Exception: " + ex);
+            }
+        }
+    }
+
+    /**
+     * disableFailed() changes the operational state to disabled and adds availability status of
+     * "failed".
+     * 
+     * @throws StateManagementException if an error occurs
+     */
+    public void disableFailed() throws StateManagementException {
+        synchronized (SYNCLOCK) {
+            if (logger.isDebugEnabled()) {
+                logger.debug("\nStateManagement: SYNCLOCK disabledFailed() operation for resourceName = {}\n",
+                        this.resourceName);
+                logger.debug("StateManagement: disableFailed() operation started, resourceName = {}",
+                        this.resourceName);
+            }
+            final EntityManager em = emf.createEntityManager();
+
+            try (EntityMgrCloser emc = new EntityMgrCloser(em); MyTransaction et = new MyTransaction(em)) {
+
+                if (logger.isDebugEnabled()) {
+                    logger.debug("findStateManagementEntity for {}", this.resourceName);
+                }
+                final StateManagementEntity sm = findStateManagementEntity(em, this.resourceName);
+                final StateElement stateElement = st.getEndingState(sm.getAdminState(), sm.getOpState(),
+                        sm.getAvailStatus(), sm.getStandbyStatus(), DISABLE_FAILED);
+                // set transition state
+                sm.setAdminState(stateElement.getEndingAdminState());
+                sm.setOpState(stateElement.getEndingOpState());
+                sm.setAvailStatus(stateElement.getEndingAvailStatus());
+                sm.setStandbyStatus(stateElement.getEndingStandbyStatus());
+
+                em.persist(sm);
+                et.commit();
+                setChanged();
+                notifyObservers(OPERATION_STATE);
+
+                if (logger.isDebugEnabled()) {
+                    logger.debug("StateManagement: disableFailed() operation completed, resourceName = {}",
+                            this.resourceName);
+                }
+            } catch (final Exception ex) {
+                logger.error("StateManagement.disableFailed() caught unexpected exception: ", ex);
+                throw new StateManagementException("StateManagement.disableFailed() Exception: " + ex);
+            }
+        }
+    }
+
+    /**
+     * This version of disableFailed is to be used to manipulate the state of a remote resource in
+     * the event that remote resource has failed but its state is still showing that it is viable.
+     * 
+     * @throws StateManagementException if an error occurs
+     */
+    public void disableFailed(final String otherResourceName) throws StateManagementException {
+        synchronized (SYNCLOCK) {
+            if (otherResourceName == null) {
+                logger.error("\nStateManagement: SYNCLOCK disableFailed(otherResourceName) operation: resourceName is "
+                        + "NULL.\n");
+                return;
+            }
+            if (logger.isDebugEnabled()) {
+                logger.debug("\nStateManagement: SYNCLOCK disabledFailed(otherResourceName) operation for resourceName "
+                        + "= {}\n", otherResourceName);
+                logger.debug("StateManagement: disableFailed(otherResourceName) operation started, resourceName = {}",
+                        otherResourceName);
+            }
+            final EntityManager em = emf.createEntityManager();
+
+            try (EntityMgrCloser emc = new EntityMgrCloser(em); MyTransaction et = new MyTransaction(em)) {
+
+                if (logger.isDebugEnabled()) {
+                    logger.debug("findStateManagementEntity for " + otherResourceName);
+                }
+                final StateManagementEntity sm = findStateManagementEntity(em, otherResourceName);
+                final StateElement stateElement = st.getEndingState(sm.getAdminState(), sm.getOpState(),
+                        sm.getAvailStatus(), sm.getStandbyStatus(), DISABLE_FAILED);
+                // set transition state
+                sm.setAdminState(stateElement.getEndingAdminState());
+                sm.setOpState(stateElement.getEndingOpState());
+                sm.setAvailStatus(stateElement.getEndingAvailStatus());
+                sm.setStandbyStatus(stateElement.getEndingStandbyStatus());
+
+                em.persist(sm);
+                et.commit();
+                setChanged();
+                notifyObservers(OPERATION_STATE);
+
+                if (logger.isDebugEnabled()) {
+                    logger.debug(
+                            "StateManagement: disableFailed(otherResourceName) operation completed, resourceName = {}",
+                            otherResourceName);
+                }
+            } catch (final Exception ex) {
+                logger.error("StateManagement.disableFailed(otherResourceName) caught unexpected exception: ", ex);
+                throw new StateManagementException("StateManagement.disableFailed(otherResourceName) Exception: " + ex);
+            }
+        }
+    }
+
+    /**
+     * disableDependency() changes operational state to disabled and adds availability status of
+     * "dependency".
+     * 
+     * @throws StateManagementException if an error occurs
+     */
+    public void disableDependency() throws StateManagementException {
+        synchronized (SYNCLOCK) {
+            if (logger.isDebugEnabled()) {
+                logger.debug("\nStateManagement: SYNCLOCK disableDependency() operation for resourceName = {}\n",
+                        this.resourceName);
+                logger.debug("StateManagement: disableDependency() operation started, resourceName = {}",
+                        this.resourceName);
+            }
+            final EntityManager em = emf.createEntityManager();
+
+            try (EntityMgrCloser emc = new EntityMgrCloser(em); MyTransaction et = new MyTransaction(em)) {
+
+                if (logger.isDebugEnabled()) {
+                    logger.debug("findStateManagementEntity for {}", this.resourceName);
+                }
+                final StateManagementEntity sm = findStateManagementEntity(em, this.resourceName);
+                final StateElement stateElement = st.getEndingState(sm.getAdminState(), sm.getOpState(),
+                        sm.getAvailStatus(), sm.getStandbyStatus(), DISABLE_DEPENDENCY);
+                // set transition state
+                sm.setAdminState(stateElement.getEndingAdminState());
+                sm.setOpState(stateElement.getEndingOpState());
+                sm.setAvailStatus(stateElement.getEndingAvailStatus());
+                sm.setStandbyStatus(stateElement.getEndingStandbyStatus());
+
+                em.persist(sm);
+                et.commit();
+                setChanged();
+                notifyObservers(OPERATION_STATE);
+
+                if (logger.isDebugEnabled()) {
+                    logger.debug("StateManagement: disableDependency() operation completed, resourceName = {}",
+                            this.resourceName);
+                }
+            } catch (final Exception ex) {
+                logger.error("StateManagement.disableDependency() caught unexpected exception: ", ex);
+                throw new StateManagementException("StateManagement.disableDependency() Exception: " + ex);
+            }
+        }
+    }
+
+    /**
+     * enableNoDependency() removes the availability status of "dependency " and will change the
+     * operational state to enabled if not otherwise failed.
+     * 
+     * @throws StateManagementException if an error occurs
+     */
+    public void enableNoDependency() throws StateManagementException {
+        synchronized (SYNCLOCK) {
+            if (logger.isDebugEnabled()) {
+                logger.debug("\nStateManagement: SYNCLOCK enableNoDependency() operation for resourceName = {}\n",
+                        this.resourceName);
+                logger.debug("StateManagement: enableNoDependency() operation started, resourceName = {}",
+                        this.resourceName);
+            }
+            final EntityManager em = emf.createEntityManager();
+
+            try (EntityMgrCloser emc = new EntityMgrCloser(em); MyTransaction et = new MyTransaction(em)) {
+
+                if (logger.isDebugEnabled()) {
+                    logger.debug("findStateManagementEntity for {}", this.resourceName);
+                }
+                final StateManagementEntity sm = findStateManagementEntity(em, this.resourceName);
+                final StateElement stateElement = st.getEndingState(sm.getAdminState(), sm.getOpState(),
+                        sm.getAvailStatus(), sm.getStandbyStatus(), ENABLE_NO_DEPENDENCY);
+                // set transition state
+                sm.setAdminState(stateElement.getEndingAdminState());
+                sm.setOpState(stateElement.getEndingOpState());
+                sm.setAvailStatus(stateElement.getEndingAvailStatus());
+                sm.setStandbyStatus(stateElement.getEndingStandbyStatus());
+
+                em.persist(sm);
+                et.commit();
+                setChanged();
+                notifyObservers(OPERATION_STATE);
+
+                if (logger.isDebugEnabled()) {
+                    logger.debug("StateManagement: enableNoDependency() operation completed, resourceName = {}",
+                            this.resourceName);
+                }
+            } catch (final Exception ex) {
+                logger.error("StateManagement.enableNoDependency() caught unexpected exception: ", ex);
+                throw new StateManagementException("StateManagement.enableNoDependency() Exception: " + ex);
+            }
+        }
+    }
+
+    /**
+     * promote() changes the standby status to providingservice if not otherwise failed.
+     * 
+     * @throws StandbyStatusException if the status fails to change
+     * @throws StateManagementException if an error occurs when promoting the status
+     */
+    public void promote() throws StandbyStatusException, StateManagementException {
+        synchronized (SYNCLOCK) {
+            if (logger.isDebugEnabled()) {
+                logger.debug("\nStateManagement: SYNCLOCK promote() operation for resourceName = {}\n",
+                        this.resourceName);
+                logger.debug("StateManagement: promote() operation started, resourceName = {}", this.resourceName);
+            }
+
+            StateManagementEntity sm;
+
+            final EntityManager em = emf.createEntityManager();
+
+            try (EntityMgrCloser emc = new EntityMgrCloser(em); MyTransaction et = new MyTransaction(em)) {
+
+                if (logger.isDebugEnabled()) {
+                    logger.debug("findStateManagementEntity for {}", this.resourceName);
+                }
+                sm = findStateManagementEntity(em, this.resourceName);
+                final StateElement stateElement = st.getEndingState(sm.getAdminState(), sm.getOpState(),
+                        sm.getAvailStatus(), sm.getStandbyStatus(), PROMOTE);
+                // set transition state
+                sm.setAdminState(stateElement.getEndingAdminState());
+                sm.setOpState(stateElement.getEndingOpState());
+                sm.setAvailStatus(stateElement.getEndingAvailStatus());
+                sm.setStandbyStatus(stateElement.getEndingStandbyStatus());
+
+                em.persist(sm);
+                et.commit();
+                setChanged();
+                notifyObservers(STANDBY_STATUS);
+            } catch (final Exception ex) {
+                logger.error("StateManagement.promote() caught unexpected exception: ", ex);
+                throw new StateManagementException("StateManagement.promote() Exception: " + ex);
+            }
+
+            if (logger.isDebugEnabled()) {
+                logger.debug("StateManagement: promote() operation completed, resourceName = ", this.resourceName);
+            }
+            if (sm.getStandbyStatus().equals(StateManagement.COLD_STANDBY)) {
+                final String msg =
+                        "Failure to promote " + this.resourceName + " StandbyStatus = " + StateManagement.COLD_STANDBY;
+                throw new StandbyStatusException(msg);
+            }
+        }
+    }
+
+    /**
+     * demote() changes standbystatus to hotstandby or, if failed, coldstandby.
+     * 
+     * @throws StateManagementException if an error occurs
+     */
+    public void demote() throws StateManagementException {
+        synchronized (SYNCLOCK) {
+            if (logger.isDebugEnabled()) {
+                logger.debug("\nStateManagement: SYNCLOCK demote() operation for resourceName = \n", this.resourceName);
+                logger.debug("StateManagement: demote() operation started, resourceName = {}", this.resourceName);
+            }
+            final EntityManager em = emf.createEntityManager();
+
+            try (EntityMgrCloser emc = new EntityMgrCloser(em); MyTransaction et = new MyTransaction(em)) {
+
+                if (logger.isDebugEnabled()) {
+                    logger.debug("findStateManagementEntity for {}", this.resourceName);
+                }
+                final StateManagementEntity sm = findStateManagementEntity(em, this.resourceName);
+                final StateElement stateElement = st.getEndingState(sm.getAdminState(), sm.getOpState(),
+                        sm.getAvailStatus(), sm.getStandbyStatus(), DEMOTE);
+                // set transition state
+                sm.setAdminState(stateElement.getEndingAdminState());
+                sm.setOpState(stateElement.getEndingOpState());
+                sm.setAvailStatus(stateElement.getEndingAvailStatus());
+                sm.setStandbyStatus(stateElement.getEndingStandbyStatus());
+
+                em.persist(sm);
+                et.commit();
+                setChanged();
+                notifyObservers(STANDBY_STATUS);
+
+                if (logger.isDebugEnabled()) {
+                    logger.debug("StateManagement: demote() operation completed, resourceName = {}", this.resourceName);
+                }
+            } catch (final Exception ex) {
+                logger.error("StateManagement.demote() caught unexpected exception: ", ex);
+                throw new StateManagementException("StateManagement.demote() Exception: " + ex);
+            }
+        }
+    }
+
+    /**
+     * Only used for a remote resource. It will not notify observers. It is used only in cases where
+     * the remote resource has failed is such a way that it cannot update its own states. In
+     * particular this is observed by PDP-D DroolsPdpsElectionHandler when it is trying to determine
+     * which PDP-D should be designated as the lead.
+     * 
+     * @param otherResourceName the resouce name
+     * @throws StateManagementException if an error occurs
+     */
+    public void demote(final String otherResourceName) throws StateManagementException {
+        synchronized (SYNCLOCK) {
+            if (otherResourceName == null) {
+                logger.error(
+                        "\nStateManagement: SYNCLOCK demote(otherResourceName) operation: resourceName is NULL.\n");
+                return;
+            }
+            if (logger.isDebugEnabled()) {
+                logger.debug("\nStateManagement: SYNCLOCK demote(otherResourceName) operation for resourceName = {}\n",
+                        otherResourceName);
+            }
+            final EntityManager em = emf.createEntityManager();
+
+            try (EntityMgrCloser emc = new EntityMgrCloser(em); MyTransaction et = new MyTransaction(em)) {
+
+                if (logger.isDebugEnabled()) {
+                    logger.debug("StateManagement: SYNCLOCK demote(otherResourceName) findStateManagementEntity for {}",
+                            otherResourceName);
+                }
+                final StateManagementEntity sm = findStateManagementEntity(em, otherResourceName);
+                final StateElement stateElement = st.getEndingState(sm.getAdminState(), sm.getOpState(),
+                        sm.getAvailStatus(), sm.getStandbyStatus(), DEMOTE);
+                // set transition state
+                sm.setAdminState(stateElement.getEndingAdminState());
+                sm.setOpState(stateElement.getEndingOpState());
+                sm.setAvailStatus(stateElement.getEndingAvailStatus());
+                sm.setStandbyStatus(stateElement.getEndingStandbyStatus());
+
+                em.persist(sm);
+                et.commit();
+                // We don't notify observers because this is assumed to be a remote resource
+
+                if (logger.isDebugEnabled()) {
+                    logger.debug("StateManagement: demote(otherResourceName) operation completed, resourceName = {}",
+                            otherResourceName);
+                }
+            } catch (final Exception ex) {
+                logger.error("StateManagement.demote(otherResourceName) caught unexpected exception: ", ex);
+                throw new StateManagementException("StateManagement.demote(otherResourceName) Exception: " + ex);
+            }
+        }
+    }
+
+    /**
+     * Get the administration state.
+     * 
+     * @return the administration state
+     */
+    public String getAdminState() {
+        if (logger.isDebugEnabled()) {
+            logger.debug("StateManagement(6/1/16): getAdminState for resourceName {}", this.resourceName);
+        }
+
+        final EntityManager em = emf.createEntityManager();
+        try (final EntityMgrCloser emc = new EntityMgrCloser(em)) {
+            final TypedQuery<StateManagementEntity> query =
+                    em.createQuery(GET_STATE_MANAGEMENT_ENTITY_QUERY, StateManagementEntity.class);
+
+            query.setParameter(RESOURCE_NAME, this.resourceName);
+
+            // Just test that we are retrieving the right object
+            final List<StateManagementEntity> resourceList =
+                    query.setLockMode(LockModeType.NONE).setFlushMode(FlushModeType.COMMIT).getResultList();
+            if (!resourceList.isEmpty()) {
+                // exist
+                final StateManagementEntity stateManagementEntity = resourceList.get(0);
+                // refresh the object from DB in case cached data was returned
+                em.refresh(stateManagementEntity);
+                this.adminState = stateManagementEntity.getAdminState();
+            } else {
+                this.adminState = null;
+            }
+        } catch (final Exception ex) {
+            logger.error("StateManagement: getAdminState exception: {}", ex.toString(), ex);
+        }
+
+        return this.adminState;
+    }
+
+    /**
+     * Get the operational state.
+     * 
+     * @return the operational state
+     */
+    public String getOpState() {
+        if (logger.isDebugEnabled()) {
+            logger.debug("StateManagement(6/1/16): getOpState for resourceName {}", this.resourceName);
+        }
+
+        final EntityManager em = emf.createEntityManager();
+        try (EntityMgrCloser emc = new EntityMgrCloser(em)) {
+            final TypedQuery<StateManagementEntity> query =
+                    em.createQuery(GET_STATE_MANAGEMENT_ENTITY_QUERY, StateManagementEntity.class);
+
+            query.setParameter(RESOURCE_NAME, this.resourceName);
+
+            // Just test that we are retrieving the right object
+            final List<StateManagementEntity> resourceList =
+                    query.setLockMode(LockModeType.NONE).setFlushMode(FlushModeType.COMMIT).getResultList();
+            if (!resourceList.isEmpty()) {
+                // exist
+                final StateManagementEntity stateManagementEntity = resourceList.get(0);
+                // refresh the object from DB in case cached data was returned
+                em.refresh(stateManagementEntity);
+                this.opState = stateManagementEntity.getOpState();
+            } else {
+                this.opState = null;
+            }
+        } catch (final Exception ex) {
+            logger.error("StateManagement: getOpState exception: {}", ex.toString(), ex);
+        }
+
+        return this.opState;
+    }
+
+    /**
+     * Get the availability status.
+     * 
+     * @return the availability status
+     */
+    public String getAvailStatus() {
+        if (logger.isDebugEnabled()) {
+            logger.debug("StateManagement(6/1/16): getAvailStatus for resourceName {}", this.resourceName);
+        }
+
+        final EntityManager em = emf.createEntityManager();
+        try (EntityMgrCloser emc = new EntityMgrCloser(em)) {
+            final TypedQuery<StateManagementEntity> query =
+                    em.createQuery(GET_STATE_MANAGEMENT_ENTITY_QUERY, StateManagementEntity.class);
+
+            query.setParameter(RESOURCE_NAME, this.resourceName);
+
+            // Just test that we are retrieving the right object
+            final List<StateManagementEntity> resourceList =
+                    query.setLockMode(LockModeType.NONE).setFlushMode(FlushModeType.COMMIT).getResultList();
+            if (!resourceList.isEmpty()) {
+                // exist
+                final StateManagementEntity stateManagementEntity = resourceList.get(0);
+                // refresh the object from DB in case cached data was returned
+                em.refresh(stateManagementEntity);
+                this.availStatus = stateManagementEntity.getAvailStatus();
+            } else {
+                this.availStatus = null;
+            }
+        } catch (final Exception ex) {
+            logger.error("StateManagement: getAvailStatus exception: {}", ex.toString(), ex);
+        }
+
+        return this.availStatus;
+    }
+
+    /**
+     * Get the standy status.
+     * 
+     * @return the standby status
+     */
+    public String getStandbyStatus() {
+        if (logger.isDebugEnabled()) {
+            logger.debug("StateManagement(6/1/16): getStandbyStatus for resourceName {}", this.resourceName);
+        }
+
+        final EntityManager em = emf.createEntityManager();
+        try (EntityMgrCloser emc = new EntityMgrCloser(em)) {
+            final TypedQuery<StateManagementEntity> query =
+                    em.createQuery(GET_STATE_MANAGEMENT_ENTITY_QUERY, StateManagementEntity.class);
+
+            query.setParameter(RESOURCE_NAME, this.resourceName);
+
+            // Just test that we are retrieving the right object
+            final List<StateManagementEntity> resourceList =
+                    query.setLockMode(LockModeType.NONE).setFlushMode(FlushModeType.COMMIT).getResultList();
+            if (!resourceList.isEmpty()) {
+                // exist
+                final StateManagementEntity stateManagementEntity = resourceList.get(0);
+                // refresh the object from DB in case cached data was returned
+                em.refresh(stateManagementEntity);
+                this.standbyStatus = stateManagementEntity.getStandbyStatus();
+            } else {
+                this.standbyStatus = null;
+            }
+        } catch (final Exception ex) {
+            logger.error("StateManagement: getStandbyStatus exception: {}", ex.toString(), ex);
+        }
+
+        return this.standbyStatus;
+    }
+
+    /**
+     * Get the standbystatus of a particular resource.
+     * 
+     * @param otherResourceName the resource
+     * @return the standby status
+     */
+    public String getStandbyStatus(final String otherResourceName) {
+
+        if (logger.isDebugEnabled()) {
+            logger.debug("StateManagement: getStandbyStatus: Entering, resourceName='{}'", otherResourceName);
+        }
+
+        String tempStandbyStatus = null;
+
+        // The transaction is required for the LockModeType
+        final EntityManager em = emf.createEntityManager();
+
+        try (EntityMgrCloser emc = new EntityMgrCloser(em); MyTransaction et = new MyTransaction(em)) {
+
+            final TypedQuery<StateManagementEntity> stateManagementListQuery =
+                    em.createQuery(GET_STATE_MANAGEMENT_ENTITY_QUERY, StateManagementEntity.class);
+            stateManagementListQuery.setParameter(RESOURCE_NAME, otherResourceName);
+            final List<StateManagementEntity> stateManagementList = stateManagementListQuery
+                    .setLockMode(LockModeType.NONE).setFlushMode(FlushModeType.COMMIT).getResultList();
+            if (!stateManagementList.isEmpty()) {
+                final StateManagementEntity stateManagementEntity = stateManagementList.get(0);
+                // refresh the object from DB in case cached data was returned
+                em.refresh(stateManagementEntity);
+                tempStandbyStatus = stateManagementEntity.getStandbyStatus();
+                if (logger.isDebugEnabled()) {
+                    logger.debug("getStandbyStatus: resourceName ={} has standbyStatus={}", otherResourceName,
+                            tempStandbyStatus);
+                }
+            } else {
+                logger.error("getStandbyStatus: resourceName ={} not found in statemanagemententity table",
+                        otherResourceName);
+            }
+
             et.commit();
-               
-                 //Load the StateTransition hash table
-               st = new StateTransition();
-
-               if(logger.isDebugEnabled()){
-                       logger.debug("StateManagement: constructor end, resourceName: {}", this.resourceName);
-               }
-             } catch(final Exception ex) {
-                 logger.error("StateManagement: constructor caught unexpected exception: ", ex);
-                 throw new StateManagementException("StateManagement: Exception: " + ex.toString(), ex);
-             } 
-         }
-  }
-  
-  /**
-   * initializeState() is called when it is necessary to set the StateManagement to a known initial state.
-   * It preserves the Administrative State since it must persist across node reboots.
-   * Starting from this state, the IntegrityMonitory will determine the Operational State and the
-   * owning application will set the StandbyStatus.
-   */
-  public void initializeState() throws StateManagementException
-  {
-         synchronized (SYNCLOCK){
-                 if(logger.isDebugEnabled()){
-                     logger.debug("\nStateManagement: SYNCLOCK initializeState() operation for resourceName = {}\n", this.resourceName);
-                         logger.debug("StateManagement: initializeState() operation started, resourceName = {}", this.resourceName);
-                 }
-                 final EntityManager em = emf.createEntityManager();
-
-                 try(EntityMgrCloser emc = new EntityMgrCloser(em);
-                                 MyTransaction et = new MyTransaction(em)) {
-                         
-                         if(logger.isDebugEnabled()){
-                                 logger.debug("findStateManagementEntity for {}", this.resourceName); 
-                         }
-                         final StateManagementEntity sm = findStateManagementEntity(em, this.resourceName); 
-                         // set state
-                         sm.setAdminState(sm.getAdminState()); //preserve the Admin state
-                         sm.setOpState(StateManagement.ENABLED); 
-                         sm.setAvailStatus(StateManagement.NULL_VALUE); 
-                         sm.setStandbyStatus(StateManagement.NULL_VALUE); 
-
-                         em.persist(sm);
-                 et.commit(); 
-                         setChanged();
-                         notifyObservers(ADMIN_STATE);
-
-                         if(logger.isDebugEnabled()){
-                                 logger.debug("StateManagement: initializeState() operation completed, resourceName = {}", this.resourceName);
-                         }
-                 } catch(final Exception ex) {
-                         logger.error("StateManagement.initializeState() caught unexpected exception: ", ex);
-                         throw new StateManagementException("StateManagement.initializeState() Exception: " + ex);
-                 }
-         }
-  } 
-  
-  /**
-   * lock() changes the administrative state to locked.
-   * @throws StateManagementException
-   */
-  public void lock() throws StateManagementException
-  {
-         synchronized (SYNCLOCK){
-                 if(logger.isDebugEnabled()){
-                     logger.debug("\nStateManagement: SYNCLOCK lock() operation for resourceName = {}\n", this.resourceName);
-                         logger.debug("StateManagement: lock() operation started, resourceName = {}", this.resourceName);
-                 }
-                 final EntityManager em = emf.createEntityManager();
-
-                 try(EntityMgrCloser emc = new EntityMgrCloser(em);
-                                 MyTransaction et = new MyTransaction(em)) {
-                         
-                         if(logger.isDebugEnabled()){
-                                 logger.debug("findStateManagementEntity for {}", this.resourceName); 
-                         }
-                         final StateManagementEntity sm = findStateManagementEntity(em, this.resourceName); 
-
-                         final StateElement stateElement = st.getEndingState(sm.getAdminState(), sm.getOpState(), 
-                                         sm.getAvailStatus(), sm.getStandbyStatus(), LOCK); 
-
-                         sm.setAdminState(stateElement.getEndingAdminState()); 
-                         sm.setOpState(stateElement.getEndingOpState()); 
-                         sm.setAvailStatus(stateElement.getEndingAvailStatus()); 
-                         sm.setStandbyStatus(stateElement.getEndingStandbyStatus());
-
-                         em.persist(sm);
-                 et.commit(); 
-                         setChanged();
-                         notifyObservers(ADMIN_STATE);
-
-                         if(logger.isDebugEnabled()){
-                                 logger.debug("StateManagement: lock() operation completed, resourceName = {}", this.resourceName);
-                         }
-                 } catch(final Exception ex) {
-                         logger.error("StateManagement.lock() caught unexpected exception: ", ex);
-                         throw new StateManagementException("StateManagement.lock() Exception: " + ex.toString());
-                 } 
-         }
-  }
-  
-  /**
-   * unlock() changes the administrative state to unlocked.
-   * @throws StateManagementException
-   */
-  public void unlock() throws StateManagementException
-  {
-         synchronized (SYNCLOCK){
-                 if(logger.isDebugEnabled()){
-                     logger.debug("\nStateManagement: SYNCLOCK unlock() operation for resourceName = {}\n", this.resourceName);
-                         logger.debug("StateManagement: unlock() operation started, resourceName = {}", this.resourceName);
-                 }
-                 final EntityManager em = emf.createEntityManager();
-
-                 try(EntityMgrCloser emc = new EntityMgrCloser(em);
-                                 MyTransaction et = new MyTransaction(em)) {
-                         
-                         if(logger.isDebugEnabled()){
-                                 logger.debug("findStateManagementEntity for {}", this.resourceName); 
-                         }
-                         final StateManagementEntity sm = findStateManagementEntity(em, this.resourceName); 
-                         final StateElement stateElement = st.getEndingState(sm.getAdminState(), sm.getOpState(), 
-                                         sm.getAvailStatus(), sm.getStandbyStatus(), UNLOCK); 
-                         // set transition state
-                         sm.setAdminState(stateElement.getEndingAdminState()); 
-                         sm.setOpState(stateElement.getEndingOpState()); 
-                         sm.setAvailStatus(stateElement.getEndingAvailStatus()); 
-                         sm.setStandbyStatus(stateElement.getEndingStandbyStatus()); 
-
-                         em.persist(sm);
-                 et.commit(); 
-                         setChanged();
-                         notifyObservers(ADMIN_STATE);
-
-                         if(logger.isDebugEnabled()){
-                                 logger.debug("StateManagement: unlock() operation completed, resourceName = {}", this.resourceName);
-                         }
-                 } catch(final Exception ex) {
-                         logger.error("StateManagement.unlock() caught unexpected exception: ", ex);
-                         throw new StateManagementException("StateManagement.unlock() Exception: " + ex);
-                 }
-         }
-  } 
-  
-  /**
-   * enableNotFailed() removes the "failed" availability status and changes the operational
-   * state to enabled if no dependency is also failed.
-   * @throws StateManagementException
-   */
-  public void enableNotFailed() throws StateManagementException
-  {
-         synchronized (SYNCLOCK){
-                 if(logger.isDebugEnabled()){
-                     logger.debug("\nStateManagement: SYNCLOCK enabledNotFailed() operation for resourceName = {}\n", this.resourceName);
-                         logger.debug("StateManagement: enableNotFailed() operation started, resourceName = {}", this.resourceName);
-                 }
-                 final EntityManager em = emf.createEntityManager();
-
-                 try(EntityMgrCloser emc = new EntityMgrCloser(em);
-                                 MyTransaction et = new MyTransaction(em)) {
-                         
-                         if(logger.isDebugEnabled()){
-                                 logger.debug("findStateManagementEntity for {}", this.resourceName); 
-                         }
-                         final StateManagementEntity sm = findStateManagementEntity(em, this.resourceName); 
-                         final StateElement stateElement = st.getEndingState(sm.getAdminState(), sm.getOpState(), 
-                                         sm.getAvailStatus(), sm.getStandbyStatus(), ENABLE_NOT_FAILED); 
-                         // set transition state
-                         sm.setAdminState(stateElement.getEndingAdminState()); 
-                         sm.setOpState(stateElement.getEndingOpState()); 
-                         sm.setAvailStatus(stateElement.getEndingAvailStatus()); 
-                         sm.setStandbyStatus(stateElement.getEndingStandbyStatus()); 
-
-                         em.persist(sm);
-                 et.commit(); 
-                 
-                         setChanged();
-                         notifyObservers(OPERATION_STATE);
-
-                         if(logger.isDebugEnabled()){
-                                 logger.debug("StateManagement enableNotFailed() operation completed, resourceName = {}", this.resourceName);
-                         }
-                 } catch(final Exception ex) {
-                         logger.error("StateManagement.enableNotFailed() caught unexpected exception: ", ex);
-                         throw new StateManagementException("StateManagement.enableNotFailed() Exception: " + ex);
-                 }
-         }
-  } 
-  
-  /**
-   * disableFailed() changes the operational state to disabled and adds availability status of "failed"
-   * @throws StateManagementException
-   */
-  public void disableFailed() throws StateManagementException
-  {
-         synchronized (SYNCLOCK){
-                 if(logger.isDebugEnabled()){
-                     logger.debug("\nStateManagement: SYNCLOCK disabledFailed() operation for resourceName = {}\n", this.resourceName);
-                         logger.debug("StateManagement: disableFailed() operation started, resourceName = {}", this.resourceName);
-                 }
-                 final EntityManager em = emf.createEntityManager();
-
-                 try(EntityMgrCloser emc = new EntityMgrCloser(em);
-                                 MyTransaction et = new MyTransaction(em)) {
-                         
-                         if(logger.isDebugEnabled()){
-                                 logger.debug("findStateManagementEntity for {}", this.resourceName); 
-                         }
-                         final StateManagementEntity sm = findStateManagementEntity(em, this.resourceName); 
-                         final StateElement stateElement = st.getEndingState(sm.getAdminState(), sm.getOpState(), 
-                                         sm.getAvailStatus(), sm.getStandbyStatus(), DISABLE_FAILED); 
-                         // set transition state
-                         sm.setAdminState(stateElement.getEndingAdminState()); 
-                         sm.setOpState(stateElement.getEndingOpState()); 
-                         sm.setAvailStatus(stateElement.getEndingAvailStatus()); 
-                         sm.setStandbyStatus(stateElement.getEndingStandbyStatus()); 
-
-                         em.persist(sm);
-                 et.commit(); 
-                         setChanged();
-                         notifyObservers(OPERATION_STATE);
-
-                         if(logger.isDebugEnabled()){
-                                 logger.debug("StateManagement: disableFailed() operation completed, resourceName = {}", this.resourceName);
-                         }
-                 } catch(final Exception ex) {
-                         logger.error("StateManagement.disableFailed() caught unexpected exception: ", ex);
-                         throw new StateManagementException("StateManagement.disableFailed() Exception: " + ex);
-                 }
-         }
-  } 
-  /**
-   * This version of disableFailed is to be used to manipulate the state of a remote resource in the event
-   * that remote resource has failed but its state is still showing that it is viable.
-   * @throws StateManagementException
-   */
-  public void disableFailed(final String otherResourceName) throws StateManagementException
-  {
-         synchronized (SYNCLOCK){
-                 if(otherResourceName == null){
-                         logger.error("\nStateManagement: SYNCLOCK disableFailed(otherResourceName) operation: resourceName is NULL.\n");
-                         return;
-                 }
-                 if(logger.isDebugEnabled()){
-                     logger.debug("\nStateManagement: SYNCLOCK disabledFailed(otherResourceName) operation for resourceName = {}\n", 
-                             otherResourceName);
-                         logger.debug("StateManagement: disableFailed(otherResourceName) operation started, resourceName = {}", 
-                                  otherResourceName);
-                 }
-                 final EntityManager em = emf.createEntityManager();
-
-                 try(EntityMgrCloser emc = new EntityMgrCloser(em);
-                                 MyTransaction et = new MyTransaction(em)) {
-                         
-                         if(logger.isDebugEnabled()){
-                                 logger.debug("findStateManagementEntity for " + otherResourceName); 
-                         }
-                         final StateManagementEntity sm = findStateManagementEntity(em, otherResourceName); 
-                         final StateElement stateElement = st.getEndingState(sm.getAdminState(), sm.getOpState(), 
-                                         sm.getAvailStatus(), sm.getStandbyStatus(), DISABLE_FAILED); 
-                         // set transition state
-                         sm.setAdminState(stateElement.getEndingAdminState()); 
-                         sm.setOpState(stateElement.getEndingOpState()); 
-                         sm.setAvailStatus(stateElement.getEndingAvailStatus()); 
-                         sm.setStandbyStatus(stateElement.getEndingStandbyStatus()); 
-
-                         em.persist(sm);
-                 et.commit(); 
-                         setChanged();
-                         notifyObservers(OPERATION_STATE);
-
-                         if(logger.isDebugEnabled()){
-                                 logger.debug("StateManagement: disableFailed(otherResourceName) operation completed, resourceName = {}", 
-                                         otherResourceName);
-                         }
-                 } catch(final Exception ex) {
-                         logger.error("StateManagement.disableFailed(otherResourceName) caught unexpected exception: ", ex);
-                         throw new StateManagementException("StateManagement.disableFailed(otherResourceName) Exception: " + ex);
-                 }
-         }
-  } 
-
-  /**
-   * disableDependency() changes operational state to disabled and adds availability status of "dependency"
-   * @throws StateManagementException
-   */
-  public void disableDependency() throws StateManagementException
-  {
-         synchronized (SYNCLOCK){
-                 if(logger.isDebugEnabled()){
-                     logger.debug("\nStateManagement: SYNCLOCK disableDependency() operation for resourceName = {}\n", this.resourceName);
-                         logger.debug("StateManagement: disableDependency() operation started, resourceName = {}", this.resourceName);
-                 }
-                 final EntityManager em = emf.createEntityManager();
-
-                 try(EntityMgrCloser emc = new EntityMgrCloser(em);
-                                 MyTransaction et = new MyTransaction(em)) {
-                         
-                         if(logger.isDebugEnabled()){
-                                 logger.debug("findStateManagementEntity for {}", this.resourceName); 
-                         }
-                         final StateManagementEntity sm = findStateManagementEntity(em, this.resourceName); 
-                         final StateElement stateElement = st.getEndingState(sm.getAdminState(), sm.getOpState(), 
-                                         sm.getAvailStatus(), sm.getStandbyStatus(), DISABLE_DEPENDENCY); 
-                         // set transition state
-                         sm.setAdminState(stateElement.getEndingAdminState()); 
-                         sm.setOpState(stateElement.getEndingOpState()); 
-                         sm.setAvailStatus(stateElement.getEndingAvailStatus()); 
-                         sm.setStandbyStatus(stateElement.getEndingStandbyStatus()); 
-
-                         em.persist(sm);
-                 et.commit(); 
-                         setChanged();
-                         notifyObservers(OPERATION_STATE);
-
-                         if(logger.isDebugEnabled()){
-                                 logger.debug("StateManagement: disableDependency() operation completed, resourceName = {}", this.resourceName);
-                         }
-                 } catch(final Exception ex) {
-                         logger.error("StateManagement.disableDependency() caught unexpected exception: ", ex);
-                         throw new StateManagementException("StateManagement.disableDependency() Exception: " + ex);
-                 }
-         }
-  } 
-  
-  /**
-   * enableNoDependency() removes the availability status of "dependency " and will change the 
-   * operational state to enabled if not otherwise failed.
-   * @throws StateManagementException
-   */
-  public void enableNoDependency() throws StateManagementException
-  {
-         synchronized (SYNCLOCK){
-                 if(logger.isDebugEnabled()){
-                     logger.debug("\nStateManagement: SYNCLOCK enableNoDependency() operation for resourceName = {}\n", this.resourceName);
-                         logger.debug("StateManagement: enableNoDependency() operation started, resourceName = {}", this.resourceName);
-                 }
-                 final EntityManager em = emf.createEntityManager();
-
-                 try(EntityMgrCloser emc = new EntityMgrCloser(em);
-                                 MyTransaction et = new MyTransaction(em)) {
-                         
-                         if(logger.isDebugEnabled()){
-                                 logger.debug("findStateManagementEntity for {}", this.resourceName); 
-                         }
-                         final StateManagementEntity sm = findStateManagementEntity(em, this.resourceName); 
-                         final StateElement stateElement = st.getEndingState(sm.getAdminState(), sm.getOpState(), 
-                                         sm.getAvailStatus(), sm.getStandbyStatus(), ENABLE_NO_DEPENDENCY); 
-                         // set transition state
-                         sm.setAdminState(stateElement.getEndingAdminState()); 
-                         sm.setOpState(stateElement.getEndingOpState()); 
-                         sm.setAvailStatus(stateElement.getEndingAvailStatus()); 
-                         sm.setStandbyStatus(stateElement.getEndingStandbyStatus()); 
-
-                         em.persist(sm);
-                 et.commit(); 
-                         setChanged();
-                         notifyObservers(OPERATION_STATE);
-
-                         if(logger.isDebugEnabled()){
-                                 logger.debug("StateManagement: enableNoDependency() operation completed, resourceName = {}", this.resourceName);
-                         }
-                 } catch(final Exception ex) {
-                         logger.error("StateManagement.enableNoDependency() caught unexpected exception: ", ex);
-                         throw new StateManagementException("StateManagement.enableNoDependency() Exception: " + ex);
-                 }
-         }
-  } 
-  
-  /**
-   * promote() changes the standby status to providingservice if not otherwise failed.
-   * @throws StandbyStatusException
-   * @throws StateManagementException
-   */
-  public void promote() throws IntegrityMonitorException
-  {
-         synchronized (SYNCLOCK){
-                 if(logger.isDebugEnabled()){
-                     logger.debug("\nStateManagement: SYNCLOCK promote() operation for resourceName = {}\n", this.resourceName);
-                         logger.debug("StateManagement: promote() operation started, resourceName = {}", this.resourceName);
-                 }
-                 
-                 StateManagementEntity sm;
-                 
-                 final EntityManager em = emf.createEntityManager();
-
-                 try(EntityMgrCloser emc = new EntityMgrCloser(em);
-                                 MyTransaction et = new MyTransaction(em)) {
-                 
-                         if(logger.isDebugEnabled()){
-                                 logger.debug("findStateManagementEntity for {}", this.resourceName); 
-                         }
-                         sm = findStateManagementEntity(em, this.resourceName); 
-                         final StateElement stateElement = st.getEndingState(sm.getAdminState(), sm.getOpState(), 
-                                         sm.getAvailStatus(), sm.getStandbyStatus(), PROMOTE); 
-                         // set transition state
-                         sm.setAdminState(stateElement.getEndingAdminState()); 
-                         sm.setOpState(stateElement.getEndingOpState()); 
-                         sm.setAvailStatus(stateElement.getEndingAvailStatus()); 
-                         sm.setStandbyStatus(stateElement.getEndingStandbyStatus()); 
-
-                         em.persist(sm);
-                         et.commit(); 
-                         setChanged();
-                         notifyObservers(STANDBY_STATUS);
-                 }catch(final Exception ex){
-                         logger.error("StateManagement.promote() caught unexpected exception: ", ex);
-                         throw new StateManagementException("StateManagement.promote() Exception: " + ex);
-                 }
-
-                 if(logger.isDebugEnabled()){
-                         logger.debug("StateManagement: promote() operation completed, resourceName = ", this.resourceName);
-                 }
-                 if (sm.getStandbyStatus().equals(StateManagement.COLD_STANDBY)){
-                         final String msg = "Failure to promote " + this.resourceName + " StandbyStatus = " + StateManagement.COLD_STANDBY;
-                         throw new StandbyStatusException(msg);
-                 }
-         }
-  } 
-
-  /**
-   * demote() changes standbystatus to hotstandby or, if failed, coldstandby
-   * @throws StateManagementException
-   */
-  public void demote() throws StateManagementException
-  {
-         synchronized (SYNCLOCK){
-                 if(logger.isDebugEnabled()){
-                     logger.debug("\nStateManagement: SYNCLOCK demote() operation for resourceName = \n", this.resourceName);
-                         logger.debug("StateManagement: demote() operation started, resourceName = {}", this.resourceName);
-                 }
-                 final EntityManager em = emf.createEntityManager();
-
-                 try(EntityMgrCloser emc = new EntityMgrCloser(em);
-                                 MyTransaction et = new MyTransaction(em)) {
-                         
-                         if(logger.isDebugEnabled()){
-                                 logger.debug("findStateManagementEntity for {}", this.resourceName); 
-                         }
-                         final StateManagementEntity sm = findStateManagementEntity(em, this.resourceName); 
-                         final StateElement stateElement = st.getEndingState(sm.getAdminState(), sm.getOpState(), 
-                                         sm.getAvailStatus(), sm.getStandbyStatus(), DEMOTE); 
-                         // set transition state
-                         sm.setAdminState(stateElement.getEndingAdminState()); 
-                         sm.setOpState(stateElement.getEndingOpState()); 
-                         sm.setAvailStatus(stateElement.getEndingAvailStatus()); 
-                         sm.setStandbyStatus(stateElement.getEndingStandbyStatus()); 
-
-                         em.persist(sm);
-                 et.commit(); 
-                         setChanged();
-                         notifyObservers(STANDBY_STATUS); 
-
-                         if(logger.isDebugEnabled()){
-                                 logger.debug("StateManagement: demote() operation completed, resourceName = {}", this.resourceName);
-                         }
-                 } catch(final Exception ex) {
-                         logger.error("StateManagement.demote() caught unexpected exception: ", ex);
-                         throw new StateManagementException("StateManagement.demote() Exception: " + ex);
-                 }
-         }
-  } 
-
-  /**
-   * 
-   * Only used for a remote resource.  It will not notify observers.  It is used only in cases where
-   * the remote resource has failed is such a way  that it cannot update its own states. In particular
-   * this is observed by PDP-D DroolsPdpsElectionHandler when it is trying to determine which PDP-D should
-   * be designated as the lead.
-   * @param otherResourceName
-   * @throws StateManagementException
-   */
-  public void demote(final String otherResourceName) throws StateManagementException
-  {
-         synchronized (SYNCLOCK){
-                 if(otherResourceName==null){
-                         logger.error("\nStateManagement: SYNCLOCK demote(otherResourceName) operation: resourceName is NULL.\n");
-                         return;
-                 }
-                 if(logger.isDebugEnabled()){
-                         logger.debug("\nStateManagement: SYNCLOCK demote(otherResourceName) operation for resourceName = {}\n", otherResourceName);
-                 }
-                 final EntityManager em = emf.createEntityManager();
-
-                 try(EntityMgrCloser emc = new EntityMgrCloser(em);
-                                 MyTransaction et = new MyTransaction(em)) {
-                         
-                         if(logger.isDebugEnabled()){
-                                 logger.debug("StateManagement: SYNCLOCK demote(otherResourceName) findStateManagementEntity for {}", otherResourceName); 
-                         }
-                         final StateManagementEntity sm = findStateManagementEntity(em, otherResourceName); 
-                         final StateElement stateElement = st.getEndingState(sm.getAdminState(), sm.getOpState(), 
-                                         sm.getAvailStatus(), sm.getStandbyStatus(), DEMOTE); 
-                         // set transition state
-                         sm.setAdminState(stateElement.getEndingAdminState()); 
-                         sm.setOpState(stateElement.getEndingOpState()); 
-                         sm.setAvailStatus(stateElement.getEndingAvailStatus()); 
-                         sm.setStandbyStatus(stateElement.getEndingStandbyStatus()); 
-
-                         em.persist(sm);
-                 et.commit(); 
-                         //We don't notify observers because this is assumed to be a remote resource
-
-                         if(logger.isDebugEnabled()){
-                                 logger.debug("StateManagement: demote(otherResourceName) operation completed, resourceName = {}", otherResourceName);
-                         }
-                 } catch(final Exception ex) {
-                         logger.error("StateManagement.demote(otherResourceName) caught unexpected exception: ", ex);
-                         throw new StateManagementException("StateManagement.demote(otherResourceName) Exception: " + ex);
-                 }
-         }
-  } 
-  /**
- * @return
- */
-public String getAdminState() 
-  {
-         if(logger.isDebugEnabled()){
-                 logger.debug("StateManagement(6/1/16): getAdminState for resourceName {}", this.resourceName);
-         }
-
-         final EntityManager em = emf.createEntityManager();
-         try(final EntityMgrCloser emc = new EntityMgrCloser(em)) {
-          final TypedQuery<StateManagementEntity> query = em.createQuery(GET_STATE_MANAGEMENT_ENTITY_QUERY, StateManagementEntity.class);
-       
-          query.setParameter(RESOURCE_NAME, this.resourceName);
-       
-          //Just test that we are retrieving the right object
-        final
-          List<StateManagementEntity> resourceList = query.setLockMode(
-                                 LockModeType.NONE).setFlushMode(FlushModeType.COMMIT).getResultList();
-          if (!resourceList.isEmpty()) {
-                     // exist 
-                 final StateManagementEntity stateManagementEntity = resourceList.get(0);
-                 // refresh the object from DB in case cached data was returned
-                 em.refresh(stateManagementEntity);
-                 this.adminState = stateManagementEntity.getAdminState(); 
-          } else {
-                 this.adminState = null; 
-          }
-         } catch(final Exception ex) {
-                 logger.error("StateManagement: getAdminState exception: {}", ex.toString(), ex); 
-         }       
-      
-         return this.adminState;
-  }
-  
-  /**
- * @return
- */
-public String getOpState() 
-  {
-         if(logger.isDebugEnabled()){
-                 logger.debug("StateManagement(6/1/16): getOpState for resourceName {}", this.resourceName);
-         }
-
-         final EntityManager em = emf.createEntityManager();
-         try(EntityMgrCloser emc = new EntityMgrCloser(em)) {
-          final TypedQuery<StateManagementEntity> query = em.createQuery(GET_STATE_MANAGEMENT_ENTITY_QUERY, StateManagementEntity.class);
-       
-          query.setParameter(RESOURCE_NAME, this.resourceName);
-       
-          //Just test that we are retrieving the right object
-        final
-          List<StateManagementEntity> resourceList = query.setLockMode(
-                                 LockModeType.NONE).setFlushMode(FlushModeType.COMMIT).getResultList();
-          if (!resourceList.isEmpty()) {
-                     // exist 
-                  final StateManagementEntity stateManagementEntity = resourceList.get(0);
-                  // refresh the object from DB in case cached data was returned
-                  em.refresh(stateManagementEntity);
-                  this.opState = stateManagementEntity.getOpState(); 
-          } else {
-                 this.opState = null; 
-          }
-         } catch(final Exception ex) {
-                 logger.error("StateManagement: getOpState exception: {}", ex.toString(), ex); 
-         }       
-      
-         return this.opState;
-  }
-  
-  /**
- * @return
- */
-  public String getAvailStatus() 
-  {
-         if(logger.isDebugEnabled()){
-                 logger.debug("StateManagement(6/1/16): getAvailStatus for resourceName {}", this.resourceName);
-         }
-
-         final EntityManager em = emf.createEntityManager();
-         try(EntityMgrCloser emc = new EntityMgrCloser(em)) {
-          final TypedQuery<StateManagementEntity> query = em.createQuery(GET_STATE_MANAGEMENT_ENTITY_QUERY, StateManagementEntity.class);
-       
-          query.setParameter(RESOURCE_NAME, this.resourceName);
-       
-          //Just test that we are retrieving the right object
-        final
-          List<StateManagementEntity> resourceList = query.setLockMode(
-                                 LockModeType.NONE).setFlushMode(FlushModeType.COMMIT).getResultList();
-          if (!resourceList.isEmpty()) {
-                     // exist 
-              final StateManagementEntity stateManagementEntity = resourceList.get(0);
-                 // refresh the object from DB in case cached data was returned
-                 em.refresh(stateManagementEntity);
-                 this.availStatus = stateManagementEntity.getAvailStatus(); 
-          } else {
-                 this.availStatus = null; 
-          }
-         } catch(final Exception ex) {
-                 logger.error("StateManagement: getAvailStatus exception: {}", ex.toString(), ex);
-         }       
-      
-         return this.availStatus;
-  }
-  
-  /**
- * @return
- */
-  public String getStandbyStatus() 
-  {
-         if(logger.isDebugEnabled()){
-                 logger.debug("StateManagement(6/1/16): getStandbyStatus for resourceName {}", this.resourceName);
-         }
-
-         final EntityManager em = emf.createEntityManager();
-         try(EntityMgrCloser emc = new EntityMgrCloser(em)) {
-          final TypedQuery<StateManagementEntity> query = em.createQuery(GET_STATE_MANAGEMENT_ENTITY_QUERY, StateManagementEntity.class);
-       
-          query.setParameter(RESOURCE_NAME, this.resourceName);
-       
-          //Just test that we are retrieving the right object
-        final
-          List<StateManagementEntity> resourceList = query.setLockMode(
-                                 LockModeType.NONE).setFlushMode(FlushModeType.COMMIT).getResultList();
-          if (!resourceList.isEmpty()) {
-                     // exist 
-              final StateManagementEntity stateManagementEntity = resourceList.get(0);
-                 // refresh the object from DB in case cached data was returned
-                 em.refresh(stateManagementEntity);
-                 this.standbyStatus = stateManagementEntity.getStandbyStatus(); 
-          } else {
-                 this.standbyStatus = null; 
-          }
-         } catch(final Exception ex) {
-                 logger.error("StateManagement: getStandbyStatus exception: {}", ex.toString(), ex); 
-         }       
-      
-         return this.standbyStatus;
-  }
-  
-  /**
-   * Find a StateManagementEntity
-   * @param em
-   * @param otherResourceName
-   * @return
-   */
-  private static StateManagementEntity findStateManagementEntity(final EntityManager em, final String otherResourceName)
-  {
-         if(logger.isDebugEnabled()){
-                 logger.debug("StateManagementEntity: findStateManagementEntity: Entry");
-         }
-         try {
-          final TypedQuery<StateManagementEntity> query =
-                  em.createQuery(GET_STATE_MANAGEMENT_ENTITY_QUERY, StateManagementEntity.class);
-
-          query.setParameter(RESOURCE_NAME, otherResourceName);
-       
-          //Just test that we are retrieving the right object
-        final
-          List<StateManagementEntity> resourceList = query.setLockMode(
-                                 LockModeType.NONE).setFlushMode(FlushModeType.COMMIT).getResultList();
-          if (!resourceList.isEmpty()) {
-              // exist
-              final StateManagementEntity stateManagementEntity = resourceList.get(0);
-              // refresh the object from DB in case cached data was returned
-              em.refresh(stateManagementEntity);
-              stateManagementEntity.setModifiedDate(new Date());
-              return stateManagementEntity;
-          } else {
-                 // not exist - create one
-              final StateManagementEntity stateManagementEntity = new StateManagementEntity(); 
-                 stateManagementEntity.setResourceName(otherResourceName); 
-                 stateManagementEntity.setAdminState(UNLOCKED); 
-                 stateManagementEntity.setOpState(ENABLED); 
-                 stateManagementEntity.setAvailStatus(NULL_VALUE);     
-                 stateManagementEntity.setStandbyStatus(NULL_VALUE); // default
-                 return stateManagementEntity;
-          }
-         } catch(final Exception ex) {
-             final String message = "findStateManagementEntity exception";
-          logger.error("{}: {}", message, ex.toString(), ex);
-          throw new EntityRetrievalException(message, ex);
-         }       
-  }
-  
-  /**
-   * Get the standbystatus of a particular resource
-   * @param otherResourceName
-   * @return
-   */
-  public String getStandbyStatus(final String otherResourceName) {
-
-               if (logger.isDebugEnabled()) {
-                       logger.debug("StateManagement: getStandbyStatus: Entering, resourceName='{}'", otherResourceName);
-               }
-
-               String tempStandbyStatus = null;
-               
-               // The transaction is required for the LockModeType
-               final EntityManager em = emf.createEntityManager();
-
-               try(EntityMgrCloser emc = new EntityMgrCloser(em);
-                                 MyTransaction et = new MyTransaction(em)) {
-
-                       final TypedQuery<StateManagementEntity> stateManagementListQuery = em
-                                       .createQuery(GET_STATE_MANAGEMENT_ENTITY_QUERY, StateManagementEntity.class);
-                       stateManagementListQuery.setParameter(RESOURCE_NAME, otherResourceName);
-                       final List<StateManagementEntity> stateManagementList = stateManagementListQuery.setLockMode(
-                                         LockModeType.NONE).setFlushMode(FlushModeType.COMMIT).getResultList();
-                       if (!stateManagementList.isEmpty()) {
-                               final StateManagementEntity stateManagementEntity = stateManagementList.get(0);
-                       // refresh the object from DB in case cached data was returned
-                       em.refresh(stateManagementEntity);
-                               tempStandbyStatus = stateManagementEntity.getStandbyStatus();
-                               if (logger.isDebugEnabled()) {
-                                       logger.debug("getStandbyStatus: resourceName ={} has standbyStatus={}", otherResourceName, tempStandbyStatus);
-                               }
-                       } else {
-                               logger.error("getStandbyStatus: resourceName ={} not found in statemanagemententity table", otherResourceName);
-                       }
-
-                   et.commit(); 
-               } catch (final Exception e) {
-                       logger.error("getStandbyStatus: Caught Exception attempting to get statemanagemententity record, message='{}'", e.getMessage(), e);
-               }
-               if (logger.isDebugEnabled()) {
-                       logger.debug("getStandbyStatus: Returning standbyStatus={}", tempStandbyStatus);
-               }
-
-               return tempStandbyStatus;
-  }
-  
-  /**
-   * Clean up all the StateManagementEntities
-   */
-  public void deleteAllStateManagementEntities() {
-
-         if(logger.isDebugEnabled()){
-                 logger.debug("StateManagement: deleteAllStateManagementEntities: Entering");
-         }
-
-         /*
-          * Start transaction
-          */
-         final EntityManager em = emf.createEntityManager();
-
-         try(EntityMgrCloser emc = new EntityMgrCloser(em);
-                                 MyTransaction et = new MyTransaction(em)) {
-                 final TypedQuery<StateManagementEntity> stateManagementEntityListQuery = em
-                                 .createQuery("SELECT p FROM StateManagementEntity p", StateManagementEntity.class);
-        final
-                 List<StateManagementEntity> stateManagementEntityList = stateManagementEntityListQuery.setLockMode(
-                                 LockModeType.NONE).setFlushMode(FlushModeType.COMMIT).getResultList();
-                 if(logger.isDebugEnabled()){
-                         logger.debug("deleteAllStateManagementEntities: Deleting {} StateManagementEntity records", stateManagementEntityList.size());
-                 }
-                 for (final StateManagementEntity stateManagementEntity : stateManagementEntityList) {
-                         if(logger.isDebugEnabled()){
-                                 logger.debug("deleteAllStateManagementEntities: Deleting statemanagemententity with resourceName={} and standbyStatus={}",
-                                          stateManagementEntity.getResourceName(),
-                                          stateManagementEntity.getStandbyStatus());
-                         }
-                         em.remove(stateManagementEntity);
-                 }
-
-                 et.commit(); 
-         }catch(final Exception ex){
-                 logger.error("StateManagement.deleteAllStateManagementEntities() caught Exception: ", ex);
-         }
-         if(logger.isDebugEnabled()){
-                 logger.debug("deleteAllStateManagementEntities: Exiting");
-         }
-  }
-  
-  private static class MyTransaction extends EntityTransCloser {
-
-       /**
-        * @param em
-        */
-       public MyTransaction(final EntityManager em) {
-               super(em.getTransaction());
-       }
-
-       @Override
-       public void commit() {
-               synchronized(FLUSHLOCK){
-                       if(getTransation().isActive()){
-                               super.commit();
-                       }
-               }
-       }
-
-       @Override
-       public void rollback() {
-               synchronized(FLUSHLOCK){
-                       if(getTransation().isActive()){
-                               super.rollback();
-                       }
-               }
-       }
-         
-  }
+        } catch (final Exception e) {
+            logger.error(
+                    "getStandbyStatus: Caught Exception attempting to get statemanagemententity record, message='{}'",
+                    e.getMessage(), e);
+        }
+        if (logger.isDebugEnabled()) {
+            logger.debug("getStandbyStatus: Returning standbyStatus={}", tempStandbyStatus);
+        }
+
+        return tempStandbyStatus;
+    }
+
+    /**
+     * Find a StateManagementEntity.
+     * 
+     * @param em the entity manager
+     * @param otherResourceName the resource name
+     * @return the StateManagementEntity
+     */
+    private static StateManagementEntity findStateManagementEntity(final EntityManager em,
+            final String otherResourceName) {
+        if (logger.isDebugEnabled()) {
+            logger.debug("StateManagementEntity: findStateManagementEntity: Entry");
+        }
+        try {
+            final TypedQuery<StateManagementEntity> query =
+                    em.createQuery(GET_STATE_MANAGEMENT_ENTITY_QUERY, StateManagementEntity.class);
+
+            query.setParameter(RESOURCE_NAME, otherResourceName);
+
+            // Just test that we are retrieving the right object
+            final List<StateManagementEntity> resourceList =
+                    query.setLockMode(LockModeType.NONE).setFlushMode(FlushModeType.COMMIT).getResultList();
+            if (!resourceList.isEmpty()) {
+                // exist
+                final StateManagementEntity stateManagementEntity = resourceList.get(0);
+                // refresh the object from DB in case cached data was returned
+                em.refresh(stateManagementEntity);
+                stateManagementEntity.setModifiedDate(new Date());
+                return stateManagementEntity;
+            } else {
+                // not exist - create one
+                final StateManagementEntity stateManagementEntity = new StateManagementEntity();
+                stateManagementEntity.setResourceName(otherResourceName);
+                stateManagementEntity.setAdminState(UNLOCKED);
+                stateManagementEntity.setOpState(ENABLED);
+                stateManagementEntity.setAvailStatus(NULL_VALUE);
+                stateManagementEntity.setStandbyStatus(NULL_VALUE); // default
+                return stateManagementEntity;
+            }
+        } catch (final Exception ex) {
+            final String message = "findStateManagementEntity exception";
+            logger.error("{}: {}", message, ex.toString(), ex);
+            throw new EntityRetrievalException(message, ex);
+        }
+    }
+
+    /**
+     * Clean up all the StateManagementEntities.
+     */
+    public void deleteAllStateManagementEntities() {
+
+        if (logger.isDebugEnabled()) {
+            logger.debug("StateManagement: deleteAllStateManagementEntities: Entering");
+        }
+
+        /*
+         * Start transaction
+         */
+        final EntityManager em = emf.createEntityManager();
+
+        try (EntityMgrCloser emc = new EntityMgrCloser(em); MyTransaction et = new MyTransaction(em)) {
+            final TypedQuery<StateManagementEntity> stateManagementEntityListQuery =
+                    em.createQuery("SELECT p FROM StateManagementEntity p", StateManagementEntity.class);
+            final List<StateManagementEntity> stateManagementEntityList = stateManagementEntityListQuery
+                    .setLockMode(LockModeType.NONE).setFlushMode(FlushModeType.COMMIT).getResultList();
+            if (logger.isDebugEnabled()) {
+                logger.debug("deleteAllStateManagementEntities: Deleting {} StateManagementEntity records",
+                        stateManagementEntityList.size());
+            }
+            for (final StateManagementEntity stateManagementEntity : stateManagementEntityList) {
+                if (logger.isDebugEnabled()) {
+                    logger.debug(
+                            "deleteAllStateManagementEntities: Deleting statemanagemententity with resourceName={} and"
+                                    + " standbyStatus={}",
+                            stateManagementEntity.getResourceName(), stateManagementEntity.getStandbyStatus());
+                }
+                em.remove(stateManagementEntity);
+            }
+
+            et.commit();
+        } catch (final Exception ex) {
+            logger.error("StateManagement.deleteAllStateManagementEntities() caught Exception: ", ex);
+        }
+        if (logger.isDebugEnabled()) {
+            logger.debug("deleteAllStateManagementEntities: Exiting");
+        }
+    }
+
+    private static class MyTransaction extends EntityTransCloser {
+
+        /**
+         * Create an instance.
+         * 
+         * @param em the entity manager
+         */
+        public MyTransaction(final EntityManager em) {
+            super(em.getTransaction());
+        }
+
+        @Override
+        public void commit() {
+            synchronized (FLUSHLOCK) {
+                if (getTransation().isActive()) {
+                    super.commit();
+                }
+            }
+        }
+
+        @Override
+        public void rollback() {
+            synchronized (FLUSHLOCK) {
+                if (getTransation().isActive()) {
+                    super.rollback();
+                }
+            }
+        }
+
+    }
 
 }
index 99c092d..6ff869f 100644 (file)
 
 package org.onap.policy.common.im;
 
-import java.util.*;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
 
-
-import org.onap.policy.common.im.StateElement; 
-import org.onap.policy.common.im.StateManagement;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -32,712 +32,914 @@ import org.slf4j.LoggerFactory;
  * The StateTransition class coordinates all state transitions.
  */
 public class StateTransition {
-  private static final Logger logger = LoggerFactory.getLogger(StateTransition.class);
-  
-  public static final String ADMIN_STATE     = "adminState"; 
-  public static final String OPERATION_STATE = "opState"; 
-  public static final String AVAILABLE_STATUS= "availStatus"; 
-  public static final String STANDBY_STATUS  = "standbyStatus"; 
-  public static final String ACTOIN_NAME     = "actionName";
-   
-  private HashMap<String, String> StateTable = new HashMap<>(); 
-    
-  /**
-   * StateTransition constructor
-   * @throws StateTransitionException
-   */
-  public StateTransition() throws StateTransitionException
-  {
-         if(logger.isDebugEnabled()){
-                 logger.debug("StateTransition constructor");
-         }
+    private static final Logger logger = LoggerFactory.getLogger(StateTransition.class);
+
+    public static final String ADMIN_STATE = "adminState";
+    public static final String OPERATION_STATE = "opState";
+    public static final String AVAILABLE_STATUS = "availStatus";
+    public static final String STANDBY_STATUS = "standbyStatus";
+    public static final String ACTOIN_NAME = "actionName";
+
+    private HashMap<String, String> stateTable = new HashMap<>();
+
+    /**
+     * StateTransition constructor.
+     * 
+     * @throws StateTransitionException if an error occurs
+     */
+    public StateTransition() throws StateTransitionException {
+        if (logger.isDebugEnabled()) {
+            logger.debug("StateTransition constructor");
+        }
+
+        try {
+            if (logger.isDebugEnabled()) {
+                logger.debug("Load StateTable started");
+            }
+
+            setupStateTable();
+        } catch (Exception ex) {
+            logger.error("StateTransition threw exception.", ex);
+            throw new StateTransitionException("StateTransition Exception: " + ex.toString());
+        }
+    }
+
+    /**
+     * Calculates the state transition and returns the end state.
+     * 
+     * @param adminState the administration state
+     * @param opState the operational state
+     * @param availStatus the availability status
+     * @param standbyStatus the standby status
+     * @param actionName the action name
+     * @return the StateEement
+     * @throws StateTransitionException if an error occurs
+     */
+    public StateElement getEndingState(String adminState, String opState, String availStatus, String standbyStatus,
+            String actionName) throws StateTransitionException {
+        if (logger.isDebugEnabled()) {
+            logger.debug("getEndingState");
+        }
+        if (logger.isDebugEnabled()) {
+            logger.debug("adminState=[{}], opState=[{}], availStatus=[{}], standbyStatus=[{}], actionName[{}]",
+                    adminState, opState, availStatus, standbyStatus, actionName);
+        }
+        if (availStatus == null) {
+            availStatus = "null";
+        }
+        if (standbyStatus == null) {
+            standbyStatus = "null";
+        }
+        if (adminState == null || opState == null || actionName == null) {
+            throw new StateTransitionException("Exception:StateTransition unable to process state: adminState=["
+                    + adminState + "], opState=[" + opState + "], availStatus=[" + availStatus + "], standbyStatus=["
+                    + standbyStatus + "], actionName=[" + actionName + "]");
+        } else if (!(adminState.equals(StateManagement.LOCKED) || adminState.equals(StateManagement.UNLOCKED))) {
+            throw new StateTransitionException("Exception:StateTransition unable to process state: adminState=["
+                    + adminState + "], opState=[" + opState + "], availStatus=[" + availStatus + "], standbyStatus=["
+                    + standbyStatus + "], actionName=[" + actionName + "]");
+        } else if (!(opState.equals(StateManagement.ENABLED) || opState.equals(StateManagement.DISABLED))) {
+            throw new StateTransitionException("Exception:StateTransition unable to process state: adminState=["
+                    + adminState + "], opState=[" + opState + "], availStatus=[" + availStatus + "], standbyStatus=["
+                    + standbyStatus + "], actionName=[" + actionName + "]");
+        } else if (!(standbyStatus.equals(StateManagement.NULL_VALUE)
+                || standbyStatus.equals(StateManagement.COLD_STANDBY)
+                || standbyStatus.equals(StateManagement.HOT_STANDBY)
+                || standbyStatus.equals(StateManagement.PROVIDING_SERVICE))) {
+            throw new StateTransitionException("Exception:StateTransition unable to process state: adminState=["
+                    + adminState + "], opState=[" + opState + "], availStatus=[" + availStatus + "], standbyStatus=["
+                    + standbyStatus + "], actionName=[" + actionName + "]");
+        } else if (!(availStatus.equals(StateManagement.NULL_VALUE) || availStatus.equals(StateManagement.DEPENDENCY)
+                || availStatus.equals(StateManagement.DEPENDENCY_FAILED)
+                || availStatus.equals(StateManagement.FAILED))) {
+            throw new StateTransitionException("Exception:StateTransition unable to process state: adminState=["
+                    + adminState + "], opState=[" + opState + "], availStatus=[" + availStatus + "], standbyStatus=["
+                    + standbyStatus + "], actionName=[" + actionName + "]");
+        } else if (!(actionName.equals(StateManagement.DEMOTE) || actionName.equals(StateManagement.DISABLE_DEPENDENCY)
+                || actionName.equals(StateManagement.DISABLE_FAILED)
+                || actionName.equals(StateManagement.ENABLE_NO_DEPENDENCY)
+                || actionName.equals(StateManagement.ENABLE_NOT_FAILED) || actionName.equals(StateManagement.LOCK)
+                || actionName.equals(StateManagement.PROMOTE) || actionName.equals(StateManagement.UNLOCK))) {
+            throw new StateTransitionException("Exception:StateTransition unable to process state: adminState=["
+                    + adminState + "], opState=[" + opState + "], availStatus=[" + availStatus + "], standbyStatus=["
+                    + standbyStatus + "], actionName=[" + actionName + "]");
+        }
+
+        StateElement stateElement = new StateElement();
+        try {
+            // dependency,failed is stored as dependency.failed in StateTable
+            String availStatus2 = availStatus;
+            if (availStatus2 != null) {
+                availStatus2 = availStatus.replace(",", ".");
+            }
+            String key = adminState + "," + opState + "," + availStatus2 + "," + standbyStatus + "," + actionName;
+            if (logger.isDebugEnabled()) {
+                logger.debug("Ending State search key: {}", key);
+            }
+            String value = stateTable.get(key);
+
+            if (value != null) {
+                try {
+                    String[] parts = value.split(",", 5);
+                    stateElement.setEndingAdminState(parts[0].trim());
+                    stateElement.setEndingOpState(parts[1].trim());
+                    stateElement.setEndingAvailStatus(parts[2].trim().replace(".", ","));
+                    stateElement.setEndingStandbyStatus(parts[3].trim());
+                    stateElement.setException(parts[4].trim());
+                    stateElement.setAdminState(adminState);
+                    stateElement.setOpState(opState);
+                    stateElement.setAvailStatus(availStatus);
+                    stateElement.setStandbyStatus(standbyStatus);
+                    stateElement.setActionName(actionName);
+
+                    stateElement.displayStateElement();
+                } catch (Exception ex) {
+                    logger.error("String split exception: {}", ex.toString(), ex);
+                }
+
+            } else {
+                String msg = "Ending state not found, adminState=[" + adminState + "], opState=[" + opState
+                        + "], availStatus=[" + availStatus + "], standbyStatus=[" + standbyStatus + "], actionName=["
+                        + actionName + "]";
+                logger.error("{}", msg);
+                throw new StateTransitionException(msg);
+            }
+        } catch (Exception ex) {
+            logger.error("StateTransition threw exception.", ex);
+            throw new StateTransitionException("Exception: " + ex.toString() + ", adminState=[" + adminState
+                    + "], opState=[" + opState + "], availStatus=[" + availStatus + "], standbyStatus=[" + standbyStatus
+                    + "], actionName=[" + actionName + "]");
+        }
+
+        return stateElement;
+    }
+
+    /**
+     * Adding State Transition info into HashMap. It includes all state/status and action
+     * combinations key : adminState,opState,availStatus,standbyStatus,actionName value:
+     * endingAdminState,endingOpState,endingAvailStatus,endingStandbyStatus,exception Note : Use
+     * period instead of comma as seperator when store multi-value endingStandbyStatus (convert to
+     * comma during retrieval)
+     * 
+     * <p>Note on illegal state/status combinations: This table has many state/status combinations
+     * that should never occur. However, they *may* occur due to corruption or manual manipulation
+     * of the DB. So, in each case of an illegal combination, the state/status is first corrected
+     * before applying the action. It is assumed that the administrative and operational states are
+     * always correct. Second, if the availability status is in "agreement" with the operational
+     * state, it is assumed correct. If it is null and the operational state is disabled, the
+     * availability status is left null until a disabledfailed or disableddependency action is
+     * received. Or, if a enableNotFailed or enableNoDependency is received while the availability
+     * status is null, it will remain null, but the Operational state will change to enabled.
+     * 
+     * <p>If the standby status is not in agreement with the administrative and/or operational
+     * states, it is brought into agreement. For example, if the administrative state is locked and
+     * the standby status is providingservice, the standby status is changed to coldstandby.
+     * 
+     * <p>After bringing the states/status attributes into agreement, *then* the action is applied
+     * to them. For example, if the administrative state is locked, the operational state is
+     * enabled, the availability status is null, the standby status is providingservice and the
+     * action is unlock, the standby status is changed to coldstandby and then the unlock action is
+     * applied. This will change the final state/status to administrative state = unlocked,
+     * operational state = disabled, availability status = null and standby status = hotstandby.
+     * 
+     * <p>Note on standby status: If the starting state of standby status is null and either a
+     * promote or demote action is made, the assumption is that standbystatus is supported and
+     * therefore, the standby status will be changed to providingservice, hotstandby or coldstandby
+     * - depending on the value of the administrative and operational states. If an attempt to
+     * promote is made when the administrative state is locked or operational state is disabled, a
+     * StandbyStatusException will be thrown since promotion (state transition) is not possible. If
+     * the standby status is coldstandby and a transition occurs on the administrative or
+     * operational state such that they are unlocked and enabled, the standby status is
+     * automatically transitioned to hotstandby since it is only those two states that can hold the
+     * statndby status in the coldstandby value.
+     */
 
-      try {
-         if(logger.isDebugEnabled()){
-                 logger.debug("Load StateTable started"); 
-         }
-                 setupStateTable();
-      } catch(Exception ex) {
-         logger.error("StateTransition threw exception.", ex);
-         throw new StateTransitionException("StateTransition Exception: " + ex.toString());
-      } 
-  }
-  
-  /**
-   * Calculates the state transition and returns the end state
-   * @param adminState
-   * @param opState
-   * @param availStatus
-   * @param standbyStatus
-   * @param actionName
-   * @return
-   * @throws StateTransitionException
-   */
-  public StateElement getEndingState(String adminState, String opState, String availStatus, 
-                 String standbyStatus, String actionName) throws StateTransitionException
-  {
-         if(logger.isDebugEnabled()){
-                 logger.debug("getEndingState");
-         }
-         if(logger.isDebugEnabled()){
-                 logger.debug("adminState=[{}], opState=[{}], availStatus=[{}], standbyStatus=[{}], actionName[{}]",
-                        adminState,
-                        opState, 
-                        availStatus,
-                        standbyStatus,
-                        actionName);
-         }      
-        if(availStatus==null){
-                availStatus="null";
-        }
-        if(standbyStatus==null){
-                standbyStatus="null";
-        }
-        if(adminState==null || opState==null || actionName==null){
-                throw new StateTransitionException("Exception:StateTransition unable to process state: adminState=[" + adminState + "], opState=[" + opState + "], availStatus=[" + 
-                           availStatus + "], standbyStatus=[" + standbyStatus + "], actionName=[" + actionName + "]");
-        }else if(!(adminState.equals(StateManagement.LOCKED) || adminState.equals(StateManagement.UNLOCKED))){
-                throw new StateTransitionException("Exception:StateTransition unable to process state: adminState=[" + adminState + "], opState=[" + opState + "], availStatus=[" + 
-                           availStatus + "], standbyStatus=[" + standbyStatus + "], actionName=[" + actionName + "]");
-        }else if(!(opState.equals(StateManagement.ENABLED) || opState.equals(StateManagement.DISABLED))){
-                throw new StateTransitionException("Exception:StateTransition unable to process state: adminState=[" + adminState + "], opState=[" + opState + "], availStatus=[" + 
-                           availStatus + "], standbyStatus=[" + standbyStatus + "], actionName=[" + actionName + "]");
-        }else if(!(standbyStatus.equals(StateManagement.NULL_VALUE) || 
-                        standbyStatus.equals(StateManagement.COLD_STANDBY) ||
-                        standbyStatus.equals(StateManagement.HOT_STANDBY) ||
-                        standbyStatus.equals(StateManagement.PROVIDING_SERVICE))){
-                throw new StateTransitionException("Exception:StateTransition unable to process state: adminState=[" + adminState + "], opState=[" + opState + "], availStatus=[" + 
-                           availStatus + "], standbyStatus=[" + standbyStatus + "], actionName=[" + actionName + "]");
-        }else if(!(availStatus.equals(StateManagement.NULL_VALUE) ||
-                        availStatus.equals(StateManagement.DEPENDENCY) ||
-                        availStatus.equals(StateManagement.DEPENDENCY_FAILED) ||
-                        availStatus.equals(StateManagement.FAILED))){
-                throw new StateTransitionException("Exception:StateTransition unable to process state: adminState=[" + adminState + "], opState=[" + opState + "], availStatus=[" + 
-                           availStatus + "], standbyStatus=[" + standbyStatus + "], actionName=[" + actionName + "]");
-        }
-        else if(!(actionName.equals(StateManagement.DEMOTE) || 
-                        actionName.equals(StateManagement.DISABLE_DEPENDENCY) ||
-                        actionName.equals(StateManagement.DISABLE_FAILED) ||
-                        actionName.equals(StateManagement.ENABLE_NO_DEPENDENCY) ||
-                        actionName.equals(StateManagement.ENABLE_NOT_FAILED) ||
-                        actionName.equals(StateManagement.LOCK) ||
-                        actionName.equals(StateManagement.PROMOTE) ||
-                        actionName.equals(StateManagement.UNLOCK))){
-                throw new StateTransitionException("Exception:StateTransition unable to process state: adminState=[" + adminState + "], opState=[" + opState + "], availStatus=[" + 
-                           availStatus + "], standbyStatus=[" + standbyStatus + "], actionName=[" + actionName + "]");
-        }
+    private void setupStateTable() {
+        stateTable.put("unlocked,enabled,null,null,lock", "locked,enabled,null,null,");
+        stateTable.put("unlocked,enabled,null,null,unlock", "unlocked,enabled,null,null,");
+        stateTable.put("unlocked,enabled,null,null,disableFailed", "unlocked,disabled,failed,null,");
+        stateTable.put("unlocked,enabled,null,null,enableNotFailed", "unlocked,enabled,null,null,");
+        stateTable.put("unlocked,enabled,null,null,disableDependency", "unlocked,disabled,dependency,null,");
+        stateTable.put("unlocked,enabled,null,null,enableNoDependency", "unlocked,enabled,null,null,");
+        stateTable.put("unlocked,enabled,null,null,promote", "unlocked,enabled,null,providingservice,");
+        stateTable.put("unlocked,enabled,null,null,demote", "unlocked,enabled,null,hotstandby,");
+        stateTable.put("unlocked,enabled,null,coldstandby,lock", "locked,enabled,null,coldstandby,");
+        stateTable.put("unlocked,enabled,null,coldstandby,unlock", "unlocked,enabled,null,hotstandby,");
+        stateTable.put("unlocked,enabled,null,coldstandby,disableFailed", "unlocked,disabled,failed,coldstandby,");
+        stateTable.put("unlocked,enabled,null,coldstandby,enableNotFailed", "unlocked,enabled,null,hotstandby,");
+        stateTable.put("unlocked,enabled,null,coldstandby,disableDependency",
+                "unlocked,disabled,dependency,coldstandby,");
+        stateTable.put("unlocked,enabled,null,coldstandby,enableNoDependency", "unlocked,enabled,null,hotstandby,");
+        stateTable.put("unlocked,enabled,null,coldstandby,promote", "unlocked,enabled,null,providingservice,");
+        stateTable.put("unlocked,enabled,null,coldstandby,demote", "unlocked,enabled,null,hotstandby,");
+        stateTable.put("unlocked,enabled,null,hotstandby,lock", "locked,enabled,null,coldstandby,");
+        stateTable.put("unlocked,enabled,null,hotstandby,unlock", "unlocked,enabled,null,hotstandby,");
+        stateTable.put("unlocked,enabled,null,hotstandby,disableFailed", "unlocked,disabled,failed,coldstandby,");
+        stateTable.put("unlocked,enabled,null,hotstandby,enableNotFailed", "unlocked,enabled,null,hotstandby,");
+        stateTable.put("unlocked,enabled,null,hotstandby,disableDependency",
+                "unlocked,disabled,dependency,coldstandby,");
+        stateTable.put("unlocked,enabled,null,hotstandby,enableNoDependency", "unlocked,enabled,null,hotstandby,");
+        stateTable.put("unlocked,enabled,null,hotstandby,promote", "unlocked,enabled,null,providingservice,");
+        stateTable.put("unlocked,enabled,null,hotstandby,demote", "unlocked,enabled,null,hotstandby,");
+        stateTable.put("unlocked,enabled,null,providingservice,lock", "locked,enabled,null,coldstandby,");
+        stateTable.put("unlocked,enabled,null,providingservice,unlock", "unlocked,enabled,null,providingservice,");
+        stateTable.put("unlocked,enabled,null,providingservice,disableFailed", "unlocked,disabled,failed,coldstandby,");
+        stateTable.put("unlocked,enabled,null,providingservice,enableNotFailed",
+                "unlocked,enabled,null,providingservice,");
+        stateTable.put("unlocked,enabled,null,providingservice,disableDependency",
+                "unlocked,disabled,dependency,coldstandby,");
+        stateTable.put("unlocked,enabled,null,providingservice,enableNoDependency",
+                "unlocked,enabled,null,providingservice,");
+        stateTable.put("unlocked,enabled,null,providingservice,promote", "unlocked,enabled,null,providingservice,");
+        stateTable.put("unlocked,enabled,null,providingservice,demote", "unlocked,enabled,null,hotstandby,");
+        stateTable.put("unlocked,enabled,failed,null,lock", "locked,enabled,null,null,");
+        stateTable.put("unlocked,enabled,failed,null,unlock", "unlocked,enabled,null,null,");
+        stateTable.put("unlocked,enabled,failed,null,disableFailed", "unlocked,disabled,failed,null,");
+        stateTable.put("unlocked,enabled,failed,null,enableNotFailed", "unlocked,enabled,null,null,");
+        stateTable.put("unlocked,enabled,failed,null,disableDependency", "unlocked,disabled,dependency,null,");
+        stateTable.put("unlocked,enabled,failed,null,enableNoDependency", "unlocked,enabled,null,null,");
+        stateTable.put("unlocked,enabled,failed,null,promote", "unlocked,enabled,null,providingservice,");
+        stateTable.put("unlocked,enabled,failed,null,demote", "unlocked,enabled,null,hotstandby,");
+        stateTable.put("unlocked,enabled,failed,coldstandby,lock", "locked,enabled,null,coldstandby,");
+        stateTable.put("unlocked,enabled,failed,coldstandby,unlock", "unlocked,enabled,null,hotstandby,");
+        stateTable.put("unlocked,enabled,failed,coldstandby,disableFailed", "unlocked,disabled,failed,coldstandby,");
+        stateTable.put("unlocked,enabled,failed,coldstandby,enableNotFailed", "unlocked,enabled,null,hotstandby,");
+        stateTable.put("unlocked,enabled,failed,coldstandby,disableDependency",
+                "unlocked,disabled,dependency,coldstandby,");
+        stateTable.put("unlocked,enabled,failed,coldstandby,enableNoDependency", "unlocked,enabled,null,hotstandby,");
+        stateTable.put("unlocked,enabled,failed,coldstandby,promote", "unlocked,enabled,null,providingservice,");
+        stateTable.put("unlocked,enabled,failed,coldstandby,demote", "unlocked,enabled,null,hotstandby,");
+        stateTable.put("unlocked,enabled,failed,hotstandby,lock", "locked,enabled,null,coldstandby,");
+        stateTable.put("unlocked,enabled,failed,hotstandby,unlock", "unlocked,enabled,null,hotstandby,");
+        stateTable.put("unlocked,enabled,failed,hotstandby,disableFailed", "unlocked,disabled,failed,coldstandby,");
+        stateTable.put("unlocked,enabled,failed,hotstandby,enableNotFailed", "unlocked,enabled,null,hotstandby,");
+        stateTable.put("unlocked,enabled,failed,hotstandby,disableDependency",
+                "unlocked,disabled,dependency,coldstandby,");
+        stateTable.put("unlocked,enabled,failed,hotstandby,enableNoDependency", "unlocked,enabled,null,hotstandby,");
+        stateTable.put("unlocked,enabled,failed,hotstandby,promote", "unlocked,enabled,null,providingservice,");
+        stateTable.put("unlocked,enabled,failed,hotstandby,demote", "unlocked,enabled,null,hotstandby,");
+        stateTable.put("unlocked,enabled,failed,providingservice,lock", "locked,enabled,null,coldstandby,");
+        stateTable.put("unlocked,enabled,failed,providingservice,unlock", "unlocked,enabled,null,providingservice,");
+        stateTable.put("unlocked,enabled,failed,providingservice,disableFailed",
+                "unlocked,disabled,failed,coldstandby,");
+        stateTable.put("unlocked,enabled,failed,providingservice,enableNotFailed",
+                "unlocked,enabled,null,providingservice,");
+        stateTable.put("unlocked,enabled,failed,providingservice,disableDependency",
+                "unlocked,disabled,dependency,coldstandby,");
+        stateTable.put("unlocked,enabled,failed,providingservice,enableNoDependency",
+                "unlocked,enabled,null,providingservice,");
+        stateTable.put("unlocked,enabled,failed,providingservice,promote", "unlocked,enabled,null,providingservice,");
+        stateTable.put("unlocked,enabled,failed,providingservice,demote", "unlocked,enabled,null,hotstandby,");
+        stateTable.put("unlocked,enabled,dependency,null,lock", "locked,enabled,null,null,");
+        stateTable.put("unlocked,enabled,dependency,null,unlock", "unlocked,enabled,null,null,");
+        stateTable.put("unlocked,enabled,dependency,null,disableFailed", "unlocked,disabled,failed,null,");
+        stateTable.put("unlocked,enabled,dependency,null,enableNotFailed", "unlocked,enabled,null,null,");
+        stateTable.put("unlocked,enabled,dependency,null,disableDependency", "unlocked,disabled,dependency,null,");
+        stateTable.put("unlocked,enabled,dependency,null,enableNoDependency", "unlocked,enabled,null,null,");
+        stateTable.put("unlocked,enabled,dependency,null,promote", "unlocked,enabled,null,providingservice,");
+        stateTable.put("unlocked,enabled,dependency,null,demote", "unlocked,enabled,null,hotstandby,");
+        stateTable.put("unlocked,enabled,dependency,coldstandby,lock", "locked,enabled,null,coldstandby,");
+        stateTable.put("unlocked,enabled,dependency,coldstandby,unlock", "unlocked,enabled,null,hotstandby,");
+        stateTable.put("unlocked,enabled,dependency,coldstandby,disableFailed",
+                "unlocked,disabled,failed,coldstandby,");
+        stateTable.put("unlocked,enabled,dependency,coldstandby,enableNotFailed", "unlocked,enabled,null,hotstandby,");
+        stateTable.put("unlocked,enabled,dependency,coldstandby,disableDependency",
+                "unlocked,disabled,dependency,coldstandby,");
+        stateTable.put("unlocked,enabled,dependency,coldstandby,enableNoDependency",
+                "unlocked,enabled,null,hotstandby,");
+        stateTable.put("unlocked,enabled,dependency,coldstandby,promote", "unlocked,enabled,null,providingservice,");
+        stateTable.put("unlocked,enabled,dependency,coldstandby,demote", "unlocked,enabled,null,hotstandby,");
+        stateTable.put("unlocked,enabled,dependency,hotstandby,lock", "locked,enabled,null,coldstandby,");
+        stateTable.put("unlocked,enabled,dependency,hotstandby,unlock", "unlocked,enabled,null,hotstandby,");
+        stateTable.put("unlocked,enabled,dependency,hotstandby,disableFailed", "unlocked,disabled,failed,coldstandby,");
+        stateTable.put("unlocked,enabled,dependency,hotstandby,enableNotFailed", "unlocked,enabled,null,hotstandby,");
+        stateTable.put("unlocked,enabled,dependency,hotstandby,disableDependency",
+                "unlocked,disabled,dependency,hotstandby,");
+        stateTable.put("unlocked,enabled,dependency,hotstandby,enableNoDependency",
+                "unlocked,enabled,null,hotstandby,");
+        stateTable.put("unlocked,enabled,dependency,hotstandby,promote", "unlocked,enabled,null,providingservice,");
+        stateTable.put("unlocked,enabled,dependency,hotstandby,demote", "unlocked,enabled,null,hotstandby,");
+        stateTable.put("unlocked,enabled,dependency,providingservice,lock", "locked,enabled,null,coldstandby,");
+        stateTable.put("unlocked,enabled,dependency,providingservice,unlock",
+                "unlocked,enabled,null,providingservice,");
+        stateTable.put("unlocked,enabled,dependency,providingservice,disableFailed",
+                "unlocked,disabled,failed,coldstandby,");
+        stateTable.put("unlocked,enabled,dependency,providingservice,enableNotFailed",
+                "unlocked,enabled,null,providingservice,");
+        stateTable.put("unlocked,enabled,dependency,providingservice,disableDependency",
+                "unlocked,disabled,dependency,coldstandby,");
+        stateTable.put("unlocked,enabled,dependency,providingservice,enableNoDependency",
+                "unlocked,enabled,null,providingservice,");
+        stateTable.put("unlocked,enabled,dependency,providingservice,promote",
+                "unlocked,enabled,null,providingservice,");
+        stateTable.put("unlocked,enabled,dependency,providingservice,demote", "unlocked,enabled,null,hotstandby,");
+        stateTable.put("unlocked,enabled,dependency.failed,null,lock", "locked,enabled,null,null,");
+        stateTable.put("unlocked,enabled,dependency.failed,null,unlock", "unlocked,enabled,null,null,");
+        stateTable.put("unlocked,enabled,dependency.failed,null,disableFailed", "unlocked,disabled,failed,null,");
+        stateTable.put("unlocked,enabled,dependency.failed,null,enableNotFailed", "unlocked,enabled,null,null,");
+        stateTable.put("unlocked,enabled,dependency.failed,null,disableDependency",
+                "unlocked,disabled,dependency,null,");
+        stateTable.put("unlocked,enabled,dependency.failed,null,enableNoDependency", "unlocked,enabled,null,null,");
+        stateTable.put("unlocked,enabled,dependency.failed,null,promote", "unlocked,enabled,null,providingservice,");
+        stateTable.put("unlocked,enabled,dependency.failed,null,demote", "unlocked,enabled,null,hotstandby,");
+        stateTable.put("unlocked,enabled,dependency.failed,coldstandby,lock", "locked,enabled,null,coldstandby,");
+        stateTable.put("unlocked,enabled,dependency.failed,coldstandby,unlock", "unlocked,enabled,null,hotstandby,");
+        stateTable.put("unlocked,enabled,dependency.failed,coldstandby,disableFailed",
+                "unlocked,disabled,failed,coldstandby,");
+        stateTable.put("unlocked,enabled,dependency.failed,coldstandby,enableNotFailed",
+                "unlocked,enabled,null,hotstandby,");
+        stateTable.put("unlocked,enabled,dependency.failed,coldstandby,disableDependency",
+                "unlocked,disabled,dependency,coldstandby,");
+        stateTable.put("unlocked,enabled,dependency.failed,coldstandby,enableNoDependency",
+                "unlocked,enabled,null,hotstandby,");
+        stateTable.put("unlocked,enabled,dependency.failed,coldstandby,promote",
+                "unlocked,enabled,null,providingservice,");
+        stateTable.put("unlocked,enabled,dependency.failed,coldstandby,demote", "unlocked,enabled,null,hotstandby,");
+        stateTable.put("unlocked,enabled,dependency.failed,hotstandby,lock", "locked,enabled,null,coldstandby,");
+        stateTable.put("unlocked,enabled,dependency.failed,hotstandby,unlock", "unlocked,enabled,null,hotstandby,");
+        stateTable.put("unlocked,enabled,dependency.failed,hotstandby,disableFailed",
+                "unlocked,disabled,failed,coldstandby,");
+        stateTable.put("unlocked,enabled,dependency.failed,hotstandby,enableNotFailed",
+                "unlocked,enabled,null,hotstandby,");
+        stateTable.put("unlocked,enabled,dependency.failed,hotstandby,disableDependency",
+                "unlocked,disabled,dependency,coldstandby,");
+        stateTable.put("unlocked,enabled,dependency.failed,hotstandby,enableNoDependency",
+                "unlocked,enabled,null,hotstandby,");
+        stateTable.put("unlocked,enabled,dependency.failed,hotstandby,promote",
+                "unlocked,enabled,null,providingservice,");
+        stateTable.put("unlocked,enabled,dependency.failed,hotstandby,demote", "unlocked,enabled,null,hotstandby,");
+        stateTable.put("unlocked,enabled,dependency.failed,providingservice,lock", "locked,enabled,null,coldstandby,");
+        stateTable.put("unlocked,enabled,dependency.failed,providingservice,unlock",
+                "unlocked,enabled,null,providingservice,");
+        stateTable.put("unlocked,enabled,dependency.failed,providingservice,disableFailed",
+                "unlocked,disabled,failed,coldstandby,");
+        stateTable.put("unlocked,enabled,dependency.failed,providingservice,enableNotFailed",
+                "unlocked,enabled,null,providingservice,");
+        stateTable.put("unlocked,enabled,dependency.failed,providingservice,disableDependency",
+                "unlocked,disabled,dependency,coldstandby,");
+        stateTable.put("unlocked,enabled,dependency.failed,providingservice,enableNoDependency",
+                "unlocked,enabled,null,providingservice,");
+        stateTable.put("unlocked,enabled,dependency.failed,providingservice,promote",
+                "unlocked,enabled,null,providingservice,");
+        stateTable.put("unlocked,enabled,dependency.failed,providingservice,demote",
+                "unlocked,enabled,null,hotstandby,");
+        stateTable.put("unlocked,disabled,null,null,lock", "locked,disabled,null,null,");
+        stateTable.put("unlocked,disabled,null,null,unlock", "unlocked,disabled,null,null,");
+        stateTable.put("unlocked,disabled,null,null,disableFailed", "unlocked,disabled,failed,null,");
+        stateTable.put("unlocked,disabled,null,null,enableNotFailed", "unlocked,enabled,null,null,");
+        stateTable.put("unlocked,disabled,null,null,disableDependency", "unlocked,disabled,dependency,null,");
+        stateTable.put("unlocked,disabled,null,null,enableNoDependency", "unlocked,enabled,null,null,");
+        stateTable.put("unlocked,disabled,null,null,promote",
+                "unlocked,disabled,null,coldstandby,StandbyStatusException");
+        stateTable.put("unlocked,disabled,null,null,demote", "unlocked,disabled,null,coldstandby,");
+        stateTable.put("unlocked,disabled,null,coldstandby,lock", "locked,disabled,null,coldstandby,");
+        stateTable.put("unlocked,disabled,null,coldstandby,unlock", "unlocked,disabled,null,coldstandby,");
+        stateTable.put("unlocked,disabled,null,coldstandby,disableFailed", "unlocked,disabled,failed,coldstandby,");
+        stateTable.put("unlocked,disabled,null,coldstandby,enableNotFailed", "unlocked,enabled,null,hotstandby,");
+        stateTable.put("unlocked,disabled,null,coldstandby,disableDependency",
+                "unlocked,disabled,dependency,coldstandby,");
+        stateTable.put("unlocked,disabled,null,coldstandby,enableNoDependency", "unlocked,enabled,null,hotstandby,");
+        stateTable.put("unlocked,disabled,null,coldstandby,promote",
+                "unlocked,disabled,null,coldstandby,StandbyStatusException");
+        stateTable.put("unlocked,disabled,null,coldstandby,demote", "unlocked,disabled,null,coldstandby,");
+        stateTable.put("unlocked,disabled,null,hotstandby,lock", "locked,disabled,null,coldstandby,");
+        stateTable.put("unlocked,disabled,null,hotstandby,unlock", "unlocked,disabled,null,coldstandby,");
+        stateTable.put("unlocked,disabled,null,hotstandby,disableFailed", "unlocked,disabled,failed,coldstandby,");
+        stateTable.put("unlocked,disabled,null,hotstandby,enableNotFailed", "unlocked,enabled,null,hotstandby,");
+        stateTable.put("unlocked,disabled,null,hotstandby,disableDependency",
+                "unlocked,disabled,dependency,coldstandby,");
+        stateTable.put("unlocked,disabled,null,hotstandby,enableNoDependency", "unlocked,enabled,null,hotstandby,");
+        stateTable.put("unlocked,disabled,null,hotstandby,promote",
+                "unlocked,disabled,null,coldstandby,StandbyStatusException");
+        stateTable.put("unlocked,disabled,null,hotstandby,demote", "unlocked,disabled,null,coldstandby,");
+        stateTable.put("unlocked,disabled,null,providingservice,lock", "locked,disabled,null,coldstandby,");
+        stateTable.put("unlocked,disabled,null,providingservice,unlock", "unlocked,disabled,null,coldstandby,");
+        stateTable.put("unlocked,disabled,null,providingservice,disableFailed",
+                "unlocked,disabled,failed,coldstandby,");
+        stateTable.put("unlocked,disabled,null,providingservice,enableNotFailed", "unlocked,enabled,null,hotstandby,");
+        stateTable.put("unlocked,disabled,null,providingservice,disableDependency",
+                "unlocked,disabled,dependency,coldstandby,");
+        stateTable.put("unlocked,disabled,null,providingservice,enableNoDependency",
+                "unlocked,enabled,null,hotstandby,");
+        stateTable.put("unlocked,disabled,null,providingservice,promote",
+                "unlocked,disabled,null,coldstandby,StandbyStatusException");
+        stateTable.put("unlocked,disabled,null,providingservice,demote", "unlocked,disabled,null,coldstandby,");
+        stateTable.put("unlocked,disabled,failed,null,lock", "locked,disabled,failed,null,");
+        stateTable.put("unlocked,disabled,failed,null,unlock", "unlocked,disabled,failed,null,");
+        stateTable.put("unlocked,disabled,failed,null,disableFailed", "unlocked,disabled,failed,null,");
+        stateTable.put("unlocked,disabled,failed,null,enableNotFailed", "unlocked,enabled,null,null,");
+        stateTable.put("unlocked,disabled,failed,null,disableDependency", "unlocked,disabled,dependency.failed,null,");
+        stateTable.put("unlocked,disabled,failed,null,enableNoDependency", "unlocked,disabled,failed,null,");
+        stateTable.put("unlocked,disabled,failed,null,promote",
+                "unlocked,disabled,failed,coldstandby,StandbyStatusException");
+        stateTable.put("unlocked,disabled,failed,null,demote", "unlocked,disabled,failed,coldstandby,");
+        stateTable.put("unlocked,disabled,failed,coldstandby,lock", "locked,disabled,failed,coldstandby,");
+        stateTable.put("unlocked,disabled,failed,coldstandby,unlock", "unlocked,disabled,failed,coldstandby,");
+        stateTable.put("unlocked,disabled,failed,coldstandby,disableFailed", "unlocked,disabled,failed,coldstandby,");
+        stateTable.put("unlocked,disabled,failed,coldstandby,enableNotFailed", "unlocked,enabled,null,hotstandby,");
+        stateTable.put("unlocked,disabled,failed,coldstandby,disableDependency",
+                "unlocked,disabled,dependency.failed,coldstandby,");
+        stateTable.put("unlocked,disabled,failed,coldstandby,enableNoDependency",
+                "unlocked,disabled,failed,coldstandby,");
+        stateTable.put("unlocked,disabled,failed,coldstandby,promote",
+                "unlocked,disabled,failed,coldstandby,StandbyStatusException");
+        stateTable.put("unlocked,disabled,failed,coldstandby,demote", "unlocked,disabled,failed,coldstandby,");
+        stateTable.put("unlocked,disabled,failed,hotstandby,lock", "locked,disabled,failed,coldstandby,");
+        stateTable.put("unlocked,disabled,failed,hotstandby,unlock", "unlocked,disabled,failed,coldstandby,");
+        stateTable.put("unlocked,disabled,failed,hotstandby,disableFailed", "unlocked,disabled,failed,coldstandby,");
+        stateTable.put("unlocked,disabled,failed,hotstandby,enableNotFailed", "unlocked,enabled,null,hotstandby,");
+        stateTable.put("unlocked,disabled,failed,hotstandby,disableDependency",
+                "unlocked,disabled,dependency.failed,coldstandby,");
+        stateTable.put("unlocked,disabled,failed,hotstandby,enableNoDependency",
+                "unlocked,disabled,failed,coldstandby,");
+        stateTable.put("unlocked,disabled,failed,hotstandby,promote",
+                "unlocked,disabled,failed,coldstandby,StandbyStatusException");
+        stateTable.put("unlocked,disabled,failed,hotstandby,demote", "unlocked,disabled,failed,coldstandby,");
+        stateTable.put("unlocked,disabled,failed,providingservice,lock", "locked,disabled,failed,coldstandby,");
+        stateTable.put("unlocked,disabled,failed,providingservice,unlock", "unlocked,disabled,failed,coldstandby,");
+        stateTable.put("unlocked,disabled,failed,providingservice,disableFailed",
+                "unlocked,disabled,failed,coldstandby,");
+        stateTable.put("unlocked,disabled,failed,providingservice,enableNotFailed",
+                "unlocked,enabled,null,hotstandby,");
+        stateTable.put("unlocked,disabled,failed,providingservice,disableDependency",
+                "unlocked,disabled,dependency.failed,coldstandby,");
+        stateTable.put("unlocked,disabled,failed,providingservice,enableNoDependency",
+                "unlocked,disabled,failed,coldstandby,");
+        stateTable.put("unlocked,disabled,failed,providingservice,promote",
+                "unlocked,disabled,failed,coldstandby,StandbyStatusException");
+        stateTable.put("unlocked,disabled,failed,providingservice,demote", "unlocked,disabled,failed,coldstandby,");
+        stateTable.put("unlocked,disabled,dependency,null,lock", "locked,disabled,dependency,null,");
+        stateTable.put("unlocked,disabled,dependency,null,unlock", "unlocked,disabled,dependency,null,");
+        stateTable.put("unlocked,disabled,dependency,null,disableFailed", "unlocked,disabled,dependency.failed,null,");
+        stateTable.put("unlocked,disabled,dependency,null,enableNotFailed", "unlocked,disabled,dependency,null,");
+        stateTable.put("unlocked,disabled,dependency,null,disableDependency", "unlocked,disabled,dependency,null,");
+        stateTable.put("unlocked,disabled,dependency,null,enableNoDependency", "unlocked,enabled,null,null,");
+        stateTable.put("unlocked,disabled,dependency,null,promote",
+                "unlocked,disabled,dependency,coldstandby,StandbyStatusException");
+        stateTable.put("unlocked,disabled,dependency,null,demote", "unlocked,disabled,dependency,coldstandby,");
+        stateTable.put("unlocked,disabled,dependency,coldstandby,lock", "locked,disabled,dependency,coldstandby,");
+        stateTable.put("unlocked,disabled,dependency,coldstandby,unlock", "unlocked,disabled,dependency,coldstandby,");
+        stateTable.put("unlocked,disabled,dependency,coldstandby,disableFailed",
+                "unlocked,disabled,dependency.failed,coldstandby,");
+        stateTable.put("unlocked,disabled,dependency,coldstandby,enableNotFailed",
+                "unlocked,disabled,dependency,coldstandby,");
+        stateTable.put("unlocked,disabled,dependency,coldstandby,disableDependency",
+                "unlocked,disabled,dependency,coldstandby,");
+        stateTable.put("unlocked,disabled,dependency,coldstandby,enableNoDependency",
+                "unlocked,enabled,null,hotstandby,");
+        stateTable.put("unlocked,disabled,dependency,coldstandby,promote",
+                "unlocked,disabled,dependency,coldstandby,StandbyStatusException");
+        stateTable.put("unlocked,disabled,dependency,coldstandby,demote", "unlocked,disabled,dependency,coldstandby,");
+        stateTable.put("unlocked,disabled,dependency,hotstandby,lock", "locked,disabled,dependency,coldstandby,");
+        stateTable.put("unlocked,disabled,dependency,hotstandby,unlock", "unlocked,disabled,dependency,coldstandby,");
+        stateTable.put("unlocked,disabled,dependency,hotstandby,disableFailed",
+                "unlocked,disabled,dependency.failed,coldstandby,");
+        stateTable.put("unlocked,disabled,dependency,hotstandby,enableNotFailed",
+                "unlocked,disabled,dependency,coldstandby,");
+        stateTable.put("unlocked,disabled,dependency,hotstandby,disableDependency",
+                "unlocked,disabled,dependency,coldstandby,");
+        stateTable.put("unlocked,disabled,dependency,hotstandby,enableNoDependency",
+                "unlocked,enabled,null,hotstandby,");
+        stateTable.put("unlocked,disabled,dependency,hotstandby,promote",
+                "unlocked,disabled,dependency,coldstandby,StandbyStatusException");
+        stateTable.put("unlocked,disabled,dependency,hotstandby,demote", "unlocked,disabled,dependency,coldstandby,");
+        stateTable.put("unlocked,disabled,dependency,providingservice,lock", "locked,disabled,dependency,coldstandby,");
+        stateTable.put("unlocked,disabled,dependency,providingservice,unlock",
+                "unlocked,disabled,dependency,coldstandby,");
+        stateTable.put("unlocked,disabled,dependency,providingservice,disableFailed",
+                "unlocked,disabled,dependency.failed,coldstandby,");
+        stateTable.put("unlocked,disabled,dependency,providingservice,enableNotFailed",
+                "unlocked,disabled,dependency,coldstandby,");
+        stateTable.put("unlocked,disabled,dependency,providingservice,disableDependency",
+                "unlocked,disabled,dependency,coldstandby,");
+        stateTable.put("unlocked,disabled,dependency,providingservice,enableNoDependency",
+                "unlocked,enabled,null,hotstandby,");
+        stateTable.put("unlocked,disabled,dependency,providingservice,promote",
+                "unlocked,disabled,dependency,coldstandby,StandbyStatusException");
+        stateTable.put("unlocked,disabled,dependency,providingservice,demote",
+                "unlocked,disabled,dependency,coldstandby,");
+        stateTable.put("unlocked,disabled,dependency.failed,null,lock", "locked,disabled,dependency.failed,null,");
+        stateTable.put("unlocked,disabled,dependency.failed,null,unlock", "unlocked,disabled,dependency.failed,null,");
+        stateTable.put("unlocked,disabled,dependency.failed,null,disableFailed",
+                "unlocked,disabled,dependency.failed,null,");
+        stateTable.put("unlocked,disabled,dependency.failed,null,enableNotFailed",
+                "unlocked,disabled,dependency,null,");
+        stateTable.put("unlocked,disabled,dependency.failed,null,disableDependency",
+                "unlocked,disabled,dependency.failed,null,");
+        stateTable.put("unlocked,disabled,dependency.failed,null,enableNoDependency", "unlocked,disabled,failed,null,");
+        stateTable.put("unlocked,disabled,dependency.failed,null,promote",
+                "unlocked,disabled,dependency.failed,coldstandby,StandbyStatusException");
+        stateTable.put("unlocked,disabled,dependency.failed,null,demote",
+                "unlocked,disabled,dependency.failed,coldstandby,");
+        stateTable.put("unlocked,disabled,dependency.failed,coldstandby,lock",
+                "locked,disabled,dependency.failed,coldstandby,");
+        stateTable.put("unlocked,disabled,dependency.failed,coldstandby,unlock",
+                "unlocked,disabled,dependency.failed,coldstandby,");
+        stateTable.put("unlocked,disabled,dependency.failed,coldstandby,disableFailed",
+                "unlocked,disabled,dependency.failed,coldstandby,");
+        stateTable.put("unlocked,disabled,dependency.failed,coldstandby,enableNotFailed",
+                "unlocked,disabled,dependency,coldstandby,");
+        stateTable.put("unlocked,disabled,dependency.failed,coldstandby,disableDependency",
+                "unlocked,disabled,dependency.failed,coldstandby,");
+        stateTable.put("unlocked,disabled,dependency.failed,coldstandby,enableNoDependency",
+                "unlocked,disabled,failed,coldstandby,");
+        stateTable.put("unlocked,disabled,dependency.failed,coldstandby,promote",
+                "unlocked,disabled,dependency.failed,coldstandby,StandbyStatusException");
+        stateTable.put("unlocked,disabled,dependency.failed,coldstandby,demote",
+                "unlocked,disabled,dependency.failed,coldstandby,");
+        stateTable.put("unlocked,disabled,dependency.failed,hotstandby,lock",
+                "locked,disabled,dependency.failed,coldstandby,");
+        stateTable.put("unlocked,disabled,dependency.failed,hotstandby,unlock",
+                "unlocked,disabled,dependency.failed,coldstandby,");
+        stateTable.put("unlocked,disabled,dependency.failed,hotstandby,disableFailed",
+                "unlocked,disabled,dependency.failed,coldstandby,");
+        stateTable.put("unlocked,disabled,dependency.failed,hotstandby,enableNotFailed",
+                "unlocked,disabled,dependency,coldstandby,");
+        stateTable.put("unlocked,disabled,dependency.failed,hotstandby,disableDependency",
+                "unlocked,disabled,dependency.failed,coldstandby,");
+        stateTable.put("unlocked,disabled,dependency.failed,hotstandby,enableNoDependency",
+                "unlocked,disabled,failed,coldstandby,");
+        stateTable.put("unlocked,disabled,dependency.failed,hotstandby,promote",
+                "unlocked,disabled,dependency.failed,coldstandby,StandbyStatusException");
+        stateTable.put("unlocked,disabled,dependency.failed,hotstandby,demote",
+                "unlocked,disabled,dependency.failed,coldstandby,");
+        stateTable.put("unlocked,disabled,dependency.failed,providingservice,lock",
+                "locked,disabled,dependency.failed,coldstandby,");
+        stateTable.put("unlocked,disabled,dependency.failed,providingservice,unlock",
+                "unlocked,disabled,dependency.failed,coldstandby,");
+        stateTable.put("unlocked,disabled,dependency.failed,providingservice,disableFailed",
+                "unlocked,disabled,dependency.failed,coldstandby,");
+        stateTable.put("unlocked,disabled,dependency.failed,providingservice,enableNotFailed",
+                "unlocked,disabled,dependency,coldstandby,");
+        stateTable.put("unlocked,disabled,dependency.failed,providingservice,disableDependency",
+                "unlocked,disabled,dependency.failed,coldstandby,");
+        stateTable.put("unlocked,disabled,dependency.failed,providingservice,enableNoDependency",
+                "unlocked,disabled,failed,coldstandby,");
+        stateTable.put("unlocked,disabled,dependency.failed,providingservice,promote",
+                "unlocked,disabled,dependency.failed,coldstandby,StandbyStatusException");
+        stateTable.put("unlocked,disabled,dependency.failed,providingservice,demote",
+                "unlocked,disabled,dependency.failed,coldstandby,");
+        stateTable.put("locked,enabled,null,null,lock", "locked,enabled,null,null,");
+        stateTable.put("locked,enabled,null,null,unlock", "unlocked,enabled,null,null,");
+        stateTable.put("locked,enabled,null,null,disableFailed", "locked,disabled,failed,null,");
+        stateTable.put("locked,enabled,null,null,enableNotFailed", "locked,enabled,null,null,");
+        stateTable.put("locked,enabled,null,null,disableDependency", "locked,disabled,dependency,null,");
+        stateTable.put("locked,enabled,null,null,enableNoDependency", "locked,enabled,null,null,");
+        stateTable.put("locked,enabled,null,null,promote", "locked,enabled,null,coldstandby,StandbyStatusException");
+        stateTable.put("locked,enabled,null,null,demote", "locked,enabled,null,coldstandby,");
+        stateTable.put("locked,enabled,null,coldstandby,lock", "locked,enabled,null,coldstandby,");
+        stateTable.put("locked,enabled,null,coldstandby,unlock", "unlocked,enabled,null,hotstandby,");
+        stateTable.put("locked,enabled,null,coldstandby,disableFailed", "locked,disabled,failed,coldstandby,");
+        stateTable.put("locked,enabled,null,coldstandby,enableNotFailed", "locked,enabled,null,coldstandby,");
+        stateTable.put("locked,enabled,null,coldstandby,disableDependency", "locked,disabled,dependency,coldstandby,");
+        stateTable.put("locked,enabled,null,coldstandby,enableNoDependency", "locked,enabled,null,coldstandby,");
+        stateTable.put("locked,enabled,null,coldstandby,promote",
+                "locked,enabled,null,coldstandby,StandbyStatusException");
+        stateTable.put("locked,enabled,null,coldstandby,demote", "locked,enabled,null,coldstandby,");
+        stateTable.put("locked,enabled,null,hotstandby,lock", "locked,enabled,null,coldstandby,");
+        stateTable.put("locked,enabled,null,hotstandby,unlock", "unlocked,enabled,null,hotstandby,");
+        stateTable.put("locked,enabled,null,hotstandby,disableFailed", "locked,disabled,failed,coldstandby,");
+        stateTable.put("locked,enabled,null,hotstandby,enableNotFailed", "locked,enabled,null,coldstandby,");
+        stateTable.put("locked,enabled,null,hotstandby,disableDependency", "locked,disabled,dependency,coldstandby,");
+        stateTable.put("locked,enabled,null,hotstandby,enableNoDependency", "locked,enabled,null,coldstandby,");
+        stateTable.put("locked,enabled,null,hotstandby,promote",
+                "locked,enabled,null,coldstandby,StandbyStateException");
+        stateTable.put("locked,enabled,null,hotstandby,demote", "locked,enabled,null,coldstandby,");
+        stateTable.put("locked,enabled,null,providingservice,lock", "locked,enabled,null,coldstandby,");
+        stateTable.put("locked,enabled,null,providingservice,unlock", "unlocked,enabled,null,hotstandby,");
+        stateTable.put("locked,enabled,null,providingservice,disableFailed", "locked,disabled,failed,coldstandby,");
+        stateTable.put("locked,enabled,null,providingservice,enableNotFailed", "locked,enabled,null,coldstandby,");
+        stateTable.put("locked,enabled,null,providingservice,disableDependency",
+                "locked,disabled,dependency,coldstandby,");
+        stateTable.put("locked,enabled,null,providingservice,enableNoDependency", "locked,enabled,null,coldstandby,");
+        stateTable.put("locked,enabled,null,providingservice,promote",
+                "locked,enabled,null,coldstandby,StandbyStateException");
+        stateTable.put("locked,enabled,null,providingservice,demote", "locked,enabled,null,coldstandby,");
+        stateTable.put("locked,enabled,failed,null,lock", "locked,enabled,null,null,");
+        stateTable.put("locked,enabled,failed,null,unlock", "unlocked,enabled,null,null,");
+        stateTable.put("locked,enabled,failed,null,disableFailed", "locked,disabled,failed,null,");
+        stateTable.put("locked,enabled,failed,null,enableNotFailed", "locked,enabled,null,null,");
+        stateTable.put("locked,enabled,failed,null,disableDependency", "locked,disabled,dependency,null,");
+        stateTable.put("locked,enabled,failed,null,enableNoDependency", "locked,enabled,null,null,");
+        stateTable.put("locked,enabled,failed,null,promote", "locked,enabled,null,coldstandby,StandbyStatusException");
+        stateTable.put("locked,enabled,failed,null,demote", "locked,enabled,null,coldstandby,");
+        stateTable.put("locked,enabled,failed,coldstandby,lock", "locked,enabled,null,coldstandby,");
+        stateTable.put("locked,enabled,failed,coldstandby,unlock", "unlocked,enabled,null,hotstandby,");
+        stateTable.put("locked,enabled,failed,coldstandby,disableFailed", "locked,disabled,failed,coldstandby,");
+        stateTable.put("locked,enabled,failed,coldstandby,enableNotFailed", "locked,enabled,null,coldstandby,");
+        stateTable.put("locked,enabled,failed,coldstandby,disableDependency",
+                "locked,disabled,dependency,coldstandby,");
+        stateTable.put("locked,enabled,failed,coldstandby,enableNoDependency", "locked,enabled,null,coldstandby,");
+        stateTable.put("locked,enabled,failed,coldstandby,promote",
+                "locked,enabled,null,coldstandby,StandbyStatusException");
+        stateTable.put("locked,enabled,failed,coldstandby,demote", "locked,enabled,null,coldstandby,");
+        stateTable.put("locked,enabled,failed,hotstandby,lock", "locked,enabled,null,coldstandby,");
+        stateTable.put("locked,enabled,failed,hotstandby,unlock", "unlocked,enabled,null,hotstandby,");
+        stateTable.put("locked,enabled,failed,hotstandby,disableFailed", "locked,disabled,failed,coldstandby,");
+        stateTable.put("locked,enabled,failed,hotstandby,enableNotFailed", "locked,enabled,null,coldstandby,");
+        stateTable.put("locked,enabled,failed,hotstandby,disableDependency", "locked,disabled,dependency,coldstandby,");
+        stateTable.put("locked,enabled,failed,hotstandby,enableNoDependency", "locked,enabled,null,coldstandby,");
+        stateTable.put("locked,enabled,failed,hotstandby,promote",
+                "locked,enabled,null,coldstandby,StandbyStatusException");
+        stateTable.put("locked,enabled,failed,hotstandby,demote", "locked,enabled,null,coldstandby,");
+        stateTable.put("locked,enabled,failed,providingservice,lock", "locked,enabled,null,coldstandby,");
+        stateTable.put("locked,enabled,failed,providingservice,unlock", "unlocked,enabled,null,hotstandby,");
+        stateTable.put("locked,enabled,failed,providingservice,disableFailed", "locked,disabled,failed,coldstandby,");
+        stateTable.put("locked,enabled,failed,providingservice,enableNotFailed", "locked,enabled,null,coldstandby,");
+        stateTable.put("locked,enabled,failed,providingservice,disableDependency",
+                "locked,disabled,dependency,coldstandby,");
+        stateTable.put("locked,enabled,failed,providingservice,enableNoDependency", "locked,enabled,null,coldstandby,");
+        stateTable.put("locked,enabled,failed,providingservice,promote",
+                "locked,enabled,null,coldstandby,StandbyStatusException");
+        stateTable.put("locked,enabled,failed,providingservice,demote", "locked,enabled,null,coldstandby,");
+        stateTable.put("locked,enabled,dependency,null,lock", "locked,enabled,null,null,");
+        stateTable.put("locked,enabled,dependency,null,unlock", "unlocked,enabled,null,null,");
+        stateTable.put("locked,enabled,dependency,null,disableFailed", "locked,disabled,failed,null,");
+        stateTable.put("locked,enabled,dependency,null,enableNotFailed", "locked,enabled,null,null,");
+        stateTable.put("locked,enabled,dependency,null,disableDependency", "locked,disabled,dependency,null,");
+        stateTable.put("locked,enabled,dependency,null,enableNoDependency", "locked,enabled,null,null,");
+        stateTable.put("locked,enabled,dependency,null,promote",
+                "locked,enabled,null,coldstandby,StandbyStatusException");
+        stateTable.put("locked,enabled,dependency,null,demote", "locked,enabled,null,coldstandby,");
+        stateTable.put("locked,enabled,dependency,coldstandby,lock", "locked,enabled,null,coldstandby,");
+        stateTable.put("locked,enabled,dependency,coldstandby,unlock", "unlocked,enabled,null,hotstandby,");
+        stateTable.put("locked,enabled,dependency,coldstandby,disableFailed", "locked,disabled,failed,coldstandby,");
+        stateTable.put("locked,enabled,dependency,coldstandby,enableNotFailed", "locked,enabled,null,coldstandby,");
+        stateTable.put("locked,enabled,dependency,coldstandby,disableDependency",
+                "locked,disabled,dependency,coldstandby,");
+        stateTable.put("locked,enabled,dependency,coldstandby,enableNoDependency", "locked,enabled,null,coldstandby,");
+        stateTable.put("locked,enabled,dependency,coldstandby,promote",
+                "locked,enabled,null,coldstandby,StandbyStatusException");
+        stateTable.put("locked,enabled,dependency,coldstandby,demote", "locked,enabled,null,coldstandby,");
+        stateTable.put("locked,enabled,dependency,hotstandby,lock", "locked,enabled,null,coldstandby,");
+        stateTable.put("locked,enabled,dependency,hotstandby,unlock", "unlocked,enabled,null,hotstandby,");
+        stateTable.put("locked,enabled,dependency,hotstandby,disableFailed", "locked,disabled,failed,coldstandby,");
+        stateTable.put("locked,enabled,dependency,hotstandby,enableNotFailed", "locked,enabled,null,coldstandby,");
+        stateTable.put("locked,enabled,dependency,hotstandby,disableDependency",
+                "locked,disabled,dependency,coldstandby,");
+        stateTable.put("locked,enabled,dependency,hotstandby,enableNoDependency", "locked,enabled,null,coldstandby,");
+        stateTable.put("locked,enabled,dependency,hotstandby,promote",
+                "locked,enabled,null,coldstandby,StandbyStatusException");
+        stateTable.put("locked,enabled,dependency,hotstandby,demote", "locked,enabled,null,coldstandby,");
+        stateTable.put("locked,enabled,dependency,providingservice,lock", "locked,enabled,null,coldstandby,");
+        stateTable.put("locked,enabled,dependency,providingservice,unlock", "unlocked,enabled,null,hotstandby,");
+        stateTable.put("locked,enabled,dependency,providingservice,disableFailed",
+                "locked,disabled,failed,coldstandby,");
+        stateTable.put("locked,enabled,dependency,providingservice,enableNotFailed",
+                "locked,enabled,null,coldstandby,");
+        stateTable.put("locked,enabled,dependency,providingservice,disableDependency",
+                "locked,disabled,dependency,coldstandby,");
+        stateTable.put("locked,enabled,dependency,providingservice,enableNoDependency",
+                "locked,enabled,null,coldstandby,");
+        stateTable.put("locked,enabled,dependency,providingservice,promote",
+                "locked,enabled,null,coldstandby,StandbyStatusException");
+        stateTable.put("locked,enabled,dependency,providingservice,demote", "locked,enabled,null,coldstandby,");
+        stateTable.put("locked,enabled,dependency.failed,null,lock", "locked,enabled,null,null,");
+        stateTable.put("locked,enabled,dependency.failed,null,unlock", "unlocked,enabled,null,null,");
+        stateTable.put("locked,enabled,dependency.failed,null,disableFailed", "locked,disabled,failed,null,");
+        stateTable.put("locked,enabled,dependency.failed,null,enableNotFailed", "locked,enabled,null,null,");
+        stateTable.put("locked,enabled,dependency.failed,null,disableDependency", "locked,disabled,dependency,null,");
+        stateTable.put("locked,enabled,dependency.failed,null,enableNoDependency", "locked,enabled,null,null,");
+        stateTable.put("locked,enabled,dependency.failed,null,promote",
+                "locked,enabled,null,coldstandby,StandbyStatusException");
+        stateTable.put("locked,enabled,dependency.failed,null,demote", "locked,enabled,null,coldstandby,");
+        stateTable.put("locked,enabled,dependency.failed,coldstandby,lock", "locked,enabled,null,coldstandby,");
+        stateTable.put("locked,enabled,dependency.failed,coldstandby,unlock", "unlocked,enabled,null,hotstandby,");
+        stateTable.put("locked,enabled,dependency.failed,coldstandby,disableFailed",
+                "locked,disabled,failed,coldstandby,");
+        stateTable.put("locked,enabled,dependency.failed,coldstandby,enableNotFailed",
+                "locked,enabled,null,coldstandby,");
+        stateTable.put("locked,enabled,dependency.failed,coldstandby,disableDependency",
+                "locked,disabled,dependency,coldstandby,");
+        stateTable.put("locked,enabled,dependency.failed,coldstandby,enableNoDependency",
+                "locked,enabled,null,coldstandby,");
+        stateTable.put("locked,enabled,dependency.failed,coldstandby,promote",
+                "locked,enabled,null,coldstandby,StandbyStatusException");
+        stateTable.put("locked,enabled,dependency.failed,coldstandby,demote", "locked,enabled,null,coldstandby,");
+        stateTable.put("locked,enabled,dependency.failed,hotstandby,lock", "locked,enabled,null,coldstandby,");
+        stateTable.put("locked,enabled,dependency.failed,hotstandby,unlock", "unlocked,enabled,null,hotstandby,");
+        stateTable.put("locked,enabled,dependency.failed,hotstandby,disableFailed",
+                "locked,disabled,failed,coldstandby,");
+        stateTable.put("locked,enabled,dependency.failed,hotstandby,enableNotFailed",
+                "locked,enabled,null,coldstandby,");
+        stateTable.put("locked,enabled,dependency.failed,hotstandby,disableDependency",
+                "locked,disabled,dependency,coldstandby,");
+        stateTable.put("locked,enabled,dependency.failed,hotstandby,enableNoDependency",
+                "locked,enabled,null,coldstandby,");
+        stateTable.put("locked,enabled,dependency.failed,hotstandby,promote",
+                "locked,enabled,null,coldstandby,StandbyStatusException");
+        stateTable.put("locked,enabled,dependency.failed,hotstandby,demote", "locked,enabled,null,coldstandby,");
+        stateTable.put("locked,enabled,dependency.failed,providingservice,lock", "locked,enabled,null,coldstandby,");
+        stateTable.put("locked,enabled,dependency.failed,providingservice,unlock", "unlocked,enabled,null,hotstandby,");
+        stateTable.put("locked,enabled,dependency.failed,providingservice,disableFailed",
+                "locked,disabled,failed,coldstandby,");
+        stateTable.put("locked,enabled,dependency.failed,providingservice,enableNotFailed",
+                "locked,enabled,null,coldstandby,");
+        stateTable.put("locked,enabled,dependency.failed,providingservice,disableDependency",
+                "locked,disabled,dependency,coldstandby,");
+        stateTable.put("locked,enabled,dependency.failed,providingservice,enableNoDependency",
+                "locked,enabled,null,coldstandby,");
+        stateTable.put("locked,enabled,dependency.failed,providingservice,promote",
+                "locked,enabled,null,coldstandby,StandbyStatusException");
+        stateTable.put("locked,enabled,dependency.failed,providingservice,demote", "locked,enabled,null,coldstandby,");
+        stateTable.put("locked,disabled,null,null,lock", "locked,disabled,null,null,");
+        stateTable.put("locked,disabled,null,null,unlock", "unlocked,disabled,null,null,");
+        stateTable.put("locked,disabled,null,null,disableFailed", "locked,disabled,failed,null,");
+        stateTable.put("locked,disabled,null,null,enableNotFailed", "locked,enabled,null,null,");
+        stateTable.put("locked,disabled,null,null,disableDependency", "locked,disabled,dependency,null,");
+        stateTable.put("locked,disabled,null,null,enableNoDependency", "locked,enabled,null,null,");
+        stateTable.put("locked,disabled,null,null,promote", "locked,disabled,null,coldstandby,StandbyStatusException");
+        stateTable.put("locked,disabled,null,null,demote", "locked,disabled,null,coldstandby,");
+        stateTable.put("locked,disabled,null,coldstandby,lock", "locked,disabled,null,coldstandby,");
+        stateTable.put("locked,disabled,null,coldstandby,unlock", "unlocked,disabled,null,coldstandby,");
+        stateTable.put("locked,disabled,null,coldstandby,disableFailed", "locked,disabled,failed,coldstandby,");
+        stateTable.put("locked,disabled,null,coldstandby,enableNotFailed", "locked,enabled,null,coldstandby,");
+        stateTable.put("locked,disabled,null,coldstandby,disableDependency", "locked,disabled,dependency,coldstandby,");
+        stateTable.put("locked,disabled,null,coldstandby,enableNoDependency", "locked,enabled,null,coldstandby,");
+        stateTable.put("locked,disabled,null,coldstandby,promote",
+                "locked,disabled,null,coldstandby,StandbyStatusException");
+        stateTable.put("locked,disabled,null,coldstandby,demote", "locked,disabled,null,coldstandby,");
+        stateTable.put("locked,disabled,null,hotstandby,lock", "locked,disabled,null,coldstandby,");
+        stateTable.put("locked,disabled,null,hotstandby,unlock", "unlocked,disabled,null,coldstandby,");
+        stateTable.put("locked,disabled,null,hotstandby,disableFailed", "locked,disabled,failed,coldstandby,");
+        stateTable.put("locked,disabled,null,hotstandby,enableNotFailed", "locked,enabled,null,coldstandby,");
+        stateTable.put("locked,disabled,null,hotstandby,disableDependency", "locked,disabled,dependency,coldstandby,");
+        stateTable.put("locked,disabled,null,hotstandby,enableNoDependency", "locked,enabled,null,coldstandby,");
+        stateTable.put("locked,disabled,null,hotstandby,promote",
+                "locked,disabled,null,coldstandby,StandbyStatusException");
+        stateTable.put("locked,disabled,null,hotstandby,demote", "locked,disabled,null,coldstandby,");
+        stateTable.put("locked,disabled,null,providingservice,lock", "locked,disabled,null,coldstandby,");
+        stateTable.put("locked,disabled,null,providingservice,unlock", "unlocked,disabled,null,coldstandby,");
+        stateTable.put("locked,disabled,null,providingservice,disableFailed", "locked,disabled,failed,coldstandby,");
+        stateTable.put("locked,disabled,null,providingservice,enableNotFailed", "locked,enabled,null,coldstandby,");
+        stateTable.put("locked,disabled,null,providingservice,disableDependency",
+                "locked,disabled,dependency,coldstandby,");
+        stateTable.put("locked,disabled,null,providingservice,enableNoDependency", "locked,enabled,null,coldstandby,");
+        stateTable.put("locked,disabled,null,providingservice,promote",
+                "locked,disabled,null,coldstandby,StandbyStatusException");
+        stateTable.put("locked,disabled,null,providingservice,demote", "locked,disabled,null,coldstandby,");
+        stateTable.put("locked,disabled,failed,null,lock", "locked,disabled,failed,null,");
+        stateTable.put("locked,disabled,failed,null,unlock", "unlocked,disabled,failed,null,");
+        stateTable.put("locked,disabled,failed,null,disableFailed", "locked,disabled,failed,null,");
+        stateTable.put("locked,disabled,failed,null,enableNotFailed", "locked,enabled,null,null,");
+        stateTable.put("locked,disabled,failed,null,disableDependency", "locked,disabled,dependency.failed,null,");
+        stateTable.put("locked,disabled,failed,null,enableNoDependency", "locked,disabled,failed,null,");
+        stateTable.put("locked,disabled,failed,null,promote",
+                "locked,disabled,failed,coldstandby,StandbyStatusException");
+        stateTable.put("locked,disabled,failed,null,demote", "locked,disabled,failed,coldstandby,");
+        stateTable.put("locked,disabled,failed,coldstandby,lock", "locked,disabled,failed,coldstandby,");
+        stateTable.put("locked,disabled,failed,coldstandby,unlock", "unlocked,disabled,failed,coldstandby,");
+        stateTable.put("locked,disabled,failed,coldstandby,disableFailed", "locked,disabled,failed,coldstandby,");
+        stateTable.put("locked,disabled,failed,coldstandby,enableNotFailed", "locked,enabled,null,coldstandby,");
+        stateTable.put("locked,disabled,failed,coldstandby,disableDependency",
+                "locked,disabled,dependency.failed,coldstandby,");
+        stateTable.put("locked,disabled,failed,coldstandby,enableNoDependency", "locked,disabled,failed,coldstandby,");
+        stateTable.put("locked,disabled,failed,coldstandby,promote",
+                "locked,disabled,failed,coldstandby,StandbyStatusException");
+        stateTable.put("locked,disabled,failed,coldstandby,demote", "locked,disabled,failed,coldstandby,");
+        stateTable.put("locked,disabled,failed,hotstandby,lock", "locked,disabled,failed,coldstandby,");
+        stateTable.put("locked,disabled,failed,hotstandby,unlock", "unlocked,disabled,failed,coldstandby,");
+        stateTable.put("locked,disabled,failed,hotstandby,disableFailed", "locked,disabled,failed,coldstandby,");
+        stateTable.put("locked,disabled,failed,hotstandby,enableNotFailed", "locked,enabled,null,coldstandby,");
+        stateTable.put("locked,disabled,failed,hotstandby,disableDependency",
+                "locked,disabled,dependency.failed,coldstandby,");
+        stateTable.put("locked,disabled,failed,hotstandby,enableNoDependency", "locked,disabled,failed,coldstandby,");
+        stateTable.put("locked,disabled,failed,hotstandby,promote",
+                "locked,disabled,failed,coldstandby,StandbyStatusException");
+        stateTable.put("locked,disabled,failed,hotstandby,demote", "locked,disabled,failed,coldstandby,");
+        stateTable.put("locked,disabled,failed,providingservice,lock", "locked,disabled,failed,coldstandby,");
+        stateTable.put("locked,disabled,failed,providingservice,unlock", "unlocked,disabled,failed,coldstandby,");
+        stateTable.put("locked,disabled,failed,providingservice,disableFailed", "locked,disabled,failed,coldstandby,");
+        stateTable.put("locked,disabled,failed,providingservice,enableNotFailed", "locked,enabled,null,coldstandby,");
+        stateTable.put("locked,disabled,failed,providingservice,disableDependency",
+                "locked,disabled,dependency.failed,coldstandby,");
+        stateTable.put("locked,disabled,failed,providingservice,enableNoDependency",
+                "locked,disabled,failed,coldstandby,");
+        stateTable.put("locked,disabled,failed,providingservice,promote",
+                "locked,disabled,failed,coldstandby,StandbyStatusException");
+        stateTable.put("locked,disabled,failed,providingservice,demote", "locked,disabled,failed,coldstandby,");
+        stateTable.put("locked,disabled,dependency,null,lock", "locked,disabled,dependency,null,");
+        stateTable.put("locked,disabled,dependency,null,unlock", "unlocked,disabled,dependency,null,");
+        stateTable.put("locked,disabled,dependency,null,disableFailed", "locked,disabled,dependency.failed,null,");
+        stateTable.put("locked,disabled,dependency,null,enableNotFailed", "locked,disabled,dependency,null,");
+        stateTable.put("locked,disabled,dependency,null,disableDependency", "locked,disabled,dependency,null,");
+        stateTable.put("locked,disabled,dependency,null,enableNoDependency", "locked,enabled,null,null,");
+        stateTable.put("locked,disabled,dependency,null,promote",
+                "locked,disabled,dependency,coldstandby,StandbyStatusException");
+        stateTable.put("locked,disabled,dependency,null,demote", "locked,disabled,dependency,coldstandby,");
+        stateTable.put("locked,disabled,dependency,coldstandby,lock", "locked,disabled,dependency,coldstandby,");
+        stateTable.put("locked,disabled,dependency,coldstandby,unlock", "unlocked,disabled,dependency,coldstandby,");
+        stateTable.put("locked,disabled,dependency,coldstandby,disableFailed",
+                "locked,disabled,dependency.failed,coldstandby,");
+        stateTable.put("locked,disabled,dependency,coldstandby,enableNotFailed",
+                "locked,disabled,dependency,coldstandby,");
+        stateTable.put("locked,disabled,dependency,coldstandby,disableDependency",
+                "locked,disabled,dependency,coldstandby,");
+        stateTable.put("locked,disabled,dependency,coldstandby,enableNoDependency", "locked,enabled,null,coldstandby,");
+        stateTable.put("locked,disabled,dependency,coldstandby,promote",
+                "locked,disabled,dependency,coldstandby,StandbyStatusException");
+        stateTable.put("locked,disabled,dependency,coldstandby,demote", "locked,disabled,dependency,coldstandby,");
+        stateTable.put("locked,disabled,dependency,hotstandby,lock", "locked,disabled,dependency,coldstandby,");
+        stateTable.put("locked,disabled,dependency,hotstandby,unlock", "unlocked,disabled,dependency,coldstandby,");
+        stateTable.put("locked,disabled,dependency,hotstandby,disableFailed",
+                "locked,disabled,dependency.failed,coldstandby,");
+        stateTable.put("locked,disabled,dependency,hotstandby,enableNotFailed",
+                "locked,disabled,dependency,coldstandby,");
+        stateTable.put("locked,disabled,dependency,hotstandby,disableDependency",
+                "locked,disabled,dependency,coldstandby,");
+        stateTable.put("locked,disabled,dependency,hotstandby,enableNoDependency", "locked,enabled,null,coldstandby,");
+        stateTable.put("locked,disabled,dependency,hotstandby,promote",
+                "locked,disabled,dependency,coldstandby,StandbyStatusException");
+        stateTable.put("locked,disabled,dependency,hotstandby,demote", "locked,disabled,dependency,coldstandby,");
+        stateTable.put("locked,disabled,dependency,providingservice,lock", "locked,disabled,dependency,coldstandby,");
+        stateTable.put("locked,disabled,dependency,providingservice,unlock",
+                "unlocked,disabled,dependency,coldstandby,");
+        stateTable.put("locked,disabled,dependency,providingservice,disableFailed",
+                "locked,disabled,dependency.failed,coldstandby,");
+        stateTable.put("locked,disabled,dependency,providingservice,enableNotFailed",
+                "locked,disabled,dependency,coldstandby,");
+        stateTable.put("locked,disabled,dependency,providingservice,disableDependency",
+                "locked,disabled,dependency,coldstandby,");
+        stateTable.put("locked,disabled,dependency,providingservice,enableNoDependency",
+                "locked,enabled,null,coldstandby,");
+        stateTable.put("locked,disabled,dependency,providingservice,promote",
+                "locked,disabled,dependency,coldstandby,StandbyStatusException");
+        stateTable.put("locked,disabled,dependency,providingservice,demote", "locked,disabled,dependency,coldstandby,");
+        stateTable.put("locked,disabled,dependency.failed,null,lock", "locked,disabled,dependency.failed,null,");
+        stateTable.put("locked,disabled,dependency.failed,null,unlock", "unlocked,disabled,dependency.failed,null,");
+        stateTable.put("locked,disabled,dependency.failed,null,disableFailed",
+                "locked,disabled,dependency.failed,null,");
+        stateTable.put("locked,disabled,dependency.failed,null,enableNotFailed", "locked,disabled,dependency,null,");
+        stateTable.put("locked,disabled,dependency.failed,null,disableDependency",
+                "locked,disabled,dependency.failed,null,");
+        stateTable.put("locked,disabled,dependency.failed,null,enableNoDependency", "locked,disabled,failed,null,");
+        stateTable.put("locked,disabled,dependency.failed,null,promote",
+                "locked,disabled,dependency.failed,coldstandby,StandbyStatusException");
+        stateTable.put("locked,disabled,dependency.failed,null,demote",
+                "locked,disabled,dependency.failed,coldstandby,");
+        stateTable.put("locked,disabled,dependency.failed,coldstandby,lock",
+                "locked,disabled,dependency.failed,coldstandby,");
+        stateTable.put("locked,disabled,dependency.failed,coldstandby,unlock",
+                "unlocked,disabled,dependency.failed,coldstandby,");
+        stateTable.put("locked,disabled,dependency.failed,coldstandby,disableFailed",
+                "locked,disabled,dependency.failed,coldstandby,");
+        stateTable.put("locked,disabled,dependency.failed,coldstandby,enableNotFailed",
+                "locked,disabled,dependency,coldstandby,");
+        stateTable.put("locked,disabled,dependency.failed,coldstandby,disableDependency",
+                "locked,disabled,dependency.failed,coldstandby,");
+        stateTable.put("locked,disabled,dependency.failed,coldstandby,enableNoDependency",
+                "locked,disabled,failed,coldstandby,");
+        stateTable.put("locked,disabled,dependency.failed,coldstandby,promote",
+                "locked,disabled,dependency.failed,coldstandby,StandbyStatusException");
+        stateTable.put("locked,disabled,dependency.failed,coldstandby,demote",
+                "locked,disabled,dependency.failed,coldstandby,");
+        stateTable.put("locked,disabled,dependency.failed,hotstandby,lock",
+                "locked,disabled,dependency.failed,coldstandby,");
+        stateTable.put("locked,disabled,dependency.failed,hotstandby,unlock",
+                "unlocked,disabled,dependency.failed,coldstandby,");
+        stateTable.put("locked,disabled,dependency.failed,hotstandby,disableFailed",
+                "locked,disabled,dependency.failed,coldstandby,");
+        stateTable.put("locked,disabled,dependency.failed,hotstandby,enableNotFailed",
+                "locked,disabled,dependency,coldstandby,");
+        stateTable.put("locked,disabled,dependency.failed,hotstandby,disableDependency",
+                "locked,disabled,dependency.failed,coldstandby,");
+        stateTable.put("locked,disabled,dependency.failed,hotstandby,enableNoDependency",
+                "locked,disabled,failed,coldstandby,");
+        stateTable.put("locked,disabled,dependency.failed,hotstandby,promote",
+                "locked,disabled,dependency.failed,coldstandby,StandbyStatusException");
+        stateTable.put("locked,disabled,dependency.failed,hotstandby,demote",
+                "locked,disabled,dependency.failed,coldstandby,");
+        stateTable.put("locked,disabled,dependency.failed,providingservice,lock",
+                "locked,disabled,dependency.failed,coldstandby,");
+        stateTable.put("locked,disabled,dependency.failed,providingservice,unlock",
+                "unlocked,disabled,dependency.failed,coldstandby,");
+        stateTable.put("locked,disabled,dependency.failed,providingservice,disableFailed",
+                "locked,disabled,dependency.failed,coldstandby,");
+        stateTable.put("locked,disabled,dependency.failed,providingservice,enableNotFailed",
+                "locked,disabled,dependency,coldstandby,");
+        stateTable.put("locked,disabled,dependency.failed,providingservice,disableDependency",
+                "locked,disabled,dependency.failed,coldstandby,");
+        stateTable.put("locked,disabled,dependency.failed,providingservice,enableNoDependency",
+                "locked,disabled,failed,coldstandby,");
+        stateTable.put("locked,disabled,dependency.failed,providingservice,promote",
+                "locked,disabled,dependency.failed,coldstandby,StandbyStatusException");
+        stateTable.put("locked,disabled,dependency.failed,providingservice,demote",
+                "locked,disabled,dependency.failed,coldstandby,");
+    }
 
-     StateElement stateElement = new StateElement(); 
-        try {
-                // dependency,failed is stored as dependency.failed in StateTable
-                String availStatus2 = availStatus;
-                if (availStatus2 != null) {
-                        availStatus2 = availStatus.replace(",", "."); 
-                }  
-            String key = adminState + "," + opState + "," + availStatus2 + "," + standbyStatus + "," + actionName;
-            if(logger.isDebugEnabled()){
-                logger.debug("Ending State search key: {}", key);
-            }
-            String value = StateTable.get(key); 
-             
-            if (value != null) {
-             try {
-                    String[] parts = value.split(",", 5);
-                    stateElement.setEndingAdminState(parts[0].trim());
-                    stateElement.setEndingOpState(parts[1].trim());
-                    stateElement.setEndingAvailStatus(parts[2].trim().replace(".",  ","));
-                        stateElement.setEndingStandbyStatus(parts[3].trim());
-                        stateElement.setException(parts[4].trim());
-                        stateElement.setAdminState(adminState);
-                        stateElement.setOpState(opState);
-                        stateElement.setAvailStatus(availStatus);
-                        stateElement.setStandbyStatus(standbyStatus);
-                        stateElement.setActionName(actionName);
-                    
-                        stateElement.displayStateElement();
-             } catch(Exception ex) {
-                    logger.error("String split exception: {}", ex.toString(), ex);
-             }
-                } else {
-                    String msg = "Ending state not found, adminState=[" + adminState + "], opState=[" + opState + "], availStatus=[" + 
-             availStatus + "], standbyStatus=[" + standbyStatus + "], actionName=[" + actionName + "]"; 
-                    logger.error("{}", msg);
-                    throw new StateTransitionException(msg);
-                }
-        } catch (Exception ex) {
-                logger.error("StateTransition threw exception.", ex);
-                throw new StateTransitionException("Exception: " + ex.toString() + ", adminState=[" + adminState + "], opState=[" + opState + "], availStatus=[" + 
-            availStatus + "], standbyStatus=[" + standbyStatus + "], actionName=[" + actionName + "]");
-        }
+    /**
+     * Display the state table.
+     */
+    public void displayStateTable() {
+        Set<?> set = stateTable.entrySet();
+        Iterator<?> iter = set.iterator();
 
-     return stateElement; 
-  } 
-  
-  /**
-   *  Adding State Transition info into HashMap. It includes all state/status and action combinations  
-   * key  : adminState,opState,availStatus,standbyStatus,actionName
-   * value: endingAdminState,endingOpState,endingAvailStatus,endingStandbyStatus,exception
-   * Note : Use period instead of comma as seperator when store multi-value endingStandbyStatus (convert to 
-   * comma during retrieval)
-   * 
-   * Note on illegal state/status combinations: This table has many state/status combinations that should never occur.
-   * However, they *may* occur due to corruption or manual manipulation of the DB. So, in each case of an illegal 
-   * combination, the state/status is first corrected before applying the action.  It is assumed that the administrative 
-   * and operational states are always correct.  Second, if the availability status is in "agreement" with the operational 
-   * state, it is assumed correct.  If it is null and the operational state is disabled, the availability status
-   * is left null until a disabledfailed or disableddependency action is received. Or, if a enableNotFailed or 
-   * enableNoDependency is received while the availability status is null, it will remain null, but the Operational state
-   * will change to enabled.
-   * 
-   * If the standby status is not in agreement with the administrative and/or operational states, it is brought into 
-   * agreement.  For example, if the administrative state is locked and the standby status is providingservice, the 
-   * standby status is changed to coldstandby.
-   * 
-   * After bringing the states/status attributes into agreement, *then* the action is applied to them.  For example, if 
-   * the administrative state is locked, the operational state is enabled, the availability status is null, the standby 
-   * status is providingservice and the action is unlock, the standby status is changed to coldstandby and then the 
-   * unlock action is applied. This will change the final state/status to administrative state = unlocked, operational 
-   * state = disabled, availability status = null and standby status = hotstandby.
-   * 
-   * Note on standby status:  If the starting state of standby status is null and either a promote or demote action is
-   * made, the assumption is that standbystatus is supported and therefore, the standby status will be changed to 
-   * providingservice, hotstandby or coldstandby - depending on the value of the administrative and operational states.
-   * If an attempt to promote is made when the administrative state is locked or operational state is disabled,
-   * a StandbyStatusException will be thrown since promotion (state transition) is not possible. If the standby status
-   * is coldstandby and a transition occurs on the administrative or operational state such that they are unlocked and
-   * enabled, the standby status is automatically transitioned to hotstandby since it is only those two states that can
-   * hold the statndby status in the coldstandby value.
-   */
-  
-  private void setupStateTable() 
-  {
-      StateTable.put("unlocked,enabled,null,null,lock", "locked,enabled,null,null,");
-      StateTable.put("unlocked,enabled,null,null,unlock", "unlocked,enabled,null,null,");
-      StateTable.put("unlocked,enabled,null,null,disableFailed", "unlocked,disabled,failed,null,");
-      StateTable.put("unlocked,enabled,null,null,enableNotFailed", "unlocked,enabled,null,null,");
-      StateTable.put("unlocked,enabled,null,null,disableDependency", "unlocked,disabled,dependency,null,");
-      StateTable.put("unlocked,enabled,null,null,enableNoDependency", "unlocked,enabled,null,null,");
-      StateTable.put("unlocked,enabled,null,null,promote", "unlocked,enabled,null,providingservice,");
-      StateTable.put("unlocked,enabled,null,null,demote", "unlocked,enabled,null,hotstandby,");
-      StateTable.put("unlocked,enabled,null,coldstandby,lock", "locked,enabled,null,coldstandby,");
-      StateTable.put("unlocked,enabled,null,coldstandby,unlock", "unlocked,enabled,null,hotstandby,");
-      StateTable.put("unlocked,enabled,null,coldstandby,disableFailed", "unlocked,disabled,failed,coldstandby,");
-      StateTable.put("unlocked,enabled,null,coldstandby,enableNotFailed", "unlocked,enabled,null,hotstandby,");
-      StateTable.put("unlocked,enabled,null,coldstandby,disableDependency", "unlocked,disabled,dependency,coldstandby,");
-      StateTable.put("unlocked,enabled,null,coldstandby,enableNoDependency", "unlocked,enabled,null,hotstandby,");
-      StateTable.put("unlocked,enabled,null,coldstandby,promote", "unlocked,enabled,null,providingservice,");
-      StateTable.put("unlocked,enabled,null,coldstandby,demote", "unlocked,enabled,null,hotstandby,");
-      StateTable.put("unlocked,enabled,null,hotstandby,lock", "locked,enabled,null,coldstandby,");
-      StateTable.put("unlocked,enabled,null,hotstandby,unlock", "unlocked,enabled,null,hotstandby,");
-      StateTable.put("unlocked,enabled,null,hotstandby,disableFailed", "unlocked,disabled,failed,coldstandby,");
-      StateTable.put("unlocked,enabled,null,hotstandby,enableNotFailed", "unlocked,enabled,null,hotstandby,");
-      StateTable.put("unlocked,enabled,null,hotstandby,disableDependency", "unlocked,disabled,dependency,coldstandby,");
-      StateTable.put("unlocked,enabled,null,hotstandby,enableNoDependency", "unlocked,enabled,null,hotstandby,");
-      StateTable.put("unlocked,enabled,null,hotstandby,promote", "unlocked,enabled,null,providingservice,");
-      StateTable.put("unlocked,enabled,null,hotstandby,demote", "unlocked,enabled,null,hotstandby,");
-      StateTable.put("unlocked,enabled,null,providingservice,lock", "locked,enabled,null,coldstandby,");
-      StateTable.put("unlocked,enabled,null,providingservice,unlock", "unlocked,enabled,null,providingservice,");
-      StateTable.put("unlocked,enabled,null,providingservice,disableFailed", "unlocked,disabled,failed,coldstandby,");
-      StateTable.put("unlocked,enabled,null,providingservice,enableNotFailed", "unlocked,enabled,null,providingservice,");
-      StateTable.put("unlocked,enabled,null,providingservice,disableDependency", "unlocked,disabled,dependency,coldstandby,");
-      StateTable.put("unlocked,enabled,null,providingservice,enableNoDependency", "unlocked,enabled,null,providingservice,");
-      StateTable.put("unlocked,enabled,null,providingservice,promote", "unlocked,enabled,null,providingservice,");
-      StateTable.put("unlocked,enabled,null,providingservice,demote", "unlocked,enabled,null,hotstandby,");
-      StateTable.put("unlocked,enabled,failed,null,lock", "locked,enabled,null,null,");
-      StateTable.put("unlocked,enabled,failed,null,unlock", "unlocked,enabled,null,null,");
-      StateTable.put("unlocked,enabled,failed,null,disableFailed", "unlocked,disabled,failed,null,");
-      StateTable.put("unlocked,enabled,failed,null,enableNotFailed", "unlocked,enabled,null,null,");
-      StateTable.put("unlocked,enabled,failed,null,disableDependency", "unlocked,disabled,dependency,null,");
-      StateTable.put("unlocked,enabled,failed,null,enableNoDependency", "unlocked,enabled,null,null,");
-      StateTable.put("unlocked,enabled,failed,null,promote", "unlocked,enabled,null,providingservice,");
-      StateTable.put("unlocked,enabled,failed,null,demote", "unlocked,enabled,null,hotstandby,");
-      StateTable.put("unlocked,enabled,failed,coldstandby,lock", "locked,enabled,null,coldstandby,");
-      StateTable.put("unlocked,enabled,failed,coldstandby,unlock", "unlocked,enabled,null,hotstandby,");
-      StateTable.put("unlocked,enabled,failed,coldstandby,disableFailed", "unlocked,disabled,failed,coldstandby,");
-      StateTable.put("unlocked,enabled,failed,coldstandby,enableNotFailed", "unlocked,enabled,null,hotstandby,");
-      StateTable.put("unlocked,enabled,failed,coldstandby,disableDependency", "unlocked,disabled,dependency,coldstandby,");
-      StateTable.put("unlocked,enabled,failed,coldstandby,enableNoDependency", "unlocked,enabled,null,hotstandby,");
-      StateTable.put("unlocked,enabled,failed,coldstandby,promote", "unlocked,enabled,null,providingservice,");
-      StateTable.put("unlocked,enabled,failed,coldstandby,demote", "unlocked,enabled,null,hotstandby,");
-      StateTable.put("unlocked,enabled,failed,hotstandby,lock", "locked,enabled,null,coldstandby,");
-      StateTable.put("unlocked,enabled,failed,hotstandby,unlock", "unlocked,enabled,null,hotstandby,");
-      StateTable.put("unlocked,enabled,failed,hotstandby,disableFailed", "unlocked,disabled,failed,coldstandby,");
-      StateTable.put("unlocked,enabled,failed,hotstandby,enableNotFailed", "unlocked,enabled,null,hotstandby,");
-      StateTable.put("unlocked,enabled,failed,hotstandby,disableDependency", "unlocked,disabled,dependency,coldstandby,");
-      StateTable.put("unlocked,enabled,failed,hotstandby,enableNoDependency", "unlocked,enabled,null,hotstandby,");
-      StateTable.put("unlocked,enabled,failed,hotstandby,promote", "unlocked,enabled,null,providingservice,");
-      StateTable.put("unlocked,enabled,failed,hotstandby,demote", "unlocked,enabled,null,hotstandby,");
-      StateTable.put("unlocked,enabled,failed,providingservice,lock", "locked,enabled,null,coldstandby,");
-      StateTable.put("unlocked,enabled,failed,providingservice,unlock", "unlocked,enabled,null,providingservice,");
-      StateTable.put("unlocked,enabled,failed,providingservice,disableFailed", "unlocked,disabled,failed,coldstandby,");
-      StateTable.put("unlocked,enabled,failed,providingservice,enableNotFailed", "unlocked,enabled,null,providingservice,");
-      StateTable.put("unlocked,enabled,failed,providingservice,disableDependency", "unlocked,disabled,dependency,coldstandby,");
-      StateTable.put("unlocked,enabled,failed,providingservice,enableNoDependency", "unlocked,enabled,null,providingservice,");
-      StateTable.put("unlocked,enabled,failed,providingservice,promote", "unlocked,enabled,null,providingservice,");
-      StateTable.put("unlocked,enabled,failed,providingservice,demote", "unlocked,enabled,null,hotstandby,");
-      StateTable.put("unlocked,enabled,dependency,null,lock", "locked,enabled,null,null,");
-      StateTable.put("unlocked,enabled,dependency,null,unlock", "unlocked,enabled,null,null,");
-      StateTable.put("unlocked,enabled,dependency,null,disableFailed", "unlocked,disabled,failed,null,");
-      StateTable.put("unlocked,enabled,dependency,null,enableNotFailed", "unlocked,enabled,null,null,");
-      StateTable.put("unlocked,enabled,dependency,null,disableDependency", "unlocked,disabled,dependency,null,");
-      StateTable.put("unlocked,enabled,dependency,null,enableNoDependency", "unlocked,enabled,null,null,");
-      StateTable.put("unlocked,enabled,dependency,null,promote", "unlocked,enabled,null,providingservice,");
-      StateTable.put("unlocked,enabled,dependency,null,demote", "unlocked,enabled,null,hotstandby,");
-      StateTable.put("unlocked,enabled,dependency,coldstandby,lock", "locked,enabled,null,coldstandby,");
-      StateTable.put("unlocked,enabled,dependency,coldstandby,unlock", "unlocked,enabled,null,hotstandby,");
-      StateTable.put("unlocked,enabled,dependency,coldstandby,disableFailed", "unlocked,disabled,failed,coldstandby,");
-      StateTable.put("unlocked,enabled,dependency,coldstandby,enableNotFailed", "unlocked,enabled,null,hotstandby,");
-      StateTable.put("unlocked,enabled,dependency,coldstandby,disableDependency", "unlocked,disabled,dependency,coldstandby,");
-      StateTable.put("unlocked,enabled,dependency,coldstandby,enableNoDependency", "unlocked,enabled,null,hotstandby,");
-      StateTable.put("unlocked,enabled,dependency,coldstandby,promote", "unlocked,enabled,null,providingservice,");
-      StateTable.put("unlocked,enabled,dependency,coldstandby,demote", "unlocked,enabled,null,hotstandby,");
-      StateTable.put("unlocked,enabled,dependency,hotstandby,lock", "locked,enabled,null,coldstandby,");
-      StateTable.put("unlocked,enabled,dependency,hotstandby,unlock", "unlocked,enabled,null,hotstandby,");
-      StateTable.put("unlocked,enabled,dependency,hotstandby,disableFailed", "unlocked,disabled,failed,coldstandby,");
-      StateTable.put("unlocked,enabled,dependency,hotstandby,enableNotFailed", "unlocked,enabled,null,hotstandby,");
-      StateTable.put("unlocked,enabled,dependency,hotstandby,disableDependency", "unlocked,disabled,dependency,hotstandby,");
-      StateTable.put("unlocked,enabled,dependency,hotstandby,enableNoDependency", "unlocked,enabled,null,hotstandby,");
-      StateTable.put("unlocked,enabled,dependency,hotstandby,promote", "unlocked,enabled,null,providingservice,");
-      StateTable.put("unlocked,enabled,dependency,hotstandby,demote", "unlocked,enabled,null,hotstandby,");
-      StateTable.put("unlocked,enabled,dependency,providingservice,lock", "locked,enabled,null,coldstandby,");
-      StateTable.put("unlocked,enabled,dependency,providingservice,unlock", "unlocked,enabled,null,providingservice,");
-      StateTable.put("unlocked,enabled,dependency,providingservice,disableFailed", "unlocked,disabled,failed,coldstandby,");
-      StateTable.put("unlocked,enabled,dependency,providingservice,enableNotFailed", "unlocked,enabled,null,providingservice,");
-      StateTable.put("unlocked,enabled,dependency,providingservice,disableDependency", "unlocked,disabled,dependency,coldstandby,");
-      StateTable.put("unlocked,enabled,dependency,providingservice,enableNoDependency", "unlocked,enabled,null,providingservice,");
-      StateTable.put("unlocked,enabled,dependency,providingservice,promote", "unlocked,enabled,null,providingservice,");
-      StateTable.put("unlocked,enabled,dependency,providingservice,demote", "unlocked,enabled,null,hotstandby,");
-      StateTable.put("unlocked,enabled,dependency.failed,null,lock", "locked,enabled,null,null,");
-      StateTable.put("unlocked,enabled,dependency.failed,null,unlock", "unlocked,enabled,null,null,");
-      StateTable.put("unlocked,enabled,dependency.failed,null,disableFailed", "unlocked,disabled,failed,null,");
-      StateTable.put("unlocked,enabled,dependency.failed,null,enableNotFailed", "unlocked,enabled,null,null,");
-      StateTable.put("unlocked,enabled,dependency.failed,null,disableDependency", "unlocked,disabled,dependency,null,");
-      StateTable.put("unlocked,enabled,dependency.failed,null,enableNoDependency", "unlocked,enabled,null,null,");
-      StateTable.put("unlocked,enabled,dependency.failed,null,promote", "unlocked,enabled,null,providingservice,");
-      StateTable.put("unlocked,enabled,dependency.failed,null,demote", "unlocked,enabled,null,hotstandby,");
-      StateTable.put("unlocked,enabled,dependency.failed,coldstandby,lock", "locked,enabled,null,coldstandby,");
-      StateTable.put("unlocked,enabled,dependency.failed,coldstandby,unlock", "unlocked,enabled,null,hotstandby,");
-      StateTable.put("unlocked,enabled,dependency.failed,coldstandby,disableFailed", "unlocked,disabled,failed,coldstandby,");
-      StateTable.put("unlocked,enabled,dependency.failed,coldstandby,enableNotFailed", "unlocked,enabled,null,hotstandby,");
-      StateTable.put("unlocked,enabled,dependency.failed,coldstandby,disableDependency", "unlocked,disabled,dependency,coldstandby,");
-      StateTable.put("unlocked,enabled,dependency.failed,coldstandby,enableNoDependency", "unlocked,enabled,null,hotstandby,");
-      StateTable.put("unlocked,enabled,dependency.failed,coldstandby,promote", "unlocked,enabled,null,providingservice,");
-      StateTable.put("unlocked,enabled,dependency.failed,coldstandby,demote", "unlocked,enabled,null,hotstandby,");
-      StateTable.put("unlocked,enabled,dependency.failed,hotstandby,lock", "locked,enabled,null,coldstandby,");
-      StateTable.put("unlocked,enabled,dependency.failed,hotstandby,unlock", "unlocked,enabled,null,hotstandby,");
-      StateTable.put("unlocked,enabled,dependency.failed,hotstandby,disableFailed", "unlocked,disabled,failed,coldstandby,");
-      StateTable.put("unlocked,enabled,dependency.failed,hotstandby,enableNotFailed", "unlocked,enabled,null,hotstandby,");
-      StateTable.put("unlocked,enabled,dependency.failed,hotstandby,disableDependency", "unlocked,disabled,dependency,coldstandby,");
-      StateTable.put("unlocked,enabled,dependency.failed,hotstandby,enableNoDependency", "unlocked,enabled,null,hotstandby,");
-      StateTable.put("unlocked,enabled,dependency.failed,hotstandby,promote", "unlocked,enabled,null,providingservice,");
-      StateTable.put("unlocked,enabled,dependency.failed,hotstandby,demote", "unlocked,enabled,null,hotstandby,");
-      StateTable.put("unlocked,enabled,dependency.failed,providingservice,lock", "locked,enabled,null,coldstandby,");
-      StateTable.put("unlocked,enabled,dependency.failed,providingservice,unlock", "unlocked,enabled,null,providingservice,");
-      StateTable.put("unlocked,enabled,dependency.failed,providingservice,disableFailed", "unlocked,disabled,failed,coldstandby,");
-      StateTable.put("unlocked,enabled,dependency.failed,providingservice,enableNotFailed", "unlocked,enabled,null,providingservice,");
-      StateTable.put("unlocked,enabled,dependency.failed,providingservice,disableDependency", "unlocked,disabled,dependency,coldstandby,");
-      StateTable.put("unlocked,enabled,dependency.failed,providingservice,enableNoDependency", "unlocked,enabled,null,providingservice,");
-      StateTable.put("unlocked,enabled,dependency.failed,providingservice,promote", "unlocked,enabled,null,providingservice,");
-      StateTable.put("unlocked,enabled,dependency.failed,providingservice,demote", "unlocked,enabled,null,hotstandby,");
-      StateTable.put("unlocked,disabled,null,null,lock", "locked,disabled,null,null,");
-      StateTable.put("unlocked,disabled,null,null,unlock", "unlocked,disabled,null,null,");
-      StateTable.put("unlocked,disabled,null,null,disableFailed", "unlocked,disabled,failed,null,");
-      StateTable.put("unlocked,disabled,null,null,enableNotFailed", "unlocked,enabled,null,null,");
-      StateTable.put("unlocked,disabled,null,null,disableDependency", "unlocked,disabled,dependency,null,");
-      StateTable.put("unlocked,disabled,null,null,enableNoDependency", "unlocked,enabled,null,null,");
-      StateTable.put("unlocked,disabled,null,null,promote", "unlocked,disabled,null,coldstandby,StandbyStatusException");
-      StateTable.put("unlocked,disabled,null,null,demote", "unlocked,disabled,null,coldstandby,");
-      StateTable.put("unlocked,disabled,null,coldstandby,lock", "locked,disabled,null,coldstandby,");
-      StateTable.put("unlocked,disabled,null,coldstandby,unlock", "unlocked,disabled,null,coldstandby,");
-      StateTable.put("unlocked,disabled,null,coldstandby,disableFailed", "unlocked,disabled,failed,coldstandby,");
-      StateTable.put("unlocked,disabled,null,coldstandby,enableNotFailed", "unlocked,enabled,null,hotstandby,");
-      StateTable.put("unlocked,disabled,null,coldstandby,disableDependency", "unlocked,disabled,dependency,coldstandby,");
-      StateTable.put("unlocked,disabled,null,coldstandby,enableNoDependency", "unlocked,enabled,null,hotstandby,");
-      StateTable.put("unlocked,disabled,null,coldstandby,promote", "unlocked,disabled,null,coldstandby,StandbyStatusException");
-      StateTable.put("unlocked,disabled,null,coldstandby,demote", "unlocked,disabled,null,coldstandby,");
-      StateTable.put("unlocked,disabled,null,hotstandby,lock", "locked,disabled,null,coldstandby,");
-      StateTable.put("unlocked,disabled,null,hotstandby,unlock", "unlocked,disabled,null,coldstandby,");
-      StateTable.put("unlocked,disabled,null,hotstandby,disableFailed", "unlocked,disabled,failed,coldstandby,");
-      StateTable.put("unlocked,disabled,null,hotstandby,enableNotFailed", "unlocked,enabled,null,hotstandby,");
-      StateTable.put("unlocked,disabled,null,hotstandby,disableDependency", "unlocked,disabled,dependency,coldstandby,");
-      StateTable.put("unlocked,disabled,null,hotstandby,enableNoDependency", "unlocked,enabled,null,hotstandby,");
-      StateTable.put("unlocked,disabled,null,hotstandby,promote", "unlocked,disabled,null,coldstandby,StandbyStatusException");
-      StateTable.put("unlocked,disabled,null,hotstandby,demote", "unlocked,disabled,null,coldstandby,");
-      StateTable.put("unlocked,disabled,null,providingservice,lock", "locked,disabled,null,coldstandby,");
-      StateTable.put("unlocked,disabled,null,providingservice,unlock", "unlocked,disabled,null,coldstandby,");
-      StateTable.put("unlocked,disabled,null,providingservice,disableFailed", "unlocked,disabled,failed,coldstandby,");
-      StateTable.put("unlocked,disabled,null,providingservice,enableNotFailed", "unlocked,enabled,null,hotstandby,");
-      StateTable.put("unlocked,disabled,null,providingservice,disableDependency", "unlocked,disabled,dependency,coldstandby,");
-      StateTable.put("unlocked,disabled,null,providingservice,enableNoDependency", "unlocked,enabled,null,hotstandby,");
-      StateTable.put("unlocked,disabled,null,providingservice,promote", "unlocked,disabled,null,coldstandby,StandbyStatusException");
-      StateTable.put("unlocked,disabled,null,providingservice,demote", "unlocked,disabled,null,coldstandby,");
-      StateTable.put("unlocked,disabled,failed,null,lock", "locked,disabled,failed,null,");
-      StateTable.put("unlocked,disabled,failed,null,unlock", "unlocked,disabled,failed,null,");
-      StateTable.put("unlocked,disabled,failed,null,disableFailed", "unlocked,disabled,failed,null,");
-      StateTable.put("unlocked,disabled,failed,null,enableNotFailed", "unlocked,enabled,null,null,");
-      StateTable.put("unlocked,disabled,failed,null,disableDependency", "unlocked,disabled,dependency.failed,null,");
-      StateTable.put("unlocked,disabled,failed,null,enableNoDependency", "unlocked,disabled,failed,null,");
-      StateTable.put("unlocked,disabled,failed,null,promote", "unlocked,disabled,failed,coldstandby,StandbyStatusException");
-      StateTable.put("unlocked,disabled,failed,null,demote", "unlocked,disabled,failed,coldstandby,");
-      StateTable.put("unlocked,disabled,failed,coldstandby,lock", "locked,disabled,failed,coldstandby,");
-      StateTable.put("unlocked,disabled,failed,coldstandby,unlock", "unlocked,disabled,failed,coldstandby,");
-      StateTable.put("unlocked,disabled,failed,coldstandby,disableFailed", "unlocked,disabled,failed,coldstandby,");
-      StateTable.put("unlocked,disabled,failed,coldstandby,enableNotFailed", "unlocked,enabled,null,hotstandby,");
-      StateTable.put("unlocked,disabled,failed,coldstandby,disableDependency", "unlocked,disabled,dependency.failed,coldstandby,");
-      StateTable.put("unlocked,disabled,failed,coldstandby,enableNoDependency", "unlocked,disabled,failed,coldstandby,");
-      StateTable.put("unlocked,disabled,failed,coldstandby,promote", "unlocked,disabled,failed,coldstandby,StandbyStatusException");
-      StateTable.put("unlocked,disabled,failed,coldstandby,demote", "unlocked,disabled,failed,coldstandby,");
-      StateTable.put("unlocked,disabled,failed,hotstandby,lock", "locked,disabled,failed,coldstandby,");
-      StateTable.put("unlocked,disabled,failed,hotstandby,unlock", "unlocked,disabled,failed,coldstandby,");
-      StateTable.put("unlocked,disabled,failed,hotstandby,disableFailed", "unlocked,disabled,failed,coldstandby,");
-      StateTable.put("unlocked,disabled,failed,hotstandby,enableNotFailed", "unlocked,enabled,null,hotstandby,");
-      StateTable.put("unlocked,disabled,failed,hotstandby,disableDependency", "unlocked,disabled,dependency.failed,coldstandby,");
-      StateTable.put("unlocked,disabled,failed,hotstandby,enableNoDependency", "unlocked,disabled,failed,coldstandby,");
-      StateTable.put("unlocked,disabled,failed,hotstandby,promote", "unlocked,disabled,failed,coldstandby,StandbyStatusException");
-      StateTable.put("unlocked,disabled,failed,hotstandby,demote", "unlocked,disabled,failed,coldstandby,");
-      StateTable.put("unlocked,disabled,failed,providingservice,lock", "locked,disabled,failed,coldstandby,");
-      StateTable.put("unlocked,disabled,failed,providingservice,unlock", "unlocked,disabled,failed,coldstandby,");
-      StateTable.put("unlocked,disabled,failed,providingservice,disableFailed", "unlocked,disabled,failed,coldstandby,");
-      StateTable.put("unlocked,disabled,failed,providingservice,enableNotFailed", "unlocked,enabled,null,hotstandby,");
-      StateTable.put("unlocked,disabled,failed,providingservice,disableDependency", "unlocked,disabled,dependency.failed,coldstandby,");
-      StateTable.put("unlocked,disabled,failed,providingservice,enableNoDependency", "unlocked,disabled,failed,coldstandby,");
-      StateTable.put("unlocked,disabled,failed,providingservice,promote", "unlocked,disabled,failed,coldstandby,StandbyStatusException");
-      StateTable.put("unlocked,disabled,failed,providingservice,demote", "unlocked,disabled,failed,coldstandby,");
-      StateTable.put("unlocked,disabled,dependency,null,lock", "locked,disabled,dependency,null,");
-      StateTable.put("unlocked,disabled,dependency,null,unlock", "unlocked,disabled,dependency,null,");
-      StateTable.put("unlocked,disabled,dependency,null,disableFailed", "unlocked,disabled,dependency.failed,null,");
-      StateTable.put("unlocked,disabled,dependency,null,enableNotFailed", "unlocked,disabled,dependency,null,");
-      StateTable.put("unlocked,disabled,dependency,null,disableDependency", "unlocked,disabled,dependency,null,");
-      StateTable.put("unlocked,disabled,dependency,null,enableNoDependency", "unlocked,enabled,null,null,");
-      StateTable.put("unlocked,disabled,dependency,null,promote", "unlocked,disabled,dependency,coldstandby,StandbyStatusException");
-      StateTable.put("unlocked,disabled,dependency,null,demote", "unlocked,disabled,dependency,coldstandby,");
-      StateTable.put("unlocked,disabled,dependency,coldstandby,lock", "locked,disabled,dependency,coldstandby,");
-      StateTable.put("unlocked,disabled,dependency,coldstandby,unlock", "unlocked,disabled,dependency,coldstandby,");
-      StateTable.put("unlocked,disabled,dependency,coldstandby,disableFailed", "unlocked,disabled,dependency.failed,coldstandby,");
-      StateTable.put("unlocked,disabled,dependency,coldstandby,enableNotFailed", "unlocked,disabled,dependency,coldstandby,");
-      StateTable.put("unlocked,disabled,dependency,coldstandby,disableDependency", "unlocked,disabled,dependency,coldstandby,");
-      StateTable.put("unlocked,disabled,dependency,coldstandby,enableNoDependency", "unlocked,enabled,null,hotstandby,");
-      StateTable.put("unlocked,disabled,dependency,coldstandby,promote", "unlocked,disabled,dependency,coldstandby,StandbyStatusException");
-      StateTable.put("unlocked,disabled,dependency,coldstandby,demote", "unlocked,disabled,dependency,coldstandby,");
-      StateTable.put("unlocked,disabled,dependency,hotstandby,lock", "locked,disabled,dependency,coldstandby,");
-      StateTable.put("unlocked,disabled,dependency,hotstandby,unlock", "unlocked,disabled,dependency,coldstandby,");
-      StateTable.put("unlocked,disabled,dependency,hotstandby,disableFailed", "unlocked,disabled,dependency.failed,coldstandby,");
-      StateTable.put("unlocked,disabled,dependency,hotstandby,enableNotFailed", "unlocked,disabled,dependency,coldstandby,");
-      StateTable.put("unlocked,disabled,dependency,hotstandby,disableDependency", "unlocked,disabled,dependency,coldstandby,");
-      StateTable.put("unlocked,disabled,dependency,hotstandby,enableNoDependency", "unlocked,enabled,null,hotstandby,");
-      StateTable.put("unlocked,disabled,dependency,hotstandby,promote", "unlocked,disabled,dependency,coldstandby,StandbyStatusException");
-      StateTable.put("unlocked,disabled,dependency,hotstandby,demote", "unlocked,disabled,dependency,coldstandby,");
-      StateTable.put("unlocked,disabled,dependency,providingservice,lock", "locked,disabled,dependency,coldstandby,");
-      StateTable.put("unlocked,disabled,dependency,providingservice,unlock", "unlocked,disabled,dependency,coldstandby,");
-      StateTable.put("unlocked,disabled,dependency,providingservice,disableFailed", "unlocked,disabled,dependency.failed,coldstandby,");
-      StateTable.put("unlocked,disabled,dependency,providingservice,enableNotFailed", "unlocked,disabled,dependency,coldstandby,");
-      StateTable.put("unlocked,disabled,dependency,providingservice,disableDependency", "unlocked,disabled,dependency,coldstandby,");
-      StateTable.put("unlocked,disabled,dependency,providingservice,enableNoDependency", "unlocked,enabled,null,hotstandby,");
-      StateTable.put("unlocked,disabled,dependency,providingservice,promote", "unlocked,disabled,dependency,coldstandby,StandbyStatusException");
-      StateTable.put("unlocked,disabled,dependency,providingservice,demote", "unlocked,disabled,dependency,coldstandby,");
-      StateTable.put("unlocked,disabled,dependency.failed,null,lock", "locked,disabled,dependency.failed,null,");
-      StateTable.put("unlocked,disabled,dependency.failed,null,unlock", "unlocked,disabled,dependency.failed,null,");
-      StateTable.put("unlocked,disabled,dependency.failed,null,disableFailed", "unlocked,disabled,dependency.failed,null,");
-      StateTable.put("unlocked,disabled,dependency.failed,null,enableNotFailed", "unlocked,disabled,dependency,null,");
-      StateTable.put("unlocked,disabled,dependency.failed,null,disableDependency", "unlocked,disabled,dependency.failed,null,");
-      StateTable.put("unlocked,disabled,dependency.failed,null,enableNoDependency", "unlocked,disabled,failed,null,");
-      StateTable.put("unlocked,disabled,dependency.failed,null,promote", "unlocked,disabled,dependency.failed,coldstandby,StandbyStatusException");
-      StateTable.put("unlocked,disabled,dependency.failed,null,demote", "unlocked,disabled,dependency.failed,coldstandby,");
-      StateTable.put("unlocked,disabled,dependency.failed,coldstandby,lock", "locked,disabled,dependency.failed,coldstandby,");
-      StateTable.put("unlocked,disabled,dependency.failed,coldstandby,unlock", "unlocked,disabled,dependency.failed,coldstandby,");
-      StateTable.put("unlocked,disabled,dependency.failed,coldstandby,disableFailed", "unlocked,disabled,dependency.failed,coldstandby,");
-      StateTable.put("unlocked,disabled,dependency.failed,coldstandby,enableNotFailed", "unlocked,disabled,dependency,coldstandby,");
-      StateTable.put("unlocked,disabled,dependency.failed,coldstandby,disableDependency", "unlocked,disabled,dependency.failed,coldstandby,");
-      StateTable.put("unlocked,disabled,dependency.failed,coldstandby,enableNoDependency", "unlocked,disabled,failed,coldstandby,");
-      StateTable.put("unlocked,disabled,dependency.failed,coldstandby,promote", "unlocked,disabled,dependency.failed,coldstandby,StandbyStatusException");
-      StateTable.put("unlocked,disabled,dependency.failed,coldstandby,demote", "unlocked,disabled,dependency.failed,coldstandby,");
-      StateTable.put("unlocked,disabled,dependency.failed,hotstandby,lock", "locked,disabled,dependency.failed,coldstandby,");
-      StateTable.put("unlocked,disabled,dependency.failed,hotstandby,unlock", "unlocked,disabled,dependency.failed,coldstandby,");
-      StateTable.put("unlocked,disabled,dependency.failed,hotstandby,disableFailed", "unlocked,disabled,dependency.failed,coldstandby,");
-      StateTable.put("unlocked,disabled,dependency.failed,hotstandby,enableNotFailed", "unlocked,disabled,dependency,coldstandby,");
-      StateTable.put("unlocked,disabled,dependency.failed,hotstandby,disableDependency", "unlocked,disabled,dependency.failed,coldstandby,");
-      StateTable.put("unlocked,disabled,dependency.failed,hotstandby,enableNoDependency", "unlocked,disabled,failed,coldstandby,");
-      StateTable.put("unlocked,disabled,dependency.failed,hotstandby,promote", "unlocked,disabled,dependency.failed,coldstandby,StandbyStatusException");
-      StateTable.put("unlocked,disabled,dependency.failed,hotstandby,demote", "unlocked,disabled,dependency.failed,coldstandby,");
-      StateTable.put("unlocked,disabled,dependency.failed,providingservice,lock", "locked,disabled,dependency.failed,coldstandby,");
-      StateTable.put("unlocked,disabled,dependency.failed,providingservice,unlock", "unlocked,disabled,dependency.failed,coldstandby,");
-      StateTable.put("unlocked,disabled,dependency.failed,providingservice,disableFailed", "unlocked,disabled,dependency.failed,coldstandby,");
-      StateTable.put("unlocked,disabled,dependency.failed,providingservice,enableNotFailed", "unlocked,disabled,dependency,coldstandby,");
-      StateTable.put("unlocked,disabled,dependency.failed,providingservice,disableDependency", "unlocked,disabled,dependency.failed,coldstandby,");
-      StateTable.put("unlocked,disabled,dependency.failed,providingservice,enableNoDependency", "unlocked,disabled,failed,coldstandby,");
-      StateTable.put("unlocked,disabled,dependency.failed,providingservice,promote", "unlocked,disabled,dependency.failed,coldstandby,StandbyStatusException");
-      StateTable.put("unlocked,disabled,dependency.failed,providingservice,demote", "unlocked,disabled,dependency.failed,coldstandby,");
-      StateTable.put("locked,enabled,null,null,lock", "locked,enabled,null,null,");
-      StateTable.put("locked,enabled,null,null,unlock", "unlocked,enabled,null,null,");
-      StateTable.put("locked,enabled,null,null,disableFailed", "locked,disabled,failed,null,");
-      StateTable.put("locked,enabled,null,null,enableNotFailed", "locked,enabled,null,null,");
-      StateTable.put("locked,enabled,null,null,disableDependency", "locked,disabled,dependency,null,");
-      StateTable.put("locked,enabled,null,null,enableNoDependency", "locked,enabled,null,null,");
-      StateTable.put("locked,enabled,null,null,promote", "locked,enabled,null,coldstandby,StandbyStatusException");
-      StateTable.put("locked,enabled,null,null,demote", "locked,enabled,null,coldstandby,");
-      StateTable.put("locked,enabled,null,coldstandby,lock", "locked,enabled,null,coldstandby,");
-      StateTable.put("locked,enabled,null,coldstandby,unlock", "unlocked,enabled,null,hotstandby,");
-      StateTable.put("locked,enabled,null,coldstandby,disableFailed", "locked,disabled,failed,coldstandby,");
-      StateTable.put("locked,enabled,null,coldstandby,enableNotFailed", "locked,enabled,null,coldstandby,");
-      StateTable.put("locked,enabled,null,coldstandby,disableDependency", "locked,disabled,dependency,coldstandby,");
-      StateTable.put("locked,enabled,null,coldstandby,enableNoDependency", "locked,enabled,null,coldstandby,");
-      StateTable.put("locked,enabled,null,coldstandby,promote", "locked,enabled,null,coldstandby,StandbyStatusException");
-      StateTable.put("locked,enabled,null,coldstandby,demote", "locked,enabled,null,coldstandby,");
-      StateTable.put("locked,enabled,null,hotstandby,lock", "locked,enabled,null,coldstandby,");
-      StateTable.put("locked,enabled,null,hotstandby,unlock", "unlocked,enabled,null,hotstandby,");
-      StateTable.put("locked,enabled,null,hotstandby,disableFailed", "locked,disabled,failed,coldstandby,");
-      StateTable.put("locked,enabled,null,hotstandby,enableNotFailed", "locked,enabled,null,coldstandby,");
-      StateTable.put("locked,enabled,null,hotstandby,disableDependency", "locked,disabled,dependency,coldstandby,");
-      StateTable.put("locked,enabled,null,hotstandby,enableNoDependency", "locked,enabled,null,coldstandby,");
-      StateTable.put("locked,enabled,null,hotstandby,promote", "locked,enabled,null,coldstandby,StandbyStateException");
-      StateTable.put("locked,enabled,null,hotstandby,demote", "locked,enabled,null,coldstandby,");
-      StateTable.put("locked,enabled,null,providingservice,lock", "locked,enabled,null,coldstandby,");
-      StateTable.put("locked,enabled,null,providingservice,unlock", "unlocked,enabled,null,hotstandby,");
-      StateTable.put("locked,enabled,null,providingservice,disableFailed", "locked,disabled,failed,coldstandby,");
-      StateTable.put("locked,enabled,null,providingservice,enableNotFailed", "locked,enabled,null,coldstandby,");
-      StateTable.put("locked,enabled,null,providingservice,disableDependency", "locked,disabled,dependency,coldstandby,");
-      StateTable.put("locked,enabled,null,providingservice,enableNoDependency", "locked,enabled,null,coldstandby,");
-      StateTable.put("locked,enabled,null,providingservice,promote", "locked,enabled,null,coldstandby,StandbyStateException");
-      StateTable.put("locked,enabled,null,providingservice,demote", "locked,enabled,null,coldstandby,");
-      StateTable.put("locked,enabled,failed,null,lock", "locked,enabled,null,null,");
-      StateTable.put("locked,enabled,failed,null,unlock", "unlocked,enabled,null,null,");
-      StateTable.put("locked,enabled,failed,null,disableFailed", "locked,disabled,failed,null,");
-      StateTable.put("locked,enabled,failed,null,enableNotFailed", "locked,enabled,null,null,");
-      StateTable.put("locked,enabled,failed,null,disableDependency", "locked,disabled,dependency,null,");
-      StateTable.put("locked,enabled,failed,null,enableNoDependency", "locked,enabled,null,null,");
-      StateTable.put("locked,enabled,failed,null,promote", "locked,enabled,null,coldstandby,StandbyStatusException");
-      StateTable.put("locked,enabled,failed,null,demote", "locked,enabled,null,coldstandby,");
-      StateTable.put("locked,enabled,failed,coldstandby,lock", "locked,enabled,null,coldstandby,");
-      StateTable.put("locked,enabled,failed,coldstandby,unlock", "unlocked,enabled,null,hotstandby,");
-      StateTable.put("locked,enabled,failed,coldstandby,disableFailed", "locked,disabled,failed,coldstandby,");
-      StateTable.put("locked,enabled,failed,coldstandby,enableNotFailed", "locked,enabled,null,coldstandby,");
-      StateTable.put("locked,enabled,failed,coldstandby,disableDependency", "locked,disabled,dependency,coldstandby,");
-      StateTable.put("locked,enabled,failed,coldstandby,enableNoDependency", "locked,enabled,null,coldstandby,");
-      StateTable.put("locked,enabled,failed,coldstandby,promote", "locked,enabled,null,coldstandby,StandbyStatusException");
-      StateTable.put("locked,enabled,failed,coldstandby,demote", "locked,enabled,null,coldstandby,");
-      StateTable.put("locked,enabled,failed,hotstandby,lock", "locked,enabled,null,coldstandby,");
-      StateTable.put("locked,enabled,failed,hotstandby,unlock", "unlocked,enabled,null,hotstandby,");
-      StateTable.put("locked,enabled,failed,hotstandby,disableFailed", "locked,disabled,failed,coldstandby,");
-      StateTable.put("locked,enabled,failed,hotstandby,enableNotFailed", "locked,enabled,null,coldstandby,");
-      StateTable.put("locked,enabled,failed,hotstandby,disableDependency", "locked,disabled,dependency,coldstandby,");
-      StateTable.put("locked,enabled,failed,hotstandby,enableNoDependency", "locked,enabled,null,coldstandby,");
-      StateTable.put("locked,enabled,failed,hotstandby,promote", "locked,enabled,null,coldstandby,StandbyStatusException");
-      StateTable.put("locked,enabled,failed,hotstandby,demote", "locked,enabled,null,coldstandby,");
-      StateTable.put("locked,enabled,failed,providingservice,lock", "locked,enabled,null,coldstandby,");
-      StateTable.put("locked,enabled,failed,providingservice,unlock", "unlocked,enabled,null,hotstandby,");
-      StateTable.put("locked,enabled,failed,providingservice,disableFailed", "locked,disabled,failed,coldstandby,");
-      StateTable.put("locked,enabled,failed,providingservice,enableNotFailed", "locked,enabled,null,coldstandby,");
-      StateTable.put("locked,enabled,failed,providingservice,disableDependency", "locked,disabled,dependency,coldstandby,");
-      StateTable.put("locked,enabled,failed,providingservice,enableNoDependency", "locked,enabled,null,coldstandby,");
-      StateTable.put("locked,enabled,failed,providingservice,promote", "locked,enabled,null,coldstandby,StandbyStatusException");
-      StateTable.put("locked,enabled,failed,providingservice,demote", "locked,enabled,null,coldstandby,");
-      StateTable.put("locked,enabled,dependency,null,lock", "locked,enabled,null,null,");
-      StateTable.put("locked,enabled,dependency,null,unlock", "unlocked,enabled,null,null,");
-      StateTable.put("locked,enabled,dependency,null,disableFailed", "locked,disabled,failed,null,");
-      StateTable.put("locked,enabled,dependency,null,enableNotFailed", "locked,enabled,null,null,");
-      StateTable.put("locked,enabled,dependency,null,disableDependency", "locked,disabled,dependency,null,");
-      StateTable.put("locked,enabled,dependency,null,enableNoDependency", "locked,enabled,null,null,");
-      StateTable.put("locked,enabled,dependency,null,promote", "locked,enabled,null,coldstandby,StandbyStatusException");
-      StateTable.put("locked,enabled,dependency,null,demote", "locked,enabled,null,coldstandby,");
-      StateTable.put("locked,enabled,dependency,coldstandby,lock", "locked,enabled,null,coldstandby,");
-      StateTable.put("locked,enabled,dependency,coldstandby,unlock", "unlocked,enabled,null,hotstandby,");
-      StateTable.put("locked,enabled,dependency,coldstandby,disableFailed", "locked,disabled,failed,coldstandby,");
-      StateTable.put("locked,enabled,dependency,coldstandby,enableNotFailed", "locked,enabled,null,coldstandby,");
-      StateTable.put("locked,enabled,dependency,coldstandby,disableDependency", "locked,disabled,dependency,coldstandby,");
-      StateTable.put("locked,enabled,dependency,coldstandby,enableNoDependency", "locked,enabled,null,coldstandby,");
-      StateTable.put("locked,enabled,dependency,coldstandby,promote", "locked,enabled,null,coldstandby,StandbyStatusException");
-      StateTable.put("locked,enabled,dependency,coldstandby,demote", "locked,enabled,null,coldstandby,");
-      StateTable.put("locked,enabled,dependency,hotstandby,lock", "locked,enabled,null,coldstandby,");
-      StateTable.put("locked,enabled,dependency,hotstandby,unlock", "unlocked,enabled,null,hotstandby,");
-      StateTable.put("locked,enabled,dependency,hotstandby,disableFailed", "locked,disabled,failed,coldstandby,");
-      StateTable.put("locked,enabled,dependency,hotstandby,enableNotFailed", "locked,enabled,null,coldstandby,");
-      StateTable.put("locked,enabled,dependency,hotstandby,disableDependency", "locked,disabled,dependency,coldstandby,");
-      StateTable.put("locked,enabled,dependency,hotstandby,enableNoDependency", "locked,enabled,null,coldstandby,");
-      StateTable.put("locked,enabled,dependency,hotstandby,promote", "locked,enabled,null,coldstandby,StandbyStatusException");
-      StateTable.put("locked,enabled,dependency,hotstandby,demote", "locked,enabled,null,coldstandby,");
-      StateTable.put("locked,enabled,dependency,providingservice,lock", "locked,enabled,null,coldstandby,");
-      StateTable.put("locked,enabled,dependency,providingservice,unlock", "unlocked,enabled,null,hotstandby,");
-      StateTable.put("locked,enabled,dependency,providingservice,disableFailed", "locked,disabled,failed,coldstandby,");
-      StateTable.put("locked,enabled,dependency,providingservice,enableNotFailed", "locked,enabled,null,coldstandby,");
-      StateTable.put("locked,enabled,dependency,providingservice,disableDependency", "locked,disabled,dependency,coldstandby,");
-      StateTable.put("locked,enabled,dependency,providingservice,enableNoDependency", "locked,enabled,null,coldstandby,");
-      StateTable.put("locked,enabled,dependency,providingservice,promote", "locked,enabled,null,coldstandby,StandbyStatusException");
-      StateTable.put("locked,enabled,dependency,providingservice,demote", "locked,enabled,null,coldstandby,");
-      StateTable.put("locked,enabled,dependency.failed,null,lock", "locked,enabled,null,null,");
-      StateTable.put("locked,enabled,dependency.failed,null,unlock", "unlocked,enabled,null,null,");
-      StateTable.put("locked,enabled,dependency.failed,null,disableFailed", "locked,disabled,failed,null,");
-      StateTable.put("locked,enabled,dependency.failed,null,enableNotFailed", "locked,enabled,null,null,");
-      StateTable.put("locked,enabled,dependency.failed,null,disableDependency", "locked,disabled,dependency,null,");
-      StateTable.put("locked,enabled,dependency.failed,null,enableNoDependency", "locked,enabled,null,null,");
-      StateTable.put("locked,enabled,dependency.failed,null,promote", "locked,enabled,null,coldstandby,StandbyStatusException");
-      StateTable.put("locked,enabled,dependency.failed,null,demote", "locked,enabled,null,coldstandby,");
-      StateTable.put("locked,enabled,dependency.failed,coldstandby,lock", "locked,enabled,null,coldstandby,");
-      StateTable.put("locked,enabled,dependency.failed,coldstandby,unlock", "unlocked,enabled,null,hotstandby,");
-      StateTable.put("locked,enabled,dependency.failed,coldstandby,disableFailed", "locked,disabled,failed,coldstandby,");
-      StateTable.put("locked,enabled,dependency.failed,coldstandby,enableNotFailed", "locked,enabled,null,coldstandby,");
-      StateTable.put("locked,enabled,dependency.failed,coldstandby,disableDependency", "locked,disabled,dependency,coldstandby,");
-      StateTable.put("locked,enabled,dependency.failed,coldstandby,enableNoDependency", "locked,enabled,null,coldstandby,");
-      StateTable.put("locked,enabled,dependency.failed,coldstandby,promote", "locked,enabled,null,coldstandby,StandbyStatusException");
-      StateTable.put("locked,enabled,dependency.failed,coldstandby,demote", "locked,enabled,null,coldstandby,");
-      StateTable.put("locked,enabled,dependency.failed,hotstandby,lock", "locked,enabled,null,coldstandby,");
-      StateTable.put("locked,enabled,dependency.failed,hotstandby,unlock", "unlocked,enabled,null,hotstandby,");
-      StateTable.put("locked,enabled,dependency.failed,hotstandby,disableFailed", "locked,disabled,failed,coldstandby,");
-      StateTable.put("locked,enabled,dependency.failed,hotstandby,enableNotFailed", "locked,enabled,null,coldstandby,");
-      StateTable.put("locked,enabled,dependency.failed,hotstandby,disableDependency", "locked,disabled,dependency,coldstandby,");
-      StateTable.put("locked,enabled,dependency.failed,hotstandby,enableNoDependency", "locked,enabled,null,coldstandby,");
-      StateTable.put("locked,enabled,dependency.failed,hotstandby,promote", "locked,enabled,null,coldstandby,StandbyStatusException");
-      StateTable.put("locked,enabled,dependency.failed,hotstandby,demote", "locked,enabled,null,coldstandby,");
-      StateTable.put("locked,enabled,dependency.failed,providingservice,lock", "locked,enabled,null,coldstandby,");
-      StateTable.put("locked,enabled,dependency.failed,providingservice,unlock", "unlocked,enabled,null,hotstandby,");
-      StateTable.put("locked,enabled,dependency.failed,providingservice,disableFailed", "locked,disabled,failed,coldstandby,");
-      StateTable.put("locked,enabled,dependency.failed,providingservice,enableNotFailed", "locked,enabled,null,coldstandby,");
-      StateTable.put("locked,enabled,dependency.failed,providingservice,disableDependency", "locked,disabled,dependency,coldstandby,");
-      StateTable.put("locked,enabled,dependency.failed,providingservice,enableNoDependency", "locked,enabled,null,coldstandby,");
-      StateTable.put("locked,enabled,dependency.failed,providingservice,promote", "locked,enabled,null,coldstandby,StandbyStatusException");
-      StateTable.put("locked,enabled,dependency.failed,providingservice,demote", "locked,enabled,null,coldstandby,");
-      StateTable.put("locked,disabled,null,null,lock", "locked,disabled,null,null,");
-      StateTable.put("locked,disabled,null,null,unlock", "unlocked,disabled,null,null,");
-      StateTable.put("locked,disabled,null,null,disableFailed", "locked,disabled,failed,null,");
-      StateTable.put("locked,disabled,null,null,enableNotFailed", "locked,enabled,null,null,");
-      StateTable.put("locked,disabled,null,null,disableDependency", "locked,disabled,dependency,null,");
-      StateTable.put("locked,disabled,null,null,enableNoDependency", "locked,enabled,null,null,");
-      StateTable.put("locked,disabled,null,null,promote", "locked,disabled,null,coldstandby,StandbyStatusException");
-      StateTable.put("locked,disabled,null,null,demote", "locked,disabled,null,coldstandby,");
-      StateTable.put("locked,disabled,null,coldstandby,lock", "locked,disabled,null,coldstandby,");
-      StateTable.put("locked,disabled,null,coldstandby,unlock", "unlocked,disabled,null,coldstandby,");
-      StateTable.put("locked,disabled,null,coldstandby,disableFailed", "locked,disabled,failed,coldstandby,");
-      StateTable.put("locked,disabled,null,coldstandby,enableNotFailed", "locked,enabled,null,coldstandby,");
-      StateTable.put("locked,disabled,null,coldstandby,disableDependency", "locked,disabled,dependency,coldstandby,");
-      StateTable.put("locked,disabled,null,coldstandby,enableNoDependency", "locked,enabled,null,coldstandby,");
-      StateTable.put("locked,disabled,null,coldstandby,promote", "locked,disabled,null,coldstandby,StandbyStatusException");
-      StateTable.put("locked,disabled,null,coldstandby,demote", "locked,disabled,null,coldstandby,");
-      StateTable.put("locked,disabled,null,hotstandby,lock", "locked,disabled,null,coldstandby,");
-      StateTable.put("locked,disabled,null,hotstandby,unlock", "unlocked,disabled,null,coldstandby,");
-      StateTable.put("locked,disabled,null,hotstandby,disableFailed", "locked,disabled,failed,coldstandby,");
-      StateTable.put("locked,disabled,null,hotstandby,enableNotFailed", "locked,enabled,null,coldstandby,");
-      StateTable.put("locked,disabled,null,hotstandby,disableDependency", "locked,disabled,dependency,coldstandby,");
-      StateTable.put("locked,disabled,null,hotstandby,enableNoDependency", "locked,enabled,null,coldstandby,");
-      StateTable.put("locked,disabled,null,hotstandby,promote", "locked,disabled,null,coldstandby,StandbyStatusException");
-      StateTable.put("locked,disabled,null,hotstandby,demote", "locked,disabled,null,coldstandby,");
-      StateTable.put("locked,disabled,null,providingservice,lock", "locked,disabled,null,coldstandby,");
-      StateTable.put("locked,disabled,null,providingservice,unlock", "unlocked,disabled,null,coldstandby,");
-      StateTable.put("locked,disabled,null,providingservice,disableFailed", "locked,disabled,failed,coldstandby,");
-      StateTable.put("locked,disabled,null,providingservice,enableNotFailed", "locked,enabled,null,coldstandby,");
-      StateTable.put("locked,disabled,null,providingservice,disableDependency", "locked,disabled,dependency,coldstandby,");
-      StateTable.put("locked,disabled,null,providingservice,enableNoDependency", "locked,enabled,null,coldstandby,");
-      StateTable.put("locked,disabled,null,providingservice,promote", "locked,disabled,null,coldstandby,StandbyStatusException");
-      StateTable.put("locked,disabled,null,providingservice,demote", "locked,disabled,null,coldstandby,");
-      StateTable.put("locked,disabled,failed,null,lock", "locked,disabled,failed,null,");
-      StateTable.put("locked,disabled,failed,null,unlock", "unlocked,disabled,failed,null,");
-      StateTable.put("locked,disabled,failed,null,disableFailed", "locked,disabled,failed,null,");
-      StateTable.put("locked,disabled,failed,null,enableNotFailed", "locked,enabled,null,null,");
-      StateTable.put("locked,disabled,failed,null,disableDependency", "locked,disabled,dependency.failed,null,");
-      StateTable.put("locked,disabled,failed,null,enableNoDependency", "locked,disabled,failed,null,");
-      StateTable.put("locked,disabled,failed,null,promote", "locked,disabled,failed,coldstandby,StandbyStatusException");
-      StateTable.put("locked,disabled,failed,null,demote", "locked,disabled,failed,coldstandby,");
-      StateTable.put("locked,disabled,failed,coldstandby,lock", "locked,disabled,failed,coldstandby,");
-      StateTable.put("locked,disabled,failed,coldstandby,unlock", "unlocked,disabled,failed,coldstandby,");
-      StateTable.put("locked,disabled,failed,coldstandby,disableFailed", "locked,disabled,failed,coldstandby,");
-      StateTable.put("locked,disabled,failed,coldstandby,enableNotFailed", "locked,enabled,null,coldstandby,");
-      StateTable.put("locked,disabled,failed,coldstandby,disableDependency", "locked,disabled,dependency.failed,coldstandby,");
-      StateTable.put("locked,disabled,failed,coldstandby,enableNoDependency", "locked,disabled,failed,coldstandby,");
-      StateTable.put("locked,disabled,failed,coldstandby,promote", "locked,disabled,failed,coldstandby,StandbyStatusException");
-      StateTable.put("locked,disabled,failed,coldstandby,demote", "locked,disabled,failed,coldstandby,");
-      StateTable.put("locked,disabled,failed,hotstandby,lock", "locked,disabled,failed,coldstandby,");
-      StateTable.put("locked,disabled,failed,hotstandby,unlock", "unlocked,disabled,failed,coldstandby,");
-      StateTable.put("locked,disabled,failed,hotstandby,disableFailed", "locked,disabled,failed,coldstandby,");
-      StateTable.put("locked,disabled,failed,hotstandby,enableNotFailed", "locked,enabled,null,coldstandby,");
-      StateTable.put("locked,disabled,failed,hotstandby,disableDependency", "locked,disabled,dependency.failed,coldstandby,");
-      StateTable.put("locked,disabled,failed,hotstandby,enableNoDependency", "locked,disabled,failed,coldstandby,");
-      StateTable.put("locked,disabled,failed,hotstandby,promote", "locked,disabled,failed,coldstandby,StandbyStatusException");
-      StateTable.put("locked,disabled,failed,hotstandby,demote", "locked,disabled,failed,coldstandby,");
-      StateTable.put("locked,disabled,failed,providingservice,lock", "locked,disabled,failed,coldstandby,");
-      StateTable.put("locked,disabled,failed,providingservice,unlock", "unlocked,disabled,failed,coldstandby,");
-      StateTable.put("locked,disabled,failed,providingservice,disableFailed", "locked,disabled,failed,coldstandby,");
-      StateTable.put("locked,disabled,failed,providingservice,enableNotFailed", "locked,enabled,null,coldstandby,");
-      StateTable.put("locked,disabled,failed,providingservice,disableDependency", "locked,disabled,dependency.failed,coldstandby,");
-      StateTable.put("locked,disabled,failed,providingservice,enableNoDependency", "locked,disabled,failed,coldstandby,");
-      StateTable.put("locked,disabled,failed,providingservice,promote", "locked,disabled,failed,coldstandby,StandbyStatusException");
-      StateTable.put("locked,disabled,failed,providingservice,demote", "locked,disabled,failed,coldstandby,");
-      StateTable.put("locked,disabled,dependency,null,lock", "locked,disabled,dependency,null,");
-      StateTable.put("locked,disabled,dependency,null,unlock", "unlocked,disabled,dependency,null,");
-      StateTable.put("locked,disabled,dependency,null,disableFailed", "locked,disabled,dependency.failed,null,");
-      StateTable.put("locked,disabled,dependency,null,enableNotFailed", "locked,disabled,dependency,null,");
-      StateTable.put("locked,disabled,dependency,null,disableDependency", "locked,disabled,dependency,null,");
-      StateTable.put("locked,disabled,dependency,null,enableNoDependency", "locked,enabled,null,null,");
-      StateTable.put("locked,disabled,dependency,null,promote", "locked,disabled,dependency,coldstandby,StandbyStatusException");
-      StateTable.put("locked,disabled,dependency,null,demote", "locked,disabled,dependency,coldstandby,");
-      StateTable.put("locked,disabled,dependency,coldstandby,lock", "locked,disabled,dependency,coldstandby,");
-      StateTable.put("locked,disabled,dependency,coldstandby,unlock", "unlocked,disabled,dependency,coldstandby,");
-      StateTable.put("locked,disabled,dependency,coldstandby,disableFailed", "locked,disabled,dependency.failed,coldstandby,");
-      StateTable.put("locked,disabled,dependency,coldstandby,enableNotFailed", "locked,disabled,dependency,coldstandby,");
-      StateTable.put("locked,disabled,dependency,coldstandby,disableDependency", "locked,disabled,dependency,coldstandby,");
-      StateTable.put("locked,disabled,dependency,coldstandby,enableNoDependency", "locked,enabled,null,coldstandby,");
-      StateTable.put("locked,disabled,dependency,coldstandby,promote", "locked,disabled,dependency,coldstandby,StandbyStatusException");
-      StateTable.put("locked,disabled,dependency,coldstandby,demote", "locked,disabled,dependency,coldstandby,");
-      StateTable.put("locked,disabled,dependency,hotstandby,lock", "locked,disabled,dependency,coldstandby,");
-      StateTable.put("locked,disabled,dependency,hotstandby,unlock", "unlocked,disabled,dependency,coldstandby,");
-      StateTable.put("locked,disabled,dependency,hotstandby,disableFailed", "locked,disabled,dependency.failed,coldstandby,");
-      StateTable.put("locked,disabled,dependency,hotstandby,enableNotFailed", "locked,disabled,dependency,coldstandby,");
-      StateTable.put("locked,disabled,dependency,hotstandby,disableDependency", "locked,disabled,dependency,coldstandby,");
-      StateTable.put("locked,disabled,dependency,hotstandby,enableNoDependency", "locked,enabled,null,coldstandby,");
-      StateTable.put("locked,disabled,dependency,hotstandby,promote", "locked,disabled,dependency,coldstandby,StandbyStatusException");
-      StateTable.put("locked,disabled,dependency,hotstandby,demote", "locked,disabled,dependency,coldstandby,");
-      StateTable.put("locked,disabled,dependency,providingservice,lock", "locked,disabled,dependency,coldstandby,");
-      StateTable.put("locked,disabled,dependency,providingservice,unlock", "unlocked,disabled,dependency,coldstandby,");
-      StateTable.put("locked,disabled,dependency,providingservice,disableFailed", "locked,disabled,dependency.failed,coldstandby,");
-      StateTable.put("locked,disabled,dependency,providingservice,enableNotFailed", "locked,disabled,dependency,coldstandby,");
-      StateTable.put("locked,disabled,dependency,providingservice,disableDependency", "locked,disabled,dependency,coldstandby,");
-      StateTable.put("locked,disabled,dependency,providingservice,enableNoDependency", "locked,enabled,null,coldstandby,");
-      StateTable.put("locked,disabled,dependency,providingservice,promote", "locked,disabled,dependency,coldstandby,StandbyStatusException");
-      StateTable.put("locked,disabled,dependency,providingservice,demote", "locked,disabled,dependency,coldstandby,");
-      StateTable.put("locked,disabled,dependency.failed,null,lock", "locked,disabled,dependency.failed,null,");
-      StateTable.put("locked,disabled,dependency.failed,null,unlock", "unlocked,disabled,dependency.failed,null,");
-      StateTable.put("locked,disabled,dependency.failed,null,disableFailed", "locked,disabled,dependency.failed,null,");
-      StateTable.put("locked,disabled,dependency.failed,null,enableNotFailed", "locked,disabled,dependency,null,");
-      StateTable.put("locked,disabled,dependency.failed,null,disableDependency", "locked,disabled,dependency.failed,null,");
-      StateTable.put("locked,disabled,dependency.failed,null,enableNoDependency", "locked,disabled,failed,null,");
-      StateTable.put("locked,disabled,dependency.failed,null,promote", "locked,disabled,dependency.failed,coldstandby,StandbyStatusException");
-      StateTable.put("locked,disabled,dependency.failed,null,demote", "locked,disabled,dependency.failed,coldstandby,");
-      StateTable.put("locked,disabled,dependency.failed,coldstandby,lock", "locked,disabled,dependency.failed,coldstandby,");
-      StateTable.put("locked,disabled,dependency.failed,coldstandby,unlock", "unlocked,disabled,dependency.failed,coldstandby,");
-      StateTable.put("locked,disabled,dependency.failed,coldstandby,disableFailed", "locked,disabled,dependency.failed,coldstandby,");
-      StateTable.put("locked,disabled,dependency.failed,coldstandby,enableNotFailed", "locked,disabled,dependency,coldstandby,");
-      StateTable.put("locked,disabled,dependency.failed,coldstandby,disableDependency", "locked,disabled,dependency.failed,coldstandby,");
-      StateTable.put("locked,disabled,dependency.failed,coldstandby,enableNoDependency", "locked,disabled,failed,coldstandby,");
-      StateTable.put("locked,disabled,dependency.failed,coldstandby,promote", "locked,disabled,dependency.failed,coldstandby,StandbyStatusException");
-      StateTable.put("locked,disabled,dependency.failed,coldstandby,demote", "locked,disabled,dependency.failed,coldstandby,");
-      StateTable.put("locked,disabled,dependency.failed,hotstandby,lock", "locked,disabled,dependency.failed,coldstandby,");
-      StateTable.put("locked,disabled,dependency.failed,hotstandby,unlock", "unlocked,disabled,dependency.failed,coldstandby,");
-      StateTable.put("locked,disabled,dependency.failed,hotstandby,disableFailed", "locked,disabled,dependency.failed,coldstandby,");
-      StateTable.put("locked,disabled,dependency.failed,hotstandby,enableNotFailed", "locked,disabled,dependency,coldstandby,");
-      StateTable.put("locked,disabled,dependency.failed,hotstandby,disableDependency", "locked,disabled,dependency.failed,coldstandby,");
-      StateTable.put("locked,disabled,dependency.failed,hotstandby,enableNoDependency", "locked,disabled,failed,coldstandby,");
-      StateTable.put("locked,disabled,dependency.failed,hotstandby,promote", "locked,disabled,dependency.failed,coldstandby,StandbyStatusException");
-      StateTable.put("locked,disabled,dependency.failed,hotstandby,demote", "locked,disabled,dependency.failed,coldstandby,");
-      StateTable.put("locked,disabled,dependency.failed,providingservice,lock", "locked,disabled,dependency.failed,coldstandby,");
-      StateTable.put("locked,disabled,dependency.failed,providingservice,unlock", "unlocked,disabled,dependency.failed,coldstandby,");
-      StateTable.put("locked,disabled,dependency.failed,providingservice,disableFailed", "locked,disabled,dependency.failed,coldstandby,");
-      StateTable.put("locked,disabled,dependency.failed,providingservice,enableNotFailed", "locked,disabled,dependency,coldstandby,");
-      StateTable.put("locked,disabled,dependency.failed,providingservice,disableDependency", "locked,disabled,dependency.failed,coldstandby,");
-      StateTable.put("locked,disabled,dependency.failed,providingservice,enableNoDependency", "locked,disabled,failed,coldstandby,");
-      StateTable.put("locked,disabled,dependency.failed,providingservice,promote", "locked,disabled,dependency.failed,coldstandby,StandbyStatusException");
-      StateTable.put("locked,disabled,dependency.failed,providingservice,demote", "locked,disabled,dependency.failed,coldstandby,");
-  }
-  
-  public void displayStateTable()
-  {
-         Set<?> set = StateTable.entrySet();
-      Iterator<?> iter = set.iterator();
-         while(iter.hasNext()) {
-             Map.Entry<?, ?> me = (Map.Entry<?, ?>)iter.next();
-             String key = (String)me.getKey() + ((String)me.getValue()).replace(".",  ",");
-             if(logger.isDebugEnabled()){
-                 logger.debug("{}", key); 
-             }
-         }
-  }
+        while (iter.hasNext()) {
+            Map.Entry<?, ?> me = (Map.Entry<?, ?>) iter.next();
+            String key = (String) me.getKey() + ((String) me.getValue()).replace(".", ",");
+            if (logger.isDebugEnabled()) {
+                logger.debug("{}", key);
+            }
+        }
+    }
 }
index 7499842..0f4ea2f 100644 (file)
 package org.onap.policy.common.im;
 
 public class StateTransitionException extends IntegrityMonitorException {
-       private static final long serialVersionUID = 1L;
-       public StateTransitionException() {
-               super();
-       }
-       public StateTransitionException(String message) {
-               super(message);
-       }
+    private static final long serialVersionUID = 1L;
 
-       public StateTransitionException(Throwable cause) {
-               super(cause);
-       }
-       public StateTransitionException(String message, Throwable cause) {
-               super(message, cause);
-       }
+    public StateTransitionException() {
+        super();
+    }
+
+    public StateTransitionException(String message) {
+        super(message);
+    }
+
+    public StateTransitionException(Throwable cause) {
+        super(cause);
+    }
+
+    public StateTransitionException(String message, Throwable cause) {
+        super(message, cause);
+    }
 
 }
index eb1d9f8..bd7ed7b 100644 (file)
@@ -32,197 +32,197 @@ import javax.management.MalformedObjectNameException;
 import javax.management.NotCompliantMBeanException;
 import javax.management.ObjectName;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 import org.onap.policy.common.im.IntegrityMonitor;
 import org.onap.policy.common.im.IntegrityMonitorException;
 import org.onap.policy.common.im.StateManagement;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * Base class for component MBeans.
  */
 public class ComponentAdmin implements ComponentAdminMBean {
-       private static final String STATE_MANAGER = "stateManager";
-
-       private static final Logger logger = LoggerFactory.getLogger(ComponentAdmin.class.getName());
-
-       private final String name;
-       private MBeanServer registeredMBeanServer;
-       private ObjectName registeredObjectName;
-       private IntegrityMonitor integrityMonitor = null;
-       private StateManagement stateManager = null;
-
-       /**
-        * Constructor.
-        * @param name the MBean name
-        * @param integrityMonitor
-        * @param stateManager  
-        * @throws ComponentAdminException 
-        */
-       public ComponentAdmin(String name, IntegrityMonitor integrityMonitor, StateManagement stateManager) throws ComponentAdminException {
-               if ((name == null) || (integrityMonitor == null) || (stateManager == null)) {
-                       logger.error("Error: ComponentAdmin constructor called with invalid input");
-                       throw new ComponentAdminException("null input");
-               }
-
-               this.name = "ONAP_POLICY_COMP:name=" + name;
-               this.integrityMonitor = integrityMonitor;
-               this.stateManager = stateManager;
-               
-               try {
-                       register();
-               } catch (ComponentAdminException e) {
-                       logger.debug("Failed to register ComponentAdmin MBean");
-                       throw e;
-               }
-       }
-       
-       /**
-        * Registers with the MBean server.
-        * @throws ComponentAdminException a JMX exception
-        */
-       public synchronized void register() throws ComponentAdminException {
-
-               try {
-                       logger.debug("Registering {} MBean", name);
-
-                       MBeanServer mbeanServer = findMBeanServer();
-
-                       if (mbeanServer == null) {
-                               return;
-                       }
-
-                       ObjectName objectName = new ObjectName(name);
-
-                       if (mbeanServer.isRegistered(objectName)) {
-                               logger.debug("Unregistering a previously registered {} MBean", name);
-                               mbeanServer.unregisterMBean(objectName);
-                       }
-
-                       mbeanServer.registerMBean(this, objectName);
-                       registeredMBeanServer = mbeanServer;
-                       registeredObjectName = objectName;
-                       
-               } catch (MalformedObjectNameException | MBeanRegistrationException | InstanceNotFoundException | InstanceAlreadyExistsException | NotCompliantMBeanException e) {
-                       throw new ComponentAdminException(e);
-               }
-       }
-       
-       /**
-        * Checks if this MBean is registered with the MBeanServer.
-        * @return true if this MBean is registered with the MBeanServer.
-        */
-       public boolean isRegistered() {
-               return registeredObjectName != null;
-       }
-       
-       /**
-        * Unregisters with the MBean server.
-        * @throws ComponentAdminException a JMX exception
-        */
-       public synchronized void unregister() throws ComponentAdminException {
-
-               if (registeredObjectName == null) {
-                       return;
-               }
-
-
-               try {
-                       registeredMBeanServer.unregisterMBean(registeredObjectName);
-                       
-               } catch (MBeanRegistrationException | InstanceNotFoundException e) {
-                       throw new ComponentAdminException(e);
-               }
-               
-               registeredMBeanServer = null;
-               registeredObjectName = null;
-       }
-
-       /**
-        * {@inheritDoc}
-        */
-       @Override
-       public String toString() {
-               return ComponentAdmin.class.getSimpleName() + "[" + name + "]";
-       }
-       
-       /**
-        * Finds the MBeanServer.
-        * @return the MBeanServer, or null if it is not found
-        */
-       public static MBeanServer findMBeanServer() {
-               ArrayList<MBeanServer> mbeanServers =
-                       MBeanServerFactory.findMBeanServer(null);
-
-               Iterator<MBeanServer> iter = mbeanServers.iterator();
-               MBeanServer mbeanServer;
-
-               while (iter.hasNext()) {
-                       mbeanServer = iter.next();
-                       if ("DefaultDomain".equals(mbeanServer.getDefaultDomain())) {
-                               return mbeanServer;
-                       }
-               }
-
-               return null;
-       }
-
-       /**
-        * Creates the MBeanServer (intended for unit testing only).
-        * @return the MBeanServer
-        */
-       public static MBeanServer createMBeanServer() {
-               return MBeanServerFactory.createMBeanServer("DefaultDomain");
-       }
-       
-       /**
-        * Get the MBean object name for the specified feature name.
-        * @param componentName component name
-        * @return the object name
-        * @throws MalformedObjectNameException a JMX exception
-        */
-       public static ObjectName getObjectName(String componentName)
-                       throws MalformedObjectNameException {
-               return new ObjectName("ONAP_POLICY_COMP:name=" + componentName);
-       }
-
-       @Override
-       public void test() throws IntegrityMonitorException {
-               // Call evaluateSanity on IntegrityMonitor to run the test
-               logger.debug("test() called...");
-               if (integrityMonitor != null) {
-                       integrityMonitor.evaluateSanity();
-               }
-               else {
-                       logger.error("Unable to invoke test() - state manager instance is null");
-                       throw new ComponentAdminException(STATE_MANAGER);
-               }
-               
-       }
-
-       @Override
-       public void lock() throws IntegrityMonitorException {
-               logger.debug("lock() called...");
-               if (stateManager != null) {
-                       stateManager.lock();
-               }
-               else {
-                       logger.error("Unable to invoke lock() - state manager instance is null");
-                       throw new ComponentAdminException(STATE_MANAGER);
-               }
-       }
-
-       @Override
-       public void unlock() throws IntegrityMonitorException {
-               logger.debug("unlock() called...");
-               if (stateManager != null) {
-                       stateManager.unlock();
-               }
-               else {
-                       logger.error("Unable to invoke unlock() - state manager instance is null");
-                       throw new ComponentAdminException(STATE_MANAGER);
-               }
-               
-       }
+    private static final String STATE_MANAGER = "stateManager";
+
+    private static final Logger logger = LoggerFactory.getLogger(ComponentAdmin.class.getName());
+
+    private final String name;
+    private MBeanServer registeredMBeanServer;
+    private ObjectName registeredObjectName;
+    private IntegrityMonitor integrityMonitor = null;
+    private StateManagement stateManager = null;
+
+    /**
+     * Constructor.
+     * 
+     * @param name the MBean name
+     * @param integrityMonitor the integrity monitor
+     * @param stateManager the state manager
+     * @throws ComponentAdminException if an error occurs
+     */
+    public ComponentAdmin(String name, IntegrityMonitor integrityMonitor, StateManagement stateManager)
+            throws ComponentAdminException {
+        if ((name == null) || (integrityMonitor == null) || (stateManager == null)) {
+            logger.error("Error: ComponentAdmin constructor called with invalid input");
+            throw new ComponentAdminException("null input");
+        }
+
+        this.name = "ONAP_POLICY_COMP:name=" + name;
+        this.integrityMonitor = integrityMonitor;
+        this.stateManager = stateManager;
+
+        try {
+            register();
+        } catch (ComponentAdminException e) {
+            logger.debug("Failed to register ComponentAdmin MBean");
+            throw e;
+        }
+    }
+
+    /**
+     * Registers with the MBean server.
+     * 
+     * @throws ComponentAdminException a JMX exception
+     */
+    public synchronized void register() throws ComponentAdminException {
+
+        try {
+            logger.debug("Registering {} MBean", name);
+
+            MBeanServer mbeanServer = findMBeanServer();
+
+            if (mbeanServer == null) {
+                return;
+            }
+
+            ObjectName objectName = new ObjectName(name);
+
+            if (mbeanServer.isRegistered(objectName)) {
+                logger.debug("Unregistering a previously registered {} MBean", name);
+                mbeanServer.unregisterMBean(objectName);
+            }
+
+            mbeanServer.registerMBean(this, objectName);
+            registeredMBeanServer = mbeanServer;
+            registeredObjectName = objectName;
+
+        } catch (MalformedObjectNameException | MBeanRegistrationException | InstanceNotFoundException
+                | InstanceAlreadyExistsException | NotCompliantMBeanException e) {
+            throw new ComponentAdminException(e);
+        }
+    }
+
+    /**
+     * Checks if this MBean is registered with the MBeanServer.
+     * 
+     * @return true if this MBean is registered with the MBeanServer.
+     */
+    public boolean isRegistered() {
+        return registeredObjectName != null;
+    }
+
+    /**
+     * Unregisters with the MBean server.
+     * 
+     * @throws ComponentAdminException a JMX exception
+     */
+    public synchronized void unregister() throws ComponentAdminException {
+
+        if (registeredObjectName == null) {
+            return;
+        }
+
+
+        try {
+            registeredMBeanServer.unregisterMBean(registeredObjectName);
+
+        } catch (MBeanRegistrationException | InstanceNotFoundException e) {
+            throw new ComponentAdminException(e);
+        }
+
+        registeredMBeanServer = null;
+        registeredObjectName = null;
+    }
+
+    @Override
+    public String toString() {
+        return ComponentAdmin.class.getSimpleName() + "[" + name + "]";
+    }
+
+    /**
+     * Finds the MBeanServer.
+     * 
+     * @return the MBeanServer, or null if it is not found
+     */
+    public static MBeanServer findMBeanServer() {
+        ArrayList<MBeanServer> mbeanServers = MBeanServerFactory.findMBeanServer(null);
+
+        Iterator<MBeanServer> iter = mbeanServers.iterator();
+        MBeanServer mbeanServer;
+
+        while (iter.hasNext()) {
+            mbeanServer = iter.next();
+            if ("DefaultDomain".equals(mbeanServer.getDefaultDomain())) {
+                return mbeanServer;
+            }
+        }
+
+        return null;
+    }
+
+    /**
+     * Creates the MBeanServer (intended for unit testing only).
+     * 
+     * @return the MBeanServer
+     */
+    public static MBeanServer createMBeanServer() {
+        return MBeanServerFactory.createMBeanServer("DefaultDomain");
+    }
+
+    /**
+     * Get the MBean object name for the specified feature name.
+     * 
+     * @param componentName component name
+     * @return the object name
+     * @throws MalformedObjectNameException a JMX exception
+     */
+    public static ObjectName getObjectName(String componentName) throws MalformedObjectNameException {
+        return new ObjectName("ONAP_POLICY_COMP:name=" + componentName);
+    }
+
+    @Override
+    public void test() throws IntegrityMonitorException {
+        // Call evaluateSanity on IntegrityMonitor to run the test
+        logger.debug("test() called...");
+        if (integrityMonitor != null) {
+            integrityMonitor.evaluateSanity();
+        } else {
+            logger.error("Unable to invoke test() - state manager instance is null");
+            throw new ComponentAdminException(STATE_MANAGER);
+        }
+
+    }
+
+    @Override
+    public void lock() throws IntegrityMonitorException {
+        logger.debug("lock() called...");
+        if (stateManager != null) {
+            stateManager.lock();
+        } else {
+            logger.error("Unable to invoke lock() - state manager instance is null");
+            throw new ComponentAdminException(STATE_MANAGER);
+        }
+    }
+
+    @Override
+    public void unlock() throws IntegrityMonitorException {
+        logger.debug("unlock() called...");
+        if (stateManager != null) {
+            stateManager.unlock();
+        } else {
+            logger.error("Unable to invoke unlock() - state manager instance is null");
+            throw new ComponentAdminException(STATE_MANAGER);
+        }
+
+    }
 }
index 5ada6da..dcc4da0 100644 (file)
@@ -23,22 +23,22 @@ package org.onap.policy.common.im.jmx;
 import org.onap.policy.common.im.IntegrityMonitorException;
 
 public class ComponentAdminException extends IntegrityMonitorException {
-       private static final long serialVersionUID = 1L;
+    private static final long serialVersionUID = 1L;
 
-       public ComponentAdminException() {
-               super();
-       }
+    public ComponentAdminException() {
+        super();
+    }
 
-       public ComponentAdminException(String message) {
-               super(message);
-       }
+    public ComponentAdminException(String message) {
+        super(message);
+    }
 
-       public ComponentAdminException(Throwable cause) {
-               super(cause);
-       }
+    public ComponentAdminException(Throwable cause) {
+        super(cause);
+    }
 
-       public ComponentAdminException(String message, Throwable cause) {
-               super(message, cause);
-       }
+    public ComponentAdminException(String message, Throwable cause) {
+        super(message, cause);
+    }
 
 }
index 2c01193..3276cf6 100644 (file)
@@ -26,27 +26,24 @@ import org.onap.policy.common.im.IntegrityMonitorException;
  * Provides operations to test health, lock and unlock components.
  */
 public interface ComponentAdminMBean {
-       /**
-        * Test health of component.
-        * 
-        * @throws IntegrityMonitorException
-        *            if the component fails the health check
-        */
-       void test() throws IntegrityMonitorException;
+    /**
+     * Test health of component.
+     * 
+     * @throws IntegrityMonitorException if the component fails the health check
+     */
+    void test() throws IntegrityMonitorException;
 
-       /**
-        * Administratively lock component.
-        * 
-        * @throws IntegrityMonitorException
-        *            if the component lock fails
-        */
-       void lock() throws IntegrityMonitorException;
-       
-       /**
-        * Administratively unlock component.
-        * 
-        * @throws IntegrityMonitorException
-        *            if the component unlock fails
-        */
-       void unlock() throws IntegrityMonitorException;
+    /**
+     * Administratively lock component.
+     * 
+     * @throws IntegrityMonitorException if the component lock fails
+     */
+    void lock() throws IntegrityMonitorException;
+
+    /**
+     * Administratively unlock component.
+     * 
+     * @throws IntegrityMonitorException if the component unlock fails
+     */
+    void unlock() throws IntegrityMonitorException;
 }
index c9a2ce8..b71751f 100644 (file)
@@ -18,9 +18,6 @@
  * ============LICENSE_END=========================================================
  */
 
-/**
- * 
- */
 package org.onap.policy.common.im.jmx;
 
 import java.io.IOException;
@@ -43,93 +40,89 @@ import org.onap.policy.common.logging.flexlogger.Logger;
  * Class to create a JMX RMI connection to the JmxAgent.
  */
 public final class JmxAgentConnection {
-       
+
     private static final Logger logger = FlexLogger.getLogger(JmxAgentConnection.class);
 
 
-       private static final String DEFAULT_HOST = "localhost";
-       private static final String DEFAULT_PORT = "9996";
-
-       private String host;
-       private String port;
-       private JMXConnector connector;
-       private String jmxUrl = null;
-       
-       /**
-        * Set up the host/port from the properties.   Use defaults if missing from the properties.
-        * @param properties the properties used to look for host and port
-        */
-       public JmxAgentConnection() {
-               host = DEFAULT_HOST;
-               port = DEFAULT_PORT;
-       }
-       
-       public JmxAgentConnection(String url) {
-               jmxUrl = url;
-       }
-
-       /**
-        * Generate jmxAgent url.
-        * service:jmx:rmi:///jndi/rmi://host.domain:9999/jmxAgent
-        * 
-        * @param host
-        *            host.domain
-        * @param port
-        *            9999
-        * @return jmxAgent url.
-        */
-       private static String jmxAgentUrl(String host, String port) {
-
-               return "service:jmx:rmi:///jndi/rmi://" + host + ":" + port
-                               + "/jmxrmi";
-       }
-
-       /**
-        * Get a connection to the jmxAgent MBeanServer.
-        * @return the connection
-        * @throws IntegrityMonitorException on error
-        */
-       public MBeanServerConnection getMBeanConnection() throws IntegrityMonitorException {
-
-               try {
-                       JMXServiceURL url;
-                       if (jmxUrl == null) {
-                               url = new JMXServiceURL(jmxAgentUrl(host, port));
-                       }
-                       else {
-                               url = new JMXServiceURL(jmxUrl);
-                       }
-                       Map<String, Object> env = new HashMap<>();
-                       
-                       connector = JMXConnectorFactory.newJMXConnector(url, env);
-                       connector.connect();
-                       connector.addConnectionNotificationListener(
-                                       new NotificationListener() {
-
-                                               @Override
-                                               public void handleNotification(
-                                                               Notification notification, Object handback) {
-                                                       if (notification.getType().equals(
-                                                                       JMXConnectionNotification.FAILED)) {
-                                                               // handle disconnect
-                                                               disconnect();
-                                                       }
-                                               }
-                                       }, null, null);
-                       
-                       return connector.getMBeanServerConnection();
-                       
-               } catch (IOException e) {
-                       throw new IntegrityMonitorException(e);
-               }
-       }
-       
-       /**
-        * Disconnect.
-        */
-       public void disconnect() {
-               if (connector != null) {
-                       try { connector.close(); } catch (IOException e) { logger.debug(e); }
-               }
-       }
+    private static final String DEFAULT_HOST = "localhost";
+    private static final String DEFAULT_PORT = "9996";
+
+    private String host;
+    private String port;
+    private JMXConnector connector;
+    private String jmxUrl = null;
+
+    /**
+     * Set up the host/port from the properties. Use defaults if missing from the properties.
+     */
+    public JmxAgentConnection() {
+        host = DEFAULT_HOST;
+        port = DEFAULT_PORT;
+    }
+
+    public JmxAgentConnection(String url) {
+        jmxUrl = url;
+    }
+
+    /**
+     * Generate jmxAgent url. service:jmx:rmi:///jndi/rmi://host.domain:9999/jmxAgent
+     * 
+     * @param host host.domain
+     * @param port 9999
+     * @return jmxAgent url.
+     */
+    private static String jmxAgentUrl(String host, String port) {
+
+        return "service:jmx:rmi:///jndi/rmi://" + host + ":" + port + "/jmxrmi";
+    }
+
+    /**
+     * Get a connection to the jmxAgent MBeanServer.
+     * 
+     * @return the connection
+     * @throws IntegrityMonitorException on error
+     */
+    public MBeanServerConnection getMBeanConnection() throws IntegrityMonitorException {
+
+        try {
+            JMXServiceURL url;
+            if (jmxUrl == null) {
+                url = new JMXServiceURL(jmxAgentUrl(host, port));
+            } else {
+                url = new JMXServiceURL(jmxUrl);
+            }
+            Map<String, Object> env = new HashMap<>();
+
+            connector = JMXConnectorFactory.newJMXConnector(url, env);
+            connector.connect();
+            connector.addConnectionNotificationListener(new NotificationListener() {
+
+                @Override
+                public void handleNotification(Notification notification, Object handback) {
+                    if (notification.getType().equals(JMXConnectionNotification.FAILED)) {
+                        // handle disconnect
+                        disconnect();
+                    }
+                }
+            }, null, null);
+
+            return connector.getMBeanServerConnection();
+
+        } catch (IOException e) {
+            throw new IntegrityMonitorException(e);
+        }
+    }
+
+    /**
+     * Disconnect.
+     */
+    public void disconnect() {
+        if (connector != null) {
+            try {
+                connector.close();
+            } catch (IOException e) {
+                logger.debug(e);
+            }
+        }
+    }
 }
index 2ef3fa8..24f36c5 100644 (file)
@@ -40,92 +40,104 @@ import javax.persistence.TemporalType;
  */
 
 @Entity
-@Table(name="ForwardProgressEntity")
-@NamedQueries({
-       @NamedQuery(name=" ForwardProgressEntity.findAll", query="SELECT e FROM ForwardProgressEntity e "),
-       @NamedQuery(name="ForwardProgressEntity.deleteAll", query="DELETE FROM ForwardProgressEntity WHERE 1=1")
-})
-//@SequenceGenerator(name="seqForwardProgress", initialValue=1, allocationSize=1)
+@Table(name = "ForwardProgressEntity")
+@NamedQueries({@NamedQuery(name = " ForwardProgressEntity.findAll", query = "SELECT e FROM ForwardProgressEntity e "),
+        @NamedQuery(name = "ForwardProgressEntity.deleteAll", query = "DELETE FROM ForwardProgressEntity WHERE 1=1")})
+// @SequenceGenerator(name="seqForwardProgress", initialValue=1, allocationSize=1)
 
 public class ForwardProgressEntity implements Serializable {
-       private static final long serialVersionUID = 1L;
-
-       @Id
-       //@GeneratedValue(strategy = GenerationType.SEQUENCE, generator="seqForwardProgress")
-       @GeneratedValue(strategy = GenerationType.AUTO)
-       @Column(name="forwardProgressId")
-       private long forwardProgressId;
-       
-       @Column(name="resourceName", nullable=false, length=100, unique=true)
-       private String resourceName;
-       
-       @Column(name="fpc_count", nullable=false)
-       private long fpcCount;
-
-       @Temporal(TemporalType.TIMESTAMP)
-       @Column(name="created_date", updatable=false)
-       private Date created_date;
-       
-       @Temporal(TemporalType.TIMESTAMP)
-       @Column(name="last_updated")
-       private Date lastUpdated;
-
-       public ForwardProgressEntity() {
-               //default constructor
-       }
-
-       @PrePersist
-       public void     prePersist() {
-               Date date = new Date();
-               this.created_date = date;
-               this.lastUpdated = date;
-               this.fpcCount = 0;
-       }
-
-       @PreUpdate
-       public void preUpdate() {
-               this.lastUpdated = new Date();
-       }
-       
-       /**
-        * @return the Id
-        */
-       public long getForwardProgressId() {
-               return forwardProgressId;
-       }
-       
-       public String getResourceName() {
-               return this.resourceName;
-       }
-       public void setResourceName(String resourceName) {
-               this.resourceName = resourceName;
-       }
-       
-       /**
-        * @return the fpcCount
-        */
-       public long getFpcCount() {
-               return fpcCount;
-       }
-
-       /**
-        * @param fpcCount the fpcCount to set
-        */
-       public void setFpcCount(long fpcCount) {
-               this.fpcCount = fpcCount;
-       }
-       
-       /**
-        * @return the lastUpdated
-        */
-       public Date getLastUpdated() {
-               return lastUpdated;
-       }
-       
-       /**
-        * @param lastUpdated the lastUpdated to set
-        */
-       public void setLastUpdated(Date lastUpdated) {
-               this.lastUpdated = lastUpdated;
-       }
+    private static final long serialVersionUID = 1L;
+
+    @Id
+    // @GeneratedValue(strategy = GenerationType.SEQUENCE, generator="seqForwardProgress")
+    @GeneratedValue(strategy = GenerationType.AUTO)
+    @Column(name = "forwardProgressId")
+    private long forwardProgressId;
+
+    @Column(name = "resourceName", nullable = false, length = 100, unique = true)
+    private String resourceName;
+
+    @Column(name = "fpc_count", nullable = false)
+    private long fpcCount;
+
+    @Temporal(TemporalType.TIMESTAMP)
+    @Column(name = "created_date", updatable = false)
+    private Date createdDate;
+
+    @Temporal(TemporalType.TIMESTAMP)
+    @Column(name = "last_updated")
+    private Date lastUpdated;
+
+    public ForwardProgressEntity() {
+        // default constructor
+    }
+
+    /**
+     * PrePersist callback method.
+     */
+    @PrePersist
+    public void prePersist() {
+        Date date = new Date();
+        this.createdDate = date;
+        this.lastUpdated = date;
+        this.fpcCount = 0;
+    }
+
+    @PreUpdate
+    public void preUpdate() {
+        this.lastUpdated = new Date();
+    }
+
+    /**
+     * Get the forward progress Id.
+     * 
+     * @return the Id
+     */
+    public long getForwardProgressId() {
+        return forwardProgressId;
+    }
+
+    public String getResourceName() {
+        return this.resourceName;
+    }
+
+    public void setResourceName(String resourceName) {
+        this.resourceName = resourceName;
+    }
+
+    /**
+     * Get the fpcCount.
+     * 
+     * @return the fpcCount
+     */
+    public long getFpcCount() {
+        return fpcCount;
+    }
+
+    /**
+     * Set the fpcCount.
+     * 
+     * @param fpcCount the fpcCount to set
+     */
+    public void setFpcCount(long fpcCount) {
+        this.fpcCount = fpcCount;
+    }
+
+    /**
+     * Get the lastUpdated.
+     * 
+     * @return the lastUpdated
+     */
+    public Date getLastUpdated() {
+        return lastUpdated;
+    }
+
+    /**
+     * Set the lastUpdated.
+     * 
+     * @param lastUpdated the lastUpdated to set
+     */
+    public void setLastUpdated(Date lastUpdated) {
+        this.lastUpdated = lastUpdated;
+    }
 }
index 454bf7e..6fb1446 100644 (file)
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * Integrity Monitor
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -37,105 +37,122 @@ import javax.persistence.Temporal;
 import javax.persistence.TemporalType;
 
 @Entity
-@Table(name="ImTestEntity")
-@NamedQueries({
-       @NamedQuery(name=" ImTestEntity.findAll", query="SELECT e FROM ImTestEntity e "),
-       @NamedQuery(name="ImTestEntity.deleteAll", query="DELETE FROM ImTestEntity WHERE 1=1")
-})
-//@SequenceGenerator(name="seqImTest", initialValue=1, allocationSize=1)
+@Table(name = "ImTestEntity")
+@NamedQueries({@NamedQuery(name = " ImTestEntity.findAll", query = "SELECT e FROM ImTestEntity e "),
+        @NamedQuery(name = "ImTestEntity.deleteAll", query = "DELETE FROM ImTestEntity WHERE 1=1")})
+// @SequenceGenerator(name="seqImTest", initialValue=1, allocationSize=1)
 
 public class ImTestEntity implements Serializable {
-       private static final long serialVersionUID = 1L;
-
-       @Id
-       //@GeneratedValue(strategy = GenerationType.SEQUENCE, generator="seqImTest")
-       @GeneratedValue(strategy = GenerationType.AUTO)
-       @Column(name="ImTestId")
-       private long imTestId;
-       
-       @Column(name="created_by", nullable=false, length=255)
-       private String createdBy = "guest";
-
-       @Temporal(TemporalType.TIMESTAMP)
-       @Column(name="created_date", updatable=false)
-       private Date createdDate;
-
-       @Column(name="modified_by", nullable=false, length=255)
-       private String modifiedBy = "guest";
-
-       @Temporal(TemporalType.TIMESTAMP)
-       @Column(name="modified_date", nullable=false)
-       private Date modifiedDate;
-
-       public ImTestEntity() {
-               //default constructor
-       }
-
-       @PrePersist
-       public void     prePersist() {
-               Date date = new Date();
-               this.createdDate = date;
-               this.modifiedDate = date;
-       }
-
-       @PreUpdate
-       public void preUpdate() {
-               this.modifiedDate = new Date();
-       }
-       
-       /**
-        * @return the Id
-        */
-       public long getImTestId() {
-               return imTestId;
-       }
-       
-       /**
-        * @return the createdBy
-        */
-       public String getCreatedBy() {
-               return createdBy;
-       }
-
-       /**
-        * @param createdBy the createdBy to set
-        */
-       public void setCreatedBy(String createdBy) {
-               this.createdBy = createdBy;
-       }
-       
-       /**
-        * @return the modifiedBy
-        */
-       public String getModifiedBy() {
-               return modifiedBy;
-       }
-       
-       /**
-        * @param modifiedBy the modifiedBy to set
-        */
-       public void setModifiedBy(String modifiedBy) {
-               this.modifiedBy = modifiedBy;
-       }
-       
-       /**
-        * @return the modifiedDate
-        */
-       public Date getModifiedDate() {
-               return modifiedDate;
-       }
-
-       /**
-        * @param modifiedDate the modifiedDate to set
-        */
-       public void setModifiedDate(Date modifiedDate) {
-               this.modifiedDate = modifiedDate;
-       }
-
-       /**
-        * @return the createdDate
-        */
-       public Date getCreatedDate() {
-               return createdDate;
-       }
+    private static final long serialVersionUID = 1L;
+
+    @Id
+    // @GeneratedValue(strategy = GenerationType.SEQUENCE, generator="seqImTest")
+    @GeneratedValue(strategy = GenerationType.AUTO)
+    @Column(name = "ImTestId")
+    private long imTestId;
+
+    @Column(name = "created_by", nullable = false, length = 255)
+    private String createdBy = "guest";
+
+    @Temporal(TemporalType.TIMESTAMP)
+    @Column(name = "created_date", updatable = false)
+    private Date createdDate;
+
+    @Column(name = "modified_by", nullable = false, length = 255)
+    private String modifiedBy = "guest";
+
+    @Temporal(TemporalType.TIMESTAMP)
+    @Column(name = "modified_date", nullable = false)
+    private Date modifiedDate;
+
+    public ImTestEntity() {
+        // default constructor
+    }
+
+    /**
+     * PrePersist callback method.
+     */
+    @PrePersist
+    public void prePersist() {
+        Date date = new Date();
+        this.createdDate = date;
+        this.modifiedDate = date;
+    }
+
+    @PreUpdate
+    public void preUpdate() {
+        this.modifiedDate = new Date();
+    }
+
+    /**
+     * Get the Im test Id.
+     * 
+     * @return the Id
+     */
+    public long getImTestId() {
+        return imTestId;
+    }
+
+    /**
+     * Get the createdBy.
+     * 
+     * @return the createdBy
+     */
+    public String getCreatedBy() {
+        return createdBy;
+    }
+
+    /**
+     * Set the createdBy.
+     * 
+     * @param createdBy the createdBy to set
+     */
+    public void setCreatedBy(String createdBy) {
+        this.createdBy = createdBy;
+    }
+
+    /**
+     * Get the modifiedBy.
+     * 
+     * @return the modifiedBy
+     */
+    public String getModifiedBy() {
+        return modifiedBy;
+    }
+
+    /**
+     * Set the ModifiedBy.
+     * 
+     * @param modifiedBy the modifiedBy to set
+     */
+    public void setModifiedBy(String modifiedBy) {
+        this.modifiedBy = modifiedBy;
+    }
+
+    /**
+     * Get the modifiedDate.
+     * 
+     * @return the modifiedDate
+     */
+    public Date getModifiedDate() {
+        return modifiedDate;
+    }
+
+    /**
+     * Set the modifiedDate.
+     * 
+     * @param modifiedDate the modifiedDate to set
+     */
+    public void setModifiedDate(Date modifiedDate) {
+        this.modifiedDate = modifiedDate;
+    }
+
+    /**
+     * Get the createdDate.
+     * 
+     * @return the createdDate
+     */
+    public Date getCreatedDate() {
+        return createdDate;
+    }
 }
index bd2ba8a..cfbf020 100644 (file)
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * Integrity Monitor
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -40,111 +40,127 @@ import javax.persistence.TemporalType;
  */
 
 @Entity
-@Table(name="ResourceRegistrationEntity")
+@Table(name = "ResourceRegistrationEntity")
 @NamedQueries({
-       @NamedQuery(name=" ResourceRegistrationEntity.findAll", query="SELECT e FROM ResourceRegistrationEntity e "),
-       @NamedQuery(name="ResourceRegistrationEntity.deleteAll", query="DELETE FROM ResourceRegistrationEntity WHERE 1=1")
-})
-//@SequenceGenerator(name="seqResourceRegistration", initialValue=1, allocationSize=1)
+        @NamedQuery(name = " ResourceRegistrationEntity.findAll",
+                query = "SELECT e FROM ResourceRegistrationEntity e "),
+        @NamedQuery(name = "ResourceRegistrationEntity.deleteAll",
+                query = "DELETE FROM ResourceRegistrationEntity WHERE 1=1")})
+// @SequenceGenerator(name="seqResourceRegistration", initialValue=1, allocationSize=1)
 
 public class ResourceRegistrationEntity implements Serializable {
-       private static final long serialVersionUID = 1L;
-
-       @Id
-       //@GeneratedValue(strategy = GenerationType.SEQUENCE, generator="seqResourceRegistration")
-       @GeneratedValue(strategy = GenerationType.AUTO)
-       @Column(name="ResourceRegistrationId")
-       private long resourceRegistrationId;
-       
-       @Column(name="resourceName", nullable=false, length=100, unique=true)
-       private String resourceName;
-       
-       @Column(name="resourceUrl", nullable=false, length=255, unique=true)
-       private String resourceUrl;
-       
-       @Column(name="site", nullable=true, length=50)
-       private String site;
-       
-       @Column(name="nodeType", nullable=true, length=50)
-       private String nodeType;
-       
-       @Temporal(TemporalType.TIMESTAMP)
-       @Column(name="created_date", updatable=false)
-       private Date createdDate;
-       
-       @Temporal(TemporalType.TIMESTAMP)
-       @Column(name="last_updated")
-       private Date lastUpdated;
-
-       public ResourceRegistrationEntity() {
-               //default constructor
-       }
-
-       @PrePersist
-       public void     prePersist() {
-               Date date = new Date();
-               this.createdDate = date;
-               this.lastUpdated = date;
-       }
-       
-       @PreUpdate
-       public void preUpdate() {
-               this.lastUpdated = new Date();
-       }
-       
-       /**
-        * @return the Id
-        */
-       public long getResourceRegistrationId() {
-               return resourceRegistrationId;
-       }
-       
-       public String getResourceName() {
-               return this.resourceName;
-       }
-       public void setResourceName(String resourceName) {
-               this.resourceName = resourceName;
-       }
-       
-       public String getResourceUrl() {
-               return this.resourceUrl;
-       }
-       public void setResourceUrl(String resourceUrl) {
-               this.resourceUrl = resourceUrl;
-       }
-       
-       public String getSite() {
-               return this.site;
-       }
-       public void setSite(String site) {
-               this.site = site;
-       }
-       
-       public String getNodeType() {
-               return this.nodeType;
-       }
-       public void setNodeType(String nodeType) {
-               this.nodeType = nodeType;
-       }
-       
-       /**
-        * @return the createdDate
-        */
-       public Date getCreatedDate() {
-               return createdDate;
-       }
-       
-       /**
-        * @return the lastUpdated
-        */
-       public Date getLastUpdated() {
-               return lastUpdated;
-       }
-       
-       /**
-        * @param lastUpdated the lastUpdated to set
-        */
-       public void setLastUpdated(Date lastUpdated) {
-               this.lastUpdated = lastUpdated;
-       }
+    private static final long serialVersionUID = 1L;
+
+    @Id
+    // @GeneratedValue(strategy = GenerationType.SEQUENCE, generator="seqResourceRegistration")
+    @GeneratedValue(strategy = GenerationType.AUTO)
+    @Column(name = "ResourceRegistrationId")
+    private long resourceRegistrationId;
+
+    @Column(name = "resourceName", nullable = false, length = 100, unique = true)
+    private String resourceName;
+
+    @Column(name = "resourceUrl", nullable = false, length = 255, unique = true)
+    private String resourceUrl;
+
+    @Column(name = "site", nullable = true, length = 50)
+    private String site;
+
+    @Column(name = "nodeType", nullable = true, length = 50)
+    private String nodeType;
+
+    @Temporal(TemporalType.TIMESTAMP)
+    @Column(name = "created_date", updatable = false)
+    private Date createdDate;
+
+    @Temporal(TemporalType.TIMESTAMP)
+    @Column(name = "last_updated")
+    private Date lastUpdated;
+
+    public ResourceRegistrationEntity() {
+        // default constructor
+    }
+
+    /**
+     * PrePersist callback method.
+     */
+    @PrePersist
+    public void prePersist() {
+        Date date = new Date();
+        this.createdDate = date;
+        this.lastUpdated = date;
+    }
+
+    @PreUpdate
+    public void preUpdate() {
+        this.lastUpdated = new Date();
+    }
+
+    /**
+     * Get the resource registration Id.
+     * 
+     * @return the Id
+     */
+    public long getResourceRegistrationId() {
+        return resourceRegistrationId;
+    }
+
+    public String getResourceName() {
+        return this.resourceName;
+    }
+
+    public void setResourceName(String resourceName) {
+        this.resourceName = resourceName;
+    }
+
+    public String getResourceUrl() {
+        return this.resourceUrl;
+    }
+
+    public void setResourceUrl(String resourceUrl) {
+        this.resourceUrl = resourceUrl;
+    }
+
+    public String getSite() {
+        return this.site;
+    }
+
+    public void setSite(String site) {
+        this.site = site;
+    }
+
+    public String getNodeType() {
+        return this.nodeType;
+    }
+
+    public void setNodeType(String nodeType) {
+        this.nodeType = nodeType;
+    }
+
+    /**
+     * Get the createdDate.
+     * 
+     * @return the createdDate
+     */
+    public Date getCreatedDate() {
+        return createdDate;
+    }
+
+    /**
+     * Get the lastUpdated.
+     * 
+     * @return the lastUpdated
+     */
+    public Date getLastUpdated() {
+        return lastUpdated;
+    }
+
+    /**
+     * Set the lastUpdated.
+     * 
+     * @param lastUpdated the lastUpdated to set
+     */
+    public void setLastUpdated(Date lastUpdated) {
+        this.lastUpdated = lastUpdated;
+    }
 }
index e177939..0e96e55 100644 (file)
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * Integrity Monitor
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -36,108 +36,117 @@ import javax.persistence.Temporal;
 import javax.persistence.TemporalType;
 
 @Entity
-@Table(name="StateManagementEntity")
-@NamedQuery(name="StateManagementEntity.findAll", query="SELECT e FROM StateManagementEntity e")
-//@SequenceGenerator(name="seqSM", initialValue=1, allocationSize=1)
+@Table(name = "StateManagementEntity")
+@NamedQuery(name = "StateManagementEntity.findAll", query = "SELECT e FROM StateManagementEntity e")
+// @SequenceGenerator(name="seqSM", initialValue=1, allocationSize=1)
 
 public class StateManagementEntity implements Serializable {
-       private static final long serialVersionUID = 1L;
-
-       @Id
-       //@GeneratedValue(strategy = GenerationType.SEQUENCE, generator="seqSM")
-       @GeneratedValue(strategy = GenerationType.AUTO)
-       @Column(name="id")
-       private long id;
-       
-       @Column(name="resourceName", nullable=false, length=100, unique=true)
-       private String resourceName;
-       
-       @Column(name="adminState", nullable=false, length=20)
-       private String adminState;
-
-       @Column(name="opState", nullable=false, length=20)
-       private String opState;
-
-       @Column(name="availStatus", nullable=false, length=20)
-       private String availStatus;
-       
-       @Column(name="standbyStatus", nullable=false, length=20)
-       private String standbyStatus;
-       
-       @Temporal(TemporalType.TIMESTAMP)
-       @Column(name="created_Date", updatable=false)
-       private Date created_Date;
-       
-       @Temporal(TemporalType.TIMESTAMP)
-       @Column(name="modifiedDate", nullable=false)
-       private Date modifiedDate;
-
-       @PrePersist
-       public void     prePersist() {
-               this.created_Date = new Date();
-               this.modifiedDate = new Date(); 
-       }
-
-       @PreUpdate
-       public void preUpdate() {
-               this.modifiedDate = new Date();
-       }
-       
-       public StateManagementEntity() {
-               //default constructor
-       }
-       
-       public String getResourceName() {
-               return this.resourceName;
-       }
-       public void setResourceName(String resourceName) {
-               this.resourceName = resourceName;
-       }
-       
-       public String getAdminState() {
-               return this.adminState;
-       }
-
-       public void setAdminState(String adminState) {
-               this.adminState = adminState;
-       }
-       public String getOpState() {
-               return this.opState;
-       }
-
-       public void setOpState(String opState) {
-               this.opState = opState;
-
-       }
-       public String getAvailStatus() {
-               return this.availStatus;
-       }
-
-       public void setAvailStatus(String availStatus) {
-               this.availStatus = availStatus;
-       }
-       public String getStandbyStatus() {
-               return this.standbyStatus;
-       }
-
-       public void setStandbyStatus(String standbyStatus) {
-               this.standbyStatus = standbyStatus;
-       }
-       
-       public void setModifiedDate(Date modifiedDate) {
-               this.modifiedDate = modifiedDate;
-       }               
-       
-       public static StateManagementEntity clone(StateManagementEntity sm)
-       {
-               StateManagementEntity newSM = new StateManagementEntity(); 
-               newSM.setResourceName(sm.getResourceName());
-               newSM.setAdminState(sm.getResourceName());
-               newSM.setOpState(sm.getOpState());
-               newSM.setAdminState(sm.getAdminState());
-               newSM.setAvailStatus(sm.getAvailStatus());      
-               newSM.setStandbyStatus(sm.getStandbyStatus());
-       
-               return newSM; 
-       }
+    private static final long serialVersionUID = 1L;
+
+    @Id
+    // @GeneratedValue(strategy = GenerationType.SEQUENCE, generator="seqSM")
+    @GeneratedValue(strategy = GenerationType.AUTO)
+    @Column(name = "id")
+    private long id;
+
+    @Column(name = "resourceName", nullable = false, length = 100, unique = true)
+    private String resourceName;
+
+    @Column(name = "adminState", nullable = false, length = 20)
+    private String adminState;
+
+    @Column(name = "opState", nullable = false, length = 20)
+    private String opState;
+
+    @Column(name = "availStatus", nullable = false, length = 20)
+    private String availStatus;
+
+    @Column(name = "standbyStatus", nullable = false, length = 20)
+    private String standbyStatus;
+
+    @Temporal(TemporalType.TIMESTAMP)
+    @Column(name = "created_Date", updatable = false)
+    private Date createdDate;
+
+    @Temporal(TemporalType.TIMESTAMP)
+    @Column(name = "modifiedDate", nullable = false)
+    private Date modifiedDate;
+
+    @PrePersist
+    public void prePersist() {
+        this.createdDate = new Date();
+        this.modifiedDate = new Date();
+    }
+
+    @PreUpdate
+    public void preUpdate() {
+        this.modifiedDate = new Date();
+    }
+
+    public StateManagementEntity() {
+        // default constructor
+    }
+
+    public String getResourceName() {
+        return this.resourceName;
+    }
+
+    public void setResourceName(String resourceName) {
+        this.resourceName = resourceName;
+    }
+
+    public String getAdminState() {
+        return this.adminState;
+    }
+
+    public void setAdminState(String adminState) {
+        this.adminState = adminState;
+    }
+
+    public String getOpState() {
+        return this.opState;
+    }
+
+    public void setOpState(String opState) {
+        this.opState = opState;
+
+    }
+
+    public String getAvailStatus() {
+        return this.availStatus;
+    }
+
+    public void setAvailStatus(String availStatus) {
+        this.availStatus = availStatus;
+    }
+
+    public String getStandbyStatus() {
+        return this.standbyStatus;
+    }
+
+    public void setStandbyStatus(String standbyStatus) {
+        this.standbyStatus = standbyStatus;
+    }
+
+    public void setModifiedDate(Date modifiedDate) {
+        this.modifiedDate = modifiedDate;
+    }
+
+    /**
+     * Clone a StateManagementEntity.
+     * 
+     * @param sm the StateManagementEntity to clone
+     * @return a new StateManagementEntity
+     */
+    public static StateManagementEntity clone(StateManagementEntity sm) {
+        StateManagementEntity newStateManagementEntity = new StateManagementEntity();
+        newStateManagementEntity.setResourceName(sm.getResourceName());
+        newStateManagementEntity.setAdminState(sm.getResourceName());
+        newStateManagementEntity.setOpState(sm.getOpState());
+        newStateManagementEntity.setAdminState(sm.getAdminState());
+        newStateManagementEntity.setAvailStatus(sm.getAvailStatus());
+        newStateManagementEntity.setStandbyStatus(sm.getStandbyStatus());
+
+        return newStateManagementEntity;
+    }
 }
index 967ca73..806c404 100644 (file)
@@ -35,139 +35,148 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 public class AllSeemsWellTest extends IntegrityMonitorTestBase {
-       private static Logger logger = LoggerFactory.getLogger(AllSeemsWellTest.class);
-
-       private static final long STATE_CYCLE_MS = 3 * CYCLE_INTERVAL_MS;
-
-       private static Properties myProp;
-       private static String resourceName;
-
-       @BeforeClass
-       public static void setUpClass() throws Exception {
-               IntegrityMonitorTestBase.setUpBeforeClass(DEFAULT_DB_URL_PREFIX + AllSeemsWellTest.class.getSimpleName());
-
-               resourceName = IntegrityMonitorTestBase.siteName + "." + IntegrityMonitorTestBase.nodeType;
-       }
-
-       @AfterClass
-       public static void tearDownClass() throws Exception {
-               IntegrityMonitorTestBase.tearDownAfterClass();
-       }
-
-       @Before
-       public void setUp() {
-               super.setUpTest();
-
-               myProp = makeProperties();
-
-       }
-
-       @After
-       public void tearDown() {
-               super.tearDownTest();
-       }
-
-       // Ignore
-       @Test
-       public void testAllSeemsWell() throws Exception {
-               logger.debug("\nIntegrityMonitorTest: Entering testAllSeemsWell\n\n");
-
-               // parameters are passed via a properties file
-               myProp.put(IntegrityMonitorProperties.DEPENDENCY_GROUPS, "");
-               myProp.put(IntegrityMonitorProperties.TEST_VIA_JMX, "false");
-               myProp.put(IntegrityMonitorProperties.REFRESH_STATE_AUDIT_INTERVAL_MS, "-1");
-               myProp.put(IntegrityMonitorProperties.STATE_AUDIT_INTERVAL_MS, "-1");
-               myProp.put(IntegrityMonitorProperties.FAILED_COUNTER_THRESHOLD, "1");
-               myProp.put(IntegrityMonitorProperties.FP_MONITOR_INTERVAL, "5");
-               myProp.put(IntegrityMonitorProperties.TEST_TRANS_INTERVAL, "1");
-               myProp.put(IntegrityMonitorProperties.WRITE_FPC_INTERVAL, "1");
-
-               IntegrityMonitor.updateProperties(myProp);
-               /*
-                * The monitorInterval is 5 and the failedCounterThreshold is 1 A
-                * forward progress will be stale after 5 seconds.
-                */
-
-               IntegrityMonitor im = IntegrityMonitor.getInstance(resourceName, myProp);
-
-               StateManagement sm = im.getStateManager();
-
-               // Give it time to set the states in the DB
-               Thread.sleep(STATE_CYCLE_MS);
-
-               // Check the state
-               logger.debug(
-                               "\n\ntestAllSeemsWell starting im state \nAdminState = {}\nOpState() = {}\nAvailStatus = {}\nStandbyStatus = {}\n",
-                               sm.getAdminState(), sm.getOpState(), sm.getAvailStatus(), sm.getStandbyStatus());
-
-               assertEquals(StateManagement.ENABLED, sm.getOpState());
-
-               // Indicate a failure
-               im.allSeemsWell(this.getClass().getName(), IntegrityMonitorProperties.ALLNOTWELL,
-                               "'AllSeemsWellTest - ALLNOTWELL'");
-
-               // Wait for the state to change due to ALLNOTWELL
-               Thread.sleep(STATE_CYCLE_MS);
-               // Check the state
-               logger.debug(
-                               "\n\ntestAllSeemsWell after ALLNOTWELL: im state \nAdminState = {}\nOpState() = {}\nAvailStatus = {}\nStandbyStatus = {}\n",
-                               sm.getAdminState(), sm.getOpState(), sm.getAvailStatus(), sm.getStandbyStatus());
-
-               // assertEquals(StateManagement.DISABLED, sm.getOpState());
-
-               Map<String, String> allNotWellMap = im.getAllNotWellMap();
-               for (String key : allNotWellMap.keySet()) {
-                       logger.debug("AllSeemsWellTest: allNotWellMap: key = {}  msg = {}", key, allNotWellMap.get(key));
-               }
-               // assertEquals(1, allNotWellMap.size());
-
-               Map<String, String> allSeemsWellMap = im.getAllSeemsWellMap();
-               // assertTrue(allSeemsWellMap.isEmpty());
-
-               // Return to normal
-               im.allSeemsWell(this.getClass().getName(), IntegrityMonitorProperties.ALLSEEMSWELL,
-                               "'AllSeemsWellTest - ALLSEEMSWELL'");
-
-               // Wait for the state to change due to ALLNOTWELL
-               Thread.sleep(STATE_CYCLE_MS);
-               // Check the state
-               logger.debug(
-                               "\n\ntestAllSeemsWell after ALLSEEMSWELL: im state \nAdminState = {}\nOpState() = {}\nAvailStatus = {}\nStandbyStatus = {}\n",
-                               sm.getAdminState(), sm.getOpState(), sm.getAvailStatus(), sm.getStandbyStatus());
-
-               // assertEquals(StateManagement.ENABLED, sm.getOpState());
-
-               allNotWellMap = im.getAllNotWellMap();
-               assertTrue(allNotWellMap.isEmpty());
-
-               allSeemsWellMap = im.getAllSeemsWellMap();
-               assertEquals(1, allSeemsWellMap.size());
-               for (String key : allSeemsWellMap.keySet()) {
-                       logger.debug("AllSeemsWellTest: allSeemsWellMap: key = {}  msg = {}", key, allSeemsWellMap.get(key));
-               }
-
-               // Check for null parameters
-               assertException(im, imx -> {
-                       imx.allSeemsWell(null, IntegrityMonitorProperties.ALLSEEMSWELL, "'AllSeemsWellTest - ALLSEEMSWELL'");
-               });
-
-               assertException(im, imx -> {
-                       im.allSeemsWell("", IntegrityMonitorProperties.ALLSEEMSWELL, "'AllSeemsWellTest - ALLSEEMSWELL'");
-               });
-
-               assertException(im, imx -> {
-                       im.allSeemsWell(this.getClass().getName(), null, "'AllSeemsWellTest - ALLSEEMSWELL'");
-               });
-
-               assertException(im, imx -> {
-                       im.allSeemsWell(this.getClass().getName(), IntegrityMonitorProperties.ALLSEEMSWELL, null);
-               });
-
-               assertException(im, imx -> {
-                       im.allSeemsWell(this.getClass().getName(), IntegrityMonitorProperties.ALLSEEMSWELL, "");
-               });
-
-               logger.debug("\n\ntestAllSeemsWell: Exit\n\n");
-       }
+    private static Logger logger = LoggerFactory.getLogger(AllSeemsWellTest.class);
+
+    private static final long STATE_CYCLE_MS = 3 * CYCLE_INTERVAL_MS;
+
+    private static Properties myProp;
+    private static String resourceName;
+
+    /**
+     * Set up for test class.
+     */
+    @BeforeClass
+    public static void setUpClass() throws Exception {
+        IntegrityMonitorTestBase.setUpBeforeClass(DEFAULT_DB_URL_PREFIX + AllSeemsWellTest.class.getSimpleName());
+
+        resourceName = IntegrityMonitorTestBase.siteName + "." + IntegrityMonitorTestBase.nodeType;
+    }
+
+    @AfterClass
+    public static void tearDownClass() throws Exception {
+        IntegrityMonitorTestBase.tearDownAfterClass();
+    }
+
+    /**
+     * Set up for test cases.
+     */
+    @Before
+    public void setUp() {
+        super.setUpTest();
+
+        myProp = makeProperties();
+
+    }
+
+    @After
+    public void tearDown() {
+        super.tearDownTest();
+    }
+
+    // Ignore
+    @Test
+    public void testAllSeemsWell() throws Exception {
+        logger.debug("\nIntegrityMonitorTest: Entering testAllSeemsWell\n\n");
+
+        // parameters are passed via a properties file
+        myProp.put(IntegrityMonitorProperties.DEPENDENCY_GROUPS, "");
+        myProp.put(IntegrityMonitorProperties.TEST_VIA_JMX, "false");
+        myProp.put(IntegrityMonitorProperties.REFRESH_STATE_AUDIT_INTERVAL_MS, "-1");
+        myProp.put(IntegrityMonitorProperties.STATE_AUDIT_INTERVAL_MS, "-1");
+        myProp.put(IntegrityMonitorProperties.FAILED_COUNTER_THRESHOLD, "1");
+        myProp.put(IntegrityMonitorProperties.FP_MONITOR_INTERVAL, "5");
+        myProp.put(IntegrityMonitorProperties.TEST_TRANS_INTERVAL, "1");
+        myProp.put(IntegrityMonitorProperties.WRITE_FPC_INTERVAL, "1");
+
+        IntegrityMonitor.updateProperties(myProp);
+        /*
+         * The monitorInterval is 5 and the failedCounterThreshold is 1 A forward progress will be
+         * stale after 5 seconds.
+         */
+
+        IntegrityMonitor im = IntegrityMonitor.getInstance(resourceName, myProp);
+
+        StateManagement sm = im.getStateManager();
+
+        // Give it time to set the states in the DB
+        Thread.sleep(STATE_CYCLE_MS);
+
+        // Check the state
+        logger.debug(
+                "\n\ntestAllSeemsWell starting im state \nAdminState = {}\nOpState() = {}\nAvailStatus = {}\n"
+                        + "StandbyStatus = {}\n",
+                sm.getAdminState(), sm.getOpState(), sm.getAvailStatus(), sm.getStandbyStatus());
+
+        assertEquals(StateManagement.ENABLED, sm.getOpState());
+
+        // Indicate a failure
+        im.allSeemsWell(this.getClass().getName(), IntegrityMonitorProperties.ALLNOTWELL,
+                "'AllSeemsWellTest - ALLNOTWELL'");
+
+        // Wait for the state to change due to ALLNOTWELL
+        Thread.sleep(STATE_CYCLE_MS);
+        // Check the state
+        logger.debug(
+                "\n\ntestAllSeemsWell after ALLNOTWELL: im state \nAdminState = {}\nOpState() = {}\nAvailStatus = "
+                        + "{}\nStandbyStatus = {}\n",
+                sm.getAdminState(), sm.getOpState(), sm.getAvailStatus(), sm.getStandbyStatus());
+
+        // assertEquals(StateManagement.DISABLED, sm.getOpState());
+
+        Map<String, String> allNotWellMap = im.getAllNotWellMap();
+        for (String key : allNotWellMap.keySet()) {
+            logger.debug("AllSeemsWellTest: allNotWellMap: key = {}  msg = {}", key, allNotWellMap.get(key));
+        }
+        // assertEquals(1, allNotWellMap.size());
+
+        im.getAllSeemsWellMap();
+        // assertTrue(allSeemsWellMap.isEmpty());
+
+        // Return to normal
+        im.allSeemsWell(this.getClass().getName(), IntegrityMonitorProperties.ALLSEEMSWELL,
+                "'AllSeemsWellTest - ALLSEEMSWELL'");
+
+        // Wait for the state to change due to ALLNOTWELL
+        Thread.sleep(STATE_CYCLE_MS);
+        // Check the state
+        logger.debug(
+                "\n\ntestAllSeemsWell after ALLSEEMSWELL: im state \nAdminState = {}\nOpState() = {}\nAvailStatus = "
+                        + "{}\nStandbyStatus = {}\n",
+                sm.getAdminState(), sm.getOpState(), sm.getAvailStatus(), sm.getStandbyStatus());
+
+        // assertEquals(StateManagement.ENABLED, sm.getOpState());
+
+        allNotWellMap = im.getAllNotWellMap();
+        assertTrue(allNotWellMap.isEmpty());
+
+        Map<String, String> allSeemsWellMap = im.getAllSeemsWellMap();
+        assertEquals(1, allSeemsWellMap.size());
+        for (String key : allSeemsWellMap.keySet()) {
+            logger.debug("AllSeemsWellTest: allSeemsWellMap: key = {}  msg = {}", key, allSeemsWellMap.get(key));
+        }
+
+        // Check for null parameters
+        assertException(im, imx -> {
+            imx.allSeemsWell(null, IntegrityMonitorProperties.ALLSEEMSWELL, "'AllSeemsWellTest - ALLSEEMSWELL'");
+        });
+
+        assertException(im, imx -> {
+            im.allSeemsWell("", IntegrityMonitorProperties.ALLSEEMSWELL, "'AllSeemsWellTest - ALLSEEMSWELL'");
+        });
+
+        assertException(im, imx -> {
+            im.allSeemsWell(this.getClass().getName(), null, "'AllSeemsWellTest - ALLSEEMSWELL'");
+        });
+
+        assertException(im, imx -> {
+            im.allSeemsWell(this.getClass().getName(), IntegrityMonitorProperties.ALLSEEMSWELL, null);
+        });
+
+        assertException(im, imx -> {
+            im.allSeemsWell(this.getClass().getName(), IntegrityMonitorProperties.ALLSEEMSWELL, "");
+        });
+
+        logger.debug("\n\ntestAllSeemsWell: Exit\n\n");
+    }
 
 }
index 90de7c6..f3cb1ef 100644 (file)
@@ -23,14 +23,6 @@ package org.onap.policy.common.im;
 import static org.junit.Assert.assertEquals;
 
 import org.junit.Test;
-import org.onap.policy.common.im.AdministrativeStateException;
-import org.onap.policy.common.im.AllSeemsWellException;
-import org.onap.policy.common.im.ForwardProgressException;
-import org.onap.policy.common.im.IntegrityMonitorException;
-import org.onap.policy.common.im.IntegrityMonitorPropertiesException;
-import org.onap.policy.common.im.StandbyStatusException;
-import org.onap.policy.common.im.StateManagementException;
-import org.onap.policy.common.im.StateTransitionException;
 import org.onap.policy.common.im.jmx.ComponentAdminException;
 import org.onap.policy.common.utils.test.ExceptionsTester;
 
@@ -39,48 +31,48 @@ import org.onap.policy.common.utils.test.ExceptionsTester;
  */
 public class ExceptionsTest extends ExceptionsTester {
 
-       @Test
-       public void testStateTransitionException() throws Exception {
-               assertEquals(4, test(StateTransitionException.class));
-       }
+    @Test
+    public void testStateTransitionException() throws Exception {
+        assertEquals(4, test(StateTransitionException.class));
+    }
 
-       @Test
-       public void testStateManagementException() throws Exception {
-               assertEquals(4, test(StateManagementException.class));
-       }
+    @Test
+    public void testStateManagementException() throws Exception {
+        assertEquals(4, test(StateManagementException.class));
+    }
 
-       @Test
-       public void testStandbyStatusException() throws Exception {
-               assertEquals(5, test(StandbyStatusException.class));
-       }
+    @Test
+    public void testStandbyStatusException() throws Exception {
+        assertEquals(5, test(StandbyStatusException.class));
+    }
 
-       @Test
-       public void testIntegrityMonitorPropertiesException() throws Exception {
-               assertEquals(4, test(IntegrityMonitorPropertiesException.class));
-       }
+    @Test
+    public void testIntegrityMonitorPropertiesException() throws Exception {
+        assertEquals(4, test(IntegrityMonitorPropertiesException.class));
+    }
 
-       @Test
-       public void testIntegrityMonitorException() throws Exception {
-               assertEquals(5, test(IntegrityMonitorException.class));
-       }
+    @Test
+    public void testIntegrityMonitorException() throws Exception {
+        assertEquals(5, test(IntegrityMonitorException.class));
+    }
 
-       @Test
-       public void testForwardProgressException() throws Exception {
-               assertEquals(4, test(ForwardProgressException.class));
-       }
+    @Test
+    public void testForwardProgressException() throws Exception {
+        assertEquals(4, test(ForwardProgressException.class));
+    }
 
-       @Test
-       public void testAllSeemsWellException() throws Exception {
-               assertEquals(4, test(AllSeemsWellException.class));
-       }
+    @Test
+    public void testAllSeemsWellException() throws Exception {
+        assertEquals(4, test(AllSeemsWellException.class));
+    }
 
-       @Test
-       public void testAdministrativeStateException() throws Exception {
-               assertEquals(4, test(AdministrativeStateException.class));
-       }
+    @Test
+    public void testAdministrativeStateException() throws Exception {
+        assertEquals(4, test(AdministrativeStateException.class));
+    }
 
-       @Test
-       public void testComponentAdminException() throws Exception {
-               assertEquals(4, test(ComponentAdminException.class));
-       }
+    @Test
+    public void testComponentAdminException() throws Exception {
+        assertEquals(4, test(ComponentAdminException.class));
+    }
 }
index 3704b07..7f1e551 100644 (file)
@@ -51,857 +51,873 @@ import org.slf4j.LoggerFactory;
  * tasks.
  */
 public class IntegrityMonitorTest extends IntegrityMonitorTestBase {
-       private static Logger logger = LoggerFactory.getLogger(IntegrityMonitorTest.class);
-
-       private static Properties myProp;
-       private static EntityTransaction et;
-       private static String resourceName;
-
-       private BlockingQueue<CountDownLatch> queue;
-
-       @BeforeClass
-       public static void setUpClass() throws Exception {
-               IntegrityMonitorTestBase.setUpBeforeClass(DEFAULT_DB_URL_PREFIX + IntegrityMonitorTest.class.getSimpleName());
-
-               resourceName = IntegrityMonitorTestBase.siteName + "." + IntegrityMonitorTestBase.nodeType;
-       }
-
-       @AfterClass
-       public static void tearDownClass() throws Exception {
-               IntegrityMonitorTestBase.tearDownAfterClass();
-       }
-
-       @Before
-       public void setUp() throws Exception {
-               super.setUpTest();
-
-               myProp = makeProperties();
-               et = null;
-       }
-
-       @After
-       public void tearDown() throws Exception {
-               if (et != null && et.isActive()) {
-                       try {
-                               et.rollback();
-
-                       } catch (RuntimeException e) {
-                               logger.error("cannot rollback transaction", e);
-                       }
-               }
-
-               super.tearDownTest();
-       }
-
-       /*
-        * The following test verifies the following test cases: New Install New
-        * Install - Bad Dependency data Recovery from bad dependency data Lock Lock
-        * restart Unlock Unlock restart
-        */
-       @Test
-       public void testSanityJmx() throws Exception {
-               logger.debug("\nIntegrityMonitorTest: Entering testSanityJmx\n\n");
-
-               String dependent = "group1_logparser";
-
-               // parameters are passed via a properties file
-               myProp.put(IntegrityMonitorProperties.DEPENDENCY_GROUPS, dependent);
-               myProp.put(IntegrityMonitorProperties.TEST_VIA_JMX, "true");
-               // Disable the integrity monitor so it will not interfere
-               myProp.put(IntegrityMonitorProperties.FP_MONITOR_INTERVAL, "-1");
-               // Disable the refresh state audit
-               myProp.put(IntegrityMonitorProperties.REFRESH_STATE_AUDIT_INTERVAL_MS, "-1");
-               // Disable the state audit
-               myProp.put(IntegrityMonitorProperties.STATE_AUDIT_INTERVAL_MS, "-1");
-               // Disable the test transaction
-               myProp.put(IntegrityMonitorProperties.TEST_TRANS_INTERVAL, "-1");
-               // Disable the write FPC
-               myProp.put(IntegrityMonitorProperties.WRITE_FPC_INTERVAL, "-1");
-               // Speed up the check
-               myProp.put(IntegrityMonitorProperties.CHECK_DEPENDENCY_INTERVAL, "1");
-               // Fail dependencies after three seconds
-               myProp.put(IntegrityMonitorProperties.MAX_FPC_UPDATE_INTERVAL, "3");
-
-               IntegrityMonitor im = makeMonitor(resourceName, myProp);
-               logger.debug(
-                               "\n\ntestSanityJmx starting im state \nAdminState = {}\nOpState() = {}\nAvailStatus = {}\nStandbyStatus = {}\n",
-                               im.getStateManager().getAdminState(), im.getStateManager().getOpState(),
-                               im.getStateManager().getAvailStatus(), im.getStateManager().getStandbyStatus());
-               // add an entry to Resource registration table in the DB for the
-               // dependent resource
-
-               et = em.getTransaction();
-               et.begin();
-               Query rquery = em.createQuery("Select r from ResourceRegistrationEntity r where r.resourceName=:rn");
-               rquery.setParameter("rn", dependent);
-
-               @SuppressWarnings("rawtypes")
-               List rrList = rquery.getResultList();
-               ResourceRegistrationEntity rrx = null;
-               if (rrList.isEmpty()) {
-                       // register resource by adding entry to table in DB
-                       logger.debug("Adding resource {}  to ResourceRegistration table", dependent);
-                       rrx = new ResourceRegistrationEntity();
-                       // set columns in entry
-                       rrx.setResourceName(dependent);
-                       rrx.setResourceUrl("service:jmx:somewhere:9999");
-                       rrx.setNodeType("logparser");
-                       rrx.setSite("siteA");
-               }
-               em.persist(rrx);
-               // flush to the DB
-               em.flush();
-
-               // commit transaction
-               et.commit();
-
-               // wait for the FPManager to check dependency health
-               waitStep();
-
-               assertException(im, imx -> {
-                       imx.evaluateSanity();
-               });
-
-               // undo dependency groups and jmx test properties settings
-               myProp.put(IntegrityMonitorProperties.DEPENDENCY_GROUPS, "");
-               myProp.put(IntegrityMonitorProperties.TEST_VIA_JMX, "false");
-               IntegrityMonitor.updateProperties(myProp);
-
-               logger.debug("\ntestSantityJmx ending properties: {}", myProp);
-
-               // We know at this point that the IM is disable-dependency. We want to
-               // be
-               // sure it will recover from this condition since the properties were
-               // updated.
-
-               logger.debug(
-                               "\n\ntestSanityJmx ending im state\nAdminState = {}\nOpState() = {}\nAvailStatus = {}\nStandbyStatus = {}\n",
-                               im.getStateManager().getAdminState(), im.getStateManager().getOpState(),
-                               im.getStateManager().getAvailStatus(), im.getStateManager().getStandbyStatus());
-
-               logger.debug("\ntestSanityJmx restarting the IntegrityMonitor");
-               // Create a new instance. It should recover from the disabled-dependency
-               // condition
-               im = makeMonitor(resourceName, myProp);
-
-               logger.debug(
-                               "\n\ntestSanityJmx state after creating new im\n"
-                                               + "AdminState = {}\nOpState() = {}\nAvailStatus = {}\nStandbyStatus = {}\n",
-                               im.getStateManager().getAdminState(), im.getStateManager().getOpState(),
-                               im.getStateManager().getAvailStatus(), im.getStateManager().getStandbyStatus());
-
-               // Verify the state
-               assertEquals(StateManagement.UNLOCKED, im.getStateManager().getAdminState());
-               assertEquals(StateManagement.ENABLED, im.getStateManager().getOpState());
-               assertEquals(StateManagement.NULL_VALUE, im.getStateManager().getAvailStatus());
-               assertEquals(StateManagement.NULL_VALUE, im.getStateManager().getStandbyStatus());
-
-               // Test state manager via the IntegrityMonitor
-               StateManagement sm = im.getStateManager();
-
-               // Verify lock state
-               sm.lock();
-               logger.debug("\n\nsm.lock()\nAdminState = {}\nOpState() = {}\nAvailStatus = {}\nStandbyStatus = {}\n",
-                               sm.getAdminState(), sm.getOpState(), sm.getAvailStatus(), sm.getStandbyStatus());
-               assertEquals(StateManagement.LOCKED, sm.getAdminState());
-
-               // Verify lock persists across a restart
-               logger.debug("\ntestSanityJmx restarting the IntegrityMonitor");
-               // Create a new instance. It should come up with the admin state locked
-               im = makeMonitor(resourceName, myProp);
-               sm = im.getStateManager();
-               logger.debug(
-                               "\n\ntestSanityJmx restart with AdminState=locked"
-                                               + "\nAdminState = {}\nOpState() = {}\nAvailStatus = {}\nStandbyStatus = {}\n",
-                               sm.getAdminState(), sm.getOpState(), sm.getAvailStatus(), sm.getStandbyStatus());
-               assertEquals(StateManagement.LOCKED, sm.getAdminState());
-
-               // Verify unlock
-               sm.unlock();
-               logger.debug(
-                               "\n\ntestSanityJmx sm.unlock\nAdminState = {}\nOpState() = {}\nAvailStatus = {}\nStandbyStatus = {}\n",
-                               sm.getAdminState(), sm.getOpState(), sm.getAvailStatus(), sm.getStandbyStatus());
-               assertEquals(StateManagement.UNLOCKED, sm.getAdminState());
-
-               // Verify unlock restart
-               logger.debug("\ntestSanityJmx restarting the IntegrityMonitor");
-               // Create a new instance. It should come up with the admin state locked
-               im = makeMonitor(resourceName, myProp);
-               sm = im.getStateManager();
-               logger.debug(
-                               "\n\ntestSanityJmx restart with AdminState=unlocked\n"
-                                               + "AdminState = {}\nOpState() = {}\nAvailStatus = {}\nStandbyStatus = {}\n",
-                               sm.getAdminState(), sm.getOpState(), sm.getAvailStatus(), sm.getStandbyStatus());
-
-               assertEquals(StateManagement.UNLOCKED, sm.getAdminState());
-
-               logger.debug("\n\ntestSanityJmx: Exit\n\n");
-       }
-
-       @Test
-       public void testIM() throws Exception {
-               logger.debug("\nIntegrityMonitorTest: Entering testIM\n\n");
-
-               // Disable the integrity monitor so it will not interfere
-               myProp.put(IntegrityMonitorProperties.FP_MONITOR_INTERVAL, "-1");
-               // Disable dependency checking
-               myProp.put(IntegrityMonitorProperties.CHECK_DEPENDENCY_INTERVAL, "-1");
-               // Disable the refresh state audit
-               myProp.put(IntegrityMonitorProperties.REFRESH_STATE_AUDIT_INTERVAL_MS, "-1");
-               // Disable the state audit
-               myProp.put(IntegrityMonitorProperties.STATE_AUDIT_INTERVAL_MS, "-1");
-               // Disable the test transaction
-               myProp.put(IntegrityMonitorProperties.TEST_TRANS_INTERVAL, "-1");
-               // Disable writing the FPC
-               myProp.put(IntegrityMonitorProperties.WRITE_FPC_INTERVAL, "-1");
-
-               IntegrityMonitor im = makeMonitor(resourceName, myProp);
-
-               logger.debug("\n\nim initial state: \nAdminState = {}\nOpState() = {}\nAvailStatus = {}\nStandbyStatus = {}\n",
-                               im.getStateManager().getAdminState(), im.getStateManager().getOpState(),
-                               im.getStateManager().getAvailStatus(), im.getStateManager().getStandbyStatus());
-
-               waitStep();
-
-               // test evaluate sanity
-               assertNoException(im, imx -> {
-                       imx.evaluateSanity();
-               });
-
-               // Test startTransaction - should work since it is unlocked
-               assertNoException(im, imx -> {
-                       imx.startTransaction();
-               });
-
-               // Test state manager via the IntegrityMonitor
-               StateManagement sm = im.getStateManager();
-
-               sm.lock();
-
-               logger.debug("\n\nsm.lock()\nAdminState = {}\nOpState() = {}\nAvailStatus = {}\nStandbyStatus = {}\n",
-                               sm.getAdminState(), sm.getOpState(), sm.getAvailStatus(), sm.getStandbyStatus());
-
-               assertEquals(StateManagement.LOCKED, sm.getAdminState());
-
-               // test startTransaction. It should fail since it is locked
-               assertException(im, imx -> {
-                       imx.startTransaction();
-               });
-
-               sm.unlock();
-               logger.debug("\n\nsm.unlock()\nAdminState = {}\nOpState() = {}\nAvailStatus = {}\nStandbyStatus = {}\n",
-                               sm.getAdminState(), sm.getOpState(), sm.getAvailStatus(), sm.getStandbyStatus());
-               assertEquals(StateManagement.UNLOCKED, sm.getAdminState());
-
-               // test startTransaction. It should succeed
-               assertNoException(im, imx -> {
-                       imx.startTransaction();
-               });
-
-               sm.disableDependency();
-               logger.debug(
-                               "\n\nsm.disableDependency()\nAdminState = {}\nOpState() = {}\nAvailStatus = {}\nStandbyStatus = {}\n",
-                               sm.getAdminState(), sm.getOpState(), sm.getAvailStatus(), sm.getStandbyStatus());
-
-               assertEquals(StateManagement.DISABLED, sm.getOpState());
-               assertEquals(StateManagement.DEPENDENCY, sm.getAvailStatus());
-
-               // test startTransaction. It should succeed since standby status is null
-               // and unlocked
-               assertNoException(im, imx -> {
-                       imx.startTransaction();
-               });
-
-               sm.enableNoDependency();
-
-               logger.debug(
-                               "\n\nsm.enableNoDependency()\nAdminState = {}\nOpState() = {}\nAvailStatus = {}\nStandbyStatus = {}\n",
-                               sm.getAdminState(), sm.getOpState(), sm.getAvailStatus(), sm.getStandbyStatus());
-               assertEquals(StateManagement.ENABLED, sm.getOpState());
-               // test startTransaction. It should succeed since standby status is null
-               // and unlocked
-               assertNoException(im, imx -> {
-                       imx.startTransaction();
-               });
-
-               sm.disableFailed();
-               logger.debug("\n\nsm.disableFailed()\nAdminState = {}\nOpState() = {}\nAvailStatus = {}\nStandbyStatus = {}\n",
-                               sm.getAdminState(), sm.getOpState(), sm.getAvailStatus(), sm.getStandbyStatus());
-
-               assertEquals(StateManagement.DISABLED, sm.getOpState());
-               assertEquals(StateManagement.FAILED, sm.getAvailStatus());
-               // test startTransaction. It should succeed since standby status is null
-               // and unlocked
-               assertNoException(im, imx -> {
-                       imx.startTransaction();
-               });
-
-               sm.enableNotFailed();
-
-               logger.debug(
-                               "\n\nsm.enabledNotFailed()\nAdminState = {}\nOpState() = {}\nAvailStatus = {}\nStandbyStatus = {}\n",
-                               sm.getAdminState(), sm.getOpState(), sm.getAvailStatus(), sm.getStandbyStatus());
-
-               assertEquals(StateManagement.ENABLED, sm.getOpState());
-               // test startTransaction. It should succeed since standby status is null
-               // and unlocked
-               assertNoException(im, imx -> {
-                       imx.startTransaction();
-               });
-
-               sm.demote();
-
-               logger.debug("\n\nsm.demote()\nAdminState = {}\nOpState() = {}\nAvailStatus = {}\nStandbyStatus = {}\n",
-                               sm.getAdminState(), sm.getOpState(), sm.getAvailStatus(), sm.getStandbyStatus());
-
-               assertEquals(StateManagement.HOT_STANDBY, sm.getStandbyStatus());
-
-               // test startTransaction. It should fail since it is standby
-               assertException(im, imx -> {
-                       imx.startTransaction();
-               });
-
-               sm.promote();
-
-               logger.debug("\n\nsm.promote()\nAdminState = {}\nOpState() = {}\nAvailStatus = {}\nStandbyStatus = {}\n",
-                               sm.getAdminState(), sm.getOpState(), sm.getAvailStatus(), sm.getStandbyStatus());
-
-               assertEquals(StateManagement.PROVIDING_SERVICE, sm.getStandbyStatus());
-
-               // test startTransaction. It should succeed since it is providing
-               // service
-               assertNoException(im, imx -> {
-                       imx.startTransaction();
-               });
-
-               // Test the multi-valued availability status
-               sm.disableDependency();
-               sm.disableFailed();
-
-               logger.debug(
-                               "\n\nsm.disableDependency(), sm.disableFailed\nAdminState = {}\nOpState() = {}\nAvailStatus = {}\nStandbyStatus = {}\n",
-                               sm.getAdminState(), sm.getOpState(), sm.getAvailStatus(), sm.getStandbyStatus());
-
-               assertEquals(StateManagement.DEPENDENCY_FAILED, sm.getAvailStatus());
-
-               // Test startTransaction. Should fail since standby status is cold
-               // standby
-               assertException(im, imx -> {
-                       imx.startTransaction();
-               });
-
-               sm.enableNoDependency();
-
-               logger.debug(
-                               "\n\nsm.enableNoDependency()\nAdminState = {}\nOpState() = {}\nAvailStatus = {}\nStandbyStatus = {}\n",
-                               sm.getAdminState(), sm.getOpState(), sm.getAvailStatus(), sm.getStandbyStatus());
-               assertEquals(StateManagement.FAILED, sm.getAvailStatus());
-               // Test startTransaction. Should fail since standby status is cold
-               // standby
-               assertException(im, imx -> {
-                       imx.startTransaction();
-               });
-
-               sm.disableDependency();
-               sm.enableNotFailed();
-
-               logger.debug(
-                               "\n\nsm.disableDependency(),sm.enableNotFailed()\nAdminState = {}\nOpState() = {}\nAvailStatus = {}\nStandbyStatus = {}\n",
-                               sm.getAdminState(), sm.getOpState(), sm.getAvailStatus(), sm.getStandbyStatus());
-
-               assertEquals(StateManagement.DEPENDENCY, sm.getAvailStatus());
-               // Test startTransaction. Should fail since standby status is cold
-               // standby
-               assertException(im, imx -> {
-                       imx.startTransaction();
-               });
-
-               sm.enableNoDependency();
-               logger.debug(
-                               "\n\nsm.enableNoDependency()\nAdminState = {}\nOpState() = {}\nAvailStatus = {}\nStandbyStatus = {}\n",
-                               sm.getAdminState(), sm.getOpState(), sm.getAvailStatus(), sm.getStandbyStatus());
-               assertEquals(StateManagement.ENABLED, sm.getOpState());
-               // test startTransaction. It should fail since standby status is hot
-               // standby
-               assertException(im, imx -> {
-                       imx.startTransaction();
-               });
-
-               logger.debug("\n\ntestIM: Exit\n\n");
-       }
-
-       @Test
-       public void testSanityState() throws Exception {
-               logger.debug("\nIntegrityMonitorTest: Entering testSanityState\n\n");
-
-               // parameters are passed via a properties file
-               myProp.put(IntegrityMonitorProperties.DEPENDENCY_GROUPS, "group1_dep1,group1_dep2; group2_dep1");
-               // Disable the integrity monitor so it will not interfere
-               myProp.put(IntegrityMonitorProperties.FP_MONITOR_INTERVAL, "-1");
-               // Disable the refresh state audit
-               myProp.put(IntegrityMonitorProperties.REFRESH_STATE_AUDIT_INTERVAL_MS, "-1");
-               // Disable dependency checking so it does not interfere
-               myProp.put(IntegrityMonitorProperties.CHECK_DEPENDENCY_INTERVAL, "-1");
-               // Disable the state audit
-               myProp.put(IntegrityMonitorProperties.STATE_AUDIT_INTERVAL_MS, "-1");
-               // Disable the test transaction
-               myProp.put(IntegrityMonitorProperties.TEST_TRANS_INTERVAL, "-1");
-               // Disable writing the FPC
-               myProp.put(IntegrityMonitorProperties.WRITE_FPC_INTERVAL, "-1");
-               // Max interval for use in deciding if a FPC entry is stale in seconds
-               myProp.put(IntegrityMonitorProperties.MAX_FPC_UPDATE_INTERVAL, "120");
-
-               IntegrityMonitor im = makeMonitor(resourceName, myProp);
-
-               waitStep();
-
-               // Add a group1 dependent resources to put an entry in the forward
-               // progress table
-               ForwardProgressEntity fpe = new ForwardProgressEntity();
-               ForwardProgressEntity fpe2 = new ForwardProgressEntity();
-               fpe.setFpcCount(0);
-               fpe.setResourceName("group1_dep1");
-               fpe2.setFpcCount(0);
-               fpe2.setResourceName("group1_dep2");
-               et = em.getTransaction();
-               et.begin();
-               em.persist(fpe);
-               em.persist(fpe2);
-               em.flush();
-               et.commit();
-
-               // Add a group2 dependent resource to the StateManagementEntity DB table
-               // and set its admin state to locked
-               // Expect sanity test to fail.
-               StateManagement stateManager = new StateManagement(emf, "group2_dep1");
-               stateManager.lock();
-
-               new StateManagement(emf, "group1_dep1");
-               new StateManagement(emf, "group1_dep2");
-
-               // Call the dependency check directly instead of waiting for FPManager
-               // to do it.
-               logger.debug("\n\nIntegrityMonitor.testSanityState: calling im.dependencyCheck()\n\n");
-               im.dependencyCheck();
-               assertException(im, imx -> {
-                       imx.evaluateSanity();
-               });
-
-               logger.debug("\n\ntestSanityState: Exit\n\n");
-       }
-
-       @Test
-       public void testRefreshStateAudit() throws Exception {
-               logger.debug("\nIntegrityMonitorTest: testRefreshStateAudit Enter\n\n");
-
-               // parameters are passed via a properties file
-               myProp.put(IntegrityMonitorProperties.DEPENDENCY_GROUPS, "");
-               myProp.put(IntegrityMonitorProperties.TEST_VIA_JMX, "false");
-               // Disable the integrity monitor so it will not interfere
-               myProp.put(IntegrityMonitorProperties.FP_MONITOR_INTERVAL, "-1");
-               // Disable the refresh state audit
-               myProp.put(IntegrityMonitorProperties.REFRESH_STATE_AUDIT_INTERVAL_MS, "-1");
-               // Disable dependency checking so it does not interfere
-               myProp.put(IntegrityMonitorProperties.CHECK_DEPENDENCY_INTERVAL, "-1");
-               // Disable the state audit
-               myProp.put(IntegrityMonitorProperties.STATE_AUDIT_INTERVAL_MS, "-1");
-               // Disable the test transaction
-               myProp.put(IntegrityMonitorProperties.TEST_TRANS_INTERVAL, "-1");
-               // Disable writing the FPC
-               myProp.put(IntegrityMonitorProperties.WRITE_FPC_INTERVAL, "-1");
-
-               IntegrityMonitor im = makeMonitor(resourceName, myProp);
-
-               waitStep();
-
-               // the state here is unlocked, enabled, null, null
-               StateManagementEntity sme = null;
-
-               Query query = em.createQuery("Select p from StateManagementEntity p where p.resourceName=:resource");
-
-               query.setParameter("resource", resourceName);
-
-               // Just test that we are retrieving the right object
-               @SuppressWarnings("rawtypes")
-               List resourceList = query.getResultList();
-               if (!resourceList.isEmpty()) {
-                       // exist
-                       sme = (StateManagementEntity) resourceList.get(0);
-                       em.refresh(sme);
-
-                       logger.debug(
-                                       "??? -- Retrieve StateManagementEntity from database --\nsme.getResourceName() = {}\n"
-                                                       + "sme.getAdminState() = {}\nsme.getOpState() = {}\nsme.getAvailStatus() = {}\nsme.getStandbyStatus() = {}",
-                                       sme.getResourceName(), sme.getAdminState(), sme.getOpState(), sme.getAvailStatus(),
-                                       sme.getStandbyStatus());
-
-                       assertEquals(StateManagement.UNLOCKED, sme.getAdminState());
-                       assertEquals(StateManagement.ENABLED, sme.getOpState());
-                       assertEquals(StateManagement.NULL_VALUE, sme.getAvailStatus());
-                       assertEquals(StateManagement.NULL_VALUE, sme.getStandbyStatus());
-                       logger.debug("--");
-               } else {
-                       logger.debug("Record not found, resourceName: " + resourceName);
-                       fail("missing record");
-               }
-
-               et = em.getTransaction();
-               et.begin();
-
-               sme.setStandbyStatus(StateManagement.COLD_STANDBY);
-               em.persist(sme);
-               em.flush();
-               et.commit();
-
-               // Run the refreshStateAudit
-               im.executeRefreshStateAudit();
-
-               // The refreshStateAudit should run and change the state to
-               // unlocked,enabled,null,hotstandby
-               StateManagementEntity sme1 = null;
-
-               Query query1 = em.createQuery("Select p from StateManagementEntity p where p.resourceName=:resource");
-
-               query1.setParameter("resource", resourceName);
-
-               @SuppressWarnings("rawtypes")
-               List resourceList1 = query1.getResultList();
-               if (!resourceList1.isEmpty()) {
-                       // exist
-                       sme1 = (StateManagementEntity) resourceList1.get(0);
-                       em.refresh(sme1);
-                       logger.debug(
-                                       "??? -- Retrieve StateManagementEntity from database --\nsme1.getResourceName() = {}\n"
-                                                       + "sme1.getAdminState() = {}\nsme1.getOpState() = {}\nsme1.getAvailStatus() = {}\nsme1.getStandbyStatus() = {}",
-                                       sme1.getResourceName(), sme1.getAdminState(), sme1.getOpState(), sme1.getAvailStatus(),
-                                       sme1.getStandbyStatus());
-
-                       assertEquals(StateManagement.UNLOCKED, sme1.getAdminState());
-                       assertEquals(StateManagement.ENABLED, sme1.getOpState());
-                       assertEquals(StateManagement.NULL_VALUE, sme1.getAvailStatus());
-                       assertEquals(StateManagement.HOT_STANDBY, sme1.getStandbyStatus());
-                       logger.debug("--");
-               } else {
-                       logger.debug("Record not found, resourceName: " + resourceName);
-                       fail("record not found");
-               }
-
-               logger.debug("\nIntegrityMonitorTest: testRefreshStateAudit Exit\n\n");
-       }
-
-       @Test
-       public void testStateCheck() throws Exception {
-               logger.debug("\nIntegrityMonitorTest: Entering testStateCheck\n\n");
-
-               // parameters are passed via a properties file
-               myProp.put(IntegrityMonitorProperties.DEPENDENCY_GROUPS, "group1_dep1");
-               myProp.put(IntegrityMonitorProperties.TEST_VIA_JMX, "false");
-               myProp.put(IntegrityMonitorProperties.FAILED_COUNTER_THRESHOLD, "1");
-               /*
-                * The monitorInterval is set to 10 and the failedCounterThreshold is 1
-                * because stateCheck() uses the faileCounterThreshold * monitorInterval
-                * to determine if an entry is stale, it will be stale after 10 seconds.
-                */
-               myProp.put(IntegrityMonitorProperties.FP_MONITOR_INTERVAL, "5");
-               /*
-                * We accelerate the test transaction and write FPC intervals because we
-                * don't want there to be any chance of a FPC failure because of the
-                * short monitor interval
-                */
-               myProp.put(IntegrityMonitorProperties.TEST_TRANS_INTERVAL, "1");
-               myProp.put(IntegrityMonitorProperties.WRITE_FPC_INTERVAL, "2");
-               // Disable the refresh state audit
-               myProp.put(IntegrityMonitorProperties.REFRESH_STATE_AUDIT_INTERVAL_MS, "-1");
-               // The maximum time in seconds to determine that a FPC entry is stale
-               myProp.put(IntegrityMonitorProperties.MAX_FPC_UPDATE_INTERVAL, "5");
-               myProp.put(IntegrityMonitorProperties.CHECK_DEPENDENCY_INTERVAL, "5");
-
-               IntegrityMonitor im = makeMonitor(resourceName, myProp);
-
-               // Note: do ***NOT*** do waitStep() here
-
-               // Add a group1 dependent resources to put an entry in the forward
-               // progress table
-               // This sets lastUpdated to the current time
-               ForwardProgressEntity fpe = new ForwardProgressEntity();
-               fpe.setFpcCount(0);
-               fpe.setResourceName("group1_dep1");
-               et = em.getTransaction();
-               et.begin();
-               em.persist(fpe);
-               em.flush();
-               et.commit();
-
-               new StateManagement(emf, "group1_dep1");
-
-               assertNoException(im, imx -> {
-                       imx.evaluateSanity();
-               });
-
-               // wait for FPManager to perform dependency health check. Once that's
-               // done,
-               // it should now be stale and the sanity check should fail
-               waitStep();
-
-               assertException(im, imx -> {
-                       imx.evaluateSanity();
-               });
-
-               logger.debug("\n\ntestStateCheck: Exit\n\n");
-       }
-
-       @Test
-       public void testGetAllForwardProgressEntity() throws Exception {
-               logger.debug("\nIntegrityMonitorTest: Entering testGetAllForwardProgressEntity\n\n");
-               // parameters are passed via a properties file
-               myProp.put(IntegrityMonitorProperties.DEPENDENCY_GROUPS, "");
-               myProp.put(IntegrityMonitorProperties.TEST_VIA_JMX, "false");
-               // Disable the integrity monitor so it will not interfere
-               myProp.put(IntegrityMonitorProperties.FP_MONITOR_INTERVAL, "-1");
-               // Disable the refresh state audit
-               myProp.put(IntegrityMonitorProperties.REFRESH_STATE_AUDIT_INTERVAL_MS, "-1");
-               // Disable dependency checking so it does not interfere
-               myProp.put(IntegrityMonitorProperties.CHECK_DEPENDENCY_INTERVAL, "-1");
-               // Disable the state audit
-               myProp.put(IntegrityMonitorProperties.STATE_AUDIT_INTERVAL_MS, "-1");
-               // Disable the test transaction
-               myProp.put(IntegrityMonitorProperties.TEST_TRANS_INTERVAL, "-1");
-               // Disable writing the FPC
-               myProp.put(IntegrityMonitorProperties.WRITE_FPC_INTERVAL, "-1");
-
-               IntegrityMonitor im = makeMonitor(resourceName, myProp);
-               waitStep();
-
-               logger.debug("\nIntegrityMonitorTest: Creating ForwardProgressEntity entries\n\n");
-               // Add resource entries in the forward progress table
-               ForwardProgressEntity fpe = new ForwardProgressEntity();
-               ForwardProgressEntity fpe2 = new ForwardProgressEntity();
-               ForwardProgressEntity fpe3 = new ForwardProgressEntity();
-               fpe.setFpcCount(0);
-               fpe.setResourceName("siteA_pap2");
-               fpe2.setFpcCount(0);
-               fpe2.setResourceName("siteB_pap1");
-               fpe3.setFpcCount(0);
-               fpe3.setResourceName("siteB_pap2");
-               et = em.getTransaction();
-               et.begin();
-               em.persist(fpe);
-               em.persist(fpe2);
-               em.persist(fpe3);
-               em.flush();
-               et.commit();
-
-               logger.debug(
-                               "\nIntegrityMonitorTest:testGetAllForwardProgressEntity Calling im.getAllForwardProgressEntity()\n\n");
-               List<ForwardProgressEntity> fpeList = im.getAllForwardProgressEntity();
-
-               assertEquals(4, fpeList.size());
-
-               logger.debug("\nIntegrityMonitorTest: Exit testGetAllForwardProgressEntity\n\n");
-       }
-
-       @Test
-       public void testStateAudit() throws Exception {
-               logger.debug("\nIntegrityMonitorTest: Entering testStateAudit\n\n");
-
-               // parameters are passed via a properties file
-
-               // No Dependency Groups
-               myProp.put(IntegrityMonitorProperties.DEPENDENCY_GROUPS, "");
-               // Don't use JMX
-               myProp.put(IntegrityMonitorProperties.TEST_VIA_JMX, "false");
-               // Disable the internal sanity monitoring.
-               myProp.put(IntegrityMonitorProperties.FP_MONITOR_INTERVAL, "-1");
-               // Disable the dependency monitoring.
-               myProp.put(IntegrityMonitorProperties.CHECK_DEPENDENCY_INTERVAL, "-1");
-               // Disable the refresh state audit
-               myProp.put(IntegrityMonitorProperties.REFRESH_STATE_AUDIT_INTERVAL_MS, "-1");
-               // Disable the test transaction
-               myProp.put(IntegrityMonitorProperties.TEST_TRANS_INTERVAL, "-1");
-               // Disable the write FPC
-               myProp.put(IntegrityMonitorProperties.WRITE_FPC_INTERVAL, "-1");
-               // Disable the State Audit we will call it directly
-               myProp.put(IntegrityMonitorProperties.STATE_AUDIT_INTERVAL_MS, "-1");
-               // Max interval for use in deciding if a FPC entry is stale in seconds
-               myProp.put(IntegrityMonitorProperties.MAX_FPC_UPDATE_INTERVAL, "120");
-
-               IntegrityMonitor im = makeMonitor(resourceName, myProp);
-               waitStep();
-
-               logger.debug("\nIntegrityMonitorTest: Creating ForwardProgressEntity entries\n\n");
-               // Add resources to put an entry in the forward progress table
-               Date staleDate = new Date(0);
-               ForwardProgressEntity fpe1 = new ForwardProgressEntity();
-               ForwardProgressEntity fpe2 = new ForwardProgressEntity();
-               ForwardProgressEntity fpe3 = new ForwardProgressEntity();
-               fpe1.setFpcCount(0);
-               fpe1.setResourceName("siteA_pap2");
-               fpe2.setFpcCount(0);
-               fpe2.setResourceName("siteB_pap1");
-               fpe3.setFpcCount(0);
-               fpe3.setResourceName("siteB_pap2");
-               logger.debug("\nIntegrityMonitorTest: Creating StateManagementEntity entries\n\n");
-               StateManagementEntity sme1 = new StateManagementEntity();
-               StateManagementEntity sme2 = new StateManagementEntity();
-               StateManagementEntity sme3 = new StateManagementEntity();
-               sme1.setResourceName("siteA_pap2");
-               sme1.setAdminState(StateManagement.UNLOCKED);
-               sme1.setOpState(StateManagement.ENABLED);
-               sme1.setAvailStatus(StateManagement.NULL_VALUE);
-               sme1.setStandbyStatus(StateManagement.NULL_VALUE);
-               sme2.setResourceName("siteB_pap1");
-               sme2.setAdminState(StateManagement.UNLOCKED);
-               sme2.setOpState(StateManagement.ENABLED);
-               sme2.setAvailStatus(StateManagement.NULL_VALUE);
-               sme2.setStandbyStatus(StateManagement.NULL_VALUE);
-               sme3.setResourceName("siteB_pap2");
-               sme3.setAdminState(StateManagement.UNLOCKED);
-               sme3.setOpState(StateManagement.ENABLED);
-               sme3.setAvailStatus(StateManagement.NULL_VALUE);
-               sme3.setStandbyStatus(StateManagement.NULL_VALUE);
-               et = em.getTransaction();
-               et.begin();
-               em.persist(fpe1);
-               em.persist(fpe2);
-               em.persist(fpe3);
-               em.persist(sme1);
-               em.persist(sme2);
-               em.persist(sme3);
-               em.flush();
-               et.commit();
-
-               Query updateQuery = em.createQuery(
-                               "UPDATE ForwardProgressEntity f " + "SET f.lastUpdated = :newDate " + "WHERE f.resourceName=:resource");
-               updateQuery.setParameter("newDate", staleDate, TemporalType.TIMESTAMP);
-               updateQuery.setParameter("resource", fpe1.getResourceName());
-
-               et = em.getTransaction();
-               et.begin();
-               updateQuery.executeUpdate();
-               et.commit();
-
-               logger.debug("\nIntegrityMonitorTest:testStateAudit Calling im.getAllForwardProgressEntity()\n\n");
-               List<ForwardProgressEntity> fpeList = im.getAllForwardProgressEntity();
-
-               logger.debug("\n\n");
-               logger.debug("IntegrityMonitorTest:testStateAudit:ForwardProgressEntity entries");
-               for (ForwardProgressEntity myFpe : fpeList) {
-                       logger.debug("\n    ResourceName: {}" + "\n        LastUpdated: {}", myFpe.getResourceName(),
-                                       myFpe.getLastUpdated());
-               }
-               logger.debug("\n\n");
-
-               logger.debug("\nIntegrityMonitorTest:testStateAudit getting list of StateManagementEntity entries\n\n");
-               Query query = em.createQuery("SELECT s FROM StateManagementEntity s");
-               List<?> smeList = query.getResultList();
-
-               logger.debug("\n\n");
-               logger.debug("IntegrityMonitorTest:testStateAudit:StateManagementEntity entries");
-               for (Object mySme : smeList) {
-                       StateManagementEntity tmpSme = (StateManagementEntity) mySme;
-                       em.refresh(tmpSme);
-                       logger.debug(
-                                       "\n    ResourceName: {}" + "\n        AdminState: {}" + "\n        OpState: {}"
-                                                       + "\n        AvailStatus: {}" + "\n        StandbyStatus: {}",
-                                       tmpSme.getResourceName(), tmpSme.getAdminState(), tmpSme.getOpState(), tmpSme.getAvailStatus(),
-                                       tmpSme.getStandbyStatus());
-               }
-               logger.debug("\n\n");
-
-               em.refresh(sme1);
-               assertEquals(StateManagement.ENABLED, sme1.getOpState());
-
-               logger.debug("IntegrityMonitorTest:testStateAudit: calling stateAudit()");
-               im.executeStateAudit();
-               logger.debug("IntegrityMonitorTest:testStateAudit: call to stateAudit() complete");
-
-               logger.debug("\nIntegrityMonitorTest:testStateAudit getting list of StateManagementEntity entries\n\n");
-               smeList = query.getResultList();
-
-               logger.debug("\n\n");
-               logger.debug("IntegrityMonitorTest:testStateAudit:StateManagementEntity entries");
-               for (Object mySme : smeList) {
-                       StateManagementEntity tmpSme = (StateManagementEntity) mySme;
-                       em.refresh(tmpSme);
-                       logger.debug(
-                                       "\n    ResourceName: {}" + "\n        AdminState: {}" + "\n        OpState: {}"
-                                                       + "\n        AvailStatus: {}" + "\n        StandbyStatus: {}",
-                                       tmpSme.getResourceName(), tmpSme.getAdminState(), tmpSme.getOpState(), tmpSme.getAvailStatus(),
-                                       tmpSme.getStandbyStatus());
-               }
-               logger.debug("\n\n");
-
-               em.refresh(sme1);
-               assertEquals(StateManagement.DISABLED, sme1.getOpState());
-
-               // Now let's add sme2 to the mix
-               updateQuery = em.createQuery(
-                               "UPDATE ForwardProgressEntity f " + "SET f.lastUpdated = :newDate " + "WHERE f.resourceName=:resource");
-               updateQuery.setParameter("newDate", staleDate, TemporalType.TIMESTAMP);
-               updateQuery.setParameter("resource", fpe2.getResourceName());
-
-               et = em.getTransaction();
-               et.begin();
-               updateQuery.executeUpdate();
-               et.commit();
-
-               // Give it a chance to write the DB and run the audit
-               logger.debug("IntegrityMonitorTest:testStateAudit: (restart4) Running State Audit");
-               waitStep();
-               im.executeStateAudit();
-               waitStep();
-               logger.debug("IntegrityMonitorTest:testStateAudit: (restart4) State Audit complete");
-
-               // Now check its state
-               logger.debug(
-                               "\nIntegrityMonitorTest:testStateAudit (restart4) getting list of StateManagementEntity entries\n\n");
-               smeList = query.getResultList();
-
-               logger.debug("\n\n");
-               logger.debug("IntegrityMonitorTest:testStateAudit:StateManagementEntity (restart4) entries");
-               for (Object mySme : smeList) {
-                       StateManagementEntity tmpSme = (StateManagementEntity) mySme;
-                       em.refresh(tmpSme);
-
-                       logger.debug(
-                                       "\n    (restart4) ResourceName: {}" + "\n        AdminState: {}" + "\n        OpState: {}"
-                                                       + "\n        AvailStatus: {}" + "\n        StandbyStatus: {}",
-                                       tmpSme.getResourceName(), tmpSme.getAdminState(), tmpSme.getOpState(), tmpSme.getAvailStatus(),
-                                       tmpSme.getStandbyStatus());
-               }
-               logger.debug("\n\n");
-
-               em.refresh(sme1);
-               assertEquals(StateManagement.DISABLED, sme1.getOpState());
-
-               em.refresh(sme2);
-               assertEquals(StateManagement.DISABLED, sme2.getOpState());
-
-               logger.debug("\nIntegrityMonitorTest: Exit testStateAudit\n\n");
-               System.out.println("\n\ntestStateAudit: Exit\n\n");
-       }
-
-       private IntegrityMonitor makeMonitor(String resourceName, Properties myProp) throws Exception {
-               IntegrityMonitor.deleteInstance();
-
-               queue = new LinkedBlockingQueue<>();
-
-               IntegrityMonitor im = IntegrityMonitor.getInstance(resourceName, myProp, queue);
-
-               // wait for the monitor thread to start
-               waitStep();
-
-               return im;
-       }
-
-       /**
-        * Waits for the FPManager to complete another cycle.
-        * 
-        * @throws InterruptedException
-        */
-       private void waitStep() throws InterruptedException {
-               CountDownLatch latch = new CountDownLatch(1);
-               queue.offer(latch);
-               waitLatch(latch);
-       }
+    private static Logger logger = LoggerFactory.getLogger(IntegrityMonitorTest.class);
+
+    private static Properties myProp;
+    private static EntityTransaction et;
+    private static String resourceName;
+
+    private BlockingQueue<CountDownLatch> queue;
+
+    /**
+     * Set up for test class.
+     */
+    @BeforeClass
+    public static void setUpClass() throws Exception {
+        IntegrityMonitorTestBase.setUpBeforeClass(DEFAULT_DB_URL_PREFIX + IntegrityMonitorTest.class.getSimpleName());
+
+        resourceName = IntegrityMonitorTestBase.siteName + "." + IntegrityMonitorTestBase.nodeType;
+    }
+
+    /**
+     * Tear down after test class.
+     */
+    @AfterClass
+    public static void tearDownClass() throws Exception {
+        IntegrityMonitorTestBase.tearDownAfterClass();
+    }
+
+    /**
+     * Set up for test cases.
+     */
+    @Before
+    public void setUp() throws Exception {
+        super.setUpTest();
+
+        myProp = makeProperties();
+        et = null;
+    }
+
+    /**
+     * Tear down after test cases.
+     */
+    @After
+    public void tearDown() throws Exception {
+        if (et != null && et.isActive()) {
+            try {
+                et.rollback();
+
+            } catch (RuntimeException e) {
+                logger.error("cannot rollback transaction", e);
+            }
+        }
+
+        super.tearDownTest();
+    }
+
+    /*
+     * The following test verifies the following test cases: New Install New Install - Bad
+     * Dependency data Recovery from bad dependency data Lock Lock restart Unlock Unlock restart
+     */
+    @Test
+    public void testSanityJmx() throws Exception {
+        logger.debug("\nIntegrityMonitorTest: Entering testSanityJmx\n\n");
+
+        String dependent = "group1_logparser";
+
+        // parameters are passed via a properties file
+        myProp.put(IntegrityMonitorProperties.DEPENDENCY_GROUPS, dependent);
+        myProp.put(IntegrityMonitorProperties.TEST_VIA_JMX, "true");
+        // Disable the integrity monitor so it will not interfere
+        myProp.put(IntegrityMonitorProperties.FP_MONITOR_INTERVAL, "-1");
+        // Disable the refresh state audit
+        myProp.put(IntegrityMonitorProperties.REFRESH_STATE_AUDIT_INTERVAL_MS, "-1");
+        // Disable the state audit
+        myProp.put(IntegrityMonitorProperties.STATE_AUDIT_INTERVAL_MS, "-1");
+        // Disable the test transaction
+        myProp.put(IntegrityMonitorProperties.TEST_TRANS_INTERVAL, "-1");
+        // Disable the write FPC
+        myProp.put(IntegrityMonitorProperties.WRITE_FPC_INTERVAL, "-1");
+        // Speed up the check
+        myProp.put(IntegrityMonitorProperties.CHECK_DEPENDENCY_INTERVAL, "1");
+        // Fail dependencies after three seconds
+        myProp.put(IntegrityMonitorProperties.MAX_FPC_UPDATE_INTERVAL, "3");
+
+        IntegrityMonitor im = makeMonitor(resourceName, myProp);
+        logger.debug(
+                "\n\ntestSanityJmx starting im state \nAdminState = {}\nOpState() = {}\nAvailStatus = {}\n"
+                        + "StandbyStatus = {}\n",
+                im.getStateManager().getAdminState(), im.getStateManager().getOpState(),
+                im.getStateManager().getAvailStatus(), im.getStateManager().getStandbyStatus());
+        // add an entry to Resource registration table in the DB for the
+        // dependent resource
+
+        et = em.getTransaction();
+        et.begin();
+        Query rquery = em.createQuery("Select r from ResourceRegistrationEntity r where r.resourceName=:rn");
+        rquery.setParameter("rn", dependent);
+
+        @SuppressWarnings("rawtypes")
+        List rrList = rquery.getResultList();
+        ResourceRegistrationEntity rrx = null;
+        if (rrList.isEmpty()) {
+            // register resource by adding entry to table in DB
+            logger.debug("Adding resource {}  to ResourceRegistration table", dependent);
+            rrx = new ResourceRegistrationEntity();
+            // set columns in entry
+            rrx.setResourceName(dependent);
+            rrx.setResourceUrl("service:jmx:somewhere:9999");
+            rrx.setNodeType("logparser");
+            rrx.setSite("siteA");
+        }
+        em.persist(rrx);
+        // flush to the DB
+        em.flush();
+
+        // commit transaction
+        et.commit();
+
+        // wait for the FPManager to check dependency health
+        waitStep();
+
+        assertException(im, imx -> {
+            imx.evaluateSanity();
+        });
+
+        // undo dependency groups and jmx test properties settings
+        myProp.put(IntegrityMonitorProperties.DEPENDENCY_GROUPS, "");
+        myProp.put(IntegrityMonitorProperties.TEST_VIA_JMX, "false");
+        IntegrityMonitor.updateProperties(myProp);
+
+        logger.debug("\ntestSantityJmx ending properties: {}", myProp);
+
+        // We know at this point that the IM is disable-dependency. We want to
+        // be
+        // sure it will recover from this condition since the properties were
+        // updated.
+
+        logger.debug(
+                "\n\ntestSanityJmx ending im state\nAdminState = {}\nOpState() = {}\nAvailStatus = {}\n"
+                        + "StandbyStatus = {}\n",
+                im.getStateManager().getAdminState(), im.getStateManager().getOpState(),
+                im.getStateManager().getAvailStatus(), im.getStateManager().getStandbyStatus());
+
+        logger.debug("\ntestSanityJmx restarting the IntegrityMonitor");
+        // Create a new instance. It should recover from the disabled-dependency
+        // condition
+        im = makeMonitor(resourceName, myProp);
+
+        logger.debug(
+                "\n\ntestSanityJmx state after creating new im\n"
+                        + "AdminState = {}\nOpState() = {}\nAvailStatus = {}\nStandbyStatus = {}\n",
+                im.getStateManager().getAdminState(), im.getStateManager().getOpState(),
+                im.getStateManager().getAvailStatus(), im.getStateManager().getStandbyStatus());
+
+        // Verify the state
+        assertEquals(StateManagement.UNLOCKED, im.getStateManager().getAdminState());
+        assertEquals(StateManagement.ENABLED, im.getStateManager().getOpState());
+        assertEquals(StateManagement.NULL_VALUE, im.getStateManager().getAvailStatus());
+        assertEquals(StateManagement.NULL_VALUE, im.getStateManager().getStandbyStatus());
+
+        // Test state manager via the IntegrityMonitor
+        StateManagement sm = im.getStateManager();
+
+        // Verify lock state
+        sm.lock();
+        logger.debug("\n\nsm.lock()\nAdminState = {}\nOpState() = {}\nAvailStatus = {}\nStandbyStatus = {}\n",
+                sm.getAdminState(), sm.getOpState(), sm.getAvailStatus(), sm.getStandbyStatus());
+        assertEquals(StateManagement.LOCKED, sm.getAdminState());
+
+        // Verify lock persists across a restart
+        logger.debug("\ntestSanityJmx restarting the IntegrityMonitor");
+        // Create a new instance. It should come up with the admin state locked
+        im = makeMonitor(resourceName, myProp);
+        sm = im.getStateManager();
+        logger.debug(
+                "\n\ntestSanityJmx restart with AdminState=locked"
+                        + "\nAdminState = {}\nOpState() = {}\nAvailStatus = {}\nStandbyStatus = {}\n",
+                sm.getAdminState(), sm.getOpState(), sm.getAvailStatus(), sm.getStandbyStatus());
+        assertEquals(StateManagement.LOCKED, sm.getAdminState());
+
+        // Verify unlock
+        sm.unlock();
+        logger.debug(
+                "\n\ntestSanityJmx sm.unlock\nAdminState = {}\nOpState() = {}\nAvailStatus = {}\nStandbyStatus = {}\n",
+                sm.getAdminState(), sm.getOpState(), sm.getAvailStatus(), sm.getStandbyStatus());
+        assertEquals(StateManagement.UNLOCKED, sm.getAdminState());
+
+        // Verify unlock restart
+        logger.debug("\ntestSanityJmx restarting the IntegrityMonitor");
+        // Create a new instance. It should come up with the admin state locked
+        im = makeMonitor(resourceName, myProp);
+        sm = im.getStateManager();
+        logger.debug(
+                "\n\ntestSanityJmx restart with AdminState=unlocked\n"
+                        + "AdminState = {}\nOpState() = {}\nAvailStatus = {}\nStandbyStatus = {}\n",
+                sm.getAdminState(), sm.getOpState(), sm.getAvailStatus(), sm.getStandbyStatus());
+
+        assertEquals(StateManagement.UNLOCKED, sm.getAdminState());
+
+        logger.debug("\n\ntestSanityJmx: Exit\n\n");
+    }
+
+    @Test
+    public void testIm() throws Exception {
+        logger.debug("\nIntegrityMonitorTest: Entering testIM\n\n");
+
+        // Disable the integrity monitor so it will not interfere
+        myProp.put(IntegrityMonitorProperties.FP_MONITOR_INTERVAL, "-1");
+        // Disable dependency checking
+        myProp.put(IntegrityMonitorProperties.CHECK_DEPENDENCY_INTERVAL, "-1");
+        // Disable the refresh state audit
+        myProp.put(IntegrityMonitorProperties.REFRESH_STATE_AUDIT_INTERVAL_MS, "-1");
+        // Disable the state audit
+        myProp.put(IntegrityMonitorProperties.STATE_AUDIT_INTERVAL_MS, "-1");
+        // Disable the test transaction
+        myProp.put(IntegrityMonitorProperties.TEST_TRANS_INTERVAL, "-1");
+        // Disable writing the FPC
+        myProp.put(IntegrityMonitorProperties.WRITE_FPC_INTERVAL, "-1");
+
+        IntegrityMonitor im = makeMonitor(resourceName, myProp);
+
+        logger.debug("\n\nim initial state: \nAdminState = {}\nOpState() = {}\nAvailStatus = {}\nStandbyStatus = {}\n",
+                im.getStateManager().getAdminState(), im.getStateManager().getOpState(),
+                im.getStateManager().getAvailStatus(), im.getStateManager().getStandbyStatus());
+
+        waitStep();
+
+        // test evaluate sanity
+        assertNoException(im, imx -> {
+            imx.evaluateSanity();
+        });
+
+        // Test startTransaction - should work since it is unlocked
+        assertNoException(im, imx -> {
+            imx.startTransaction();
+        });
+
+        // Test state manager via the IntegrityMonitor
+        StateManagement sm = im.getStateManager();
+
+        sm.lock();
+
+        logger.debug("\n\nsm.lock()\nAdminState = {}\nOpState() = {}\nAvailStatus = {}\nStandbyStatus = {}\n",
+                sm.getAdminState(), sm.getOpState(), sm.getAvailStatus(), sm.getStandbyStatus());
+
+        assertEquals(StateManagement.LOCKED, sm.getAdminState());
+
+        // test startTransaction. It should fail since it is locked
+        assertException(im, imx -> {
+            imx.startTransaction();
+        });
+
+        sm.unlock();
+        logger.debug("\n\nsm.unlock()\nAdminState = {}\nOpState() = {}\nAvailStatus = {}\nStandbyStatus = {}\n",
+                sm.getAdminState(), sm.getOpState(), sm.getAvailStatus(), sm.getStandbyStatus());
+        assertEquals(StateManagement.UNLOCKED, sm.getAdminState());
+
+        // test startTransaction. It should succeed
+        assertNoException(im, imx -> {
+            imx.startTransaction();
+        });
+
+        sm.disableDependency();
+        logger.debug(
+                "\n\nsm.disableDependency()\nAdminState = {}\nOpState() = {}\nAvailStatus = {}\nStandbyStatus = {}\n",
+                sm.getAdminState(), sm.getOpState(), sm.getAvailStatus(), sm.getStandbyStatus());
+
+        assertEquals(StateManagement.DISABLED, sm.getOpState());
+        assertEquals(StateManagement.DEPENDENCY, sm.getAvailStatus());
+
+        // test startTransaction. It should succeed since standby status is null
+        // and unlocked
+        assertNoException(im, imx -> {
+            imx.startTransaction();
+        });
+
+        sm.enableNoDependency();
+
+        logger.debug(
+                "\n\nsm.enableNoDependency()\nAdminState = {}\nOpState() = {}\nAvailStatus = {}\nStandbyStatus = {}\n",
+                sm.getAdminState(), sm.getOpState(), sm.getAvailStatus(), sm.getStandbyStatus());
+        assertEquals(StateManagement.ENABLED, sm.getOpState());
+        // test startTransaction. It should succeed since standby status is null
+        // and unlocked
+        assertNoException(im, imx -> {
+            imx.startTransaction();
+        });
+
+        sm.disableFailed();
+        logger.debug("\n\nsm.disableFailed()\nAdminState = {}\nOpState() = {}\nAvailStatus = {}\nStandbyStatus = {}\n",
+                sm.getAdminState(), sm.getOpState(), sm.getAvailStatus(), sm.getStandbyStatus());
+
+        assertEquals(StateManagement.DISABLED, sm.getOpState());
+        assertEquals(StateManagement.FAILED, sm.getAvailStatus());
+        // test startTransaction. It should succeed since standby status is null
+        // and unlocked
+        assertNoException(im, imx -> {
+            imx.startTransaction();
+        });
+
+        sm.enableNotFailed();
+
+        logger.debug(
+                "\n\nsm.enabledNotFailed()\nAdminState = {}\nOpState() = {}\nAvailStatus = {}\nStandbyStatus = {}\n",
+                sm.getAdminState(), sm.getOpState(), sm.getAvailStatus(), sm.getStandbyStatus());
+
+        assertEquals(StateManagement.ENABLED, sm.getOpState());
+        // test startTransaction. It should succeed since standby status is null
+        // and unlocked
+        assertNoException(im, imx -> {
+            imx.startTransaction();
+        });
+
+        sm.demote();
+
+        logger.debug("\n\nsm.demote()\nAdminState = {}\nOpState() = {}\nAvailStatus = {}\nStandbyStatus = {}\n",
+                sm.getAdminState(), sm.getOpState(), sm.getAvailStatus(), sm.getStandbyStatus());
+
+        assertEquals(StateManagement.HOT_STANDBY, sm.getStandbyStatus());
+
+        // test startTransaction. It should fail since it is standby
+        assertException(im, imx -> {
+            imx.startTransaction();
+        });
+
+        sm.promote();
+
+        logger.debug("\n\nsm.promote()\nAdminState = {}\nOpState() = {}\nAvailStatus = {}\nStandbyStatus = {}\n",
+                sm.getAdminState(), sm.getOpState(), sm.getAvailStatus(), sm.getStandbyStatus());
+
+        assertEquals(StateManagement.PROVIDING_SERVICE, sm.getStandbyStatus());
+
+        // test startTransaction. It should succeed since it is providing
+        // service
+        assertNoException(im, imx -> {
+            imx.startTransaction();
+        });
+
+        // Test the multi-valued availability status
+        sm.disableDependency();
+        sm.disableFailed();
+
+        logger.debug(
+                "\n\nsm.disableDependency(), sm.disableFailed\nAdminState = {}\nOpState() = {}\nAvailStatus = {}\n"
+                        + "StandbyStatus = {}\n",
+                sm.getAdminState(), sm.getOpState(), sm.getAvailStatus(), sm.getStandbyStatus());
+
+        assertEquals(StateManagement.DEPENDENCY_FAILED, sm.getAvailStatus());
+
+        // Test startTransaction. Should fail since standby status is cold
+        // standby
+        assertException(im, imx -> {
+            imx.startTransaction();
+        });
+
+        sm.enableNoDependency();
+
+        logger.debug(
+                "\n\nsm.enableNoDependency()\nAdminState = {}\nOpState() = {}\nAvailStatus = {}\nStandbyStatus = {}\n",
+                sm.getAdminState(), sm.getOpState(), sm.getAvailStatus(), sm.getStandbyStatus());
+        assertEquals(StateManagement.FAILED, sm.getAvailStatus());
+        // Test startTransaction. Should fail since standby status is cold
+        // standby
+        assertException(im, imx -> {
+            imx.startTransaction();
+        });
+
+        sm.disableDependency();
+        sm.enableNotFailed();
+
+        logger.debug(
+                "\n\nsm.disableDependency(),sm.enableNotFailed()\nAdminState = {}\nOpState() = {}\nAvailStatus = {}\n"
+                        + "StandbyStatus = {}\n",
+                sm.getAdminState(), sm.getOpState(), sm.getAvailStatus(), sm.getStandbyStatus());
+
+        assertEquals(StateManagement.DEPENDENCY, sm.getAvailStatus());
+        // Test startTransaction. Should fail since standby status is cold
+        // standby
+        assertException(im, imx -> {
+            imx.startTransaction();
+        });
+
+        sm.enableNoDependency();
+        logger.debug(
+                "\n\nsm.enableNoDependency()\nAdminState = {}\nOpState() = {}\nAvailStatus = {}\nStandbyStatus = {}\n",
+                sm.getAdminState(), sm.getOpState(), sm.getAvailStatus(), sm.getStandbyStatus());
+        assertEquals(StateManagement.ENABLED, sm.getOpState());
+        // test startTransaction. It should fail since standby status is hot
+        // standby
+        assertException(im, imx -> {
+            imx.startTransaction();
+        });
+
+        logger.debug("\n\ntestIM: Exit\n\n");
+    }
+
+    @Test
+    public void testSanityState() throws Exception {
+        logger.debug("\nIntegrityMonitorTest: Entering testSanityState\n\n");
+
+        // parameters are passed via a properties file
+        myProp.put(IntegrityMonitorProperties.DEPENDENCY_GROUPS, "group1_dep1,group1_dep2; group2_dep1");
+        // Disable the integrity monitor so it will not interfere
+        myProp.put(IntegrityMonitorProperties.FP_MONITOR_INTERVAL, "-1");
+        // Disable the refresh state audit
+        myProp.put(IntegrityMonitorProperties.REFRESH_STATE_AUDIT_INTERVAL_MS, "-1");
+        // Disable dependency checking so it does not interfere
+        myProp.put(IntegrityMonitorProperties.CHECK_DEPENDENCY_INTERVAL, "-1");
+        // Disable the state audit
+        myProp.put(IntegrityMonitorProperties.STATE_AUDIT_INTERVAL_MS, "-1");
+        // Disable the test transaction
+        myProp.put(IntegrityMonitorProperties.TEST_TRANS_INTERVAL, "-1");
+        // Disable writing the FPC
+        myProp.put(IntegrityMonitorProperties.WRITE_FPC_INTERVAL, "-1");
+        // Max interval for use in deciding if a FPC entry is stale in seconds
+        myProp.put(IntegrityMonitorProperties.MAX_FPC_UPDATE_INTERVAL, "120");
+
+        final IntegrityMonitor im = makeMonitor(resourceName, myProp);
+
+        waitStep();
+
+        // Add a group1 dependent resources to put an entry in the forward
+        // progress table
+        ForwardProgressEntity fpe = new ForwardProgressEntity();
+        ForwardProgressEntity fpe2 = new ForwardProgressEntity();
+        fpe.setFpcCount(0);
+        fpe.setResourceName("group1_dep1");
+        fpe2.setFpcCount(0);
+        fpe2.setResourceName("group1_dep2");
+        et = em.getTransaction();
+        et.begin();
+        em.persist(fpe);
+        em.persist(fpe2);
+        em.flush();
+        et.commit();
+
+        // Add a group2 dependent resource to the StateManagementEntity DB table
+        // and set its admin state to locked
+        // Expect sanity test to fail.
+        StateManagement stateManager = new StateManagement(emf, "group2_dep1");
+        stateManager.lock();
+
+        new StateManagement(emf, "group1_dep1");
+        new StateManagement(emf, "group1_dep2");
+
+        // Call the dependency check directly instead of waiting for FPManager
+        // to do it.
+        logger.debug("\n\nIntegrityMonitor.testSanityState: calling im.dependencyCheck()\n\n");
+        im.dependencyCheck();
+        assertException(im, imx -> {
+            imx.evaluateSanity();
+        });
+
+        logger.debug("\n\ntestSanityState: Exit\n\n");
+    }
+
+    @Test
+    public void testRefreshStateAudit() throws Exception {
+        logger.debug("\nIntegrityMonitorTest: testRefreshStateAudit Enter\n\n");
+
+        // parameters are passed via a properties file
+        myProp.put(IntegrityMonitorProperties.DEPENDENCY_GROUPS, "");
+        myProp.put(IntegrityMonitorProperties.TEST_VIA_JMX, "false");
+        // Disable the integrity monitor so it will not interfere
+        myProp.put(IntegrityMonitorProperties.FP_MONITOR_INTERVAL, "-1");
+        // Disable the refresh state audit
+        myProp.put(IntegrityMonitorProperties.REFRESH_STATE_AUDIT_INTERVAL_MS, "-1");
+        // Disable dependency checking so it does not interfere
+        myProp.put(IntegrityMonitorProperties.CHECK_DEPENDENCY_INTERVAL, "-1");
+        // Disable the state audit
+        myProp.put(IntegrityMonitorProperties.STATE_AUDIT_INTERVAL_MS, "-1");
+        // Disable the test transaction
+        myProp.put(IntegrityMonitorProperties.TEST_TRANS_INTERVAL, "-1");
+        // Disable writing the FPC
+        myProp.put(IntegrityMonitorProperties.WRITE_FPC_INTERVAL, "-1");
+
+        final IntegrityMonitor im = makeMonitor(resourceName, myProp);
+
+        waitStep();
+
+        // the state here is unlocked, enabled, null, null
+        StateManagementEntity sme = null;
+
+        Query query = em.createQuery("Select p from StateManagementEntity p where p.resourceName=:resource");
+
+        query.setParameter("resource", resourceName);
+
+        // Just test that we are retrieving the right object
+        @SuppressWarnings("rawtypes")
+        List resourceList = query.getResultList();
+        if (!resourceList.isEmpty()) {
+            // exist
+            sme = (StateManagementEntity) resourceList.get(0);
+            em.refresh(sme);
+
+            logger.debug(
+                    "??? -- Retrieve StateManagementEntity from database --\nsme.getResourceName() = {}\n"
+                            + "sme.getAdminState() = {}\nsme.getOpState() = {}\nsme.getAvailStatus() = {}\n"
+                            + "sme.getStandbyStatus() = {}",
+                    sme.getResourceName(), sme.getAdminState(), sme.getOpState(), sme.getAvailStatus(),
+                    sme.getStandbyStatus());
+
+            assertEquals(StateManagement.UNLOCKED, sme.getAdminState());
+            assertEquals(StateManagement.ENABLED, sme.getOpState());
+            assertEquals(StateManagement.NULL_VALUE, sme.getAvailStatus());
+            assertEquals(StateManagement.NULL_VALUE, sme.getStandbyStatus());
+            logger.debug("--");
+        } else {
+            logger.debug("Record not found, resourceName: " + resourceName);
+            fail("missing record");
+        }
+
+        et = em.getTransaction();
+        et.begin();
+
+        sme.setStandbyStatus(StateManagement.COLD_STANDBY);
+        em.persist(sme);
+        em.flush();
+        et.commit();
+
+        // Run the refreshStateAudit
+        im.executeRefreshStateAudit();
+
+        // The refreshStateAudit should run and change the state to
+        // unlocked,enabled,null,hotstandby
+        StateManagementEntity sme1 = null;
+
+        Query query1 = em.createQuery("Select p from StateManagementEntity p where p.resourceName=:resource");
+
+        query1.setParameter("resource", resourceName);
+
+        @SuppressWarnings("rawtypes")
+        List resourceList1 = query1.getResultList();
+        if (!resourceList1.isEmpty()) {
+            // exist
+            sme1 = (StateManagementEntity) resourceList1.get(0);
+            em.refresh(sme1);
+            logger.debug(
+                    "??? -- Retrieve StateManagementEntity from database --\nsme1.getResourceName() = {}\n"
+                            + "sme1.getAdminState() = {}\nsme1.getOpState() = {}\nsme1.getAvailStatus() = {}\n"
+                            + "sme1.getStandbyStatus() = {}",
+                    sme1.getResourceName(), sme1.getAdminState(), sme1.getOpState(), sme1.getAvailStatus(),
+                    sme1.getStandbyStatus());
+
+            assertEquals(StateManagement.UNLOCKED, sme1.getAdminState());
+            assertEquals(StateManagement.ENABLED, sme1.getOpState());
+            assertEquals(StateManagement.NULL_VALUE, sme1.getAvailStatus());
+            assertEquals(StateManagement.HOT_STANDBY, sme1.getStandbyStatus());
+            logger.debug("--");
+        } else {
+            logger.debug("Record not found, resourceName: " + resourceName);
+            fail("record not found");
+        }
+
+        logger.debug("\nIntegrityMonitorTest: testRefreshStateAudit Exit\n\n");
+    }
+
+    @Test
+    public void testStateCheck() throws Exception {
+        logger.debug("\nIntegrityMonitorTest: Entering testStateCheck\n\n");
+
+        // parameters are passed via a properties file
+        myProp.put(IntegrityMonitorProperties.DEPENDENCY_GROUPS, "group1_dep1");
+        myProp.put(IntegrityMonitorProperties.TEST_VIA_JMX, "false");
+        myProp.put(IntegrityMonitorProperties.FAILED_COUNTER_THRESHOLD, "1");
+        /*
+         * The monitorInterval is set to 10 and the failedCounterThreshold is 1 because stateCheck()
+         * uses the faileCounterThreshold * monitorInterval to determine if an entry is stale, it
+         * will be stale after 10 seconds.
+         */
+        myProp.put(IntegrityMonitorProperties.FP_MONITOR_INTERVAL, "5");
+        /*
+         * We accelerate the test transaction and write FPC intervals because we don't want there to
+         * be any chance of a FPC failure because of the short monitor interval
+         */
+        myProp.put(IntegrityMonitorProperties.TEST_TRANS_INTERVAL, "1");
+        myProp.put(IntegrityMonitorProperties.WRITE_FPC_INTERVAL, "2");
+        // Disable the refresh state audit
+        myProp.put(IntegrityMonitorProperties.REFRESH_STATE_AUDIT_INTERVAL_MS, "-1");
+        // The maximum time in seconds to determine that a FPC entry is stale
+        myProp.put(IntegrityMonitorProperties.MAX_FPC_UPDATE_INTERVAL, "5");
+        myProp.put(IntegrityMonitorProperties.CHECK_DEPENDENCY_INTERVAL, "5");
+
+        IntegrityMonitor im = makeMonitor(resourceName, myProp);
+
+        // Note: do ***NOT*** do waitStep() here
+
+        // Add a group1 dependent resources to put an entry in the forward
+        // progress table
+        // This sets lastUpdated to the current time
+        ForwardProgressEntity fpe = new ForwardProgressEntity();
+        fpe.setFpcCount(0);
+        fpe.setResourceName("group1_dep1");
+        et = em.getTransaction();
+        et.begin();
+        em.persist(fpe);
+        em.flush();
+        et.commit();
+
+        new StateManagement(emf, "group1_dep1");
+
+        assertNoException(im, imx -> {
+            imx.evaluateSanity();
+        });
+
+        // wait for FPManager to perform dependency health check. Once that's
+        // done,
+        // it should now be stale and the sanity check should fail
+        waitStep();
+
+        assertException(im, imx -> {
+            imx.evaluateSanity();
+        });
+
+        logger.debug("\n\ntestStateCheck: Exit\n\n");
+    }
+
+    @Test
+    public void testGetAllForwardProgressEntity() throws Exception {
+        logger.debug("\nIntegrityMonitorTest: Entering testGetAllForwardProgressEntity\n\n");
+        // parameters are passed via a properties file
+        myProp.put(IntegrityMonitorProperties.DEPENDENCY_GROUPS, "");
+        myProp.put(IntegrityMonitorProperties.TEST_VIA_JMX, "false");
+        // Disable the integrity monitor so it will not interfere
+        myProp.put(IntegrityMonitorProperties.FP_MONITOR_INTERVAL, "-1");
+        // Disable the refresh state audit
+        myProp.put(IntegrityMonitorProperties.REFRESH_STATE_AUDIT_INTERVAL_MS, "-1");
+        // Disable dependency checking so it does not interfere
+        myProp.put(IntegrityMonitorProperties.CHECK_DEPENDENCY_INTERVAL, "-1");
+        // Disable the state audit
+        myProp.put(IntegrityMonitorProperties.STATE_AUDIT_INTERVAL_MS, "-1");
+        // Disable the test transaction
+        myProp.put(IntegrityMonitorProperties.TEST_TRANS_INTERVAL, "-1");
+        // Disable writing the FPC
+        myProp.put(IntegrityMonitorProperties.WRITE_FPC_INTERVAL, "-1");
+
+        final IntegrityMonitor im = makeMonitor(resourceName, myProp);
+        waitStep();
+
+        logger.debug("\nIntegrityMonitorTest: Creating ForwardProgressEntity entries\n\n");
+        // Add resource entries in the forward progress table
+        final ForwardProgressEntity fpe = new ForwardProgressEntity();
+        final ForwardProgressEntity fpe2 = new ForwardProgressEntity();
+        final ForwardProgressEntity fpe3 = new ForwardProgressEntity();
+        fpe.setFpcCount(0);
+        fpe.setResourceName("siteA_pap2");
+        fpe2.setFpcCount(0);
+        fpe2.setResourceName("siteB_pap1");
+        fpe3.setFpcCount(0);
+        fpe3.setResourceName("siteB_pap2");
+        et = em.getTransaction();
+        et.begin();
+        em.persist(fpe);
+        em.persist(fpe2);
+        em.persist(fpe3);
+        em.flush();
+        et.commit();
+
+        logger.debug(
+                "\nIntegrityMonitorTest:testGetAllForwardProgressEntity Calling im.getAllForwardProgressEntity()\n\n");
+        List<ForwardProgressEntity> fpeList = im.getAllForwardProgressEntity();
+
+        assertEquals(4, fpeList.size());
+
+        logger.debug("\nIntegrityMonitorTest: Exit testGetAllForwardProgressEntity\n\n");
+    }
+
+    @Test
+    public void testStateAudit() throws Exception {
+        logger.debug("\nIntegrityMonitorTest: Entering testStateAudit\n\n");
+
+        // parameters are passed via a properties file
+
+        // No Dependency Groups
+        myProp.put(IntegrityMonitorProperties.DEPENDENCY_GROUPS, "");
+        // Don't use JMX
+        myProp.put(IntegrityMonitorProperties.TEST_VIA_JMX, "false");
+        // Disable the internal sanity monitoring.
+        myProp.put(IntegrityMonitorProperties.FP_MONITOR_INTERVAL, "-1");
+        // Disable the dependency monitoring.
+        myProp.put(IntegrityMonitorProperties.CHECK_DEPENDENCY_INTERVAL, "-1");
+        // Disable the refresh state audit
+        myProp.put(IntegrityMonitorProperties.REFRESH_STATE_AUDIT_INTERVAL_MS, "-1");
+        // Disable the test transaction
+        myProp.put(IntegrityMonitorProperties.TEST_TRANS_INTERVAL, "-1");
+        // Disable the write FPC
+        myProp.put(IntegrityMonitorProperties.WRITE_FPC_INTERVAL, "-1");
+        // Disable the State Audit we will call it directly
+        myProp.put(IntegrityMonitorProperties.STATE_AUDIT_INTERVAL_MS, "-1");
+        // Max interval for use in deciding if a FPC entry is stale in seconds
+        myProp.put(IntegrityMonitorProperties.MAX_FPC_UPDATE_INTERVAL, "120");
+
+        final IntegrityMonitor im = makeMonitor(resourceName, myProp);
+        waitStep();
+
+        logger.debug("\nIntegrityMonitorTest: Creating ForwardProgressEntity entries\n\n");
+        // Add resources to put an entry in the forward progress table
+        final Date staleDate = new Date(0);
+        final ForwardProgressEntity fpe1 = new ForwardProgressEntity();
+        final ForwardProgressEntity fpe2 = new ForwardProgressEntity();
+        final ForwardProgressEntity fpe3 = new ForwardProgressEntity();
+        fpe1.setFpcCount(0);
+        fpe1.setResourceName("siteA_pap2");
+        fpe2.setFpcCount(0);
+        fpe2.setResourceName("siteB_pap1");
+        fpe3.setFpcCount(0);
+        fpe3.setResourceName("siteB_pap2");
+        logger.debug("\nIntegrityMonitorTest: Creating StateManagementEntity entries\n\n");
+        final StateManagementEntity sme1 = new StateManagementEntity();
+        final StateManagementEntity sme2 = new StateManagementEntity();
+        final StateManagementEntity sme3 = new StateManagementEntity();
+        sme1.setResourceName("siteA_pap2");
+        sme1.setAdminState(StateManagement.UNLOCKED);
+        sme1.setOpState(StateManagement.ENABLED);
+        sme1.setAvailStatus(StateManagement.NULL_VALUE);
+        sme1.setStandbyStatus(StateManagement.NULL_VALUE);
+        sme2.setResourceName("siteB_pap1");
+        sme2.setAdminState(StateManagement.UNLOCKED);
+        sme2.setOpState(StateManagement.ENABLED);
+        sme2.setAvailStatus(StateManagement.NULL_VALUE);
+        sme2.setStandbyStatus(StateManagement.NULL_VALUE);
+        sme3.setResourceName("siteB_pap2");
+        sme3.setAdminState(StateManagement.UNLOCKED);
+        sme3.setOpState(StateManagement.ENABLED);
+        sme3.setAvailStatus(StateManagement.NULL_VALUE);
+        sme3.setStandbyStatus(StateManagement.NULL_VALUE);
+        et = em.getTransaction();
+        et.begin();
+        em.persist(fpe1);
+        em.persist(fpe2);
+        em.persist(fpe3);
+        em.persist(sme1);
+        em.persist(sme2);
+        em.persist(sme3);
+        em.flush();
+        et.commit();
+
+        Query updateQuery = em.createQuery(
+                "UPDATE ForwardProgressEntity f " + "SET f.lastUpdated = :newDate " + "WHERE f.resourceName=:resource");
+        updateQuery.setParameter("newDate", staleDate, TemporalType.TIMESTAMP);
+        updateQuery.setParameter("resource", fpe1.getResourceName());
+
+        et = em.getTransaction();
+        et.begin();
+        updateQuery.executeUpdate();
+        et.commit();
+
+        logger.debug("\nIntegrityMonitorTest:testStateAudit Calling im.getAllForwardProgressEntity()\n\n");
+        List<ForwardProgressEntity> fpeList = im.getAllForwardProgressEntity();
+
+        logger.debug("\n\n");
+        logger.debug("IntegrityMonitorTest:testStateAudit:ForwardProgressEntity entries");
+        for (ForwardProgressEntity myFpe : fpeList) {
+            logger.debug("\n    ResourceName: {}" + "\n        LastUpdated: {}", myFpe.getResourceName(),
+                    myFpe.getLastUpdated());
+        }
+        logger.debug("\n\n");
+
+        logger.debug("\nIntegrityMonitorTest:testStateAudit getting list of StateManagementEntity entries\n\n");
+        Query query = em.createQuery("SELECT s FROM StateManagementEntity s");
+        List<?> smeList = query.getResultList();
+
+        logger.debug("\n\n");
+        logger.debug("IntegrityMonitorTest:testStateAudit:StateManagementEntity entries");
+        for (Object mySme : smeList) {
+            StateManagementEntity tmpSme = (StateManagementEntity) mySme;
+            em.refresh(tmpSme);
+            logger.debug(
+                    "\n    ResourceName: {}" + "\n        AdminState: {}" + "\n        OpState: {}"
+                            + "\n        AvailStatus: {}" + "\n        StandbyStatus: {}",
+                    tmpSme.getResourceName(), tmpSme.getAdminState(), tmpSme.getOpState(), tmpSme.getAvailStatus(),
+                    tmpSme.getStandbyStatus());
+        }
+        logger.debug("\n\n");
+
+        em.refresh(sme1);
+        assertEquals(StateManagement.ENABLED, sme1.getOpState());
+
+        logger.debug("IntegrityMonitorTest:testStateAudit: calling stateAudit()");
+        im.executeStateAudit();
+        logger.debug("IntegrityMonitorTest:testStateAudit: call to stateAudit() complete");
+
+        logger.debug("\nIntegrityMonitorTest:testStateAudit getting list of StateManagementEntity entries\n\n");
+        smeList = query.getResultList();
+
+        logger.debug("\n\n");
+        logger.debug("IntegrityMonitorTest:testStateAudit:StateManagementEntity entries");
+        for (Object mySme : smeList) {
+            StateManagementEntity tmpSme = (StateManagementEntity) mySme;
+            em.refresh(tmpSme);
+            logger.debug(
+                    "\n    ResourceName: {}" + "\n        AdminState: {}" + "\n        OpState: {}"
+                            + "\n        AvailStatus: {}" + "\n        StandbyStatus: {}",
+                    tmpSme.getResourceName(), tmpSme.getAdminState(), tmpSme.getOpState(), tmpSme.getAvailStatus(),
+                    tmpSme.getStandbyStatus());
+        }
+        logger.debug("\n\n");
+
+        em.refresh(sme1);
+        assertEquals(StateManagement.DISABLED, sme1.getOpState());
+
+        // Now let's add sme2 to the mix
+        updateQuery = em.createQuery(
+                "UPDATE ForwardProgressEntity f " + "SET f.lastUpdated = :newDate " + "WHERE f.resourceName=:resource");
+        updateQuery.setParameter("newDate", staleDate, TemporalType.TIMESTAMP);
+        updateQuery.setParameter("resource", fpe2.getResourceName());
+
+        et = em.getTransaction();
+        et.begin();
+        updateQuery.executeUpdate();
+        et.commit();
+
+        // Give it a chance to write the DB and run the audit
+        logger.debug("IntegrityMonitorTest:testStateAudit: (restart4) Running State Audit");
+        waitStep();
+        im.executeStateAudit();
+        waitStep();
+        logger.debug("IntegrityMonitorTest:testStateAudit: (restart4) State Audit complete");
+
+        // Now check its state
+        logger.debug(
+                "\nIntegrityMonitorTest:testStateAudit (restart4) getting list of StateManagementEntity entries\n\n");
+        smeList = query.getResultList();
+
+        logger.debug("\n\n");
+        logger.debug("IntegrityMonitorTest:testStateAudit:StateManagementEntity (restart4) entries");
+        for (Object mySme : smeList) {
+            StateManagementEntity tmpSme = (StateManagementEntity) mySme;
+            em.refresh(tmpSme);
+
+            logger.debug(
+                    "\n    (restart4) ResourceName: {}" + "\n        AdminState: {}" + "\n        OpState: {}"
+                            + "\n        AvailStatus: {}" + "\n        StandbyStatus: {}",
+                    tmpSme.getResourceName(), tmpSme.getAdminState(), tmpSme.getOpState(), tmpSme.getAvailStatus(),
+                    tmpSme.getStandbyStatus());
+        }
+        logger.debug("\n\n");
+
+        em.refresh(sme1);
+        assertEquals(StateManagement.DISABLED, sme1.getOpState());
+
+        em.refresh(sme2);
+        assertEquals(StateManagement.DISABLED, sme2.getOpState());
+
+        logger.debug("\nIntegrityMonitorTest: Exit testStateAudit\n\n");
+        System.out.println("\n\ntestStateAudit: Exit\n\n");
+    }
+
+    private IntegrityMonitor makeMonitor(String resourceName, Properties myProp) throws Exception {
+        IntegrityMonitor.deleteInstance();
+
+        queue = new LinkedBlockingQueue<>();
+
+        IntegrityMonitor im = IntegrityMonitor.getInstance(resourceName, myProp, queue);
+
+        // wait for the monitor thread to start
+        waitStep();
+
+        return im;
+    }
+
+    /**
+     * Waits for the FPManager to complete another cycle.
+     * 
+     * @throws InterruptedException if the thread is interrupted
+     */
+    private void waitStep() throws InterruptedException {
+        CountDownLatch latch = new CountDownLatch(1);
+        queue.offer(latch);
+        waitLatch(latch);
+    }
 }
index 84d0b51..0c8259b 100644 (file)
@@ -39,268 +39,257 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
- * All JUnits are designed to run in the local development environment where
- * they have write privileges and can execute time-sensitive tasks.
- * <p/>
- * Many of the test verification steps are performed by scanning for items
- * written to the log file. Rather than actually scan the log file, an
- * {@link ExtractAppender} is used to monitor events that are logged and extract
- * relevant items. In order to attach the appender to the debug log, it assumes
- * that the debug log is a <i>logback</i> Logger configured per EELF.
- * <p/>
- * These tests use a temporary, in-memory DB, which is dropped once the tests
- * complete.
+ * All JUnits are designed to run in the local development environment where they have write
+ * privileges and can execute time-sensitive tasks. <p/> Many of the test verification steps are
+ * performed by scanning for items written to the log file. Rather than actually scan the log file,
+ * an {@link ExtractAppender} is used to monitor events that are logged and extract relevant items.
+ * In order to attach the appender to the debug log, it assumes that the debug log is a
+ * <i>logback</i> Logger configured per EELF. <p/> These tests use a temporary, in-memory DB, which
+ * is dropped once the tests complete.
  */
 public class IntegrityMonitorTestBase {
-       private static Logger logger = LoggerFactory.getLogger(IntegrityMonitorTestBase.class);
-
-       /**
-        * Directory containing the slf4j log files.
-        */
-       private static final String SLF4J_LOG_DIR = "logs";
-
-       private static final String JMX_PORT_PROP = "com.sun.management.jmxremote.port";
-
-       /**
-        * Max time, in milliseconds, to wait for a latch to be triggered.
-        */
-       protected static final long WAIT_MS = 5000l;
-
-       /**
-        * Milliseconds that monitor should sleep between cycles.
-        */
-       protected static final long CYCLE_INTERVAL_MS = 2l;
-
-       public static final String DEFAULT_DB_URL_PREFIX = "jdbc:h2:mem:";
-
-       protected static final String dbDriver = "org.h2.Driver";
-       protected static final String dbUser = "testu";
-       protected static final String dbPwd = "testp";
-       protected static final String siteName = "SiteA";
-       protected static final String nodeType = "pap";
-
-       // will be defined by the test *Classes*
-       protected static String dbUrl;
-
-       /**
-        * Persistence unit.
-        */
-       protected static final String PERSISTENCE_UNIT = "schemaPU";
-
-       /**
-        * Properties to be used in all tests.
-        */
-       protected static Properties properties;
-
-       /**
-        * Entity manager factory pointing to the in-memory DB for A_SEQ_PU.
-        */
-       protected static EntityManagerFactory emf;
-
-       /**
-        * Entity manager factory pointing to the in-memory DB associated with emf.
-        */
-       protected static EntityManager em;
-
-       /**
-        * Saved JMX port from system properties, to be restored once all tests
-        * complete.
-        */
-       private static Object savedJmxPort;
-
-       /**
-        * Saved IM persistence unit, to be restored once all tests complete.
-        */
-       private static String savedPU;
-
-       /**
-        * Saved monitor cycle interval, to be restored once all tests complete.
-        */
-       private static long savedCycleIntervalMillis;
-
-       /**
-        * Saved property time units, to be restored once all tests complete.
-        */
-       private static TimeUnit savedPropertyUnits;
-
-       /**
-        * Saves current configuration information and then sets new values.
-        * 
-        * @param dbDriver
-        *            the name of the DB Driver class
-        * @param dbUrl
-        *            the URL to the DB
-        * @throws IOException
-        * @throws Exception
-        */
-       protected static void setUpBeforeClass(String dbUrl) throws IOException {
-               logger.info("setup");
-
-               Properties systemProps = System.getProperties();
-
-               // truncate the logs
-               new FileOutputStream(SLF4J_LOG_DIR + "/audit.log").close();
-               new FileOutputStream(SLF4J_LOG_DIR + "/debug.log").close();
-               new FileOutputStream(SLF4J_LOG_DIR + "/error.log").close();
-               new FileOutputStream(SLF4J_LOG_DIR + "/metrics.log").close();
-
-               IntegrityMonitorTestBase.dbUrl = dbUrl;
-
-               // save data that we have to restore at the end of the test
-               savedJmxPort = systemProps.get(JMX_PORT_PROP);
-               savedPU = IntegrityMonitor.getPersistenceUnit();
-               savedCycleIntervalMillis = IntegrityMonitor.getCycleIntervalMillis();
-               savedPropertyUnits = IntegrityMonitor.getPropertyUnits();
-
-               systemProps.put(JMX_PORT_PROP, "9797");
-
-               IntegrityMonitor.setPersistenceUnit(PERSISTENCE_UNIT);
-               IntegrityMonitor.setCycleIntervalMillis(CYCLE_INTERVAL_MS);
-               IntegrityMonitor.setPropertyUnits(TimeUnit.MILLISECONDS);
-
-               IntegrityMonitor.setUnitTesting(true);
-
-               properties = new Properties();
-               properties.put(IntegrityMonitorProperties.DB_DRIVER, dbDriver);
-               properties.put(IntegrityMonitorProperties.DB_URL, dbUrl);
-               properties.put(IntegrityMonitorProperties.DB_USER, dbUser);
-               properties.put(IntegrityMonitorProperties.DB_PWD, dbPwd);
-               properties.put(IntegrityMonitorProperties.SITE_NAME, siteName);
-               properties.put(IntegrityMonitorProperties.NODE_TYPE, nodeType);
-               properties.put(IntegrityMonitorProperties.REFRESH_STATE_AUDIT_INTERVAL_MS,
-                               String.valueOf(100L * CYCLE_INTERVAL_MS));
-
-               emf = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT, makeProperties());
-
-               // keep this open so the in-memory DB stays around until all tests are
-               // done
-               em = emf.createEntityManager();
-
-               stopMonitor();
-       }
-
-       /**
-        * Restores the configuration to what it was before the test.
-        */
-       protected static void tearDownAfterClass() {
-               Properties systemProps = System.getProperties();
-               if (savedJmxPort == null) {
-                       systemProps.remove(JMX_PORT_PROP);
-
-               } else {
-                       systemProps.put(JMX_PORT_PROP, savedJmxPort);
-               }
-
-               IntegrityMonitor.setPersistenceUnit(savedPU);
-               IntegrityMonitor.setCycleIntervalMillis(savedCycleIntervalMillis);
-               IntegrityMonitor.setPropertyUnits(savedPropertyUnits);
-
-               IntegrityMonitor.setUnitTesting(false);
-
-               // this should result in the in-memory DB being deleted
-               em.close();
-               emf.close();
-       }
-
-       /**
-        * Sets up for a test, which includes deleting all records from the
-        * IntegrityAuditEntity table.
-        */
-       protected void setUpTest() {
-
-               // Clean up the DB
-               try (EntityTransCloser et = new EntityTransCloser(em.getTransaction())) {
-
-                       em.createQuery("Delete from StateManagementEntity").executeUpdate();
-                       em.createQuery("Delete from ForwardProgressEntity").executeUpdate();
-                       em.createQuery("Delete from ResourceRegistrationEntity").executeUpdate();
-
-                       // commit transaction
-                       et.commit();
-               }
-       }
-
-       /**
-        * Cleans up after a test, removing any ExtractAppenders from the logger and
-        * stopping any AuditThreads.
-        */
-       protected void tearDownTest() {
-               stopMonitor();
-       }
-
-       /**
-        * Stops the IntegrityMonitor instance.
-        */
-       private static void stopMonitor() {
-               try {
-                       IntegrityMonitor.deleteInstance();
-
-               } catch (IntegrityMonitorException e) {
-                       // no need to log, as exception was already logged
-               }
-       }
-
-       /**
-        * Makes a new Property set that's a clone of {@link #properties}.
-        * 
-        * @return a new Property set containing all of a copy of all of the
-        *         {@link #properties}
-        */
-       protected static Properties makeProperties() {
-               Properties props = new Properties();
-               props.putAll(properties);
-               return props;
-       }
-
-       /**
-        * Waits for a latch to reach zero.
-        * 
-        * @param latch
-        * @throws InterruptedException
-        * @throws AssertionError
-        *             if the latch did not reach zero in the allotted time
-        */
-       protected void waitLatch(CountDownLatch latch) throws InterruptedException {
-               assertTrue(latch.await(WAIT_MS, TimeUnit.SECONDS));
-       }
-
-       /**
-        * Applies a function on an object, expecting it to succeed. Catches any
-        * exceptions thrown by the function.
-        * 
-        * @param arg
-        * @param func
-        * @throws AssertionError
-        */
-       protected <T> void assertNoException(T arg, VoidFunction<T> func) {
-               try {
-                       func.apply(arg);
-
-               } catch (Exception e) {
-                       System.out.println("startTransaction exception: " + e);
-                       fail("action failed");
-               }
-       }
-
-       /**
-        * Applies a function on an object, expecting it to fail. Catches any
-        * exceptions thrown by the function.
-        * 
-        * @param arg
-        * @param func
-        * @throws AssertionError
-        */
-       protected <T> void assertException(T arg, VoidFunction<T> func) {
-               try {
-                       func.apply(arg);
-                       fail("missing exception");
-               } catch (Exception e) {
-                       System.out.println("action found expected exception: " + e);
-               }
-       }
-
-       @FunctionalInterface
-       protected static interface VoidFunction<T> {
-               public void apply(T arg) throws Exception;
-       }
+    private static Logger logger = LoggerFactory.getLogger(IntegrityMonitorTestBase.class);
+
+    /**
+     * Directory containing the slf4j log files.
+     */
+    private static final String SLF4J_LOG_DIR = "logs";
+
+    private static final String JMX_PORT_PROP = "com.sun.management.jmxremote.port";
+
+    /**
+     * Max time, in milliseconds, to wait for a latch to be triggered.
+     */
+    protected static final long WAIT_MS = 5000L;
+
+    /**
+     * Milliseconds that monitor should sleep between cycles.
+     */
+    protected static final long CYCLE_INTERVAL_MS = 2L;
+
+    public static final String DEFAULT_DB_URL_PREFIX = "jdbc:h2:mem:";
+
+    protected static final String dbDriver = "org.h2.Driver";
+    protected static final String dbUser = "testu";
+    protected static final String dbPwd = "testp";
+    protected static final String siteName = "SiteA";
+    protected static final String nodeType = "pap";
+
+    // will be defined by the test *Classes*
+    protected static String dbUrl;
+
+    /**
+     * Persistence unit.
+     */
+    protected static final String PERSISTENCE_UNIT = "schemaPU";
+
+    /**
+     * Properties to be used in all tests.
+     */
+    protected static Properties properties;
+
+    /**
+     * Entity manager factory pointing to the in-memory DB for A_SEQ_PU.
+     */
+    protected static EntityManagerFactory emf;
+
+    /**
+     * Entity manager factory pointing to the in-memory DB associated with emf.
+     */
+    protected static EntityManager em;
+
+    /**
+     * Saved JMX port from system properties, to be restored once all tests complete.
+     */
+    private static Object savedJmxPort;
+
+    /**
+     * Saved IM persistence unit, to be restored once all tests complete.
+     */
+    private static String savedPU;
+
+    /**
+     * Saved monitor cycle interval, to be restored once all tests complete.
+     */
+    private static long savedCycleIntervalMillis;
+
+    /**
+     * Saved property time units, to be restored once all tests complete.
+     */
+    private static TimeUnit savedPropertyUnits;
+
+    /**
+     * Saves current configuration information and then sets new values.
+     * 
+     * @param dbDriver the name of the DB Driver class
+     * @param dbUrl the URL to the DB
+     * @throws IOException if an IO error occurs
+     */
+    protected static void setUpBeforeClass(String dbUrl) throws IOException {
+        logger.info("setup");
+
+        final Properties systemProps = System.getProperties();
+
+        // truncate the logs
+        new FileOutputStream(SLF4J_LOG_DIR + "/audit.log").close();
+        new FileOutputStream(SLF4J_LOG_DIR + "/debug.log").close();
+        new FileOutputStream(SLF4J_LOG_DIR + "/error.log").close();
+        new FileOutputStream(SLF4J_LOG_DIR + "/metrics.log").close();
+
+        IntegrityMonitorTestBase.dbUrl = dbUrl;
+
+        // save data that we have to restore at the end of the test
+        savedJmxPort = systemProps.get(JMX_PORT_PROP);
+        savedPU = IntegrityMonitor.getPersistenceUnit();
+        savedCycleIntervalMillis = IntegrityMonitor.getCycleIntervalMillis();
+        savedPropertyUnits = IntegrityMonitor.getPropertyUnits();
+
+        systemProps.put(JMX_PORT_PROP, "9797");
+
+        IntegrityMonitor.setPersistenceUnit(PERSISTENCE_UNIT);
+        IntegrityMonitor.setCycleIntervalMillis(CYCLE_INTERVAL_MS);
+        IntegrityMonitor.setPropertyUnits(TimeUnit.MILLISECONDS);
+
+        IntegrityMonitor.setUnitTesting(true);
+
+        properties = new Properties();
+        properties.put(IntegrityMonitorProperties.DB_DRIVER, dbDriver);
+        properties.put(IntegrityMonitorProperties.DB_URL, dbUrl);
+        properties.put(IntegrityMonitorProperties.DB_USER, dbUser);
+        properties.put(IntegrityMonitorProperties.DB_PWD, dbPwd);
+        properties.put(IntegrityMonitorProperties.SITE_NAME, siteName);
+        properties.put(IntegrityMonitorProperties.NODE_TYPE, nodeType);
+        properties.put(IntegrityMonitorProperties.REFRESH_STATE_AUDIT_INTERVAL_MS,
+                String.valueOf(100L * CYCLE_INTERVAL_MS));
+
+        emf = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT, makeProperties());
+
+        // keep this open so the in-memory DB stays around until all tests are
+        // done
+        em = emf.createEntityManager();
+
+        stopMonitor();
+    }
+
+    /**
+     * Restores the configuration to what it was before the test.
+     */
+    protected static void tearDownAfterClass() {
+        Properties systemProps = System.getProperties();
+        if (savedJmxPort == null) {
+            systemProps.remove(JMX_PORT_PROP);
+
+        } else {
+            systemProps.put(JMX_PORT_PROP, savedJmxPort);
+        }
+
+        IntegrityMonitor.setPersistenceUnit(savedPU);
+        IntegrityMonitor.setCycleIntervalMillis(savedCycleIntervalMillis);
+        IntegrityMonitor.setPropertyUnits(savedPropertyUnits);
+
+        IntegrityMonitor.setUnitTesting(false);
+
+        // this should result in the in-memory DB being deleted
+        em.close();
+        emf.close();
+    }
+
+    /**
+     * Sets up for a test, which includes deleting all records from the IntegrityAuditEntity table.
+     */
+    protected void setUpTest() {
+
+        // Clean up the DB
+        try (EntityTransCloser et = new EntityTransCloser(em.getTransaction())) {
+
+            em.createQuery("Delete from StateManagementEntity").executeUpdate();
+            em.createQuery("Delete from ForwardProgressEntity").executeUpdate();
+            em.createQuery("Delete from ResourceRegistrationEntity").executeUpdate();
+
+            // commit transaction
+            et.commit();
+        }
+    }
+
+    /**
+     * Cleans up after a test, removing any ExtractAppenders from the logger and stopping any
+     * AuditThreads.
+     */
+    protected void tearDownTest() {
+        stopMonitor();
+    }
+
+    /**
+     * Stops the IntegrityMonitor instance.
+     */
+    private static void stopMonitor() {
+        try {
+            IntegrityMonitor.deleteInstance();
+
+        } catch (IntegrityMonitorException e) {
+            // no need to log, as exception was already logged
+        }
+    }
+
+    /**
+     * Makes a new Property set that's a clone of {@link #properties}.
+     * 
+     * @return a new Property set containing all of a copy of all of the {@link #properties}
+     */
+    protected static Properties makeProperties() {
+        Properties props = new Properties();
+        props.putAll(properties);
+        return props;
+    }
+
+    /**
+     * Waits for a latch to reach zero.
+     * 
+     * @param latch the latch
+     * @throws InterruptedException if the thread is interrupted
+     * @throws AssertionError if the latch did not reach zero in the allotted time
+     */
+    protected void waitLatch(CountDownLatch latch) throws InterruptedException {
+        assertTrue(latch.await(WAIT_MS, TimeUnit.SECONDS));
+    }
+
+    /**
+     * Applies a function on an object, expecting it to succeed. Catches any exceptions thrown by
+     * the function.
+     * 
+     * @param arg the object to apply the function on
+     * @param func the function
+     * @throws AssertionError if an exception is thrown by the function
+     */
+    protected <T> void assertNoException(T arg, VoidFunction<T> func) {
+        try {
+            func.apply(arg);
+
+        } catch (Exception e) {
+            System.out.println("startTransaction exception: " + e);
+            fail("action failed");
+        }
+    }
+
+    /**
+     * Applies a function on an object, expecting it to fail. Catches any exceptions thrown by the
+     * function.
+     * 
+     * @param arg the object to apply the function on
+     * @param func the function
+     * @throws AssertionError if no exception is thrown by the function
+     */
+    protected <T> void assertException(T arg, VoidFunction<T> func) {
+        try {
+            func.apply(arg);
+            fail("missing exception");
+        } catch (Exception e) {
+            System.out.println("action found expected exception: " + e);
+        }
+    }
+
+    @FunctionalInterface
+    protected static interface VoidFunction<T> {
+        public void apply(T arg) throws Exception;
+    }
 }
index 44faa58..d098af9 100644 (file)
@@ -37,94 +37,107 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 public class StateManagementEntityTest extends IntegrityMonitorTestBase {
-       private static Logger logger = LoggerFactory.getLogger(StateManagementEntityTest.class);
-         
-       @BeforeClass
-       public static void setUpClass() throws Exception {
-               IntegrityMonitorTestBase.setUpBeforeClass(DEFAULT_DB_URL_PREFIX + StateManagementEntityTest.class.getSimpleName());
-
-       }
-
-       @AfterClass
-       public static void tearDownClass() throws Exception {
-               IntegrityMonitorTestBase.tearDownAfterClass();
-       }
-
-       @Before
-       public void setUp() {
-               super.setUpTest();
-       }
-
-       @After
-       public void tearDown() {
-               super.tearDownTest();
-       }
-
-       @Test
-       public void testJPA() throws Exception {
-               logger.debug("\n??? logger.infor StateManagementEntityTest: Entering\n\n");
-               
-               //Define the resourceName for the StateManagement constructor
-               String resourceName = "test_resource1";
-               
-               //
-               logger.debug("Create StateManagementEntity, resourceName: {}", resourceName);
-               logger.debug("??? instantiate StateManagementEntity object");
-               StateManagementEntity sme = new StateManagementEntity(); 
-               
-               logger.debug("??? setResourceName : {}", resourceName);
-               sme.setResourceName(resourceName);
-               logger.debug("??? getResourceName : {}", sme.getResourceName());
-
-               sme.setAdminState(StateManagement.UNLOCKED);
-               assertEquals(StateManagement.UNLOCKED, sme.getAdminState());
-               
-               sme.setOpState(StateManagement.ENABLED);
-               assertEquals(StateManagement.ENABLED, sme.getOpState());
-               
-               sme.setAvailStatus(StateManagement.NULL_VALUE);
-               assertEquals(StateManagement.NULL_VALUE, sme.getAvailStatus());
-               
-               sme.setStandbyStatus(StateManagement.COLD_STANDBY);
-               assertEquals(StateManagement.COLD_STANDBY, sme.getStandbyStatus());
-
-               try(EntityTransCloser et = new EntityTransCloser(em.getTransaction())) {
-                       logger.debug("??? before persist");
-                       em.persist(sme); 
-                       logger.debug("??? after  persist");
-                       
-                       em.flush(); 
-                       logger.debug("??? after flush");
-
-                       et.commit(); 
-                       logger.debug("??? after commit");
-               }
-               
-               try {
-               Query query = em.createQuery("Select p from StateManagementEntity p where p.resourceName=:resource");
-              
-               query.setParameter("resource", resourceName);
-              
-               //Just test that we are retrieving the right object
-               @SuppressWarnings("rawtypes")
-               List resourceList = query.getResultList();
-               if (!resourceList.isEmpty()) {
-                  // exist 
-                  StateManagementEntity sme2 = (StateManagementEntity) resourceList.get(0);                            
-                  
-                  assertEquals(sme.getResourceName(), sme2.getResourceName()); 
-                  assertEquals(sme.getAdminState(), sme2.getAdminState()); 
-                  assertEquals(sme.getOpState(), sme2.getOpState()); 
-                  assertEquals(sme.getAvailStatus(), sme2.getAvailStatus()); 
-                  assertEquals(sme.getStandbyStatus(), sme2.getStandbyStatus()); 
-                          logger.debug("--");
-               } else {
-                  logger.debug("Record not found, resourceName: {}", resourceName);
-               }
-                 } catch(Exception ex) {
-                       logger.error("Exception on select query: " + ex.toString());
-           }
-               
-               logger.debug("\n\nJpaTest: Exit\n\n");
-       }
+    private static Logger logger = LoggerFactory.getLogger(StateManagementEntityTest.class);
+
+    /**
+     * Set up for the test class.
+     */
+    @BeforeClass
+    public static void setUpClass() throws Exception {
+        IntegrityMonitorTestBase
+                .setUpBeforeClass(DEFAULT_DB_URL_PREFIX + StateManagementEntityTest.class.getSimpleName());
+
+    }
+
+    /**
+     * Tear down after the test class.
+     */
+    @AfterClass
+    public static void tearDownClass() throws Exception {
+        IntegrityMonitorTestBase.tearDownAfterClass();
+    }
+
+    /**
+     * Set up for the test cases.
+     */
+    @Before
+    public void setUp() {
+        super.setUpTest();
+    }
+
+    /**
+     * Tear down after the test cases.
+     */
+    @After
+    public void tearDown() {
+        super.tearDownTest();
+    }
+
+    @Test
+    public void testJpa() throws Exception {
+        logger.debug("\n??? logger.infor StateManagementEntityTest: Entering\n\n");
+
+        // Define the resourceName for the StateManagement constructor
+        String resourceName = "test_resource1";
+
+        //
+        logger.debug("Create StateManagementEntity, resourceName: {}", resourceName);
+        logger.debug("??? instantiate StateManagementEntity object");
+        StateManagementEntity sme = new StateManagementEntity();
+
+        logger.debug("??? setResourceName : {}", resourceName);
+        sme.setResourceName(resourceName);
+        logger.debug("??? getResourceName : {}", sme.getResourceName());
+
+        sme.setAdminState(StateManagement.UNLOCKED);
+        assertEquals(StateManagement.UNLOCKED, sme.getAdminState());
+
+        sme.setOpState(StateManagement.ENABLED);
+        assertEquals(StateManagement.ENABLED, sme.getOpState());
+
+        sme.setAvailStatus(StateManagement.NULL_VALUE);
+        assertEquals(StateManagement.NULL_VALUE, sme.getAvailStatus());
+
+        sme.setStandbyStatus(StateManagement.COLD_STANDBY);
+        assertEquals(StateManagement.COLD_STANDBY, sme.getStandbyStatus());
+
+        try (EntityTransCloser et = new EntityTransCloser(em.getTransaction())) {
+            logger.debug("??? before persist");
+            em.persist(sme);
+            logger.debug("??? after  persist");
+
+            em.flush();
+            logger.debug("??? after flush");
+
+            et.commit();
+            logger.debug("??? after commit");
+        }
+
+        try {
+            Query query = em.createQuery("Select p from StateManagementEntity p where p.resourceName=:resource");
+
+            query.setParameter("resource", resourceName);
+
+            // Just test that we are retrieving the right object
+            @SuppressWarnings("rawtypes")
+            List resourceList = query.getResultList();
+            if (!resourceList.isEmpty()) {
+                // exist
+                StateManagementEntity sme2 = (StateManagementEntity) resourceList.get(0);
+
+                assertEquals(sme.getResourceName(), sme2.getResourceName());
+                assertEquals(sme.getAdminState(), sme2.getAdminState());
+                assertEquals(sme.getOpState(), sme2.getOpState());
+                assertEquals(sme.getAvailStatus(), sme2.getAvailStatus());
+                assertEquals(sme.getStandbyStatus(), sme2.getStandbyStatus());
+                logger.debug("--");
+            } else {
+                logger.debug("Record not found, resourceName: {}", resourceName);
+            }
+        } catch (Exception ex) {
+            logger.error("Exception on select query: " + ex.toString());
+        }
+
+        logger.debug("\n\nJpaTest: Exit\n\n");
+    }
 }
index 377fed9..1d0d34e 100644 (file)
@@ -26,12 +26,14 @@ import static org.mockito.Matchers.anyString;
 import static org.mockito.Mockito.doThrow;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
+
 import javax.persistence.EntityManager;
 import javax.persistence.EntityManagerFactory;
 import javax.persistence.EntityTransaction;
 import javax.persistence.PersistenceException;
 import javax.persistence.QueryTimeoutException;
 import javax.persistence.TypedQuery;
+
 import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.Before;
@@ -226,7 +228,7 @@ public class StateManagementTest extends IntegrityMonitorTestBase {
 
     @Test(expected = StateManagementException.class)
     @SuppressWarnings("unchecked")
-    public void test_StateManagementInitialization_ThrowStateManagementException_ifEntityManagerCreateQuerythrowsAnyException()
+    public void test_StateManagementInitialization_ThrowException_ifEntityManagerCreateQuerythrowsAnyException()
             throws Exception {
         final EntityManager mockedEm = getMockedEntityManager();
         final EntityManagerFactory mockedEmf = getMockedEntityManagerFactory(mockedEm);
index 177a448..ff7cc3b 100644 (file)
@@ -29,2132 +29,2143 @@ import org.junit.BeforeClass;
 import org.junit.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+
 /*
  * All JUnits are designed to run in the local development environment
  * where they have write privileges and can execute time-sensitive
  * tasks.
  */
 public class StateTransitionTest {
-       private static Logger logger = LoggerFactory.getLogger(StateTransitionTest.class);
-         
-       @BeforeClass
-       public static void setUpClass() throws Exception {
-
-       }
-
-       @AfterClass
-       public static void tearDownClass() throws Exception {
-       }
-
-       @Before
-       public void setUp() throws Exception {
-       }
-
-       @After
-       public void tearDown() throws Exception {
-       }
-
-       @Test
-       public void test() throws Exception {
-               logger.info("\n\nlogger.infor StateTransitionTest: Entering\n\n");
-               try {
-                   logger.info("??? create a new StateTransition"); 
-                   StateTransition st = new StateTransition();
-                   StateElement se = null; 
-                   try {
-                       // bad test case 
-                       se = st.getEndingState("unlocked", "enabled", "null",  "coldstandby", "lock");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
-                       
-                       logger.info("??? StateTransition testcase 1");
-                       se = st.getEndingState("unlocked", "enabled", "null",  "null", "lock");
-                               assertEquals("null,locked,enabled,null,", makeString(se));
-
-                       logger.info("??? StateTransition testcase 2");
-                       se = st.getEndingState("unlocked", "enabled", "null",  "null", "unlock");
-                               assertEquals("null,unlocked,enabled,null,", makeString(se));
-
-                       logger.info("??? StateTransition testcase 3");
-                       se = st.getEndingState("unlocked", "enabled", "null",  "null", "disableFailed");
-                               assertEquals("null,unlocked,disabled,failed,", makeString(se));
-
-                       logger.info("??? StateTransition testcase 4");
-                       se = st.getEndingState("unlocked", "enabled", "null",  "null", "enableNotFailed");
-                               assertEquals("null,unlocked,enabled,null,", makeString(se));
-
-                       logger.info("??? StateTransition testcase 5");
-                       se = st.getEndingState("unlocked", "enabled", "null",  "null", "disableDependency");
-                               assertEquals("null,unlocked,disabled,dependency,", makeString(se));
-                
-                       logger.info("??? StateTransition testcase 6");
-                       se = st.getEndingState("unlocked", "enabled", "null",  "null", "enableNoDependency");
-                               assertEquals("null,unlocked,enabled,null,", makeString(se));
-
-                       logger.info("??? StateTransition testcase 7");
-                       se = st.getEndingState("unlocked", "enabled", "null",  "null", "promote");
-                               assertEquals("providingservice,unlocked,enabled,null,", makeString(se));
-
-                       logger.info("??? StateTransition testcase 8");
-                       se = st.getEndingState("unlocked", "enabled", "null",  "null", "demote");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
-
-                       logger.info("??? StateTransition testcase 9");
-                       se = st.getEndingState("unlocked", "enabled", "null",  "coldstandby", "demote");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
-
-                       logger.info("??? StateTransition testcase 10");
-                       se = st.getEndingState("unlocked", "enabled", "null",  "coldstandby", "unlock");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
-
-                       logger.info("??? StateTransition testcase 11");
-                       se = st.getEndingState("unlocked", "enabled", "null",  "coldstandby", "disableFailed");
-                               assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
-
-                       logger.info("??? StateTransition testcase 12");
-                       se = st.getEndingState("unlocked", "enabled", "null",  "coldstandby", "enableNotFailed");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
-
-                       logger.info("??? StateTransition testcase 13");
-                       se = st.getEndingState("unlocked", "enabled", "null",  "coldstandby", "disableDependency");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
-
-                       logger.info("??? StateTransition testcase 14");
-                       se = st.getEndingState("unlocked", "enabled", "null",  "coldstandby", "enableNoDependency");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
-
-                       logger.info("??? StateTransition testcase 15");
-                       se = st.getEndingState("unlocked", "enabled", "null",  "coldstandby", "promote");
-                               assertEquals("providingservice,unlocked,enabled,null,", makeString(se));
-
-                       logger.info("??? StateTransition testcase 16");
-                       se = st.getEndingState("unlocked", "enabled", "null",  "coldstandby", "demote");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
-
-                       logger.info("??? StateTransition testcase 17");
-                       se = st.getEndingState("unlocked", "enabled", "null",  "hotstandby", "demote");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
-
-                       logger.info("??? StateTransition testcase 18");
-                       se = st.getEndingState("unlocked", "enabled", "null",  "hotstandby", "unlock");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
-
-                       logger.info("??? StateTransition testcase 19");
-                       se = st.getEndingState("unlocked", "enabled", "null",  "hotstandby", "disableFailed");
-                               assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
-
-                       logger.info("??? StateTransition testcase 20");
-                       se = st.getEndingState("unlocked", "enabled", "null",  "hotstandby", "enableNotFailed");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
-
-                       logger.info("??? StateTransition testcase 21");
-                       se = st.getEndingState("unlocked", "enabled", "null",  "hotstandby", "disableDependency");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
-
-                       logger.info("??? StateTransition testcase 22");
-                       se = st.getEndingState("unlocked", "enabled", "null",  "hotstandby", "enableNoDependency");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
-
-                       logger.info("??? StateTransition testcase 23");
-                       se = st.getEndingState("unlocked", "enabled", "null",  "hotstandby", "promote");
-                               assertEquals("providingservice,unlocked,enabled,null,", makeString(se));
-
-                       logger.info("??? StateTransition testcase 24");
-                       se = st.getEndingState("unlocked", "enabled", "null",  "hotstandby", "demote");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
-
-                       logger.info("??? StateTransition testcase 25");
-                       se = st.getEndingState("unlocked", "enabled", "null",  "providingservice", "demote");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
-
-                       logger.info("??? StateTransition testcase 26");
-                       se = st.getEndingState("unlocked", "enabled", "null",  "providingservice", "unlock");
-                               assertEquals("providingservice,unlocked,enabled,null,", makeString(se));
-
-                       logger.info("??? StateTransition testcase 27");
-                       se = st.getEndingState("unlocked", "enabled", "null",  "providingservice", "disableFailed");
-                               assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
-
-                       logger.info("??? StateTransition testcase 28");
-                       se = st.getEndingState("unlocked", "enabled", "null",  "providingservice", "enableNotFailed");
-                               assertEquals("providingservice,unlocked,enabled,null,", makeString(se));
-                       
-                       logger.info("??? StateTransition testcase 29");
-                       se = st.getEndingState("unlocked", "enabled", "null",  "providingservice", "disableDependency");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
-
-                       logger.info("??? StateTransition testcase 30");
-                       se = st.getEndingState("unlocked", "enabled", "null",  "providingservice", "enableNoDependency");
-                               assertEquals("providingservice,unlocked,enabled,null,", makeString(se));
-
-                       logger.info("??? StateTransition testcase 31");
-                       se = st.getEndingState("unlocked", "enabled", "null",  "providingservice", "promote");
-                               assertEquals("providingservice,unlocked,enabled,null,", makeString(se));
+    private static Logger logger = LoggerFactory.getLogger(StateTransitionTest.class);
+
+    @BeforeClass
+    public static void setUpClass() throws Exception {
+
+    }
+
+    @AfterClass
+    public static void tearDownClass() throws Exception {}
+
+    @Before
+    public void setUp() throws Exception {}
+
+    @After
+    public void tearDown() throws Exception {}
 
-                       logger.info("??? StateTransition testcase 32");
-                       se = st.getEndingState("unlocked", "enabled", "null",  "providingservice", "demote");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
+    @Test
+    public void test() throws Exception {
+        logger.info("\n\nlogger.infor StateTransitionTest: Entering\n\n");
+        try {
+            logger.info("??? create a new StateTransition");
+            StateTransition st = new StateTransition();
 
-                       logger.info("??? StateTransition testcase 33");
-                       se = st.getEndingState("unlocked", "enabled", "failed",  "null", "demote");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
+            StateElement se = null;
+            try {
+                // bad test case
+                se = st.getEndingState("unlocked", "enabled", "null", "coldstandby", "lock");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 34");
-                       se = st.getEndingState("unlocked", "enabled", "failed",  "null", "unlock");
-                               assertEquals("null,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 1");
+                se = st.getEndingState("unlocked", "enabled", "null", "null", "lock");
+                assertEquals("null,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 35");
-                       se = st.getEndingState("unlocked", "enabled", "failed",  "null", "disableFailed");
-                               assertEquals("null,unlocked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 2");
+                se = st.getEndingState("unlocked", "enabled", "null", "null", "unlock");
+                assertEquals("null,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 36");
-                       se = st.getEndingState("unlocked", "enabled", "failed",  "null", "enableNotFailed");
-                               assertEquals("null,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 3");
+                se = st.getEndingState("unlocked", "enabled", "null", "null", "disableFailed");
+                assertEquals("null,unlocked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 37");
-                       se = st.getEndingState("unlocked", "enabled", "failed",  "null", "disableDependency");
-                               assertEquals("null,unlocked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 4");
+                se = st.getEndingState("unlocked", "enabled", "null", "null", "enableNotFailed");
+                assertEquals("null,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 38");
-                       se = st.getEndingState("unlocked", "enabled", "failed",  "null", "enableNoDependency");
-                               assertEquals("null,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 5");
+                se = st.getEndingState("unlocked", "enabled", "null", "null", "disableDependency");
+                assertEquals("null,unlocked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 39");
-                       se = st.getEndingState("unlocked", "enabled", "failed",  "null", "promote");
-                               assertEquals("providingservice,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 6");
+                se = st.getEndingState("unlocked", "enabled", "null", "null", "enableNoDependency");
+                assertEquals("null,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 40");
-                       se = st.getEndingState("unlocked", "enabled", "failed",  "null", "demote");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 7");
+                se = st.getEndingState("unlocked", "enabled", "null", "null", "promote");
+                assertEquals("providingservice,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 41");
-                       se = st.getEndingState("unlocked", "enabled", "failed",  "coldstandby", "demote");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 8");
+                se = st.getEndingState("unlocked", "enabled", "null", "null", "demote");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 42");
-                       se = st.getEndingState("unlocked", "enabled", "failed",  "coldstandby", "unlock");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 9");
+                se = st.getEndingState("unlocked", "enabled", "null", "coldstandby", "demote");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 43");
-                       se = st.getEndingState("unlocked", "enabled", "failed",  "coldstandby", "disableFailed");
-                               assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 10");
+                se = st.getEndingState("unlocked", "enabled", "null", "coldstandby", "unlock");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 44");
-                       se = st.getEndingState("unlocked", "enabled", "failed",  "coldstandby", "enableNotFailed");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 11");
+                se = st.getEndingState("unlocked", "enabled", "null", "coldstandby", "disableFailed");
+                assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 45");
-                       se = st.getEndingState("unlocked", "enabled", "failed",  "coldstandby", "disableDependency");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 12");
+                se = st.getEndingState("unlocked", "enabled", "null", "coldstandby", "enableNotFailed");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 46");
-                       se = st.getEndingState("unlocked", "enabled", "failed",  "coldstandby", "enableNoDependency");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 13");
+                se = st.getEndingState("unlocked", "enabled", "null", "coldstandby", "disableDependency");
+                assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 47");
-                       se = st.getEndingState("unlocked", "enabled", "failed",  "coldstandby", "promote");
-                               assertEquals("providingservice,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 14");
+                se = st.getEndingState("unlocked", "enabled", "null", "coldstandby", "enableNoDependency");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 48");
-                       se = st.getEndingState("unlocked", "enabled", "failed",  "coldstandby", "demote");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 15");
+                se = st.getEndingState("unlocked", "enabled", "null", "coldstandby", "promote");
+                assertEquals("providingservice,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 49");
-                       se = st.getEndingState("unlocked", "enabled", "failed",  "hotstandby", "demote");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 16");
+                se = st.getEndingState("unlocked", "enabled", "null", "coldstandby", "demote");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 50");
-                       se = st.getEndingState("unlocked", "enabled", "failed",  "hotstandby", "unlock");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 17");
+                se = st.getEndingState("unlocked", "enabled", "null", "hotstandby", "demote");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 51");
-                       se = st.getEndingState("unlocked", "enabled", "failed",  "hotstandby", "disableFailed");
-                               assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 18");
+                se = st.getEndingState("unlocked", "enabled", "null", "hotstandby", "unlock");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 52");
-                       se = st.getEndingState("unlocked", "enabled", "failed",  "hotstandby", "enableNotFailed");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 19");
+                se = st.getEndingState("unlocked", "enabled", "null", "hotstandby", "disableFailed");
+                assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 53");
-                       se = st.getEndingState("unlocked", "enabled", "failed",  "hotstandby", "disableDependency");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 20");
+                se = st.getEndingState("unlocked", "enabled", "null", "hotstandby", "enableNotFailed");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 54");
-                       se = st.getEndingState("unlocked", "enabled", "failed",  "hotstandby", "enableNoDependency");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 21");
+                se = st.getEndingState("unlocked", "enabled", "null", "hotstandby", "disableDependency");
+                assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 55");
-                       se = st.getEndingState("unlocked", "enabled", "failed",  "hotstandby", "promote");
-                               assertEquals("providingservice,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 22");
+                se = st.getEndingState("unlocked", "enabled", "null", "hotstandby", "enableNoDependency");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
+
+                logger.info("??? StateTransition testcase 23");
+                se = st.getEndingState("unlocked", "enabled", "null", "hotstandby", "promote");
+                assertEquals("providingservice,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 56");
-                       se = st.getEndingState("unlocked", "enabled", "failed",  "hotstandby", "demote");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 24");
+                se = st.getEndingState("unlocked", "enabled", "null", "hotstandby", "demote");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 57");
-                       se = st.getEndingState("unlocked", "enabled", "failed",  "providingservice", "demote");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 25");
+                se = st.getEndingState("unlocked", "enabled", "null", "providingservice", "demote");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 58");
-                       se = st.getEndingState("unlocked", "enabled", "failed",  "providingservice", "unlock");
-                               assertEquals("providingservice,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 26");
+                se = st.getEndingState("unlocked", "enabled", "null", "providingservice", "unlock");
+                assertEquals("providingservice,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 59");
-                       se = st.getEndingState("unlocked", "enabled", "failed",  "providingservice", "disableFailed");
-                               assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 27");
+                se = st.getEndingState("unlocked", "enabled", "null", "providingservice", "disableFailed");
+                assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 60");
-                       se = st.getEndingState("unlocked", "enabled", "failed",  "providingservice", "enableNotFailed");
-                               assertEquals("providingservice,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 28");
+                se = st.getEndingState("unlocked", "enabled", "null", "providingservice", "enableNotFailed");
+                assertEquals("providingservice,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 61");
-                       se = st.getEndingState("unlocked", "enabled", "failed",  "providingservice", "disableDependency");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 29");
+                se = st.getEndingState("unlocked", "enabled", "null", "providingservice", "disableDependency");
+                assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 62");
-                       se = st.getEndingState("unlocked", "enabled", "failed",  "providingservice", "enableNoDependency");
-                               assertEquals("providingservice,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 30");
+                se = st.getEndingState("unlocked", "enabled", "null", "providingservice", "enableNoDependency");
+                assertEquals("providingservice,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 63");
-                       se = st.getEndingState("unlocked", "enabled", "failed",  "providingservice", "promote");
-                               assertEquals("providingservice,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 31");
+                se = st.getEndingState("unlocked", "enabled", "null", "providingservice", "promote");
+                assertEquals("providingservice,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 64");
-                       se = st.getEndingState("unlocked", "enabled", "failed",  "providingservice", "demote");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 32");
+                se = st.getEndingState("unlocked", "enabled", "null", "providingservice", "demote");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 65");
-                       se = st.getEndingState("unlocked", "enabled", "dependency",  "null", "demote");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 33");
+                se = st.getEndingState("unlocked", "enabled", "failed", "null", "demote");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 66");
-                       se = st.getEndingState("unlocked", "enabled", "dependency",  "null", "unlock");
-                               assertEquals("null,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 34");
+                se = st.getEndingState("unlocked", "enabled", "failed", "null", "unlock");
+                assertEquals("null,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 67");
-                       se = st.getEndingState("unlocked", "enabled", "dependency",  "null", "disableFailed");
-                               assertEquals("null,unlocked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 35");
+                se = st.getEndingState("unlocked", "enabled", "failed", "null", "disableFailed");
+                assertEquals("null,unlocked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 68");
-                       se = st.getEndingState("unlocked", "enabled", "dependency",  "null", "enableNotFailed");
-                               assertEquals("null,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 36");
+                se = st.getEndingState("unlocked", "enabled", "failed", "null", "enableNotFailed");
+                assertEquals("null,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 69");
-                       se = st.getEndingState("unlocked", "enabled", "dependency",  "null", "disableDependency");
-                               assertEquals("null,unlocked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 37");
+                se = st.getEndingState("unlocked", "enabled", "failed", "null", "disableDependency");
+                assertEquals("null,unlocked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 70");
-                       se = st.getEndingState("unlocked", "enabled", "dependency",  "null", "enableNoDependency");
-                               assertEquals("null,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 38");
+                se = st.getEndingState("unlocked", "enabled", "failed", "null", "enableNoDependency");
+                assertEquals("null,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 71");
-                       se = st.getEndingState("unlocked", "enabled", "dependency",  "null", "promote");
-                               assertEquals("providingservice,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 39");
+                se = st.getEndingState("unlocked", "enabled", "failed", "null", "promote");
+                assertEquals("providingservice,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 72");
-                       se = st.getEndingState("unlocked", "enabled", "dependency",  "null", "demote");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 40");
+                se = st.getEndingState("unlocked", "enabled", "failed", "null", "demote");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 73");
-                       se = st.getEndingState("unlocked", "enabled", "dependency",  "coldstandby", "demote");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 41");
+                se = st.getEndingState("unlocked", "enabled", "failed", "coldstandby", "demote");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 74");
-                       se = st.getEndingState("unlocked", "enabled", "dependency",  "coldstandby", "unlock");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 42");
+                se = st.getEndingState("unlocked", "enabled", "failed", "coldstandby", "unlock");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 75");
-                       se = st.getEndingState("unlocked", "enabled", "dependency",  "coldstandby", "disableFailed");
-                               assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 43");
+                se = st.getEndingState("unlocked", "enabled", "failed", "coldstandby", "disableFailed");
+                assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 76");
-                       se = st.getEndingState("unlocked", "enabled", "dependency",  "coldstandby", "enableNotFailed");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 44");
+                se = st.getEndingState("unlocked", "enabled", "failed", "coldstandby", "enableNotFailed");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 77");
-                       se = st.getEndingState("unlocked", "enabled", "dependency",  "coldstandby", "disableDependency");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 45");
+                se = st.getEndingState("unlocked", "enabled", "failed", "coldstandby", "disableDependency");
+                assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 78");
-                       se = st.getEndingState("unlocked", "enabled", "dependency",  "coldstandby", "enableNoDependency");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 46");
+                se = st.getEndingState("unlocked", "enabled", "failed", "coldstandby", "enableNoDependency");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 79");
-                       se = st.getEndingState("unlocked", "enabled", "dependency",  "coldstandby", "promote");
-                               assertEquals("providingservice,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 47");
+                se = st.getEndingState("unlocked", "enabled", "failed", "coldstandby", "promote");
+                assertEquals("providingservice,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 80");
-                       se = st.getEndingState("unlocked", "enabled", "dependency",  "coldstandby", "demote");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 48");
+                se = st.getEndingState("unlocked", "enabled", "failed", "coldstandby", "demote");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 81");
-                       se = st.getEndingState("unlocked", "enabled", "dependency",  "hotstandby", "demote");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 49");
+                se = st.getEndingState("unlocked", "enabled", "failed", "hotstandby", "demote");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 82");
-                       se = st.getEndingState("unlocked", "enabled", "dependency",  "hotstandby", "unlock");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 50");
+                se = st.getEndingState("unlocked", "enabled", "failed", "hotstandby", "unlock");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 83");
-                       se = st.getEndingState("unlocked", "enabled", "dependency",  "hotstandby", "disableFailed");
-                               assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 51");
+                se = st.getEndingState("unlocked", "enabled", "failed", "hotstandby", "disableFailed");
+                assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 84");
-                       se = st.getEndingState("unlocked", "enabled", "dependency",  "hotstandby", "enableNotFailed");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 52");
+                se = st.getEndingState("unlocked", "enabled", "failed", "hotstandby", "enableNotFailed");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 85");
-                       se = st.getEndingState("unlocked", "enabled", "dependency",  "hotstandby", "disableDependency");
-                               assertEquals("hotstandby,unlocked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 53");
+                se = st.getEndingState("unlocked", "enabled", "failed", "hotstandby", "disableDependency");
+                assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 86");
-                       se = st.getEndingState("unlocked", "enabled", "dependency",  "hotstandby", "enableNoDependency");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 54");
+                se = st.getEndingState("unlocked", "enabled", "failed", "hotstandby", "enableNoDependency");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 87");
-                       se = st.getEndingState("unlocked", "enabled", "dependency",  "hotstandby", "promote");
-                               assertEquals("providingservice,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 55");
+                se = st.getEndingState("unlocked", "enabled", "failed", "hotstandby", "promote");
+                assertEquals("providingservice,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 88");
-                       se = st.getEndingState("unlocked", "enabled", "dependency",  "hotstandby", "demote");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 56");
+                se = st.getEndingState("unlocked", "enabled", "failed", "hotstandby", "demote");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 89");
-                       se = st.getEndingState("unlocked", "enabled", "dependency",  "providingservice", "demote");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 57");
+                se = st.getEndingState("unlocked", "enabled", "failed", "providingservice", "demote");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 90");
-                       se = st.getEndingState("unlocked", "enabled", "dependency",  "providingservice", "unlock");
-                               assertEquals("providingservice,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 58");
+                se = st.getEndingState("unlocked", "enabled", "failed", "providingservice", "unlock");
+                assertEquals("providingservice,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 91");
-                       se = st.getEndingState("unlocked", "enabled", "dependency",  "providingservice", "disableFailed");
-                               assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 59");
+                se = st.getEndingState("unlocked", "enabled", "failed", "providingservice", "disableFailed");
+                assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 92");
-                       se = st.getEndingState("unlocked", "enabled", "dependency",  "providingservice", "enableNotFailed");
-                               assertEquals("providingservice,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 60");
+                se = st.getEndingState("unlocked", "enabled", "failed", "providingservice", "enableNotFailed");
+                assertEquals("providingservice,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 93");
-                       se = st.getEndingState("unlocked", "enabled", "dependency",  "providingservice", "disableDependency");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 61");
+                se = st.getEndingState("unlocked", "enabled", "failed", "providingservice", "disableDependency");
+                assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 94");
-                       se = st.getEndingState("unlocked", "enabled", "dependency",  "providingservice", "enableNoDependency");
-                               assertEquals("providingservice,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 62");
+                se = st.getEndingState("unlocked", "enabled", "failed", "providingservice", "enableNoDependency");
+                assertEquals("providingservice,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 95");
-                       se = st.getEndingState("unlocked", "enabled", "dependency",  "providingservice", "promote");
-                               assertEquals("providingservice,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 63");
+                se = st.getEndingState("unlocked", "enabled", "failed", "providingservice", "promote");
+                assertEquals("providingservice,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 96");
-                       se = st.getEndingState("unlocked", "enabled", "dependency",  "providingservice", "demote");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 64");
+                se = st.getEndingState("unlocked", "enabled", "failed", "providingservice", "demote");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 97");
-                       se = st.getEndingState("unlocked", "enabled", "dependency,failed",  "null", "demote");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 65");
+                se = st.getEndingState("unlocked", "enabled", "dependency", "null", "demote");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 98");
-                       se = st.getEndingState("unlocked", "enabled", "dependency,failed",  "null", "unlock");
-                               assertEquals("null,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 66");
+                se = st.getEndingState("unlocked", "enabled", "dependency", "null", "unlock");
+                assertEquals("null,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 99");
-                       se = st.getEndingState("unlocked", "enabled", "dependency,failed",  "null", "disableFailed");
-                               assertEquals("null,unlocked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 67");
+                se = st.getEndingState("unlocked", "enabled", "dependency", "null", "disableFailed");
+                assertEquals("null,unlocked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 100");
-                       se = st.getEndingState("unlocked", "enabled", "dependency,failed",  "null", "enableNotFailed");
-                               assertEquals("null,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 68");
+                se = st.getEndingState("unlocked", "enabled", "dependency", "null", "enableNotFailed");
+                assertEquals("null,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 101");
-                       se = st.getEndingState("unlocked", "enabled", "dependency,failed",  "null", "disableDependency");
-                               assertEquals("null,unlocked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 69");
+                se = st.getEndingState("unlocked", "enabled", "dependency", "null", "disableDependency");
+                assertEquals("null,unlocked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 102");
-                       se = st.getEndingState("unlocked", "enabled", "dependency,failed",  "null", "enableNoDependency");
-                               assertEquals("null,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 70");
+                se = st.getEndingState("unlocked", "enabled", "dependency", "null", "enableNoDependency");
+                assertEquals("null,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 103");
-                       se = st.getEndingState("unlocked", "enabled", "dependency,failed",  "null", "promote");
-                               assertEquals("providingservice,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 71");
+                se = st.getEndingState("unlocked", "enabled", "dependency", "null", "promote");
+                assertEquals("providingservice,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 104");
-                       se = st.getEndingState("unlocked", "enabled", "dependency,failed",  "null", "demote");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 72");
+                se = st.getEndingState("unlocked", "enabled", "dependency", "null", "demote");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 105");
-                       se = st.getEndingState("unlocked", "enabled", "dependency,failed",  "coldstandby", "demote");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 73");
+                se = st.getEndingState("unlocked", "enabled", "dependency", "coldstandby", "demote");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 106");
-                       se = st.getEndingState("unlocked", "enabled", "dependency,failed",  "coldstandby", "unlock");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 74");
+                se = st.getEndingState("unlocked", "enabled", "dependency", "coldstandby", "unlock");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 107");
-                       se = st.getEndingState("unlocked", "enabled", "dependency,failed",  "coldstandby", "disableFailed");
-                               assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 75");
+                se = st.getEndingState("unlocked", "enabled", "dependency", "coldstandby", "disableFailed");
+                assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 108");
-                       se = st.getEndingState("unlocked", "enabled", "dependency,failed",  "coldstandby", "enableNotFailed");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 76");
+                se = st.getEndingState("unlocked", "enabled", "dependency", "coldstandby", "enableNotFailed");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 109");
-                       se = st.getEndingState("unlocked", "enabled", "dependency,failed",  "coldstandby", "disableDependency");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 77");
+                se = st.getEndingState("unlocked", "enabled", "dependency", "coldstandby", "disableDependency");
+                assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 110");
-                       se = st.getEndingState("unlocked", "enabled", "dependency,failed",  "coldstandby", "enableNoDependency");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 78");
+                se = st.getEndingState("unlocked", "enabled", "dependency", "coldstandby", "enableNoDependency");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 111");
-                       se = st.getEndingState("unlocked", "enabled", "dependency,failed",  "coldstandby", "promote");
-                               assertEquals("providingservice,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 79");
+                se = st.getEndingState("unlocked", "enabled", "dependency", "coldstandby", "promote");
+                assertEquals("providingservice,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 112");
-                       se = st.getEndingState("unlocked", "enabled", "dependency,failed",  "coldstandby", "demote");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 80");
+                se = st.getEndingState("unlocked", "enabled", "dependency", "coldstandby", "demote");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 113");
-                       se = st.getEndingState("unlocked", "enabled", "dependency,failed",  "hotstandby", "demote");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 81");
+                se = st.getEndingState("unlocked", "enabled", "dependency", "hotstandby", "demote");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 114");
-                       se = st.getEndingState("unlocked", "enabled", "dependency,failed",  "hotstandby", "unlock");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 82");
+                se = st.getEndingState("unlocked", "enabled", "dependency", "hotstandby", "unlock");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 115");
-                       se = st.getEndingState("unlocked", "enabled", "dependency,failed",  "hotstandby", "disableFailed");
-                               assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 83");
+                se = st.getEndingState("unlocked", "enabled", "dependency", "hotstandby", "disableFailed");
+                assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 116");
-                       se = st.getEndingState("unlocked", "enabled", "dependency,failed",  "hotstandby", "enableNotFailed");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 84");
+                se = st.getEndingState("unlocked", "enabled", "dependency", "hotstandby", "enableNotFailed");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 117");
-                       se = st.getEndingState("unlocked", "enabled", "dependency,failed",  "hotstandby", "disableDependency");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 85");
+                se = st.getEndingState("unlocked", "enabled", "dependency", "hotstandby", "disableDependency");
+                assertEquals("hotstandby,unlocked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 118");
-                       se = st.getEndingState("unlocked", "enabled", "dependency,failed",  "hotstandby", "enableNoDependency");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 86");
+                se = st.getEndingState("unlocked", "enabled", "dependency", "hotstandby", "enableNoDependency");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 119");
-                       se = st.getEndingState("unlocked", "enabled", "dependency,failed",  "hotstandby", "promote");
-                               assertEquals("providingservice,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 87");
+                se = st.getEndingState("unlocked", "enabled", "dependency", "hotstandby", "promote");
+                assertEquals("providingservice,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 120");
-                       se = st.getEndingState("unlocked", "enabled", "dependency,failed",  "hotstandby", "demote");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 88");
+                se = st.getEndingState("unlocked", "enabled", "dependency", "hotstandby", "demote");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 121");
-                       se = st.getEndingState("unlocked", "enabled", "dependency,failed",  "providingservice", "demote");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 89");
+                se = st.getEndingState("unlocked", "enabled", "dependency", "providingservice", "demote");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 122");
-                       se = st.getEndingState("unlocked", "enabled", "dependency,failed",  "providingservice", "unlock");
-                               assertEquals("providingservice,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 90");
+                se = st.getEndingState("unlocked", "enabled", "dependency", "providingservice", "unlock");
+                assertEquals("providingservice,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 123");
-                       se = st.getEndingState("unlocked", "enabled", "dependency,failed",  "providingservice", "disableFailed");
-                               assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 91");
+                se = st.getEndingState("unlocked", "enabled", "dependency", "providingservice", "disableFailed");
+                assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 124");
-                       se = st.getEndingState("unlocked", "enabled", "dependency,failed",  "providingservice", "enableNotFailed");
-                               assertEquals("providingservice,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 92");
+                se = st.getEndingState("unlocked", "enabled", "dependency", "providingservice", "enableNotFailed");
+                assertEquals("providingservice,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 125");
-                       se = st.getEndingState("unlocked", "enabled", "dependency,failed",  "providingservice", "disableDependency");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 93");
+                se = st.getEndingState("unlocked", "enabled", "dependency", "providingservice", "disableDependency");
+                assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 126");
-                       se = st.getEndingState("unlocked", "enabled", "dependency,failed",  "providingservice", "enableNoDependency");
-                               assertEquals("providingservice,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 94");
+                se = st.getEndingState("unlocked", "enabled", "dependency", "providingservice", "enableNoDependency");
+                assertEquals("providingservice,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 127");
-                       se = st.getEndingState("unlocked", "enabled", "dependency,failed",  "providingservice", "promote");
-                               assertEquals("providingservice,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 95");
+                se = st.getEndingState("unlocked", "enabled", "dependency", "providingservice", "promote");
+                assertEquals("providingservice,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 128");
-                       se = st.getEndingState("unlocked", "enabled", "dependency,failed",  "providingservice", "demote");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 96");
+                se = st.getEndingState("unlocked", "enabled", "dependency", "providingservice", "demote");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 129");
-                       se = st.getEndingState("unlocked", "disabled", "null",  "null", "demote");
-                               assertEquals("coldstandby,unlocked,disabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 97");
+                se = st.getEndingState("unlocked", "enabled", "dependency,failed", "null", "demote");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 130");
-                       se = st.getEndingState("unlocked", "disabled", "null",  "null", "unlock");
-                               assertEquals("null,unlocked,disabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 98");
+                se = st.getEndingState("unlocked", "enabled", "dependency,failed", "null", "unlock");
+                assertEquals("null,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 131");
-                       se = st.getEndingState("unlocked", "disabled", "null",  "null", "disableFailed");
-                               assertEquals("null,unlocked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 99");
+                se = st.getEndingState("unlocked", "enabled", "dependency,failed", "null", "disableFailed");
+                assertEquals("null,unlocked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 132");
-                       se = st.getEndingState("unlocked", "disabled", "null",  "null", "enableNotFailed");
-                               assertEquals("null,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 100");
+                se = st.getEndingState("unlocked", "enabled", "dependency,failed", "null", "enableNotFailed");
+                assertEquals("null,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 133");
-                       se = st.getEndingState("unlocked", "disabled", "null",  "null", "disableDependency");
-                               assertEquals("null,unlocked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 101");
+                se = st.getEndingState("unlocked", "enabled", "dependency,failed", "null", "disableDependency");
+                assertEquals("null,unlocked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 134");
-                       se = st.getEndingState("unlocked", "disabled", "null",  "null", "enableNoDependency");
-                               assertEquals("null,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 102");
+                se = st.getEndingState("unlocked", "enabled", "dependency,failed", "null", "enableNoDependency");
+                assertEquals("null,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 135");
-                       se = st.getEndingState("unlocked", "disabled", "null",  "null", "promote");
-                               assertEquals("coldstandby,unlocked,disabled,null,StandbyStatusException", makeString(se));
+                logger.info("??? StateTransition testcase 103");
+                se = st.getEndingState("unlocked", "enabled", "dependency,failed", "null", "promote");
+                assertEquals("providingservice,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 136");
-                       se = st.getEndingState("unlocked", "disabled", "null",  "null", "demote");
-                               assertEquals("coldstandby,unlocked,disabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 104");
+                se = st.getEndingState("unlocked", "enabled", "dependency,failed", "null", "demote");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 137");
-                       se = st.getEndingState("unlocked", "disabled", "null",  "coldstandby", "demote");
-                               assertEquals("coldstandby,unlocked,disabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 105");
+                se = st.getEndingState("unlocked", "enabled", "dependency,failed", "coldstandby", "demote");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 138");
-                       se = st.getEndingState("unlocked", "disabled", "null",  "coldstandby", "unlock");
-                               assertEquals("coldstandby,unlocked,disabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 106");
+                se = st.getEndingState("unlocked", "enabled", "dependency,failed", "coldstandby", "unlock");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 139");
-                       se = st.getEndingState("unlocked", "disabled", "null",  "coldstandby", "disableFailed");
-                               assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 107");
+                se = st.getEndingState("unlocked", "enabled", "dependency,failed", "coldstandby", "disableFailed");
+                assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 140");
-                       se = st.getEndingState("unlocked", "disabled", "null",  "coldstandby", "enableNotFailed");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 108");
+                se = st.getEndingState("unlocked", "enabled", "dependency,failed", "coldstandby", "enableNotFailed");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 141");
-                       se = st.getEndingState("unlocked", "disabled", "null",  "coldstandby", "disableDependency");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 109");
+                se = st.getEndingState("unlocked", "enabled", "dependency,failed", "coldstandby", "disableDependency");
+                assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 142");
-                       se = st.getEndingState("unlocked", "disabled", "null",  "coldstandby", "enableNoDependency");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 110");
+                se = st.getEndingState("unlocked", "enabled", "dependency,failed", "coldstandby", "enableNoDependency");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 143");
-                       se = st.getEndingState("unlocked", "disabled", "null",  "coldstandby", "promote");
-                               assertEquals("coldstandby,unlocked,disabled,null,StandbyStatusException", makeString(se));
+                logger.info("??? StateTransition testcase 111");
+                se = st.getEndingState("unlocked", "enabled", "dependency,failed", "coldstandby", "promote");
+                assertEquals("providingservice,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 144");
-                       se = st.getEndingState("unlocked", "disabled", "null",  "coldstandby", "demote");
-                               assertEquals("coldstandby,unlocked,disabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 112");
+                se = st.getEndingState("unlocked", "enabled", "dependency,failed", "coldstandby", "demote");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 145");
-                       se = st.getEndingState("unlocked", "disabled", "null",  "hotstandby", "demote");
-                               assertEquals("coldstandby,unlocked,disabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 113");
+                se = st.getEndingState("unlocked", "enabled", "dependency,failed", "hotstandby", "demote");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 146");
-                       se = st.getEndingState("unlocked", "disabled", "null",  "hotstandby", "unlock");
-                               assertEquals("coldstandby,unlocked,disabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 114");
+                se = st.getEndingState("unlocked", "enabled", "dependency,failed", "hotstandby", "unlock");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 147");
-                       se = st.getEndingState("unlocked", "disabled", "null",  "hotstandby", "disableFailed");
-                               assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 115");
+                se = st.getEndingState("unlocked", "enabled", "dependency,failed", "hotstandby", "disableFailed");
+                assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 148");
-                       se = st.getEndingState("unlocked", "disabled", "null",  "hotstandby", "enableNotFailed");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 116");
+                se = st.getEndingState("unlocked", "enabled", "dependency,failed", "hotstandby", "enableNotFailed");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 149");
-                       se = st.getEndingState("unlocked", "disabled", "null",  "hotstandby", "disableDependency");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 117");
+                se = st.getEndingState("unlocked", "enabled", "dependency,failed", "hotstandby", "disableDependency");
+                assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 150");
-                       se = st.getEndingState("unlocked", "disabled", "null",  "hotstandby", "enableNoDependency");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 118");
+                se = st.getEndingState("unlocked", "enabled", "dependency,failed", "hotstandby", "enableNoDependency");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 151");
-                       se = st.getEndingState("unlocked", "disabled", "null",  "hotstandby", "promote");
-                               assertEquals("coldstandby,unlocked,disabled,null,StandbyStatusException", makeString(se));
+                logger.info("??? StateTransition testcase 119");
+                se = st.getEndingState("unlocked", "enabled", "dependency,failed", "hotstandby", "promote");
+                assertEquals("providingservice,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 152");
-                       se = st.getEndingState("unlocked", "disabled", "null",  "hotstandby", "demote");
-                               assertEquals("coldstandby,unlocked,disabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 120");
+                se = st.getEndingState("unlocked", "enabled", "dependency,failed", "hotstandby", "demote");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 153");
-                       se = st.getEndingState("unlocked", "disabled", "null",  "providingservice", "demote");
-                               assertEquals("coldstandby,unlocked,disabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 121");
+                se = st.getEndingState("unlocked", "enabled", "dependency,failed", "providingservice", "demote");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 154");
-                       se = st.getEndingState("unlocked", "disabled", "null",  "providingservice", "unlock");
-                               assertEquals("coldstandby,unlocked,disabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 122");
+                se = st.getEndingState("unlocked", "enabled", "dependency,failed", "providingservice", "unlock");
+                assertEquals("providingservice,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 155");
-                       se = st.getEndingState("unlocked", "disabled", "null",  "providingservice", "disableFailed");
-                               assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 123");
+                se = st.getEndingState("unlocked", "enabled", "dependency,failed", "providingservice", "disableFailed");
+                assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 156");
-                       se = st.getEndingState("unlocked", "disabled", "null",  "providingservice", "enableNotFailed");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 124");
+                se = st.getEndingState("unlocked", "enabled", "dependency,failed", "providingservice",
+                        "enableNotFailed");
+                assertEquals("providingservice,unlocked,enabled,null,", makeString(se));
+
+                logger.info("??? StateTransition testcase 125");
+                se = st.getEndingState("unlocked", "enabled", "dependency,failed", "providingservice",
+                        "disableDependency");
+                assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
+
+                logger.info("??? StateTransition testcase 126");
+                se = st.getEndingState("unlocked", "enabled", "dependency,failed", "providingservice",
+                        "enableNoDependency");
+                assertEquals("providingservice,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 157");
-                       se = st.getEndingState("unlocked", "disabled", "null",  "providingservice", "disableDependency");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 127");
+                se = st.getEndingState("unlocked", "enabled", "dependency,failed", "providingservice", "promote");
+                assertEquals("providingservice,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 158");
-                       se = st.getEndingState("unlocked", "disabled", "null",  "providingservice", "enableNoDependency");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 128");
+                se = st.getEndingState("unlocked", "enabled", "dependency,failed", "providingservice", "demote");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 159");
-                       se = st.getEndingState("unlocked", "disabled", "null",  "providingservice", "promote");
-                               assertEquals("coldstandby,unlocked,disabled,null,StandbyStatusException", makeString(se));
+                logger.info("??? StateTransition testcase 129");
+                se = st.getEndingState("unlocked", "disabled", "null", "null", "demote");
+                assertEquals("coldstandby,unlocked,disabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 160");
-                       se = st.getEndingState("unlocked", "disabled", "null",  "providingservice", "demote");
-                               assertEquals("coldstandby,unlocked,disabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 130");
+                se = st.getEndingState("unlocked", "disabled", "null", "null", "unlock");
+                assertEquals("null,unlocked,disabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 161");
-                       se = st.getEndingState("unlocked", "disabled", "failed",  "null", "demote");
-                               assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 131");
+                se = st.getEndingState("unlocked", "disabled", "null", "null", "disableFailed");
+                assertEquals("null,unlocked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 162");
-                       se = st.getEndingState("unlocked", "disabled", "failed",  "null", "unlock");
-                               assertEquals("null,unlocked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 132");
+                se = st.getEndingState("unlocked", "disabled", "null", "null", "enableNotFailed");
+                assertEquals("null,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 163");
-                       se = st.getEndingState("unlocked", "disabled", "failed",  "null", "disableFailed");
-                               assertEquals("null,unlocked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 133");
+                se = st.getEndingState("unlocked", "disabled", "null", "null", "disableDependency");
+                assertEquals("null,unlocked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 164");
-                       se = st.getEndingState("unlocked", "disabled", "failed",  "null", "enableNotFailed");
-                               assertEquals("null,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 134");
+                se = st.getEndingState("unlocked", "disabled", "null", "null", "enableNoDependency");
+                assertEquals("null,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 165");
-                       se = st.getEndingState("unlocked", "disabled", "failed",  "null", "disableDependency");
-                               assertEquals("null,unlocked,disabled,dependency,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 135");
+                se = st.getEndingState("unlocked", "disabled", "null", "null", "promote");
+                assertEquals("coldstandby,unlocked,disabled,null,StandbyStatusException", makeString(se));
 
-                       logger.info("??? StateTransition testcase 166");
-                       se = st.getEndingState("unlocked", "disabled", "failed",  "null", "enableNoDependency");
-                               assertEquals("null,unlocked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 136");
+                se = st.getEndingState("unlocked", "disabled", "null", "null", "demote");
+                assertEquals("coldstandby,unlocked,disabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 167");
-                       se = st.getEndingState("unlocked", "disabled", "failed",  "null", "promote");
-                               assertEquals("coldstandby,unlocked,disabled,failed,StandbyStatusException", makeString(se));
+                logger.info("??? StateTransition testcase 137");
+                se = st.getEndingState("unlocked", "disabled", "null", "coldstandby", "demote");
+                assertEquals("coldstandby,unlocked,disabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 168");
-                       se = st.getEndingState("unlocked", "disabled", "failed",  "null", "demote");
-                               assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 138");
+                se = st.getEndingState("unlocked", "disabled", "null", "coldstandby", "unlock");
+                assertEquals("coldstandby,unlocked,disabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 169");
-                       se = st.getEndingState("unlocked", "disabled", "failed",  "coldstandby", "demote");
-                               assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 139");
+                se = st.getEndingState("unlocked", "disabled", "null", "coldstandby", "disableFailed");
+                assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 170");
-                       se = st.getEndingState("unlocked", "disabled", "failed",  "coldstandby", "unlock");
-                               assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 140");
+                se = st.getEndingState("unlocked", "disabled", "null", "coldstandby", "enableNotFailed");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 171");
-                       se = st.getEndingState("unlocked", "disabled", "failed",  "coldstandby", "disableFailed");
-                               assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 141");
+                se = st.getEndingState("unlocked", "disabled", "null", "coldstandby", "disableDependency");
+                assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 172");
-                       se = st.getEndingState("unlocked", "disabled", "failed",  "coldstandby", "enableNotFailed");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 142");
+                se = st.getEndingState("unlocked", "disabled", "null", "coldstandby", "enableNoDependency");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 173");
-                       se = st.getEndingState("unlocked", "disabled", "failed",  "coldstandby", "disableDependency");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 143");
+                se = st.getEndingState("unlocked", "disabled", "null", "coldstandby", "promote");
+                assertEquals("coldstandby,unlocked,disabled,null,StandbyStatusException", makeString(se));
 
-                       logger.info("??? StateTransition testcase 174");
-                       se = st.getEndingState("unlocked", "disabled", "failed",  "coldstandby", "enableNoDependency");
-                               assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 144");
+                se = st.getEndingState("unlocked", "disabled", "null", "coldstandby", "demote");
+                assertEquals("coldstandby,unlocked,disabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 175");
-                       se = st.getEndingState("unlocked", "disabled", "failed",  "coldstandby", "promote");
-                               assertEquals("coldstandby,unlocked,disabled,failed,StandbyStatusException", makeString(se));
+                logger.info("??? StateTransition testcase 145");
+                se = st.getEndingState("unlocked", "disabled", "null", "hotstandby", "demote");
+                assertEquals("coldstandby,unlocked,disabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 176");
-                       se = st.getEndingState("unlocked", "disabled", "failed",  "coldstandby", "demote");
-                               assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 146");
+                se = st.getEndingState("unlocked", "disabled", "null", "hotstandby", "unlock");
+                assertEquals("coldstandby,unlocked,disabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 177");
-                       se = st.getEndingState("unlocked", "disabled", "failed",  "hotstandby", "demote");
-                               assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 147");
+                se = st.getEndingState("unlocked", "disabled", "null", "hotstandby", "disableFailed");
+                assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 178");
-                       se = st.getEndingState("unlocked", "disabled", "failed",  "hotstandby", "unlock");
-                               assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 148");
+                se = st.getEndingState("unlocked", "disabled", "null", "hotstandby", "enableNotFailed");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 179");
-                       se = st.getEndingState("unlocked", "disabled", "failed",  "hotstandby", "disableFailed");
-                               assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 149");
+                se = st.getEndingState("unlocked", "disabled", "null", "hotstandby", "disableDependency");
+                assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 180");
-                       se = st.getEndingState("unlocked", "disabled", "failed",  "hotstandby", "enableNotFailed");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 150");
+                se = st.getEndingState("unlocked", "disabled", "null", "hotstandby", "enableNoDependency");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 181");
-                       se = st.getEndingState("unlocked", "disabled", "failed",  "hotstandby", "disableDependency");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 151");
+                se = st.getEndingState("unlocked", "disabled", "null", "hotstandby", "promote");
+                assertEquals("coldstandby,unlocked,disabled,null,StandbyStatusException", makeString(se));
 
-                       logger.info("??? StateTransition testcase 182");
-                       se = st.getEndingState("unlocked", "disabled", "failed",  "hotstandby", "enableNoDependency");
-                               assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 152");
+                se = st.getEndingState("unlocked", "disabled", "null", "hotstandby", "demote");
+                assertEquals("coldstandby,unlocked,disabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 183");
-                       se = st.getEndingState("unlocked", "disabled", "failed",  "hotstandby", "promote");
-                               assertEquals("coldstandby,unlocked,disabled,failed,StandbyStatusException", makeString(se));
+                logger.info("??? StateTransition testcase 153");
+                se = st.getEndingState("unlocked", "disabled", "null", "providingservice", "demote");
+                assertEquals("coldstandby,unlocked,disabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 184");
-                       se = st.getEndingState("unlocked", "disabled", "failed",  "hotstandby", "demote");
-                               assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 154");
+                se = st.getEndingState("unlocked", "disabled", "null", "providingservice", "unlock");
+                assertEquals("coldstandby,unlocked,disabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 185");
-                       se = st.getEndingState("unlocked", "disabled", "failed",  "providingservice", "demote");
-                               assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 155");
+                se = st.getEndingState("unlocked", "disabled", "null", "providingservice", "disableFailed");
+                assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 186");
-                       se = st.getEndingState("unlocked", "disabled", "failed",  "providingservice", "unlock");
-                               assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 156");
+                se = st.getEndingState("unlocked", "disabled", "null", "providingservice", "enableNotFailed");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 187");
-                       se = st.getEndingState("unlocked", "disabled", "failed",  "providingservice", "disableFailed");
-                               assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 157");
+                se = st.getEndingState("unlocked", "disabled", "null", "providingservice", "disableDependency");
+                assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 188");
-                       se = st.getEndingState("unlocked", "disabled", "failed",  "providingservice", "enableNotFailed");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 158");
+                se = st.getEndingState("unlocked", "disabled", "null", "providingservice", "enableNoDependency");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 189");
-                       se = st.getEndingState("unlocked", "disabled", "failed",  "providingservice", "disableDependency");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 159");
+                se = st.getEndingState("unlocked", "disabled", "null", "providingservice", "promote");
+                assertEquals("coldstandby,unlocked,disabled,null,StandbyStatusException", makeString(se));
 
-                       logger.info("??? StateTransition testcase 190");
-                       se = st.getEndingState("unlocked", "disabled", "failed",  "providingservice", "enableNoDependency");
-                               assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 160");
+                se = st.getEndingState("unlocked", "disabled", "null", "providingservice", "demote");
+                assertEquals("coldstandby,unlocked,disabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 191");
-                       se = st.getEndingState("unlocked", "disabled", "failed",  "providingservice", "promote");
-                               assertEquals("coldstandby,unlocked,disabled,failed,StandbyStatusException", makeString(se));
+                logger.info("??? StateTransition testcase 161");
+                se = st.getEndingState("unlocked", "disabled", "failed", "null", "demote");
+                assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 192");
-                       se = st.getEndingState("unlocked", "disabled", "failed",  "providingservice", "demote");
-                               assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 162");
+                se = st.getEndingState("unlocked", "disabled", "failed", "null", "unlock");
+                assertEquals("null,unlocked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 193");
-                       se = st.getEndingState("unlocked", "disabled", "dependency",  "null", "demote");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 163");
+                se = st.getEndingState("unlocked", "disabled", "failed", "null", "disableFailed");
+                assertEquals("null,unlocked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 194");
-                       se = st.getEndingState("unlocked", "disabled", "dependency",  "null", "unlock");
-                               assertEquals("null,unlocked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 164");
+                se = st.getEndingState("unlocked", "disabled", "failed", "null", "enableNotFailed");
+                assertEquals("null,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 195");
-                       se = st.getEndingState("unlocked", "disabled", "dependency",  "null", "disableFailed");
-                               assertEquals("null,unlocked,disabled,dependency,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 165");
+                se = st.getEndingState("unlocked", "disabled", "failed", "null", "disableDependency");
+                assertEquals("null,unlocked,disabled,dependency,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 196");
-                       se = st.getEndingState("unlocked", "disabled", "dependency",  "null", "enableNotFailed");
-                               assertEquals("null,unlocked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 166");
+                se = st.getEndingState("unlocked", "disabled", "failed", "null", "enableNoDependency");
+                assertEquals("null,unlocked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 197");
-                       se = st.getEndingState("unlocked", "disabled", "dependency",  "null", "disableDependency");
-                               assertEquals("null,unlocked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 167");
+                se = st.getEndingState("unlocked", "disabled", "failed", "null", "promote");
+                assertEquals("coldstandby,unlocked,disabled,failed,StandbyStatusException", makeString(se));
 
-                       logger.info("??? StateTransition testcase 198");
-                       se = st.getEndingState("unlocked", "disabled", "dependency",  "null", "enableNoDependency");
-                               assertEquals("null,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 168");
+                se = st.getEndingState("unlocked", "disabled", "failed", "null", "demote");
+                assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 199");
-                       se = st.getEndingState("unlocked", "disabled", "dependency",  "null", "promote");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,StandbyStatusException", makeString(se));
+                logger.info("??? StateTransition testcase 169");
+                se = st.getEndingState("unlocked", "disabled", "failed", "coldstandby", "demote");
+                assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 200");
-                       se = st.getEndingState("unlocked", "disabled", "dependency",  "null", "demote");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 170");
+                se = st.getEndingState("unlocked", "disabled", "failed", "coldstandby", "unlock");
+                assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 201");
-                       se = st.getEndingState("unlocked", "disabled", "dependency",  "coldstandby", "demote");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 171");
+                se = st.getEndingState("unlocked", "disabled", "failed", "coldstandby", "disableFailed");
+                assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 202");
-                       se = st.getEndingState("unlocked", "disabled", "dependency",  "coldstandby", "unlock");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 172");
+                se = st.getEndingState("unlocked", "disabled", "failed", "coldstandby", "enableNotFailed");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 203");
-                       se = st.getEndingState("unlocked", "disabled", "dependency",  "coldstandby", "disableFailed");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 173");
+                se = st.getEndingState("unlocked", "disabled", "failed", "coldstandby", "disableDependency");
+                assertEquals("coldstandby,unlocked,disabled,dependency,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 204");
-                       se = st.getEndingState("unlocked", "disabled", "dependency",  "coldstandby", "enableNotFailed");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 174");
+                se = st.getEndingState("unlocked", "disabled", "failed", "coldstandby", "enableNoDependency");
+                assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 205");
-                       se = st.getEndingState("unlocked", "disabled", "dependency",  "coldstandby", "disableDependency");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 175");
+                se = st.getEndingState("unlocked", "disabled", "failed", "coldstandby", "promote");
+                assertEquals("coldstandby,unlocked,disabled,failed,StandbyStatusException", makeString(se));
 
-                       logger.info("??? StateTransition testcase 206");
-                       se = st.getEndingState("unlocked", "disabled", "dependency",  "coldstandby", "enableNoDependency");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 176");
+                se = st.getEndingState("unlocked", "disabled", "failed", "coldstandby", "demote");
+                assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 207");
-                       se = st.getEndingState("unlocked", "disabled", "dependency",  "coldstandby", "promote");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,StandbyStatusException", makeString(se));
+                logger.info("??? StateTransition testcase 177");
+                se = st.getEndingState("unlocked", "disabled", "failed", "hotstandby", "demote");
+                assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 208");
-                       se = st.getEndingState("unlocked", "disabled", "dependency",  "coldstandby", "demote");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 178");
+                se = st.getEndingState("unlocked", "disabled", "failed", "hotstandby", "unlock");
+                assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 209");
-                       se = st.getEndingState("unlocked", "disabled", "dependency",  "hotstandby", "demote");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 179");
+                se = st.getEndingState("unlocked", "disabled", "failed", "hotstandby", "disableFailed");
+                assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 210");
-                       se = st.getEndingState("unlocked", "disabled", "dependency",  "hotstandby", "unlock");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 180");
+                se = st.getEndingState("unlocked", "disabled", "failed", "hotstandby", "enableNotFailed");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 211");
-                       se = st.getEndingState("unlocked", "disabled", "dependency",  "hotstandby", "disableFailed");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 181");
+                se = st.getEndingState("unlocked", "disabled", "failed", "hotstandby", "disableDependency");
+                assertEquals("coldstandby,unlocked,disabled,dependency,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 212");
-                       se = st.getEndingState("unlocked", "disabled", "dependency",  "hotstandby", "enableNotFailed");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 182");
+                se = st.getEndingState("unlocked", "disabled", "failed", "hotstandby", "enableNoDependency");
+                assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 213");
-                       se = st.getEndingState("unlocked", "disabled", "dependency",  "hotstandby", "disableDependency");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 183");
+                se = st.getEndingState("unlocked", "disabled", "failed", "hotstandby", "promote");
+                assertEquals("coldstandby,unlocked,disabled,failed,StandbyStatusException", makeString(se));
 
-                       logger.info("??? StateTransition testcase 214");
-                       se = st.getEndingState("unlocked", "disabled", "dependency",  "hotstandby", "enableNoDependency");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 184");
+                se = st.getEndingState("unlocked", "disabled", "failed", "hotstandby", "demote");
+                assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 215");
-                       se = st.getEndingState("unlocked", "disabled", "dependency",  "hotstandby", "promote");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,StandbyStatusException", makeString(se));
+                logger.info("??? StateTransition testcase 185");
+                se = st.getEndingState("unlocked", "disabled", "failed", "providingservice", "demote");
+                assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 216");
-                       se = st.getEndingState("unlocked", "disabled", "dependency",  "hotstandby", "demote");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 186");
+                se = st.getEndingState("unlocked", "disabled", "failed", "providingservice", "unlock");
+                assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 217");
-                       se = st.getEndingState("unlocked", "disabled", "dependency",  "providingservice", "demote");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 187");
+                se = st.getEndingState("unlocked", "disabled", "failed", "providingservice", "disableFailed");
+                assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 218");
-                       se = st.getEndingState("unlocked", "disabled", "dependency",  "providingservice", "unlock");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 188");
+                se = st.getEndingState("unlocked", "disabled", "failed", "providingservice", "enableNotFailed");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 219");
-                       se = st.getEndingState("unlocked", "disabled", "dependency",  "providingservice", "disableFailed");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 189");
+                se = st.getEndingState("unlocked", "disabled", "failed", "providingservice", "disableDependency");
+                assertEquals("coldstandby,unlocked,disabled,dependency,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 220");
-                       se = st.getEndingState("unlocked", "disabled", "dependency",  "providingservice", "enableNotFailed");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 190");
+                se = st.getEndingState("unlocked", "disabled", "failed", "providingservice", "enableNoDependency");
+                assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 221");
-                       se = st.getEndingState("unlocked", "disabled", "dependency",  "providingservice", "disableDependency");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 191");
+                se = st.getEndingState("unlocked", "disabled", "failed", "providingservice", "promote");
+                assertEquals("coldstandby,unlocked,disabled,failed,StandbyStatusException", makeString(se));
 
-                       logger.info("??? StateTransition testcase 222");
-                       se = st.getEndingState("unlocked", "disabled", "dependency",  "providingservice", "enableNoDependency");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 192");
+                se = st.getEndingState("unlocked", "disabled", "failed", "providingservice", "demote");
+                assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 223");
-                       se = st.getEndingState("unlocked", "disabled", "dependency",  "providingservice", "promote");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,StandbyStatusException", makeString(se));
+                logger.info("??? StateTransition testcase 193");
+                se = st.getEndingState("unlocked", "disabled", "dependency", "null", "demote");
+                assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 224");
-                       se = st.getEndingState("unlocked", "disabled", "dependency",  "providingservice", "demote");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 194");
+                se = st.getEndingState("unlocked", "disabled", "dependency", "null", "unlock");
+                assertEquals("null,unlocked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 225");
-                       se = st.getEndingState("unlocked", "disabled", "dependency,failed",  "null", "demote");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 195");
+                se = st.getEndingState("unlocked", "disabled", "dependency", "null", "disableFailed");
+                assertEquals("null,unlocked,disabled,dependency,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 226");
-                       se = st.getEndingState("unlocked", "disabled", "dependency,failed",  "null", "unlock");
-                               assertEquals("null,unlocked,disabled,dependency,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 196");
+                se = st.getEndingState("unlocked", "disabled", "dependency", "null", "enableNotFailed");
+                assertEquals("null,unlocked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 227");
-                       se = st.getEndingState("unlocked", "disabled", "dependency,failed",  "null", "disableFailed");
-                               assertEquals("null,unlocked,disabled,dependency,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 197");
+                se = st.getEndingState("unlocked", "disabled", "dependency", "null", "disableDependency");
+                assertEquals("null,unlocked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 228");
-                       se = st.getEndingState("unlocked", "disabled", "dependency,failed",  "null", "enableNotFailed");
-                               assertEquals("null,unlocked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 198");
+                se = st.getEndingState("unlocked", "disabled", "dependency", "null", "enableNoDependency");
+                assertEquals("null,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 229");
-                       se = st.getEndingState("unlocked", "disabled", "dependency,failed",  "null", "disableDependency");
-                               assertEquals("null,unlocked,disabled,dependency,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 199");
+                se = st.getEndingState("unlocked", "disabled", "dependency", "null", "promote");
+                assertEquals("coldstandby,unlocked,disabled,dependency,StandbyStatusException", makeString(se));
 
-                       logger.info("??? StateTransition testcase 230");
-                       se = st.getEndingState("unlocked", "disabled", "dependency,failed",  "null", "enableNoDependency");
-                               assertEquals("null,unlocked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 200");
+                se = st.getEndingState("unlocked", "disabled", "dependency", "null", "demote");
+                assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 231");
-                       se = st.getEndingState("unlocked", "disabled", "dependency,failed",  "null", "promote");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,failed,StandbyStatusException", makeString(se));
+                logger.info("??? StateTransition testcase 201");
+                se = st.getEndingState("unlocked", "disabled", "dependency", "coldstandby", "demote");
+                assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 232");
-                       se = st.getEndingState("unlocked", "disabled", "dependency,failed",  "null", "demote");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 202");
+                se = st.getEndingState("unlocked", "disabled", "dependency", "coldstandby", "unlock");
+                assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 233");
-                       se = st.getEndingState("unlocked", "disabled", "dependency,failed",  "coldstandby", "demote");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 203");
+                se = st.getEndingState("unlocked", "disabled", "dependency", "coldstandby", "disableFailed");
+                assertEquals("coldstandby,unlocked,disabled,dependency,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 234");
-                       se = st.getEndingState("unlocked", "disabled", "dependency,failed",  "coldstandby", "unlock");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 204");
+                se = st.getEndingState("unlocked", "disabled", "dependency", "coldstandby", "enableNotFailed");
+                assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 235");
-                       se = st.getEndingState("unlocked", "disabled", "dependency,failed",  "coldstandby", "disableFailed");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 205");
+                se = st.getEndingState("unlocked", "disabled", "dependency", "coldstandby", "disableDependency");
+                assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 236");
-                       se = st.getEndingState("unlocked", "disabled", "dependency,failed",  "coldstandby", "enableNotFailed");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 206");
+                se = st.getEndingState("unlocked", "disabled", "dependency", "coldstandby", "enableNoDependency");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 237");
-                       se = st.getEndingState("unlocked", "disabled", "dependency,failed",  "coldstandby", "disableDependency");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 207");
+                se = st.getEndingState("unlocked", "disabled", "dependency", "coldstandby", "promote");
+                assertEquals("coldstandby,unlocked,disabled,dependency,StandbyStatusException", makeString(se));
 
-                       logger.info("??? StateTransition testcase 238");
-                       se = st.getEndingState("unlocked", "disabled", "dependency,failed",  "coldstandby", "enableNoDependency");
-                               assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 208");
+                se = st.getEndingState("unlocked", "disabled", "dependency", "coldstandby", "demote");
+                assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 239");
-                       se = st.getEndingState("unlocked", "disabled", "dependency,failed",  "coldstandby", "promote");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,failed,StandbyStatusException", makeString(se));
+                logger.info("??? StateTransition testcase 209");
+                se = st.getEndingState("unlocked", "disabled", "dependency", "hotstandby", "demote");
+                assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 240");
-                       se = st.getEndingState("unlocked", "disabled", "dependency,failed",  "coldstandby", "demote");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 210");
+                se = st.getEndingState("unlocked", "disabled", "dependency", "hotstandby", "unlock");
+                assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 241");
-                       se = st.getEndingState("unlocked", "disabled", "dependency,failed",  "hotstandby", "demote");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 211");
+                se = st.getEndingState("unlocked", "disabled", "dependency", "hotstandby", "disableFailed");
+                assertEquals("coldstandby,unlocked,disabled,dependency,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 242");
-                       se = st.getEndingState("unlocked", "disabled", "dependency,failed",  "hotstandby", "unlock");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 212");
+                se = st.getEndingState("unlocked", "disabled", "dependency", "hotstandby", "enableNotFailed");
+                assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 243");
-                       se = st.getEndingState("unlocked", "disabled", "dependency,failed",  "hotstandby", "disableFailed");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 213");
+                se = st.getEndingState("unlocked", "disabled", "dependency", "hotstandby", "disableDependency");
+                assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 244");
-                       se = st.getEndingState("unlocked", "disabled", "dependency,failed",  "hotstandby", "enableNotFailed");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 214");
+                se = st.getEndingState("unlocked", "disabled", "dependency", "hotstandby", "enableNoDependency");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 245");
-                       se = st.getEndingState("unlocked", "disabled", "dependency,failed",  "hotstandby", "disableDependency");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 215");
+                se = st.getEndingState("unlocked", "disabled", "dependency", "hotstandby", "promote");
+                assertEquals("coldstandby,unlocked,disabled,dependency,StandbyStatusException", makeString(se));
 
-                       logger.info("??? StateTransition testcase 246");
-                       se = st.getEndingState("unlocked", "disabled", "dependency,failed",  "hotstandby", "enableNoDependency");
-                               assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 216");
+                se = st.getEndingState("unlocked", "disabled", "dependency", "hotstandby", "demote");
+                assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 247");
-                       se = st.getEndingState("unlocked", "disabled", "dependency,failed",  "hotstandby", "promote");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,failed,StandbyStatusException", makeString(se));
+                logger.info("??? StateTransition testcase 217");
+                se = st.getEndingState("unlocked", "disabled", "dependency", "providingservice", "demote");
+                assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 248");
-                       se = st.getEndingState("unlocked", "disabled", "dependency,failed",  "hotstandby", "demote");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 218");
+                se = st.getEndingState("unlocked", "disabled", "dependency", "providingservice", "unlock");
+                assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 249");
-                       se = st.getEndingState("unlocked", "disabled", "dependency,failed",  "providingservice", "demote");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 219");
+                se = st.getEndingState("unlocked", "disabled", "dependency", "providingservice", "disableFailed");
+                assertEquals("coldstandby,unlocked,disabled,dependency,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 250");
-                       se = st.getEndingState("unlocked", "disabled", "dependency,failed",  "providingservice", "unlock");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 220");
+                se = st.getEndingState("unlocked", "disabled", "dependency", "providingservice", "enableNotFailed");
+                assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 251");
-                       se = st.getEndingState("unlocked", "disabled", "dependency,failed",  "providingservice", "disableFailed");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 221");
+                se = st.getEndingState("unlocked", "disabled", "dependency", "providingservice", "disableDependency");
+                assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 252");
-                       se = st.getEndingState("unlocked", "disabled", "dependency,failed",  "providingservice", "enableNotFailed");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 222");
+                se = st.getEndingState("unlocked", "disabled", "dependency", "providingservice", "enableNoDependency");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 253");
-                       se = st.getEndingState("unlocked", "disabled", "dependency,failed",  "providingservice", "disableDependency");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 223");
+                se = st.getEndingState("unlocked", "disabled", "dependency", "providingservice", "promote");
+                assertEquals("coldstandby,unlocked,disabled,dependency,StandbyStatusException", makeString(se));
 
-                       logger.info("??? StateTransition testcase 254");
-                       se = st.getEndingState("unlocked", "disabled", "dependency,failed",  "providingservice", "enableNoDependency");
-                               assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 224");
+                se = st.getEndingState("unlocked", "disabled", "dependency", "providingservice", "demote");
+                assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 255");
-                       se = st.getEndingState("unlocked", "disabled", "dependency,failed",  "providingservice", "promote");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,failed,StandbyStatusException", makeString(se));
+                logger.info("??? StateTransition testcase 225");
+                se = st.getEndingState("unlocked", "disabled", "dependency,failed", "null", "demote");
+                assertEquals("coldstandby,unlocked,disabled,dependency,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 256");
-                       se = st.getEndingState("unlocked", "disabled", "dependency,failed",  "providingservice", "demote");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 226");
+                se = st.getEndingState("unlocked", "disabled", "dependency,failed", "null", "unlock");
+                assertEquals("null,unlocked,disabled,dependency,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 257");
-                       se = st.getEndingState("locked", "enabled", "null",  "null", "demote");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 227");
+                se = st.getEndingState("unlocked", "disabled", "dependency,failed", "null", "disableFailed");
+                assertEquals("null,unlocked,disabled,dependency,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 258");
-                       se = st.getEndingState("locked", "enabled", "null",  "null", "unlock");
-                               assertEquals("null,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 228");
+                se = st.getEndingState("unlocked", "disabled", "dependency,failed", "null", "enableNotFailed");
+                assertEquals("null,unlocked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 259");
-                       se = st.getEndingState("locked", "enabled", "null",  "null", "disableFailed");
-                               assertEquals("null,locked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 229");
+                se = st.getEndingState("unlocked", "disabled", "dependency,failed", "null", "disableDependency");
+                assertEquals("null,unlocked,disabled,dependency,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 260");
-                       se = st.getEndingState("locked", "enabled", "null",  "null", "enableNotFailed");
-                               assertEquals("null,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 230");
+                se = st.getEndingState("unlocked", "disabled", "dependency,failed", "null", "enableNoDependency");
+                assertEquals("null,unlocked,disabled,failed,", makeString(se));
+
+                logger.info("??? StateTransition testcase 231");
+                se = st.getEndingState("unlocked", "disabled", "dependency,failed", "null", "promote");
+                assertEquals("coldstandby,unlocked,disabled,dependency,failed,StandbyStatusException", makeString(se));
+
+                logger.info("??? StateTransition testcase 232");
+                se = st.getEndingState("unlocked", "disabled", "dependency,failed", "null", "demote");
+                assertEquals("coldstandby,unlocked,disabled,dependency,failed,", makeString(se));
+
+                logger.info("??? StateTransition testcase 233");
+                se = st.getEndingState("unlocked", "disabled", "dependency,failed", "coldstandby", "demote");
+                assertEquals("coldstandby,unlocked,disabled,dependency,failed,", makeString(se));
+
+                logger.info("??? StateTransition testcase 234");
+                se = st.getEndingState("unlocked", "disabled", "dependency,failed", "coldstandby", "unlock");
+                assertEquals("coldstandby,unlocked,disabled,dependency,failed,", makeString(se));
+
+                logger.info("??? StateTransition testcase 235");
+                se = st.getEndingState("unlocked", "disabled", "dependency,failed", "coldstandby", "disableFailed");
+                assertEquals("coldstandby,unlocked,disabled,dependency,failed,", makeString(se));
+
+                logger.info("??? StateTransition testcase 236");
+                se = st.getEndingState("unlocked", "disabled", "dependency,failed", "coldstandby", "enableNotFailed");
+                assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
+
+                logger.info("??? StateTransition testcase 237");
+                se = st.getEndingState("unlocked", "disabled", "dependency,failed", "coldstandby", "disableDependency");
+                assertEquals("coldstandby,unlocked,disabled,dependency,failed,", makeString(se));
+
+                logger.info("??? StateTransition testcase 238");
+                se = st.getEndingState("unlocked", "disabled", "dependency,failed", "coldstandby",
+                        "enableNoDependency");
+                assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
+
+                logger.info("??? StateTransition testcase 239");
+                se = st.getEndingState("unlocked", "disabled", "dependency,failed", "coldstandby", "promote");
+                assertEquals("coldstandby,unlocked,disabled,dependency,failed,StandbyStatusException", makeString(se));
+
+                logger.info("??? StateTransition testcase 240");
+                se = st.getEndingState("unlocked", "disabled", "dependency,failed", "coldstandby", "demote");
+                assertEquals("coldstandby,unlocked,disabled,dependency,failed,", makeString(se));
+
+                logger.info("??? StateTransition testcase 241");
+                se = st.getEndingState("unlocked", "disabled", "dependency,failed", "hotstandby", "demote");
+                assertEquals("coldstandby,unlocked,disabled,dependency,failed,", makeString(se));
+
+                logger.info("??? StateTransition testcase 242");
+                se = st.getEndingState("unlocked", "disabled", "dependency,failed", "hotstandby", "unlock");
+                assertEquals("coldstandby,unlocked,disabled,dependency,failed,", makeString(se));
+
+                logger.info("??? StateTransition testcase 243");
+                se = st.getEndingState("unlocked", "disabled", "dependency,failed", "hotstandby", "disableFailed");
+                assertEquals("coldstandby,unlocked,disabled,dependency,failed,", makeString(se));
+
+                logger.info("??? StateTransition testcase 244");
+                se = st.getEndingState("unlocked", "disabled", "dependency,failed", "hotstandby", "enableNotFailed");
+                assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
+
+                logger.info("??? StateTransition testcase 245");
+                se = st.getEndingState("unlocked", "disabled", "dependency,failed", "hotstandby", "disableDependency");
+                assertEquals("coldstandby,unlocked,disabled,dependency,failed,", makeString(se));
+
+                logger.info("??? StateTransition testcase 246");
+                se = st.getEndingState("unlocked", "disabled", "dependency,failed", "hotstandby", "enableNoDependency");
+                assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
+
+                logger.info("??? StateTransition testcase 247");
+                se = st.getEndingState("unlocked", "disabled", "dependency,failed", "hotstandby", "promote");
+                assertEquals("coldstandby,unlocked,disabled,dependency,failed,StandbyStatusException", makeString(se));
+
+                logger.info("??? StateTransition testcase 248");
+                se = st.getEndingState("unlocked", "disabled", "dependency,failed", "hotstandby", "demote");
+                assertEquals("coldstandby,unlocked,disabled,dependency,failed,", makeString(se));
+
+                logger.info("??? StateTransition testcase 249");
+                se = st.getEndingState("unlocked", "disabled", "dependency,failed", "providingservice", "demote");
+                assertEquals("coldstandby,unlocked,disabled,dependency,failed,", makeString(se));
+
+                logger.info("??? StateTransition testcase 250");
+                se = st.getEndingState("unlocked", "disabled", "dependency,failed", "providingservice", "unlock");
+                assertEquals("coldstandby,unlocked,disabled,dependency,failed,", makeString(se));
+
+                logger.info("??? StateTransition testcase 251");
+                se = st.getEndingState("unlocked", "disabled", "dependency,failed", "providingservice",
+                        "disableFailed");
+                assertEquals("coldstandby,unlocked,disabled,dependency,failed,", makeString(se));
+
+                logger.info("??? StateTransition testcase 252");
+                se = st.getEndingState("unlocked", "disabled", "dependency,failed", "providingservice",
+                        "enableNotFailed");
+                assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
+
+                logger.info("??? StateTransition testcase 253");
+                se = st.getEndingState("unlocked", "disabled", "dependency,failed", "providingservice",
+                        "disableDependency");
+                assertEquals("coldstandby,unlocked,disabled,dependency,failed,", makeString(se));
+
+                logger.info("??? StateTransition testcase 254");
+                se = st.getEndingState("unlocked", "disabled", "dependency,failed", "providingservice",
+                        "enableNoDependency");
+                assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
+
+                logger.info("??? StateTransition testcase 255");
+                se = st.getEndingState("unlocked", "disabled", "dependency,failed", "providingservice", "promote");
+                assertEquals("coldstandby,unlocked,disabled,dependency,failed,StandbyStatusException", makeString(se));
+
+                logger.info("??? StateTransition testcase 256");
+                se = st.getEndingState("unlocked", "disabled", "dependency,failed", "providingservice", "demote");
+                assertEquals("coldstandby,unlocked,disabled,dependency,failed,", makeString(se));
+
+                logger.info("??? StateTransition testcase 257");
+                se = st.getEndingState("locked", "enabled", "null", "null", "demote");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+
+                logger.info("??? StateTransition testcase 258");
+                se = st.getEndingState("locked", "enabled", "null", "null", "unlock");
+                assertEquals("null,unlocked,enabled,null,", makeString(se));
+
+                logger.info("??? StateTransition testcase 259");
+                se = st.getEndingState("locked", "enabled", "null", "null", "disableFailed");
+                assertEquals("null,locked,disabled,failed,", makeString(se));
+
+                logger.info("??? StateTransition testcase 260");
+                se = st.getEndingState("locked", "enabled", "null", "null", "enableNotFailed");
+                assertEquals("null,locked,enabled,null,", makeString(se));
+
+                logger.info("??? StateTransition testcase 261");
+                se = st.getEndingState("locked", "enabled", "null", "null", "disableDependency");
+                assertEquals("null,locked,disabled,dependency,", makeString(se));
+
+                logger.info("??? StateTransition testcase 262");
+                se = st.getEndingState("locked", "enabled", "null", "null", "enableNoDependency");
+                assertEquals("null,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 261");
-                       se = st.getEndingState("locked", "enabled", "null",  "null", "disableDependency");
-                               assertEquals("null,locked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 263");
+                se = st.getEndingState("locked", "enabled", "null", "null", "promote");
+                assertEquals("coldstandby,locked,enabled,null,StandbyStatusException", makeString(se));
 
-                       logger.info("??? StateTransition testcase 262");
-                       se = st.getEndingState("locked", "enabled", "null",  "null", "enableNoDependency");
-                               assertEquals("null,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 264");
+                se = st.getEndingState("locked", "enabled", "null", "null", "demote");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 263");
-                       se = st.getEndingState("locked", "enabled", "null",  "null", "promote");
-                               assertEquals("coldstandby,locked,enabled,null,StandbyStatusException", makeString(se));
+                logger.info("??? StateTransition testcase 265");
+                se = st.getEndingState("locked", "enabled", "null", "coldstandby", "demote");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 264");
-                       se = st.getEndingState("locked", "enabled", "null",  "null", "demote");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 266");
+                se = st.getEndingState("locked", "enabled", "null", "coldstandby", "unlock");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 265");
-                       se = st.getEndingState("locked", "enabled", "null",  "coldstandby", "demote");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 267");
+                se = st.getEndingState("locked", "enabled", "null", "coldstandby", "disableFailed");
+                assertEquals("coldstandby,locked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 266");
-                       se = st.getEndingState("locked", "enabled", "null",  "coldstandby", "unlock");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 268");
+                se = st.getEndingState("locked", "enabled", "null", "coldstandby", "enableNotFailed");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 267");
-                       se = st.getEndingState("locked", "enabled", "null",  "coldstandby", "disableFailed");
-                               assertEquals("coldstandby,locked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 269");
+                se = st.getEndingState("locked", "enabled", "null", "coldstandby", "disableDependency");
+                assertEquals("coldstandby,locked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 268");
-                       se = st.getEndingState("locked", "enabled", "null",  "coldstandby", "enableNotFailed");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 270");
+                se = st.getEndingState("locked", "enabled", "null", "coldstandby", "enableNoDependency");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 269");
-                       se = st.getEndingState("locked", "enabled", "null",  "coldstandby", "disableDependency");
-                               assertEquals("coldstandby,locked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 271");
+                se = st.getEndingState("locked", "enabled", "null", "coldstandby", "promote");
+                assertEquals("coldstandby,locked,enabled,null,StandbyStatusException", makeString(se));
 
-                       logger.info("??? StateTransition testcase 270");
-                       se = st.getEndingState("locked", "enabled", "null",  "coldstandby", "enableNoDependency");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 272");
+                se = st.getEndingState("locked", "enabled", "null", "coldstandby", "demote");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 271");
-                       se = st.getEndingState("locked", "enabled", "null",  "coldstandby", "promote");
-                               assertEquals("coldstandby,locked,enabled,null,StandbyStatusException", makeString(se));
+                logger.info("??? StateTransition testcase 273");
+                se = st.getEndingState("locked", "enabled", "null", "hotstandby", "demote");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 272");
-                       se = st.getEndingState("locked", "enabled", "null",  "coldstandby", "demote");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 274");
+                se = st.getEndingState("locked", "enabled", "null", "hotstandby", "unlock");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 273");
-                       se = st.getEndingState("locked", "enabled", "null",  "hotstandby", "demote");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 275");
+                se = st.getEndingState("locked", "enabled", "null", "hotstandby", "disableFailed");
+                assertEquals("coldstandby,locked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 274");
-                       se = st.getEndingState("locked", "enabled", "null",  "hotstandby", "unlock");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 276");
+                se = st.getEndingState("locked", "enabled", "null", "hotstandby", "enableNotFailed");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 275");
-                       se = st.getEndingState("locked", "enabled", "null",  "hotstandby", "disableFailed");
-                               assertEquals("coldstandby,locked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 277");
+                se = st.getEndingState("locked", "enabled", "null", "hotstandby", "disableDependency");
+                assertEquals("coldstandby,locked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 276");
-                       se = st.getEndingState("locked", "enabled", "null",  "hotstandby", "enableNotFailed");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 278");
+                se = st.getEndingState("locked", "enabled", "null", "hotstandby", "enableNoDependency");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 277");
-                       se = st.getEndingState("locked", "enabled", "null",  "hotstandby", "disableDependency");
-                               assertEquals("coldstandby,locked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 279");
+                se = st.getEndingState("locked", "enabled", "null", "hotstandby", "promote");
+                assertEquals("coldstandby,locked,enabled,null,StandbyStateException", makeString(se));
 
-                       logger.info("??? StateTransition testcase 278");
-                       se = st.getEndingState("locked", "enabled", "null",  "hotstandby", "enableNoDependency");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 280");
+                se = st.getEndingState("locked", "enabled", "null", "hotstandby", "demote");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 279");
-                       se = st.getEndingState("locked", "enabled", "null",  "hotstandby", "promote");
-                               assertEquals("coldstandby,locked,enabled,null,StandbyStateException", makeString(se));
+                logger.info("??? StateTransition testcase 281");
+                se = st.getEndingState("locked", "enabled", "null", "providingservice", "demote");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 280");
-                       se = st.getEndingState("locked", "enabled", "null",  "hotstandby", "demote");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 282");
+                se = st.getEndingState("locked", "enabled", "null", "providingservice", "unlock");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 281");
-                       se = st.getEndingState("locked", "enabled", "null",  "providingservice", "demote");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 283");
+                se = st.getEndingState("locked", "enabled", "null", "providingservice", "disableFailed");
+                assertEquals("coldstandby,locked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 282");
-                       se = st.getEndingState("locked", "enabled", "null",  "providingservice", "unlock");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 284");
+                se = st.getEndingState("locked", "enabled", "null", "providingservice", "enableNotFailed");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 283");
-                       se = st.getEndingState("locked", "enabled", "null",  "providingservice", "disableFailed");
-                               assertEquals("coldstandby,locked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 285");
+                se = st.getEndingState("locked", "enabled", "null", "providingservice", "disableDependency");
+                assertEquals("coldstandby,locked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 284");
-                       se = st.getEndingState("locked", "enabled", "null",  "providingservice", "enableNotFailed");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 286");
+                se = st.getEndingState("locked", "enabled", "null", "providingservice", "enableNoDependency");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 285");
-                       se = st.getEndingState("locked", "enabled", "null",  "providingservice", "disableDependency");
-                               assertEquals("coldstandby,locked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 287");
+                se = st.getEndingState("locked", "enabled", "null", "providingservice", "promote");
+                assertEquals("coldstandby,locked,enabled,null,StandbyStateException", makeString(se));
 
-                       logger.info("??? StateTransition testcase 286");
-                       se = st.getEndingState("locked", "enabled", "null",  "providingservice", "enableNoDependency");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 288");
+                se = st.getEndingState("locked", "enabled", "null", "providingservice", "demote");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 287");
-                       se = st.getEndingState("locked", "enabled", "null",  "providingservice", "promote");
-                               assertEquals("coldstandby,locked,enabled,null,StandbyStateException", makeString(se));
+                logger.info("??? StateTransition testcase 289");
+                se = st.getEndingState("locked", "enabled", "failed", "null", "demote");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 288");
-                       se = st.getEndingState("locked", "enabled", "null",  "providingservice", "demote");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 290");
+                se = st.getEndingState("locked", "enabled", "failed", "null", "unlock");
+                assertEquals("null,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 289");
-                       se = st.getEndingState("locked", "enabled", "failed",  "null", "demote");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 291");
+                se = st.getEndingState("locked", "enabled", "failed", "null", "disableFailed");
+                assertEquals("null,locked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 290");
-                       se = st.getEndingState("locked", "enabled", "failed",  "null", "unlock");
-                               assertEquals("null,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 292");
+                se = st.getEndingState("locked", "enabled", "failed", "null", "enableNotFailed");
+                assertEquals("null,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 291");
-                       se = st.getEndingState("locked", "enabled", "failed",  "null", "disableFailed");
-                               assertEquals("null,locked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 293");
+                se = st.getEndingState("locked", "enabled", "failed", "null", "disableDependency");
+                assertEquals("null,locked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 292");
-                       se = st.getEndingState("locked", "enabled", "failed",  "null", "enableNotFailed");
-                               assertEquals("null,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 294");
+                se = st.getEndingState("locked", "enabled", "failed", "null", "enableNoDependency");
+                assertEquals("null,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 293");
-                       se = st.getEndingState("locked", "enabled", "failed",  "null", "disableDependency");
-                               assertEquals("null,locked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 295");
+                se = st.getEndingState("locked", "enabled", "failed", "null", "promote");
+                assertEquals("coldstandby,locked,enabled,null,StandbyStatusException", makeString(se));
 
-                       logger.info("??? StateTransition testcase 294");
-                       se = st.getEndingState("locked", "enabled", "failed",  "null", "enableNoDependency");
-                               assertEquals("null,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 296");
+                se = st.getEndingState("locked", "enabled", "failed", "null", "demote");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 295");
-                       se = st.getEndingState("locked", "enabled", "failed",  "null", "promote");
-                               assertEquals("coldstandby,locked,enabled,null,StandbyStatusException", makeString(se));
+                logger.info("??? StateTransition testcase 297");
+                se = st.getEndingState("locked", "enabled", "failed", "coldstandby", "demote");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 296");
-                       se = st.getEndingState("locked", "enabled", "failed",  "null", "demote");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 298");
+                se = st.getEndingState("locked", "enabled", "failed", "coldstandby", "unlock");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 297");
-                       se = st.getEndingState("locked", "enabled", "failed",  "coldstandby", "demote");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 299");
+                se = st.getEndingState("locked", "enabled", "failed", "coldstandby", "disableFailed");
+                assertEquals("coldstandby,locked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 298");
-                       se = st.getEndingState("locked", "enabled", "failed",  "coldstandby", "unlock");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 300");
+                se = st.getEndingState("locked", "enabled", "failed", "coldstandby", "enableNotFailed");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 299");
-                       se = st.getEndingState("locked", "enabled", "failed",  "coldstandby", "disableFailed");
-                               assertEquals("coldstandby,locked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 301");
+                se = st.getEndingState("locked", "enabled", "failed", "coldstandby", "disableDependency");
+                assertEquals("coldstandby,locked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 300");
-                       se = st.getEndingState("locked", "enabled", "failed",  "coldstandby", "enableNotFailed");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 302");
+                se = st.getEndingState("locked", "enabled", "failed", "coldstandby", "enableNoDependency");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 301");
-                       se = st.getEndingState("locked", "enabled", "failed",  "coldstandby", "disableDependency");
-                               assertEquals("coldstandby,locked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 303");
+                se = st.getEndingState("locked", "enabled", "failed", "coldstandby", "promote");
+                assertEquals("coldstandby,locked,enabled,null,StandbyStatusException", makeString(se));
 
-                       logger.info("??? StateTransition testcase 302");
-                       se = st.getEndingState("locked", "enabled", "failed",  "coldstandby", "enableNoDependency");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 304");
+                se = st.getEndingState("locked", "enabled", "failed", "coldstandby", "demote");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 303");
-                       se = st.getEndingState("locked", "enabled", "failed",  "coldstandby", "promote");
-                               assertEquals("coldstandby,locked,enabled,null,StandbyStatusException", makeString(se));
+                logger.info("??? StateTransition testcase 305");
+                se = st.getEndingState("locked", "enabled", "failed", "hotstandby", "demote");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 304");
-                       se = st.getEndingState("locked", "enabled", "failed",  "coldstandby", "demote");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 306");
+                se = st.getEndingState("locked", "enabled", "failed", "hotstandby", "unlock");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 305");
-                       se = st.getEndingState("locked", "enabled", "failed",  "hotstandby", "demote");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 307");
+                se = st.getEndingState("locked", "enabled", "failed", "hotstandby", "disableFailed");
+                assertEquals("coldstandby,locked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 306");
-                       se = st.getEndingState("locked", "enabled", "failed",  "hotstandby", "unlock");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 308");
+                se = st.getEndingState("locked", "enabled", "failed", "hotstandby", "enableNotFailed");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 307");
-                       se = st.getEndingState("locked", "enabled", "failed",  "hotstandby", "disableFailed");
-                               assertEquals("coldstandby,locked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 309");
+                se = st.getEndingState("locked", "enabled", "failed", "hotstandby", "disableDependency");
+                assertEquals("coldstandby,locked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 308");
-                       se = st.getEndingState("locked", "enabled", "failed",  "hotstandby", "enableNotFailed");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 310");
+                se = st.getEndingState("locked", "enabled", "failed", "hotstandby", "enableNoDependency");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 309");
-                       se = st.getEndingState("locked", "enabled", "failed",  "hotstandby", "disableDependency");
-                               assertEquals("coldstandby,locked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 311");
+                se = st.getEndingState("locked", "enabled", "failed", "hotstandby", "promote");
+                assertEquals("coldstandby,locked,enabled,null,StandbyStatusException", makeString(se));
 
-                       logger.info("??? StateTransition testcase 310");
-                       se = st.getEndingState("locked", "enabled", "failed",  "hotstandby", "enableNoDependency");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 312");
+                se = st.getEndingState("locked", "enabled", "failed", "hotstandby", "demote");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 311");
-                       se = st.getEndingState("locked", "enabled", "failed",  "hotstandby", "promote");
-                               assertEquals("coldstandby,locked,enabled,null,StandbyStatusException", makeString(se));
+                logger.info("??? StateTransition testcase 313");
+                se = st.getEndingState("locked", "enabled", "failed", "providingservice", "demote");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 312");
-                       se = st.getEndingState("locked", "enabled", "failed",  "hotstandby", "demote");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 314");
+                se = st.getEndingState("locked", "enabled", "failed", "providingservice", "unlock");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 313");
-                       se = st.getEndingState("locked", "enabled", "failed",  "providingservice", "demote");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 315");
+                se = st.getEndingState("locked", "enabled", "failed", "providingservice", "disableFailed");
+                assertEquals("coldstandby,locked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 314");
-                       se = st.getEndingState("locked", "enabled", "failed",  "providingservice", "unlock");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 316");
+                se = st.getEndingState("locked", "enabled", "failed", "providingservice", "enableNotFailed");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 315");
-                       se = st.getEndingState("locked", "enabled", "failed",  "providingservice", "disableFailed");
-                               assertEquals("coldstandby,locked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 317");
+                se = st.getEndingState("locked", "enabled", "failed", "providingservice", "disableDependency");
+                assertEquals("coldstandby,locked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 316");
-                       se = st.getEndingState("locked", "enabled", "failed",  "providingservice", "enableNotFailed");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 318");
+                se = st.getEndingState("locked", "enabled", "failed", "providingservice", "enableNoDependency");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 317");
-                       se = st.getEndingState("locked", "enabled", "failed",  "providingservice", "disableDependency");
-                               assertEquals("coldstandby,locked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 319");
+                se = st.getEndingState("locked", "enabled", "failed", "providingservice", "promote");
+                assertEquals("coldstandby,locked,enabled,null,StandbyStatusException", makeString(se));
 
-                       logger.info("??? StateTransition testcase 318");
-                       se = st.getEndingState("locked", "enabled", "failed",  "providingservice", "enableNoDependency");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 320");
+                se = st.getEndingState("locked", "enabled", "failed", "providingservice", "demote");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 319");
-                       se = st.getEndingState("locked", "enabled", "failed",  "providingservice", "promote");
-                               assertEquals("coldstandby,locked,enabled,null,StandbyStatusException", makeString(se));
+                logger.info("??? StateTransition testcase 321");
+                se = st.getEndingState("locked", "enabled", "dependency", "null", "demote");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 320");
-                       se = st.getEndingState("locked", "enabled", "failed",  "providingservice", "demote");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 322");
+                se = st.getEndingState("locked", "enabled", "dependency", "null", "unlock");
+                assertEquals("null,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 321");
-                       se = st.getEndingState("locked", "enabled", "dependency",  "null", "demote");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 323");
+                se = st.getEndingState("locked", "enabled", "dependency", "null", "disableFailed");
+                assertEquals("null,locked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 322");
-                       se = st.getEndingState("locked", "enabled", "dependency",  "null", "unlock");
-                               assertEquals("null,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 324");
+                se = st.getEndingState("locked", "enabled", "dependency", "null", "enableNotFailed");
+                assertEquals("null,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 323");
-                       se = st.getEndingState("locked", "enabled", "dependency",  "null", "disableFailed");
-                               assertEquals("null,locked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 325");
+                se = st.getEndingState("locked", "enabled", "dependency", "null", "disableDependency");
+                assertEquals("null,locked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 324");
-                       se = st.getEndingState("locked", "enabled", "dependency",  "null", "enableNotFailed");
-                               assertEquals("null,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 326");
+                se = st.getEndingState("locked", "enabled", "dependency", "null", "enableNoDependency");
+                assertEquals("null,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 325");
-                       se = st.getEndingState("locked", "enabled", "dependency",  "null", "disableDependency");
-                               assertEquals("null,locked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 327");
+                se = st.getEndingState("locked", "enabled", "dependency", "null", "promote");
+                assertEquals("coldstandby,locked,enabled,null,StandbyStatusException", makeString(se));
 
-                       logger.info("??? StateTransition testcase 326");
-                       se = st.getEndingState("locked", "enabled", "dependency",  "null", "enableNoDependency");
-                               assertEquals("null,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 328");
+                se = st.getEndingState("locked", "enabled", "dependency", "null", "demote");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 327");
-                       se = st.getEndingState("locked", "enabled", "dependency",  "null", "promote");
-                               assertEquals("coldstandby,locked,enabled,null,StandbyStatusException", makeString(se));
+                logger.info("??? StateTransition testcase 329");
+                se = st.getEndingState("locked", "enabled", "dependency", "coldstandby", "demote");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 328");
-                       se = st.getEndingState("locked", "enabled", "dependency",  "null", "demote");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 330");
+                se = st.getEndingState("locked", "enabled", "dependency", "coldstandby", "unlock");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 329");
-                       se = st.getEndingState("locked", "enabled", "dependency",  "coldstandby", "demote");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 331");
+                se = st.getEndingState("locked", "enabled", "dependency", "coldstandby", "disableFailed");
+                assertEquals("coldstandby,locked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 330");
-                       se = st.getEndingState("locked", "enabled", "dependency",  "coldstandby", "unlock");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 332");
+                se = st.getEndingState("locked", "enabled", "dependency", "coldstandby", "enableNotFailed");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 331");
-                       se = st.getEndingState("locked", "enabled", "dependency",  "coldstandby", "disableFailed");
-                               assertEquals("coldstandby,locked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 333");
+                se = st.getEndingState("locked", "enabled", "dependency", "coldstandby", "disableDependency");
+                assertEquals("coldstandby,locked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 332");
-                       se = st.getEndingState("locked", "enabled", "dependency",  "coldstandby", "enableNotFailed");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 334");
+                se = st.getEndingState("locked", "enabled", "dependency", "coldstandby", "enableNoDependency");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 333");
-                       se = st.getEndingState("locked", "enabled", "dependency",  "coldstandby", "disableDependency");
-                               assertEquals("coldstandby,locked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 335");
+                se = st.getEndingState("locked", "enabled", "dependency", "coldstandby", "promote");
+                assertEquals("coldstandby,locked,enabled,null,StandbyStatusException", makeString(se));
 
-                       logger.info("??? StateTransition testcase 334");
-                       se = st.getEndingState("locked", "enabled", "dependency",  "coldstandby", "enableNoDependency");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 336");
+                se = st.getEndingState("locked", "enabled", "dependency", "coldstandby", "demote");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 335");
-                       se = st.getEndingState("locked", "enabled", "dependency",  "coldstandby", "promote");
-                               assertEquals("coldstandby,locked,enabled,null,StandbyStatusException", makeString(se));
+                logger.info("??? StateTransition testcase 337");
+                se = st.getEndingState("locked", "enabled", "dependency", "hotstandby", "demote");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 336");
-                       se = st.getEndingState("locked", "enabled", "dependency",  "coldstandby", "demote");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 338");
+                se = st.getEndingState("locked", "enabled", "dependency", "hotstandby", "unlock");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 337");
-                       se = st.getEndingState("locked", "enabled", "dependency",  "hotstandby", "demote");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 339");
+                se = st.getEndingState("locked", "enabled", "dependency", "hotstandby", "disableFailed");
+                assertEquals("coldstandby,locked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 338");
-                       se = st.getEndingState("locked", "enabled", "dependency",  "hotstandby", "unlock");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 340");
+                se = st.getEndingState("locked", "enabled", "dependency", "hotstandby", "enableNotFailed");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 339");
-                       se = st.getEndingState("locked", "enabled", "dependency",  "hotstandby", "disableFailed");
-                               assertEquals("coldstandby,locked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 341");
+                se = st.getEndingState("locked", "enabled", "dependency", "hotstandby", "disableDependency");
+                assertEquals("coldstandby,locked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 340");
-                       se = st.getEndingState("locked", "enabled", "dependency",  "hotstandby", "enableNotFailed");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 342");
+                se = st.getEndingState("locked", "enabled", "dependency", "hotstandby", "enableNoDependency");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 341");
-                       se = st.getEndingState("locked", "enabled", "dependency",  "hotstandby", "disableDependency");
-                               assertEquals("coldstandby,locked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 343");
+                se = st.getEndingState("locked", "enabled", "dependency", "hotstandby", "promote");
+                assertEquals("coldstandby,locked,enabled,null,StandbyStatusException", makeString(se));
 
-                       logger.info("??? StateTransition testcase 342");
-                       se = st.getEndingState("locked", "enabled", "dependency",  "hotstandby", "enableNoDependency");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 344");
+                se = st.getEndingState("locked", "enabled", "dependency", "hotstandby", "demote");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 343");
-                       se = st.getEndingState("locked", "enabled", "dependency",  "hotstandby", "promote");
-                               assertEquals("coldstandby,locked,enabled,null,StandbyStatusException", makeString(se));
+                logger.info("??? StateTransition testcase 345");
+                se = st.getEndingState("locked", "enabled", "dependency", "providingservice", "demote");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 344");
-                       se = st.getEndingState("locked", "enabled", "dependency",  "hotstandby", "demote");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 346");
+                se = st.getEndingState("locked", "enabled", "dependency", "providingservice", "unlock");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 345");
-                       se = st.getEndingState("locked", "enabled", "dependency",  "providingservice", "demote");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 347");
+                se = st.getEndingState("locked", "enabled", "dependency", "providingservice", "disableFailed");
+                assertEquals("coldstandby,locked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 346");
-                       se = st.getEndingState("locked", "enabled", "dependency",  "providingservice", "unlock");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 348");
+                se = st.getEndingState("locked", "enabled", "dependency", "providingservice", "enableNotFailed");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 347");
-                       se = st.getEndingState("locked", "enabled", "dependency",  "providingservice", "disableFailed");
-                               assertEquals("coldstandby,locked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 349");
+                se = st.getEndingState("locked", "enabled", "dependency", "providingservice", "disableDependency");
+                assertEquals("coldstandby,locked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 348");
-                       se = st.getEndingState("locked", "enabled", "dependency",  "providingservice", "enableNotFailed");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 350");
+                se = st.getEndingState("locked", "enabled", "dependency", "providingservice", "enableNoDependency");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 349");
-                       se = st.getEndingState("locked", "enabled", "dependency",  "providingservice", "disableDependency");
-                               assertEquals("coldstandby,locked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 351");
+                se = st.getEndingState("locked", "enabled", "dependency", "providingservice", "promote");
+                assertEquals("coldstandby,locked,enabled,null,StandbyStatusException", makeString(se));
 
-                       logger.info("??? StateTransition testcase 350");
-                       se = st.getEndingState("locked", "enabled", "dependency",  "providingservice", "enableNoDependency");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 352");
+                se = st.getEndingState("locked", "enabled", "dependency", "providingservice", "demote");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 351");
-                       se = st.getEndingState("locked", "enabled", "dependency",  "providingservice", "promote");
-                               assertEquals("coldstandby,locked,enabled,null,StandbyStatusException", makeString(se));
+                logger.info("??? StateTransition testcase 353");
+                se = st.getEndingState("locked", "enabled", "dependency,failed", "null", "demote");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 352");
-                       se = st.getEndingState("locked", "enabled", "dependency",  "providingservice", "demote");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 354");
+                se = st.getEndingState("locked", "enabled", "dependency,failed", "null", "unlock");
+                assertEquals("null,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 353");
-                       se = st.getEndingState("locked", "enabled", "dependency,failed",  "null", "demote");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 355");
+                se = st.getEndingState("locked", "enabled", "dependency,failed", "null", "disableFailed");
+                assertEquals("null,locked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 354");
-                       se = st.getEndingState("locked", "enabled", "dependency,failed",  "null", "unlock");
-                               assertEquals("null,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 356");
+                se = st.getEndingState("locked", "enabled", "dependency,failed", "null", "enableNotFailed");
+                assertEquals("null,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 355");
-                       se = st.getEndingState("locked", "enabled", "dependency,failed",  "null", "disableFailed");
-                               assertEquals("null,locked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 357");
+                se = st.getEndingState("locked", "enabled", "dependency,failed", "null", "disableDependency");
+                assertEquals("null,locked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 356");
-                       se = st.getEndingState("locked", "enabled", "dependency,failed",  "null", "enableNotFailed");
-                               assertEquals("null,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 358");
+                se = st.getEndingState("locked", "enabled", "dependency,failed", "null", "enableNoDependency");
+                assertEquals("null,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 357");
-                       se = st.getEndingState("locked", "enabled", "dependency,failed",  "null", "disableDependency");
-                               assertEquals("null,locked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 359");
+                se = st.getEndingState("locked", "enabled", "dependency,failed", "null", "promote");
+                assertEquals("coldstandby,locked,enabled,null,StandbyStatusException", makeString(se));
 
-                       logger.info("??? StateTransition testcase 358");
-                       se = st.getEndingState("locked", "enabled", "dependency,failed",  "null", "enableNoDependency");
-                               assertEquals("null,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 360");
+                se = st.getEndingState("locked", "enabled", "dependency,failed", "null", "demote");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 359");
-                       se = st.getEndingState("locked", "enabled", "dependency,failed",  "null", "promote");
-                               assertEquals("coldstandby,locked,enabled,null,StandbyStatusException", makeString(se));
+                logger.info("??? StateTransition testcase 361");
+                se = st.getEndingState("locked", "enabled", "dependency,failed", "coldstandby", "demote");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 360");
-                       se = st.getEndingState("locked", "enabled", "dependency,failed",  "null", "demote");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 362");
+                se = st.getEndingState("locked", "enabled", "dependency,failed", "coldstandby", "unlock");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 361");
-                       se = st.getEndingState("locked", "enabled", "dependency,failed",  "coldstandby", "demote");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 363");
+                se = st.getEndingState("locked", "enabled", "dependency,failed", "coldstandby", "disableFailed");
+                assertEquals("coldstandby,locked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 362");
-                       se = st.getEndingState("locked", "enabled", "dependency,failed",  "coldstandby", "unlock");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 364");
+                se = st.getEndingState("locked", "enabled", "dependency,failed", "coldstandby", "enableNotFailed");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 363");
-                       se = st.getEndingState("locked", "enabled", "dependency,failed",  "coldstandby", "disableFailed");
-                               assertEquals("coldstandby,locked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 365");
+                se = st.getEndingState("locked", "enabled", "dependency,failed", "coldstandby", "disableDependency");
+                assertEquals("coldstandby,locked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 364");
-                       se = st.getEndingState("locked", "enabled", "dependency,failed",  "coldstandby", "enableNotFailed");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 366");
+                se = st.getEndingState("locked", "enabled", "dependency,failed", "coldstandby", "enableNoDependency");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 365");
-                       se = st.getEndingState("locked", "enabled", "dependency,failed",  "coldstandby", "disableDependency");
-                               assertEquals("coldstandby,locked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 367");
+                se = st.getEndingState("locked", "enabled", "dependency,failed", "coldstandby", "promote");
+                assertEquals("coldstandby,locked,enabled,null,StandbyStatusException", makeString(se));
 
-                       logger.info("??? StateTransition testcase 366");
-                       se = st.getEndingState("locked", "enabled", "dependency,failed",  "coldstandby", "enableNoDependency");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 368");
+                se = st.getEndingState("locked", "enabled", "dependency,failed", "coldstandby", "demote");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 367");
-                       se = st.getEndingState("locked", "enabled", "dependency,failed",  "coldstandby", "promote");
-                               assertEquals("coldstandby,locked,enabled,null,StandbyStatusException", makeString(se));
+                logger.info("??? StateTransition testcase 369");
+                se = st.getEndingState("locked", "enabled", "dependency,failed", "hotstandby", "demote");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 368");
-                       se = st.getEndingState("locked", "enabled", "dependency,failed",  "coldstandby", "demote");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 370");
+                se = st.getEndingState("locked", "enabled", "dependency,failed", "hotstandby", "unlock");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 369");
-                       se = st.getEndingState("locked", "enabled", "dependency,failed",  "hotstandby", "demote");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 371");
+                se = st.getEndingState("locked", "enabled", "dependency,failed", "hotstandby", "disableFailed");
+                assertEquals("coldstandby,locked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 370");
-                       se = st.getEndingState("locked", "enabled", "dependency,failed",  "hotstandby", "unlock");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 372");
+                se = st.getEndingState("locked", "enabled", "dependency,failed", "hotstandby", "enableNotFailed");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 371");
-                       se = st.getEndingState("locked", "enabled", "dependency,failed",  "hotstandby", "disableFailed");
-                               assertEquals("coldstandby,locked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 373");
+                se = st.getEndingState("locked", "enabled", "dependency,failed", "hotstandby", "disableDependency");
+                assertEquals("coldstandby,locked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 372");
-                       se = st.getEndingState("locked", "enabled", "dependency,failed",  "hotstandby", "enableNotFailed");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 374");
+                se = st.getEndingState("locked", "enabled", "dependency,failed", "hotstandby", "enableNoDependency");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 373");
-                       se = st.getEndingState("locked", "enabled", "dependency,failed",  "hotstandby", "disableDependency");
-                               assertEquals("coldstandby,locked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 375");
+                se = st.getEndingState("locked", "enabled", "dependency,failed", "hotstandby", "promote");
+                assertEquals("coldstandby,locked,enabled,null,StandbyStatusException", makeString(se));
 
-                       logger.info("??? StateTransition testcase 374");
-                       se = st.getEndingState("locked", "enabled", "dependency,failed",  "hotstandby", "enableNoDependency");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 376");
+                se = st.getEndingState("locked", "enabled", "dependency,failed", "hotstandby", "demote");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 375");
-                       se = st.getEndingState("locked", "enabled", "dependency,failed",  "hotstandby", "promote");
-                               assertEquals("coldstandby,locked,enabled,null,StandbyStatusException", makeString(se));
+                logger.info("??? StateTransition testcase 377");
+                se = st.getEndingState("locked", "enabled", "dependency,failed", "providingservice", "demote");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 376");
-                       se = st.getEndingState("locked", "enabled", "dependency,failed",  "hotstandby", "demote");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 378");
+                se = st.getEndingState("locked", "enabled", "dependency,failed", "providingservice", "unlock");
+                assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 377");
-                       se = st.getEndingState("locked", "enabled", "dependency,failed",  "providingservice", "demote");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 379");
+                se = st.getEndingState("locked", "enabled", "dependency,failed", "providingservice", "disableFailed");
+                assertEquals("coldstandby,locked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 378");
-                       se = st.getEndingState("locked", "enabled", "dependency,failed",  "providingservice", "unlock");
-                               assertEquals("hotstandby,unlocked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 380");
+                se = st.getEndingState("locked", "enabled", "dependency,failed", "providingservice", "enableNotFailed");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 379");
-                       se = st.getEndingState("locked", "enabled", "dependency,failed",  "providingservice", "disableFailed");
-                               assertEquals("coldstandby,locked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 381");
+                se = st.getEndingState("locked", "enabled", "dependency,failed", "providingservice",
+                        "disableDependency");
+                assertEquals("coldstandby,locked,disabled,dependency,", makeString(se));
+
+                logger.info("??? StateTransition testcase 382");
+                se = st.getEndingState("locked", "enabled", "dependency,failed", "providingservice",
+                        "enableNoDependency");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 380");
-                       se = st.getEndingState("locked", "enabled", "dependency,failed",  "providingservice", "enableNotFailed");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 383");
+                se = st.getEndingState("locked", "enabled", "dependency,failed", "providingservice", "promote");
+                assertEquals("coldstandby,locked,enabled,null,StandbyStatusException", makeString(se));
 
-                       logger.info("??? StateTransition testcase 381");
-                       se = st.getEndingState("locked", "enabled", "dependency,failed",  "providingservice", "disableDependency");
-                               assertEquals("coldstandby,locked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 384");
+                se = st.getEndingState("locked", "enabled", "dependency,failed", "providingservice", "demote");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 382");
-                       se = st.getEndingState("locked", "enabled", "dependency,failed",  "providingservice", "enableNoDependency");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 385");
+                se = st.getEndingState("locked", "disabled", "null", "null", "demote");
+                assertEquals("coldstandby,locked,disabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 383");
-                       se = st.getEndingState("locked", "enabled", "dependency,failed",  "providingservice", "promote");
-                               assertEquals("coldstandby,locked,enabled,null,StandbyStatusException", makeString(se));
+                logger.info("??? StateTransition testcase 386");
+                se = st.getEndingState("locked", "disabled", "null", "null", "unlock");
+                assertEquals("null,unlocked,disabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 384");
-                       se = st.getEndingState("locked", "enabled", "dependency,failed",  "providingservice", "demote");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 387");
+                se = st.getEndingState("locked", "disabled", "null", "null", "disableFailed");
+                assertEquals("null,locked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 385");
-                       se = st.getEndingState("locked", "disabled", "null",  "null", "demote");
-                               assertEquals("coldstandby,locked,disabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 388");
+                se = st.getEndingState("locked", "disabled", "null", "null", "enableNotFailed");
+                assertEquals("null,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 386");
-                       se = st.getEndingState("locked", "disabled", "null",  "null", "unlock");
-                               assertEquals("null,unlocked,disabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 389");
+                se = st.getEndingState("locked", "disabled", "null", "null", "disableDependency");
+                assertEquals("null,locked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 387");
-                       se = st.getEndingState("locked", "disabled", "null",  "null", "disableFailed");
-                               assertEquals("null,locked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 390");
+                se = st.getEndingState("locked", "disabled", "null", "null", "enableNoDependency");
+                assertEquals("null,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 388");
-                       se = st.getEndingState("locked", "disabled", "null",  "null", "enableNotFailed");
-                               assertEquals("null,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 391");
+                se = st.getEndingState("locked", "disabled", "null", "null", "promote");
+                assertEquals("coldstandby,locked,disabled,null,StandbyStatusException", makeString(se));
 
-                       logger.info("??? StateTransition testcase 389");
-                       se = st.getEndingState("locked", "disabled", "null",  "null", "disableDependency");
-                               assertEquals("null,locked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 392");
+                se = st.getEndingState("locked", "disabled", "null", "null", "demote");
+                assertEquals("coldstandby,locked,disabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 390");
-                       se = st.getEndingState("locked", "disabled", "null",  "null", "enableNoDependency");
-                               assertEquals("null,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 393");
+                se = st.getEndingState("locked", "disabled", "null", "coldstandby", "demote");
+                assertEquals("coldstandby,locked,disabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 391");
-                       se = st.getEndingState("locked", "disabled", "null",  "null", "promote");
-                               assertEquals("coldstandby,locked,disabled,null,StandbyStatusException", makeString(se));
+                logger.info("??? StateTransition testcase 394");
+                se = st.getEndingState("locked", "disabled", "null", "coldstandby", "unlock");
+                assertEquals("coldstandby,unlocked,disabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 392");
-                       se = st.getEndingState("locked", "disabled", "null",  "null", "demote");
-                               assertEquals("coldstandby,locked,disabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 395");
+                se = st.getEndingState("locked", "disabled", "null", "coldstandby", "disableFailed");
+                assertEquals("coldstandby,locked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 393");
-                       se = st.getEndingState("locked", "disabled", "null",  "coldstandby", "demote");
-                               assertEquals("coldstandby,locked,disabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 396");
+                se = st.getEndingState("locked", "disabled", "null", "coldstandby", "enableNotFailed");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 394");
-                       se = st.getEndingState("locked", "disabled", "null",  "coldstandby", "unlock");
-                               assertEquals("coldstandby,unlocked,disabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 397");
+                se = st.getEndingState("locked", "disabled", "null", "coldstandby", "disableDependency");
+                assertEquals("coldstandby,locked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 395");
-                       se = st.getEndingState("locked", "disabled", "null",  "coldstandby", "disableFailed");
-                               assertEquals("coldstandby,locked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 398");
+                se = st.getEndingState("locked", "disabled", "null", "coldstandby", "enableNoDependency");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 396");
-                       se = st.getEndingState("locked", "disabled", "null",  "coldstandby", "enableNotFailed");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 399");
+                se = st.getEndingState("locked", "disabled", "null", "coldstandby", "promote");
+                assertEquals("coldstandby,locked,disabled,null,StandbyStatusException", makeString(se));
 
-                       logger.info("??? StateTransition testcase 397");
-                       se = st.getEndingState("locked", "disabled", "null",  "coldstandby", "disableDependency");
-                               assertEquals("coldstandby,locked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 400");
+                se = st.getEndingState("locked", "disabled", "null", "coldstandby", "demote");
+                assertEquals("coldstandby,locked,disabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 398");
-                       se = st.getEndingState("locked", "disabled", "null",  "coldstandby", "enableNoDependency");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 401");
+                se = st.getEndingState("locked", "disabled", "null", "hotstandby", "demote");
+                assertEquals("coldstandby,locked,disabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 399");
-                       se = st.getEndingState("locked", "disabled", "null",  "coldstandby", "promote");
-                               assertEquals("coldstandby,locked,disabled,null,StandbyStatusException", makeString(se));
+                logger.info("??? StateTransition testcase 402");
+                se = st.getEndingState("locked", "disabled", "null", "hotstandby", "unlock");
+                assertEquals("coldstandby,unlocked,disabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 400");
-                       se = st.getEndingState("locked", "disabled", "null",  "coldstandby", "demote");
-                               assertEquals("coldstandby,locked,disabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 403");
+                se = st.getEndingState("locked", "disabled", "null", "hotstandby", "disableFailed");
+                assertEquals("coldstandby,locked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 401");
-                       se = st.getEndingState("locked", "disabled", "null",  "hotstandby", "demote");
-                               assertEquals("coldstandby,locked,disabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 404");
+                se = st.getEndingState("locked", "disabled", "null", "hotstandby", "enableNotFailed");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 402");
-                       se = st.getEndingState("locked", "disabled", "null",  "hotstandby", "unlock");
-                               assertEquals("coldstandby,unlocked,disabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 405");
+                se = st.getEndingState("locked", "disabled", "null", "hotstandby", "disableDependency");
+                assertEquals("coldstandby,locked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 403");
-                       se = st.getEndingState("locked", "disabled", "null",  "hotstandby", "disableFailed");
-                               assertEquals("coldstandby,locked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 406");
+                se = st.getEndingState("locked", "disabled", "null", "hotstandby", "enableNoDependency");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 404");
-                       se = st.getEndingState("locked", "disabled", "null",  "hotstandby", "enableNotFailed");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 407");
+                se = st.getEndingState("locked", "disabled", "null", "hotstandby", "promote");
+                assertEquals("coldstandby,locked,disabled,null,StandbyStatusException", makeString(se));
 
-                       logger.info("??? StateTransition testcase 405");
-                       se = st.getEndingState("locked", "disabled", "null",  "hotstandby", "disableDependency");
-                               assertEquals("coldstandby,locked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 408");
+                se = st.getEndingState("locked", "disabled", "null", "hotstandby", "demote");
+                assertEquals("coldstandby,locked,disabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 406");
-                       se = st.getEndingState("locked", "disabled", "null",  "hotstandby", "enableNoDependency");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 409");
+                se = st.getEndingState("locked", "disabled", "null", "providingservice", "demote");
+                assertEquals("coldstandby,locked,disabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 407");
-                       se = st.getEndingState("locked", "disabled", "null",  "hotstandby", "promote");
-                               assertEquals("coldstandby,locked,disabled,null,StandbyStatusException", makeString(se));
+                logger.info("??? StateTransition testcase 410");
+                se = st.getEndingState("locked", "disabled", "null", "providingservice", "unlock");
+                assertEquals("coldstandby,unlocked,disabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 408");
-                       se = st.getEndingState("locked", "disabled", "null",  "hotstandby", "demote");
-                               assertEquals("coldstandby,locked,disabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 411");
+                se = st.getEndingState("locked", "disabled", "null", "providingservice", "disableFailed");
+                assertEquals("coldstandby,locked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 409");
-                       se = st.getEndingState("locked", "disabled", "null",  "providingservice", "demote");
-                               assertEquals("coldstandby,locked,disabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 412");
+                se = st.getEndingState("locked", "disabled", "null", "providingservice", "enableNotFailed");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 410");
-                       se = st.getEndingState("locked", "disabled", "null",  "providingservice", "unlock");
-                               assertEquals("coldstandby,unlocked,disabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 413");
+                se = st.getEndingState("locked", "disabled", "null", "providingservice", "disableDependency");
+                assertEquals("coldstandby,locked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 411");
-                       se = st.getEndingState("locked", "disabled", "null",  "providingservice", "disableFailed");
-                               assertEquals("coldstandby,locked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 414");
+                se = st.getEndingState("locked", "disabled", "null", "providingservice", "enableNoDependency");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 412");
-                       se = st.getEndingState("locked", "disabled", "null",  "providingservice", "enableNotFailed");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 415");
+                se = st.getEndingState("locked", "disabled", "null", "providingservice", "promote");
+                assertEquals("coldstandby,locked,disabled,null,StandbyStatusException", makeString(se));
 
-                       logger.info("??? StateTransition testcase 413");
-                       se = st.getEndingState("locked", "disabled", "null",  "providingservice", "disableDependency");
-                               assertEquals("coldstandby,locked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 416");
+                se = st.getEndingState("locked", "disabled", "null", "providingservice", "demote");
+                assertEquals("coldstandby,locked,disabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 414");
-                       se = st.getEndingState("locked", "disabled", "null",  "providingservice", "enableNoDependency");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 417");
+                se = st.getEndingState("locked", "disabled", "failed", "null", "demote");
+                assertEquals("coldstandby,locked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 415");
-                       se = st.getEndingState("locked", "disabled", "null",  "providingservice", "promote");
-                               assertEquals("coldstandby,locked,disabled,null,StandbyStatusException", makeString(se));
+                logger.info("??? StateTransition testcase 418");
+                se = st.getEndingState("locked", "disabled", "failed", "null", "unlock");
+                assertEquals("null,unlocked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 416");
-                       se = st.getEndingState("locked", "disabled", "null",  "providingservice", "demote");
-                               assertEquals("coldstandby,locked,disabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 419");
+                se = st.getEndingState("locked", "disabled", "failed", "null", "disableFailed");
+                assertEquals("null,locked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 417");
-                       se = st.getEndingState("locked", "disabled", "failed",  "null", "demote");
-                               assertEquals("coldstandby,locked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 420");
+                se = st.getEndingState("locked", "disabled", "failed", "null", "enableNotFailed");
+                assertEquals("null,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 418");
-                       se = st.getEndingState("locked", "disabled", "failed",  "null", "unlock");
-                               assertEquals("null,unlocked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 421");
+                se = st.getEndingState("locked", "disabled", "failed", "null", "disableDependency");
+                assertEquals("null,locked,disabled,dependency,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 419");
-                       se = st.getEndingState("locked", "disabled", "failed",  "null", "disableFailed");
-                               assertEquals("null,locked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 422");
+                se = st.getEndingState("locked", "disabled", "failed", "null", "enableNoDependency");
+                assertEquals("null,locked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 420");
-                       se = st.getEndingState("locked", "disabled", "failed",  "null", "enableNotFailed");
-                               assertEquals("null,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 423");
+                se = st.getEndingState("locked", "disabled", "failed", "null", "promote");
+                assertEquals("coldstandby,locked,disabled,failed,StandbyStatusException", makeString(se));
 
-                       logger.info("??? StateTransition testcase 421");
-                       se = st.getEndingState("locked", "disabled", "failed",  "null", "disableDependency");
-                               assertEquals("null,locked,disabled,dependency,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 424");
+                se = st.getEndingState("locked", "disabled", "failed", "null", "demote");
+                assertEquals("coldstandby,locked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 422");
-                       se = st.getEndingState("locked", "disabled", "failed",  "null", "enableNoDependency");
-                               assertEquals("null,locked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 425");
+                se = st.getEndingState("locked", "disabled", "failed", "coldstandby", "demote");
+                assertEquals("coldstandby,locked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 423");
-                       se = st.getEndingState("locked", "disabled", "failed",  "null", "promote");
-                               assertEquals("coldstandby,locked,disabled,failed,StandbyStatusException", makeString(se));
+                logger.info("??? StateTransition testcase 426");
+                se = st.getEndingState("locked", "disabled", "failed", "coldstandby", "unlock");
+                assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 424");
-                       se = st.getEndingState("locked", "disabled", "failed",  "null", "demote");
-                               assertEquals("coldstandby,locked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 427");
+                se = st.getEndingState("locked", "disabled", "failed", "coldstandby", "disableFailed");
+                assertEquals("coldstandby,locked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 425");
-                       se = st.getEndingState("locked", "disabled", "failed",  "coldstandby", "demote");
-                               assertEquals("coldstandby,locked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 428");
+                se = st.getEndingState("locked", "disabled", "failed", "coldstandby", "enableNotFailed");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 426");
-                       se = st.getEndingState("locked", "disabled", "failed",  "coldstandby", "unlock");
-                               assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 429");
+                se = st.getEndingState("locked", "disabled", "failed", "coldstandby", "disableDependency");
+                assertEquals("coldstandby,locked,disabled,dependency,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 427");
-                       se = st.getEndingState("locked", "disabled", "failed",  "coldstandby", "disableFailed");
-                               assertEquals("coldstandby,locked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 430");
+                se = st.getEndingState("locked", "disabled", "failed", "coldstandby", "enableNoDependency");
+                assertEquals("coldstandby,locked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 428");
-                       se = st.getEndingState("locked", "disabled", "failed",  "coldstandby", "enableNotFailed");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 431");
+                se = st.getEndingState("locked", "disabled", "failed", "coldstandby", "promote");
+                assertEquals("coldstandby,locked,disabled,failed,StandbyStatusException", makeString(se));
 
-                       logger.info("??? StateTransition testcase 429");
-                       se = st.getEndingState("locked", "disabled", "failed",  "coldstandby", "disableDependency");
-                               assertEquals("coldstandby,locked,disabled,dependency,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 432");
+                se = st.getEndingState("locked", "disabled", "failed", "coldstandby", "demote");
+                assertEquals("coldstandby,locked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 430");
-                       se = st.getEndingState("locked", "disabled", "failed",  "coldstandby", "enableNoDependency");
-                               assertEquals("coldstandby,locked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 433");
+                se = st.getEndingState("locked", "disabled", "failed", "hotstandby", "demote");
+                assertEquals("coldstandby,locked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 431");
-                       se = st.getEndingState("locked", "disabled", "failed",  "coldstandby", "promote");
-                               assertEquals("coldstandby,locked,disabled,failed,StandbyStatusException", makeString(se));
+                logger.info("??? StateTransition testcase 434");
+                se = st.getEndingState("locked", "disabled", "failed", "hotstandby", "unlock");
+                assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 432");
-                       se = st.getEndingState("locked", "disabled", "failed",  "coldstandby", "demote");
-                               assertEquals("coldstandby,locked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 435");
+                se = st.getEndingState("locked", "disabled", "failed", "hotstandby", "disableFailed");
+                assertEquals("coldstandby,locked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 433");
-                       se = st.getEndingState("locked", "disabled", "failed",  "hotstandby", "demote");
-                               assertEquals("coldstandby,locked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 436");
+                se = st.getEndingState("locked", "disabled", "failed", "hotstandby", "enableNotFailed");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 434");
-                       se = st.getEndingState("locked", "disabled", "failed",  "hotstandby", "unlock");
-                               assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 437");
+                se = st.getEndingState("locked", "disabled", "failed", "hotstandby", "disableDependency");
+                assertEquals("coldstandby,locked,disabled,dependency,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 435");
-                       se = st.getEndingState("locked", "disabled", "failed",  "hotstandby", "disableFailed");
-                               assertEquals("coldstandby,locked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 438");
+                se = st.getEndingState("locked", "disabled", "failed", "hotstandby", "enableNoDependency");
+                assertEquals("coldstandby,locked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 436");
-                       se = st.getEndingState("locked", "disabled", "failed",  "hotstandby", "enableNotFailed");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 439");
+                se = st.getEndingState("locked", "disabled", "failed", "hotstandby", "promote");
+                assertEquals("coldstandby,locked,disabled,failed,StandbyStatusException", makeString(se));
 
-                       logger.info("??? StateTransition testcase 437");
-                       se = st.getEndingState("locked", "disabled", "failed",  "hotstandby", "disableDependency");
-                               assertEquals("coldstandby,locked,disabled,dependency,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 440");
+                se = st.getEndingState("locked", "disabled", "failed", "hotstandby", "demote");
+                assertEquals("coldstandby,locked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 438");
-                       se = st.getEndingState("locked", "disabled", "failed",  "hotstandby", "enableNoDependency");
-                               assertEquals("coldstandby,locked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 441");
+                se = st.getEndingState("locked", "disabled", "failed", "providingservice", "demote");
+                assertEquals("coldstandby,locked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 439");
-                       se = st.getEndingState("locked", "disabled", "failed",  "hotstandby", "promote");
-                               assertEquals("coldstandby,locked,disabled,failed,StandbyStatusException", makeString(se));
+                logger.info("??? StateTransition testcase 442");
+                se = st.getEndingState("locked", "disabled", "failed", "providingservice", "unlock");
+                assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 440");
-                       se = st.getEndingState("locked", "disabled", "failed",  "hotstandby", "demote");
-                               assertEquals("coldstandby,locked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 443");
+                se = st.getEndingState("locked", "disabled", "failed", "providingservice", "disableFailed");
+                assertEquals("coldstandby,locked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 441");
-                       se = st.getEndingState("locked", "disabled", "failed",  "providingservice", "demote");
-                               assertEquals("coldstandby,locked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 444");
+                se = st.getEndingState("locked", "disabled", "failed", "providingservice", "enableNotFailed");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 442");
-                       se = st.getEndingState("locked", "disabled", "failed",  "providingservice", "unlock");
-                               assertEquals("coldstandby,unlocked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 445");
+                se = st.getEndingState("locked", "disabled", "failed", "providingservice", "disableDependency");
+                assertEquals("coldstandby,locked,disabled,dependency,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 443");
-                       se = st.getEndingState("locked", "disabled", "failed",  "providingservice", "disableFailed");
-                               assertEquals("coldstandby,locked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 446");
+                se = st.getEndingState("locked", "disabled", "failed", "providingservice", "enableNoDependency");
+                assertEquals("coldstandby,locked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 444");
-                       se = st.getEndingState("locked", "disabled", "failed",  "providingservice", "enableNotFailed");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 447");
+                se = st.getEndingState("locked", "disabled", "failed", "providingservice", "promote");
+                assertEquals("coldstandby,locked,disabled,failed,StandbyStatusException", makeString(se));
 
-                       logger.info("??? StateTransition testcase 445");
-                       se = st.getEndingState("locked", "disabled", "failed",  "providingservice", "disableDependency");
-                               assertEquals("coldstandby,locked,disabled,dependency,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 448");
+                se = st.getEndingState("locked", "disabled", "failed", "providingservice", "demote");
+                assertEquals("coldstandby,locked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 446");
-                       se = st.getEndingState("locked", "disabled", "failed",  "providingservice", "enableNoDependency");
-                               assertEquals("coldstandby,locked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 449");
+                se = st.getEndingState("locked", "disabled", "dependency", "null", "demote");
+                assertEquals("coldstandby,locked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 447");
-                       se = st.getEndingState("locked", "disabled", "failed",  "providingservice", "promote");
-                               assertEquals("coldstandby,locked,disabled,failed,StandbyStatusException", makeString(se));
+                logger.info("??? StateTransition testcase 450");
+                se = st.getEndingState("locked", "disabled", "dependency", "null", "unlock");
+                assertEquals("null,unlocked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 448");
-                       se = st.getEndingState("locked", "disabled", "failed",  "providingservice", "demote");
-                               assertEquals("coldstandby,locked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 451");
+                se = st.getEndingState("locked", "disabled", "dependency", "null", "disableFailed");
+                assertEquals("null,locked,disabled,dependency,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 449");
-                       se = st.getEndingState("locked", "disabled", "dependency",  "null", "demote");
-                               assertEquals("coldstandby,locked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 452");
+                se = st.getEndingState("locked", "disabled", "dependency", "null", "enableNotFailed");
+                assertEquals("null,locked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 450");
-                       se = st.getEndingState("locked", "disabled", "dependency",  "null", "unlock");
-                               assertEquals("null,unlocked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 453");
+                se = st.getEndingState("locked", "disabled", "dependency", "null", "disableDependency");
+                assertEquals("null,locked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 451");
-                       se = st.getEndingState("locked", "disabled", "dependency",  "null", "disableFailed");
-                               assertEquals("null,locked,disabled,dependency,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 454");
+                se = st.getEndingState("locked", "disabled", "dependency", "null", "enableNoDependency");
+                assertEquals("null,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 452");
-                       se = st.getEndingState("locked", "disabled", "dependency",  "null", "enableNotFailed");
-                               assertEquals("null,locked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 455");
+                se = st.getEndingState("locked", "disabled", "dependency", "null", "promote");
+                assertEquals("coldstandby,locked,disabled,dependency,StandbyStatusException", makeString(se));
 
-                       logger.info("??? StateTransition testcase 453");
-                       se = st.getEndingState("locked", "disabled", "dependency",  "null", "disableDependency");
-                               assertEquals("null,locked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 456");
+                se = st.getEndingState("locked", "disabled", "dependency", "null", "demote");
+                assertEquals("coldstandby,locked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 454");
-                       se = st.getEndingState("locked", "disabled", "dependency",  "null", "enableNoDependency");
-                               assertEquals("null,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 457");
+                se = st.getEndingState("locked", "disabled", "dependency", "coldstandby", "demote");
+                assertEquals("coldstandby,locked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 455");
-                       se = st.getEndingState("locked", "disabled", "dependency",  "null", "promote");
-                               assertEquals("coldstandby,locked,disabled,dependency,StandbyStatusException", makeString(se));
+                logger.info("??? StateTransition testcase 458");
+                se = st.getEndingState("locked", "disabled", "dependency", "coldstandby", "unlock");
+                assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 456");
-                       se = st.getEndingState("locked", "disabled", "dependency",  "null", "demote");
-                               assertEquals("coldstandby,locked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 459");
+                se = st.getEndingState("locked", "disabled", "dependency", "coldstandby", "disableFailed");
+                assertEquals("coldstandby,locked,disabled,dependency,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 457");
-                       se = st.getEndingState("locked", "disabled", "dependency",  "coldstandby", "demote");
-                               assertEquals("coldstandby,locked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 460");
+                se = st.getEndingState("locked", "disabled", "dependency", "coldstandby", "enableNotFailed");
+                assertEquals("coldstandby,locked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 458");
-                       se = st.getEndingState("locked", "disabled", "dependency",  "coldstandby", "unlock");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 461");
+                se = st.getEndingState("locked", "disabled", "dependency", "coldstandby", "disableDependency");
+                assertEquals("coldstandby,locked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 459");
-                       se = st.getEndingState("locked", "disabled", "dependency",  "coldstandby", "disableFailed");
-                               assertEquals("coldstandby,locked,disabled,dependency,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 462");
+                se = st.getEndingState("locked", "disabled", "dependency", "coldstandby", "enableNoDependency");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 460");
-                       se = st.getEndingState("locked", "disabled", "dependency",  "coldstandby", "enableNotFailed");
-                               assertEquals("coldstandby,locked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 463");
+                se = st.getEndingState("locked", "disabled", "dependency", "coldstandby", "promote");
+                assertEquals("coldstandby,locked,disabled,dependency,StandbyStatusException", makeString(se));
 
-                       logger.info("??? StateTransition testcase 461");
-                       se = st.getEndingState("locked", "disabled", "dependency",  "coldstandby", "disableDependency");
-                               assertEquals("coldstandby,locked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 464");
+                se = st.getEndingState("locked", "disabled", "dependency", "coldstandby", "demote");
+                assertEquals("coldstandby,locked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 462");
-                       se = st.getEndingState("locked", "disabled", "dependency",  "coldstandby", "enableNoDependency");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 465");
+                se = st.getEndingState("locked", "disabled", "dependency", "hotstandby", "demote");
+                assertEquals("coldstandby,locked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 463");
-                       se = st.getEndingState("locked", "disabled", "dependency",  "coldstandby", "promote");
-                               assertEquals("coldstandby,locked,disabled,dependency,StandbyStatusException", makeString(se));
+                logger.info("??? StateTransition testcase 466");
+                se = st.getEndingState("locked", "disabled", "dependency", "hotstandby", "unlock");
+                assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 464");
-                       se = st.getEndingState("locked", "disabled", "dependency",  "coldstandby", "demote");
-                               assertEquals("coldstandby,locked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 467");
+                se = st.getEndingState("locked", "disabled", "dependency", "hotstandby", "disableFailed");
+                assertEquals("coldstandby,locked,disabled,dependency,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 465");
-                       se = st.getEndingState("locked", "disabled", "dependency",  "hotstandby", "demote");
-                               assertEquals("coldstandby,locked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 468");
+                se = st.getEndingState("locked", "disabled", "dependency", "hotstandby", "enableNotFailed");
+                assertEquals("coldstandby,locked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 466");
-                       se = st.getEndingState("locked", "disabled", "dependency",  "hotstandby", "unlock");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 469");
+                se = st.getEndingState("locked", "disabled", "dependency", "hotstandby", "disableDependency");
+                assertEquals("coldstandby,locked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 467");
-                       se = st.getEndingState("locked", "disabled", "dependency",  "hotstandby", "disableFailed");
-                               assertEquals("coldstandby,locked,disabled,dependency,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 470");
+                se = st.getEndingState("locked", "disabled", "dependency", "hotstandby", "enableNoDependency");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 468");
-                       se = st.getEndingState("locked", "disabled", "dependency",  "hotstandby", "enableNotFailed");
-                               assertEquals("coldstandby,locked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 471");
+                se = st.getEndingState("locked", "disabled", "dependency", "hotstandby", "promote");
+                assertEquals("coldstandby,locked,disabled,dependency,StandbyStatusException", makeString(se));
 
-                       logger.info("??? StateTransition testcase 469");
-                       se = st.getEndingState("locked", "disabled", "dependency",  "hotstandby", "disableDependency");
-                               assertEquals("coldstandby,locked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 472");
+                se = st.getEndingState("locked", "disabled", "dependency", "hotstandby", "demote");
+                assertEquals("coldstandby,locked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 470");
-                       se = st.getEndingState("locked", "disabled", "dependency",  "hotstandby", "enableNoDependency");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 473");
+                se = st.getEndingState("locked", "disabled", "dependency", "providingservice", "demote");
+                assertEquals("coldstandby,locked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 471");
-                       se = st.getEndingState("locked", "disabled", "dependency",  "hotstandby", "promote");
-                               assertEquals("coldstandby,locked,disabled,dependency,StandbyStatusException", makeString(se));
+                logger.info("??? StateTransition testcase 474");
+                se = st.getEndingState("locked", "disabled", "dependency", "providingservice", "unlock");
+                assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 472");
-                       se = st.getEndingState("locked", "disabled", "dependency",  "hotstandby", "demote");
-                               assertEquals("coldstandby,locked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 475");
+                se = st.getEndingState("locked", "disabled", "dependency", "providingservice", "disableFailed");
+                assertEquals("coldstandby,locked,disabled,dependency,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 473");
-                       se = st.getEndingState("locked", "disabled", "dependency",  "providingservice", "demote");
-                               assertEquals("coldstandby,locked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 476");
+                se = st.getEndingState("locked", "disabled", "dependency", "providingservice", "enableNotFailed");
+                assertEquals("coldstandby,locked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 474");
-                       se = st.getEndingState("locked", "disabled", "dependency",  "providingservice", "unlock");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 477");
+                se = st.getEndingState("locked", "disabled", "dependency", "providingservice", "disableDependency");
+                assertEquals("coldstandby,locked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 475");
-                       se = st.getEndingState("locked", "disabled", "dependency",  "providingservice", "disableFailed");
-                               assertEquals("coldstandby,locked,disabled,dependency,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 478");
+                se = st.getEndingState("locked", "disabled", "dependency", "providingservice", "enableNoDependency");
+                assertEquals("coldstandby,locked,enabled,null,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 476");
-                       se = st.getEndingState("locked", "disabled", "dependency",  "providingservice", "enableNotFailed");
-                               assertEquals("coldstandby,locked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 479");
+                se = st.getEndingState("locked", "disabled", "dependency", "providingservice", "promote");
+                assertEquals("coldstandby,locked,disabled,dependency,StandbyStatusException", makeString(se));
 
-                       logger.info("??? StateTransition testcase 477");
-                       se = st.getEndingState("locked", "disabled", "dependency",  "providingservice", "disableDependency");
-                               assertEquals("coldstandby,locked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 480");
+                se = st.getEndingState("locked", "disabled", "dependency", "providingservice", "demote");
+                assertEquals("coldstandby,locked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 478");
-                       se = st.getEndingState("locked", "disabled", "dependency",  "providingservice", "enableNoDependency");
-                               assertEquals("coldstandby,locked,enabled,null,", makeString(se));
+                logger.info("??? StateTransition testcase 481");
+                se = st.getEndingState("locked", "disabled", "dependency,failed", "null", "demote");
+                assertEquals("coldstandby,locked,disabled,dependency,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 479");
-                       se = st.getEndingState("locked", "disabled", "dependency",  "providingservice", "promote");
-                               assertEquals("coldstandby,locked,disabled,dependency,StandbyStatusException", makeString(se));
+                logger.info("??? StateTransition testcase 482");
+                se = st.getEndingState("locked", "disabled", "dependency,failed", "null", "unlock");
+                assertEquals("null,unlocked,disabled,dependency,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 480");
-                       se = st.getEndingState("locked", "disabled", "dependency",  "providingservice", "demote");
-                               assertEquals("coldstandby,locked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 483");
+                se = st.getEndingState("locked", "disabled", "dependency,failed", "null", "disableFailed");
+                assertEquals("null,locked,disabled,dependency,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 481");
-                       se = st.getEndingState("locked", "disabled", "dependency,failed",  "null", "demote");
-                               assertEquals("coldstandby,locked,disabled,dependency,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 484");
+                se = st.getEndingState("locked", "disabled", "dependency,failed", "null", "enableNotFailed");
+                assertEquals("null,locked,disabled,dependency,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 482");
-                       se = st.getEndingState("locked", "disabled", "dependency,failed",  "null", "unlock");
-                               assertEquals("null,unlocked,disabled,dependency,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 485");
+                se = st.getEndingState("locked", "disabled", "dependency,failed", "null", "disableDependency");
+                assertEquals("null,locked,disabled,dependency,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 483");
-                       se = st.getEndingState("locked", "disabled", "dependency,failed",  "null", "disableFailed");
-                               assertEquals("null,locked,disabled,dependency,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 486");
+                se = st.getEndingState("locked", "disabled", "dependency,failed", "null", "enableNoDependency");
+                assertEquals("null,locked,disabled,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 484");
-                       se = st.getEndingState("locked", "disabled", "dependency,failed",  "null", "enableNotFailed");
-                               assertEquals("null,locked,disabled,dependency,", makeString(se));
+                logger.info("??? StateTransition testcase 487");
+                se = st.getEndingState("locked", "disabled", "dependency,failed", "null", "promote");
+                assertEquals("coldstandby,locked,disabled,dependency,failed,StandbyStatusException", makeString(se));
 
-                       logger.info("??? StateTransition testcase 485");
-                       se = st.getEndingState("locked", "disabled", "dependency,failed",  "null", "disableDependency");
-                               assertEquals("null,locked,disabled,dependency,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 488");
+                se = st.getEndingState("locked", "disabled", "dependency,failed", "null", "demote");
+                assertEquals("coldstandby,locked,disabled,dependency,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 486");
-                       se = st.getEndingState("locked", "disabled", "dependency,failed",  "null", "enableNoDependency");
-                               assertEquals("null,locked,disabled,failed,", makeString(se));
+                logger.info("??? StateTransition testcase 489");
+                se = st.getEndingState("locked", "disabled", "dependency,failed", "coldstandby", "demote");
+                assertEquals("coldstandby,locked,disabled,dependency,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 487");
-                       se = st.getEndingState("locked", "disabled", "dependency,failed",  "null", "promote");
-                               assertEquals("coldstandby,locked,disabled,dependency,failed,StandbyStatusException", makeString(se));
+                logger.info("??? StateTransition testcase 490");
+                se = st.getEndingState("locked", "disabled", "dependency,failed", "coldstandby", "unlock");
+                assertEquals("coldstandby,unlocked,disabled,dependency,failed,", makeString(se));
+
+                logger.info("??? StateTransition testcase 491");
+                se = st.getEndingState("locked", "disabled", "dependency,failed", "coldstandby", "disableFailed");
+                assertEquals("coldstandby,locked,disabled,dependency,failed,", makeString(se));
 
-                       logger.info("??? StateTransition testcase 488");
-                       se = st.getEndingState("locked", "disabled", "dependency,failed",  "null", "demote");
-                               assertEquals("coldstandby,locked,disabled,dependency,failed,", makeString(se));
-
-                       logger.info("??? StateTransition testcase 489");
-                       se = st.getEndingState("locked", "disabled", "dependency,failed",  "coldstandby", "demote");
-                               assertEquals("coldstandby,locked,disabled,dependency,failed,", makeString(se));
-
-                       logger.info("??? StateTransition testcase 490");
-                       se = st.getEndingState("locked", "disabled", "dependency,failed",  "coldstandby", "unlock");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,failed,", makeString(se));
-
-                       logger.info("??? StateTransition testcase 491");
-                       se = st.getEndingState("locked", "disabled", "dependency,failed",  "coldstandby", "disableFailed");
-                               assertEquals("coldstandby,locked,disabled,dependency,failed,", makeString(se));
-
-                       logger.info("??? StateTransition testcase 492");
-                       se = st.getEndingState("locked", "disabled", "dependency,failed",  "coldstandby", "enableNotFailed");
-                               assertEquals("coldstandby,locked,disabled,dependency,", makeString(se));
-
-                       logger.info("??? StateTransition testcase 493");
-                       se = st.getEndingState("locked", "disabled", "dependency,failed",  "coldstandby", "disableDependency");
-                               assertEquals("coldstandby,locked,disabled,dependency,failed,", makeString(se));
-
-                       logger.info("??? StateTransition testcase 494");
-                       se = st.getEndingState("locked", "disabled", "dependency,failed",  "coldstandby", "enableNoDependency");
-                               assertEquals("coldstandby,locked,disabled,failed,", makeString(se));
-
-                       logger.info("??? StateTransition testcase 495");
-                       se = st.getEndingState("locked", "disabled", "dependency,failed",  "coldstandby", "promote");
-                               assertEquals("coldstandby,locked,disabled,dependency,failed,StandbyStatusException", makeString(se));
-
-                       logger.info("??? StateTransition testcase 496");
-                       se = st.getEndingState("locked", "disabled", "dependency,failed",  "coldstandby", "demote");
-                               assertEquals("coldstandby,locked,disabled,dependency,failed,", makeString(se));
-
-                       logger.info("??? StateTransition testcase 497");
-                       se = st.getEndingState("locked", "disabled", "dependency,failed",  "hotstandby", "demote");
-                               assertEquals("coldstandby,locked,disabled,dependency,failed,", makeString(se));
-
-                       logger.info("??? StateTransition testcase 498");
-                       se = st.getEndingState("locked", "disabled", "dependency,failed",  "hotstandby", "unlock");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,failed,", makeString(se));
-
-                       logger.info("??? StateTransition testcase 499");
-                       se = st.getEndingState("locked", "disabled", "dependency,failed",  "hotstandby", "disableFailed");
-                               assertEquals("coldstandby,locked,disabled,dependency,failed,", makeString(se));
-
-                       logger.info("??? StateTransition testcase 500");
-                       se = st.getEndingState("locked", "disabled", "dependency,failed",  "hotstandby", "enableNotFailed");
-                               assertEquals("coldstandby,locked,disabled,dependency,", makeString(se));
-
-                       logger.info("??? StateTransition testcase 501");
-                       se = st.getEndingState("locked", "disabled", "dependency,failed",  "hotstandby", "disableDependency");
-                               assertEquals("coldstandby,locked,disabled,dependency,failed,", makeString(se));
-
-                       logger.info("??? StateTransition testcase 502");
-                       se = st.getEndingState("locked", "disabled", "dependency,failed",  "hotstandby", "enableNoDependency");
-                               assertEquals("coldstandby,locked,disabled,failed,", makeString(se));
-
-                       logger.info("??? StateTransition testcase 503");
-                       se = st.getEndingState("locked", "disabled", "dependency,failed",  "hotstandby", "promote");
-                               assertEquals("coldstandby,locked,disabled,dependency,failed,StandbyStatusException", makeString(se));
-
-                       logger.info("??? StateTransition testcase 504");
-                       se = st.getEndingState("locked", "disabled", "dependency,failed",  "hotstandby", "demote");
-                               assertEquals("coldstandby,locked,disabled,dependency,failed,", makeString(se));
-
-                       logger.info("??? StateTransition testcase 505");
-                       se = st.getEndingState("locked", "disabled", "dependency,failed",  "providingservice", "demote");
-                               assertEquals("coldstandby,locked,disabled,dependency,failed,", makeString(se));
-
-                       logger.info("??? StateTransition testcase 506");
-                       se = st.getEndingState("locked", "disabled", "dependency,failed",  "providingservice", "unlock");
-                               assertEquals("coldstandby,unlocked,disabled,dependency,failed,", makeString(se));
-
-                       logger.info("??? StateTransition testcase 507");
-                       se = st.getEndingState("locked", "disabled", "dependency,failed",  "providingservice", "disableFailed");
-                               assertEquals("coldstandby,locked,disabled,dependency,failed,", makeString(se));
-
-                       logger.info("??? StateTransition testcase 508");
-                       se = st.getEndingState("locked", "disabled", "dependency,failed",  "providingservice", "enableNotFailed");
-                               assertEquals("coldstandby,locked,disabled,dependency,", makeString(se));
-
-                       logger.info("??? StateTransition testcase 509");
-                       se = st.getEndingState("locked", "disabled", "dependency,failed",  "providingservice", "disableDependency");
-                               assertEquals("coldstandby,locked,disabled,dependency,failed,", makeString(se));
-
-                       logger.info("??? StateTransition testcase 510");
-                       se = st.getEndingState("locked", "disabled", "dependency,failed",  "providingservice", "enableNoDependency");
-                               assertEquals("coldstandby,locked,disabled,failed,", makeString(se));
-
-                       logger.info("??? StateTransition testcase 511");
-                       se = st.getEndingState("locked", "disabled", "dependency,failed",  "providingservice", "promote");
-                               assertEquals("coldstandby,locked,disabled,dependency,failed,StandbyStatusException", makeString(se));
-
-                       logger.info("??? StateTransition testcase 512");
-                       se = st.getEndingState("locked", "disabled", "dependency,failed",  "providingservice", "demote");
-                               assertEquals("coldstandby,locked,disabled,dependency,failed,", makeString(se));
-                       
-                   } catch (Exception ex) {
-                       logger.error("EndingState NOT found");
-                       throw new Exception("EndingState NOT found. " + ex);
-                   }
-                   
-               } catch(Exception ex) {
-                       logger.error("Exception: {}" + ex.toString());
-                       throw new Exception("Failure getting ending state. " + ex );
-               }
-
-           logger.info("\n\nStateTransitionTest: Exit\n\n");
-       }
-
-       /**
-        * Converts a state element to a comma-separated string.
-        * @param se    element to be converted
-        * @return a string representing the element
-        */
-       private String makeString(StateElement se)
-       {
-               if(se == null) {
-                       return null;
-               }
-               
-               StringBuilder b = new StringBuilder();
-               
-               String endingStandbyStatus = se.getEndingStandbyStatus();
-               if (endingStandbyStatus != null) {
-                       b.append(endingStandbyStatus.replace(".",  ","));
-                       b.append(',');
-               }
-               
-               b.append(se.getEndingAdminState());
-               b.append(',');
-               b.append(se.getEndingOpState());
-               b.append(',');
-               b.append(se.getEndingAvailStatus());
-               b.append(',');
-               b.append(se.getException());
-               
-               return b.toString();
-       }
+                logger.info("??? StateTransition testcase 492");
+                se = st.getEndingState("locked", "disabled", "dependency,failed", "coldstandby", "enableNotFailed");
+                assertEquals("coldstandby,locked,disabled,dependency,", makeString(se));
+
+                logger.info("??? StateTransition testcase 493");
+                se = st.getEndingState("locked", "disabled", "dependency,failed", "coldstandby", "disableDependency");
+                assertEquals("coldstandby,locked,disabled,dependency,failed,", makeString(se));
+
+                logger.info("??? StateTransition testcase 494");
+                se = st.getEndingState("locked", "disabled", "dependency,failed", "coldstandby", "enableNoDependency");
+                assertEquals("coldstandby,locked,disabled,failed,", makeString(se));
+
+                logger.info("??? StateTransition testcase 495");
+                se = st.getEndingState("locked", "disabled", "dependency,failed", "coldstandby", "promote");
+                assertEquals("coldstandby,locked,disabled,dependency,failed,StandbyStatusException", makeString(se));
+
+                logger.info("??? StateTransition testcase 496");
+                se = st.getEndingState("locked", "disabled", "dependency,failed", "coldstandby", "demote");
+                assertEquals("coldstandby,locked,disabled,dependency,failed,", makeString(se));
+
+                logger.info("??? StateTransition testcase 497");
+                se = st.getEndingState("locked", "disabled", "dependency,failed", "hotstandby", "demote");
+                assertEquals("coldstandby,locked,disabled,dependency,failed,", makeString(se));
+
+                logger.info("??? StateTransition testcase 498");
+                se = st.getEndingState("locked", "disabled", "dependency,failed", "hotstandby", "unlock");
+                assertEquals("coldstandby,unlocked,disabled,dependency,failed,", makeString(se));
+
+                logger.info("??? StateTransition testcase 499");
+                se = st.getEndingState("locked", "disabled", "dependency,failed", "hotstandby", "disableFailed");
+                assertEquals("coldstandby,locked,disabled,dependency,failed,", makeString(se));
+
+                logger.info("??? StateTransition testcase 500");
+                se = st.getEndingState("locked", "disabled", "dependency,failed", "hotstandby", "enableNotFailed");
+                assertEquals("coldstandby,locked,disabled,dependency,", makeString(se));
+
+                logger.info("??? StateTransition testcase 501");
+                se = st.getEndingState("locked", "disabled", "dependency,failed", "hotstandby", "disableDependency");
+                assertEquals("coldstandby,locked,disabled,dependency,failed,", makeString(se));
+
+                logger.info("??? StateTransition testcase 502");
+                se = st.getEndingState("locked", "disabled", "dependency,failed", "hotstandby", "enableNoDependency");
+                assertEquals("coldstandby,locked,disabled,failed,", makeString(se));
+
+                logger.info("??? StateTransition testcase 503");
+                se = st.getEndingState("locked", "disabled", "dependency,failed", "hotstandby", "promote");
+                assertEquals("coldstandby,locked,disabled,dependency,failed,StandbyStatusException", makeString(se));
+
+                logger.info("??? StateTransition testcase 504");
+                se = st.getEndingState("locked", "disabled", "dependency,failed", "hotstandby", "demote");
+                assertEquals("coldstandby,locked,disabled,dependency,failed,", makeString(se));
+
+                logger.info("??? StateTransition testcase 505");
+                se = st.getEndingState("locked", "disabled", "dependency,failed", "providingservice", "demote");
+                assertEquals("coldstandby,locked,disabled,dependency,failed,", makeString(se));
+
+                logger.info("??? StateTransition testcase 506");
+                se = st.getEndingState("locked", "disabled", "dependency,failed", "providingservice", "unlock");
+                assertEquals("coldstandby,unlocked,disabled,dependency,failed,", makeString(se));
+
+                logger.info("??? StateTransition testcase 507");
+                se = st.getEndingState("locked", "disabled", "dependency,failed", "providingservice", "disableFailed");
+                assertEquals("coldstandby,locked,disabled,dependency,failed,", makeString(se));
+
+                logger.info("??? StateTransition testcase 508");
+                se = st.getEndingState("locked", "disabled", "dependency,failed", "providingservice",
+                        "enableNotFailed");
+                assertEquals("coldstandby,locked,disabled,dependency,", makeString(se));
+
+                logger.info("??? StateTransition testcase 509");
+                se = st.getEndingState("locked", "disabled", "dependency,failed", "providingservice",
+                        "disableDependency");
+                assertEquals("coldstandby,locked,disabled,dependency,failed,", makeString(se));
+
+                logger.info("??? StateTransition testcase 510");
+                se = st.getEndingState("locked", "disabled", "dependency,failed", "providingservice",
+                        "enableNoDependency");
+                assertEquals("coldstandby,locked,disabled,failed,", makeString(se));
+
+                logger.info("??? StateTransition testcase 511");
+                se = st.getEndingState("locked", "disabled", "dependency,failed", "providingservice", "promote");
+                assertEquals("coldstandby,locked,disabled,dependency,failed,StandbyStatusException", makeString(se));
+
+                logger.info("??? StateTransition testcase 512");
+                se = st.getEndingState("locked", "disabled", "dependency,failed", "providingservice", "demote");
+                assertEquals("coldstandby,locked,disabled,dependency,failed,", makeString(se));
+
+            } catch (Exception ex) {
+                logger.error("EndingState NOT found");
+                throw new Exception("EndingState NOT found. " + ex);
+            }
+
+        } catch (Exception ex) {
+            logger.error("Exception: {}" + ex.toString());
+            throw new Exception("Failure getting ending state. " + ex);
+        }
+
+        logger.info("\n\nStateTransitionTest: Exit\n\n");
+    }
+
+    /**
+     * Converts a state element to a comma-separated string.
+     * 
+     * @param se element to be converted
+     * @return a string representing the element
+     */
+    private String makeString(StateElement se) {
+        if (se == null) {
+            return null;
+        }
+
+        StringBuilder stringBuilder = new StringBuilder();
+
+        String endingStandbyStatus = se.getEndingStandbyStatus();
+        if (endingStandbyStatus != null) {
+            stringBuilder.append(endingStandbyStatus.replace(".", ","));
+            stringBuilder.append(',');
+        }
+
+        stringBuilder.append(se.getEndingAdminState());
+        stringBuilder.append(',');
+        stringBuilder.append(se.getEndingOpState());
+        stringBuilder.append(',');
+        stringBuilder.append(se.getEndingAvailStatus());
+        stringBuilder.append(',');
+        stringBuilder.append(se.getException());
+
+        return stringBuilder.toString();
+    }
 }