package org.timepedia.exporter.client; import java.util.Date; import org.timepedia.exporter.client.ExporterBaseActual.JsArrayObject; import com.google.gwt.core.client.GWT; import com.google.gwt.core.client.JavaScriptObject; import com.google.gwt.core.client.JsArray; import com.google.gwt.core.client.JsArrayNumber; import com.google.gwt.core.client.JsArrayString; /** * Holds utility methods and wrapper state * * @author Ray Cromwell */ public class ExporterUtil { private interface ExportAll extends Exportable { } private static ExporterBaseImpl impl = GWT.create(ExporterBaseImpl.class); static { } public static void addTypeMap(Exportable type, JavaScriptObject exportedConstructor) { impl.addTypeMap(type.getClass(), exportedConstructor); } public static void addTypeMap(Class type, JavaScriptObject exportedConstructor) { impl.addTypeMap(type, exportedConstructor); } public static JavaScriptObject declarePackage(String qualifiedExportName) { return impl.declarePackage(qualifiedExportName); } public static void exportAll() { GWT.create(ExportAll.class); } // public static void exportAllAsync() { // GWT.runAsync(new RunAsyncCallback() { // public void onFailure(Throwable reason) { // throw new RuntimeException(reason); // } // // public void onSuccess() { // GWT.create(ExportAll.class); // onexport(); // } // // private native void onexport() /*-{ // $wnd.onexport(); // }-*/; // }); // } public static JavaScriptObject runDispatch(Object instance, Class clazz, int meth, JsArray<JavaScriptObject> arguments, boolean isStatic, boolean isVarArgs) { return impl.runDispatch(instance, clazz, meth, arguments, isStatic, isVarArgs); } public static native byte getStructuralFieldbyte(JavaScriptObject jso, String field) /*-{ return jso[field]; }-*/; public static native char getStructuralFieldchar(JavaScriptObject jso, String field) /*-{ return jso[field]; }-*/; public static native double getStructuralFielddouble(JavaScriptObject jso, String field) /*-{ return jso[field]; }-*/; public static native float getStructuralFieldfloat(JavaScriptObject jso, String field) /*-{ return jso[field]; }-*/; public static native int getStructuralFieldint(JavaScriptObject jso, String field) /*-{ return jso[field]; }-*/; public static long getStructuralFieldlong(JavaScriptObject jso, String field) { return (long) getStructuralFielddouble(jso, field); } public static native <T> T getStructuralFieldObject(JavaScriptObject jso, String field) /*-{ return jso[field]; }-*/; public static native short getStructuralFieldshort(JavaScriptObject jso, String field) /*-{ return jso[field]; }-*/; public static void registerDispatchMap(Class clazz, JavaScriptObject dispMap, boolean isStatic) { impl.registerDispatchMap(clazz, dispMap, isStatic); } public static native void setStructuralField(JavaScriptObject jso, String field, Object val) /*-{ jso[field]=type; }-*/; public static void setWrapper(Object instance, JavaScriptObject wrapper) { impl.setWrapper(instance, wrapper); } public static JavaScriptObject typeConstructor(Exportable type) { return impl.typeConstructor(type); } public static JavaScriptObject typeConstructor(String type) { return impl.typeConstructor(type); } public static JavaScriptObject wrap(Object type) { return impl.wrap(type); } public static JavaScriptObject wrap(JavaScriptObject[] type) { return impl.wrap(type); } public static JavaScriptObject wrap(Exportable[] type) { return impl.wrap(type); } public static JavaScriptObject wrap(String[] type) { return impl.wrap(type); } public static JavaScriptObject wrap(double[] type) { return impl.wrap(type); } public static JavaScriptObject wrap(float[] type) { return impl.wrap(type); } public static JavaScriptObject wrap(int[] type) { return impl.wrap(type); } public static JavaScriptObject wrap(char[] type) { return impl.wrap(type); } public static JavaScriptObject wrap(byte[] type) { return impl.wrap(type); } public static JavaScriptObject wrap(long[] type) { return impl.wrap(type); } public static JavaScriptObject wrap(short[] type) { return impl.wrap(type); } public static JavaScriptObject wrap(Date[] type) { return impl.wrap(type); } public static String[] toArrString(JavaScriptObject type) { return impl.toArrString(type.<JsArrayString>cast()); } public static double[] toArrDouble(JavaScriptObject type) { return impl.toArrDouble(type.<JsArrayNumber>cast()); } public static float[] toArrFloat(JavaScriptObject type) { return impl.toArrFloat(type.<JsArrayNumber>cast()); } public static int[] toArrInt(JavaScriptObject type) { return impl.toArrInt(type.<JsArrayNumber>cast()); } public static byte[] toArrByte(JavaScriptObject type) { return impl.toArrByte(type.<JsArrayNumber>cast()); } public static char[] toArrChar(JavaScriptObject type) { return impl.toArrChar(type.<JsArrayNumber>cast()); } public static long[] toArrLong(JavaScriptObject type) { return impl.toArrLong(type.<JsArrayNumber>cast()); } public static <T> T[] toArrObject(JavaScriptObject type, T[] ret) { return impl.toArrObject(type, ret); } public static Object[] toArrJsObject(JavaScriptObject type) { return impl.toArrJsObject(type); } public static Date[] toArrDate(JavaScriptObject type) { return impl.toArrDate(type); } // Although in Compiled mode we could cast an Exportable[] to any other T[] array // In hosted mode it is not possible, so we only support Exportable[] parameter public static Exportable[] toArrExport(JavaScriptObject type) { return impl.toArrExport(type); } public static boolean isAssignableToInstance(Class clazz, JavaScriptObject args) { return impl.isAssignableToInstance(clazz, args); } public static JavaScriptObject unshift(Object o, JavaScriptObject arr) { return impl.unshift(o, arr); } public static JavaScriptObject dateToJsDate(Date d) { return impl.dateToJsDate(d); } public static Date jsDateToDate(JavaScriptObject jd) { return impl.jsDateToDate(jd); } public static int length(JavaScriptObject o) { return o.<JsArrayObject>cast().length(); } public static Object gwtInstance(Object o) { return impl.gwtInstance(o); } }