Class BeanConfig
- java.lang.Object
-
- uk.ac.starlink.util.BeanConfig
-
public class BeanConfig extends java.lang.ObjectUtility class for configuring dynamically loaded objects.The idea is that objects can be configured from user-supplied text strings that configure bean-like properties. For instance an object may be specified on the command line or using a system property with a syntax like:
"java.util.Date(year=212,day=1)"which would construct a Date object using its no-arg constructor, and then configure the bean-like "year" property by reflectively invoking thesetYearandsetDaymethods of the Date class.Where present, a
ConfigMethodannotation on the relevant mutator methods is used to provide aliased property names, as well as to improve LoadException error messages when property setting fails.The configuration syntax is fairly straightforward; the format is a comma-separated list of
name=valuesettings within a pair of parentheses. Obvious serializations are supported for numeric and boolean values; string values are unquoted; commas may be backslash-escaped; and symbolic values are permitted for Enums and static public members on the value class or created object class.- Since:
- 11 Sep 2020
- Author:
- Mark Taylor
- See Also:
ConfigMethod
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classBeanConfig.SettingRepresents an object configuration operation.
-
Constructor Summary
Constructors Constructor Description BeanConfig(java.lang.String baseTxt, java.lang.String configTxt)Constructs a BeanConfig with a basic object representation and a string providing configuration information.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description static voidapplySetting(java.lang.Object target, BeanConfig.Setting setting)Applies a given setting to an object.voidconfigBean(java.lang.Object target)Attempts to apply this object's configuration setttings to a supplied target object.java.lang.StringgetBaseText()Returns the basic object name for this object.java.lang.StringgetConfigText()Returns configuration specification.static java.lang.StringgetMethodUsage(java.lang.reflect.Method configMethod)Returns a usage string corresponding to a given configuration method.BeanConfig.Setting[]getSettings()Returns the parsed settings for this object, as extracted from the configuration text.static voidmain(java.lang.String[] args)static BeanConfigparseSpec(java.lang.String txt)Parses an object specification to produce a BeanConfig instance.
-
-
-
Constructor Detail
-
BeanConfig
public BeanConfig(java.lang.String baseTxt, java.lang.String configTxt)Constructs a BeanConfig with a basic object representation and a string providing configuration information. The baseTxt could be a classname or something else. The configTxt should normally be of the formname1=value1,name2=value2,...; if other forms are used, a LoadException with a helpful error message will be generated as appropriate by relevant method invocations.- Parameters:
baseTxt- basic object name or representationconfigTxt- configuration text, normally as supplied in trailing parenthesis
-
-
Method Detail
-
getBaseText
public java.lang.String getBaseText()
Returns the basic object name for this object. May be a classname or something else. This should not be null.- Returns:
- basic representation
-
getConfigText
public java.lang.String getConfigText()
Returns configuration specification. May be null if there was no trailing parenthesis.- Returns:
- configuration text, nominally of the form "n1=v1,n2=v2,...",
-
getSettings
public BeanConfig.Setting[] getSettings() throws LoadException
Returns the parsed settings for this object, as extracted from the configuration text. The list may be empty.- Returns:
- configuration settings
- Throws:
LoadException- if the config text was badly-formed
-
configBean
public void configBean(java.lang.Object target) throws LoadExceptionAttempts to apply this object's configuration setttings to a supplied target object.- Parameters:
target- object to configure- Throws:
LoadException- with a helpful error message if the settings don't work
-
parseSpec
public static BeanConfig parseSpec(java.lang.String txt)
Parses an object specification to produce a BeanConfig instance. The specification is of the formbase-name(n1=v1,n2=v2,...). If there is no well-formed parenthesised config-string at the end, the returned object has a base-name that is the whole of the input string, and no config text.- Parameters:
txt- input text- Returns:
- BaseConfig object, which may or may not have configuration information
-
applySetting
public static void applySetting(java.lang.Object target, BeanConfig.Setting setting) throws java.lang.ReflectiveOperationExceptionApplies a given setting to an object.- Parameters:
target- object to configuresetting- setting to apply- Throws:
java.lang.RuntimeException- in case of various problems with converting the supplied string to the required typejava.lang.ReflectiveOperationException- in case of some reflection trouble
-
getMethodUsage
public static java.lang.String getMethodUsage(java.lang.reflect.Method configMethod)
Returns a usage string corresponding to a given configuration method.- Parameters:
configMethod- mutator method- Returns:
- short user-directed usage text
-
main
public static void main(java.lang.String[] args) throws java.lang.ReflectiveOperationException, LoadException- Throws:
java.lang.ReflectiveOperationExceptionLoadException
-
-