> You don't have a notion of "type" on your created objects, so you won't 
have that in Java either. I mean, in JS, with the same factory, how would 
you tell if you have a > "table" or a "car"? if you had constructor 
functions for the objects (new Table, new Car), you could do instanceof 
checks (in JS). Or you could have a "type" property > on your objects, so 
you could getType() in Java to do conditional processing. 

First of all thanks for reply.

I understand that. 
My problem is that I don't know what object is created in native code. 
Maybe I oversimplified my real use case in the name of clarity. 
What I want to do is JSON RPC client for GWT. The aim is provide simple API 
which will only require the user to define return types as JSO overlays and 
definition of remote interface. In other words API should be as near as 
possible to the GWT RPC. That said I don't know (in native code) of what 
type the created object is:
  - good case is that it's correct JSON object which has defined JSO 
overlay; 
  - bad case is that it's something else (string, wrong/unexpected JSON 
object, ...), in that case I need to generate meaningful error

What I need to solve is how to know that response is wrong. Now, only 
solution I see is some sort of JSON schema validation in native code - this 
would work, but it would require additional work from user of API (define 
schema of good response). But that's I want to avoid.

If you have better idea and willing to share, please do :)


On Friday, September 21, 2012 2:33:30 PM UTC+2, Thomas Broyer wrote:
>
>
> On Friday, September 21, 2012 1:16:56 PM UTC+2, js402882 wrote:
>>
>> Is there any way get info if JavaScriptObject is one of defined overlay 
>> objects? 
>> Example:
>> I have native factory method which creates JavaScriptObjects:
>>
>> class WeirdFactory
>> {
>>     native JavaScriptObject create(String type)
>>     {
>>         if (type == "car") return { name: "e46", maker: "bmw", seats: "4"}
>>         else if (type == "table") return { material: "wood", color: 
>> "brown"}
>>         else if (type == "type i forgot to crate overlay object for") 
>> return { id: "someId", name: "someName" }
>>
>>         return null;
>>     }
>> }
>>
>> class Car extends JavaScriptObject
>> {
>>     native String name() /*-{ return this.name; }-*/;
>>     native String maker() /*-{ return this.maker; }-*/; 
>>     native int seats() /*-{ return this.seats; }-*/; 
>> }
>>
>> class Table extends JavaScriptObject
>> {
>>     native String material() /*-{ return this.material; }-*/;
>>     native String color() /*-{ return this.color; }-*/; 
>> }
>>
>> Now I want to use this factory to create overlay objects:
>>
>> <T> void getValue(Class<T> returnType, Callback<T> callback, String type)
>> {
>>     JavaScriptObject value = weirdFactory.create(type);
>>
>>     // Here I need something like
>>     // if (!JavaScriptObject.isDefined(value))
>>     // {
>>     //     *handleUndefinedJSO(value);* // or throw new 
>> IllegalArgumentException("Undefined overlay object")
>>     // }
>>     
>>     T returnValue = (T)value;
>> *
>> *
>> *    *callback.returned(returnValue)
>> }
>>
>> I need somehow check if *value* JavaScriptObject has defined custom 
>> overlay object (... extends JavaScriptObject)
>> In pure Java I would catch ClassCastExcetion. But this does not work with 
>> JavaScriptObject which simply casts to anything (from it's nature, it's 
>> JavaScript object in the end after compilation).
>>
>> Does anybody have idea how to get info if JavaScriptObject is one of 
>> defined overlay objects? 
>>
>>
> There's nothing like "defined overlays for a given JS object". Overlays 
> are only a Java API to access a native JS object.
> For instance, "Car car = weirdFactory.create("table")" is perfectly legal, 
> and car's getters will simply return null/undefined. And then you can do 
> "Table table = car.cast()".
>
> You don't have a notion of "type" on your created objects, so you won't 
> have that in Java either. I mean, in JS, with the same factory, how would 
> you tell if you have a "table" or a "car"? if you had constructor functions 
> for the objects (new Table, new Car), you could do instanceof checks (in 
> JS). Or you could have a "type" property on your objects, so you could 
> getType() in Java to do conditional processing.
>

 

-- 
You received this message because you are subscribed to the Google Groups 
"Google Web Toolkit" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/google-web-toolkit/-/o6rilsP8w74J.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/google-web-toolkit?hl=en.

Reply via email to