コード例 #1
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);
    }
  }