diff --git a/rosetta-lang/src/main/java/com/regnosys/rosetta/config/file/RosettaConfigurationFileProvider.java b/rosetta-lang/src/main/java/com/regnosys/rosetta/config/file/RosettaConfigurationFileProvider.java index 2d8a10972..b75ecaf67 100644 --- a/rosetta-lang/src/main/java/com/regnosys/rosetta/config/file/RosettaConfigurationFileProvider.java +++ b/rosetta-lang/src/main/java/com/regnosys/rosetta/config/file/RosettaConfigurationFileProvider.java @@ -1,14 +1,34 @@ package com.regnosys.rosetta.config.file; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.net.MalformedURLException; import java.net.URL; +import java.nio.file.Paths; +import java.util.Optional; import javax.inject.Provider; public class RosettaConfigurationFileProvider implements Provider { public static final String FILE_NAME = "rosetta-config.yml"; + private static final Logger LOGGER = LoggerFactory.getLogger(RosettaConfigurationFileProvider.class); + public static final String ROSETTA_CONFIG_FILE_PROPERTY = "rosetta.config.file"; @Override public URL get() { - return Thread.currentThread().getContextClassLoader().getResource(FILE_NAME); + return Optional.ofNullable(System.getProperty(ROSETTA_CONFIG_FILE_PROPERTY)) + .map(this::getUrl) + .orElse(Thread.currentThread().getContextClassLoader().getResource(FILE_NAME)); } + + private URL getUrl(String rosettaConfigFile) { + try { + return Paths.get(rosettaConfigFile).toUri().toURL(); + } catch (MalformedURLException e) { + LOGGER.error("System variable path to rosetta config file invalid: {}", rosettaConfigFile, e); + return null; + } + } } diff --git a/rosetta-maven-plugin/src/main/java/com/regnosys/rosetta/maven/AbstractRosettaGeneratorMojo.java b/rosetta-maven-plugin/src/main/java/com/regnosys/rosetta/maven/AbstractRosettaGeneratorMojo.java index 786c343e9..6d36b4c8a 100644 --- a/rosetta-maven-plugin/src/main/java/com/regnosys/rosetta/maven/AbstractRosettaGeneratorMojo.java +++ b/rosetta-maven-plugin/src/main/java/com/regnosys/rosetta/maven/AbstractRosettaGeneratorMojo.java @@ -17,9 +17,12 @@ package com.regnosys.rosetta.maven; import java.io.File; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Set; +import com.regnosys.rosetta.config.file.RosettaConfigurationFileProvider; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugins.annotations.Parameter; import org.eclipse.xtext.builder.standalone.LanguageAccess; @@ -38,6 +41,9 @@ // which makes this implementation too hacky. public abstract class AbstractRosettaGeneratorMojo extends AbstractXtextGeneratorMojo { + @Parameter(property = "rosetta.config.file") + private String rosettaConfigFile; + @Parameter(defaultValue = "true") boolean addOutputDirectoriesToCompileSourceRoots = Boolean.TRUE; @@ -76,6 +82,9 @@ protected Module createModule() { @Override protected void internalExecute() throws MojoExecutionException { + if (rosettaConfigFile != null) { + System.setProperty(RosettaConfigurationFileProvider.ROSETTA_CONFIG_FILE_PROPERTY, rosettaConfigFile); + } if (addOutputDirectoriesToCompileSourceRoots) { configureMavenOutputs(); }