use of org.csstudio.simplepv.IPV in project yamcs-studio by yamcs.
the class PVWidgetEditpartDelegate method doActivate.
public void doActivate() {
saveFigureOKStatus(editpart.getFigure());
if (editpart.getExecutionMode() == ExecutionMode.RUN_MODE) {
pvMap.clear();
final Map<StringProperty, PVValueProperty> pvPropertyMap = editpart.getWidgetModel().getPVMap();
for (final StringProperty sp : pvPropertyMap.keySet()) {
if (sp.getPropertyValue() == null || ((String) sp.getPropertyValue()).trim().length() <= 0)
continue;
try {
IPV pv = BOYPVFactory.createPV((String) sp.getPropertyValue(), isAllValuesBuffered);
pvMap.put(sp.getPropertyID(), pv);
editpart.addToConnectionHandler((String) sp.getPropertyValue(), pv);
WidgetPVListener pvListener = new WidgetPVListener(sp.getPropertyID());
pv.addListener(pvListener);
pvListenerMap.put(sp.getPropertyID(), pvListener);
} catch (Exception e) {
OPIBuilderPlugin.getLogger().log(Level.WARNING, "Unable to connect to PV:" + (String) sp.getPropertyValue(), // $NON-NLS-1$
e);
}
}
}
}
use of org.csstudio.simplepv.IPV in project yamcs-studio by yamcs.
the class PVWidgetEditpartDelegate method setPVValue.
/**
*Set PV to given value. Should accept Double, Double[], Integer, String, maybe more.
* @param pvPropId
* @param value
*/
@Override
public void setPVValue(String pvPropId, Object value) {
fireSetPVValue(pvPropId, value);
final IPV pv = pvMap.get(pvPropId);
if (pv != null) {
try {
if (pvPropId.equals(controlPVPropId) && controlPVValuePropId != null && getUpdateSuppressTime() > 0) {
// activate suppress timer
synchronized (this) {
if (updateSuppressTimer == null || timerTask == null)
initUpdateSuppressTimer();
if (!updateSuppressTimer.isDue())
updateSuppressTimer.reset();
else
startUpdateSuppressTimer();
}
}
pv.setValue(value);
} catch (final Exception e) {
UIBundlingThread.getInstance().addRunnable(new Runnable() {
@Override
public void run() {
String message = "Failed to write PV:" + pv.getName();
ErrorHandlerUtil.handleError(message, e);
}
});
}
}
}
use of org.csstudio.simplepv.IPV in project yamcs-studio by yamcs.
the class PVWidgetEditpartDelegate method registerBasePropertyChangeHandlers.
public void registerBasePropertyChangeHandlers() {
IWidgetPropertyChangeHandler borderHandler = new IWidgetPropertyChangeHandler() {
@Override
public boolean handleChange(Object oldValue, Object newValue, IFigure figure) {
editpart.setFigureBorder(editpart.calculateBorder());
return true;
}
};
editpart.setPropertyChangeHandler(IPVWidgetModel.PROP_BORDER_ALARMSENSITIVE, borderHandler);
// value
IWidgetPropertyChangeHandler valueHandler = new IWidgetPropertyChangeHandler() {
@Override
public boolean handleChange(final Object oldValue, final Object newValue, final IFigure figure) {
// No valid value is given. Do nothing.
if (newValue == null || !(newValue instanceof VType))
return false;
AlarmSeverity newSeverity = VTypeHelper.getAlarmSeverity((VType) newValue);
if (newSeverity == null)
return false;
if (newSeverity != alarmSeverity) {
alarmSeverity = newSeverity;
fireAlarmSeverityChanged(newSeverity, figure);
}
return true;
}
};
editpart.setPropertyChangeHandler(AbstractPVWidgetModel.PROP_PVVALUE, valueHandler);
// Border Alarm Sensitive
addAlarmSeverityListener(new AlarmSeverityListener() {
@Override
public boolean severityChanged(AlarmSeverity severity, IFigure figure) {
if (!isBorderAlarmSensitive)
return false;
editpart.setFigureBorder(editpart.calculateBorder());
return true;
}
});
// BackColor Alarm Sensitive
addAlarmSeverityListener(new AlarmSeverityListener() {
@Override
public boolean severityChanged(AlarmSeverity severity, IFigure figure) {
if (!isBackColorAlarmSensitive)
return false;
figure.setBackgroundColor(calculateBackColor());
return true;
}
});
// ForeColor Alarm Sensitive
addAlarmSeverityListener(new AlarmSeverityListener() {
@Override
public boolean severityChanged(AlarmSeverity severity, IFigure figure) {
if (!isForeColorAlarmSensitive)
return false;
figure.setForegroundColor(calculateForeColor());
return true;
}
});
// Pulsing Alarm Sensitive
addAlarmSeverityListener(new AlarmSeverityListener() {
@Override
public boolean severityChanged(AlarmSeverity severity, IFigure figure) {
if (!isAlarmPulsing)
return false;
if (severity == AlarmSeverity.MAJOR || severity == AlarmSeverity.MINOR) {
startPulsing();
} else {
stopPulsing();
}
return true;
}
});
class PVNamePropertyChangeHandler implements IWidgetPropertyChangeHandler {
private String pvNamePropID;
public PVNamePropertyChangeHandler(String pvNamePropID) {
this.pvNamePropID = pvNamePropID;
}
@Override
public boolean handleChange(Object oldValue, Object newValue, IFigure figure) {
IPV oldPV = pvMap.get(pvNamePropID);
editpart.removeFromConnectionHandler((String) oldValue);
if (oldPV != null) {
oldPV.stop();
oldPV.removeListener(pvListenerMap.get(pvNamePropID));
}
pvMap.remove(pvNamePropID);
String newPVName = ((String) newValue).trim();
if (newPVName.length() <= 0)
return false;
try {
lastWriteAccess = null;
IPV newPV = BOYPVFactory.createPV(newPVName, isAllValuesBuffered);
WidgetPVListener pvListener = new WidgetPVListener(pvNamePropID);
newPV.addListener(pvListener);
pvMap.put(pvNamePropID, newPV);
editpart.addToConnectionHandler(newPVName, newPV);
pvListenerMap.put(pvNamePropID, pvListener);
newPV.start();
} catch (Exception e) {
OPIBuilderPlugin.getLogger().log(Level.WARNING, // $NON-NLS-1$
"Unable to connect to PV:" + newPVName, e);
}
return false;
}
}
// PV name
for (StringProperty pvNameProperty : editpart.getWidgetModel().getPVMap().keySet()) {
if (editpart.getExecutionMode() == ExecutionMode.RUN_MODE)
editpart.setPropertyChangeHandler(pvNameProperty.getPropertyID(), new PVNamePropertyChangeHandler(pvNameProperty.getPropertyID()));
}
if (editpart.getExecutionMode() == ExecutionMode.EDIT_MODE)
editpart.getWidgetModel().getProperty(IPVWidgetModel.PROP_PVNAME).addPropertyChangeListener(new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent evt) {
// reselect the widget to update feedback.
int selected = editpart.getSelected();
if (selected != EditPart.SELECTED_NONE) {
editpart.setSelected(EditPart.SELECTED_NONE);
editpart.setSelected(selected);
}
}
});
IWidgetPropertyChangeHandler backColorHandler = new IWidgetPropertyChangeHandler() {
@Override
public boolean handleChange(Object oldValue, Object newValue, IFigure figure) {
saveBackColor = ((OPIColor) newValue).getSWTColor();
return false;
}
};
editpart.setPropertyChangeHandler(AbstractWidgetModel.PROP_COLOR_BACKGROUND, backColorHandler);
IWidgetPropertyChangeHandler foreColorHandler = new IWidgetPropertyChangeHandler() {
@Override
public boolean handleChange(Object oldValue, Object newValue, IFigure figure) {
saveForeColor = ((OPIColor) newValue).getSWTColor();
return false;
}
};
editpart.setPropertyChangeHandler(AbstractWidgetModel.PROP_COLOR_FOREGROUND, foreColorHandler);
IWidgetPropertyChangeHandler backColorAlarmSensitiveHandler = new IWidgetPropertyChangeHandler() {
@Override
public boolean handleChange(Object oldValue, Object newValue, IFigure figure) {
isBackColorAlarmSensitive = (Boolean) newValue;
figure.setBackgroundColor(calculateBackColor());
return true;
}
};
editpart.setPropertyChangeHandler(AbstractPVWidgetModel.PROP_BACKCOLOR_ALARMSENSITIVE, backColorAlarmSensitiveHandler);
IWidgetPropertyChangeHandler foreColorAlarmSensitiveHandler = new IWidgetPropertyChangeHandler() {
@Override
public boolean handleChange(Object oldValue, Object newValue, IFigure figure) {
isForeColorAlarmSensitive = (Boolean) newValue;
figure.setForegroundColor(calculateForeColor());
return true;
}
};
editpart.setPropertyChangeHandler(AbstractPVWidgetModel.PROP_FORECOLOR_ALARMSENSITIVE, foreColorAlarmSensitiveHandler);
IWidgetPropertyChangeHandler alarmPulsingHandler = new IWidgetPropertyChangeHandler() {
@Override
public boolean handleChange(Object oldValue, Object newValue, IFigure figure) {
isAlarmPulsing = (Boolean) newValue;
stopPulsing();
fireAlarmSeverityChanged(alarmSeverity, figure);
return true;
}
};
editpart.setPropertyChangeHandler(AbstractPVWidgetModel.PROP_ALARM_PULSING, alarmPulsingHandler);
}
use of org.csstudio.simplepv.IPV in project yamcs-studio by yamcs.
the class WritePVAction method writePVInSync.
private IStatus writePVInSync() {
String text = getValue().trim();
try {
IPV pv = BOYPVFactory.createPV(getPVName());
pv.start();
try {
if (!pv.setValue(text, getTimeout() * 1000))
throw new Exception("Write Failed!");
} finally {
pv.stop();
}
} catch (Exception e) {
popErrorDialog(e);
return Status.CANCEL_STATUS;
}
return Status.OK_STATUS;
}
use of org.csstudio.simplepv.IPV in project yamcs-studio by yamcs.
the class PVUtil method writePV.
/**
* Write a PV in a background job. It will first creates and connects to the PV. After PV is connected, it will set
* the PV with the value. If it fails to write, an error dialog will pop up.
*
* @param pvName
* name of the PV.
* @param value
* value to write.
* @param timeout
* maximum time to try connection.
*/
public static final void writePV(final String pvName, final Object value, final int timeout) {
final Display display = DisplayUtils.getDisplay();
Job job = new Job("Writing PV: " + pvName) {
@Override
protected IStatus run(IProgressMonitor monitor) {
try {
IPV pv = BOYPVFactory.createPV(pvName);
pv.start();
try {
if (!pv.setValue(value, timeout * 1000))
throw new Exception("Write Failed!");
} finally {
pv.stop();
}
} catch (final Exception e) {
UIBundlingThread.getInstance().addRunnable(display, new Runnable() {
@Override
public void run() {
String message = "Failed to write PV: " + pvName + "\n" + (e.getCause() != null ? e.getCause().getMessage() : e.getMessage());
ErrorHandlerUtil.handleError(message, e, true, true);
}
});
return Status.CANCEL_STATUS;
}
return Status.OK_STATUS;
}
};
job.schedule();
}
Aggregations