[gwt-contrib] Re: Native Authorization in GWT

2014-05-28 Thread Zied Hamdi OneView
Hi Thomas,

I decided to put the library as you suggested in a separate project, and to 
make it evolve to a state where it can be presented as an alternative to 
UiBinder. Here's the link, all unit tests pass. 
If any body wants to contribute, you're welcome

https://code.google.com/p/ui-binder-factory-proxy/


Le vendredi 23 mai 2014 14:59:35 UTC+1, Zied Hamdi OneView a écrit :

 Hi,

 I want to talk about GWT authorizations to brainstorm an architecture that 
 supports it natively. 

 It's somehow surprising a framework that is in advance (adopted the Fog 
 computing more than 5 years ago) doesn't provide a native support for 
 security routines. Workarounds are naturally possible, but no real core 
 solution is available, to specify how it should be done according to best 
 practices and have developers immediately knowing what they do when they 
 want to implement security in GWT.

 There are some open sources that already propose solutions for this 
 subject, they or developers who used them are naturally welcome to discuss 
 the even ad odd points from their feedback. 

 Before I started this discussion I made a tour on the available solutions 
  and I found all what I discovered either too intrusive (imposes its own 
 architecture that might not be compatible with existing projects), or too 
 superficial (means there is no central way of doing things).

 With the evolution of IT, many thinkers brought new ways of solving 
 problems. All problems can't be solved with one only pattern and overusing 
 a pattern can lead to bad architectures (hardly maintainable code). 

 AOP is an example of these best practice ideas that couldn't be overused. 
 It decomposes a layer (in a n layer architecture) into different logically 
 splitted layers. In AOP the interceptor knows about his host but the host 
 doesn't event know the AOP exists. This is a good approach to separate 
 concerns. The logger, the security some visual adjustments etc... can 
 intercept the program without this latter knowing about them.

 Another best practice pattern is the single access point: it is somehow 
 related to the proxying because when all your program flow passes through a 
 single object/method/facade, it is easy to intercept events and add logic.

 The event oriented programming is a direct iteration on these two 
 patterns, it states that a shared event bus can make the entire application 
 connected and make it possible to plug itself on the program without 
 impacting it.

 I proposed a solution based on this approach to solve the security feature 
 lack in GWT: an interception entry point to the creation of widgets to 
 permit plugging into it and doing other interesting things GWT isn't 
 obliged to be responsible of.

 My proposal is 
 herehttps://code.google.com/p/google-web-toolkit/issues/detail?can=2start=0num=100q=colspec=ID%20Type%20Status%20Owner%20Milestone%20Summary%20Starsgroupby=sort=id=8727

 https://code.google.com/p/google-web-toolkit/issues/detail?can=2start=0num=100q=colspec=ID%20Type%20Status%20Owner%20Milestone%20Summary%20Starsgroupby=sort=id=8727

 A 
 discussionhttps://groups.google.com/forum/#!topic/google-web-toolkit/wk9a3mCRliYalready
  happened in the user forum too about the subject.

 Your ideas and comments are welcome :)



-- 
You received this message because you are subscribed to the Google Groups GWT 
Contributors group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to google-web-toolkit-contributors+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/google-web-toolkit-contributors/95ae19ac-c132-4938-87ba-dab37d5c1796%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[gwt-contrib] Re: Native Authorization in GWT

2014-05-27 Thread Zied Hamdi OneView


 I created an 
 issuehttps://code.google.com/p/google-web-toolkit/issues/detail?id=8735where
  I specify more clearly the change 
 proposal: https://code.google.com/p/google-web-toolkit/issues/detail?id=8735


I'm getting this message:
 

 I'm just unable to push the code for review


Tue May 27 12:28:27 2014

Pushing to https://gwt.googlesource.com/gwt

POST git-receive-pack (24854 bytes)

remote: Resolving deltas: 2% (1/34) 

remote: Resolving deltas: 5% (2/34) 

remote: Resolving deltas: 8% (3/34) 

remote: Resolving deltas: 11% (4/34) 

remote: Resolving deltas: 14% (5/34) 

remote: Resolving deltas: 17% (6/34) 

remote: Resolving deltas: 20% (7/34) 

remote: Resolving deltas: 23% (8/34) 

remote: Resolving deltas: 26% (9/34) 

remote: Resolving deltas: 29% (10/34) 

remote: Resolving deltas: 32% (11/34) 

remote: Resolving deltas: 35% (12/34) 

remote: Resolving deltas: 38% (13/34) 

remote: Resolving deltas: 41% (14/34) 

remote: Resolving deltas: 44% (15/34) 

remote: Resolving deltas: 47% (16/34) 

remote: Resolving deltas: 50% (17/34) 

remote: Resolving deltas: 52% (18/34) 

remote: Resolving deltas: 55% (19/34) 

remote: Resolving deltas: 58% (20/34) 

remote: Resolving deltas: 61% (21/34) 

remote: Resolving deltas: 64% (22/34) 

remote: Resolving deltas: 67% (23/34) 

remote: Resolving deltas: 70% (24/34) 

remote: Resolving deltas: 73% (25/34) 

remote: Resolving deltas: 76% (26/34) 

remote: Resolving deltas: 79% (27/34) 

remote: Resolving deltas: 82% (28/34) 

remote: Resolving deltas: 85% (29/34) 

remote: Resolving deltas: 88% (30/34) 

remote: Resolving deltas: 91% (31/34) 

remote: Resolving deltas: 94% (32/34) 

remote: Resolving deltas: 97% (33/34) 

remote: Resolving deltas: 100% (34/34) 

remote: Resolving deltas: 100% (34/34) 

remote: 

remote: Processing changes: refs: 1 

remote: Processing changes: refs: 1, done 

To https://gwt.googlesource.com/gwt

! [remote rejected] uibinderfactory - master (prohibited by Gerrit)
error: failed to push some refs to 'https://gwt.googlesource.com/gwt' 

-- 
You received this message because you are subscribed to the Google Groups GWT 
Contributors group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to google-web-toolkit-contributors+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/google-web-toolkit-contributors/3a667318-c74a-4178-bec7-62165643293e%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[gwt-contrib] Re: Native Authorization in GWT

2014-05-26 Thread Zied Hamdi OneView
Hi Colin,

Thanks for your reply. I'm now convinced you have a pretty stable vision of 
the rules of UiBinder, I wanted to let the community be able to have my 
modificatio that I find very valuable, that's why I was spamming yesterdy 
(sunday), before I leave this part of the project and get less reactive to 
submit the code.
 

- UiBinder is totally declarative - if it had the feature to wire in 
logical statements, we should equally have loop and conditional constructs. 


This depends on how far you can go when you say it's declarative: can it be 
declared partly in another file? because this is what I propose: that's why 
I don't want the user to have access to the object model but only to its 
identification (UiBinder class name, feidl name)

- Not everyone uses UiBinder, not everything can be done with UiBinder


Not everyone uses ClientBundle, people can write they css manually for 
example. This shouldn't be an argument to remove ClientBundle from GWT

- I don’t see a full proposal anywhere


So I started just asking to be able to override some methods (asked GWT to 
make them protected so we can override GWT classes, declare our own 
Generator and intercept calls on superclasses instead of copying all the 
access restricted classes : almost all the package)

- isAllowed and isVisible 

 
were proposed methods only for the draft and for pedagogic reasons to 
understand the purpose). In reality theres's only one method in the GWT 
UiBinder: UiBinderWidgetFactory.create()
  * T extends Widget T create(ClassT widget, String uiBinder, String 
fieldName)*

Notice I intentionally did that there's no access to the model instance so 
the information remains simple and clear (in a declarative roles file). 
This answers the first point and the one where you propose to have more 
dynamic information on what's elsewhere in the view. This is definitely 
unwanted. The purpose of this is only to build a complete UiBinder template 
with all possible combinations, and then filter what has to be shown for 
each profile.

Now, each developer will be able to provide his own UiBinderWidgetFactory 
and use UiBinder for the layout, and his own static declaration for the 
rules. Which are two distinct concepts that shoudn't be mixed together in 
annotations or templates. This is why I'm talking about AOP: this is a 
layer that souldn't be seen by the application.

Note: The meaning of @Provided doesn't interfere with this feature. these 
are two distinct things: if you decide to create you widget manually, don't 
expect us to jump infront to change whant you're doing. it's the expected 
behavior

Finally t's fair to me that if the user loggs out or changes his 
profile/roles, the application is reloaded. This doesn't happen 
sufficiently often in applications to justify special code treatments (it's 
0.01% of the code in an app :). 

@Thomas: thanks for your answer and sorry for the amount of mails you found 
this morning :)

 - every @UiField will be non-null after the call to createAndBindUi 
to any @UiField might be null

I answered to this question by telling you that we can impose the retunrned 
Widget from the factory is not null (for the first versions). But the 
specification that says it hasn't to be null is not written in the stone. 
We might after all consider that if the user wants it to be null and 
decides it to be that way (in his own code), so he will have null. This 
only gives control to the user, it doesn't surprise him by changing what 
was there in his existing code (the default WidgetFactory will continue to 
create fields blindly). Only if a user decides he will furnish his own 
Widgetfactory and that he wants a field to be null under certain 
circumstances, he will get what he asked for. 

 - It's not just that, it's deciding whether it'll be created or not.

This can be checked and forbidden in the generated code, even if I think 
it's intrusive to oblige the user to have non null fields where he wants 
them null.

Finally, a per user (or/ per profile or/ per timezone or/ any) Widget 
personalization at creation is possible with this approach: it's the 
responsibility of the developer to separate authorizations from css styling 
but it's not the GWT responsibility anymore anyway. So even though the GWT 
WidgetFactory has only one method create(), the implementations might have 
other methods like

getStyles(), isToBeCreated(), isVisible(), isEnabled()

@Thomas : the bug you linked me to is interesting since it proposes a 
factory too, except that the factory is per UiBinder (which might be a good 
thing for performance) . The odd point I saw in answers is that it is aware 
of what widgets are in the component : It looses its declarative abstract 
tooling concept that way. But the spirit is indeed the same

In my proposition I have two arguments: (uiBinderFileName, fieldName), 
where they propose to attach a factory per UiBinder so they have only one 
parameter (or have it hardcoded as 

[gwt-contrib] Re: Native Authorization in GWT

2014-05-25 Thread Zied Hamdi OneView


 There's one big flaw with your proposal: it's not really “transparent”; 
 the code “using” it has to know it's there (i.e. it's not AOP as you 
 described it), because some @UiField could be 'null' or not visible 
 (depending on actual implementation).
 I believe applying such a rule as “this widget might not be created at 
 all” globally might solve some use cases, but opens other issues: e.g. how 
 do I layout my screen depending on what's actually visible?


I've just realize what you meant Thomas, but I really don't agree, that's 
why I didn't get it :

   - AOP can intercept methods to completely abort their call, it is still 
   AOP (it is even surely what AOP is for). It can clearly be used to hide an 
   element, that still doesn't mean the code that undergoes the AOP influence 
   has to know there was an AOP code. It just has to sustain that possibility 
   but it doesn't know from where it came.
   - The result hosting code has anyway to deal with a field that doesn't 
   exist or that is invisible. It has to either do it manually in traditional 
   GWT, or have it done by another automatic/configurable process in what I'm 
   proposing.

Behind the AOP there can be many possible solutions, GWT is not obliged to 
decide which to adopt, this can be handled as separate solutions: for 
example : 

   - A map of profiles where each profile has a map of UiBinder name keys 
   where it specifies in the value the look and visibility of fields (this way 
   only fields that have special treatment are handled specifically)
   - The inverse process: methods in the Widget mangaer interface to say 
   isVisible(String uiWidget, String field), getStyles(String uiWidget, 
   String field). Which allows a more abstract interface but can show 
   performance issues on large applications
   - a magic client factory that handles all this in a special library

Possibilities are open. The important thing is to be able to catch the 
moment a widget is about to be created to be able to have control on the 
decision. That's the whole point of this feature request

-- 
You received this message because you are subscribed to the Google Groups GWT 
Contributors group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to google-web-toolkit-contributors+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/google-web-toolkit-contributors/ae8635a1-371a-4b5d-9d9f-947b110f518b%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[gwt-contrib] Re: Native Authorization in GWT

2014-05-25 Thread Zied Hamdi OneView
I forgot to say it's done and it works, I can submit the code under that 
bug id, but since the bug was closed I'm trying to justify why I think this 
feature is important

-- 
You received this message because you are subscribed to the Google Groups GWT 
Contributors group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to google-web-toolkit-contributors+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/google-web-toolkit-contributors/cb748642-c029-41fa-a807-853a1c71eb99%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[gwt-contrib] Re: Native Authorization in GWT

2014-05-24 Thread Zied Hamdi OneView


 There's one big flaw with your proposal: it's not really “transparent”; 
 the code “using” it has to know it's there (i.e. it's not AOP as you 
 described it), because some @UiField could be 'null' or not visible 
 (depending on actual implementation).
 I believe applying such a rule as “this widget might not be created at 
 all” globally might solve some use cases, but opens other issues: e.g. how 
 do I layout my screen depending on what's actually visible?


As I mentioned it in the user group discussion: the fact that a field is 
not created is a good thing since it permits to the user to early detect he 
is trying to deal with a field that will not exist in certain conditions (I 
called that a runtime-compiler: since it checks if there are potential bugs 
at runtime). Furthermore, the field is not obliged ot be null, it can be 
parametrized with a factory strategy (create non visible fields or create 
them null): in any case it will be less hardcoded than the actual solution 
that does raw GWT.create() without any possible choice. *By the way, how do 
you justify that you prefer a hardcoded solution to an extensible one???*

We both know it's not AOP, it can't be since there's no proxying mechanism. 
But it works as if it was: *you can intercept the widget creation and do 
decide if you want the default process to be executed or/and yours. *The 
purpose and soul of AOP is this, so let's not lock on implementation 
technical details.

 

 Another rather big issue with the proposal is that it only applies to 
 UiBinder. How do you solve the same problem when you're not using UiBinder? 
 How about navigation in your app? (when you use History.newItem, or Places, 
 or Activities, or a third-party solution such as GWTP – OK, GWTP has its 
 own “security” feature)


UiBinder is a framework for creating widgets through a declarative 
syntax: it provides services that don't have to exist when you do things 
manually. When you use ClientBundle, you don't say ClientBundle is a big 
issue because it doesn't handle css files that are not declared in it. 
It's pretty the same logic: either you use UiBinder and get it with its 
services, or you do the work manually a no one will blame you.
 

 There's also the question of “what to do?” when a precondition is not met? 
 Should the widget not be created at all? should it be hidden? should it 
 matter to the user of the API? What if I'd prefer that my button be visible 
 but disabled?

 
*You don't have to think about what to do, it's the whole point of the 
feature*: a factory/manager will decide if it does raw GWT.create() (as 
today), or do more sophisticated logic: leaves the field null, does some 
css additions depending on the logged profile, ect... (you won't see it nor 
have to deal with it in the GWT core code), it's out of your control at 
this point. Naturally GWT will furnish a default factory that will continue 
to do raw GWT.create() as it did until now, but users could declare another 
factory in the module to override that behavior.

Last, but not least, having such an API in GWT for widgets but nothing 
 related to communications (GWT-RPC, RequestFactory) is likely to lead to 
 applications that aren't actually secure, because developers have a false 
 sense of security provided by the API that just doesn't create their 
 widgets.


There's a plethora of security solutions for the java framework, users may 
choose to adopt JAAS, Spring security, server bundled security systems 
(this is another feature request: to use separate urls for methods to be 
able to intercept a method call and apply security constraints on it, it's 
another subject). Anyway, GWT is mainly the client side, the ecosystem is 
different in that part that is translated to js. There's no need for GWT to 
be responsible for the java language, as soon as we are on the java side, 
we're in another world that evolved many years before GWT and that has many 
many solutions for security. So maybe a product will raise someday to unify 
the declarations on the GWT side with the ones on the server, but that's 
definitely not a required thing

So, my advice, as already given elsewhere, is: build what meets your 
 immediate need (either from scratch, or on top of UiBinder, or as a fork of 
 UiBinder), iterate on the API until you're satisfied, then (possibly) 
 iterate again to try to solve other use-cases.

If you forked UiBinder, try to come up with an extension API (preferably 
 not extending/reusing the generator, but rather providing extensions to it, 
 similar to how ResourceGenerator and CustomFieldSerializer allow modifying 
 the generator's behavior) on which you could build your security-oriented 
 feature and try to upstream the patch.
 When and if your library got enough traction, then you can propose it's 
 made part of GWT core (and if the Steering Committee agrees, then you would 
 probably become its maintainer then, responsible for reviewing patches et 
 al.)


I'm 

[gwt-contrib] Re: Native Authorization in GWT

2014-05-24 Thread Zied Hamdi OneView
After doing the patch I can tell you the main points and benefits of the 
change:

To be able to do the job, I had to change the signature 
of AbstractFieldWriter.writeFieldDefinition() to make it aware of the 
context of the field (the document that declares the field)
com.google.gwt.uibinder.rebind.AbstractFieldWriter.writeFieldDefinition(IndentedWriter,
 
TypeOracle, OwnerClass, FieldWriter, DesignTimeUtils, int, boolean)

I changed the hardcoded line
initializer = String.format((%1$s) GWT.create(%1$s.class), 
getQualifiedSourceName());

to an overridable method
initializer = writeInitilizerForField(ownerClass, field);

in my code I just overrided (this could be done in a GWT 
UiBinderFieldFactory class instead of my AuthManager)
protected String writeInitilizerForField(OwnerClass ownerClass, FieldWriter 
field) {
return String.format((%1$s) 
fr.onevu.auth.client.common.patch.auth.AuthManager.create(%1$s.class, 
\%2$s\, \%3$s\), getQualifiedSourceName(),
ownerClass.getOwnerType().getQualifiedSourceName(), field.getName());
}

knowing that in AuthManager I delegate the creation of the field to the 
concrete implementation of AuthorizationSpecifier that is by default in the 
module declaration
  replace-with 
class=fr.onevu.auth.client.common.patch.auth.DefaultAuthorizationSpecifier
when-type-is 
class=fr.onevu.auth.client.common.patch.auth.AuthorizationSpecifier/
  /replace-with

This is not an invasive code at all and it doesn't break the architecture 
of the UiBinder. It might bring bugs if a panel is null and you assume it 
isn't, then for a first version, you might forbid returning null from the 
factory, but it's still a powerful feature will little change in the code. 
If I had to say it in one sentence it would be:

*Giving the hand to the user to handle his widgets at creation instead of 
assuming to know what the user wants to do. *



Le vendredi 23 mai 2014 14:59:35 UTC+1, Zied Hamdi OneView a écrit :

 Hi,

 I want to talk about GWT authorizations to brainstorm an architecture that 
 supports it natively. 

 It's somehow surprising a framework that is in advance (adopted the Fog 
 computing more than 5 years ago) doesn't provide a native support for 
 security routines. Workarounds are naturally possible, but no real core 
 solution is available, to specify how it should be done according to best 
 practices and have developers immediately knowing what they do when they 
 want to implement security in GWT.

 There are some open sources that already propose solutions for this 
 subject, they or developers who used them are naturally welcome to discuss 
 the even ad odd points from their feedback. 

 Before I started this discussion I made a tour on the available solutions 
  and I found all what I discovered either too intrusive (imposes its own 
 architecture that might not be compatible with existing projects), or too 
 superficial (means there is no central way of doing things).

 With the evolution of IT, many thinkers brought new ways of solving 
 problems. All problems can't be solved with one only pattern and overusing 
 a pattern can lead to bad architectures (hardly maintainable code). 

 AOP is an example of these best practice ideas that couldn't be overused. 
 It decomposes a layer (in a n layer architecture) into different logically 
 splitted layers. In AOP the interceptor knows about his host but the host 
 doesn't event know the AOP exists. This is a good approach to separate 
 concerns. The logger, the security some visual adjustments etc... can 
 intercept the program without this latter knowing about them.

 Another best practice pattern is the single access point: it is somehow 
 related to the proxying because when all your program flow passes through a 
 single object/method/facade, it is easy to intercept events and add logic.

 The event oriented programming is a direct iteration on these two 
 patterns, it states that a shared event bus can make the entire application 
 connected and make it possible to plug itself on the program without 
 impacting it.

 I proposed a solution based on this approach to solve the security feature 
 lack in GWT: an interception entry point to the creation of widgets to 
 permit plugging into it and doing other interesting things GWT isn't 
 obliged to be responsible of.

 My proposal is 
 herehttps://code.google.com/p/google-web-toolkit/issues/detail?can=2start=0num=100q=colspec=ID%20Type%20Status%20Owner%20Milestone%20Summary%20Starsgroupby=sort=id=8727

 https://code.google.com/p/google-web-toolkit/issues/detail?can=2start=0num=100q=colspec=ID%20Type%20Status%20Owner%20Milestone%20Summary%20Starsgroupby=sort=id=8727

 A 
 discussionhttps://groups.google.com/forum/#!topic/google-web-toolkit/wk9a3mCRliYalready
  happened in the user forum too about the subject.

 Your ideas and comments are welcome :)



-- 
You received this message because you are subscribed to the Google Groups GWT 
Contributors group.
To unsubscribe from

[gwt-contrib] Native Authorization in GWT

2014-05-23 Thread Zied Hamdi OneView
Hi,

I want to talk about GWT authorizations to brainstorm an architecture that 
supports it natively. 

It's somehow surprising a framework that is in advance (adopted the Fog 
computing more than 5 years ago) doesn't provide a native support for 
security routines. Workarounds are naturally possible, but no real core 
solution is available, to specify how it should be done according to best 
practices and have developers immediately knowing what they do when they 
want to implement security in GWT.

There are some open sources that already propose solutions for this 
subject, they or developers who used them are naturally welcome to discuss 
the even ad odd points from their feedback. 

Before I started this discussion I made a tour on the available solutions 
 and I found all what I discovered either too intrusive (imposes its own 
architecture that might not be compatible with existing projects), or too 
superficial (means there is no central way of doing things).

With the evolution of IT, many thinkers brought new ways of solving 
problems. All problems can't be solved with one only pattern and overusing 
a pattern can lead to bad architectures (hardly maintainable code). 

AOP is an example of these best practice ideas that couldn't be overused. 
It decomposes a layer (in a n layer architecture) into different logically 
splitted layers. In AOP the interceptor knows about his host but the host 
doesn't event know the AOP exists. This is a good approach to separate 
concerns. The logger, the security some visual adjustments etc... can 
intercept the program without this latter knowing about them.

Another best practice pattern is the single access point: it is somehow 
related to the proxying because when all your program flow passes through a 
single object/method/facade, it is easy to intercept events and add logic.

The event oriented programming is a direct iteration on these two patterns, 
it states that a shared event bus can make the entire application connected 
and make it possible to plug itself on the program without impacting it.

I proposed a solution based on this approach to solve the security feature 
lack in GWT: an interception entry point to the creation of widgets to 
permit plugging into it and doing other interesting things GWT isn't 
obliged to be responsible of.

My proposal is 
herehttps://code.google.com/p/google-web-toolkit/issues/detail?can=2start=0num=100q=colspec=ID%20Type%20Status%20Owner%20Milestone%20Summary%20Starsgroupby=sort=id=8727
https://code.google.com/p/google-web-toolkit/issues/detail?can=2start=0num=100q=colspec=ID%20Type%20Status%20Owner%20Milestone%20Summary%20Starsgroupby=sort=id=8727

A 
discussionhttps://groups.google.com/forum/#!topic/google-web-toolkit/wk9a3mCRliYalready
 happened in the user forum too about the subject.

Your ideas and comments are welcome :)

-- 
You received this message because you are subscribed to the Google Groups GWT 
Contributors group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to google-web-toolkit-contributors+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/google-web-toolkit-contributors/73ffbe2a-e7fe-4be8-9e48-32631af6203b%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[gwt-contrib] Re: who discusses the next features and adopts feature requests?

2014-05-23 Thread Zied Hamdi OneView
Hi all,

I created this post as I said because I was wondering about the evolution 
of the process of feature proposal acceptance. This was triggered by a 
feature proposal I made that was rejected, but it was only a trigger. 

So to avoid changing the subject and talking about why my proposal was 
rejected and forgetting to talk about: what is the best way to accept 
reject proposals, I created another discussion for the rejected feature 
request 
herehttps://groups.google.com/forum/#!topic/google-web-toolkit-contributors/Y_Cu_Nqzxv4

We stopped at my proposal to have a GWT official fork for incubating 
features (explaining that if any other entity than GWT does the fork, it 
won't be accepted by the community)

-- 
You received this message because you are subscribed to the Google Groups GWT 
Contributors group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to google-web-toolkit-contributors+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/google-web-toolkit-contributors/49603644-b215-4de7-b0b9-45c424523f14%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[gwt-contrib] Re: who discusses the next features and adopts feature requests?

2014-05-22 Thread Zied Hamdi OneView


*IMHO it is totally irrelevant if a package is named internal or not. If 
the API in that package is public then its public and if that API is useful 
it will be used no matter what. *


I don't agree with you on this point: when the team designs a solution, 
they know if it's a solid architecture or if they didn't have time to think 
about it and there a re big chances these APIs will change drastically in 
future versions. Sometimes it is also because they're applying a new idea 
and they don't know how it will evolve (which axis will be the leading 
axis). So naming packages that are well designed the same way as packages 
that aren't is a loss of information. User developers will feel they have 
been betrayed if they build a big solution on an API that disappears on the 
next release or completely mutates in a way that they have to rewrite their 
soft from ground.

So unless all GWT packages are well and maturely thought an no package is 
done only to solve a problem very specifically then taken the time to 
rethink (which I doubt). Loosing this information (or not communicating it 
is definitely a risky choice)

*Actually I think the best way to let people try features that are not in 
GWT trunk is to create a GWT fork at Github and let people know about it. *


Ok, but you know humans: each person will want himself to be glorified, and 
a person wouldn't like his efforts to be stolen and attributed to another 
person who just forked GWT. That's why, unless the GWT team says: here's an 
official Github fork to post your ideas (the part of: let people know 
about it). The GWT team might specify it's a fork made by the community for 
the community : the fact it is somehow certified as the official GWT fork 
changes a lot of things in comparison to if I said to everyone: it's My 
Fork come and put your effort in it, I will be rewarded for your efforts. 

As I started this discussion by saying that if everybody starts forking GWT 
we will loose the synergy, and proposed to brainstorm on the procedure to 
avoid that, it's no surprise that when you argue that everyone should fork 
GWT and make people know about it I will not agree :)

-- 
You received this message because you are subscribed to the Google Groups GWT 
Contributors group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to google-web-toolkit-contributors+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/google-web-toolkit-contributors/d612fdc0-dde1-4796-83e6-fb8d7103cc18%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[gwt-contrib] Re: who discusses the next features and adopts feature requests?

2014-05-22 Thread Zied Hamdi OneView
There are a lot of working collaborative models out there, with more or 
less top control: my best examples are stackoverflow and wikipedia. There 
are disadvantages in their solution but it works.

I know source code is not as granular as a wikipedia article, or a 
stackoverflow question. But you can already see in stackoverflow that if a 
person asks an alredy asked question his question is kind of 'rejected' 
(unvoted, marked as duplicate or unanswered). So people are aware and fight 
dependencies in a quite less firmly tighted platform than our target (in 
source code you can see dependencies a lot better than in a question forum)

Even Google organizes the Google summer of Code where students contribute 
to different open source projects, but at the same time in an centrally 
organized manner (so good profiles can be detected and given wider 
responsibilities)... the same could apply for this fork 

-- 
You received this message because you are subscribed to the Google Groups GWT 
Contributors group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to google-web-toolkit-contributors+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/google-web-toolkit-contributors/0993daeb-4c30-44c4-8fdf-701413d9b058%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: [gwt-contrib] Re: who discusses the next features and adopts feature requests?

2014-05-22 Thread Zied Hamdi OneView


 * asks for a solution to an unknown problem, rather than exposing the 
 problem and trying to find the best solution (which I believe is not the 
 one suggested in the issue)
 * worse, it's not even a request for please make UiBinder extensible 
 (for whatever definition of extensible), it's a please get out of my way 
 so I can hack around 

* just Google *authorization in gwt* and you will see the problem doesn't 
have to be presented anymore, everyone knows it's not supported (it's 
definitely not an unknown problem Thomas)
* It's a pitty you interpreted the request for making the library 
extendable for the community as a personal attack, I think it's legitimate 
to criticize code as long as it is constructive and can help have a better 
product 

* there had been previous decisions related to the (non-)extensibility of 
 UiBinder

So the problem is known and requested
 

 * UiBinder internals have changed dramatically in the past (e.g. when 
 switching to SafeHtmlTemplates, almost everything got rewritten; then when 
 introducing UiRenderer, then when tentatively introducing Renderable; there 
 was also an attempt to replace the use of getElementById with walking the 
 DOM, eliminating the use of temporary IDs on elements, or even placeholder 
 elements in some cases); opening them for public consumption is a no-go on 
 those grounds (similar to what you were saying)

You're right, the source code has a lot of scenarios and is difficult to 
understand, but it shouldn't mean no one is allowed to use it apart GWT 
members, if we consent to use it despite its complexity and risk of having 
it changed, then we might have a good reason for that

* generators (and linkers) are not designed for extension; they're an 
 implementation detail (as you said later in this thread). The public API is 
 in the form of a base interface that you give to GWT.create(). There are 
 exceptions, but they're well documented (CrossSiteIframeLinker, 
 ResourceGenerator for ClientBundle, CustomFieldSerializer for RPC, and –but 
 I'm not even sure– ServiceInterfaceProxyGenerator's createProxyCreator() 
 method; that's all AFAICT) and specifically designed for extensibility 
 without exposing (too much of) the internals.

 Ok, but this should be used as a friendly warning (to avoid trouble to 
people, saying you shouldn't!), not as a rigid law (giving sanctions to 
those who try to use it). 

I also think the only valid argument for a class to be non extensible is 
when it is not well specified (used as a temporary glue). 
As a consequence of this definition, a library cannot remain not designed 
for extension for a too long time. Because if it remains, it may lead to 
troubles even internally: the person who wrote it may quit, and the own 
members of the project may have trouble maintaining it. 
From the moment a library/module is well feature specified, there's no need 
to hide parts of it from the public sight. Some parts may be extensible 
by design and ease the task of extending to user developers because it was 
thought to be extended there, but other parts that weren't originally 
thought as extensible might show they actually are...

I'm trying to answer with general rules rather than specific points to 
keep the exchange on general cases, (I sent you a mail Thomas with my 
answer). 

-- 
You received this message because you are subscribed to the Google Groups GWT 
Contributors group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to google-web-toolkit-contributors+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/google-web-toolkit-contributors/82684104-6578-4ee6-a1b4-357b5a526aa9%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[gwt-contrib] who discusses the next features and adopts feature requests?

2014-05-21 Thread Zied Hamdi OneView
Hi,

I had the experience of wanting to contribute to GWT with a new 
featurehttps://code.google.com/p/google-web-toolkit/issues/detail?can=2start=0num=100q=colspec=ID%20Type%20Status%20Owner%20Milestone%20Summary%20Starsgroupby=sort=id=8727,
 
but I received kind of a rigid answer: we won't adopt that, it was 
designed otherwise.

So I'm wondering who decides on the design, since this if decisions are 
rigid there is a risk that the community will fork GWT and have different 
variants (which is naturally bad in essence because the energy will be 
split on the different projects). I think this is an important questions to 
solve: who decides on priorities?

For my concrete example: there's no standard solution for authorizations 
in GWT, addressing the problem is definitely a subject that interests the 
whole community. I proposed a draft solution that is born dead. So 

   - where can we discuss the design of a solution to be adopted? 
   - do we really have to wait until there are thousands of favorites on a 
   bug to start thinking about it
   - other platforms adopted solutions for (logging, aop, security, code 
   organisation, ect...) if something exists and works on other platforms, 
   isn't that an additional indicator that the feature is valuable and that it 
   should be addressed in GWT too?

Your comments are welcome :)

-- 
You received this message because you are subscribed to the Google Groups GWT 
Contributors group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to google-web-toolkit-contributors+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/google-web-toolkit-contributors/ba191aeb-9c88-4fcb-a1a3-dae0d2963ac0%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[gwt-contrib] Re: who discusses the next features and adopts feature requests?

2014-05-21 Thread Zied Hamdi OneView
Hi Daniel,

Thanks for your clear answer. 

From what I understood, profiles are somehow validated through they 
contributions quality, and that gives a weight to their opinions if they 
propose new ideas?. Maybe it's not a formal model but it's probably the way 
it works.

This seams quite wise, I'd only add into consideration the fact that (in my 
opinion) the majority of contributions come from a concrete need for their 
project, after solving the problem in the core technology, the person wants 
the patch to become public so he/she can profit from upgrades without 
having to maintain their patch to it (usually the company agrees with the 
decision to share the code for that reason).

So only a small part of the users will contribute, and if their 
propositions are rejected too fast, you won't be able to evaluate the 
quality of the contribution because the person won't come back before 
another bug. That's why I think there should be a kind of idea hunter 
mechanism (that could be driven by the community itself, without the need 
for Google to allocate resources for that). People could send their patches 
to a parallel version where the community could vote for a feature to 
become part of the core. This would raise an indicator that the feature is 
wanted and trigger a reflection on how to design the solution.

I'm only sharing ideas live, kind of brainstorming, there might be 
illogical things in what I'm proposing, but I think the subject is worth it.

p.s: I think the strength of Google was in its recruitment strategy, that 
made it grow without loosing efficiency. A kind of similar solution is 
needed for GWT as an independent open source in my opinion...

Le mercredi 21 mai 2014 18:11:44 UTC+1, Zied Hamdi OneView a écrit :

 Hi,

 I had the experience of wanting to contribute to GWT with a new 
 featurehttps://code.google.com/p/google-web-toolkit/issues/detail?can=2start=0num=100q=colspec=ID%20Type%20Status%20Owner%20Milestone%20Summary%20Starsgroupby=sort=id=8727,
  
 but I received kind of a rigid answer: we won't adopt that, it was 
 designed otherwise.

 So I'm wondering who decides on the design, since this if decisions are 
 rigid there is a risk that the community will fork GWT and have different 
 variants (which is naturally bad in essence because the energy will be 
 split on the different projects). I think this is an important questions to 
 solve: who decides on priorities?

 For my concrete example: there's no standard solution for authorizations 
 in GWT, addressing the problem is definitely a subject that interests the 
 whole community. I proposed a draft solution that is born dead. So 

- where can we discuss the design of a solution to be adopted? 
- do we really have to wait until there are thousands of favorites on 
a bug to start thinking about it
- other platforms adopted solutions for (logging, aop, security, code 
organisation, ect...) if something exists and works on other platforms, 
isn't that an additional indicator that the feature is valuable and that 
 it 
should be addressed in GWT too?

 Your comments are welcome :)


-- 
You received this message because you are subscribed to the Google Groups GWT 
Contributors group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to google-web-toolkit-contributors+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/google-web-toolkit-contributors/71448d97-e71e-4a77-8e4d-af2da6f01b1a%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[gwt-contrib] Re: who discusses the next features and adopts feature requests?

2014-05-21 Thread Zied Hamdi OneView
Hi Goktug and John,

Thanks for your answers, here's what I can say to be more explicit in my 
thoughts

@Goktug
  

 you were basically asking about exposing a method from a class that is not 
even 
a public API in the first place, which basically means please start 
maintaining the API of some internal implementation detail for my use case


Usually, internal APIs are in a package named internal because they are 
subject to change and the architecture is still not clear (the first 
iterations usually). I experienced this in the years 2005 (already at that 
time) when I was at Omondo and we needed to develop plugin features even 
using those cutting edge libraries (at our own risks of rewriting at the 
next eclipse version). The libraries were marked internal but were still 
designed well enough so we were able to use them (that's why I mentioned 
that the protected access should be the default one in open sources). 
Naturally everything was not blue sky at that time, but it was great to be 
able to know that we take risks by using those libraries (marked internal), 
and at the same time to be able to use them (at the same risks as the 
eclipse team itself).

So to mark a library as subject to change or only for experts you may 
write it explicitely in the docs, but I don't see the point of 
overprotecting the developers by forbidding them to enter the zone, or 
considering it's too hard and dangerous for them. I pointed the 
consequences of forbidding zones at the first mail here : saying it leads 
to forking the project. That's definitely not a good strategy to get people 
consider them selves at home. I prefer warning but letting people do at 
their own risks, you might be surprised of what the community can do (and 
as I said, it's completely valid to refuse to treat bugs on a part that is 
marked as subject to change). 

So that's why I proposed to make the necessary methods (not one method, I 
was talking about roughly 20 classes) accessible from the outside to permit 
extending GWT in that part (even as independent libraries) without having 
to fork GWT (or extract those too restricted classes)

@John
  in any community project, whoever cares about a feature the most is 
the one that designs it, convinces others it is worth including, and 
implements it

I agree with you, I didn't know how it works inside the GWT team, that's 
why I supposed the most votes features are given more importance. Anyway, 
what I was asking in that bug was exactly : to permit access to the class 
members so I can do a lib that relies on it without having to fork a part 
of GWT. 

//-

We left the principal subject and focused on a specific bug, I think it's 
good to do this but to a certain extent. as long as we don't loose focus on 
the subject of the post, which is not that tightly related to that bug, 
even if it was triggered by it. The subject is more procedural than 
technical

I was thinking about Ubuntu that raises the xx.04 versions that are 
maintainable for some years and the xx.10 versions that are more 
experimental. Having a similar model for GWT with the community releases 
and the incubator releases might be an answer to permit both a stable and 
head and a dynamic community move?... I wouldn't like to reinvent the 
wheel, I'm wondering what can be done to allow the community to feel like 
home on the GWT project. Ideally, people should be able to try patches 
independently (somehow as plugins) and the GWT team can have visibility on 
the most popular patches that might be candidates to the head version (or 
are worth thinking on how to specify them cleanly). 

This would imply having versions of the GWT incubator (not a constantly 
moving trunk) and a system for dependency control (gradle, maven, ant) 
between both module-module and module-GWT builds. A similar system was used 
for the browser plugins, which showed to be complicated, especially when 
modules depended on each other (an app the uses flash that is compatible 
with a certain version of the browser)

Take as an example what I'm adopting now (for the bug I submitted): I 
prefer to change the GWT core code locally and maintain my code working on 
the core code each time a pull a new version than copying the GWT classes 
to my own library where I will have to do manual comparing of which class 
became what in the next GWT version (loosing the git history of the files).

-- 
You received this message because you are subscribed to the Google Groups GWT 
Contributors group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to google-web-toolkit-contributors+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/google-web-toolkit-contributors/86ef2834-ca05-43a9-9402-91539bd03f40%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[gwt-contrib] Errors in eclipse on gwt-user after cloning git

2014-05-20 Thread Zied Hamdi OneView
Hi Gwt friends :)

I wanted to start contributing to GWT, so I followed the instructions until 
I arrived to the point of using my eclipse.

There I have the following errors (and since I don't want to change code 
that I don't want to submit I'm kind of stuck in what to do now?). The 
errors are the following:


Description

Resource

Path

Location

Type

The type java.util.Mapjava.lang.String,java.lang.Integer cannot be used 
here

BaseFooProxy.java

/gwt-user/core/test/com/google/web/bindery/requestfactory/shared

line 79

Annotation Problem (Java 6 processor)

The type 
java.util.Mapjava.lang.Integer,com.google.web.bindery.requestfactory.shared.SimpleBarProxy
 
cannot be used here

BaseFooProxy.java

/gwt-user/core/test/com/google/web/bindery/requestfactory/shared

line 81

Annotation Problem (Java 6 processor)

The type 
java.util.Mapcom.google.web.bindery.requestfactory.shared.SimpleBarProxy,java.lang.Integer
 
cannot be used here

BaseFooProxy.java

/gwt-user/core/test/com/google/web/bindery/requestfactory/shared

line 83

Annotation Problem (Java 6 processor)

The type java.util.Mapjava.lang.String,java.lang.Integer cannot be used 
here

BaseFooProxy.java

/gwt-user/core/test/com/google/web/bindery/requestfactory/shared

line 143

Annotation Problem (Java 6 processor)

The method addTypeToken(String, String) is undefined for the type 
TypeTokenResolverBuilderImpl

TypeTokenResolverBuilderImpl.java

/gwt-user/.apt_generated/com/google/web/bindery/requestfactory/vm/impl

line 4

Java Problem

com.google.web.bindery.requestfactory.vm.impl.TypeTokenResolver cannot be 
resolved to a type

TypeTokenResolverBuilderImpl.java

/gwt-user/.apt_generated/com/google/web/bindery/requestfactory/vm/impl

line 2

Java Problem

The type 
java.util.Mapcom.google.web.bindery.requestfactory.shared.MapKeyProxy,com.google.web.bindery.requestfactory.shared.MapValueProxy
 
cannot be used here

BaseFooProxy.java

/gwt-user/core/test/com/google/web/bindery/requestfactory/shared

line 85

Annotation Problem (Java 6 processor)

The type 
java.util.Mapjava.lang.Integer,com.google.web.bindery.requestfactory.shared.SimpleBarProxy
 
cannot be used here

BaseFooProxy.java

/gwt-user/core/test/com/google/web/bindery/requestfactory/shared

line 147

Annotation Problem (Java 6 processor)

The type 
java.util.Mapcom.google.web.bindery.requestfactory.shared.SimpleBarProxy,java.lang.Integer
 
cannot be used here

BaseFooProxy.java

/gwt-user/core/test/com/google/web/bindery/requestfactory/shared

line 145

Annotation Problem (Java 6 processor)

The method addTypeToken(String, String) is undefined for the type 
TypeTokenResolverBuilderImpl

TypeTokenResolverBuilderImpl.java

/gwt-user/.apt_generated/com/google/web/bindery/requestfactory/vm/impl

line 6

Java Problem

CSS file com/google/gwt/uibinder/test/client/Menu.css is missing

WidgetBasedUi.ui.xml

/gwt-user/core/test/com/google/gwt/uibinder/test/client

line 110

Google Web Toolkit UiBinder Problem

The method addTypeToken(String, String) is undefined for the type 
TypeTokenResolverBuilderImpl

TypeTokenResolverBuilderImpl.java

/gwt-user/.apt_generated/com/google/web/bindery/requestfactory/vm/impl

line 5

Java Problem

The type 
java.util.Mapcom.google.web.bindery.requestfactory.shared.MapKeyProxy,com.google.web.bindery.requestfactory.shared.MapValueProxy
 
cannot be used here

BaseFooProxy.java

/gwt-user/core/test/com/google/web/bindery/requestfactory/shared

line 149

Annotation Problem (Java 6 processor)
 


So the first set of errors is related to using java.util.Map in 
EntityProxies (which I thought is forbidden), but it may have changed in 
recent versions, or maybe this version in trunk. In that case I need to 
compile with GWT version that is in trunk right? The project compiles 
successfully with ant, do I have to use the freshly compiled GWT instead of 
my current 2.6.1 ?

*com.google.web.bindery.requestfactory.vm.impl.TypeTokenResolver *is a 
generated interface? I can't find it anywhere.

I also have a doubt with the task in eclipse/README.txt :

Project-Properties-Java Compiler-AnnotationProcessor-Factory Path
- Add Variable
- Select GWT_TOOLS and click Extend
- Select lib/requestfactory and the most recently dated
  requestfactory-apt--MM-DD.jar


the only one with a date is requestfactory-apt-2011-08-18.jar (is it the 
last one???). There are two other versions without a date one seems old too 
'apt-2.5.1' and the other doesn't specify its version

Thanks for your help
















p.s:
if the error font is too small here they are again without formatting

   - Description Resource Path Location Type
   - The type java.util.Mapjava.lang.String,java.lang.Integer cannot be 
   used here BaseFooProxy.java 
   /gwt-user/core/test/com/google/web/bindery/requestfactory/shared line 79 
Annotation 
   Problem (Java 6 processor)
   - The type 
   
java.util.Mapjava.lang.Integer,com.google.web.bindery.requestfactory.shared.SimpleBarProxy
 
   cannot be used here 

[gwt-contrib] Re: Errors in eclipse on gwt-user after cloning git

2014-05-20 Thread Zied Hamdi OneView


 I also have a doubt with the task in eclipse/README.txt :

 Project-Properties-Java Compiler-AnnotationProcessor-Factory Path
 - Add Variable
 - Select GWT_TOOLS and click Extend
 - Select lib/requestfactory and the most recently dated
   requestfactory-apt--MM-DD.jar


 the only one with a date is requestfactory-apt-2011-08-18.jar (is it the 
 last one???). There are two other versions without a date one seems old too 
 'apt-2.5.1' and the other doesn't specify its version


I Just checked the jars in *tools/lib/requestfactory*

I looked inside the jar and the files are old: all of the jars contain 
files from 2011 (do I have to take a newly built file? where do I find it?)
 

-- 
You received this message because you are subscribed to the Google Groups GWT 
Contributors group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to google-web-toolkit-contributors+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/google-web-toolkit-contributors/785cf768-6bed-4a3f-b1d4-170d9805fef0%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[gwt-contrib] Re: Errors in eclipse on gwt-user after cloning git

2014-05-20 Thread Zied Hamdi OneView
Perfect Jens :-),

Thanks a lot for all these valuable answers!!

I can get started now

Le mardi 20 mai 2014 11:26:09 UTC+1, Zied Hamdi OneView a écrit :

 Hi Gwt friends :)

 I wanted to start contributing to GWT, so I followed the instructions 
 until I arrived to the point of using my eclipse.

 There I have the following errors (and since I don't want to change code 
 that I don't want to submit I'm kind of stuck in what to do now?). The 
 errors are the following:


 Description

 Resource

 Path

 Location

 Type

 The type java.util.Mapjava.lang.String,java.lang.Integer cannot be used 
 here

 BaseFooProxy.java

 /gwt-user/core/test/com/google/web/bindery/requestfactory/shared

 line 79

 Annotation Problem (Java 6 processor)

 The type 
 java.util.Mapjava.lang.Integer,com.google.web.bindery.requestfactory.shared.SimpleBarProxy
  
 cannot be used here

 BaseFooProxy.java

 /gwt-user/core/test/com/google/web/bindery/requestfactory/shared

 line 81

 Annotation Problem (Java 6 processor)

 The type 
 java.util.Mapcom.google.web.bindery.requestfactory.shared.SimpleBarProxy,java.lang.Integer
  
 cannot be used here

 BaseFooProxy.java

 /gwt-user/core/test/com/google/web/bindery/requestfactory/shared

 line 83

 Annotation Problem (Java 6 processor)

 The type java.util.Mapjava.lang.String,java.lang.Integer cannot be used 
 here

 BaseFooProxy.java

 /gwt-user/core/test/com/google/web/bindery/requestfactory/shared

 line 143

 Annotation Problem (Java 6 processor)

 The method addTypeToken(String, String) is undefined for the type 
 TypeTokenResolverBuilderImpl

 TypeTokenResolverBuilderImpl.java

 /gwt-user/.apt_generated/com/google/web/bindery/requestfactory/vm/impl

 line 4

 Java Problem

 com.google.web.bindery.requestfactory.vm.impl.TypeTokenResolver cannot be 
 resolved to a type

 TypeTokenResolverBuilderImpl.java

 /gwt-user/.apt_generated/com/google/web/bindery/requestfactory/vm/impl

 line 2

 Java Problem

 The type 
 java.util.Mapcom.google.web.bindery.requestfactory.shared.MapKeyProxy,com.google.web.bindery.requestfactory.shared.MapValueProxy
  
 cannot be used here

 BaseFooProxy.java

 /gwt-user/core/test/com/google/web/bindery/requestfactory/shared

 line 85

 Annotation Problem (Java 6 processor)

 The type 
 java.util.Mapjava.lang.Integer,com.google.web.bindery.requestfactory.shared.SimpleBarProxy
  
 cannot be used here

 BaseFooProxy.java

 /gwt-user/core/test/com/google/web/bindery/requestfactory/shared

 line 147

 Annotation Problem (Java 6 processor)

 The type 
 java.util.Mapcom.google.web.bindery.requestfactory.shared.SimpleBarProxy,java.lang.Integer
  
 cannot be used here

 BaseFooProxy.java

 /gwt-user/core/test/com/google/web/bindery/requestfactory/shared

 line 145

 Annotation Problem (Java 6 processor)

 The method addTypeToken(String, String) is undefined for the type 
 TypeTokenResolverBuilderImpl

 TypeTokenResolverBuilderImpl.java

 /gwt-user/.apt_generated/com/google/web/bindery/requestfactory/vm/impl

 line 6

 Java Problem

 CSS file com/google/gwt/uibinder/test/client/Menu.css is missing

 WidgetBasedUi.ui.xml

 /gwt-user/core/test/com/google/gwt/uibinder/test/client

 line 110

 Google Web Toolkit UiBinder Problem

 The method addTypeToken(String, String) is undefined for the type 
 TypeTokenResolverBuilderImpl

 TypeTokenResolverBuilderImpl.java

 /gwt-user/.apt_generated/com/google/web/bindery/requestfactory/vm/impl

 line 5

 Java Problem

 The type 
 java.util.Mapcom.google.web.bindery.requestfactory.shared.MapKeyProxy,com.google.web.bindery.requestfactory.shared.MapValueProxy
  
 cannot be used here

 BaseFooProxy.java

 /gwt-user/core/test/com/google/web/bindery/requestfactory/shared

 line 149

 Annotation Problem (Java 6 processor)
  


 So the first set of errors is related to using java.util.Map in 
 EntityProxies (which I thought is forbidden), but it may have changed in 
 recent versions, or maybe this version in trunk. In that case I need to 
 compile with GWT version that is in trunk right? The project compiles 
 successfully with ant, do I have to use the freshly compiled GWT instead of 
 my current 2.6.1 ?

 *com.google.web.bindery.requestfactory.vm.impl.TypeTokenResolver *is a 
 generated interface? I can't find it anywhere.

 I also have a doubt with the task in eclipse/README.txt :

 Project-Properties-Java Compiler-AnnotationProcessor-Factory Path
 - Add Variable
 - Select GWT_TOOLS and click Extend
 - Select lib/requestfactory and the most recently dated
   requestfactory-apt--MM-DD.jar


 the only one with a date is requestfactory-apt-2011-08-18.jar (is it the 
 last one???). There are two other versions without a date one seems old too 
 'apt-2.5.1' and the other doesn't specify its version

 Thanks for your help
















 p.s:
 if the error font is too small here they are again without formatting

- Description Resource Path Location Type
- The type java.util.Mapjava.lang.String,java.lang.Integer cannot be 
used

[gwt-contrib] caching EntityProxy instances on the client between sessions

2013-02-19 Thread Zied Hamdi OneView
Hi All,

I have an issue with caching a list of almost static EntityProxies on the 
client side. 

First I checked the possibility to mark the url as cachable but since 
RequestFactory urls are generated by GWT, it seamed too complicated to do.

I then decided to cache the EntityProxies in cookies. Saving to JSON was 
ok, relaoding was a little tricky since I didn't get the point of all 
methods declared in EntityProxyCategory (see the code below).

Finally things almost work but when I do a request, I receive a *SEVERE: 
Server Error 413* (which is thrown by the servlet before processing the 
request)

here's my code

@Category(LocalEntityProxyCategory.class)
protected interface CateoriesForCookieHolderFactory extends AutoBeanFactory 
{
AutoBeanCategoriesForCookieHolder categoriesForCookieHolder();

AutoBeanCategoryProxy category();

AutoBeanContextDynamicFieldProxy contextDynamicFieldProxy();
}

public static class LocalEntityProxyCategory {
/**
 * EntityProxies are equal if they are from the same RequestContext and
 * their stableIds are equal.
 */
public static boolean equals(AutoBean? extends EntityProxy bean, Object 
o) {
if (!(o instanceof EntityProxy)) {
return false;
}
AutoBeanEntityProxy other = AutoBeanUtils.getAutoBean((EntityProxy) o);
if (other == null) {
// Unexpected, could be an user-provided implementation?
return false;
}

// Object comparison intentional. True if both null or both the same
return stableId(bean).equals(stableId(other))
 nonDiffingRequestContext(bean) == nonDiffingRequestContext(other);
}

/**
 * Hashcode is always that of the stableId, since it's stable across time.
 */
public static int hashCode(AutoBean? extends EntityProxy bean) {
return stableId(bean).hashCode();
}

/**
 * Effectively overrides {@link BaseProxyCategory#stableId(AutoBean)} to
 * return a narrower bound.
 */
public static T extends EntityProxy EntityProxyIdT stableId(
final AutoBean? extends T bean) {
return new SimpleProxyIdT(bean);
}

private static AbstractRequestContext nonDiffingRequestContext(
AutoBean? bean) {
AbstractRequestContext context = requestContext(bean);

return context;
}
}

public class SimpleProxyIdT extends EntityProxy implements 
EntityProxyIdT {
long id;
ClassT clazz;

@SuppressWarnings(unchecked)
public SimpleProxyId(AutoBean? extends T bean) {
BasicProxy proxy = (BasicProxy) bean.as();
id = proxy.getId();
clazz = (ClassT) proxy.getClass();
}

@Override
public ClassT getProxyClass() {
return clazz;
}

@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((clazz == null) ? 0 : clazz.hashCode());
result = prime * result + (int) (id ^ (id  32));
return result;
}

@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
SimpleProxyId other = (SimpleProxyId) obj;
if (clazz == null) {
if (other.clazz != null)
return false;
} else if (!clazz.equals(other.clazz))
return false;
if (id != other.id)
return false;
return true;
}
}

I think it is too complicated to do such caching (for what it is, maybe, it 
could be a good idea to include a mechanism either for url resource caching 
or for EntityProxy json read and write)

Best Regards,
Zied Hamdi
http://1vu.fr

-- 
-- 
http://groups.google.com/group/Google-Web-Toolkit-Contributors
--- 
You received this message because you are subscribed to the Google Groups 
Google Web Toolkit Contributors group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to google-web-toolkit-contributors+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.