diff --git a/server/services/src/main/java/org/zanata/service/TransMemoryMergeService.java b/server/services/src/main/java/org/zanata/service/TransMemoryMergeService.java index 22867416e8c..c6e4a8e88d1 100644 --- a/server/services/src/main/java/org/zanata/service/TransMemoryMergeService.java +++ b/server/services/src/main/java/org/zanata/service/TransMemoryMergeService.java @@ -24,6 +24,8 @@ import java.util.List; import java.util.concurrent.Future; +import javax.annotation.Nonnull; + import org.zanata.async.handle.MergeTranslationsTaskHandle; import org.zanata.async.handle.TransMemoryMergeTaskHandle; import org.zanata.rest.dto.VersionTMMerge; @@ -56,12 +58,8 @@ Future> executeMergeAsync(TransMemory /** * TM merge for a project version - * @param versionId - * @param mergeRequest - * @param handle - * @return */ Future startMergeTranslations(Long versionId, VersionTMMerge mergeRequest, - MergeTranslationsTaskHandle handle); + @Nonnull MergeTranslationsTaskHandle asyncTaskHandle); } diff --git a/server/services/src/main/java/org/zanata/service/tm/merge/TransMemoryMergeServiceImpl.java b/server/services/src/main/java/org/zanata/service/tm/merge/TransMemoryMergeServiceImpl.java index 8adf95d291f..5eb158136b7 100644 --- a/server/services/src/main/java/org/zanata/service/tm/merge/TransMemoryMergeServiceImpl.java +++ b/server/services/src/main/java/org/zanata/service/tm/merge/TransMemoryMergeServiceImpl.java @@ -32,6 +32,7 @@ import java.util.function.Consumer; import java.util.stream.Collectors; +import javax.annotation.Nonnull; import javax.annotation.Nullable; import javax.enterprise.context.RequestScoped; import javax.enterprise.event.Event; @@ -284,16 +285,12 @@ public Future> executeMergeAsync(TransMemoryMergeRequest /** * TM Merge for an entire project version - * @param targetVersionId - * @param mergeRequest - * @param handle - * @return */ @Async @Override public Future startMergeTranslations(Long targetVersionId, VersionTMMerge mergeRequest, - MergeTranslationsTaskHandle handle) { + @Nonnull MergeTranslationsTaskHandle taskHandle) { InternalTMSource internalTMSource = mergeRequest.getInternalTMSource(); List fromVersionIds = internalTMSource.getFilteredProjectVersionIds(); if (internalTMSource.getChoice() == SelectSome @@ -335,22 +332,18 @@ public Future startMergeTranslations(Long targetVersionId, return AsyncTaskResult.completed(); } + taskHandle.setTriggeredBy(authenticatedAccount.getUsername()); + taskHandle.setMaxProgress((int) activeTextFlows); + taskHandle.setTotalTextFlows(activeTextFlows); - Optional - taskHandleOpt = Optional.ofNullable(handle); - if (taskHandleOpt.isPresent()) { - MergeTranslationsTaskHandle handle1 = taskHandleOpt.get(); - handle1.setTriggeredBy(authenticatedAccount.getUsername()); - handle1.setMaxProgress((int) activeTextFlows); - handle1.setTotalTextFlows(activeTextFlows); - } Stopwatch overallStopwatch = Stopwatch.createStarted(); log.info("merge translations from TM start: from {} to {}", mergeRequest.getInternalTMSource(), targetVersionStr); int textFlowIndex = 0; + boolean cancelled = false; - while (textFlowIndex < activeTextFlows) { + while (textFlowIndex < activeTextFlows && !(cancelled = taskHandle.isCancelled())) { // Get the next batch of text flows. They may or may not need // translation, but they won't change during the TM merge // (unless someone uploads a source document). We will be @@ -384,13 +377,12 @@ public Future startMergeTranslations(Long targetVersionId, charCount, wordCount, 1); } } - taskHandleOpt.ifPresent( - mergeTranslationsTaskHandle -> mergeTranslationsTaskHandle - .increaseProgress(textFlowsIds.size())); + taskHandle.increaseProgress(textFlowsIds.size()); textFlowIndex += BATCH_SIZE; } versionStateCacheImpl.clearVersionStatsCache(targetVersionId); - log.info("merge translation from TM end: from {} to {}, {}", + log.info("{} merge translations from TM: from {} to {}, {}", + cancelled ? "CANCELLED" : "COMPLETED", mergeRequest.getInternalTMSource(), targetVersionStr, overallStopwatch);