Skip to content
This repository has been archived by the owner on Nov 9, 2017. It is now read-only.

Commit

Permalink
Browse files Browse the repository at this point in the history
rhbz804871 - checkbox selection;new version entries in table...
- add checkbox for row selection
- add compare button to compare
- add latest version to history table
- add current editor value if it is different from latest version
- add flip button to flip entry comparison
- update comparison UI
  • Loading branch information
Patrick Huang committed Aug 10, 2012
1 parent b7358a5 commit 852fcd1
Show file tree
Hide file tree
Showing 11 changed files with 325 additions and 103 deletions.
Expand Up @@ -5,6 +5,7 @@
import java.util.Iterator;
import java.util.Set;

import org.zanata.common.ContentState;
import org.zanata.webtrans.client.editor.table.TargetContentsPresenter;
import org.zanata.webtrans.client.events.NotificationEvent;
import org.zanata.webtrans.client.resources.WebTransMessages;
Expand All @@ -15,6 +16,7 @@
import org.zanata.webtrans.shared.rpc.GetTranslationHistoryAction;
import org.zanata.webtrans.shared.rpc.GetTranslationHistoryResult;
import com.allen_sauer.gwt.log.client.Log;
import com.google.common.base.Objects;
import com.google.common.collect.Lists;
import com.google.gwt.user.cellview.client.ColumnSortEvent;
import com.google.gwt.user.client.rpc.AsyncCallback;
Expand Down Expand Up @@ -57,7 +59,7 @@ public TranslationHistoryPresenter(TranslationHistoryDisplay display, EventBus e

selectionModel = new MultiSelectionModel<TransHistoryItem>(TranslationHistoryDisplay.HISTORY_ITEM_PROVIDES_KEY);
selectionModel.addSelectionChangeHandler(this);
display.getHistoryTable().setSelectionModel(selectionModel);
display.setSelectionModel(selectionModel);
}

public void showTranslationHistory(final TransUnitId transUnitId)
Expand All @@ -79,6 +81,17 @@ public void onSuccess(GetTranslationHistoryResult result)
Log.info("get back " + result.getHistoryItems().size() + " items for " + transUnitId);
//here we CANNOT use listDataProvider.setList() because we need to retain the same list reference which is used by ColumnSortEvent.ListHandler
listDataProvider.getList().clear();
TransHistoryItem latest = result.getLatest();
if (latest != null)
{
//add indicator for latest version
latest.setVersionNum(messages.latestVersion(latest.getVersionNum()));
if (!Objects.equal(latest.getContents(), targetContentsPresenter.getNewTargets()))
{
listDataProvider.getList().add(new TransHistoryItem(messages.current(), targetContentsPresenter.getNewTargets(), ContentState.New, "", ""));
}
listDataProvider.getList().add(latest);
}
listDataProvider.getList().addAll(result.getHistoryItems());
}
});
Expand All @@ -88,24 +101,17 @@ public void onSuccess(GetTranslationHistoryResult result)
public void onSelectionChange(SelectionChangeEvent event)
{
Set<TransHistoryItem> historyItems = selectionModel.getSelectedSet();
if (historyItems.size() == 1)
{
//selected one. Compare against current value
TransHistoryItem selected = historyItems.iterator().next();
ArrayList<String> currentTargets = targetContentsPresenter.getNewTargets();
display.showDiff(selected.getContents(), currentTargets, messages.translationHistoryComparison(Lists.newArrayList(selected.getVersionNum())));
}
else if (historyItems.size() == 2)
if (historyItems.size() == 2)
{
//selected two. Compare against each other
Iterator<TransHistoryItem> iterator = historyItems.iterator();
TransHistoryItem one = iterator.next();
TransHistoryItem two = iterator.next();
display.showDiff(one.getContents(), two.getContents(), messages.translationHistoryComparison(Lists.newArrayList(one.getVersionNum(), two.getVersionNum())));
display.showDiff(one, two, messages.translationHistoryComparison(one.getVersionNum(), two.getVersionNum()));
}
else
{
display.resetComparison();
display.disableComparison();
}
}

Expand Down Expand Up @@ -136,9 +142,39 @@ private static enum TransHistoryVersionComparator implements Comparator<TransHis
@Override
public int compare(TransHistoryItem one, TransHistoryItem two)
{
Integer verOne = Integer.parseInt(one.getVersionNum());
Integer verTwo = Integer.parseInt(two.getVersionNum());
return verOne.compareTo(verTwo);
if (itemIsOldVersion(one) && itemIsOldVersion(two))
{
Integer verOne = Integer.parseInt(one.getVersionNum());
Integer verTwo = Integer.parseInt(two.getVersionNum());
return verOne.compareTo(verTwo);
}
if (itemIsCurrentValue(one))
{
//first is current value
return 1;
}
if (itemIsLatestVersion(one) && itemIsCurrentValue(two))
{
//first is latest version but second is current value
return -1;
}
//else first is old version and second is not old version
return -1;
}

private static boolean itemIsOldVersion(TransHistoryItem one)
{
return one.getVersionNum().matches("\\d+");
}

private static boolean itemIsLatestVersion(TransHistoryItem one)
{
return one.getVersionNum().matches("\\d+\\w+");
}

private static boolean itemIsCurrentValue(TransHistoryItem one)
{
return one.getVersionNum().matches("\\w+");
}
}
}
Expand Up @@ -384,7 +384,7 @@ public interface WebTransMessages extends Messages
@DefaultMessage("Report a problem")
String reportAProblem();

@DefaultMessage("Version No.")
@DefaultMessage("Version")
String versionNumber();

@DefaultMessage("Modified By")
Expand All @@ -396,22 +396,24 @@ public interface WebTransMessages extends Messages
@DefaultMessage("Copy")
String copy();

@DefaultMessage("Translation History Management")
String translationHistoryManagement();

@DefaultMessage("Translation History")
String translationHistory();

// @formatter:off
@Description("Tab text for translation history comparison")
@DefaultMessage("Compare ver. {0,list,string}")
@AlternateMessage({
"one", "Comparison of ver. {0,list,string} and current",
"other", "Comparison of ver. {0,list,string}"
})
String translationHistoryComparison(@PluralCount List<String> versions);
// @formatter:on
@DefaultMessage("Compare ver. {0} and {1}")
String translationHistoryComparison(String versionOne, String versionTwo);

@DefaultMessage("Select 1 or 2 entries to compare")
@DefaultMessage("Select 2 entries to compare")
String translationHistoryComparisonTitle();

@Description("latest version in translation history")
@DefaultMessage("{0} Latest")
String latestVersion(String versionNum);

@Description("current value in editor for translation history display")
@DefaultMessage("Current")
String current();

@DefaultMessage("Flip entries")
String flipComparingEntries();
}
Expand Up @@ -37,7 +37,7 @@ public DiffMatchPatchLabel()
public DiffMatchPatchLabel(String orig, String text)
{
this();
this.original = orig;
this.original = Strings.nullToEmpty(orig);
setText(text);
}

Expand All @@ -51,12 +51,8 @@ public String getText()
public void setText(String text)
{
this.plainText = text;
if (Strings.isNullOrEmpty(original))
{
return;
}
String diffHtml = Highlighting.diffAsHtml(original, plainText);
Element preElement = getElement().getFirstChildElement();
String diffHtml = Highlighting.diffAsHtml(original, plainText);
preElement.setInnerHTML(diffHtml);
}

Expand Down
@@ -0,0 +1,104 @@
package org.zanata.webtrans.client.ui;

import java.util.List;

import org.zanata.webtrans.client.resources.WebTransMessages;
import org.zanata.webtrans.shared.model.TransHistoryItem;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.resources.client.CssResource;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.uibinder.client.UiHandler;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.PushButton;
import com.google.gwt.user.client.ui.ScrollPanel;
import com.google.gwt.user.client.ui.VerticalPanel;

public class HistoryEntryComparisonPanel extends Composite
{
private static ComparisonPanelUiBinder ourUiBinder = GWT.create(ComparisonPanelUiBinder.class);
public static final int ITEM_ONE_ROW = 2;
public static final int ITEM_TWO_ROW = 3;

@UiField
Grid grid;
@UiField
WebTransMessages messages;
@UiField
VerticalPanel itemTwoPanel;
@UiField
VerticalPanel itemOnePanel;
@UiField
PushButton flipButton;
@UiField
Styles style;
private TransHistoryItem itemOne;
private TransHistoryItem itemTwo;

public HistoryEntryComparisonPanel()
{
initWidget(ourUiBinder.createAndBindUi(this));
}

public void compare(TransHistoryItem itemOne, TransHistoryItem itemTwo)
{
clear();
this.itemOne = itemOne;
this.itemTwo = itemTwo;

grid.setText(ITEM_ONE_ROW, 0, itemOne.getVersionNum());
List<String> itemOneContents = itemOne.getContents();
for (String content : itemOneContents)
{
HighlightingLabel label = new HighlightingLabel(content);
label.addStyleName(style.historyEntry());
itemOnePanel.add(label);
}

grid.setText(ITEM_TWO_ROW, 0, itemTwo.getVersionNum());
List<String> itemTwoContents = itemTwo.getContents();
for (int i = 0; i < itemOneContents.size(); i++)
{
String content1 = itemOneContents.get(i);
String content2 = itemTwoContents.get(i);
DiffMatchPatchLabel label = new DiffMatchPatchLabel(content1, content2);
label.addStyleName(style.historyEntry());
itemTwoPanel.add(label);
}
}

public void clear()
{
itemOne = null;
itemTwo = null;
grid.setText(ITEM_ONE_ROW, 0, "");
grid.setText(ITEM_TWO_ROW, 0, "");
itemOnePanel.clear();
itemTwoPanel.clear();
}

@UiHandler("flipButton")
public void onFlipButtonClick(ClickEvent event)
{
if (itemOne != null && itemTwo != null)
{
compare(itemTwo, itemOne);
}
}

interface ComparisonPanelUiBinder extends UiBinder<ScrollPanel, HistoryEntryComparisonPanel>
{
}

interface Styles extends CssResource
{

String historyEntry();

String versionLabel();

String header();
}
}
@@ -0,0 +1,55 @@
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
xmlns:g='urn:import:com.google.gwt.user.client.ui'>
<ui:with field="messages" type="org.zanata.webtrans.client.resources.WebTransMessages" />

<ui:style field="style" type="org.zanata.webtrans.client.ui.HistoryEntryComparisonPanel.Styles">

.historyEntry {
padding-left: 5px;
border-bottom: 1px dotted grey;
}

.versionLabel {
width: 15%;
background-color: #d3d3d3;
padding-left: 10px;
}

.header {
/* copy from cell table header */
border-bottom: 2px solid #6F7277;
padding: 3px 15px;
text-align: left;
color: #4B4A4A;
text-shadow: #DDF 1px 1px 0;
overflow: hidden;
}
</ui:style>

<g:ScrollPanel>
<g:Grid width="100%" height="100%" ui:field="grid">
<g:row>
<g:customCell>
<g:PushButton ui:field="flipButton" text="{messages.flipComparingEntries}"/>
</g:customCell>
<g:cell/>
</g:row>
<g:row>
<g:cell styleName="{style.header}">Version</g:cell>
<g:cell styleName="{style.header}">Contents</g:cell>
</g:row>
<g:row>
<g:cell styleName="{style.versionLabel}"/>
<g:customCell>
<g:VerticalPanel ui:field="itemOnePanel" width="100%" />
</g:customCell>
</g:row>
<g:row>
<g:cell styleName="{style.versionLabel}" />
<g:customCell>
<g:VerticalPanel ui:field="itemTwoPanel" width="100%" />
</g:customCell>
</g:row>
</g:Grid>
</g:ScrollPanel>
</ui:UiBinder>
Expand Up @@ -7,7 +7,9 @@
import com.google.gwt.user.cellview.client.Column;
import com.google.gwt.user.cellview.client.ColumnSortEvent;
import com.google.gwt.view.client.HasData;
import com.google.gwt.view.client.MultiSelectionModel;
import com.google.gwt.view.client.ProvidesKey;
import com.google.gwt.view.client.SelectionModel;
import com.google.inject.ImplementedBy;

import net.customware.gwt.presenter.client.widget.WidgetDisplay;
Expand All @@ -32,11 +34,13 @@ public Object getKey(TransHistoryItem item)

HasData<TransHistoryItem> getHistoryTable();

void showDiff(List<String> one, List<String> other, String description);
void showDiff(TransHistoryItem one, TransHistoryItem two, String description);

void resetComparison();
void disableComparison();

void addVersionSortHandler(ColumnSortEvent.ListHandler<TransHistoryItem> sortHandler);

Column<TransHistoryItem, String> getVersionColumn();

void setSelectionModel(SelectionModel<TransHistoryItem> multiSelectionModel);
}

0 comments on commit 852fcd1

Please sign in to comment.