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 { public static abstract class ExportAll implements Exportable, Exporter { public void export() { export(false); } public abstract void export(boolean all); } private static ExporterBaseImpl impl = GWT.create(ExporterBaseImpl.class); static { } public static JavaScriptObject declarePackage(String qualifiedExportName) { return impl.declarePackage(qualifiedExportName); } /** * Automatically export all instantiable and public classes marked with the Exportable * interface. * * @param all, when this parameter is true it will export additionally all non-instantiable * classes marked with Exportable */ public static void export(boolean all) { ExportAll export = GWT.create(ExportAll.class); export.export(all); } /** * Export all classes marked with the Exportable interface, including those which are not default * instantiable (interfaces, abstracts, without constructor, etc). * * Use ExporterUtil.export(false) to export just the set of instantiable classes and save some * js size, gwt-exporter will take care of exporting dependent classes when used. * */ public static void exportAll() { export(true); } // 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(Object[] type) { return impl.wrap(type); } public static JavaScriptObject wrap(Exportable[] type) { return wrap((Object[])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 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); } public static <T extends Exporter> void addExporter(Class<?>c, T o) { impl.addExporter(c, o); } }