diff --git a/common/zanata-common-api/src/main/java/org/zanata/common/TranslationStats.java b/common/zanata-common-api/src/main/java/org/zanata/common/TranslationStats.java index 43ed350cda..19cfa9f20c 100644 --- a/common/zanata-common-api/src/main/java/org/zanata/common/TranslationStats.java +++ b/common/zanata-common-api/src/main/java/org/zanata/common/TranslationStats.java @@ -61,4 +61,25 @@ public void add(TranslationStats other) wordCount.add(other.getWordCount()); } + public double getRemainingWordsHours() + { + return remainingHours(wordCount.getNeedReview(), wordCount.getUntranslated()); + } + + public int getApprovedPercent(boolean byWords) + { + if (byWords) + return wordCount.getApproved() * 100 / wordCount.getTotal(); + else + return unitCount.getApproved() * 100 / unitCount.getTotal(); + } + + private double remainingHours(int fuzzyWords, int untranslatedWords) + { + double untransHours = untranslatedWords / 250.0; + double fuzzyHours = fuzzyWords / 500.0; + double remainHours = untransHours + fuzzyHours; + return remainHours; + } + } diff --git a/server/zanata-war/src/main/java/org/zanata/webtrans/client/ui/DocumentListTable.java b/server/zanata-war/src/main/java/org/zanata/webtrans/client/ui/DocumentListTable.java index 3a98f90a45..299cb4dc74 100644 --- a/server/zanata-war/src/main/java/org/zanata/webtrans/client/ui/DocumentListTable.java +++ b/server/zanata-war/src/main/java/org/zanata/webtrans/client/ui/DocumentListTable.java @@ -1,6 +1,7 @@ package org.zanata.webtrans.client.ui; import java.util.Comparator; +import java.util.HashMap; import org.zanata.webtrans.client.history.HistoryToken; import org.zanata.webtrans.client.presenter.AppPresenter.Display.MainView; @@ -55,6 +56,11 @@ else if (event.getType().equalsIgnoreCase("mouseout")) } } + // TODO this is not the ideal place to store this + // it is required since these graphs have been removed from DocumentNode so + // that DocumentListPresenter can be unit tested (JRE). + private static HashMap statsWidgets = new HashMap(); + private static Column getFolderColumn(final Resources resources) { TextColumn folderColumn = new TextColumn() @@ -84,14 +90,25 @@ public String getValue(DocumentNode object) return docColumn; } - private static Column getStatisticColumn(final Resources resources) + private static Column getStatisticColumn(final Resources resources, final WebTransMessages messages) { Column statisticColumn = new Column(new TransUnitCountGraphCell()) { @Override - public TransUnitCountGraph getValue(DocumentNode object) + public TransUnitCountGraph getValue(DocumentNode docNode) { - return object.getTransUnitCountGraph(); + long id = docNode.getDocInfo().getId().getId(); + if (!statsWidgets.containsKey(id)) + { + TransUnitCountGraph graph = new TransUnitCountGraph(messages); + graph.setStats(docNode.getDocInfo().getStats()); + statsWidgets.put(id, graph); + } + else + { + statsWidgets.get(id).setStats(docNode.getDocInfo().getStats()); + } + return statsWidgets.get(id); } }; statisticColumn.setSortable(true); @@ -105,7 +122,7 @@ private static Column getTranslatedColumn(final WebTransMe @Override public String getValue(DocumentNode object) { - return String.valueOf(object.getTransUnitCountGraph().getWordsApproved()); + return String.valueOf(object.getDocInfo().getStats().getWordCount().getApproved()); } }; translatedColumn.setSortable(true); @@ -119,7 +136,8 @@ private static Column getUntranslatedColumn(final WebTrans @Override public String getValue(DocumentNode object) { - return String.valueOf(object.getTransUnitCountGraph().getWordsUntranslated()); + return String.valueOf(object.getDocInfo().getStats().getWordCount().getUntranslated()); + } }; unTranslatedColumn.setSortable(true); @@ -133,7 +151,7 @@ private static Column getRemainingColumn(final WebTransMes @Override public String getValue(DocumentNode object) { - return messages.statusBarLabelHours(object.getTransUnitCountGraph().getRemainingWordsHours()); + return messages.statusBarLabelHours(object.getDocInfo().getStats().getRemainingWordsHours()); } }; remainingColumn.setSortable(true); @@ -177,7 +195,7 @@ public void onSelectionChange(SelectionChangeEvent event) final Column folderColumn = getFolderColumn(resources); final Column documentColumn = getDocumentColumn(resources); - final Column statisticColumn = getStatisticColumn(resources); + final Column statisticColumn = getStatisticColumn(resources, messages); final Column translatedColumn = getTranslatedColumn(messages); final Column untranslatedColumn = getUntranslatedColumn(messages); final Column remainingColumn = getRemainingColumn(messages); @@ -215,13 +233,16 @@ public int compare(DocumentNode o1, DocumentNode o2) { public int compare(DocumentNode o1, DocumentNode o2) { - if (o1.getTransUnitCountGraph().getApprovedPercent() == o2.getTransUnitCountGraph().getApprovedPercent()) + // StatsByWords is always true for TransUnitCountGraph used in this + // table + boolean statsByWords = true; + if (o1.getDocInfo().getStats().getApprovedPercent(statsByWords) == o2.getDocInfo().getStats().getApprovedPercent(statsByWords)) { return 0; } if (o1 != null && o2 != null) { - return o1.getTransUnitCountGraph().getApprovedPercent() > o2.getTransUnitCountGraph().getApprovedPercent() ? 1 : -1; + return o1.getDocInfo().getStats().getApprovedPercent(statsByWords) > o2.getDocInfo().getStats().getApprovedPercent(statsByWords) ? 1 : -1; } return -1; } @@ -230,13 +251,13 @@ public int compare(DocumentNode o1, DocumentNode o2) { public int compare(DocumentNode o1, DocumentNode o2) { - if (o1.getTransUnitCountGraph().getWordsApproved() == o2.getTransUnitCountGraph().getWordsApproved()) + if (o1.getDocInfo().getStats().getWordCount().getApproved() == o2.getDocInfo().getStats().getWordCount().getApproved()) { return 0; } if (o1 != null && o2 != null) { - return o1.getTransUnitCountGraph().getWordsApproved() > o2.getTransUnitCountGraph().getWordsApproved() ? 1 : -1; + return o1.getDocInfo().getStats().getWordCount().getApproved() > o2.getDocInfo().getStats().getWordCount().getApproved() ? 1 : -1; } return -1; } @@ -245,13 +266,13 @@ public int compare(DocumentNode o1, DocumentNode o2) { public int compare(DocumentNode o1, DocumentNode o2) { - if (o1.getTransUnitCountGraph().getWordsUntranslated() == o2.getTransUnitCountGraph().getWordsUntranslated()) + if (o1.getDocInfo().getStats().getWordCount().getUntranslated() == o2.getDocInfo().getStats().getWordCount().getUntranslated()) { return 0; } if (o1 != null && o2 != null) { - return o1.getTransUnitCountGraph().getWordsUntranslated() > o2.getTransUnitCountGraph().getWordsUntranslated() ? 1 : -1; + return o1.getDocInfo().getStats().getWordCount().getUntranslated() > o2.getDocInfo().getStats().getWordCount().getUntranslated() ? 1 : -1; } return -1; } @@ -260,13 +281,13 @@ public int compare(DocumentNode o1, DocumentNode o2) { public int compare(DocumentNode o1, DocumentNode o2) { - if (o1.getTransUnitCountGraph().getRemainingWordsHours() == o2.getTransUnitCountGraph().getRemainingWordsHours()) + if (o1.getDocInfo().getStats().getRemainingWordsHours() == o2.getDocInfo().getStats().getRemainingWordsHours()) { return 0; } if (o1 != null && o2 != null) { - return o1.getTransUnitCountGraph().getRemainingWordsHours() > o2.getTransUnitCountGraph().getRemainingWordsHours() ? 1 : -1; + return o1.getDocInfo().getStats().getRemainingWordsHours() > o2.getDocInfo().getStats().getRemainingWordsHours() ? 1 : -1; } return -1; } diff --git a/server/zanata-war/src/main/java/org/zanata/webtrans/client/ui/DocumentNode.java b/server/zanata-war/src/main/java/org/zanata/webtrans/client/ui/DocumentNode.java index becc6e406e..c3edb94393 100644 --- a/server/zanata-war/src/main/java/org/zanata/webtrans/client/ui/DocumentNode.java +++ b/server/zanata-war/src/main/java/org/zanata/webtrans/client/ui/DocumentNode.java @@ -33,7 +33,6 @@ public class DocumentNode implements TransUnitUpdatedEventHandler { - private TransUnitCountGraph transUnitCountGraph; private ListDataProvider dataProvider; private DocumentInfo docInfo; private boolean isVisible = true; @@ -43,10 +42,8 @@ public class DocumentNode implements TransUnitUpdatedEventHandler public DocumentNode(WebTransMessages messages, DocumentInfo doc, EventBus eventBus, ListDataProvider dataProvider) { this.messages = messages; - this.transUnitCountGraph = new TransUnitCountGraph(messages); this.dataProvider = dataProvider; this.docInfo = doc; - transUnitCountGraph.setStats(docInfo.getStats()); } @Override @@ -60,7 +57,8 @@ public void onTransUnitUpdated(TransUnitUpdatedEvent event) unitCount.increment(event.getTransUnit().getStatus()); wordCount.decrement(event.getPreviousStatus(), event.getWordCount()); wordCount.increment(event.getTransUnit().getStatus(), event.getWordCount()); - updateGraphStatus(); + // TODO consider removing this and doing this from a higher level. + dataProvider.refresh(); } } public DocumentInfo getDocInfo() @@ -68,17 +66,6 @@ public DocumentInfo getDocInfo() return docInfo; } - public TransUnitCountGraph getTransUnitCountGraph() - { - return transUnitCountGraph; - } - - private void updateGraphStatus() - { - transUnitCountGraph.setStats(docInfo.getStats()); - dataProvider.refresh(); - } - public boolean isVisible() { return isVisible; diff --git a/server/zanata-war/src/main/java/org/zanata/webtrans/client/ui/TransUnitCountBar.java b/server/zanata-war/src/main/java/org/zanata/webtrans/client/ui/TransUnitCountBar.java index 02f093fa18..df972d14be 100644 --- a/server/zanata-war/src/main/java/org/zanata/webtrans/client/ui/TransUnitCountBar.java +++ b/server/zanata-war/src/main/java/org/zanata/webtrans/client/ui/TransUnitCountBar.java @@ -15,6 +15,7 @@ import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.Event; +import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.Label; @@ -48,8 +49,6 @@ interface TransUnitCountBarUiBinder extends UiBinder private final WebTransMessages messages; - private int approvedPercent = 0; - private int totalWidth = 100; private boolean isGraph = false; @@ -139,23 +138,22 @@ public void refresh() int unfinishedPx = untranslated * 100 / total * width / totalWidth; setupLayoutPanel(0.0, 0, 0.0, completePx, completePx, inProgressPx, completePx + inProgressPx, unfinishedPx); - setLabelText(total, approved, needReview, untranslated); + setLabelText(); } int duration = isGraph ? 0 : 1000; refreshDisplay(duration); } - private void setLabelText(int total, int approved, int needReview, int untranslated) + private void setLabelText() { - approvedPercent = approved * 100 / total; switch (labelFormat) { case PERCENT_COMPLETE_HRS: - label.setText(messages.statusBarPercentageHrs(approvedPercent, getRemainingWordsHours())); + label.setText(messages.statusBarPercentageHrs(stats.getApprovedPercent(statsByWords), stats.getRemainingWordsHours())); break; case PERCENT_COMPLETE: - label.setText(messages.statusBarLabelPercentage(approvedPercent)); + label.setText(messages.statusBarLabelPercentage(stats.getApprovedPercent(statsByWords))); break; default: label.setText("error: " + labelFormat.name()); @@ -164,7 +162,7 @@ private void setLabelText(int total, int approved, int needReview, int untransla public int getApprovedPercent() { - return approvedPercent; + return stats.getApprovedPercent(statsByWords); } private void refreshDisplay(int duration) @@ -216,19 +214,6 @@ public int getUnitUntranslated() return stats.getUnitCount().get(ContentState.New); } - public double getRemainingWordsHours() - { - return remainingHours(getWordsNeedReview(), getWordsUntranslated()); - } - - private double remainingHours(int fuzzyWords, int untranslatedWords) - { - double untransHours = untranslatedWords / 250.0; - double fuzzyHours = fuzzyWords / 500.0; - double remainHours = untransHours + fuzzyHours; - return remainHours; - } - @Override public void setStats(TranslationStats stats) {