... also, I noticed you are using the Steffan's GWT Gradle plugin. I did 
encounter subtle issues with it lately (see gihub issue threads) and 
realized it is no longer supported. I highly recommend switching to this one 
<https://github.com/Putnami/putnami-gradle-plugin>. It is simpler, provides 
similar functionality, the switch to it was painless,* but most 
importantly, the author, Fabien Dumay, is very responsive!* I could 
re-write you gradle scripts in a pull request, if that is ok?

On Thursday, June 2, 2016 at 1:50:08 PM UTC-7, Hristo Stoyanov wrote:
>
> Thanks Paul,
> I was about to start releasing similar code 
> <https://github.com/hrstoyanov/gwt-functions/tree/master/src/main/java/org/gwtproject/functions/client>
> . 
> It does not make sense to do the same thing twice and obviously such 
> utility code is necessary. So, I will use your project as it seems a bit 
> more advanced and start contributing!
>
> Quick request before I adopt it in my libraries today:
> - Can you add functional interfaces with 4 and 5 arguments. I think you 
> have them up to 3 only, but I do face JS libraries with 4 and 5.
> - Do you have similar utils as the one below? If not, would it be possible 
> to incorporate something like it in your projects?
>
> /**
>  * JavaScript global variables and functions utils.
>  *
>  */
> //@JsType(isNative = true, namespace = JsPackage.GLOBAL)
> public abstract class VariablesAndFunctions {
>
>     public native static <T> T eval(String expresion);
>
> //    @JsOverlay
> //    public boolean isJSVariableDefined(String jsVariableName) {
> //        return Boolean.TRUE.equals(eval("!!window[" + jsVariableName + 
> "]"));
> //    }
> //    
> //    @JsOverlay
> //    public static <T> T getJSVariableValue(String jsVariableName) {
> //        return eval("!!window[" + jsVariableName + "]");
> //    }
>     public static native String getStringJSVariable(String jsVar) /*-{
>         return $wnd[jsVar].toString();
>     }-*/;
>
>     public static native Object getJSVariable(String jsVar) /*-{
>         return $wnd[jsVar];
>     }-*/;
>     
>     public static native boolean isVariableDefined(String jsVar)/*-{
>         return !!$wnd[jsVar];
>     }-*/;
>
>     public static native boolean isFunctionDefined(String functionName)/*-{
>                 return typeof functionName == 'function';
>     }-*/;
> }
>
>
>
> On Thursday, June 2, 2016 at 11:57:46 AM UTC-7, Paul Stockley wrote:
>>
>> I have committed an initial version of gwt-interop-utils. 
>>
>> https://github.com/GWTReact/gwt-interop-utils
>>
>> This library provides some common utilities for working with JsInterop 
>> e.g.
>>
>> 1) Object Literal support
>> 2) Shared JSON compatible structures
>> 3) Common functional interfaces
>> 4) JSON utilities
>> 5) Low level Javascript utilities.
>>
>> One of my major goals was to enable creating complex object literals with 
>> arrays and maps that could be represented by a single class, accessible 
>> both on the client and server. You can now define a class such as
>>
>> import gwt.interop.utils.shared.collections.Array;
>> import gwt.interop.utils.shared.collections.StringMap;
>> import gwt.interop.utils.shared.valuetypes.NumberValue;
>>
>> @JsType(isNative = true, namespace = JsPackage.GLOBAL, name = "Object")
>> public class CommonDataObject {
>> public int intVal;
>> public double doubleVal;
>> public boolean booleanVal;
>> public String stringVal;
>> public NumberValue numberVal;
>> public Array<String> anArray;
>> public StringMap<String> aMap;
>> public CommonDataObject2 embeddedObj;
>>
>> @JsOverlay
>> public static CommonDataObject create() {
>> CommonDataObject o = new CommonDataObject();
>> o.intVal = 10;
>> o.doubleVal = 20.20;
>> o.booleanVal = true;
>> o.stringVal = "A String Value";
>> o.numberVal = NumberValue.from(10);
>> o.anArray = Array.create();
>>
>> o.anArray.set(0, "ArrayValue1");
>> o.anArray.set(2, "ArrayValue2");
>> o.anArray.set(2, "ArrayValue3");
>>
>> o.aMap = StringMap.create();
>>
>> o.aMap.put("v1", "A Map Value 1");
>> o.aMap.put("v2", "A Map Value 2");
>>
>> o.embeddedObj = new CommonDataObject2();
>> o.embeddedObj.field1 = "An embbeded object field";
>> return o;
>> }
>>
>> @JsOverlay
>> public final String convolutedSharedMethod(String someArg) {
>> StringBuilder o = new StringBuilder();
>>
>> anArray.forEachElem((e) -> {
>> o.append(aMap.get(someArg));
>> o.append(embeddedObj.field1);
>> o.append(e);
>> });
>>
>> return o.toString();
>> }
>> }
>>
>> @JsType(isNative = true, namespace = JsPackage.GLOBAL, name = "Object")
>> public class CommonDataObject2 {
>> public String field1;
>> }
>>
>> Instances of this class can be encoded to/from JSON using standard JSON 
>> functions. You can also create/use the same class on the server and full 
>> emulation is provided. Given this setup, it gives you a lot of the benefits 
>> of GWT RPC (i.e. shared data objects and behavior across client/server) 
>> without the code bloat or performance hit.
>>
>> Before I publish it to Maven, I still need to finish the docs and do some 
>> more testing. I am also waiting for some compiler fixes to land.
>>
>> Please take a look and let me know if there are any changes/additions you 
>> would like.
>>
>

-- 
You received this message because you are subscribed to the Google Groups "GWT 
Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/google-web-toolkit.
For more options, visit https://groups.google.com/d/optout.

Reply via email to