From dda35c91a41830cf4907f320781fe61bd8fde484 Mon Sep 17 00:00:00 2001 From: Patrick Huang Date: Thu, 26 Jun 2014 10:26:46 +1000 Subject: [PATCH] rhbz1110627,rhbz1038852 - add src dir and trans dir to zanata config --- .../commands/AbstractPushPullOptionsImpl.java | 34 ---------- .../commands/ConfigurableProjectOptions.java | 20 ++++++ .../ConfigurableProjectOptionsImpl.java | 31 +++++++++ .../zanata/client/commands/OptionsUtil.java | 44 ++++++++++++ .../client/commands/init/InitOptionsImpl.java | 2 +- .../zanata/client/config/ZanataConfig.java | 22 +++++- .../client/commands/OptionsUtilTest.java | 68 +++++++++++++++++++ .../zanata/maven/AbstractPushPullMojo.java | 24 ------- .../zanata/maven/ConfigurableProjectMojo.java | 32 +++++++++ 9 files changed, 217 insertions(+), 60 deletions(-) create mode 100644 zanata-client-commands/src/test/java/org/zanata/client/commands/OptionsUtilTest.java diff --git a/zanata-client-commands/src/main/java/org/zanata/client/commands/AbstractPushPullOptionsImpl.java b/zanata-client-commands/src/main/java/org/zanata/client/commands/AbstractPushPullOptionsImpl.java index 6e518275..19c35f42 100644 --- a/zanata-client-commands/src/main/java/org/zanata/client/commands/AbstractPushPullOptionsImpl.java +++ b/zanata-client-commands/src/main/java/org/zanata/client/commands/AbstractPushPullOptionsImpl.java @@ -45,8 +45,6 @@ public abstract class AbstractPushPullOptionsImpl protected String[] locales; private LocaleList effectiveLocales; - private File transDir; - private File srcDir; private String fromDoc = DEF_FROM_DOC; private boolean dryRun = DEFAULT_DRY_RUN; @@ -67,43 +65,11 @@ public LocaleList getLocaleMapList() { return effectiveLocales; } - @Override - public File getSrcDir() { - return srcDir; - } - - @Option( - aliases = { "-s" }, - name = "--src-dir", - metaVar = "DIR", - required = true, - usage = "Base directory for source files (eg \".\", \"pot\", \"src/main/resources\")") - public - void setSrcDir(File file) { - this.srcDir = file; - } - @Override public String getSrcDirParameterName() { return "--src-dir"; } - @Override - public File getTransDir() { - return transDir; - } - - @Option( - aliases = { "-t" }, - name = "--trans-dir", - metaVar = "DIR", - required = true, - usage = "Base directory for translated files (eg \".\", \"po\", \"src/main/resources\")") - public - void setTransDir(File transDir) { - this.transDir = transDir; - } - @Override public String getFromDoc() { return fromDoc; diff --git a/zanata-client-commands/src/main/java/org/zanata/client/commands/ConfigurableProjectOptions.java b/zanata-client-commands/src/main/java/org/zanata/client/commands/ConfigurableProjectOptions.java index cc8dcbae..fc892008 100644 --- a/zanata-client-commands/src/main/java/org/zanata/client/commands/ConfigurableProjectOptions.java +++ b/zanata-client-commands/src/main/java/org/zanata/client/commands/ConfigurableProjectOptions.java @@ -53,4 +53,24 @@ public interface ConfigurableProjectOptions extends ConfigurableOptions { public LocaleList getLocaleMapList(); public void setLocaleMapList(LocaleList locales); + + @Option( + aliases = { "-s" }, + name = "--src-dir", + metaVar = "DIR", + required = true, + usage = "Base directory for source files (eg \".\", \"pot\", \"src/main/resources\")") + void setSrcDir(File srcDir); + + File getSrcDir(); + + @Option( + aliases = { "-t" }, + name = "--trans-dir", + metaVar = "DIR", + required = true, + usage = "Base directory for translated files (eg \".\", \"po\", \"src/main/resources\")") + void setTransDir(File transDir); + + File getTransDir(); } diff --git a/zanata-client-commands/src/main/java/org/zanata/client/commands/ConfigurableProjectOptionsImpl.java b/zanata-client-commands/src/main/java/org/zanata/client/commands/ConfigurableProjectOptionsImpl.java index d0c91f66..83682347 100644 --- a/zanata-client-commands/src/main/java/org/zanata/client/commands/ConfigurableProjectOptionsImpl.java +++ b/zanata-client-commands/src/main/java/org/zanata/client/commands/ConfigurableProjectOptionsImpl.java @@ -47,6 +47,8 @@ public abstract class ConfigurableProjectOptionsImpl extends private String projectVersion; private String projectType; private LocaleList locales; + private File transDir; + private File srcDir; @Override public String getProj() { @@ -124,4 +126,33 @@ public void setLocaleMapList(LocaleList locales) { this.locales = locales; } + @Option( + aliases = { "-s" }, + name = "--src-dir", + metaVar = "DIR", + usage = "Base directory for source files (eg \".\", \"pot\", \"src/main/resources\")") + @Override + public void setSrcDir(File srcDir) { + this.srcDir = srcDir; + } + + @Override + public File getSrcDir() { + return srcDir; + } + + @Option( + aliases = { "-t" }, + name = "--trans-dir", + metaVar = "DIR", + usage = "Base directory for translated files (eg \".\", \"po\", \"src/main/resources\")") + @Override + public void setTransDir(File transDir) { + this.transDir = transDir; + } + + @Override + public File getTransDir() { + return transDir; + } } diff --git a/zanata-client-commands/src/main/java/org/zanata/client/commands/OptionsUtil.java b/zanata-client-commands/src/main/java/org/zanata/client/commands/OptionsUtil.java index 1b94c834..073b76f6 100644 --- a/zanata-client-commands/src/main/java/org/zanata/client/commands/OptionsUtil.java +++ b/zanata-client-commands/src/main/java/org/zanata/client/commands/OptionsUtil.java @@ -18,6 +18,8 @@ import org.zanata.client.exceptions.ConfigException; import org.zanata.rest.client.ZanataProxyFactory; import org.zanata.util.VersionUtility; +import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.Strings; public class OptionsUtil { private static final Logger log = LoggerFactory @@ -88,6 +90,7 @@ private static void applyProjectConfig(ConfigurableProjectOptions opts, if (opts.getProjectType() == null) { opts.setProjectType(config.getProjectType()); } + applySrcDirAndTransDirFromProjectConfig(opts, config); LocaleList locales = config.getLocales(); opts.setLocaleMapList(locales); @@ -96,6 +99,47 @@ private static void applyProjectConfig(ConfigurableProjectOptions opts, } } + /** + * Note: command line options take precedence over pom.xml which + * takes precedence over zanata.xml. + * + * @param opts + * options + * @param config + * config from project configuration file i.e. zanata.xml + */ + @VisibleForTesting + protected static void applySrcDirAndTransDirFromProjectConfig( + ConfigurableProjectOptions opts, ZanataConfig config) { + // apply srcDir configuration + boolean srcDirInOption = opts.getSrcDir() != null; + boolean srcDirInConfig = !Strings.isNullOrEmpty(config.getSrcDir()); + if (!srcDirInOption && srcDirInConfig) { + opts.setSrcDir(new File(config.getSrcDir())); + } else if (srcDirInOption && !srcDirInConfig) { + // option is provided from commandline or in pom.xml + log.info("You can define your source directory in zanata.xml now ({})", opts.getSrcDir()); + } else if (srcDirInOption && !config.getSrcDir().equals(opts.getSrcDir().getPath())) { + // option mismatch between zanata.xml and given value + log.warn("Source directory in zanata.xml is set to [{}] but is now given as [{}]", config.getSrcDir(), opts.getSrcDir()); + log.warn("You are overriding your source directory defined in zanata.xml"); + } + + // apply transDir configuration + boolean transDirInOption = opts.getTransDir() != null; + boolean transDirInConfig = !Strings.isNullOrEmpty(config.getTransDir()); + if (!transDirInOption && transDirInConfig) { + opts.setTransDir(new File(config.getTransDir())); + } else if (transDirInOption && !transDirInConfig) { + // option is provided from commandline or in pom.xml + log.info("You can define your translation directory in zanata.xml now ({})", opts.getTransDir()); + } else if (transDirInOption && !config.getTransDir().equals(opts.getTransDir().getPath())) { + // option mismatch between zanata.xml and given value + log.warn("Translation directory in zanata.xml is set to [{}] but is now given as [{}]", config.getTransDir(), opts.getTransDir()); + log.warn("You are overriding your translation directory defined in zanata.xml"); + } + } + /** * Applies values from the user's personal configuration unless they have * been set directly (by parameters or by project configuration). diff --git a/zanata-client-commands/src/main/java/org/zanata/client/commands/init/InitOptionsImpl.java b/zanata-client-commands/src/main/java/org/zanata/client/commands/init/InitOptionsImpl.java index 7080dd13..29097120 100644 --- a/zanata-client-commands/src/main/java/org/zanata/client/commands/init/InitOptionsImpl.java +++ b/zanata-client-commands/src/main/java/org/zanata/client/commands/init/InitOptionsImpl.java @@ -26,7 +26,7 @@ public String getCommandName() { @Override public String getCommandDescription() { - return "Initialize Zanata project structure"; + return "Initialize Zanata project configuration"; } @Override diff --git a/zanata-client-commands/src/main/java/org/zanata/client/config/ZanataConfig.java b/zanata-client-commands/src/main/java/org/zanata/client/config/ZanataConfig.java index 0b7ebc24..f4382c67 100644 --- a/zanata-client-commands/src/main/java/org/zanata/client/config/ZanataConfig.java +++ b/zanata-client-commands/src/main/java/org/zanata/client/config/ZanataConfig.java @@ -38,7 +38,7 @@ * */ @XmlType(name = "configType", propOrder = { "url", "project", "projectVersion", - "projectType", "hooks", "locales" }) + "projectType", "srcDir", "transDir", "hooks", "locales" }) @XmlRootElement(name = "config") public class ZanataConfig implements Serializable { private static final long serialVersionUID = 1L; @@ -47,6 +47,9 @@ public class ZanataConfig implements Serializable { private URL url; private String projectType; private String projectVersion; + // default to current directory + private String srcDir = "."; + private String transDir = "."; private List hooks = new ArrayList(); public ZanataConfig() { @@ -108,4 +111,21 @@ public void setProjectVersion(String version) { this.projectVersion = version; } + @XmlElement(name = "src-dir") + public String getSrcDir() { + return srcDir; + } + + public void setSrcDir(String srcDir) { + this.srcDir = srcDir; + } + + @XmlElement(name = "trans-dir") + public String getTransDir() { + return transDir; + } + + public void setTransDir(String transDir) { + this.transDir = transDir; + } } diff --git a/zanata-client-commands/src/test/java/org/zanata/client/commands/OptionsUtilTest.java b/zanata-client-commands/src/test/java/org/zanata/client/commands/OptionsUtilTest.java new file mode 100644 index 00000000..508a3877 --- /dev/null +++ b/zanata-client-commands/src/test/java/org/zanata/client/commands/OptionsUtilTest.java @@ -0,0 +1,68 @@ +package org.zanata.client.commands; + +import java.io.File; + +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.zanata.client.config.ZanataConfig; + +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +public class OptionsUtilTest { + + @Mock + private ConfigurableProjectOptions opts; + private ZanataConfig config; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + config = new ZanataConfig(); + } + + @Test + public void willApplyConfigFromFileIfNotSetInOptions() throws Exception { + // Given: options are not set and exists in zanata config + when(opts.getSrcDir()).thenReturn(null); + when(opts.getTransDir()).thenReturn(null); + config.setSrcDir("a"); + config.setTransDir("b"); + + // When: + OptionsUtil.applySrcDirAndTransDirFromProjectConfig(opts, config); + + // Then: + verify(opts).setSrcDir(new File("a")); + verify(opts).setTransDir(new File("b")); + } + @Test + public void willSetToDefaultValueIfNeitherHasValue() { + when(opts.getSrcDir()).thenReturn(null); + when(opts.getTransDir()).thenReturn(null); + + OptionsUtil.applySrcDirAndTransDirFromProjectConfig(opts, config); + + verify(opts).setSrcDir(new File(".")); + verify(opts).setTransDir(new File(".")); + } + @Test + public void optionTakesPrecedenceOverConfig() { + // Given: options are set and exists in zanata config + when(opts.getSrcDir()).thenReturn(new File("pot")); + when(opts.getTransDir()).thenReturn(new File(".")); + config.setSrcDir("a"); + config.setTransDir("b"); + + // When: + OptionsUtil.applySrcDirAndTransDirFromProjectConfig(opts, config); + + // Then: + verify(opts, never()).setSrcDir(any(File.class)); + verify(opts, never()).setTransDir(any(File.class)); + } +} \ No newline at end of file diff --git a/zanata-maven-plugin/src/main/java/org/zanata/maven/AbstractPushPullMojo.java b/zanata-maven-plugin/src/main/java/org/zanata/maven/AbstractPushPullMojo.java index b58defcf..776aad9e 100644 --- a/zanata-maven-plugin/src/main/java/org/zanata/maven/AbstractPushPullMojo.java +++ b/zanata-maven-plugin/src/main/java/org/zanata/maven/AbstractPushPullMojo.java @@ -117,20 +117,6 @@ private String toMavenModuleID(MavenProject module) { @SuppressWarnings("MismatchedQueryAndUpdateOfCollection") private List reactorProjects; - /** - * Base directory for source-language files - * - * @parameter expression="${zanata.srcDir}" default-value="." - */ - private File srcDir; - - /** - * Base directory for target-language files (translations) - * - * @parameter expression="${zanata.transDir}" default-value="." - */ - private File transDir; - /** * Specifies a document from which to begin the push operation. Documents * before this document (sorted alphabetically) will not be pushed. @@ -167,21 +153,11 @@ public boolean isDryRun() { return dryRun; } - @Override - public File getSrcDir() { - return srcDir; - } - @Override public String getSrcDirParameterName() { return "srcDir"; } - @Override - public File getTransDir() { - return transDir; - } - @Override public String getFromDoc() { return fromDoc; diff --git a/zanata-maven-plugin/src/main/java/org/zanata/maven/ConfigurableProjectMojo.java b/zanata-maven-plugin/src/main/java/org/zanata/maven/ConfigurableProjectMojo.java index 19b1479b..2108e555 100644 --- a/zanata-maven-plugin/src/main/java/org/zanata/maven/ConfigurableProjectMojo.java +++ b/zanata-maven-plugin/src/main/java/org/zanata/maven/ConfigurableProjectMojo.java @@ -61,6 +61,19 @@ public abstract class ConfigurableProjectMojo private LocaleList localeMapList; + /** + * Base directory for source-language files + * + * @parameter expression="${zanata.srcDir}" + */ + private File srcDir; + /** + * Base directory for target-language files (translations) + * + * @parameter expression="${zanata.transDir}" + */ + private File transDir; + public ConfigurableProjectMojo() { super(); } @@ -105,6 +118,16 @@ public void setProjectType(String projectType) { this.projectType = projectType; } + @Override + public File getSrcDir() { + return srcDir; + } + + @Override + public File getTransDir() { + return transDir; + } + @Override public LocaleList getLocaleMapList() { return localeMapList; @@ -115,4 +138,13 @@ public void setLocaleMapList(LocaleList localeMapList) { this.localeMapList = localeMapList; } + @Override + public void setSrcDir(File srcDir) { + this.srcDir = srcDir; + } + + @Override + public void setTransDir(File transDir) { + this.transDir = transDir; + } }