[jboss-cvs] jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/action ...

Christian Bauer christian at hibernate.org
Sun Sep 2 05:39:45 EDT 2007


  User: cbauer  
  Date: 07/09/02 05:39:45

  Modified:    examples/wiki/src/main/org/jboss/seam/wiki/core/action  
                        DocumentHome.java NodeHistory.java
  Log:
  New diff and improvements to history function
  
  Revision  Changes    Path
  1.25      +3 -1      jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/action/DocumentHome.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: DocumentHome.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/action/DocumentHome.java,v
  retrieving revision 1.24
  retrieving revision 1.25
  diff -u -b -r1.24 -r1.25
  --- DocumentHome.java	1 Sep 2007 08:42:49 -0000	1.24
  +++ DocumentHome.java	2 Sep 2007 09:39:45 -0000	1.25
  @@ -54,7 +54,9 @@
           }
   
           // Make a copy
  +        if (historicalCopy == null) {
           historicalCopy = new Document(getInstance());
  +        }
   
           // Wiki text parser and plugins need this
           log.debug("setting current document: " + getInstance());
  
  
  
  1.9       +61 -21    jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/action/NodeHistory.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: NodeHistory.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/action/NodeHistory.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -b -r1.8 -r1.9
  --- NodeHistory.java	25 Aug 2007 17:59:24 -0000	1.8
  +++ NodeHistory.java	2 Sep 2007 09:39:45 -0000	1.9
  @@ -1,7 +1,6 @@
   package org.jboss.seam.wiki.core.action;
   
   import org.jboss.seam.annotations.*;
  -import org.jboss.seam.annotations.web.RequestParameter;
   import org.jboss.seam.annotations.security.Restrict;
   import org.jboss.seam.annotations.datamodel.DataModel;
   import org.jboss.seam.annotations.datamodel.DataModelSelection;
  @@ -55,6 +54,11 @@
       @In(required = false) @Out(required = false, scope = ScopeType.CONVERSATION)
       private Document currentNode;
   
  +    private Document displayedHistoricalNode;
  +    public Document getDisplayedHistoricalNode() {
  +        return displayedHistoricalNode;
  +    }
  +
       private String diffResult;
   
       @Factory("historicalNodeList")
  @@ -74,38 +78,74 @@
           return null;
       }
   
  +    public void displayHistoricalRevision() {
  +        displayedHistoricalNode = selectedHistoricalNode;
  +        diffResult = null;
  +
  +        facesMessages.addFromResourceBundleOrDefault(
  +            FacesMessage.SEVERITY_INFO,
  +            "diffOldVersionDisplayed",
  +            "Showing historical revision " + selectedHistoricalNode.getRevision());
  +    }
  +
       public void diff() {
  +        displayedHistoricalNode = null;
   
           // Wiki text parser needs these nodes but we don't really care because links are not rendered and resolved
           String revision = renderWikiText( currentNode, currentNode.getParent(), currentNode.getContent() );
           String original = renderWikiText( selectedHistoricalNode, currentNode.getParent(), selectedHistoricalNode.getContent() );
   
  -        // Create diff by comparing rendered HTML
  -        Diff diff = new Diff() {
  -            protected String getDeletionStartMarker() {
  -                return "<div class=\"diffDeleted\">";
  -            }
  -
  -            protected String getDeletionEndMarker() {
  -                return "</div>";
  +        String[] a = original.split("\n");
  +        String[] b = revision.split("\n");
  +        StringBuilder result = new StringBuilder();
  +        List<Diff.Difference> differences = new Diff(a, b).diff();
  +
  +        for (Diff.Difference diff : differences) {
  +            int        delStart = diff.getDeletedStart();
  +            int        delEnd   = diff.getDeletedEnd();
  +            int        addStart = diff.getAddedStart();
  +            int        addEnd   = diff.getAddedEnd();
  +            String     type     = delEnd != Diff.NONE && addEnd != Diff.NONE ? "changed" : (delEnd == Diff.NONE ? "added" : "deleted");
  +
  +            // Info line
  +            result.append("<div class=\"diffInfo\">");
  +            result.append("From ");
  +            result.append(delStart == delEnd || delEnd == Diff.NONE ? "line" : "lines");
  +            result.append(" ");
  +            result.append(delStart);
  +            if (delEnd != Diff.NONE && delStart != delEnd) {
  +                result.append(" to ").append(delEnd);
  +            }
  +            result.append(" ").append(type).append(" to ");
  +            result.append(addStart == addEnd || addEnd == Diff.NONE ? "line" : "lines");
  +            result.append(" ");
  +            result.append(addStart);
  +            if (addEnd != Diff.NONE && addStart != addEnd) {
  +                result.append(" to ").append(addEnd);
  +            }
  +            result.append(":");
  +            result.append("</div>\n");
  +
  +            if (delEnd != Diff.NONE) {
  +                result.append("<div class=\"diffDeleted\">");
  +                for (int lnum = delStart; lnum <= delEnd; ++lnum) {
  +                    result.append(a[lnum]);
  +                }
  +                result.append("</div>");
  +                if (addEnd != Diff.NONE) {
  +                    //result.append("----------------------------").append("\n");
  +                }
  +            }
  +            if (addEnd != Diff.NONE) {
  +                result.append("<div class=\"diffAdded\">");
  +                for (int lnum = addStart; lnum <= addEnd; ++lnum) {
  +                    result.append(b[lnum]);
               }
  -
  -            protected String getAdditionStartMarker() {
  -                return "<div class=\"diffAdded\">";
  +                result.append("</div>");
               }
  -
  -            protected String getAdditionEndMarker() {
  -                return "</div>";
               }
  -        };
  -
  -        // Diff is line-based only
  -        String[] x = original.split("\r\n");
  -        String[] y = revision.split("\r\n");
  -        String[] result = diff.createDiff(x, y, "\r\n", "\r", "\n");
   
  -        // Now render the combined string array
  -        diffResult = Diff.renderWithDelimiter(result, "\r\n");
  +        diffResult = result.toString();
   
           facesMessages.addFromResourceBundleOrDefault(
               FacesMessage.SEVERITY_INFO,
  
  
  



More information about the jboss-cvs-commits mailing list