// 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 } }
public void actionPerformed(ActionEvent e) { // see if this is from _value itself, or from an alternate rep. // if from an alternate rep, it will contain the value to select if (log.isDebugEnabled()) { log.debug(label() + " start action event: " + e); } if (!(e.getActionCommand().equals(""))) { // is from alternate rep _value.setSelectedItem(e.getActionCommand()); if (log.isDebugEnabled()) { log.debug(label() + " action event was from alternate rep"); } // match and select in tree for (int i = 0; i < _valueArray.length; i++) { if (e.getActionCommand().toString().equals(_itemArray[i])) { // now select in the tree TreePath path = _pathArray[i]; for (JTree tree : trees) { tree.setSelectionPath(path); // ensure selection is in visible portion of JScrollPane tree.scrollPathToVisible(path); } break; // first one is enough } } } int oldVal = getIntValue(); // called for new values - set the CV as needed CvValue cv = _cvMap.get(getCvNum()); // compute new cv value by combining old and request int oldCv = cv.getValue(); int newVal = getIntValue(); int newCv = newValue(oldCv, newVal, getMask()); if (newCv != oldCv) { cv.setValue(newCv); // to prevent CV going EDITED during loading of decoder file // notify (this used to be before setting the values) if (log.isDebugEnabled()) { log.debug(label() + " about to firePropertyChange"); } prop.firePropertyChange("Value", null, Integer.valueOf(oldVal)); if (log.isDebugEnabled()) { log.debug(label() + " returned to from firePropertyChange"); } } if (log.isDebugEnabled()) { log.debug( label() + " end action event saw oldCv=" + oldCv + " newVal=" + newVal + " newCv=" + newCv); } }
// 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()); } } }
void updatedTextField() { if (log.isDebugEnabled()) { log.debug( "CV " + getCvName() + "," + getSecondCvNum() + " enter updatedTextField in SplitVal"); } // called for new values - set the CV as needed CvValue cv1 = _cvMap.get(getCvName()); CvValue cv2 = _cvMap.get(mSecondCVname); int newEntry; // entered value try { newEntry = Integer.valueOf(_value.getText()).intValue(); } catch (java.lang.NumberFormatException ex) { newEntry = 0; } // calculate resulting number int newVal = (newEntry - mOffset) / mFactor; // combine with existing values via mask if (log.isDebugEnabled()) { log.debug( "CV " + getCvName() + "," + getSecondCvNum() + " lo cv was " + cv1.getValue() + " mask=" + lowerbitmask + " offset=" + lowerbitoffset); } int newCv1 = ((newVal << lowerbitoffset) & lowerbitmask) | (~lowerbitmask & cv1.getValue()); if (log.isDebugEnabled()) { log.debug( "CV " + getCvName() + "," + getSecondCvNum() + " hi cv was " + cv2.getValue() + " mask=" + upperbitmask + " offset=" + upperbitoffset); } int newCv2 = (((newVal << upperbitoffset) >> 8) & upperbitmask) | (~upperbitmask & cv2.getValue()); if (log.isDebugEnabled()) { log.debug( "CV " + getCvName() + "," + getSecondCvNum() + " new value " + newVal + " gives first=" + newCv1 + " second=" + newCv2); } // cv updates here trigger updated property changes, which means // we're going to get notified sooner or later. cv1.setValue(newCv1); cv2.setValue(newCv2); if (log.isDebugEnabled()) { log.debug("CV " + getCvName() + "," + getSecondCvNum() + " exit updatedTextField"); } }