package org.swellrt.beta.client.js; import org.waveprotocol.wave.model.util.CollectionUtils; import org.waveprotocol.wave.model.util.ReadableStringSet; import org.waveprotocol.wave.model.util.ReadableStringSet.Proc; import org.waveprotocol.wave.model.util.StringSet; import com.google.gwt.core.client.JavaScriptObject; import com.google.gwt.core.client.JsArrayString; public class JsUtils { @Deprecated public static native boolean isArray(JavaScriptObject o) /*-{ return Array.isArray(o); }-*/; @Deprecated public static native boolean isString(JavaScriptObject o) /*-{ return typeof o == 'string'; }-*/; public static native JsArrayString asArray(JavaScriptObject o) /*-{ if (Array.isArray(o)) return o; return null; }-*/; public static native String asString(JavaScriptObject o) /*-{ if (typeof o == 'string') return o; return null; }-*/; public static String[] stringSetToArray(ReadableStringSet s) { final String[] array = new String[s.countEntries()]; s.each(new Proc() { int c = 0; @Override public void apply(String element) { array[c++] = element; } }); return array; } public static native void addToArray(JavaScriptObject array, Object value) /*-{ array.push(value); }-*/; /** * Transform a Javascript object (array or string) to * a StringSet. * * @param obj an array or string * @return */ public static StringSet toStringSet(JavaScriptObject obj) throws IllegalStateException { StringSet set = CollectionUtils.createStringSet(); // from array JsArrayString array = asArray(obj); if (array != null) { for (int i = 0; i < array.length(); i++) set.add(array.get(i)); } // from string String s = asString(obj); if (s!=null) set.add(s); return set; } }