// Close the window when the close box is clicked public void windowClosing(java.awt.event.WindowEvent e) { // check for various types of dirty - first table data not written back if (cvModel.decoderDirty() || variableModel.decoderDirty()) { if (JOptionPane.showConfirmDialog( null, "Some changes have not been written to the decoder. They will be lost. Close window?", "choose one", JOptionPane.OK_CANCEL_OPTION) == JOptionPane.CANCEL_OPTION) { return; } } if (variableModel.fileDirty()) { if (JOptionPane.showConfirmDialog( null, "Some changes have not been written to a configuration file. Close window?", "choose one", JOptionPane.OK_CANCEL_OPTION) == JOptionPane.CANCEL_OPTION) { return; } } modePane.dispose(); // OK, close super.windowClosing(e); }
protected void newVarButtonPerformed() { String name = newVarName.getText(); String CV = newVarCv.getText(); String mask = newVarMask.getText(); // ask Table model to do the actuall add variableModel.newDecVariableValue(name, CV, null, mask, false, false, false, false); variableModel.configDone(); }
// use the decoder Element from the file to load a VariableTableModel for programming. public void loadVariableModel(Element decoderElement, VariableTableModel variableModel) { nextCvStoreIndex = 0; nextICvStoreIndex = 0; processVariablesElement(decoderElement.getChild("variables"), variableModel, "", ""); variableModel.configDone(); }
@edu.umd.cs.findbugs.annotations.SuppressWarnings( value = "REC_CATCH_EXCEPTION") // dead class doesn't need this fixed right now void writeFile() { log.warn( "SymbolicProgFrame writeFile invoked - is this still right, or should the LocoFile method be used?"); log.warn("Note use of VersionID attribute..."); try { // get the file int retVal = fco.showSaveDialog(this); // handle selection or cancel if (retVal != JFileChooser.APPROVE_OPTION) { return; // leave early } File file = fco.getSelectedFile(); // This is taken in large part from "Java and XML" page 368 // create root element Element root = new Element("locomotive-config"); Document doc = jmri.jmrit.XmlFile.newDocument( root, jmri.jmrit.XmlFile.dtdLocation + "locomotive-config.dtd"); // add XSLT processing instruction // <?xml-stylesheet type="text/xsl" href="XSLT/locomotive.xsl"?> java.util.Map<String, String> m = new java.util.HashMap<String, String>(); m.put("type", "text/xsl"); m.put("href", jmri.jmrit.XmlFile.xsltLocation + "locomotive.xsl"); ProcessingInstruction p = new ProcessingInstruction("xml-stylesheet", m); doc.addContent(0, p); // add top-level elements Element values; root.addContent( new Element("locomotive") // locomotive values are first item .setAttribute("roadNumber", locoRoadNumber.getText()) .setAttribute("roadName", locoRoadName.getText()) .setAttribute("mfg", locoMfg.getText()) .setAttribute("model", locoModel.getText()) .addContent( new Element("decoder") .setAttribute("model", decoderModel.getText()) .setAttribute("mfg", decoderMfg.getText()) .setAttribute("versionID", "") .setAttribute("mfgID", "")) .addContent(values = new Element("values"))); // Append a decoderDef element to values Element decoderDef; values.addContent(decoderDef = new Element("decoderDef")); // add the variable values to the decoderDef Element for (int i = 0; i < variableModel.getRowCount(); i++) { decoderDef.addContent( new Element("varValue") .setAttribute("item", variableModel.getLabel(i)) .setAttribute("value", variableModel.getValString(i))); } // add the CV values to the values Element for (int i = 0; i < cvModel.getRowCount(); i++) { values.addContent( new Element("CVvalue") .setAttribute("name", cvModel.getName(i)) .setAttribute("value", cvModel.getValString(i))); } // write the result to selected file java.io.FileOutputStream o = new java.io.FileOutputStream(file); try { XMLOutputter fmt = new XMLOutputter(); fmt.setFormat( Format.getPrettyFormat() .setLineSeparator(System.getProperty("line.separator")) .setTextMode(Format.TextMode.PRESERVE)); fmt.output(doc, o); } finally { o.close(); } // mark file as OK variableModel.setFileDirty(false); } catch (Exception e) { log.error(e.getLocalizedMessage(), e); } }
void processLocoFile(Element loco) { // load the name et al locoRoadName.setText(loco.getAttributeValue("roadName")); locoRoadNumber.setText(loco.getAttributeValue("roadNumber")); locoMfg.setText(loco.getAttributeValue("mfg")); locoModel.setText(loco.getAttributeValue("model")); // load the variable definitions for the decoder Element decoder = loco.getChild("decoder"); if (decoder != null) { // get the file name String mfg = decoder.getAttribute("mfg").getValue(); String model = decoder.getAttribute("model").getValue(); String filename = "xml" + File.separator + mfg + "_" + model + ".xml"; if (log.isDebugEnabled()) { log.debug("will read decoder info from " + filename); } readAndParseConfigFile(new File(filename)); if (log.isDebugEnabled()) { log.debug("finished processing decoder file for loco file"); } } else { log.error("No decoder element found in config file"); } // get the CVs and load Element values = loco.getChild("values"); if (values != null) { // get the CV values and load List<Element> varList = values.getChildren("CVvalue"); if (log.isDebugEnabled()) { log.debug("Found " + varList.size() + " CVvalues"); } for (int i = 0; i < varList.size(); i++) { // locate the row if (((varList.get(i))).getAttribute("name") == null) { if (log.isDebugEnabled()) { log.debug( "unexpected null in name " + ((varList.get(i))) + " " + ((varList.get(i))).getAttributes()); } break; } if (((varList.get(i))).getAttribute("value") == null) { if (log.isDebugEnabled()) { log.debug( "unexpected null in value " + ((varList.get(i))) + " " + ((varList.get(i))).getAttributes()); } break; } String name = ((varList.get(i))).getAttribute("name").getValue(); String value = ((varList.get(i))).getAttribute("value").getValue(); if (log.isDebugEnabled()) { log.debug("CV: " + i + "th entry, CV number " + name + " has value: " + value); } CvValue cvObject = cvModel.allCvMap().get(name); cvObject.setValue(Integer.valueOf(value).intValue()); cvObject.setState(CvValue.FROMFILE); } variableModel.configDone(); } else { log.error("no values element found in config file; CVs not configured"); return; } // get the variable values and load Element decoderDef = values.getChild("decoderDef"); if (decoderDef != null) { List<Element> varList = decoderDef.getChildren("varValue"); if (log.isDebugEnabled()) { log.debug("Found " + varList.size() + " varValues"); } for (int i = 0; i < varList.size(); i++) { // locate the row Attribute itemAttr = null; if ((itemAttr = varList.get(i).getAttribute("item")) == null) { if (log.isDebugEnabled()) { log.debug("unexpected null in item " + varList.get(i)); } break; } if ((itemAttr = varList.get(i).getAttribute("name")) == null) { if (log.isDebugEnabled()) { log.debug("unexpected null in name " + varList.get(i)); } break; } String item = itemAttr.getValue(); if (((varList.get(i))).getAttribute("value") == null) { if (log.isDebugEnabled()) { log.debug("unexpected null in value " + ((varList.get(i)))); } break; } String value = ((varList.get(i))).getAttribute("value").getValue(); if (log.isDebugEnabled()) { log.debug("Variable " + i + " is " + item + " value: " + value); } int row; for (row = 0; row < variableModel.getRowCount(); row++) { if (variableModel.getLabel(row).equals(item)) { break; } } if (log.isDebugEnabled()) { log.debug("Variable " + item + " is row " + row); } if (!value.equals("")) { // don't set if no value was stored variableModel.setIntValue(row, Integer.valueOf(value).intValue()); } variableModel.setState(row, VariableValue.FROMFILE); } variableModel.configDone(); } else { log.error("no decoderDef element found in config file"); } // the act of loading values marks as dirty, but we're actually in synch variableModel.setFileDirty(false); }
public void processVariablesElement( Element variablesElement, VariableTableModel variableModel, String extraInclude, String extraExclude) { // handle include, exclude on this element extraInclude = extraInclude + (variablesElement.getAttributeValue("include") != null ? "," + variablesElement.getAttributeValue("include") : ""); extraExclude = extraExclude + (variablesElement.getAttributeValue("exclude") != null ? "," + variablesElement.getAttributeValue("exclude") : ""); log.debug("extraInclude /{}/, extraExclude /{}/", extraInclude, extraExclude); // load variables to table for (Element e : variablesElement.getChildren("variable")) { try { // if its associated with an inconsistent number of functions, // skip creating it if (getNumFunctions() >= 0 && e.getAttribute("minFn") != null && getNumFunctions() < e.getAttribute("minFn").getIntValue()) { continue; } // if its associated with an inconsistent number of outputs, // skip creating it if (getNumOutputs() >= 0 && e.getAttribute("minOut") != null && getNumOutputs() < Integer.valueOf(e.getAttribute("minOut").getValue()).intValue()) { continue; } // if not correct productID, skip if (!isProductIDok(e, extraInclude, extraExclude)) { continue; } } catch (Exception ex) { log.warn( "Problem parsing minFn or minOut in decoder file, variable " + e.getAttribute("item") + " exception: " + ex); } // load each row variableModel.setRow(nextCvStoreIndex++, e); } // load constants to table for (Element e : variablesElement.getChildren("constant")) { try { // if its associated with an inconsistent number of functions, // skip creating it if (getNumFunctions() >= 0 && e.getAttribute("minFn") != null && getNumFunctions() < e.getAttribute("minFn").getIntValue()) { continue; } // if its associated with an inconsistent number of outputs, // skip creating it if (getNumOutputs() >= 0 && e.getAttribute("minOut") != null && getNumOutputs() < e.getAttribute("minOut").getIntValue()) { continue; } // if not correct productID, skip if (!isProductIDok(e, extraInclude, extraExclude)) { continue; } } catch (Exception ex) { log.warn( "Problem parsing minFn or minOut in decoder file, variable " + e.getAttribute("item") + " exception: " + ex); } // load each row variableModel.setConstant(e); } for (Element e : variablesElement.getChildren("ivariable")) { try { if (log.isDebugEnabled()) { log.debug("process iVar " + e.getAttribute("CVname")); } // if its associated with an inconsistent number of functions, // skip creating it if (getNumFunctions() >= 0 && e.getAttribute("minFn") != null && getNumFunctions() < e.getAttribute("minFn").getIntValue()) { log.debug("skip due to num functions"); continue; } // if its associated with an inconsistent number of outputs, // skip creating it if (getNumOutputs() >= 0 && e.getAttribute("minOut") != null && getNumOutputs() < e.getAttribute("minOut").getIntValue()) { log.debug("skip due to num outputs"); continue; } // if not correct productID, skip if (!isProductIDok(e, extraInclude, extraExclude)) { continue; } } catch (Exception ex) { log.warn( "Problem parsing minFn or minOut in decoder file, variable " + e.getAttribute("item") + " exception: " + ex); } // load each row if (variableModel.setIndxRow(nextICvStoreIndex, e, _productID, _model, _family) == nextICvStoreIndex) { // if this one existed, we will not update the row count. nextICvStoreIndex++; } else { if (log.isDebugEnabled()) { log.debug("skipping entry for " + e.getAttribute("CVname")); } } } for (Element e : variablesElement.getChildren("variables")) { processVariablesElement(e, variableModel, extraInclude, extraExclude); } }