Search in sources :

Example 16 with IPV

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);
            }
        }
    }
}
Also used : StringProperty(org.csstudio.opibuilder.properties.StringProperty) PVValueProperty(org.csstudio.opibuilder.properties.PVValueProperty) IPV(org.csstudio.simplepv.IPV)

Example 17 with IPV

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);
                }
            });
        }
    }
}
Also used : IPV(org.csstudio.simplepv.IPV)

Example 18 with IPV

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);
}
Also used : PropertyChangeEvent(java.beans.PropertyChangeEvent) AlarmSeverity(org.diirt.vtype.AlarmSeverity) PropertyChangeListener(java.beans.PropertyChangeListener) StringProperty(org.csstudio.opibuilder.properties.StringProperty) IPV(org.csstudio.simplepv.IPV) VType(org.diirt.vtype.VType) IWidgetPropertyChangeHandler(org.csstudio.opibuilder.properties.IWidgetPropertyChangeHandler) IFigure(org.eclipse.draw2d.IFigure)

Example 19 with IPV

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;
}
Also used : IPV(org.csstudio.simplepv.IPV)

Example 20 with IPV

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();
}
Also used : IProgressMonitor(org.eclipse.core.runtime.IProgressMonitor) Job(org.eclipse.core.runtime.jobs.Job) IPV(org.csstudio.simplepv.IPV) Display(org.eclipse.swt.widgets.Display)

Aggregations

IPV (org.csstudio.simplepv.IPV)21 VType (org.diirt.vtype.VType)9 Display (org.diirt.vtype.Display)4 VEnum (org.diirt.vtype.VEnum)3 StringProperty (org.csstudio.opibuilder.properties.StringProperty)2 ScriptData (org.csstudio.opibuilder.script.ScriptData)2 ActionsInput (org.csstudio.opibuilder.widgetActions.ActionsInput)2 PropertyChangeEvent (java.beans.PropertyChangeEvent)1 PropertyChangeListener (java.beans.PropertyChangeListener)1 FileNotFoundException (java.io.FileNotFoundException)1 InputStream (java.io.InputStream)1 AbstractBaseEditPart (org.csstudio.opibuilder.editparts.AbstractBaseEditPart)1 AbstractLinkingContainerModel (org.csstudio.opibuilder.model.AbstractLinkingContainerModel)1 AbstractWidgetModel (org.csstudio.opibuilder.model.AbstractWidgetModel)1 DisplayModel (org.csstudio.opibuilder.model.DisplayModel)1 AbstractWidgetProperty (org.csstudio.opibuilder.properties.AbstractWidgetProperty)1 IWidgetPropertyChangeHandler (org.csstudio.opibuilder.properties.IWidgetPropertyChangeHandler)1 PVValueProperty (org.csstudio.opibuilder.properties.PVValueProperty)1 WidgetPropertyChangeListener (org.csstudio.opibuilder.properties.WidgetPropertyChangeListener)1 PVTuple (org.csstudio.opibuilder.script.PVTuple)1