/*
* Ext GWT - Ext for GWT
* Copyright(c) 2007-2009, Ext JS, LLC.
* licensing@extjs.com
*
* http://extjs.com/license
*/
package com.extjs.gxt.ui.client.js;
import com.google.gwt.core.client.JavaScriptObject;
/**
* Wraps a native javascript object.
*/
public class JsObject implements JsWrapper {
/**
* The native javascript object.
*/
protected JavaScriptObject jsObject;
/**
* Creates a new instance.
*/
public JsObject() {
jsObject = JsUtil.eval("[{}]");
}
/**
* Creates a new object from the given JSON text.
*
* @param data the JSON text
*/
public JsObject(String data) {
jsObject = JsUtil.eval("[{" + data + "}]");
}
/**
* Returns a property value.
*
* @param name the property name
* @return the value
*/
public native Object get(String name) /*-{
var js = this.@com.extjs.gxt.ui.client.js.JsObject::jsObject;
return js[name];
}-*/;
public native boolean getBoolean(String name) /*-{
var js = this.@com.extjs.gxt.ui.client.js.JsObject::jsObject;
return js[name];
}-*/;
public native byte getByte(String name) /*-{
var js = this.@com.extjs.gxt.ui.client.js.JsObject::jsObject;
return js[name];
}-*/;
public native char getChar(String name) /*-{
var js = this.@com.extjs.gxt.ui.client.js.JsObject::jsObject;
return js[name];
}-*/;
public native double getDouble(String name) /*-{
var js = this.@com.extjs.gxt.ui.client.js.JsObject::jsObject;
return js[name];
}-*/;
public native float getFloat(String name) /*-{
var js = this.@com.extjs.gxt.ui.client.js.JsObject::jsObject;
return js[name];
}-*/;
public JavaScriptObject getJsObject() {
return jsObject;
}
/**
* Returns a property value.
*
* @param name the property name
* @return the value
*/
public native int getInt(String name) /*-{
var js = this.@com.extjs.gxt.ui.client.js.JsObject::jsObject;
return js[name];
}-*/;
public native short getShort(String name) /*-{
var js = this.@com.extjs.gxt.ui.client.js.JsObject::jsObject;
return js[name];
}-*/;
/**
* Returns a property value.
*
* @param name the property name
* @return the value
*/
public native String getString(String name) /*-{
var js = this.@com.extjs.gxt.ui.client.js.JsObject::jsObject;
return js[name];
}-*/;
public native void set(String name, boolean value) /*-{
var js = this.@com.extjs.gxt.ui.client.js.JsObject::jsObject;
js[name] = value;
}-*/;
public native void set(String name, int value) /*-{
var js = this.@com.extjs.gxt.ui.client.js.JsObject::jsObject;
js[name] = value;
}-*/;
public native void set(String name, short value) /*-{
var js = this.@com.extjs.gxt.ui.client.js.JsObject::jsObject;
js[name] = value;
}-*/;
public native void set(String name, char value) /*-{
var js = this.@com.extjs.gxt.ui.client.js.JsObject::jsObject;
js[name] = value;
}-*/;
public native void set(String name, double value) /*-{
var js = this.@com.extjs.gxt.ui.client.js.JsObject::jsObject;
js[name] = value;
}-*/;
public native void set(String name, byte value) /*-{
var js = this.@com.extjs.gxt.ui.client.js.JsObject::jsObject;
js[name] = value;
}-*/;
public native void set(String name, float value) /*-{
var js = this.@com.extjs.gxt.ui.client.js.JsObject::jsObject;
js[name] = value;
}-*/;
public native void set(String name, JavaScriptObject value) /*-{
var js = this.@com.extjs.gxt.ui.client.js.JsObject::jsObject;
js[name] = value;
}-*/;
/**
* Sets a property.
*
* @param name the property name
* @param wrapper the property value
*/
public void set(String name, JsWrapper wrapper) {
set(name, wrapper.getJsObject());
}
public void set(String name, Object value) {
if (value instanceof Boolean) {
set(name, (boolean) (Boolean) value);
} else if (value instanceof Long) {
set(name, (double) (Long) value);
} else if (value instanceof Integer) {
set(name, (int) (Integer) value);
} else if (value instanceof Short) {
set(name, (short) (Short) value);
} else if (value instanceof Double) {
set(name, (double) (Double) value);
} else if (value instanceof Float) {
set(name, (float) (Float) value);
} else if (value instanceof Character) {
set(name, (char) (Character) value);
} else if (value instanceof Byte) {
set(name, (byte) (Byte) value);
} else {
setObjectInternal(name, value);
}
}
public native void set(String name, String value) /*-{
var js = this.@com.extjs.gxt.ui.client.js.JsObject::jsObject;
js[name] = value;
}-*/;
protected native JavaScriptObject create() /*-{
return {};
}-*/;
private native void setObjectInternal(String name, Object value) /*-{
var js = this.@com.extjs.gxt.ui.client.js.JsObject::jsObject;
js[name] = value;
}-*/;
}