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

Commit

Permalink
Modify version tab to include all copy actions
Browse files Browse the repository at this point in the history
  • Loading branch information
Alex Eng committed Mar 16, 2015
1 parent 2e96c94 commit 8150eac
Show file tree
Hide file tree
Showing 11 changed files with 185 additions and 93 deletions.
10 changes: 5 additions & 5 deletions zanata-war/src/main/java/org/zanata/action/CopyTransAction.java
Expand Up @@ -89,7 +89,7 @@ public void onCreate() {
}

public boolean isInProgress() {
return copyTransManager.isCopyTransRunning(getProjectIteration());
return copyTransManager.isRunning(getProjectIteration());
}

@Override
Expand Down Expand Up @@ -121,7 +121,7 @@ public void updateCopyTrans(String action, String value) {
@Override
protected CopyTransTaskHandle getHandle() {
return copyTransManager
.getCopyTransProcessHandle(getProjectIteration());
.getProcessHandle(getProjectIteration());
}

public HProjectIteration getProjectIteration() {
Expand Down Expand Up @@ -159,7 +159,7 @@ public void cancel() {
public String getCurrentProgress() {
CopyTransTaskHandle handle =
copyTransManager
.getCopyTransProcessHandle(getProjectIteration());
.getProcessHandle(getProjectIteration());
if (handle != null) {
return String.valueOf(handle.getCurrentProgress());
}
Expand All @@ -169,7 +169,7 @@ public String getCurrentProgress() {
public String getMaxProgress() {
CopyTransTaskHandle handle =
copyTransManager
.getCopyTransProcessHandle(getProjectIteration());
.getProcessHandle(getProjectIteration());
if (handle != null) {
return String.valueOf(handle.getMaxProgress());
}
Expand All @@ -179,7 +179,7 @@ public String getMaxProgress() {
public String getCopyTransEstimatedTimeLeft() {
CopyTransTaskHandle handle =
copyTransManager
.getCopyTransProcessHandle(getProjectIteration());
.getProcessHandle(getProjectIteration());
if (handle != null) {
Optional<Long> estimatedTimeRemaining =
handle.getEstimatedTimeRemaining();
Expand Down
30 changes: 23 additions & 7 deletions zanata-war/src/main/java/org/zanata/action/CopyTransManager.java
Expand Up @@ -57,7 +57,7 @@
@Scope(ScopeType.STATELESS)
@Slf4j
// TODO This class should be merged with the copy trans service (?)
public class CopyTransManager implements Serializable {
public class CopyTransManager implements VersionCopyActionManager, Serializable {
private static final long serialVersionUID = 1L;

@In
Expand All @@ -69,7 +69,7 @@ public class CopyTransManager implements Serializable {
@In
private Identity identity;

public boolean isCopyTransRunning(@Nonnull Object target) {
public boolean isRunning(@Nonnull Object target) {
CopyTransProcessKey key;

if (target instanceof HProjectIteration) {
Expand Down Expand Up @@ -101,7 +101,7 @@ public void startCopyTrans(HProjectIteration iteration) {
* The options to run copy trans with.
*/
public void startCopyTrans(HDocument document, HCopyTransOptions options) {
if (isCopyTransRunning(document)) {
if (isRunning(document)) {
throw new RuntimeException(
"Copy Trans is already running for document '"
+ document.getDocId() + "'");
Expand All @@ -120,7 +120,7 @@ public void startCopyTrans(HDocument document, HCopyTransOptions options) {
public void startCopyTrans(HProjectIteration iteration,
HCopyTransOptions options) {
// double check
if (isCopyTransRunning(iteration)) {
if (isRunning(iteration)) {
throw new RuntimeException(
"Copy Trans is already running for version '"
+ iteration.getSlug() + "'");
Expand All @@ -133,7 +133,7 @@ public void startCopyTrans(HProjectIteration iteration,
handle);
}

public CopyTransTaskHandle getCopyTransProcessHandle(@Nonnull Object target) {
public CopyTransTaskHandle getProcessHandle(@Nonnull Object target) {
CopyTransProcessKey key;

if (target instanceof HProjectIteration) {
Expand All @@ -149,16 +149,32 @@ public CopyTransTaskHandle getCopyTransProcessHandle(@Nonnull Object target) {
}

public void cancelCopyTrans(HProjectIteration iteration) {
if (isCopyTransRunning(iteration)) {
if (isRunning(iteration)) {
CopyTransProcessKey key = CopyTransProcessKey.getKey(iteration);
CopyTransTaskHandle handle =
this.getCopyTransProcessHandle(iteration);
this.getProcessHandle(iteration);
handle.cancel(true);
handle.setCancelledTime(System.currentTimeMillis());
handle.setCancelledBy(identity.getCredentials().getUsername());
}
}

@Override
public AsyncTaskHandle<Void> getProcessHandle(String projectSlug,
String versionSlug) {
return null;
}

@Override
public boolean isRunning(String projectSlug, String versionSlug) {
return false;
}

@Override
public void cancel(String projectSlug, String versionSlug) {

}

/**
* Internal class to index Copy Trans processes.
*/
Expand Down
Expand Up @@ -26,7 +26,7 @@
@Name("copyVersionManager")
@Scope(ScopeType.STATELESS)
@Slf4j
public class CopyVersionManager implements Serializable {
public class CopyVersionManager implements VersionCopyActionManager, Serializable {
@In
private AsyncTaskHandleManager asyncTaskHandleManager;

Expand Down Expand Up @@ -64,9 +64,9 @@ public void startCopyVersion(String projectSlug, String versionSlug,
* - target version identifier
*/
public void cancelCopyVersion(String projectSlug, String versionSlug) {
if (isCopyVersionRunning(projectSlug, versionSlug)) {
if (isRunning(projectSlug, versionSlug)) {
CopyVersionTaskHandle handle =
getCopyVersionProcessHandle(projectSlug, versionSlug);
getProcessHandle(projectSlug, versionSlug);
handle.cancel(true);
handle.setCancelledTime(System.currentTimeMillis());
handle.setCancelledBy(identity.getCredentials().getUsername());
Expand All @@ -75,15 +75,15 @@ public void cancelCopyVersion(String projectSlug, String versionSlug) {
}
}

public CopyVersionTaskHandle getCopyVersionProcessHandle(
String projectSlug, String versionSlug) {
public CopyVersionTaskHandle getProcessHandle(
String projectSlug, String versionSlug) {
return (CopyVersionTaskHandle) asyncTaskHandleManager
.getHandleByKey(CopyVersionKey.getKey(projectSlug, versionSlug));
}

public boolean isCopyVersionRunning(String projectSlug, String versionSlug) {
public boolean isRunning(String projectSlug, String versionSlug) {
CopyVersionTaskHandle handle =
getCopyVersionProcessHandle(projectSlug, versionSlug);
getProcessHandle(projectSlug, versionSlug);
return handle != null && !handle.isDone();
}

Expand Down
Expand Up @@ -180,9 +180,9 @@ public void startMergeTranslations() {
public boolean isCopyActionsRunning() {
return mergeTranslationsManager.isRunning(
targetProjectSlug, targetVersionSlug)
|| copyVersionManager.isCopyVersionRunning(targetProjectSlug,
targetVersionSlug) ||
copyTransManager.isCopyTransRunning(getTargetVersion());
|| copyVersionManager.isRunning(targetProjectSlug,
targetVersionSlug) ||
copyTransManager.isRunning(getTargetVersion());
}

@Override
Expand Down
Expand Up @@ -26,7 +26,8 @@
@Name("mergeTranslationsManager")
@Scope(ScopeType.STATELESS)
@Slf4j
public class MergeTranslationsManager implements Serializable {
public class MergeTranslationsManager implements VersionCopyActionManager,
Serializable {
@In
private AsyncTaskHandleManager asyncTaskHandleManager;

Expand Down
131 changes: 94 additions & 37 deletions zanata-war/src/main/java/org/zanata/action/ProjectHomeAction.java
Expand Up @@ -23,6 +23,7 @@
package org.zanata.action;

import java.io.Serializable;
import java.text.DecimalFormat;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
Expand All @@ -38,7 +39,7 @@
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.security.management.JpaIdentityStore;
import org.zanata.async.handle.CopyVersionTaskHandle;
import org.zanata.async.AsyncTaskHandle;
import org.zanata.common.EntityStatus;
import org.zanata.dao.LocaleMemberDAO;
import org.zanata.dao.ProjectDAO;
Expand Down Expand Up @@ -113,6 +114,12 @@ public class ProjectHomeAction extends AbstractSortAction implements
@In
private ConversationScopeMessages conversationScopeMessages;

@In
private MergeTranslationsManager mergeTranslationsManager;

@In
private CopyTransManager copyTransManager;

@Getter
private SortingType VersionSortingList = new SortingType(
Lists.newArrayList(SortingType.SortOption.ALPHABETICAL,
Expand Down Expand Up @@ -151,65 +158,115 @@ protected boolean include(HProjectIteration elem,
private final List<Activity> projectLastActivity =
fetchProjectLastActivity();

private final DecimalFormat PERCENT_FORMAT = new DecimalFormat("###.####");

// for storing last activity date for the version
private Map<Long, Date> versionLatestActivityDate = Maps.newHashMap();

public boolean isVersionCopying(String projectSlug, String versionSlug) {
return copyVersionManager
.isCopyVersionRunning(projectSlug, versionSlug);
}
// Check if copy-trans, copy version or merge-trans is running for given
// version
public boolean isCopyActionsRunning(HProjectIteration version) {
String versionSlug = version.getSlug();
String projectSlug = version.getProject().getSlug();

public String
getCopiedDocumentCount(String projectSlug, String versionSlug) {
CopyVersionTaskHandle handler =
copyVersionManager.getCopyVersionProcessHandle(projectSlug,
versionSlug);
return mergeTranslationsManager.isRunning(projectSlug, versionSlug) ||
copyVersionManager.isRunning(projectSlug, versionSlug) ||
copyTransManager.isRunning(version);
}

if (handler == null) {
return "0";
public String getCopyActionType(HProjectIteration version) {
VersionCopyActionManager copyActionManager =
getCopyActionManager(version.getProject().getSlug(),
version.getSlug());

if(copyActionManager == null) {
return "";
} else if(copyActionManager instanceof CopyTransManager) {
return msgs.get("jsf.CopyTrans");
} else if(copyActionManager instanceof CopyVersionManager) {
return msgs.get("jsf.CopyVersion");
} else if(copyActionManager instanceof MergeTranslationsManager) {
return msgs.get("jsf.iteration.mergeTrans");
} else {
return String.valueOf(handler.getDocumentCopied());
return "";
}
}

public void cancelCopyVersion(String projectSlug, String versionSlug) {
copyVersionManager.cancelCopyVersion(projectSlug, versionSlug);
conversationScopeMessages.setMessage(FacesMessage.SEVERITY_INFO,
msgs.format("jsf.copyVersion.Cancelled", versionSlug));
public int getCopyActionProgress(HProjectIteration version) {
VersionCopyActionManager copyActionManager =
getCopyActionManager(version.getProject().getSlug(),
version.getSlug());

if(copyActionManager == null) {
return 0;
}
AsyncTaskHandle<Void> handle =
copyActionManager.getProcessHandle(version.getProject()
.getSlug(), version.getSlug());

return handle == null ? 0 : handle.getCurrentProgress();
}

public int getCopyActionTotal(HProjectIteration version) {
VersionCopyActionManager copyActionManager =
getCopyActionManager(version.getProject().getSlug(),
version.getSlug());

if(copyActionManager == null) {
return 0;
}
AsyncTaskHandle<Void> handle =
copyActionManager.getProcessHandle(version.getProject()
.getSlug(), version.getSlug());

return handle == null ? 0 : handle.getMaxProgress();
}

public String getCopyVersionCompletePercent(String projectSlug,
String versionSlug) {
CopyVersionTaskHandle handler =
copyVersionManager.getCopyVersionProcessHandle(projectSlug,
versionSlug);
public String getCopyActionPercent(HProjectIteration version) {
VersionCopyActionManager copyActionManager =
getCopyActionManager(version.getProject().getSlug(),
version.getSlug());

if(copyActionManager == null) {
return "0";
}
AsyncTaskHandle<Void> handle =
copyActionManager.getProcessHandle(version.getProject()
.getSlug(), version.getSlug());

if (handler != null) {
if (handle != null) {
double completedPercent =
(double) handler.getCurrentProgress() / (double) handler
.getMaxProgress() * 100;
(double) handle.getCurrentProgress() / (double) handle
.getMaxProgress() * 100;
if (Double.compare(completedPercent, 100) == 0) {
conversationScopeMessages.setMessage(
FacesMessage.SEVERITY_INFO,
msgs.format("jsf.copyVersion.Completed", versionSlug));
FacesMessage.SEVERITY_INFO,
msgs.format("jsf.iteration.copyAction.completed", version.getSlug()));
}
return String.format("%1$,.2f", completedPercent);
return PERCENT_FORMAT.format(completedPercent);
} else {
return "0";
}
}

public String getCopyVersionTotalDocuments(String projectSlug,
String versionSlug) {
CopyVersionTaskHandle handler =
copyVersionManager.getCopyVersionProcessHandle(projectSlug,
versionSlug);
private VersionCopyActionManager getCopyActionManager(String projectSlug, String versionSlug) {

if (handler == null) {
return "0";
} else {
return String.valueOf(handler.getTotalDoc());
if(copyTransManager.isRunning(projectSlug, versionSlug)) {
return copyTransManager;
} else if(copyVersionManager.isRunning(projectSlug, versionSlug)) {
return copyVersionManager;
} else if(mergeTranslationsManager.isRunning(projectSlug, versionSlug)) {
return mergeTranslationsManager;
}
return null;
}

public void cancelCopyAction(String projectSlug, String versionSlug) {
VersionCopyActionManager copyActionManager =
getCopyActionManager(projectSlug, versionSlug);
copyActionManager.cancel(projectSlug, versionSlug);
conversationScopeMessages.setMessage(FacesMessage.SEVERITY_INFO,
msgs.format("jsf.copyVersion.Cancelled", versionSlug));
}

private List<Activity> fetchProjectLastActivity() {
Expand Down
@@ -0,0 +1,15 @@
package org.zanata.action;

import org.zanata.async.AsyncTaskHandle;

/**
* @author Alex Eng <a href="mailto:aeng@redhat.com">aeng@redhat.com</a>
*/
public interface VersionCopyActionManager {

AsyncTaskHandle<Void> getProcessHandle(String projectSlug, String versionSlug);

boolean isRunning(String projectSlug, String versionSlug);

void cancel(String projectSlug, String versionSlug);
}

0 comments on commit 8150eac

Please sign in to comment.