diff --git a/pom.xml b/pom.xml
index 3a9cca0743..d980586388 100644
--- a/pom.xml
+++ b/pom.xml
@@ -31,7 +31,7 @@
1.2.1
0.22
- 3.1.0
+ 3.1.1-SNAPSHOT
3.0.2
3.0.1
diff --git a/zanata-war/src/main/java/org/zanata/dao/DocumentDAO.java b/zanata-war/src/main/java/org/zanata/dao/DocumentDAO.java
index afe624c34a..27263f63dc 100644
--- a/zanata-war/src/main/java/org/zanata/dao/DocumentDAO.java
+++ b/zanata-war/src/main/java/org/zanata/dao/DocumentDAO.java
@@ -415,7 +415,7 @@ public List getAllByProjectIteration(final String projectSlug,
session.createQuery("from HDocument d "
+ "where d.projectIteration.slug = :iterationSlug "
+ "and d.projectIteration.project.slug = :projectSlug "
- + "and d.obsolete = false " + "order by d.name");
+ + "and d.obsolete = false " + "order by d.path, d.name");
q.setParameter("iterationSlug", iterationSlug).setParameter(
"projectSlug", projectSlug);
q.setComment("DocumentDAO.getAllByProjectIteration");
diff --git a/zanata-war/src/main/java/org/zanata/service/impl/StatisticsServiceImpl.java b/zanata-war/src/main/java/org/zanata/service/impl/StatisticsServiceImpl.java
index 28f5276edf..a74a7bc895 100644
--- a/zanata-war/src/main/java/org/zanata/service/impl/StatisticsServiceImpl.java
+++ b/zanata-war/src/main/java/org/zanata/service/impl/StatisticsServiceImpl.java
@@ -345,13 +345,16 @@ public ContainerTranslationStatistics getDocStatistics(Long documentId,
TranslationStatistics wordStatistics =
result.getStats(localeId.getId(), StatUnit.WORD);
- wordStatistics.setRemainingHours(getRemainingHours(
- wordStatistics.getDraft(), wordStatistics.getUntranslated()));
+
+ double remainingHours =
+ getRemainingHours(wordStatistics.getDraft(),
+ wordStatistics.getUntranslated());
+
+ wordStatistics.setRemainingHours(remainingHours);
TranslationStatistics msgStatistics =
result.getStats(localeId.getId(), StatUnit.MESSAGE);
- msgStatistics.setRemainingHours(getRemainingHours(
- msgStatistics.getDraft(), msgStatistics.getUntranslated()));
+ msgStatistics.setRemainingHours(remainingHours);
return result;
}
diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/presenter/AppPresenter.java b/zanata-war/src/main/java/org/zanata/webtrans/client/presenter/AppPresenter.java
index 9b9c3d4bc6..47c5e5f056 100644
--- a/zanata-war/src/main/java/org/zanata/webtrans/client/presenter/AppPresenter.java
+++ b/zanata-war/src/main/java/org/zanata/webtrans/client/presenter/AppPresenter.java
@@ -460,6 +460,7 @@ public void onProjectStatsUpdated(ProjectStatsUpdatedEvent event) {
} else {
currentWordStats.add(wordStats);
}
+
refreshStatsDisplay();
}
diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/presenter/DocumentListPresenter.java b/zanata-war/src/main/java/org/zanata/webtrans/client/presenter/DocumentListPresenter.java
index 6698738da6..8d35bcee95 100644
--- a/zanata-war/src/main/java/org/zanata/webtrans/client/presenter/DocumentListPresenter.java
+++ b/zanata-war/src/main/java/org/zanata/webtrans/client/presenter/DocumentListPresenter.java
@@ -28,6 +28,11 @@
import java.util.List;
import java.util.Map.Entry;
+import javax.servlet.http.HttpServletResponse;
+
+import net.customware.gwt.presenter.client.EventBus;
+import net.customware.gwt.presenter.client.widget.WidgetPresenter;
+
import org.zanata.common.LocaleId;
import org.zanata.common.ProjectType;
import org.zanata.rest.dto.stats.ContainerTranslationStatistics;
@@ -75,6 +80,7 @@
import org.zanata.webtrans.shared.rpc.GetDownloadAllFilesProgressResult;
import org.zanata.webtrans.shared.rpc.RunDocValidationAction;
import org.zanata.webtrans.shared.rpc.RunDocValidationResult;
+
import com.allen_sauer.gwt.log.client.Log;
import com.google.common.base.Objects;
import com.google.common.base.Strings;
@@ -83,11 +89,6 @@
import com.google.gwt.user.client.ui.FormPanel.SubmitCompleteEvent;
import com.google.inject.Inject;
-import net.customware.gwt.presenter.client.EventBus;
-import net.customware.gwt.presenter.client.widget.WidgetPresenter;
-
-import javax.servlet.http.HttpServletResponse;
-
public class DocumentListPresenter extends WidgetPresenter
implements DocumentListDisplay.Listener, DocumentSelectionHandler,
UserConfigChangeHandler, TransUnitUpdatedEventHandler,
@@ -101,7 +102,7 @@ public class DocumentListPresenter extends WidgetPresenter
private HashMap nodes;
private HashMap pageRows;
- private ArrayList sortedNodes;
+ private ArrayList filteredNodes;
private final CachingDispatchAsync dispatcher;
@@ -132,7 +133,7 @@ public DocumentListPresenter(DocumentListDisplay display,
dispatcher);
nodes = new HashMap();
- sortedNodes = new ArrayList();
+ filteredNodes = new ArrayList();
pageRows = new HashMap();
localeId =
@@ -274,17 +275,17 @@ public void onRevealDisplay() {
// Auto-generated method stub
}
- public void setDocuments(List sortedList) {
- nodes = new HashMap(sortedList.size());
- sortedNodes.clear();
+ public void setDocuments(List sortedDocumentList) {
+ nodes =
+ new HashMap(sortedDocumentList.size());
+ filteredNodes.clear();
- idsByPath = new HashMap(sortedList.size());
- for (DocumentInfo doc : sortedList) {
+ idsByPath = new HashMap(sortedDocumentList.size());
+ for (DocumentInfo doc : sortedDocumentList) {
idsByPath.put(doc.getPath() + doc.getName(), doc.getId());
DocumentNode node = new DocumentNode(doc);
- node.setVisible(filter.accept(doc));
nodes.put(doc.getId(), node);
- sortedNodes.add(node);
+ filteredNodes.add(node);
}
updatePageCountAndGotoFirstPage();
}
@@ -294,13 +295,13 @@ public void queryStats() {
ArrayList queueList =
new ArrayList();
- for (int i = 0; i < sortedNodes.size();) {
+ for (int i = 0; i < filteredNodes.size();) {
int fromIndex = i;
int toIndex =
- i + BATCH_SIZE > sortedNodes.size() ? sortedNodes.size()
- : i + BATCH_SIZE;
+ i + BATCH_SIZE > filteredNodes.size() ? filteredNodes
+ .size() : i + BATCH_SIZE;
List subList =
- sortedNodes.subList(fromIndex, toIndex);
+ filteredNodes.subList(fromIndex, toIndex);
queueList.add(new GetDocumentStats(convertFromNodetoId(subList)));
i = toIndex;
}
@@ -314,7 +315,7 @@ public void queryStats() {
protected void setStatesForTest(ArrayList sortedNodes,
HashMap nodes) {
if (!GWT.isClient()) {
- this.sortedNodes = sortedNodes;
+ this.filteredNodes = sortedNodes;
this.nodes = nodes;
}
}
@@ -333,8 +334,8 @@ public void onSuccess(GetDocumentStatsResult result) {
for (Entry entry : result
.getStatsMap().entrySet()) {
DocumentInfo docInfo = getDocumentInfo(entry.getKey());
-
docInfo.setStats(entry.getValue());
+
docInfo.setLastTranslated(result.getLastTranslatedMap()
.get(entry.getKey()));
@@ -365,7 +366,7 @@ private List convertFromNodetoId(List nodes) {
private void updatePageCountAndGotoFirstPage() {
int pageCount =
- (int) Math.ceil(sortedNodes.size()
+ (int) Math.ceil(filteredNodes.size()
* 1.0
/ userOptionsService.getConfigHolder().getState()
.getDocumentListPageSize());
@@ -379,10 +380,10 @@ private void gotoPage(int page) {
.getDocumentListPageSize();
int fromIndex = (page - 1) * pageSize;
int toIndex =
- (fromIndex + pageSize) > sortedNodes.size() ? sortedNodes
+ (fromIndex + pageSize) > filteredNodes.size() ? filteredNodes
.size() : fromIndex + pageSize;
pageRows =
- display.buildContent(sortedNodes.subList(fromIndex, toIndex));
+ display.buildContent(filteredNodes.subList(fromIndex, toIndex));
display.getPageNavigation().setValue(page, false);
}
@@ -391,11 +392,10 @@ private void gotoPage(int page) {
* filter patterns will show all documents.
*/
private void runFilter() {
- sortedNodes.clear();
+ filteredNodes.clear();
for (DocumentNode docNode : nodes.values()) {
- docNode.setVisible(filter.accept(docNode.getDocInfo()));
- if (docNode.isVisible()) {
- sortedNodes.add(docNode);
+ if (filter.accept(docNode.getDocInfo())) {
+ filteredNodes.add(docNode);
}
}
updatePageCountAndGotoFirstPage();
@@ -607,10 +607,12 @@ public void cancelFileUpload() {
@Override
public void onFileUploadComplete(SubmitCompleteEvent event) {
display.closeFileUpload();
- if (event.getResults().contains(String.valueOf(HttpServletResponse.SC_OK))) {
+ if (event.getResults().contains(
+ String.valueOf(HttpServletResponse.SC_OK))) {
if (event.getResults().contains("Warnings")) {
eventBus.fireEvent(new NotificationEvent(Severity.Warning,
- "File uploaded with warnings", event.getResults(), true, null));
+ "File uploaded with warnings", event.getResults(),
+ true, null));
} else {
eventBus.fireEvent(new NotificationEvent(Severity.Info,
"File uploaded", event.getResults(), true, null));
@@ -698,9 +700,9 @@ public void onFailure(Throwable caught) {
@Override
public void sortList(String header, boolean asc) {
HeaderComparator comparator = new HeaderComparator(header);
- Collections.sort(sortedNodes, comparator);
+ Collections.sort(filteredNodes, comparator);
if (!asc) {
- Collections.reverse(sortedNodes);
+ Collections.reverse(filteredNodes);
}
gotoPage(1);
}
@@ -883,8 +885,8 @@ public void pagerValueChanged(Integer value) {
gotoPage(value);
}
- public ArrayList getSortedNodes() {
- return sortedNodes;
+ public ArrayList getFilteredNodes() {
+ return filteredNodes;
}
public void showLoading(boolean showLoading) {
diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/DocumentListTable.java b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/DocumentListTable.java
index 5bbf2f394d..47ea0986b1 100644
--- a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/DocumentListTable.java
+++ b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/DocumentListTable.java
@@ -389,15 +389,15 @@ private Widget getIncompleteWidget(DocumentInfo docInfo,
private Widget getRemainingWidget(DocumentInfo docInfo) {
String text = "0";
if (docInfo.getStats() != null) {
+ String locale =
+ userWorkspaceContext.getWorkspaceContext().getWorkspaceId()
+ .getLocaleId().getId();
text =
- messages.statusBarLabelHours(docInfo
- .getStats()
- .getStats(
- userWorkspaceContext.getWorkspaceContext()
- .getWorkspaceId().getLocaleId()
- .getId(), StatUnit.WORD)
+ messages.statusBarLabelHours(docInfo.getStats()
+ .getStats(locale, StatUnit.WORD)
.getRemainingHours());
}
+
return new InlineLabel(text);
}
@@ -474,17 +474,27 @@ public void updateStats(int row, ContainerTranslationStatistics stats,
String locale =
userWorkspaceContext.getWorkspaceContext().getWorkspaceId()
.getLocaleId().toString();
+ TranslationStatistics wordStats =
+ stats.getStats(locale, StatUnit.WORD);
+
if (statsByWords) {
- translated.setText(String.valueOf(stats.getStats(locale,
- StatUnit.WORD).getTranslatedAndApproved()));
- untranslated.setText(String.valueOf(stats.getStats(locale,
- StatUnit.WORD).getIncomplete()));
+ translated.setText(String.valueOf(wordStats
+ .getTranslatedAndApproved()));
+ untranslated.setText(String.valueOf(wordStats.getIncomplete()));
} else {
- translated.setText(String.valueOf(stats.getStats(locale,
- StatUnit.MESSAGE).getTranslatedAndApproved()));
- untranslated.setText(String.valueOf(stats.getStats(locale,
- StatUnit.MESSAGE).getIncomplete()));
+
+ TranslationStatistics msgStats =
+ stats.getStats(locale, StatUnit.MESSAGE);
+
+ translated.setText(String.valueOf(msgStats
+ .getTranslatedAndApproved()));
+ untranslated.setText(String.valueOf(msgStats.getIncomplete()));
}
+
+ HasText remainingHour =
+ (HasText) this.getWidget(row, REMAINING_COLUMN);
+ remainingHour.setText(messages.statusBarLabelHours(wordStats
+ .getRemainingHours()));
}
}
diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/DocumentNode.java b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/DocumentNode.java
index 39a76da2ff..9cf38c8bbe 100644
--- a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/DocumentNode.java
+++ b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/DocumentNode.java
@@ -24,7 +24,6 @@
public class DocumentNode {
private DocumentInfo docInfo;
- private boolean isVisible = true;
public DocumentNode(DocumentInfo doc) {
this.docInfo = doc;
@@ -33,12 +32,4 @@ public DocumentNode(DocumentInfo doc) {
public DocumentInfo getDocInfo() {
return docInfo;
}
-
- public boolean isVisible() {
- return isVisible;
- }
-
- public void setVisible(boolean isVisible) {
- this.isVisible = isVisible;
- }
}
diff --git a/zanata-war/src/test/java/org/zanata/webtrans/client/presenter/DocumentListPresenterTest.java b/zanata-war/src/test/java/org/zanata/webtrans/client/presenter/DocumentListPresenterTest.java
index 5177dfc993..05ee083378 100644
--- a/zanata-war/src/test/java/org/zanata/webtrans/client/presenter/DocumentListPresenterTest.java
+++ b/zanata-war/src/test/java/org/zanata/webtrans/client/presenter/DocumentListPresenterTest.java
@@ -169,12 +169,12 @@ public void loadDocsIntoDataProvider() {
// right amount of docs
assertThat(
"the data provider should have the same sized document list returned from the server",
- documentListPresenter.getSortedNodes().size(), is(3));
+ documentListPresenter.getFilteredNodes().size(), is(3));
ArrayList expectedDocs = buildSampleDocumentArray();
ArrayList actualDocInfos = new ArrayList();
- for (DocumentNode node : documentListPresenter.getSortedNodes()) {
+ for (DocumentNode node : documentListPresenter.getFilteredNodes()) {
assertThat(
"the data provider should have only documents that were returned from the server",
node.getDocInfo(), isIn(expectedDocs));
@@ -389,7 +389,7 @@ public void exactSearchMatchesExactOnly() {
expectedDocs.remove(2); // third doc does not match the filter
expectedDocs.remove(0); // first doc does not match the filter
ArrayList actualDocInfos = new ArrayList();
- for (DocumentNode node : documentListPresenter.getSortedNodes()) {
+ for (DocumentNode node : documentListPresenter.getFilteredNodes()) {
assertThat(
"the data provider should have only documents that exactly match the current filter",
node.getDocInfo(), isIn(expectedDocs));
@@ -400,7 +400,7 @@ public void exactSearchMatchesExactOnly() {
actualDocInfos, hasItems(expectedDocs.get(0)));
assertThat(
"the data provider list should contain exactly the number of documents matching the filter",
- documentListPresenter.getSortedNodes().size(), is(1));
+ documentListPresenter.getFilteredNodes().size(), is(1));
}
// TODO test case sensitivity option
@@ -426,7 +426,7 @@ public void commaSeparatedFilter() {
expectedDocs.remove(1); // second doc does not match any of the filter
// strings
ArrayList actualDocInfos = new ArrayList();
- for (DocumentNode node : documentListPresenter.getSortedNodes()) {
+ for (DocumentNode node : documentListPresenter.getFilteredNodes()) {
assertThat(
"the data provider should have only documents that match the current filter",
node.getDocInfo(), isIn(expectedDocs));
@@ -438,7 +438,7 @@ public void commaSeparatedFilter() {
hasItems(expectedDocs.get(0), expectedDocs.get(1)));
assertThat(
"the data provider list should contain exactly the number of documents matching the filter",
- documentListPresenter.getSortedNodes().size(), is(2));
+ documentListPresenter.getFilteredNodes().size(), is(2));
}
// TODO test case sensitive check updated from history