From f8f77036d33a17c11229e91ef7935229d3a2671d Mon Sep 17 00:00:00 2001 From: Patrick Huang Date: Wed, 20 May 2015 14:08:11 +1000 Subject: [PATCH] rhbz1215274 - refactor --- .../client/commands/pull/PullCommand.java | 26 +++++++++++++------ .../client/commands/pull/PullOptionsImpl.java | 6 ++++- .../org/zanata/maven/AbstractPullMojo.java | 7 ++++- 3 files changed, 29 insertions(+), 10 deletions(-) diff --git a/zanata-client-commands/src/main/java/org/zanata/client/commands/pull/PullCommand.java b/zanata-client-commands/src/main/java/org/zanata/client/commands/pull/PullCommand.java index 41a46164..615c0033 100644 --- a/zanata-client-commands/src/main/java/org/zanata/client/commands/pull/PullCommand.java +++ b/zanata-client-commands/src/main/java/org/zanata/client/commands/pull/PullCommand.java @@ -15,6 +15,7 @@ import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.zanata.client.commands.OptionsUtil; import org.zanata.client.commands.PushPullCommand; import org.zanata.client.commands.PushPullType; import org.zanata.client.config.LocaleList; @@ -33,6 +34,7 @@ import org.zanata.util.HashUtil; import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.Optional; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Lists; import com.sun.jersey.api.client.ClientResponse; @@ -215,9 +217,15 @@ && getOpts().getPullType() == PushPullType.Source) { eTagCache.clear(); } - Map> statsMap = null; + // this stats map will have docId as key, the value is another map with + // localeId as key and translated percent as value. It's optional if we + // require statistics to determine which file to pull. In cases where + // statistics is not required, i.e. pull source only or minimum percent + // is set to 0, this will be Optional.absence(). + Optional>> optionalStats = + Optional.absent(); if (pullTarget && getOpts().getMinDocPercent() > 0) { - statsMap = getDocsTranslatedPercent(); + optionalStats = Optional.of(getDocsTranslatedPercent()); } for (String qualifiedDocName : docsToPull) { @@ -245,7 +253,7 @@ && getOpts().getPullType() == PushPullType.Source) { strat.getTransFileToWrite(localDocName, locMapping); - if (shouldPullThisLocale(statsMap, localDocName, locale)) { + if (shouldPullThisLocale(optionalStats, localDocName, locale)) { pullDocForLocale(strat, doc, localDocName, docUri, createSkeletons, locMapping, transFile); } else { @@ -368,16 +376,16 @@ protected void pullDocForLocale(PullStrategy strat, Resource doc, } private boolean shouldPullThisLocale( - Map> statsMap, + Optional>> optinalStats, String localDocName, LocaleId serverLocale) { int minDocPercent = getOpts().getMinDocPercent(); - if (log.isDebugEnabled() && statsMap != null) { + if (log.isDebugEnabled() && optinalStats.isPresent()) { log.debug("{} for locale {} is translated {}%", localDocName, - serverLocale, statsMap.get(localDocName).get(serverLocale) + serverLocale, optinalStats.get().get(localDocName).get(serverLocale) .translatedPercent); } - return statsMap == null - || statsMap.get(localDocName).get(serverLocale) + return !optinalStats.isPresent() + || optinalStats.get().get(localDocName).get(serverLocale) .isAboveThreshold(minDocPercent); } @@ -505,6 +513,8 @@ public TranslatedPercent(long total, long translated, long approved) { } public boolean isAboveThreshold(int minimumPercent) { + // if minimum percent is 100, we will compare exact number so that + // rounding issue won't affect the result if (minimumPercent == 100) { return total == translated + approved; } else { diff --git a/zanata-client-commands/src/main/java/org/zanata/client/commands/pull/PullOptionsImpl.java b/zanata-client-commands/src/main/java/org/zanata/client/commands/pull/PullOptionsImpl.java index c83d0e07..9d8585e9 100644 --- a/zanata-client-commands/src/main/java/org/zanata/client/commands/pull/PullOptionsImpl.java +++ b/zanata-client-commands/src/main/java/org/zanata/client/commands/pull/PullOptionsImpl.java @@ -26,6 +26,7 @@ import org.zanata.client.commands.BooleanValueHandler; import org.zanata.client.commands.ZanataCommand; import org.zanata.client.commands.PushPullType; +import com.google.common.base.Preconditions; /** * @author Sean Flanigan = 0 || minDocPercent <= 100, + "--min-doc-percent should be an integer from 0 to 100"); this.minDocPercent = minDocPercent; } diff --git a/zanata-maven-plugin/src/main/java/org/zanata/maven/AbstractPullMojo.java b/zanata-maven-plugin/src/main/java/org/zanata/maven/AbstractPullMojo.java index ebe188d0..c102ec0a 100644 --- a/zanata-maven-plugin/src/main/java/org/zanata/maven/AbstractPullMojo.java +++ b/zanata-maven-plugin/src/main/java/org/zanata/maven/AbstractPullMojo.java @@ -27,6 +27,7 @@ import org.zanata.client.commands.pull.PullOptions; import org.zanata.client.commands.pull.RawPullCommand; +import com.google.common.base.Preconditions; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; /** @@ -108,7 +109,8 @@ public abstract class AbstractPullMojo extends private boolean continueAfterError = false; /** - * When specified, will only pull down translation files that have translated or better statistics above the specified percentage. + * Accepts integer number from 0 to 100. Only pull translation documents + * which are at least PERCENT % completed. * * @parameter expression="$zanata.minDocPercent}" default-value="0" */ @@ -119,6 +121,9 @@ public abstract class AbstractPullMojo extends */ public AbstractPullMojo() { super(); + Preconditions + .checkArgument(minDocPercent >= 0 || minDocPercent <= 100, + "zanata.minDocPercent should be an integer from 0 to 100"); } public PushPullCommand initCommand() {