// handle incoming parameter notification public void propertyChange(java.beans.PropertyChangeEvent e) { // notification from CV; check for Value being changed if (e.getPropertyName().equals("Busy")) { if (((Boolean) e.getNewValue()).equals(Boolean.FALSE)) { setToRead(false); setToWrite(false); // some programming operation just finished setBusy(false); } } else if (e.getPropertyName().equals("State")) { CvValue cv = _cvMap.get(getCvNum()); if (cv.getState() == STORED) { setToWrite(false); } if (cv.getState() == READ) { setToRead(false); } setState(cv.getState()); for (JTree tree : trees) { tree.setBackground(_value.getBackground()); // tree.setOpaque(true); } } else if (e.getPropertyName().equals("Value")) { // update value of Variable CvValue cv = _cvMap.get(getCvNum()); int newVal = (cv.getValue() & maskVal(getMask())) >>> offsetVal(getMask()); setValue(newVal); // check for duplicate done inside setVal } }
// handle incoming parameter notification public void propertyChange(java.beans.PropertyChangeEvent e) { if (log.isDebugEnabled()) { log.debug("property changed event - name: " + e.getPropertyName()); } // notification from CV; check for Value being changed if (e.getPropertyName().equals("Busy") && ((Boolean) e.getNewValue()).equals(Boolean.FALSE)) { // busy transitions drive the state switch (_progState) { case IDLE: // no, just a CV update if (log.isDebugEnabled()) { log.error("Busy goes false with state IDLE"); } return; case WRITING_PI4R: // have written the PI, now write SI if needed case WRITING_PI4C: case WRITING_PI4W: if (log.isDebugEnabled()) { log.debug("Busy goes false with state WRITING_PI"); } // check for success if ((retries < RETRY_MAX) && ((_cvMap.get(programmingLow ? getCvName() : mSecondCVname)).getState() != CvValue.STORED)) { // need to retry on error; leave progState as it was log.debug("retry"); retries++; (_cvMap.get(programmingLow ? getCvName() : mSecondCVname)).writePI(_status); return; } // success, move on to next retries = 0; if (_progState == WRITING_PI4R) { _progState = WRITING_SI4R; } else if (_progState == WRITING_PI4C) { _progState = WRITING_SI4C; } else { _progState = WRITING_SI4W; } (_cvMap.get(programmingLow ? getCvName() : mSecondCVname)).writeSI(_status); return; case WRITING_SI4R: case WRITING_SI4C: case WRITING_SI4W: // have written SI if needed, now read or write CV if (log.isDebugEnabled()) { log.debug("Busy goes false with state WRITING_SI"); } // check for success if ((retries < RETRY_MAX) && ((_cvMap.get(programmingLow ? getCvName() : mSecondCVname)).getState() != CvValue.STORED)) { // need to retry on error; leave progState as it was log.debug("retry"); retries++; (_cvMap.get(programmingLow ? getCvName() : mSecondCVname)).writeSI(_status); return; } // success, move on to next retries = 0; if (_progState == WRITING_SI4R) { _progState = READING_CV; (_cvMap.get(programmingLow ? getCvName() : mSecondCVname)).readIcV(_status); } else if (_progState == WRITING_SI4C) { _progState = COMPARE_CV; (_cvMap.get(programmingLow ? getCvName() : mSecondCVname)).confirmIcV(_status); } else { _progState = WRITING_CV; (_cvMap.get(programmingLow ? getCvName() : mSecondCVname)).writeIcV(_status); } return; case READING_CV: // now done with the read request if (log.isDebugEnabled()) { log.debug("Finished reading the Indexed CV"); } // check for success if ((retries < RETRY_MAX) && ((_cvMap.get(programmingLow ? getCvName() : mSecondCVname)).getState() != CvValue.READ)) { // need to retry on error; leave progState as it was log.debug("retry"); retries++; (_cvMap.get(programmingLow ? getCvName() : mSecondCVname)).readIcV(_status); return; } // success, move on to next retries = 0; _progState = IDLE; if (doHigh) { doHigh = false; programmingLow = false; doRead(); } else if (doLow) { doLow = false; programmingLow = true; doRead(); } else { programmingLow = true; setBusy(false); } return; case COMPARE_CV: // now done with the read request if (log.isDebugEnabled()) { log.debug("Finished reading the Indexed CV for compare"); } // check for success SAME or DIFF? if ((retries < RETRY_MAX) && ((_cvMap.get(programmingLow ? getCvName() : mSecondCVname)).getState() != CvValue.SAME) && ((_cvMap.get(programmingLow ? getCvName() : mSecondCVname)).getState() != CvValue.DIFF)) { // need to retry on error; leave progState as it was log.debug("retry"); retries++; (_cvMap.get(programmingLow ? getCvName() : mSecondCVname)).confirmIcV(_status); } return; case WRITING_CV: // now done with the write request if (log.isDebugEnabled()) { log.debug("Finished writing the Indexed CV"); } // check for success if ((retries < RETRY_MAX) && ((_cvMap.get(programmingLow ? getCvName() : mSecondCVname)).getState() != CvValue.STORED)) { // need to retry on error; leave progState as it was log.debug("retry"); retries++; (_cvMap.get(programmingLow ? getCvName() : mSecondCVname)).writeIcV(_status); return; } // success, move on to next retries = 0; _progState = IDLE; if (doHigh) { doHigh = false; programmingLow = false; doWrite(); } else if (doLow) { doLow = false; programmingLow = true; doWrite(); } else { super.setState(STORED); setBusy(false); } return; default: // unexpected! log.error("Unexpected state found: " + _progState); _progState = IDLE; return; } } else if (e.getPropertyName().equals("State")) { CvValue cvLow = _cvMap.get(getCvName()); CvValue cvHigh = _cvMap.get(mSecondCVname); if (log.isDebugEnabled()) { log.debug(" found cvLow=" + cvLow + " cvHigh=" + cvHigh); } if (log.isDebugEnabled()) { log.debug("CV State changed to " + cvLow.getState()); } if (cvHigh.getState() == VariableValue.UNKNOWN) { if (cvLow.getState() == VariableValue.EDITED) { setState(VariableValue.EDITED); } else { setState(VariableValue.UNKNOWN); } } else { setState(cvLow.getState()); } } else if (e.getPropertyName().equals("Value")) { // update value of Variable CvValue cv0 = _cvMap.get(getCvName()); CvValue cv1 = _cvMap.get(mSecondCVname); if (log.isDebugEnabled()) { log.debug(" found cv0=" + cv0 + " cv1=" + cv1); } int newVal = ((cv0.getValue() & lowerbitmask) >> lowerbitoffset) + (((cv1.getValue() & upperbitmask) * 256) >> upperbitoffset); if (log.isDebugEnabled()) { log.debug( "CV " + getCvName() + "," + getSecondCvNum() + " set value to " + newVal + " based on cv0=" + cv0.getValue() + " cv1=" + cv1.getValue()); } setValue(newVal); // check for duplicate done inside setVal if (log.isDebugEnabled()) { log.debug( "CV " + getCvName() + "," + getSecondCvNum() + " in property change after setValue call, cv0=" + cv0.getValue() + " cv1=" + cv1.getValue()); } // state change due to CV state change, so propagate that if (cv1.getState() == VariableValue.UNKNOWN) { if (cv0.getState() == VariableValue.EDITED) { setState(VariableValue.EDITED); } else { setState(VariableValue.UNKNOWN); } } else { setState(cv0.getState()); } } }