package org.etk.orm.api;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import org.etk.orm.api.ORMBuilder.Configuration;
import org.etk.orm.api.format.DefaultObjectFormatter;
public class ORMBuilderConfigurationFactoryImpl extends ORMBuilder.Configuration.Factory {
/**
* Options configurable via system properties.
*/
private final static Set<ORMBuilder.Option> SYSTEM_OPTIONS = Collections.unmodifiableSet(new HashSet<ORMBuilder.Option>(Arrays.asList(
ORMBuilder.PROPERTY_CACHE_ENABLED,
ORMBuilder.PROPERTY_READ_AHEAD_ENABLED,
ORMBuilder.JCR_OPTIMIZE_ENABLED,
ORMBuilder.JCR_OPTIMIZE_HAS_PROPERTY_ENABLED,
ORMBuilder.JCR_OPTIMIZE_HAS_NODE_ENABLED,
ORMBuilder.SESSION_LIFECYCLE_CLASSNAME
)));
/** . */
private static final ORMBuilder.Configuration DEFAULT_CONFIG;
static {
//
ORMBuilder.Configuration config = new ORMBuilder.Configuration();
// Configure system properties options
if (!Boolean.FALSE.equals(config.getOptionValue(ORMBuilder.USE_SYSTEM_PROPERTIES))) {
for (ORMBuilder.Option<?> option : SYSTEM_OPTIONS) {
String value = System.getProperty(option.getName());
if (value != null) {
_set(config, option, value, false);
}
}
}
config.setOptionValue(ORMBuilder.INSTRUMENTOR_CLASSNAME, "org.etk.orm.apt.InstrumentorImpl", false);
config.setOptionValue(ORMBuilder.SESSION_LIFECYCLE_CLASSNAME, "org.etk.orm.api.ORMSessionLifeCycle", false);
config.setOptionValue(ORMBuilder.OBJECT_FORMATTER_CLASSNAME, DefaultObjectFormatter.class.getName(), false);
config.setOptionValue(ORMBuilder.PROPERTY_CACHE_ENABLED, false, false);
config.setOptionValue(ORMBuilder.PROPERTY_READ_AHEAD_ENABLED, false, false);
config.setOptionValue(ORMBuilder.JCR_OPTIMIZE_HAS_PROPERTY_ENABLED, false, false);
config.setOptionValue(ORMBuilder.JCR_OPTIMIZE_HAS_NODE_ENABLED, false, false);
config.setOptionValue(ORMBuilder.ROOT_NODE_PATH, "/", false);
config.setOptionValue(ORMBuilder.CREATE_ROOT_NODE, false, false);
config.setOptionValue(ORMBuilder.LAZY_CREATE_ROOT_NODE, false, false);
//
DEFAULT_CONFIG = config;
}
// Just for type safety
private static <D> void _set(ORMBuilder.Configuration config, ORMBuilder.Option<D> option, String value, boolean overwrite) throws NullPointerException {
config.setOptionValue(option, option.getType().parse(value), overwrite);
}
@Override
public ORMBuilder.Configuration create() {
return new ORMBuilder.Configuration(DEFAULT_CONFIG);
}
}