Пример #1
0
  // 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);
  }
Пример #2
0
  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();
  }
Пример #3
0
  // 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();
  }
Пример #4
0
  @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);
    }
  }
Пример #5
0
  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);
  }
Пример #6
0
  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);
    }
  }