From ae9cd703553dbb63b1cb6e1f8d9cf760084620a1 Mon Sep 17 00:00:00 2001 From: Alex Eng Date: Thu, 25 Jun 2015 11:40:25 +1000 Subject: [PATCH] Add revision comment from TM Merge action --- .../org/zanata/model/HTextFlowTarget.java | 1 + .../impl/TransMemoryMergeServiceImpl.java | 9 +- .../service/impl/TranslationServiceImpl.java | 13 ++- .../org/zanata/util/MessageGenerator.java | 82 +++++++++++++------ .../shared/model/TransUnitUpdateRequest.java | 13 +++ 5 files changed, 90 insertions(+), 28 deletions(-) diff --git a/zanata-model/src/main/java/org/zanata/model/HTextFlowTarget.java b/zanata-model/src/main/java/org/zanata/model/HTextFlowTarget.java index ce95bcab76..1afc57a5e8 100644 --- a/zanata-model/src/main/java/org/zanata/model/HTextFlowTarget.java +++ b/zanata-model/src/main/java/org/zanata/model/HTextFlowTarget.java @@ -416,6 +416,7 @@ public void clear() { setLastModifiedBy(null); setTranslator(null); setReviewer(null); + setRevisionComment(null); } protected boolean logPersistence() { diff --git a/zanata-war/src/main/java/org/zanata/service/impl/TransMemoryMergeServiceImpl.java b/zanata-war/src/main/java/org/zanata/service/impl/TransMemoryMergeServiceImpl.java index 90f8c251b4..74c67a177b 100644 --- a/zanata-war/src/main/java/org/zanata/service/impl/TransMemoryMergeServiceImpl.java +++ b/zanata-war/src/main/java/org/zanata/service/impl/TransMemoryMergeServiceImpl.java @@ -42,6 +42,7 @@ import org.zanata.service.TranslationMemoryService; import org.zanata.service.TranslationService; import org.zanata.util.Event; +import org.zanata.util.MessageGenerator; import org.zanata.webtrans.server.rpc.TransMemoryMergeStatusResolver; import org.zanata.webtrans.shared.model.TransMemoryDetails; import org.zanata.webtrans.shared.model.TransMemoryResultItem; @@ -182,13 +183,14 @@ private TransUnitUpdateRequest createRequest(TransMemoryMerge action, Long tmSourceId = tmResult.getSourceIdList().get(0); ContentState statusToSet; - String comment; + String comment, revisionComment; if (tmResult.getMatchType() == TransMemoryResultItem.MatchType.Imported) { TransMemoryUnit tu = transMemoryUnitDAO.findById(tmSourceId); statusToSet = TransMemoryMergeStatusResolver.newInstance().decideStatus( action, tmResult, oldTarget); comment = buildTargetComment(tu); + revisionComment = MessageGenerator.getTMMergeMessage(tu); } else { HTextFlow tmSource = textFlowDAO.findById(tmSourceId, false); TransMemoryDetails tmDetail = @@ -199,16 +201,19 @@ private TransUnitUpdateRequest createRequest(TransMemoryMerge action, action, hTextFlowToBeFilled, tmDetail, tmResult, oldTarget); comment = buildTargetComment(tmDetail); + revisionComment = MessageGenerator.getTMMergeMessage(tmDetail); } if (statusToSet != null) { TransUnitUpdateRequest unfilledRequest = requestMap.get(hTextFlowToBeFilled.getId()); + TransUnitUpdateRequest request = new TransUnitUpdateRequest( unfilledRequest.getTransUnitId(), tmResult.getTargetContents(), statusToSet, - unfilledRequest.getBaseTranslationVersion()); + unfilledRequest.getBaseTranslationVersion(), + revisionComment); request.addTargetComment(comment); log.debug("auto translate from translation memory {}", request); return request; diff --git a/zanata-war/src/main/java/org/zanata/service/impl/TranslationServiceImpl.java b/zanata-war/src/main/java/org/zanata/service/impl/TranslationServiceImpl.java index 3400c781e5..57b5168c03 100644 --- a/zanata-war/src/main/java/org/zanata/service/impl/TranslationServiceImpl.java +++ b/zanata-war/src/main/java/org/zanata/service/impl/TranslationServiceImpl.java @@ -233,10 +233,16 @@ private List translate(LocaleId localeId, .getVersionNum()) { try { int nPlurals = getNumPlurals(hLocale, hTextFlow); + Optional revisionComment = + StringUtils.isEmpty(request.getRevisionComment()) ? Optional + . absent() : Optional.of(request + .getRevisionComment()); result.targetChanged = translate(hTextFlowTarget, request.getNewContents(), - request.getNewContentState(), nPlurals); + request.getNewContentState(), + nPlurals, + revisionComment); result.isSuccess = true; } catch (HibernateException e) { result.isSuccess = false; @@ -330,7 +336,7 @@ private void signalPostTranslateEvent(Long actorId, private boolean translate(@Nonnull HTextFlowTarget hTextFlowTarget, @Nonnull List contentsToSave, ContentState requestedState, - int nPlurals) { + int nPlurals, Optional revisionComment) { boolean targetChanged = false; ContentState currentState = hTextFlowTarget.getState(); targetChanged |= setContentIfChanged(hTextFlowTarget, contentsToSave); @@ -343,6 +349,9 @@ private boolean translate(@Nonnull HTextFlowTarget hTextFlowTarget, hTextFlowTarget.setVersionNum(hTextFlowTarget.getVersionNum() + 1); hTextFlowTarget.setTextFlowRevision(textFlow.getRevision()); hTextFlowTarget.setLastModifiedBy(authenticatedAccount.getPerson()); + if(revisionComment.isPresent()) { + hTextFlowTarget.setRevisionComment(revisionComment.get()); + } log.debug("last modified by :{}", authenticatedAccount.getPerson() .getName()); } diff --git a/zanata-war/src/main/java/org/zanata/util/MessageGenerator.java b/zanata-war/src/main/java/org/zanata/util/MessageGenerator.java index 85b6d2b075..3df2ec0f27 100644 --- a/zanata-war/src/main/java/org/zanata/util/MessageGenerator.java +++ b/zanata-war/src/main/java/org/zanata/util/MessageGenerator.java @@ -23,7 +23,10 @@ import org.apache.commons.lang.StringUtils; import org.zanata.model.HDocument; +import org.zanata.model.HPerson; import org.zanata.model.HTextFlowTarget; +import org.zanata.model.tm.TransMemoryUnit; +import org.zanata.webtrans.shared.model.TransMemoryDetails; /** * Generate messages/comments of Zanata business actions @@ -38,6 +41,7 @@ public class MessageGenerator { public static final String PREFIX_MERGE_TRANS = "Merge translations"; public static final String PREFIX_COPY_TRANS = "Copy translation"; public static final String PREFIX_COPY_VERSION = "Copy version"; + public static final String PREFIX_TM_MERGE = "TM Merge"; /** * Create revision comment for translation that is copied by merge @@ -50,15 +54,11 @@ public class MessageGenerator { public static final String getMergeTranslationMessage( HTextFlowTarget tft) { HDocument document = tft.getTextFlow().getDocument(); - String author = ""; - if (tft.getLastModifiedBy() != null) { - author = tft.getLastModifiedBy().getName(); - } - return generateAutoCopiedMessage(PREFIX_MERGE_TRANS, document.getProjectIteration().getProject().getName(), document.getProjectIteration() - .getSlug(), document.getDocId(), author); + .getSlug(), document.getDocId(), + getAuthor(tft.getLastModifiedBy())); } /** @@ -69,14 +69,11 @@ public static final String getMergeTranslationMessage( */ public static final String getCopyTransMessage(HTextFlowTarget tft) { HDocument document = tft.getTextFlow().getDocument(); - String author = ""; - if (tft.getLastModifiedBy() != null) { - author = tft.getLastModifiedBy().getName(); - } return generateAutoCopiedMessage(PREFIX_COPY_TRANS, document.getProjectIteration() .getProject().getName(), document.getProjectIteration() - .getSlug(), document.getDocId(), author); + .getSlug(), document.getDocId(), + getAuthor(tft.getLastModifiedBy())); } /** @@ -87,30 +84,67 @@ public static final String getCopyTransMessage(HTextFlowTarget tft) { */ public static final String getCopyVersionMessage(HTextFlowTarget tft) { HDocument document = tft.getTextFlow().getDocument(); - String author = ""; - if (tft.getLastModifiedBy() != null) { - author = tft.getLastModifiedBy().getName(); - } return generateAutoCopiedMessage(PREFIX_COPY_VERSION, document.getProjectIteration().getProject().getName(), document.getProjectIteration() - .getSlug(), document.getDocId(), author); + .getSlug(), document.getDocId(), + getAuthor(tft.getLastModifiedBy())); + } + + /** + * Create revision comment for translation that is copied by TM Merge + * @see org.zanata.service.TransMemoryMergeService + * + * @param tu + */ + public static final String getTMMergeMessage(TransMemoryUnit tu) { + StringBuilder comment = new StringBuilder(); + + comment.append(PREFIX_TM_MERGE) + .append(": translation auto-copied from Translation memory '") + .append(tu.getTranslationMemory().getSlug()) + .append("', description '") + .append(tu.getTranslationMemory().getDescription()) + .append("'"); + + return comment.toString(); + } + + /** + * Create revision comment for translation that is copied by TM Merge + * @see org.zanata.service.TransMemoryMergeService + * + * @param tu + */ + public static final String getTMMergeMessage(TransMemoryDetails tmDetails) { + return generateAutoCopiedMessage(PREFIX_TM_MERGE, + tmDetails.getProjectName(), + tmDetails.getIterationName(), tmDetails.getDocId(), + tmDetails.getLastModifiedBy()); + } + + private static String getAuthor(HPerson person) { + if (person != null) { + return person.getName(); + } + return null; } private static final String generateAutoCopiedMessage(String prefix, String projectName, String versionSlug, String docId, String author) { StringBuilder comment = new StringBuilder(); - comment.append(prefix + ": translation auto-copied from project ") - .append(projectName) - .append(", version ") - .append(versionSlug) - .append(", document ") - .append(docId); + comment.append(prefix) + .append(": translation auto-copied from project '") + .append(projectName) + .append("', version '") + .append(versionSlug) + .append("', document '") + .append(docId) + .append("'"); if (!StringUtils.isEmpty(author)) { - comment.append(", author ") - .append(author); + comment.append(", author '").append(author).append("'"); } return comment.toString(); } diff --git a/zanata-war/src/main/java/org/zanata/webtrans/shared/model/TransUnitUpdateRequest.java b/zanata-war/src/main/java/org/zanata/webtrans/shared/model/TransUnitUpdateRequest.java index f4f77f2118..604a734343 100644 --- a/zanata-war/src/main/java/org/zanata/webtrans/shared/model/TransUnitUpdateRequest.java +++ b/zanata-war/src/main/java/org/zanata/webtrans/shared/model/TransUnitUpdateRequest.java @@ -42,6 +42,7 @@ public class TransUnitUpdateRequest implements IsSerializable { private ContentState newContentState; private int baseTranslationVersion; private String targetComment; + private String revisionComment; // required for GWT rpc serialization @SuppressWarnings("unused") @@ -57,6 +58,13 @@ public TransUnitUpdateRequest(TransUnitId transUnitId, this.baseTranslationVersion = baseTranslationVersion; } + public TransUnitUpdateRequest(TransUnitId transUnitId, + List newContents, ContentState newContentState, + int baseTranslationVersion, String revisionComment) { + this(transUnitId, newContents, newContentState, baseTranslationVersion); + this.revisionComment = revisionComment; + } + public TransUnitUpdateRequest addTargetComment(String comment) { targetComment = comment; return this; @@ -78,6 +86,10 @@ public int getBaseTranslationVersion() { return baseTranslationVersion; } + public String getRevisionComment() { + return revisionComment; + } + public boolean hasTargetComment() { return !Strings.isNullOrEmpty(targetComment); } @@ -95,6 +107,7 @@ public String toString() { add("newContentState", newContentState). add("baseTranslationVersion", baseTranslationVersion). add("targetComment", targetComment). + add("revisionComment", revisionComment). toString(); // @formatter:on }