public class UnixShellVariableSubstituter extends AbstractVariableSubstituter
The UnixShellVariableSubstituter class implements the VariableSubstituter interface and provides an inline variable substitution capability using a simplified Unix Bourne (or GNU bash) shell variable syntax. This syntax recognizes the "$var", "${var}" and "${var?default} sequences as variable references. For example, given the string (variables in bold):
file:$user.home/profiles/$PLATFORM/${cfg?config}.txt
and the variable values:
user.home=/home/bmc PLATFORM=freebsd
a UnixShellVariableSubstituter will produce the result string (substitutions noted in bold):
Notes and Caveatsfile:/home/bmc/profiles/freebsd/config.txt
It's also possible to configure a UnixShellVariableSubstituter
to throw a UndefinedVariableException
, rather than substituting
a blank, if a variable is undefined and a default value is not specified.
See the AbstractVariableSubstituter.setAbortOnUndefinedVariable(boolean)
method.
WindowsCmdVariableSubstituter
,
VariableDereferencer
,
VariableSubstituter
,
String
Modifier and Type | Field and Description |
---|---|
static java.lang.String |
VARIABLE_METACHARACTERS
List of metacharacters that are used to introduce a variable reference.
|
Constructor and Description |
---|
UnixShellVariableSubstituter()
Default constructor.
|
Modifier and Type | Method and Description |
---|---|
boolean |
getHonorEscapes()
Get the value of the flag that controls whether or not the
substitute() method will honor backslash escapes within
variable references.
|
static boolean |
isVariableMetacharacter(char c)
Determine whether a character is one of the variable metacharacters
(i.e., the characters that identify a variable reference).
|
void |
setHonorEscapes(boolean enable)
Set the value of the flag that controls whether or not the
substitute() method will honor backslash escapes within
variable references.
|
java.lang.String |
substitute(java.lang.String s,
VariableDereferencer deref,
VariableNameChecker nameChecker,
java.lang.Object context)
Substitute all variable references in the supplied string, using
a Unix Bourne Shell-style variable syntax.
|
java.lang.String |
substitute(java.lang.String s,
VariableDereferencer deref,
VariableNameChecker nameChecker,
java.lang.Object context,
boolean allowEscapes)
Deprecated.
As of version 2.3; please use
setHonorEscapes(boolean) |
getAbortOnSyntaxError, getAbortOnUndefinedVariable, legalVariableCharacter, setAbortOnSyntaxError, setAbortOnUndefinedVariable, substitute, substitute
public static final java.lang.String VARIABLE_METACHARACTERS
public UnixShellVariableSubstituter()
public boolean getHonorEscapes()
setHonorEscapes(boolean)
public void setHonorEscapes(boolean enable)
enable
- true if backslash escapes should be honored,
false if not.getHonorEscapes()
public java.lang.String substitute(java.lang.String s, VariableDereferencer deref, VariableNameChecker nameChecker, java.lang.Object context, boolean allowEscapes) throws VariableSyntaxException, UndefinedVariableException, VariableSubstitutionException
setHonorEscapes(boolean)
Substitute all variable references in the supplied string, using
a Unix Bourne Shell-style variable syntax. This method uses a
supplied VariableDereferencer object to resolve variable
values. Note that this method throws no exceptions. Syntax errors in
the variable references are silently ignored. Variables that have no
value are substituted as the empty string. If the
nameChecker parameter is not null, this method calls its
VariableNameChecker.legalVariableCharacter(char)
method to
determine whether a given character is a legal part of a variable
name. If nameChecker is null, then this method assumes that
variable names may consist solely of alphanumeric characters,
underscores and periods. This syntax is sufficient to substitute
variables from System.properties, for instance.
s
- the string containing possible variable referencesderef
- the VariableDereferencer object
to use to resolve the variables' values.nameChecker
- the VariableNameChecker object to be
used to check for legal variable name characters,
or nullcontext
- an optional context object, passed through
unmodified to the deref object's
VariableDereferencer.getVariableValue(java.lang.String, java.lang.Object)
method. This object can be anything at all (and,
in fact, may be null if you don't care.) It's
primarily useful for passing context information
from the caller to the
VariableDereferencer.allowEscapes
- whehther or not escape sequences are honoredUndefinedVariableException
- undefined variable, and
AbstractVariableSubstituter.getAbortOnUndefinedVariable()
returns trueVariableSyntaxException
- syntax error, and
AbstractVariableSubstituter.getAbortOnSyntaxError()
returns trueVariableSubstitutionException
- substitution errorAbstractVariableSubstituter.substitute(String,VariableDereferencer,Object)
,
VariableDereferencer.getVariableValue(String,Object)
public java.lang.String substitute(java.lang.String s, VariableDereferencer deref, VariableNameChecker nameChecker, java.lang.Object context) throws VariableSyntaxException, UndefinedVariableException, VariableSubstitutionException
Substitute all variable references in the supplied string, using
a Unix Bourne Shell-style variable syntax. This method uses a
supplied VariableDereferencer object to resolve variable
values. Note that this method throws no exceptions. Syntax errors in
the variable references are silently ignored. Variables that have no
value are substituted as the empty string. If the
nameChecker parameter is not null, this method calls its
VariableNameChecker.legalVariableCharacter(char)
method to
determine whether a given character is a legal part of a variable
name. If nameChecker is null, then this method assumes that
variable names may consist solely of alphanumeric characters,
underscores and periods. This syntax is sufficient to substitute
variables from System.properties, for instance.
substitute
in interface VariableSubstituter
substitute
in class AbstractVariableSubstituter
s
- the string containing possible variable referencesderef
- the VariableDereferencer object
to use to resolve the variables' values.nameChecker
- the VariableNameChecker object to be
used to check for legal variable name characters,
or nullcontext
- an optional context object, passed through
unmodified to the deref object's
VariableDereferencer.getVariableValue(java.lang.String, java.lang.Object)
method. This object can be anything at all (and,
in fact, may be null if you don't care.) It's
primarily useful for passing context information
from the caller to the
VariableDereferencer.UndefinedVariableException
- undefined variable, and
AbstractVariableSubstituter.getAbortOnUndefinedVariable()
returns trueVariableSyntaxException
- syntax error, and
AbstractVariableSubstituter.getAbortOnSyntaxError()
returns trueVariableSubstitutionException
- substitution errorAbstractVariableSubstituter.substitute(String,VariableDereferencer,Object)
,
VariableDereferencer.getVariableValue(String,Object)
public static boolean isVariableMetacharacter(char c)
c
- the character to test