package gueei.binding.labs.validation;
import gueei.binding.IObservable;
import gueei.binding.Observable;
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.util.Hashtable;
public class ReflectionAnnotatedPropertyContainer implements IAnnoatedPropertyContainer {
protected Hashtable<String, Field> cachedObservableFields =
new Hashtable<String, Field>();
final Object model;
public ReflectionAnnotatedPropertyContainer(Object model){
Class<?> clazz = model.getClass();
for (Field field : clazz.getFields()){
try{
if (!(field.get(model) instanceof Observable)) continue;
cachedObservableFields.put(field.getName(), field);
}catch(Exception e){
// ignore any error
continue;
}
}
this.model = model;
}
@Override
public String[] getAllObservableNames() {
return cachedObservableFields.keySet().toArray(new String[0]);
}
public IObservable<?> getObservable(String observableName) throws Exception{
if (!cachedObservableFields.containsKey(observableName)) throw new IllegalArgumentException();
return (IObservable<?>)cachedObservableFields.get(observableName).get(model);
}
@Override
public Annotation[] getAnnotations(String observableName) throws Exception {
if (!cachedObservableFields.containsKey(observableName)) throw new IllegalArgumentException();
Field field = cachedObservableFields.get(observableName);
return field.getAnnotations();
}
}