Package com.topologi.diffx.format

Examples of com.topologi.diffx.format.SmartXMLFormatter


      EventSequenceComparator rightESC = new EventSequenceComparator(rightES);

      log("top level LCS - determining top level LCS...");
      RangeDifference[] rd = RangeDifferencer.findDifferences(leftESC, rightESC);

      SmartXMLFormatter formatter = new SmartXMLFormatter(out);
      formatter.setConfig(diffxConfig);

      String rootNodeName = xml1.getNodeName();
      openResult(rootNodeName, out);

      if (rd.length==0) {
        log("top level LCS done; there are no differences!");
        addComment("No differences", formatter);
        // Note that our hashcode acts like a canonicaliser
        // - attribute order doesn't matter.

        // So just feed the leftESC into the formatter and return
        for(EventSequence es : leftES) {
            formatter.declarePrefixMapping(es.getPrefixMapping());
          formatEventSequence(es,formatter);
        }
        closeResult(rootNodeName, out);
        return;
      }

      // Debug: Raw output
      for (int i=0; i<rd.length; i++ ) {
        RangeDifference rdi = rd[i];
        log( rdi.kindString() + " left " + rdi.leftStart() + "," + rdi.leftLength()
            + " right " + rdi.rightStart() + "," + rdi.rightLength() );
      }

      log("top level LCS done; now performing child actions ...");


      int leftIdx = 0;
      for (int i=0; i<rd.length; i++ ) {

        RangeDifference rdi = rd[i];

        // No change
        if (rdi.leftStart() > leftIdx) {

          for (int k = leftIdx ; k< rdi.leftStart() ; k++) {
            // This just goes straight into the output,
            // since it is the same on the left and the right.
            // Since it is the same on both side, we handle
            // it here (on the left side), and
            // ignore it on the right
            //out.append("\n<!-- Adding same -->\n");
            addComment("Adding same", formatter);
              formatter.declarePrefixMapping(leftESC.getItem(k).getPrefixMapping());
            formatEventSequence(leftESC.getItem(k), formatter);
            //out.append("\n<!-- .. Adding same done -->");
            addComment(".. Adding same done ", formatter);

            // If we wanted to difference sdt's which
            // were treated the as the same (via their id)
            // this is where we'd have to change
            // (in addition to changing EventSequence for
            //  such things so that hashcode returned their
            //  id!)
          }
          leftIdx = rdi.leftStart();
        }

        EventSequence seq1 = new EventSequence();
        // Evil hack - doesn't work
        // seq1.mapPrefix("http://schemas.openxmlformats.org/wordprocessingml/2006/main", "w");

        for (int k = rdi.leftStart() ; k< rdi.leftEnd() ; k++) {

          if (rdi.kind()==rdi.CHANGE) {
            // This we need to diff
            //leftReport.append( "#" );
            seq1.addSequence(leftESC.getItem(k));

            // Don't forget our existing prefix mappings!
            PrefixMapping existingPM = leftESC.getItem(k).getPrefixMapping();
            addToPrefixMapping(seq1.getPrefixMapping(), existingPM);
          } else {
            // Does this happen?
            // This just goes straight into the output,
              formatter.declarePrefixMapping(leftESC.getItem(k).getPrefixMapping());
            //out.append("\n<!-- Adding same II -->\n");
            addComment("Adding same II", formatter);
            formatEventSequence(leftESC.getItem(k), formatter);
            //out.append("\n<!-- .. Adding same done -->");
            addComment(".. Adding same done", formatter);
          }
        }


        EventSequence seq2 = new EventSequence();
        // Evil hack - doesn't work
        //seq2.mapPrefix("http://schemas.openxmlformats.org/wordprocessingml/2006/main", "w");
        for (int k = rdi.rightStart() ; k< rdi.rightEnd() ; k++) {
          if (rdi.kind()==rdi.CHANGE) {
            // This is the RHS of the diff
            //rightReport.append( "#" );
            seq2.addSequence(rightESC.getItem(k));

            // Don't forget our existing prefix mappings!
            PrefixMapping existingPM = rightESC.getItem(k).getPrefixMapping();
            addToPrefixMapping(seq2.getPrefixMapping(), existingPM);

          }
        }

        leftIdx = rdi.leftEnd();

        // ok, now perform this diff
        //log("performing diff");
        //out.append("\n<!-- Differencing -->\n");
        addComment("Differencing", formatter);


        if (seq1.size() + seq2.size() < 5000) {
          mainDiff(seq1, seq2, formatter, diffxConfig);
        } else {
          for (int i1=0; i1 < seq1.size(); i1++) {
            formatter.delete(seq1.getEvent(i1));
          }
          for (int i2=0; i2 < seq2.size(); i2++) {
            formatter.insert(seq2.getEvent(i2));
          }
        }

        //out.append("\n<!-- .. Differencing done -->");
        addComment(".. Differencing done", formatter);
View Full Code Here


   * @throws IOException Should and I/O error occur
   */
  private static DiffXFormatter getFormatter(String[] args, Writer out) throws IOException {
    String formatArg = CommandLine.getParameter("-F", args);
    if (formatArg == null || "smart".equals(formatArg))
      return new SmartXMLFormatter(out);
    else if ("convenient".equals(formatArg))
      return new ConvenientXMLFormatter(out);
    else if ("basic".equals(formatArg))
      return new BasicXMLFormatter(out);
    else if ("strict".equals(formatArg))
View Full Code Here

TOP

Related Classes of com.topologi.diffx.format.SmartXMLFormatter

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.