public boolean handleChange(Object oldValue, Object newValue, IFigure figure) { IPV oldPV = pvMap.get(pvNamePropID); 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); pvListenerMap.put(pvNamePropID, pvListener); newPV.start(); } catch (Exception e) { OPIBuilderPlugin.getLogger() .log( Level.WARNING, "Unable to connect to PV:" + //$NON-NLS-1$ newPVName, e); } return false; }
public void doActivate() { 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); 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(), e); //$NON-NLS-1$ } } } }
@Override public void activate() { if (!isActive()) { super.activate(); initFigure(getFigure()); // add listener to all properties. for (String id : getWidgetModel().getAllPropertyIDs()) { AbstractWidgetProperty property = getWidgetModel().getProperty(id); if (property != null) { WidgetPropertyChangeListener listener = new WidgetPropertyChangeListener(this, property); property.addPropertyChangeListener(listener); propertyListenerMap.put(id, listener); property.setExecutionMode(executionMode); property.setWidgetModel(getWidgetModel()); } } registerBasePropertyChangeHandlers(); registerPropertyChangeHandlers(); if (executionMode == ExecutionMode.RUN_MODE) { // hook open display action Set<String> allPropIds = getWidgetModel().getAllPropertyIDs(); if (allPropIds.contains(AbstractWidgetModel.PROP_ACTIONS) && allPropIds.contains(AbstractWidgetModel.PROP_ENABLED)) { hookMouseClickAction(); } // script and rules execution ScriptsInput scriptsInput = getWidgetModel().getScriptsInput(); scriptDataList = new ArrayList<ScriptData>(scriptsInput.getScriptList()); for (RuleData rd : getWidgetModel().getRulesInput().getRuleDataList()) { scriptDataList.add(rd.convertToScriptData()); } for (final ScriptData scriptData : scriptDataList) { final IPV[] pvArray = new IPV[scriptData.getPVList().size()]; int i = 0; for (PVTuple pvTuple : scriptData.getPVList()) { String pvName = pvTuple.pvName; if (pvMap.containsKey(pvName)) { pvArray[i] = pvMap.get(pvName); } else { try { IPV pv = BOYPVFactory.createPV(pvName, false, 2); pvMap.put(pvName, pv); addToConnectionHandler(pvName, pv); pvArray[i] = pv; } catch (Exception e) { String message = NLS.bind( "Unable to connect to PV: {0}! \n" + "This may cause error when executing the script.", pvName); OPIBuilderPlugin.getLogger().log(Level.WARNING, message, e); ConsoleService.getInstance().writeError(message); pvArray[i] = null; } } i++; } ScriptService.getInstance() .registerScript(scriptData, AbstractBaseEditPart.this, pvArray); UIBundlingThread.getInstance() .addRunnable( new Runnable() { @Override public void run() { if (!isActive()) { // already deactivated return; } hasStartedPVs = true; for (IPV pv : pvArray) if (pv != null && !pv.isStarted()) try { pv.start(); } catch (Exception e) { OPIBuilderPlugin.getLogger() .log( Level.WARNING, "Unable to start PV " + pv.getName(), e); //$NON-NLS-1$ } } }); } } doActivate(); } // Rap specified code displayDisposeListener = new Runnable() { @Override public void run() { deactivate(); } }; SingleSourceHelper.rapActivateBaseEditPart(this); }