package org.csstudio.platform.internal.simpledal.dal;
import org.csstudio.dal.DynamicValueCondition;
import org.csstudio.dal.DynamicValueProperty;
import org.csstudio.dal.DynamicValueState;
import org.csstudio.dal.context.ConnectionEvent;
import org.csstudio.dal.context.LinkAdapter;
/**
* Utility methods for accessing characteristics and dealing with DAL
* properties.
*
* @author Sven Wende
*
*/
public class EpicsUtil {
/**
* Waits until DAL property is connected or timeout has elapsed
*
* @param property
* the DAL property
* @param timeout
* the timeout to wait
* @return <code>true</code> if property was connected
*/
public static boolean waitTillConnected(DynamicValueProperty property, long timeout) {
if (property == null) {
return false;
}
if (property.isConnected()) {
return true;
}
if (property.isConnectionFailed()) {
return false;
}
LinkAdapter link = new LinkAdapter() {
@Override
public synchronized void connected(ConnectionEvent e) {
notifyAll();
}
@Override
public synchronized void connectionFailed(ConnectionEvent e) {
notifyAll();
}
};
synchronized (link) {
if (property.isConnected()) {
return true;
}
else if (property.isConnectionFailed()) {
return false;
} else {
property.addLinkListener(link);
try {
link.wait(timeout);
} catch (Exception e) {
e.printStackTrace();
}
property.removeLinkListener(link);
}
}
return property.isConnected();
}
/**
* Returns EPICS favored status string for DAL condition.
*
* @param cond
* DAL condition
* @return EPICS favored status string for DAL condition
*/
public static final String extratStatus(DynamicValueCondition cond) {
if (cond == null || cond.getDescription() == null) {
return "N/A";
}
return cond.getDescription();
}
/**
* Converts DAL condition to EPICS favored severity string.
*
* @param condition
* DAL condition
* @return EPICS favored severity string
*/
public static final String toEPICSFlavorSeverity(DynamicValueCondition condition) {
if (condition.isNormal()) {
return DynamicValueState.NORMAL.toString();
}
if (condition.isWarning()) {
return DynamicValueState.WARNING.toString();
}
if (condition.isAlarm()) {
return DynamicValueState.ALARM.toString();
}
if (condition.isError()) {
return DynamicValueState.ERROR.toString();
}
return "UNKNOWN";
}
}