modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/drift/DriftCarouselView.java | 66 ----- modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/drift/DriftDetailsView.java | 57 ----- modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/drift/util/DiffUtility.java | 112 ++++++++++ 3 files changed, 122 insertions(+), 113 deletions(-)
New commits: commit 1156454c955bb49b9faf5ff413ee675c068b2863 Author: Ian Springer ian.springer@redhat.com Date: Wed Dec 14 18:07:25 2011 -0500
[BZ 765593] escape HTML in unified diff output (https://bugzilla.redhat.com/show_bug.cgi?id=765593) (cherry picked from commit 6e70db5abb0b3db8b93730c27695503a461f8f40)
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/drift/DriftCarouselView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/drift/DriftCarouselView.java index bea8c99..10545bb 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/drift/DriftCarouselView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/drift/DriftCarouselView.java @@ -20,17 +20,13 @@ package org.rhq.enterprise.gui.coregui.client.drift;
import java.util.ArrayList; import java.util.LinkedHashMap; -import java.util.List;
import com.google.gwt.user.client.rpc.AsyncCallback; import com.smartgwt.client.data.Criteria; import com.smartgwt.client.data.Record; import com.smartgwt.client.widgets.Canvas; -import com.smartgwt.client.widgets.form.DynamicForm; -import com.smartgwt.client.widgets.form.fields.CanvasItem; import com.smartgwt.client.widgets.form.fields.SelectItem; import com.smartgwt.client.widgets.form.fields.TextItem; -import com.smartgwt.client.widgets.layout.VLayout;
import org.rhq.core.domain.common.EntityContext; import org.rhq.core.domain.criteria.DriftDefinitionCriteria; @@ -45,12 +41,12 @@ import org.rhq.enterprise.gui.coregui.client.CoreGUI; import org.rhq.enterprise.gui.coregui.client.DetailsView; import org.rhq.enterprise.gui.coregui.client.ImageManager; import org.rhq.enterprise.gui.coregui.client.LinkManager; -import org.rhq.enterprise.gui.coregui.client.PopupWindow; import org.rhq.enterprise.gui.coregui.client.ViewPath; import org.rhq.enterprise.gui.coregui.client.components.buttons.BackButton; import org.rhq.enterprise.gui.coregui.client.components.carousel.BookmarkableCarousel; import org.rhq.enterprise.gui.coregui.client.components.form.EnumSelectItem; import org.rhq.enterprise.gui.coregui.client.drift.DriftCarouselMemberView.DriftSelectionListener; +import org.rhq.enterprise.gui.coregui.client.drift.util.DiffUtility; import org.rhq.enterprise.gui.coregui.client.gwt.DriftGWTServiceAsync; import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup; import org.rhq.enterprise.gui.coregui.client.util.RPCDataSource; @@ -266,7 +262,6 @@ public class DriftCarouselView extends BookmarkableCarousel implements DetailsVi addCarouselAction("Compare", MSG.common_button_compare(), null, new CarouselAction() {
public void executeAction(Object actionValue) { - Record record1 = selectedRecords.get(0); Record record2 = selectedRecords.get(1); final String path = record1.getAttribute(DriftDataSource.ATTR_PATH); @@ -280,68 +275,16 @@ public class DriftCarouselView extends BookmarkableCarousel implements DetailsVi
GWTServiceLookup.getDriftService().generateUnifiedDiffByIds(diffOldId, diffNewId, new AsyncCallback<FileDiffReport>() { - @Override public void onFailure(Throwable caught) { - CoreGUI.getErrorHandler().handleError("Failed to generate diff", caught); + CoreGUI.getErrorHandler().handleError("Failed to generate diff.", caught); }
- @Override public void onSuccess(FileDiffReport diffReport) { - String diffContents = toHtml(diffReport.getDiff(), 1, 2); - LocatableWindow window = createDiffViewer(diffContents, path, 1, 2); + String diffContents = DiffUtility.formatAsHtml(diffReport.getDiff(), 1, 2); + LocatableWindow window = DiffUtility.createDiffViewerWindow(diffContents, path, 1, 2); window.show(); } - - private String toHtml(List<String> deltas, int oldVersion, int newVersion) { - StringBuilder diff = new StringBuilder(); - diff.append("<font color="red">").append(deltas.get(0)).append(":").append(oldVersion) - .append("</font><br/>"); - diff.append("<font color="green">").append(deltas.get(1)).append(":").append(newVersion) - .append("</font><br/>"); - - for (String line : deltas.subList(2, deltas.size())) { - if (line.startsWith("@@")) { - diff.append("<font color="purple">").append(line).append("</font><br/>"); - } else if (line.startsWith("-")) { - diff.append("<font color="red">").append(line).append("</font><br/>"); - } else if (line.startsWith("+")) { - diff.append("<font color="green">").append(line).append("</font><br/>"); - } else { - diff.append(line).append("<br/>"); - } - } - return diff.toString(); - } - - private LocatableWindow createDiffViewer(String contents, String path, int oldVersion, - int newVersion) { - VLayout layout = new VLayout(); - DynamicForm form = new DynamicForm(); - form.setWidth100(); - form.setHeight100(); - - CanvasItem canvasItem = new CanvasItem(); - canvasItem.setColSpan(2); - canvasItem.setShowTitle(false); - canvasItem.setWidth("*"); - canvasItem.setHeight("*"); - - Canvas canvas = new Canvas(); - canvas.setContents(contents); - canvasItem.setCanvas(canvas); - - form.setItems(canvasItem); - layout.addMember(form); - - PopupWindow window = new PopupWindow("diffViewer", layout); - window.setTitle(path + ":" + oldVersion + ":" + newVersion); - window.setIsModal(false); - - return window; - } - }); - }
public boolean isEnabled() { @@ -354,6 +297,7 @@ public class DriftCarouselView extends BookmarkableCarousel implements DetailsVi
return false; } + });
super.configureCarousel(); diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/drift/DriftDetailsView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/drift/DriftDetailsView.java index 1dcf23b..e42de69 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/drift/DriftDetailsView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/drift/DriftDetailsView.java @@ -47,6 +47,7 @@ import org.rhq.core.domain.drift.FileDiffReport; import org.rhq.enterprise.gui.coregui.client.CoreGUI; import org.rhq.enterprise.gui.coregui.client.PopupWindow; import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter; +import org.rhq.enterprise.gui.coregui.client.drift.util.DiffUtility; import org.rhq.enterprise.gui.coregui.client.gwt.DriftGWTServiceAsync; import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup; import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableDynamicForm; @@ -287,51 +288,23 @@ public class DriftDetailsView extends LocatableVLayout { return window; }
- private LocatableWindow createDiffViewer(String contents, String path, int oldVersion, int newVersion) { - VLayout layout = new VLayout(); - DynamicForm form = new DynamicForm(); - form.setWidth100(); - form.setHeight100(); - - CanvasItem canvasItem = new CanvasItem(); - canvasItem.setColSpan(2); - canvasItem.setShowTitle(false); - canvasItem.setWidth("*"); - canvasItem.setHeight("*"); - - Canvas canvas = new Canvas(); - canvas.setContents(contents); - canvasItem.setCanvas(canvas); - - form.setItems(canvasItem); - layout.addMember(form); - - PopupWindow window = new PopupWindow("diffViewer", layout); - window.setTitle(path + ":" + oldVersion + ":" + newVersion); - window.setIsModal(false); - - return window; - } - private LinkItem createViewDiffLink(final Drift<?, ?> drift, final int oldVersion) { LinkItem viewDiffLink = new LinkItem("viewDiff"); viewDiffLink.setLinkTitle("(view diff)"); viewDiffLink.setShowTitle(false);
viewDiffLink.addClickHandler(new ClickHandler() { - @Override public void onClick(ClickEvent clickEvent) { GWTServiceLookup.getDriftService().generateUnifiedDiff(drift, new AsyncCallback<FileDiffReport>() { - @Override public void onFailure(Throwable caught) { - CoreGUI.getErrorHandler().handleError("Failed to generate diff", caught); + CoreGUI.getErrorHandler().handleError("Failed to generate diff.", caught); }
- @Override public void onSuccess(FileDiffReport diffReport) { int newVersion = drift.getChangeSet().getVersion(); - String diffContents = toHtml(diffReport.getDiff(), oldVersion, newVersion); - LocatableWindow window = createDiffViewer(diffContents, drift.getPath(), oldVersion, newVersion); + String diffContents = DiffUtility.formatAsHtml(diffReport.getDiff(), oldVersion, newVersion); + LocatableWindow window = DiffUtility.createDiffViewerWindow(diffContents, drift.getPath(), + oldVersion, newVersion); window.show(); } }); @@ -340,24 +313,4 @@ public class DriftDetailsView extends LocatableVLayout { return viewDiffLink; }
- private String toHtml(List<String> deltas, int oldVersion, int newVersion) { - StringBuilder diff = new StringBuilder(); - diff.append("<font color="red">").append(deltas.get(0)).append(":").append(oldVersion).append("</font><br/>"); - diff.append("<font color="green">").append(deltas.get(1)).append(":").append(newVersion).append( - "</font><br/>"); - - for (String line : deltas.subList(2, deltas.size())) { - if (line.startsWith("@@")) { - diff.append("<font color="purple">").append(line).append("</font><br/>"); - } else if (line.startsWith("-")) { - diff.append("<font color="red">").append(line).append("</font><br/>"); - } else if (line.startsWith("+")) { - diff.append("<font color="green">").append(line).append("</font><br/>"); - } else { - diff.append(line).append("<br/>"); - } - } - return diff.toString(); - } - } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/drift/util/DiffUtility.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/drift/util/DiffUtility.java new file mode 100644 index 0000000..dc3fbb0 --- /dev/null +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/drift/util/DiffUtility.java @@ -0,0 +1,112 @@ +/* + * RHQ Management Platform + * Copyright (C) 2011 Red Hat, Inc. + * All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ +package org.rhq.enterprise.gui.coregui.client.drift.util; + +import java.util.List; + +import com.smartgwt.client.widgets.Canvas; +import com.smartgwt.client.widgets.form.DynamicForm; +import com.smartgwt.client.widgets.form.fields.CanvasItem; +import com.smartgwt.client.widgets.layout.VLayout; +import org.rhq.enterprise.gui.coregui.client.PopupWindow; +import org.rhq.enterprise.gui.coregui.client.util.StringUtility; +import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableWindow; + +/** + * A collection of utility methods for working with unified diffs. + */ +public class DiffUtility { + + /** + * Formats the specified unified diff output as HTML. + * + * @param deltas + * @param oldVersion + * @param newVersion + * + * @return the specified unified diff output formatted as HTML + */ + public static String formatAsHtml(List<String> deltas, int oldVersion, int newVersion) { + StringBuilder html = new StringBuilder(); + + String originalFilename = deltas.get(0); + html.append("<b>").append(StringUtility.escapeHtml(originalFilename)). + append(":").append(oldVersion).append("</b><br/>"); + String revisedFilename = deltas.get(1); + html.append("<b>").append(StringUtility.escapeHtml(revisedFilename)). + append(":").append(newVersion).append("</b><br/>"); + + List<String> lines = deltas.subList(2, deltas.size()); + for (String line : lines) { + String escapedLine = StringUtility.escapeHtml(line); + if (line.startsWith("@@")) { + html.append("<font color="blue">").append(escapedLine).append("</font>"); + } else if (line.startsWith("-")) { + html.append("<font color="red">").append(escapedLine).append("</font>"); + } else if (line.startsWith("+")) { + html.append("<font color="green">").append(escapedLine).append("</font>"); + } else { + html.append(escapedLine); + } + html.append("<br/>"); + } + + return html.toString(); + } + + /** + * Create a non-modal window containing unified diff HTML. + * + * @param contents + * @param path + * @param oldVersion + * @param newVersion + * + * @return a non-modal window containing unified diff HTML + */ + public static LocatableWindow createDiffViewerWindow(String contents, String path, int oldVersion, int newVersion) { + VLayout layout = new VLayout(); + DynamicForm form = new DynamicForm(); + form.setWidth100(); + form.setHeight100(); + + CanvasItem canvasItem = new CanvasItem(); + canvasItem.setColSpan(2); + canvasItem.setShowTitle(false); + canvasItem.setWidth("*"); + canvasItem.setHeight("*"); + + Canvas canvas = new Canvas(); + canvas.setContents(contents); + canvasItem.setCanvas(canvas); + + form.setItems(canvasItem); + layout.addMember(form); + + PopupWindow window = new PopupWindow("diffViewer", layout); + window.setTitle(path + ":" + oldVersion + ":" + newVersion); + window.setIsModal(false); + + return window; + } + + private DiffUtility() { + } + +}
rhq-commits@lists.fedorahosted.org