diff --git a/zanata-war/src/main/java/org/zanata/action/CopyTransAction.java b/zanata-war/src/main/java/org/zanata/action/CopyTransAction.java index da133d01cf..d573f43874 100644 --- a/zanata-war/src/main/java/org/zanata/action/CopyTransAction.java +++ b/zanata-war/src/main/java/org/zanata/action/CopyTransAction.java @@ -89,7 +89,7 @@ public void onCreate() { } public boolean isInProgress() { - return copyTransManager.isCopyTransRunning(getProjectIteration()); + return copyTransManager.isRunning(getProjectIteration()); } @Override @@ -121,7 +121,7 @@ public void updateCopyTrans(String action, String value) { @Override protected CopyTransTaskHandle getHandle() { return copyTransManager - .getCopyTransProcessHandle(getProjectIteration()); + .getProcessHandle(getProjectIteration()); } public HProjectIteration getProjectIteration() { @@ -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()); } @@ -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()); } @@ -179,7 +179,7 @@ public String getMaxProgress() { public String getCopyTransEstimatedTimeLeft() { CopyTransTaskHandle handle = copyTransManager - .getCopyTransProcessHandle(getProjectIteration()); + .getProcessHandle(getProjectIteration()); if (handle != null) { Optional estimatedTimeRemaining = handle.getEstimatedTimeRemaining(); diff --git a/zanata-war/src/main/java/org/zanata/action/CopyTransManager.java b/zanata-war/src/main/java/org/zanata/action/CopyTransManager.java index 344d73963f..d5ed0578f8 100644 --- a/zanata-war/src/main/java/org/zanata/action/CopyTransManager.java +++ b/zanata-war/src/main/java/org/zanata/action/CopyTransManager.java @@ -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 @@ -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) { @@ -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() + "'"); @@ -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() + "'"); @@ -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) { @@ -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 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. */ diff --git a/zanata-war/src/main/java/org/zanata/action/CopyVersionManager.java b/zanata-war/src/main/java/org/zanata/action/CopyVersionManager.java index d8ca47b6e7..3efdb43866 100644 --- a/zanata-war/src/main/java/org/zanata/action/CopyVersionManager.java +++ b/zanata-war/src/main/java/org/zanata/action/CopyVersionManager.java @@ -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; @@ -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()); @@ -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(); } diff --git a/zanata-war/src/main/java/org/zanata/action/MergeTransAction.java b/zanata-war/src/main/java/org/zanata/action/MergeTransAction.java index e59a91b6ee..6059f1e61e 100644 --- a/zanata-war/src/main/java/org/zanata/action/MergeTransAction.java +++ b/zanata-war/src/main/java/org/zanata/action/MergeTransAction.java @@ -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 diff --git a/zanata-war/src/main/java/org/zanata/action/MergeTranslationsManager.java b/zanata-war/src/main/java/org/zanata/action/MergeTranslationsManager.java index 6e2e516be6..11c827e144 100644 --- a/zanata-war/src/main/java/org/zanata/action/MergeTranslationsManager.java +++ b/zanata-war/src/main/java/org/zanata/action/MergeTranslationsManager.java @@ -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; diff --git a/zanata-war/src/main/java/org/zanata/action/ProjectHomeAction.java b/zanata-war/src/main/java/org/zanata/action/ProjectHomeAction.java index 945246494a..e13d216fd4 100644 --- a/zanata-war/src/main/java/org/zanata/action/ProjectHomeAction.java +++ b/zanata-war/src/main/java/org/zanata/action/ProjectHomeAction.java @@ -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; @@ -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; @@ -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, @@ -151,65 +158,115 @@ protected boolean include(HProjectIteration elem, private final List projectLastActivity = fetchProjectLastActivity(); + private final DecimalFormat PERCENT_FORMAT = new DecimalFormat("###.####"); + // for storing last activity date for the version private Map 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 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 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 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 fetchProjectLastActivity() { diff --git a/zanata-war/src/main/java/org/zanata/action/VersionCopyActionManager.java b/zanata-war/src/main/java/org/zanata/action/VersionCopyActionManager.java new file mode 100644 index 0000000000..d5ab637267 --- /dev/null +++ b/zanata-war/src/main/java/org/zanata/action/VersionCopyActionManager.java @@ -0,0 +1,15 @@ +package org.zanata.action; + +import org.zanata.async.AsyncTaskHandle; + +/** + * @author Alex Eng aeng@redhat.com + */ +public interface VersionCopyActionManager { + + AsyncTaskHandle getProcessHandle(String projectSlug, String versionSlug); + + boolean isRunning(String projectSlug, String versionSlug); + + void cancel(String projectSlug, String versionSlug); +} diff --git a/zanata-war/src/main/java/org/zanata/action/VersionHomeAction.java b/zanata-war/src/main/java/org/zanata/action/VersionHomeAction.java index a8488eeb15..94ebc6a625 100644 --- a/zanata-war/src/main/java/org/zanata/action/VersionHomeAction.java +++ b/zanata-war/src/main/java/org/zanata/action/VersionHomeAction.java @@ -321,8 +321,8 @@ public static class CopyVersionHandler extends CopyAction { @Override public boolean isInProgress() { - return getCopyVersionManager().isCopyVersionRunning(projectSlug, - versionSlug); + return getCopyVersionManager().isRunning(projectSlug, + versionSlug); } @Override @@ -366,8 +366,8 @@ protected CopyVersionTaskHandle getHandle() { CopyVersionManager copyVersionManager = ServiceLocator .instance().getInstance(CopyVersionManager.class); - return copyVersionManager.getCopyVersionProcessHandle(projectSlug, - versionSlug); + return copyVersionManager.getProcessHandle(projectSlug, + versionSlug); } } @@ -920,9 +920,9 @@ public String decodeDocId(String docId) { public boolean isCopyActionsRunning() { return mergeTranslationsManager.isRunning( projectSlug, versionSlug) - || copyVersionManager.isCopyVersionRunning(projectSlug, + || copyVersionManager.isRunning(projectSlug, versionSlug) || - copyTransManager.isCopyTransRunning(getVersion()); + copyTransManager.isRunning(getVersion()); } public void uploadTranslationFile(HLocale hLocale) { diff --git a/zanata-war/src/main/java/org/zanata/rest/service/CopyTransResourceService.java b/zanata-war/src/main/java/org/zanata/rest/service/CopyTransResourceService.java index 6f70390edd..9e1639fa1a 100644 --- a/zanata-war/src/main/java/org/zanata/rest/service/CopyTransResourceService.java +++ b/zanata-war/src/main/java/org/zanata/rest/service/CopyTransResourceService.java @@ -82,7 +82,7 @@ public CopyTransStatus getCopyTransStatus(String projectSlug, identity.checkPermission("copy-trans", document.getProjectIteration()); CopyTransTaskHandle processHandle = - copyTransManager.getCopyTransProcessHandle(document); + copyTransManager.getProcessHandle(document); if (processHandle == null) { throw new NoSuchEntityException( diff --git a/zanata-war/src/main/resources/messages.properties b/zanata-war/src/main/resources/messages.properties index 6957a6183b..406f1790e1 100644 --- a/zanata-war/src/main/resources/messages.properties +++ b/zanata-war/src/main/resources/messages.properties @@ -370,9 +370,9 @@ jsf.copyVersion.started=Creating version {0} from {1} jsf.copyVersion.label=Copy from previous version jsf.copyVersion.processedDocuments=Processed document {0} of {1} jsf.copyVersion.versionSettingsDisabled=Settings option is disabled temporarily due to copy version. -jsf.copyVersion.processedDocumentsAndPercent=Processed document {0} of {1} - {2}% jsf.copyVersion.cancel.confirm=Are you sure you wish to stop this copy process? This may leave this version in read-only status (can be updated by project maintainers in settings page) - +jsf.iteration.copyAction.message=[{0}] Processed {1} of {2} - {3}% +jsf.iteration.copyAction.completed=Copy of translations for {0} is completed. #------ [home] > Projects > [project-id] > Manage Maintainers ------ #------ [home] > Groups > [group-id] > Manage Maintainers ------ diff --git a/zanata-war/src/main/webapp/WEB-INF/layout/project/versions-tab.xhtml b/zanata-war/src/main/webapp/WEB-INF/layout/project/versions-tab.xhtml index acbf5e17ad..c298686e93 100644 --- a/zanata-war/src/main/webapp/WEB-INF/layout/project/versions-tab.xhtml +++ b/zanata-war/src/main/webapp/WEB-INF/layout/project/versions-tab.xhtml @@ -9,9 +9,9 @@ @@ -26,9 +26,9 @@ - + @@ -115,21 +115,21 @@
  • - - + + rendered="#{not projectHomeAction.isCopyActionsRunning(version)}"> renderVersionInfo('#{rich:clientId('version-info')}'); + rendered="#{hasActions and not projectHomeAction.isCopyActionsRunning(version)}">
  • @@ -187,8 +185,7 @@ - + @@ -196,8 +193,14 @@

    #{version.slug}

    + rendered="#{projectHomeAction.isCopyActionsRunning(version)}" + id="copy-action-message"> + #{msgs.format('jsf.iteration.copyAction.message', + projectHomeAction.getCopyActionType(version), + projectHomeAction.getCopyActionProgress(version), + projectHomeAction.getCopyActionTotal(version), + projectHomeAction.getCopyActionPercent(version))} + + rendered="#{s:hasPermission(projectHome.instance, 'update') and projectHomeAction.isCopyActionsRunning(version)}"> @@ -220,14 +223,14 @@
    + rendered="#{not projectHomeAction.isCopyActionsRunning(version)}"> + rendered="#{projectHomeAction.pageRendered and not projectHomeAction.isCopyActionsRunning(version)}"> + rendered="#{projectHomeAction.isCopyActionsRunning(version)}">