package fr.lteconsulting.hexa.classinfo.gwt.internal; import java.util.HashMap; import java.util.List; import com.google.gwt.core.client.JavaScriptObject; import fr.lteconsulting.hexa.classinfo.Clazz; import fr.lteconsulting.hexa.classinfo.Field; import fr.lteconsulting.hexa.classinfo.Method; public class JavaScriptObjectClazz implements Clazz<JavaScriptObject> { @Override public String getClassName() { return "JavaScriptObject"; } @Override public Class<JavaScriptObject> getReflectedClass() { return JavaScriptObject.class; } @Override public List<Field> getFields() { // TODO Auto-generated method stub return null; } private static HashMap<String, Field> fields = new HashMap<String, Field>(); private native void setJsoProperty( JavaScriptObject jso, String property, Object value ) /*-{ jso[property] = value; }-*/; private native <T> T getJsoProperty( JavaScriptObject jso, String property ) /*-{ return jso[property] || null; }-*/; @Override public Field getField( final String fieldName ) { Field res = fields.get( fieldName ); if( res == null ) { res = new Field() { @Override public void setValue( Object object, Object value ) { setJsoProperty( (JavaScriptObject) object, fieldName, value ); } @Override public <OUT> OUT getValue( Object object ) { return getJsoProperty( (JavaScriptObject) object, fieldName ); } @Override public Class<?> getType() { return null; } @Override public String getName() { return fieldName; } @Override public void copyValueTo( Object source, Object destination ) { throw new RuntimeException( "Not yet implemented" ); } @Override public int getModifier() { // TODO Auto-generated method stub return 0; } }; fields.put( fieldName, res ); } return res; } @Override public List<Method> getMethods() { // TODO Auto-generated method stub return null; } @Override public Method getMethod( String methodName ) { // TODO Auto-generated method stub return null; } @Override public JavaScriptObject NEW() { throw new RuntimeException( "Cannot create a JavaScriptObject" ); } @Override public Clazz<? super JavaScriptObject> getSuperclass() { // TODO Auto-generated method stub return null; } @Override public List<Field> getDeclaredFields() { // TODO Auto-generated method stub return null; } @Override public Field getDeclaredField( String fieldName ) { return getField( fieldName ); } @Override public List<Field> getAllFields() { // TODO Auto-generated method stub return null; } @Override public Field getAllField( String fieldName ) { return getField( fieldName ); } }