package xapi.ui.api;
import xapi.collect.X_Collect;
import xapi.collect.api.StringTo;
import xapi.fu.In1Out1;
import xapi.fu.In2;
import xapi.ui.service.UiService;
/**
* @author James X. Nelson (james@wetheinter.net)
* Created on 4/19/16.
*/
public class UiWithProperties <Node, E extends UiElement<Node, ? extends Node, E>> implements UiFeature<Node, E> {
private In1Out1<String, Object> getter;
private In2<String, Object> setter;
public UiWithProperties() {
final StringTo<Object> values = X_Collect.newStringMap(Object.class);
getter = values::get;
setter = values::put;
}
@Override
public void initialize(E element, UiService service) {
getter = findGetter(element);
if (getter != null) {
setter = findSetter(element);
}
if (setter == null) {
final StringTo<Object> values = X_Collect.newStringMap(Object.class);
getter = values::get;
setter = values::put;
}
}
protected In2<String, Object> findSetter(E element) {
return null;
}
protected In1Out1<String, Object> findGetter(E element) {
return null;
}
public Object getProperty(String key) {
return getter.io(key);
}
public void setProperty(String key, Object value) {
setter.in(key, value);
}
}