ConfigurationService
is responsible for managing the Configuration
thread locals.
Like this it can be consulted
Accessing configuration
import org.meeuw.configuration.Configuration;
import org.meeuw.configuration.ConfigurationService;
import org.meeuw.math.text.configuration.NumberConfiguration;
import org.meeuw.math.text.configuration.UncertaintyConfiguration;
import static org.meeuw.configuration.ConfigurationService.*;
...
Configuration configuration = getConfiguration();
NumberConfiguration aspect = configuration.getAspect(NumberConfiguration.class);
int minimalExponent = aspect.getMinimalExponent();
This would however probably mainly be used in implementations.
Actual configuration can be done in two basically distinct ways.
-
a new configuration object can be set as a thread local
-
global default configuration object can be set
temporary overrides
{
//noinspection resource
setConfiguration(builder ->
builder.configure(NumberConfiguration.class,
(numberConfiguration) -> numberConfiguration.withMinimalExponent(8)
)
);
//...code...
ConfigurationService.resetToDefaults();
}
// or using Autocloseable
try (Reset ignored = setConfiguration(builder ->
builder.configure(NumberConfiguration.class,
(numberConfiguration) -> numberConfiguration.withMinimalExponent(8)
)
)) {
;
//...code...
}
There are some utilities in ConfigurationService
that makes this process a bit easier.
temporary overrides utilities
withConfiguration((con) ->
con.configure(UncertaintyConfiguration.class,
(uncertaintyConfiguration) -> uncertaintyConfiguration.withNotation(UncertaintyConfiguration.Notation.PARENTHESES))
.configure(NumberConfiguration.class,
(numberConfiguration) -> numberConfiguration.withMinimalExponent(3))
, () -> {
// code
});
Global defaults can be set similarly
setting global defaults
defaultConfiguration((configurationBuilder) ->
configurationBuilder.configure(NumberConfiguration.class, c -> c.withMinimalExponent(4))
.configure(UncertaintyConfiguration.class, c -> c.withNotation(UncertaintyConfiguration.Notation.PLUS_MINUS))
);
ConfigurationService itself is not actually math related, and is released in a separate artifact.