package gueei.binding; import java.util.Collection; import java.util.HashMap; public class DynamicObject extends Observable<DynamicObject> implements IPropertyContainer, Observer{ public DynamicObject() { super(DynamicObject.class); } private HashMap<String, IObservable<?>> observables = new HashMap<String, IObservable<?>>(); public void putObservable(String name, IObservable<?> observable){ observables.put(name, observable); observable.subscribe(this); } public boolean observableExists(String name){ return observables.containsKey(name); } public IObservable<?> getObservableByName(String name) throws Exception { return observables.get(name); } @SuppressWarnings("unchecked") public <T> T tryGetObservableValue(String name, T defaultValue){ if (!observableExists(name)) return defaultValue; try{ return (T)getObservableByName(name).get(); }catch(Exception e){ return defaultValue; } } public Command getCommandByName(String name) throws Exception { return null; } @Override public DynamicObject get() { return this; } public Object getValueByName(String name) throws Exception { return null; } @Override public void onPropertyChanged(IObservable<?> prop, Collection<Object> initiators) { initiators.add(this); this.notifyChanged(initiators); } }