diff options
author | Andrey Somov <public.somov@gmail.com> | 2021-12-29 10:32:41 +0400 |
---|---|---|
committer | Andrey Somov <public.somov@gmail.com> | 2021-12-29 10:32:41 +0400 |
commit | eae60928010118d153d1333480ab1736f7130a57 (patch) | |
tree | bdf485841aa19cd24f857414528a1d14e8ab3e4f /src/main | |
parent | 28b244b7e03d0a4a510255ae3115dfc2607679c4 (diff) | |
download | snakeyaml-eae60928010118d153d1333480ab1736f7130a57.tar.gz |
Provide example with Lombok and ENV variable substitution
Diffstat (limited to 'src/main')
-rw-r--r-- | src/main/java/org/yaml/snakeyaml/constructor/Constructor.java | 6 | ||||
-rw-r--r-- | src/main/java/org/yaml/snakeyaml/env/EnvScalarConstructor.java | 18 |
2 files changed, 24 insertions, 0 deletions
diff --git a/src/main/java/org/yaml/snakeyaml/constructor/Constructor.java b/src/main/java/org/yaml/snakeyaml/constructor/Constructor.java index 9eb5976e..f04b470c 100644 --- a/src/main/java/org/yaml/snakeyaml/constructor/Constructor.java +++ b/src/main/java/org/yaml/snakeyaml/constructor/Constructor.java @@ -88,6 +88,12 @@ public class Constructor extends SafeConstructor { this(theRoot, moreTDs, new LoaderOptions()); } + /** + * Create with all possible arguments + * @param theRoot - the class (usually JavaBean) to be constructed + * @param moreTDs - collection of classes used by the root class + * @param loadingConfig - configuration + */ public Constructor(TypeDescription theRoot, Collection<TypeDescription> moreTDs, LoaderOptions loadingConfig) { super(loadingConfig); if (theRoot == null) { diff --git a/src/main/java/org/yaml/snakeyaml/env/EnvScalarConstructor.java b/src/main/java/org/yaml/snakeyaml/env/EnvScalarConstructor.java index 3c6a4144..2473170a 100644 --- a/src/main/java/org/yaml/snakeyaml/env/EnvScalarConstructor.java +++ b/src/main/java/org/yaml/snakeyaml/env/EnvScalarConstructor.java @@ -15,6 +15,8 @@ */ package org.yaml.snakeyaml.env; +import org.yaml.snakeyaml.LoaderOptions; +import org.yaml.snakeyaml.TypeDescription; import org.yaml.snakeyaml.constructor.AbstractConstruct; import org.yaml.snakeyaml.constructor.Constructor; import org.yaml.snakeyaml.error.MissingEnvironmentVariableException; @@ -22,11 +24,13 @@ import org.yaml.snakeyaml.nodes.Node; import org.yaml.snakeyaml.nodes.ScalarNode; import org.yaml.snakeyaml.nodes.Tag; +import java.util.Collection; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * Construct scalar for format ${VARIABLE} replacing the template with the value from environment. + * It can also be used to create JavaBeans when the all the arguments are provided. * @see <a href="https://bitbucket.org/snakeyaml/snakeyaml/wiki/Variable%20substitution">Variable substitution</a> * @see <a href="https://docs.docker.com/compose/compose-file/#variable-substitution">Variable substitution</a> */ @@ -36,10 +40,24 @@ public class EnvScalarConstructor extends Constructor { // value can be any non-space -> \S+ public static final Pattern ENV_FORMAT = Pattern.compile("^\\$\\{\\s*((?<name>\\w+)((?<separator>:?(-|\\?))(?<value>\\S+)?)?)\\s*\\}$"); + /** + * For simple cases when no JavaBeans are needed + */ public EnvScalarConstructor() { this.yamlConstructors.put(ENV_TAG, new ConstructEnv()); } + /** + * Create EnvScalarConstructor which can create JavaBeans with variable substitution + * @param theRoot - the class (usually JavaBean) to be constructed + * @param moreTDs - collection of classes used by the root class + * @param loadingConfig - configuration + */ + public EnvScalarConstructor(TypeDescription theRoot, Collection<TypeDescription> moreTDs, LoaderOptions loadingConfig) { + super(theRoot, moreTDs, loadingConfig); + this.yamlConstructors.put(ENV_TAG, new ConstructEnv()); + } + private class ConstructEnv extends AbstractConstruct { public Object construct(Node node) { String val = constructScalar((ScalarNode) node); |