All Downloads are FREE. Search and download functionalities are using the official Maven repository.

fr.soleil.tango.statecomposer.PriorityStateManager Maven / Gradle / Ivy

There is a newer version: 10.0.0
Show newest version
package fr.soleil.tango.statecomposer;

import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;

import fr.esrf.Tango.DevState;
import fr.esrf.TangoApi.StateUtilities;

/**
 * this class is not synchronized.
 * 
 * @author GRAMER
 * 
 */
public final class PriorityStateManager {
    /**
     * the user defined priorities between states
     */
    private final Map definedPriorityMap = new HashMap();
    /**
     * the states of monitored devices
     */
    private final Map deviceStateMap = new LinkedHashMap();

    public PriorityStateManager() {
	definedPriorityMap.put(DevState.ON, 0);
	definedPriorityMap.put(DevState.OFF, 1);
	definedPriorityMap.put(DevState.OPEN, 0);
	definedPriorityMap.put(DevState.CLOSE, 1);
	definedPriorityMap.put(DevState.INSERT, 0);
	definedPriorityMap.put(DevState.EXTRACT, 1);
	definedPriorityMap.put(DevState.STANDBY, 2);
	definedPriorityMap.put(DevState.INIT, 3);
	definedPriorityMap.put(DevState.MOVING, 4);
	definedPriorityMap.put(DevState.RUNNING, 4);
	definedPriorityMap.put(DevState.DISABLE, 5);
	definedPriorityMap.put(DevState.ALARM, 6);
	definedPriorityMap.put(DevState.FAULT, 7);
	definedPriorityMap.put(DevState.UNKNOWN, 8);
    }

    /**
     * set priority for state
     * 
     * @param state
     * @param priority
     */
    public void putStatePriority(final DevState state, final int priority) {
	definedPriorityMap.put(state, priority);
    }

    /**
     * set state for deviceName
     * 
     * @param deviceName
     * @param state
     */
    public void putDeviceState(final String deviceName, final DevState state) {

	deviceStateMap.put(deviceName, state);
    }

    public void putAllDeviceState(final Map aDeviceStateMap) {

	deviceStateMap.putAll(aDeviceStateMap);
    }

    /**
     * 
     * @return DevState the Highest Priority State
     */
    public DevState getHighestPriorityState() {
	DevState highestPriorityState = null;
	for (final Map.Entry entry : deviceStateMap.entrySet()) {
	    final int currentPriority = definedPriorityMap.get(entry.getValue());
	    if (highestPriorityState != null) {
		final int highestPriority = definedPriorityMap.get(highestPriorityState);
		if (highestPriority < currentPriority) {
		    highestPriorityState = entry.getValue();

		}
	    } else {
		highestPriorityState = entry.getValue();
	    }
	}
	return highestPriorityState;
    }

    /**
     * return the priority for state passed in parameter.
     * 
     * @param state
     * @return int the priority for state
     */
    public int getPriorityForState(final DevState state) {
	return definedPriorityMap.get(state);
    }

    /**
     * return the states of monitored devices
     * 
     * @return Map
     */
    public Map getDeviceStateMap() {
	return new HashMap(deviceStateMap);
    }

    /**
     * return an array of String which contains deviceName and his state.
     * 
     * @return String[]
     */
    public String[] getDeviceStateArray() {
	final String[] array = new String[deviceStateMap.size()];
	int i = 0;
	for (final Map.Entry deviceStateEntry : deviceStateMap.entrySet()) {

	    final String deviceName = deviceStateEntry.getKey();
	    final DevState deviceState = deviceStateEntry.getValue();
	    array[i++] = deviceName + " - " + StateUtilities.getNameForState(deviceState);
	}
	return array;
    }

    /**
     * return an array of short which contains the priority of state of monitored devices.
     * 
     * @return short[]
     */
    public short[] getDeviceStateNumberArray() {
	final short[] array = new short[deviceStateMap.size()];
	int i = 0;

	for (final Map.Entry deviceStateEntry : deviceStateMap.entrySet()) {
	    final DevState deviceState = deviceStateEntry.getValue();
	    array[i++] = (short) getPriorityForState(deviceState);
	}
	return array;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy