[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