package org.osgl.util;
import org.osgl.$;
import org.osgl.Osgl;
abstract class PropertyHandlerBase implements PropertyHandler {
protected Osgl.Function<Class<?>, Object> objectFactory;
protected Osgl.Func2<String, Class<?>, ?> stringValueResolver;
protected PropertyGetter.NullValuePolicy nullValuePolicy;
PropertyHandlerBase() {
this(SimpleObjectFactory.INSTANCE, SimpleStringValueResolver.INSTANCE);
}
PropertyHandlerBase(PropertyGetter.NullValuePolicy nullValuePolicy) {
this(SimpleObjectFactory.INSTANCE, SimpleStringValueResolver.INSTANCE, nullValuePolicy);
}
PropertyHandlerBase(Osgl.Function<Class<?>, Object> objectFactory, Osgl.Func2<String, Class<?>, ?> stringValueResolver) {
setObjectFactory(objectFactory);
setStringValueResolver(stringValueResolver);
setNullValuePolicy(PropertyGetter.NullValuePolicy.RETURN_NULL);
}
PropertyHandlerBase(Osgl.Function<Class<?>, Object> objectFactory,
Osgl.Func2<String, Class<?>, ?> stringValueResolver,
PropertyGetter.NullValuePolicy nullValuePolicy) {
setObjectFactory(objectFactory);
setStringValueResolver(stringValueResolver);
if (null == nullValuePolicy) {
nullValuePolicy = PropertyGetter.NullValuePolicy.RETURN_NULL;
}
setNullValuePolicy(nullValuePolicy);
}
@Override
public void setObjectFactory(Osgl.Function<Class<?>, Object> factory) {
this.objectFactory = $.notNull(factory);
}
@Override
public void setStringValueResolver(Osgl.Func2<String, Class<?>, ?> stringValueResolver) {
this.stringValueResolver = $.notNull(stringValueResolver);
}
public void setNullValuePolicy(PropertyGetter.NullValuePolicy nvp) {
this.nullValuePolicy = $.notNull(nvp);
}
}