package com.akjava.gwt.lib.client; import java.util.ArrayList; import java.util.List; import com.google.gwt.core.client.JavaScriptObject; import com.google.gwt.core.client.JsArray; import com.google.gwt.core.client.JsArrayBoolean; import com.google.gwt.core.client.JsArrayNumber; import com.google.gwt.core.client.JsArrayString; public class JavaScriptUtils { //much compatible public static native final <T extends JavaScriptObject> JsArray<T> createJSArray()/*-{ return $wnd.eval("new Array()"); }-*/; public final static native <T extends JavaScriptObject> JsArray<T> createJSArray( T object) /*-{ var array= $wnd.eval("new Array()"); array.push(object); return array; }-*/; public static final JsArrayNumber createJSArrayNumber(double... values){ JsArrayNumber numbers=createJSArray().cast(); for(double v:values){ numbers.push(v); } return numbers; } @SuppressWarnings({ "rawtypes", "unchecked" }) public static final JsArray createJSArray(JavaScriptObject... values){ JsArray numbers=createJSArray().cast(); for(JavaScriptObject v:values){ numbers.push(v); } return numbers; } public static void concat(JsArrayNumber target,JsArrayNumber values){ for(int i=0;i<values.length();i++){ target.push(values.get(i)); } } public static List<String> toList(JsArrayString array){ if(array==null){ return null; } List<String> list=new ArrayList<String>(); for(int i=0;i<array.length();i++){ list.add(array.get(i)); } return list; } public static <T extends JavaScriptObject> List<T> toList(JsArray<T> array){ List<T> list=new ArrayList<T>(); for(int i=0;i<array.length();i++){ list.add(array.get(i)); } return list; } public static List<Double> toList(JsArrayNumber array){ if(array==null){ return null; } List<Double> list=new ArrayList<Double>(); for(int i=0;i<array.length();i++){ list.add(array.get(i)); } return list; } public static List<Boolean> toList(JsArrayBoolean array){ if(array==null){ return null; } List<Boolean> list=new ArrayList<Boolean>(); for(int i=0;i<array.length();i++){ list.add(array.get(i)); } return list; } public static JsArrayNumber toArrayNumber(List<Double> list){ JsArrayNumber array=JsArray.createArray().cast(); for(Double data:list){ array.push(data); } return array; } public static JsArrayBoolean toArrayBoolean(List<Boolean> list){ JsArrayBoolean array=JsArray.createArray().cast(); for(Boolean data:list){ array.push(data); } return array; } public static <E extends JavaScriptObject> JsArray<E> toArray(Iterable<E> list){ JsArray<E> array=JsArray.createArray().cast(); for(E data:list){ array.push(data); } return array; } public static JsArrayNumber toArray(int[] ints){ JsArrayNumber array=JsArrayNumber.createArray().cast(); for(int i=0;i<ints.length;i++){ array.push(ints[i]); } return array; } public static JsArrayNumber toArray(double[] ints){ JsArrayNumber array=JsArrayNumber.createArray().cast(); for(int i=0;i<ints.length;i++){ array.push(ints[i]); } return array; } public static JsArrayBoolean toArray(boolean[] ints){ JsArrayBoolean array=JsArrayNumber.createArray().cast(); for(int i=0;i<ints.length;i++){ array.push(ints[i]); } return array; } public static JsArrayString toArray(String[] ints){ JsArrayString array=JsArrayNumber.createArray().cast(); for(int i=0;i<ints.length;i++){ array.push(ints[i]); } return array; } public static final native void remove(JsArrayNumber array,int index)/*-{ array.splice(index,1); }-*/; public final native String getTypeName(JavaScriptObject object)/*-{ var typeName = typeof object; return typeName; }-*/; public final native double toNumber(JavaScriptObject object)/*-{ return object; }-*/; public final native boolean toBoolean(JavaScriptObject object)/*-{ return object; }-*/; public final native String toString(JavaScriptObject object)/*-{ return object; }-*/; //some js code check arg value undefined instead of null. public static final native JavaScriptObject createUndefinedValue()/*-{ return undefined; }-*/; public static final native boolean isUndefined(JavaScriptObject object)/*-{ return object === undefined; }-*/; public static final native boolean isNaN(double object)/*-{ return $wnd.isNaN(object); }-*/; public static JsArrayNumber clone(JsArrayNumber pos) { JsArrayNumber number=createJSArray().cast(); for(int i=0;i<pos.length();i++){ number.set(i, pos.get(i)); } return number; } public final static double fixNumber(int v,double number){ String fixed=toFixed(number, v); return Double.valueOf(fixed); } private final static native String toFixed(double number, int n) /*-{ return number.toFixed(n); }-*/; }