This is an automated email from the ASF dual-hosted git repository.
jamesbognar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/juneau.git
The following commit(s) were added to refs/heads/master by this push:
new e2516d9 Clean up builders.
e2516d9 is described below
commit e2516d93b27665c318091c6477b183641597c25c
Author: JamesBognar <[email protected]>
AuthorDate: Sat Aug 7 18:21:07 2021 -0400
Clean up builders.
---
.../main/java/org/apache/juneau/config/Config.java | 292 ++-------------------
.../org/apache/juneau/config/ConfigBuilder.java | 194 +++++++-------
.../juneau/config/store/ConfigClasspathStore.java | 1 +
.../config/store/ConfigClasspathStoreBuilder.java | 1 +
.../juneau/config/store/ConfigFileStore.java | 1 +
.../config/store/ConfigFileStoreBuilder.java | 13 +-
.../juneau/config/store/ConfigMemoryStore.java | 1 +
.../config/store/ConfigMemoryStoreBuilder.java | 1 +
.../apache/juneau/config/store/ConfigStore.java | 1 +
.../juneau/config/store/ConfigStoreBuilder.java | 1 +
.../java/org/apache/juneau/ContextBuilder.java | 8 +-
11 files changed, 151 insertions(+), 363 deletions(-)
diff --git
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/Config.java
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/Config.java
index a6572be..5f7360f 100644
---
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/Config.java
+++
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/Config.java
@@ -26,7 +26,6 @@ import java.util.*;
import org.apache.juneau.*;
import org.apache.juneau.annotation.*;
import org.apache.juneau.collections.*;
-import org.apache.juneau.config.encode.*;
import org.apache.juneau.config.encode.ConfigEncoder;
import org.apache.juneau.config.event.*;
import org.apache.juneau.config.internal.*;
@@ -39,6 +38,7 @@ import org.apache.juneau.svl.*;
/**
* Main configuration API class.
+ * {@review}
*
* <ul class='seealso'>
* <li class='link'>{@doc juneau-config}
@@ -149,259 +149,20 @@ public final class Config extends Context implements
ConfigEventListener, Writab
}
//-------------------------------------------------------------------------------------------------------------------
- // Configurable properties
-
//-------------------------------------------------------------------------------------------------------------------
-
- static final String PREFIX = "Config";
-
- /**
- * Configuration property: Configuration name.
- *
- * <h5 class='section'>Property:</h5>
- * <ul class='spaced-list'>
- * <li><b>ID:</b> {@link
org.apache.juneau.config.Config#CONFIG_name CONFIG_name}
- * <li><b>Name:</b> <js>"Config.name.s"</js>
- * <li><b>Data type:</b> <c>String</c>
- * <li><b>System property:</b> <c>Config.name</c>
- * <li><b>Environment variable:</b> <c>CONFIG_NAME</c>
- * <li><b>Default:</b> <js>"Configuration.cfg"</js>
- * <li><b>Methods:</b>
- * <ul>
- * <li class='jm'>{@link
ConfigBuilder#name(String)}
- * </ul>
- * </ul>
- *
- * <h5 class='section'>Description:</h5>
- * <p>
- * Specifies the configuration name.
- * <br>This is typically the configuration file name, although
- * the name can be anything identifiable by the {@link ConfigStore}
used for retrieving and storing the configuration.
- */
- public static final String CONFIG_name = PREFIX + ".name.s";
-
- /**
- * Configuration property: Configuration store.
- *
- * <h5 class='section'>Property:</h5>
- * <ul class='spaced-list'>
- * <li><b>ID:</b> {@link
org.apache.juneau.config.Config#CONFIG_store CONFIG_store}
- * <li><b>Name:</b> <js>"Config.store.o"</js>
- * <li><b>Data type:</b> {@link
org.apache.juneau.config.store.ConfigStore}
- * <li><b>Default:</b> {@link
org.apache.juneau.config.store.ConfigFileStore#DEFAULT}
- * <li><b>Methods:</b>
- * <ul>
- * <li class='jm'>{@link
org.apache.juneau.config.ConfigBuilder#store(ConfigStore)}
- * </ul>
- * </ul>
- *
- * <h5 class='section'>Description:</h5>
- * <p>
- * The configuration store used for retrieving and storing
configurations.
- */
- public static final String CONFIG_store = PREFIX + ".store.o";
-
- /**
- * Configuration property: POJO serializer.
- *
- * <h5 class='section'>Property:</h5>
- * <ul class='spaced-list'>
- * <li><b>ID:</b> {@link
org.apache.juneau.config.Config#CONFIG_serializer CONFIG_serializer}
- * <li><b>Name:</b> <js>"Config.serializer.o"</js>
- * <li><b>Data type:</b> {@link
org.apache.juneau.serializer.WriterSerializer}
- * <li><b>Default:</b> {@link
org.apache.juneau.json.SimpleJsonSerializer#DEFAULT}
- * <li><b>Methods:</b>
- * <ul>
- * <li class='jm'>{@link
org.apache.juneau.config.ConfigBuilder#serializer(Class)}
- * <li class='jm'>{@link
org.apache.juneau.config.ConfigBuilder#serializer(WriterSerializer)}
- * </ul>
- * </ul>
- *
- * <h5 class='section'>Description:</h5>
- * <p>
- * The serializer to use for serializing POJO values.
- */
- public static final String CONFIG_serializer = PREFIX + ".serializer.o";
-
- /**
- * Configuration property: POJO parser.
- *
- * <h5 class='section'>Property:</h5>
- * <ul class='spaced-list'>
- * <li><b>ID:</b> {@link
org.apache.juneau.config.Config#CONFIG_parser CONFIG_parser}
- * <li><b>Name:</b> <js>"Config.parser.o"</js>
- * <li><b>Data type:</b> {@link
org.apache.juneau.parser.ReaderParser}
- * <li><b>Default:</b> {@link
org.apache.juneau.json.JsonParser#DEFAULT}
- * <li><b>Methods:</b>
- * <ul>
- * <li class='jm'>{@link
org.apache.juneau.config.ConfigBuilder#parser(Class)}
- * <li class='jm'>{@link
org.apache.juneau.config.ConfigBuilder#parser(ReaderParser)}
- * </ul>
- * </ul>
- *
- * <h5 class='section'>Description:</h5>
- * <p>
- * The parser to use for parsing values to POJOs.
- */
- public static final String CONFIG_parser = PREFIX + ".parser.o";
-
- /**
- * Configuration property: Value encoder.
- *
- * <h5 class='section'>Property:</h5>
- * <ul class='spaced-list'>
- * <li><b>ID:</b> {@link
org.apache.juneau.config.Config#CONFIG_encoder CONFIG_encoder}
- * <li><b>Name:</b> <js>"Config.encoder.o"</js>
- * <li><b>Data type:</b> {@link
org.apache.juneau.config.encode.ConfigEncoder}
- * <li><b>Default:</b> {@link
org.apache.juneau.config.encode.ConfigXorEncoder#INSTANCE}
- * <li><b>Methods:</b>
- * <ul>
- * <li class='jm'>{@link
org.apache.juneau.config.ConfigBuilder#encoder(Class)}
- * <li class='jm'>{@link
org.apache.juneau.config.ConfigBuilder#encoder(ConfigEncoder)}
- * </ul>
- * </ul>
- *
- * <h5 class='section'>Description:</h5>
- * <p>
- * The encoder to use for encoding encoded configuration values.
- */
- public static final String CONFIG_encoder = PREFIX + ".encoder.o";
-
- /**
- * Configuration property: SVL variable resolver.
- *
- * <h5 class='section'>Property:</h5>
- * <ul class='spaced-list'>
- * <li><b>ID:</b> {@link
org.apache.juneau.config.Config#CONFIG_varResolver CONFIG_varResolver}
- * <li><b>Name:</b> <js>"Config.varResolver.o"</js>
- * <li><b>Data type:</b> {@link org.apache.juneau.svl.VarResolver}
- * <li><b>Default:</b> {@link
org.apache.juneau.svl.VarResolver#DEFAULT}
- * <li><b>Methods:</b>
- * <ul>
- * <li class='jm'>{@link
org.apache.juneau.config.ConfigBuilder#varResolver(Class)}
- * <li class='jm'>{@link
org.apache.juneau.config.ConfigBuilder#varResolver(VarResolver)}
- * </ul>
- * </ul>
- *
- * <h5 class='section'>Description:</h5>
- * <p>
- * The resolver to use for resolving SVL variables.
- */
- public static final String CONFIG_varResolver = PREFIX +
".varResolver.o";
-
- /**
- * Configuration property: Binary value line length.
- *
- * <h5 class='section'>Property:</h5>
- * <ul class='spaced-list'>
- * <li><b>ID:</b> {@link
org.apache.juneau.config.Config#CONFIG_binaryLineLength CONFIG_binaryLineLength}
- * <li><b>Name:</b> <js>"Config.binaryLineLength.i"</js>
- * <li><b>Data type:</b> <jk>int</jk>
- * <li><b>System property:</b> <c>Config.binaryLineLength</c>
- * <li><b>Environment variable:</b> <c>CONFIG_BINARYLINELENGTH</c>
- * <li><b>Default:</b> <c>-1</c>
- * <li><b>Methods:</b>
- * <ul>
- * <li class='jm'>{@link
org.apache.juneau.config.ConfigBuilder#binaryLineLength(int)}
- * </ul>
- * </ul>
- *
- * <h5 class='section'>Description:</h5>
- * <p>
- * When serializing binary values, lines will be split after this many
characters.
- * <br>Use <c>-1</c> to represent no line splitting.
- */
- public static final String CONFIG_binaryLineLength = PREFIX +
".binaryLineLength.i";
-
- /**
- * Configuration property: Binary value format.
- *
- * <h5 class='section'>Property:</h5>
- * <ul class='spaced-list'>
- * <li><b>ID:</b> {@link
org.apache.juneau.config.Config#CONFIG_binaryFormat CONFIG_binaryFormat}
- * <li><b>Name:</b> <js>"Config.binaryFormat.s"</js>
- * <li><b>Data type:</b> {@link org.apache.juneau.BinaryFormat}
- * <li><b>System property:</b> <c>Config.binaryFormat</c>
- * <li><b>Environment variable:</b> <c>CONFIG_BINARYFORMAT</c>
- * <li><b>Default:</b> {@link
org.apache.juneau.BinaryFormat#BASE64}
- * <li><b>Methods:</b>
- * <ul>
- * <li class='jm'>{@link
org.apache.juneau.config.ConfigBuilder#binaryFormat(BinaryFormat)}
- * </ul>
- * </ul>
- *
- * <h5 class='section'>Description:</h5>
- * <p>
- * The format to use when persisting byte arrays.
- *
- * <p>
- * Possible values:
- * <ul>
- * <li>{@link BinaryFormat#BASE64} - BASE64-encoded string.
- * <li>{@link BinaryFormat#HEX} - Hexadecimal.
- * <li>{@link BinaryFormat#SPACED_HEX} - Hexadecimal with spaces
between bytes.
- * </ul>
- */
- public static final String CONFIG_binaryFormat = PREFIX +
".binaryFormat.s";
-
- /**
- * Configuration property: Multi-line values should always be on
separate lines.
- *
- * <h5 class='section'>Property:</h5>
- * <ul class='spaced-list'>
- * <li><b>ID:</b> {@link
org.apache.juneau.config.Config#CONFIG_multiLineValuesOnSeparateLines
CONFIG_multiLineValuesOnSeparateLines}
- * <li><b>Name:</b>
<js>"Config.multiLineValuesOnSeparateLines.b"</js>
- * <li><b>Data type:</b> <jk>boolean</jk>
- * <li><b>System property:</b>
<c>Config.multiLineValuesOnSeparateLine</c>
- * <li><b>Environment variable:</b>
<c>CONFIG_MULTILINEVALUESONSEPARATELINE</c>
- * <li><b>Default:</b> <jk>false</jk>
- * <li><b>Methods:</b>
- * <ul>
- * <li class='jm'>{@link
org.apache.juneau.config.ConfigBuilder#multiLineValuesOnSeparateLines()}
- * </ul>
- * </ul>
- *
- * <h5 class='section'>Description:</h5>
- * <p>
- * When enabled, multi-line values will always be placed on a separate
line from the key.
- */
- public static final String CONFIG_multiLineValuesOnSeparateLines =
PREFIX + ".multiLineValuesOnSeparateLines.b";
-
- /**
- * Configuration property: Read-only.
- *
- * <h5 class='section'>Property:</h5>
- * <ul class='spaced-list'>
- * <li><b>ID:</b> {@link
org.apache.juneau.config.Config#CONFIG_readOnly CONFIG_readOnly}
- * <li><b>Name:</b> <js>"Config.readOnly.b"</js>
- * <li><b>Data type:</b> <jk>boolean</jk>
- * <li><b>System property:</b> <c>Config.readOnly</c>
- * <li><b>Environment variable:</b> <c>CONFIG_READONLY</c>
- * <li><b>Default:</b> <jk>false</jk>
- * <li><b>Methods:</b>
- * <ul>
- * <li class='jm'>{@link
org.apache.juneau.config.ConfigBuilder#readOnly()}
- * </ul>
- * </ul>
- *
- * <h5 class='section'>Description:</h5>
- * <p>
- * When enabled, attempts to call any setters on this object will throw
an {@link UnsupportedOperationException}.
- */
- public static final String CONFIG_readOnly = PREFIX + ".readOnly.b";
-
-
//-------------------------------------------------------------------------------------------------------------------
// Instance
//-------------------------------------------------------------------------------------------------------------------
- private final String name;
- private final ConfigStore store;
- private final WriterSerializer serializer;
- private final ReaderParser parser;
- private final ConfigEncoder encoder;
+ final String name;
+ final ConfigStore store;
+ final WriterSerializer serializer;
+ final ReaderParser parser;
+ final ConfigEncoder encoder;
+ final VarResolver varResolver;
+ final int binaryLineLength;
+ final BinaryFormat binaryFormat;
+ final boolean multiLineValuesOnSeparateLines, readOnly;
+
private final VarResolverSession varSession;
- private final int binaryLineLength;
- private final BinaryFormat binaryFormat;
- private final boolean multiLineValuesOnSeparateLines, readOnly;
private final ConfigMap configMap;
private final BeanSession beanSession;
private final List<ConfigEventListener> listeners =
Collections.synchronizedList(new LinkedList<ConfigEventListener>());
@@ -440,31 +201,31 @@ public final class Config extends Context implements
ConfigEventListener, Writab
/**
* Constructor.
*
- * @param cp
- * The property store containing all the settings for this object.
+ * @param builder The builder for this object.
* @throws IOException Thrown by underlying stream.
*/
- public Config(ContextProperties cp) throws IOException {
- super(cp, true);
+ public Config(ConfigBuilder builder) throws IOException {
+ super(builder);
- name = cp.getString(CONFIG_name).orElse("Configuration.cfg");
- store = cp.getInstance(CONFIG_store,
ConfigStore.class).orElse(ConfigFileStore.DEFAULT);
+ name = builder.name;
+ store = builder.store;
configMap = store.getMap(name);
configMap.register(this);
- serializer = cp.getInstance(CONFIG_serializer,
WriterSerializer.class).orElse(SimpleJsonSerializer.DEFAULT);
- parser = cp.getInstance(CONFIG_parser,
ReaderParser.class).orElse(JsonParser.DEFAULT);
+ serializer = builder.serializer;
+ parser = builder.parser;
beanSession = parser.createBeanSession();
- encoder = cp.getInstance(CONFIG_encoder,
ConfigEncoder.class).orElse(ConfigXorEncoder.INSTANCE);
- varSession = cp.getInstance(CONFIG_varResolver,
VarResolver.class).orElse(VarResolver.DEFAULT)
+ encoder = builder.encoder;
+ varResolver = builder.varResolver;
+ varSession = varResolver
.copy()
.vars(ConfigVar.class)
.bean(Config.class, this)
.build()
.createSession();
- binaryLineLength =
cp.getInteger(CONFIG_binaryLineLength).orElse(-1);
- binaryFormat = cp.get(CONFIG_binaryFormat,
BinaryFormat.class).orElse(BinaryFormat.BASE64);
- multiLineValuesOnSeparateLines =
getBoolean(CONFIG_multiLineValuesOnSeparateLines, false);
- readOnly = getBoolean(CONFIG_readOnly, false);
+ binaryLineLength = builder.binaryLineLength;
+ binaryFormat = builder.binaryFormat;
+ multiLineValuesOnSeparateLines =
builder.multiLineValuesOnSeparateLines;
+ readOnly = builder.readOnly;
}
Config(Config copyFrom, VarResolverSession varSession) {
@@ -476,6 +237,7 @@ public final class Config extends Context implements
ConfigEventListener, Writab
serializer = copyFrom.serializer;
parser = copyFrom.parser;
encoder = copyFrom.encoder;
+ varResolver = copyFrom.varResolver;
this.varSession = varSession;
binaryLineLength = copyFrom.binaryLineLength;
binaryFormat = copyFrom.binaryFormat;
@@ -1000,7 +762,7 @@ public final class Config extends Context implements
ConfigEventListener, Writab
* </p>
*
* <p>
- * Byte arrays are stored as encoded strings, typically BASE64, but
dependent on the {@link #CONFIG_binaryFormat} setting.
+ * Byte arrays are stored as encoded strings, typically BASE64, but
dependent on the {@link ConfigBuilder#binaryFormat(BinaryFormat)} setting.
*
* @param key The key.
* @return The value, or <jk>null</jk> if the section or key does not
exist.
diff --git
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/ConfigBuilder.java
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/ConfigBuilder.java
index e4ca351..72801c2 100644
---
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/ConfigBuilder.java
+++
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/ConfigBuilder.java
@@ -12,8 +12,9 @@
//
***************************************************************************************************************************
package org.apache.juneau.config;
-import static org.apache.juneau.config.Config.*;
+import static org.apache.juneau.internal.ExceptionUtils.*;
+import java.io.*;
import java.lang.reflect.*;
import java.util.*;
@@ -29,6 +30,7 @@ import org.apache.juneau.svl.*;
/**
* Builder for creating instances of {@link Config Configs}.
+ * {@review}
*
* <h5 class='section'>Example:</h5>
* <p class='bcode w800'>
@@ -43,11 +45,31 @@ import org.apache.juneau.svl.*;
@FluentSetters
public class ConfigBuilder extends ContextBuilder {
+ String name;
+ ConfigStore store;
+ WriterSerializer serializer;
+ ReaderParser parser;
+ ConfigEncoder encoder;
+ VarResolver varResolver;
+ int binaryLineLength;
+ BinaryFormat binaryFormat;
+ boolean multiLineValuesOnSeparateLines, readOnly;
+
/**
* Constructor, default settings.
*/
public ConfigBuilder() {
super();
+ name = env("Config.name", "Configuration.cfg");
+ store = ConfigFileStore.DEFAULT;
+ serializer = SimpleJsonSerializer.DEFAULT;
+ parser = JsonParser.DEFAULT;
+ encoder = ConfigXorEncoder.INSTANCE;
+ varResolver = VarResolver.DEFAULT;
+ binaryLineLength = env("Config.binaryLineLength", -1);
+ binaryFormat = env("Config.binaryFormat", BinaryFormat.BASE64);
+ multiLineValuesOnSeparateLines =
env("Config.multiLineValuesOnSeparateLines", false);
+ readOnly = env("Config.readOnly", false);
}
/**
@@ -57,11 +79,25 @@ public class ConfigBuilder extends ContextBuilder {
*/
public ConfigBuilder(Config copyFrom) {
super(copyFrom);
+ name = copyFrom.name;
+ store = copyFrom.store;
+ serializer = copyFrom.serializer;
+ parser = copyFrom.parser;
+ encoder = copyFrom.encoder;
+ varResolver = copyFrom.varResolver;
+ binaryLineLength = copyFrom.binaryLineLength;
+ binaryFormat = copyFrom.binaryFormat;
+ multiLineValuesOnSeparateLines =
copyFrom.multiLineValuesOnSeparateLines;
+ readOnly = copyFrom.readOnly;
}
@Override /* ContextBuilder */
public Config build() {
- return build(Config.class);
+ try {
+ return new Config(this);
+ } catch (IOException e) {
+ throw runtimeException(e);
+ }
}
@@ -70,7 +106,7 @@ public class ConfigBuilder extends ContextBuilder {
//-----------------------------------------------------------------------------------------------------------------
/**
- * <i><l>Config</l> configuration property: </i> Configuration
name.
+ * Configuration name.
*
* <p>
* Specifies the configuration name.
@@ -79,15 +115,21 @@ public class ConfigBuilder extends ContextBuilder {
*
* @param value
* The new value for this property.
- * <br>The default is <js>"Configuration"</js>.
+ * <br>The default is the first value found:
+ * <ul>
+ * <li>System property <js>"Config.name"
+ * <li>Environment variable <js>"CONFIG_NAME"
+ * <li><js>"Configuration.cfg"</js>
+ * </ul>
* @return This object (for method chaining).
*/
public ConfigBuilder name(String value) {
- return set(CONFIG_name, value);
+ name = value;
+ return this;
}
/**
- * <i><l>Config</l> configuration property: </i> Configuration
store.
+ * Configuration store.
*
* <p>
* The configuration store used for retrieving and storing
configurations.
@@ -98,11 +140,12 @@ public class ConfigBuilder extends ContextBuilder {
* @return This object (for method chaining).
*/
public ConfigBuilder store(ConfigStore value) {
- return set(CONFIG_store, value);
+ store = value;
+ return this;
}
/**
- * <i><l>Config</l> configuration property: </i> Configuration
store.
+ * Configuration store.
*
* <p>
* Convenience method for calling
<code>store(ConfigMemoryStore.<jsf>DEFAULT</jsf>)</code>.
@@ -110,41 +153,28 @@ public class ConfigBuilder extends ContextBuilder {
* @return This object (for method chaining).
*/
public ConfigBuilder memStore() {
- return set(CONFIG_store, ConfigMemoryStore.DEFAULT);
+ store = ConfigMemoryStore.DEFAULT;
+ return this;
}
/**
- * <i><l>Config</l> configuration property: </i> POJO serializer.
+ * POJO serializer.
*
* <p>
* The serializer to use for serializing POJO values.
*
* @param value
* The new value for this property.
- * <br>The default is {@link SimpleJsonSerializer#DEFAULT}.
+ * <br>The default is {@link SimpleJsonSerializer#DEFAULT}
* @return This object (for method chaining).
*/
public ConfigBuilder serializer(WriterSerializer value) {
- return set(CONFIG_serializer, value);
+ serializer = value;
+ return this;
}
/**
- * <i><l>Config</l> configuration property: </i> POJO serializer.
- *
- * <p>
- * The serializer to use for serializing POJO values.
- *
- * @param value
- * The new value for this property.
- * <br>The default is {@link SimpleJsonSerializer#DEFAULT}.
- * @return This object (for method chaining).
- */
- public ConfigBuilder serializer(Class<? extends WriterSerializer>
value) {
- return set(CONFIG_serializer, value);
- }
-
- /**
- * <i><l>Config</l> configuration property: </i> POJO parser.
+ * POJO parser.
*
* <p>
* The parser to use for parsing values to POJOs.
@@ -155,26 +185,12 @@ public class ConfigBuilder extends ContextBuilder {
* @return This object (for method chaining).
*/
public ConfigBuilder parser(ReaderParser value) {
- return set(CONFIG_parser, value);
- }
-
- /**
- * <i><l>Config</l> configuration property: </i> POJO parser.
- *
- * <p>
- * The parser to use for parsing values to POJOs.
- *
- * @param value
- * The new value for this property.
- * <br>The default is {@link JsonParser#DEFAULT}.
- * @return This object (for method chaining).
- */
- public ConfigBuilder parser(Class<? extends ReaderParser> value) {
- return set(CONFIG_parser, value);
+ parser = value;
+ return this;
}
/**
- * <i><l>Config</l> configuration property: </i> Value encoder.
+ * Value encoder.
*
* <p>
* The encoder to use for encoding encoded configuration values.
@@ -185,26 +201,12 @@ public class ConfigBuilder extends ContextBuilder {
* @return This object (for method chaining).
*/
public ConfigBuilder encoder(ConfigEncoder value) {
- return set(CONFIG_encoder, value);
- }
-
- /**
- * <i><l>Config</l> configuration property: </i> Value encoder.
- *
- * <p>
- * The encoder to use for encoding encoded configuration values.
- *
- * @param value
- * The new value for this property.
- * <br>The default is {@link ConfigXorEncoder#INSTANCE}.
- * @return This object (for method chaining).
- */
- public ConfigBuilder encoder(Class<? extends ConfigEncoder> value) {
- return set(CONFIG_encoder, value);
+ encoder = value;
+ return this;
}
/**
- * <i><l>Config</l> configuration property: </i> SVL variable
resolver.
+ * SVL variable resolver.
*
* <p>
* The resolver to use for resolving SVL variables.
@@ -215,26 +217,12 @@ public class ConfigBuilder extends ContextBuilder {
* @return This object (for method chaining).
*/
public ConfigBuilder varResolver(VarResolver value) {
- return set(CONFIG_varResolver, value);
- }
-
- /**
- * <i><l>Config</l> configuration property: </i> SVL variable
resolver.
- *
- * <p>
- * The resolver to use for resolving SVL variables.
- *
- * @param value
- * The new value for this property.
- * <br>The default is {@link VarResolver#DEFAULT}.
- * @return This object (for method chaining).
- */
- public ConfigBuilder varResolver(Class<? extends VarResolver> value) {
- return set(CONFIG_varResolver, value);
+ varResolver = value;
+ return this;
}
/**
- * <i><l>Config</l> configuration property: </i> Binary value
line length.
+ * Binary value line length.
*
* <p>
* When serializing binary values, lines will be split after this many
characters.
@@ -242,15 +230,21 @@ public class ConfigBuilder extends ContextBuilder {
*
* @param value
* The new value for this property.
- * <br>The default is <c>-1</c>.
+ * <br>The default is the first value found:
+ * <ul>
+ * <li>System property <js>"Config.binaryLineLength"
+ * <li>Environment variable <js>"CONFIG_BINARYLINELENGTH"
+ * <li><c>-1</c>
+ * </ul>
* @return This object (for method chaining).
*/
public ConfigBuilder binaryLineLength(int value) {
- return set(CONFIG_binaryLineLength, value);
+ binaryLineLength = value;
+ return this;
}
/**
- * <i><l>Config</l> configuration property: </i> Binary value
format.
+ * Binary value format.
*
* <p>
* The format to use when persisting byte arrays.
@@ -265,35 +259,59 @@ public class ConfigBuilder extends ContextBuilder {
*
* @param value
* The new value for this property.
- * <br>The default is {@link BinaryFormat#BASE64}.
+ * <br>The default is the first value found:
+ * <ul>
+ * <li>System property <js>"Config.binaryFormat"
+ * <li>Environment variable <js>"CONFIG_BINARYFORMAT"
+ * <li>{@link BinaryFormat#BASE64}
+ * </ul>
* @return This object (for method chaining).
*/
public ConfigBuilder binaryFormat(BinaryFormat value) {
- return set(CONFIG_binaryFormat, value);
+ binaryFormat = value;
+ return this;
}
/**
- * <i><l>Config</l> configuration property: </i> Multi-line
values on separate lines.
+ * Multi-line values on separate lines.
*
* <p>
* When enabled, multi-line values will always be placed on a separate
line from the key.
*
+ * <p>
+ * The default is the first value found:
+ * <ul>
+ * <li>System property
<js>"Config.multiLineValuesOnSeparateLine"
+ * <li>Environment variable
<js>"CONFIG_MULTILINEVALUESONSEPARATELINE"
+ * <li><jk>false</jk>
+ * </ul>
+ *
* @return This object (for method chaining).
*/
public ConfigBuilder multiLineValuesOnSeparateLines() {
- return set(CONFIG_multiLineValuesOnSeparateLines);
+ multiLineValuesOnSeparateLines = true;
+ return this;
}
/**
- * <i><l>Config</l> configuration property: </i> Beans on
separate lines.
+ * Read-only mode.
*
* <p>
* When enabled, attempts to call any setters on this object will throw
an {@link UnsupportedOperationException}.
*
+ * <p>
+ * The default is the first value found:
+ * <ul>
+ * <li>System property <js>"Config.readOnly"
+ * <li>Environment variable <js>"CONFIG_READONLY"
+ * <li><jk>false</jk>
+ * </ul>
+ *
* @return This object (for method chaining).
*/
public ConfigBuilder readOnly() {
- return set(CONFIG_readOnly);
+ readOnly = true;
+ return this;
}
// <FluentSetters>
diff --git
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigClasspathStore.java
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigClasspathStore.java
index a3c61a9..6664fb8 100644
---
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigClasspathStore.java
+++
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigClasspathStore.java
@@ -23,6 +23,7 @@ import org.apache.juneau.internal.*;
/**
* Classpath-based storage location for configuration files.
+ * {@review}
*
* <p>
* Looks inside the JVM classpath for configuration files.
diff --git
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigClasspathStoreBuilder.java
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigClasspathStoreBuilder.java
index a9d6382..286bf6a 100644
---
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigClasspathStoreBuilder.java
+++
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigClasspathStoreBuilder.java
@@ -22,6 +22,7 @@ import org.apache.juneau.svl.*;
/**
* Builder for {@link ConfigClasspathStore} objects.
+ * {@review}
*/
@FluentSetters
public class ConfigClasspathStoreBuilder extends ConfigStoreBuilder {
diff --git
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigFileStore.java
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigFileStore.java
index 6f7d626..d5cbc99 100644
---
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigFileStore.java
+++
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigFileStore.java
@@ -30,6 +30,7 @@ import org.apache.juneau.internal.*;
/**
* Filesystem-based storage location for configuration files.
+ * {@review}
*
* <p>
* Points to a file system directory containing configuration files.
diff --git
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigFileStoreBuilder.java
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigFileStoreBuilder.java
index 23aa4b3..66b9127 100644
---
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigFileStoreBuilder.java
+++
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigFileStoreBuilder.java
@@ -24,6 +24,7 @@ import org.apache.juneau.svl.*;
/**
* Builder for {@link ConfigFileStore} objects.
+ * {@review}
*/
@FluentSetters
public class ConfigFileStoreBuilder extends ConfigStoreBuilder {
@@ -38,12 +39,12 @@ public class ConfigFileStoreBuilder extends
ConfigStoreBuilder {
*/
public ConfigFileStoreBuilder() {
super();
- directory = env(String.class, "ConfigFileStore.directory", ".");
- charset = env(Charset.class, "ConfigFileStore.charset",
Charset.defaultCharset());
- enableWatcher = env(Boolean.class,
"ConfigFileStore.enableWatcher", false);
- watcherSensitivity = env(WatcherSensitivity.class,
"ConfigFileStore.watcherSensitivity", WatcherSensitivity.MEDIUM);
- updateOnWrite = env(Boolean.class,
"ConfigFileStore.updateOnWrite", false);
- extensions = env(String.class, "ConfigFileStore.extensions",
"cfg");
+ directory = env("ConfigFileStore.directory", ".");
+ charset = env("ConfigFileStore.charset",
Charset.defaultCharset());
+ enableWatcher = env("ConfigFileStore.enableWatcher", false);
+ watcherSensitivity = env("ConfigFileStore.watcherSensitivity",
WatcherSensitivity.MEDIUM);
+ updateOnWrite = env("ConfigFileStore.updateOnWrite", false);
+ extensions = env("ConfigFileStore.extensions", "cfg");
}
/**
diff --git
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigMemoryStore.java
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigMemoryStore.java
index 3408556..a463d2b 100644
---
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigMemoryStore.java
+++
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigMemoryStore.java
@@ -22,6 +22,7 @@ import org.apache.juneau.collections.*;
/**
* Filesystem-based storage location for configuration files.
+ * {@review}
*
* <p>
* Points to a file system directory containing configuration files.
diff --git
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigMemoryStoreBuilder.java
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigMemoryStoreBuilder.java
index 5e93834..4f04255 100644
---
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigMemoryStoreBuilder.java
+++
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigMemoryStoreBuilder.java
@@ -22,6 +22,7 @@ import org.apache.juneau.svl.*;
/**
* Builder for {@link ConfigMemoryStore} objects.
+ * {@review}
*/
@FluentSetters
public class ConfigMemoryStoreBuilder extends ConfigStoreBuilder {
diff --git
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigStore.java
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigStore.java
index 8d7f9ff..7be7427 100644
---
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigStore.java
+++
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigStore.java
@@ -23,6 +23,7 @@ import org.apache.juneau.config.internal.*;
/**
* Represents a storage location for configuration files.
+ * {@review}
*
* <p>
* Content stores require two methods to be implemented:
diff --git
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigStoreBuilder.java
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigStoreBuilder.java
index 47bc730..b2384a5 100644
---
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigStoreBuilder.java
+++
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigStoreBuilder.java
@@ -22,6 +22,7 @@ import org.apache.juneau.svl.*;
/**
* Base builder class for {@link ConfigStore} objects.
+ * {@review}
*/
@FluentSetters
public abstract class ConfigStoreBuilder extends ContextBuilder {
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ContextBuilder.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ContextBuilder.java
index b2b14dd..ed2ea08 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ContextBuilder.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ContextBuilder.java
@@ -60,7 +60,7 @@ public abstract class ContextBuilder {
*/
public ContextBuilder() {
this.cpb = ContextProperties.create();
- debug = env(Boolean.class, CONTEXT_debug, false);
+ debug = env("Context.debug", false);
}
/**
@@ -70,7 +70,7 @@ public abstract class ContextBuilder {
*/
public ContextBuilder(Context copyFrom) {
this.cpb = copyFrom == null ? ContextProperties.DEFAULT.copy()
: copyFrom.properties.copy();
- this.debug = copyFrom == null ? env(Boolean.class,
CONTEXT_debug, false) : copyFrom.debug;
+ this.debug = copyFrom == null ? env("Context.debug", false) :
copyFrom.debug;
}
/**
@@ -877,18 +877,18 @@ public abstract class ContextBuilder {
* First looks in system properties. Then converts the name to
env-safe and looks in the system environment.
* Then returns the default if it can't be found.
*
- * @param c The value type.
* @param name The property name.
* @param def The default value if not found.
* @return The default value.
*/
@SuppressWarnings({ "unchecked", "rawtypes" })
- protected <T> T env(Class<T> c, String name, T def) {
+ protected <T> T env(String name, T def) {
String s = System.getProperty(name);
if (s == null)
s = System.getenv(envName(name));
if (s == null)
return def;
+ Class<?> c = def.getClass();
if (c.isEnum())
return (T)Enum.valueOf((Class<? extends Enum>) c, s);
Function<String,T> f = (Function<String,T>)ENV_FUNCTIONS.get(c);