Re: Developer plugin for Firefox 23 doesn't work

2013-08-19 Thread Katarzyna
Same issue here.  Updated an hour ago.

FF 23.0.1
Scientific Linux 64bit

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


Re: Correct way to sink events on UiBinder Element

2013-08-19 Thread Thomas Broyer


On Thursday, August 15, 2013 9:59:48 PM UTC+2, Shaun Tarves wrote:

 I am defining several elements via UiBinder. My understanding is these are 
 created as com.google.gwt.dom.client.Element during the createAndBind 
 call.

 I would like to add a click handler to one of these elements. Is there any 
 way other than casting those to com.google.gwt.dom.client.Element like this?


 @UiField 
 Element clickable;

 DOM.sinkEvents((com.google.gwt.user.client.Element) clickable, 
 Event.ONCLICK);
 DOM.setEventListener((com.google.gwt.user.client.Element) clickable, new 
 EventListener() { 
 public void onBrowserEvent(Event event) { 
 //TODO: Some code
 } 
 });


Don't do that, you might leak memory on some browsers (aka, do it at your 
own risks)

Either use widgets or use the event delegation pattern, where your widget 
listens to events and do one thing or another depending on the event's type 
and target.
For event delegation, using uibinder for cells makes it easier as you can 
use @UiHandler and let the generator do the routing for you.

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


Re: My CellTable is slow and I don't know why

2013-08-19 Thread Thomas Broyer


On Sunday, August 11, 2013 12:02:24 PM UTC+2, Nuno Godinho de Matos wrote:

 It runs the DevMode main class, ture.
 But I am quite certain mvn gwt:run is fueling me the compiled javascript.
 The project compilation time is huge for making the gecko_1_3 and safari 
 permutations (since I am testing in both chrome and firefox).
 What would be the point of compiling all that java into javascript if the 
 gwt:run would later not use the compiled javascript.


It depends on your Maven build. Generally, gwt:compile is attached to the 
prepare-package phase so that it doesn't run when you only need to 
compile/process-classes like gwt:run does.
 

 Moreover, if in the module user.agent property I take away the compilation 
 for gecko, when I load the page with firefox I get alarms that there is no 
 compiled javascript for my user agent.


If you don't have the ?gwt.codesvr= in your URL then yes it's possible that 
you're running the compiled JS code served by the DevMode embedded HTTP 
server.
If you want to run in prod mode, better use mvn jetty:run though.

What i am going to check out first is weather or not the dead weight of the 
 cell table is not related to the DOM structure of my GWT components tree. 
 Such as, for example, laying the table within the bootstrap grid model. 
 Potentially, each of these nested page components that are being used for 
 layout or whatever else, are all like the cell table implementation crowing 
 up the application with mouseover, mouseout events. You put the mouse on 
 top of a cell table row, and there goes a mouse over buble up to kingdom 
 come.

 I am considering that It is possible that this drag on performance has to 
 do with a by default spamming of dom events. Events running from the 
 bottom of the DOM tree up to the very top element, all bubbling and lagging 
 up.
 So what I am going to try out this time, is to dump the cell table outside 
 the overall page layout, so that there aren't any OnWhatever events to 
 buble up to.

 Let's see if that is is the problem.
 And if that is indeed the problem, Christ!, you do have to be ever careful 
 with most of the gwt components you use cause they just booby trap the html 
 elements with events you did not even know where being played out for you.


One thing that might help, if you don't need it, is to 
setSkipRowHoverStyleUpdate(true) and possibly setSkipRowHoverCheck(true) 
and/or setSkipRowHoverFloatElementCheck(true)

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


Re: bootstrap js file path not added correctly to the html page.

2013-08-19 Thread Thomas Broyer

On Saturday, August 10, 2013 10:51:15 PM UTC+2, Amit Chavan wrote:

 I created a GWT project [without using the option of generate sample 
 code]. I have added Entry Point class, html page, module file. The 
 bootstrap js file is getting generated under 
 war/com.travelpeeps.travelpeeps folder and its name 
 is com.travelpeeps.travelpeeps.nocache.js. When i looked at the htlm file 
 generated by eclipse plugin i did not see the correct name of the bootstrap 
 js file. I had to manually change the filepath to the following under the 
 script tag as
 script type=text/javascript language=javascript 
 src=com.travelpeeps.travelpeeps/com.travelpeeps.travelpeeps.nocache.js/script
   

 Is there a bug open for this behavior. This took me some digging around to 
 understand why my entry point class was not getting called. I don't see 
 this problem when i create a new project and have the plugin generate 
 sample code for the project. 


The Google Plugin for Eclipse has its own 
forumhttps://groups.google.com/d/forum/google-plugin-eclipseand issue 
tracker https://code.google.com/p/google-plugin-for-eclipse/issues/list. 

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


Re: Problem with number in JsValueGlue

2013-08-19 Thread Thomas Broyer
Are you running DevMode in Chrome? 
See https://code.google.com/p/google-web-toolkit/issues/detail?id=5778

On Wednesday, August 7, 2013 12:52:55 PM UTC+2, stole wrote:

 I am getting this error:
 java.lang.IllegalArgumentException: invoke arguments: JS value of type 
 number, expected java.lang.Object
 at com.google.gwt.dev.shell.JsValueGlue.get(JsValueGlue.java:178)
 at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:65)
 at 
 com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:172)
 at 
 com.google.gwt.dev.shell.BrowserChannelServer.reactToMessagesWhileWaitingForReturn(BrowserChannelServer.java:338)
 at 
 com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:219)
 at 
 com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:136)
 at com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:571)
 at 
 com.google.gwt.dev.shell.ModuleSpace.invokeNativeObject(ModuleSpace.java:279)
 at 
 com.google.gwt.dev.shell.JavaScriptHost.invokeNativeObject(JavaScriptHost.java:91)

 Upon closer examination of the get method of JsValueGlue which looks 
 something like this:
   public static T T get(JsValue value, CompilingClassLoader cl, ClassT 
 type, String msgPrefix) {
 if (type.isPrimitive()) {
   //ommitted for brevity
 }

 if (value.isNull() || value.isUndefined()) {
   return null;
 }
 if (value.isWrappedJavaObject()) {
   return type.cast(value.getWrappedJavaObject());
 }
 if (value.isString()) {
   return type.cast(value.getString());
 }
 if (value.isJavaScriptObject()) {
   return type.cast(createJavaScriptObject(value, cl));
 }

 // Just don't know what do to with this.
 /*
  * TODO (amitmanjhi): does throwing a HostedModeException here and 
 catching
  * a RuntimeException in user test
  * com.google.gwt.dev.jjs.test.HostedTest::testObjectReturns() make 
 sense
  */
 throw new IllegalArgumentException(msgPrefix + : JS value of type 
 + value.getTypeString() + , expected 
 + TypeInfo.getSourceRepresentation(type));
   }

 I saw that there is no check when the value is a number. Not sure if it is 
 a bug in JsValueGlue.get or there is a reason number is excluded. I believe 
 the code misses something like:

 if (value.isNumber()) {
   return type.cast(value.getNumber());
 }

 If this is a bug I'd be willing to create an issue and probably a patch if 
 the whole procedure isn't too complicated.



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


Re: Developer plugin for Firefox 23 doesn't work

2013-08-19 Thread Jeff
Similar issue.  FF crashes on startup, reset FF in safe mode solves the 
issue until gwt plugin is re-installed, then it starts crashing again. 
 Windows 7 64-bit

On Friday, August 16, 2013 5:42:01 AM UTC-4, Gražvydas Valeika wrote:

 Hi,

 I just updated FF to 23. And I see strange behavior.

 Developer plugin properly installed and shows version 1.23 and latest 
 update date of today,

 but while starting DevMode application I'm getting 'Development Mode 
 requires the Google Web Toolkit Developer Plugin' prompt. I'm installing 
 plugin again, FF restarts, but while trying again I am getting plugin 
 install prompt as I wouldn't have plugin installed.

 :(

 Fedora 18, 64bit.


 Thanks,

 Grazvydas


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


HeaderPanel not setting height of the Content widget

2013-08-19 Thread stuckagain
Hi,
 
I am trying to use the HeaderPanel to set a Header/Footer and an resizing 
ContentPanel (which contains a CellTable).
 
The problem is that unlike other LayoutPanel classes the vertical size is 
not enforced on the content widget, its width is set to 100% but the height 
is not set.
I don't really want to set width/height to 100% either since that would 
make it impossible to have a scrollbar.
 
Right now I have a solution in that I override the onResize method of the 
widget that gets inserted as the content panel. 
But that is not really nice in a framework where I have lots of reusable 
widgets, and I don't know which will be inserted in a HeaderPanel or not.
 
Any reason why this Layout Panel is not enforcing the height and width in 
pixels like other layout panels do on their children ?
 
David
 

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


Re: HeaderPanel not setting height of the Content widget

2013-08-19 Thread Thomas Broyer

On Monday, August 19, 2013 4:06:07 PM UTC+2, stuckagain wrote:

 Hi,
  
 I am trying to use the HeaderPanel to set a Header/Footer and an resizing 
 ContentPanel (which contains a CellTable).
  
 The problem is that unlike other LayoutPanel classes the vertical size is 
 not enforced on the content widget, its width is set to 100% but the height 
 is not set.
 I don't really want to set width/height to 100% either since that would 
 make it impossible to have a scrollbar.
  
 Right now I have a solution in that I override the onResize method of the 
 widget that gets inserted as the content panel. 
 But that is not really nice in a framework where I have lots of reusable 
 widgets, and I don't know which will be inserted in a HeaderPanel or not.
  
 Any reason why this Layout Panel is not enforcing the height and width in 
 pixels like other layout panels do on their children ?


There's a reason for RequiresResize to have an onResize method rather than 
relying on setSize. One of the goals (expectations? dreams?) of layout 
panels was that the layout could be done in pure CSS (including animations) 
and you'd only need to notify widgets when their size has changed (through 
onResize), something that you know when it happens because the layout is 
controlled from the outside in (it should only happen the top layout panel 
is resized, or some panels' inner layout change, or possibly when font 
sizes or zoom change; there's the case of borders and margins but you're 
supposed to know what you're doing so you could call onResize or 
forceLayout then).

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


Re: HeaderPanel not setting height of the Content widget

2013-08-19 Thread David
Thomas,

But reality is a bit different, the layout panels are actively changing
widget sizes, except the HeaderPanel.
Additionally the forceLayout is a private method in this Layout widget, not
that it matters to me in this case.

But Ok, I have a workaround in that I set the pixel size myself. I created
a subclass of HeaderPanel that wraps the content widget in a custom panel
that does a setPixelSize on the child when onResize is triggered. It would
be nice if the HeaderPanel would have this behaviour ( or even support
animation like the other Layout Panels do).

David
On Mon, Aug 19, 2013 at 4:24 PM, Thomas Broyer t.bro...@gmail.com wrote:


 On Monday, August 19, 2013 4:06:07 PM UTC+2, stuckagain wrote:

 Hi,

 I am trying to use the HeaderPanel to set a Header/Footer and an resizing
 ContentPanel (which contains a CellTable).

 The problem is that unlike other LayoutPanel classes the vertical size is
 not enforced on the content widget, its width is set to 100% but the height
 is not set.
 I don't really want to set width/height to 100% either since that would
 make it impossible to have a scrollbar.

 Right now I have a solution in that I override the onResize method of the
 widget that gets inserted as the content panel.
 But that is not really nice in a framework where I have lots of reusable
 widgets, and I don't know which will be inserted in a HeaderPanel or not.

 Any reason why this Layout Panel is not enforcing the height and width in
 pixels like other layout panels do on their children ?


 There's a reason for RequiresResize to have an onResize method rather than
 relying on setSize. One of the goals (expectations? dreams?) of layout
 panels was that the layout could be done in pure CSS (including animations)
 and you'd only need to notify widgets when their size has changed (through
 onResize), something that you know when it happens because the layout is
 controlled from the outside in (it should only happen the top layout panel
 is resized, or some panels' inner layout change, or possibly when font
 sizes or zoom change; there's the case of borders and margins but you're
 supposed to know what you're doing so you could call onResize or
 forceLayout then).

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


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


Re: Appearance of extra scroll bar in GWT Datagrid

2013-08-19 Thread Harsh Yadav
Hi,

Does anyone else see the same issue?
Any input is appreciated.

Thanks,
Harsh


On Sat, Aug 10, 2013 at 5:02 PM, Harsh Yadav harsh.de...@gmail.com wrote:

 Found in GWT 2.5
 *Encountered on OS / Browser:*

 Mac OSX 10.8.4, Chrome, Safari. This is not an issue on Firefox.
 *Detailed description:*

 While using the DataGrid, an extra scroll bar is visible.
 Please find attached a screenshot form the GWT showcase.

 In my application, I am using DataGrid 
 (http://gwt.googleusercontent.com/samples/Showcase/Showcase.html#!CwDataGrid) 
 combined with LazyScrolling example provided in the showcase 
 (http://gwt.googleusercontent.com/samples/Showcase/Showcase.html#!CwCellList).


 I am using DataGrid in ui binder as:

 h:LazyDataGrid ui:field=itsCellTable pageSize=30  height=520px 
 width=100% /

 LazyDataGrid extends DataGrid to expose grid's scroll panel as:

 public ScrollPanel getScrollPanel() {
   HeaderPanel header = (HeaderPanel) getWidget();
   return (ScrollPanel) header.getContentWidget();
   }

 This results in appearance of an extra (non-functional) scroll bar when the 
 page loads (See attached screenshot).

 Thanks in advance.



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


Re: Appearance of extra scroll bar in GWT Datagrid

2013-08-19 Thread Jens
I can only see the issue happening when the page loads or when changing the 
browser size which make the second scroll bar appear sometimes. However 
scrolling itself works as expected. 

Looks like a weird CustomScrollPanel rendering bug i WebKit/Blink. Not sure 
if thats caused by GWT code.

-- J.

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


Re: HeaderPanel not setting height of the Content widget

2013-08-19 Thread Jens


 But reality is a bit different, the layout panels are actively changing 
 widget sizes, except the HeaderPanel.


This is happening because HeaderPanel isn't a LayoutPanel and does not use 
one internally.

To fully mimic the LayoutPanel behavior you would need to add 
position:absolute; top, left, right, bottom = 0; to the center container's 
child widget. This should stretch the child widget to the center 
container's size which HeaderPanel recalculates on header/footer resizes. 

-- J.

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


Re: I'm enhancing GWT to provide Java stack traces for clientside exceptions in production

2013-08-19 Thread Alex Epshteyn
Hello folks,

I just wanted to remind everyone that the last day to fund this project is 
this Friday, August 23.

I've been using this framework in production in my app now for 2 months, 
and it works great.  Have logged 70,000 perfect stack traces so far! 
 Already fixed 3 major bugs in my GWT-based UI code that I would NEVER 
found otherwise.

Let's get this capability into GWT by the end of the year.  Please donate!

Thanks,
Alex



On Wednesday, July 17, 2013 4:56:40 PM UTC-4, Alex Epshteyn wrote:

 Dear fellow GWT users,

 I would like to announce that I have finally solved what I always thought 
 to be GWT's greatest weakness: its lack of debugging information for 
 client-side exceptions in production.  

 With my patch, your deployed app will be able to report stack traces like 
 this:

 com.google.gwt.core.client.JavaScriptException: (TypeError) : a is null

 com.google.gwt.dom.client.DOMImplMozilla.$getBodyOffsetLeft(DOMImplMozilla.java:145)
  

 com.google.gwt.user.client.ui.PopupPanel.$setPopupPosition(Document.java:1287)

 com.google.gwt.user.client.ui.PopupPanel.setPopupPosition(PopupPanel.java:884)
 com.google.gwt.user.client.ui.PopupPanel.PopupPanel(PopupPanel.java:453) 

 com.typeracer.commons.client.widgets.EnhancedPopup.EnhancedPopup(EnhancedPopup.java:32)

 com.typeracer.commons.client.widgets.PopupWithIcon.PopupWithIcon(PopupWithFocusableTextBox.java:28)
  

 com.typeracer.main.client.controller.TyperacerUncaughtExceptionHandler$1.execute(TyperacerUncaughtExceptionHandler.java:55)
  

 com.google.gwt.core.client.impl.SchedulerImpl.runScheduledTasks(SchedulerImpl.java:50)
  
 etc... :-)


 instead of the current state of affairs that looks like this:

 lineNumber: 3190 columnNumber: 15354: a is null; (TypeError) fileName:  
 http://localhost:8088/9C4DC2D905BEA407601C92C56B43E3B8.cache.html 
 stack: @
 http://localhost:8088/9C4DC2D905BEA407601C92C56B43E3B8.cache.html:2422 
 Rub@http://localhost:8088/9C4DC2D905BEA407601C92C56B43E3B8.cache.html:2423
  
 dSb@http://localhost:8088/9C4DC2D905BEA407601C92C56B43E3B8.cache.html:3190
  
 tA@http://localhost:8088/9C4DC2D905BEA407601C92C56B43E3B8.cache.html:2810 
 Xmb@http://localhost:8088/9C4DC2D905BEA407601C92C56B43E3B8.cache.html:2289
  
 etc... :-(


 I am asking the community to support me in finishing this effort and 
 integrating my patch into GWT.  Please take a look and what I've done, and 
 consider making a donation:

 http://igg.me/at/gwt-stack-traces/x/3494291

 I am an indie developer and I just need some funding to continue this 
 work.  I'm looking for both grassroots and corporate sponsorship for my 
 quest of improving GWT's error reporting and debugging support.

 I've written a detailed white paper ( http://goo.gl/YGsrQ ) that 
 describes how my solution works and why it is necessary.  I welcome your 
 feedback!

 Thanks!
 Alex


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


Can GWT be used with Dust.js, Node.js and Backbone.js?

2013-08-19 Thread Ravenor
Sorry - totally new at GWT - have not even read the manuals yet.

Any guidance welcome.

Inquisitor Ravenor

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


Need Editor Framework help

2013-08-19 Thread Michael Prentice
I spent most of Friday reading up on Editor Framework and it seemed quite 
powerful and useful. But today I'm looking at actually making use of it and 
I've had some fairly basic questions which I have not been able to find 
answers to in this group or anywhere on Google/gwtproject.org.

1) Does the use of Editor Framework require the use of UiBinder? i.e. can I 
use it with a regular Java view?
2) Does the use of Editor Framework require the use of RequestFactory? This 
answer appears to be no, but I haven't been able to find any examples that 
don't use RequestFactory. Do such examples exist?
3) What options exist in GWT for doing databinding? It looks like UiBinder 
itself takes care of doing data binding. So I guess that Editor Framework 
is not so much about data binding, instead it adds validation, Editor 
composition, and?

I still can't really figure out if the Editor Framework is right for my 
project or not. I use DTOs via GWT-RPC without any RequestFactory. My 
current views are Java (no UiBinder) but I might switch to UiBinder. I've 
got the architecture for MVP laid out pretty well and I'm having a hard 
time figuring out how Editors fit into the mix.

The DTOs whose data is exposed in my views does not map directly to what is 
displayed in the view one-to-one. Many views display data taken from 
multiple DTOs. Also actions/selections in one view must result in changes 
to other views on the page. This means that selecting an item in one view 
could cause (via Events) multiple presenters to disable/enable elements in 
their views.

Are there are good IO videos that cover Editor Framework in detail? So far 
my searches have not come up with any, but the names don't always specify 
the content.

I've read the details on gwtproject.org, code.google.com, and various blogs 
plus the DynaTableRf example. But while trying to implement this stuff 
today, it just feels wrong, like it isn't going to fit/work/etc with what 
I'm doing. So I'm trying to figure out if I should just not use Editor 
Framework at all.

Thank you,

Michael Prentice
GDG Space Coast

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


Re: Need Editor Framework help

2013-08-19 Thread Alfredo Quiroga-Villamil
In my humble opinion, the editor framework is by far one of the cooolest
and most important features found in GWT. For some reason it doesn't seem
to be something that gets used a lot, at least I haven't seen a lot of
people using it.

Your questions:

1) It doesn't have to be used with UI Binder. It can work just fine with
plain java views.
2) No
3) The Editor framework is mostly if not all about data binding.

My very simplistic, in a nut shell Editor description.

- Suppose you have a View and it consists of a Label, checkbox, texarea,
etc...
- That View that you want the user to interact with is what is called an
Editor in the examples you'll find. For example in
http://www.gwtproject.org/doc/latest/DevGuideUiEditors.html :

public class PersonEditor extends Dialog implements EditorPerson {

 - That View/Editor will have fields representing ... well what you want
your view to look like.

- You will back that Editor/View with a Java Bean. In this case Person. The
field names in your editor/view must match the Bean fields. Although I
think there was even an annotation as well that you could use if you wanted
to use a different field name. (Getting old so I forget stuff)

- So now you have a View/Editor that is being backed up or better expressed
it's bound with a Java Bean.

- At this point all you really need to remember for the most part are two
methods.

a) edit= will populate your View/Editor fields based on the value/s
found in your Java Bean (Person in this case)
b) flush  = The other direction, will take the values from your
View/Editor html elements and populate your Bean instance.

There are more complicated cases. Editors of Editors, a few other things,
but overall and again very simplistically that is the idea.

See an example on how we employ the Editor framework for example in this
View we have in the touch4j demo:

http://touch4j.appspot.com/#EditorViewPlace:Editors

Click/Tap on source on the right hand corner.

I omitted some initialization steps in my very poor description such as an
interface definition, etc... but overall that is the idea.

For your case, you can publish events for example on your RPC response
containing the DTO you've received and the different presenters can have or
react to those events you published, build beans that back up your
Editor/View and update them in a very simple way. Think about what would
happen without the Editor framework. You would need to have in your
different presenters:

onReceivedEvent(Person person) {
   firstNameLabel.setValue(person.getFirstName);
   // If you have a lot of html elements in your view this is tedious work.
   // More so if you have to check for nulls etc...
}

With the Editor framework that becomes:

onReceivedEvent(Person person) {
   yourEditorDriver.edit(person);
   // Your UI elements are automatically updated
}

Then to obtain any user driven interactions with your UI HTML elements you
could have something like after the user hits Save:

onSaveEvent() {
   Person edited = yourEditorDriver.flush();
   firePersonPersistEvent(edited);
   // All the UI changes that were done by the user are automatically
updated in the Person Bean.
}

Hope that helps.



On Mon, Aug 19, 2013 at 6:44 PM, Michael Prentice splak...@gmail.comwrote:

 I spent most of Friday reading up on Editor Framework and it seemed quite
 powerful and useful. But today I'm looking at actually making use of it and
 I've had some fairly basic questions which I have not been able to find
 answers to in this group or anywhere on Google/gwtproject.org.

 1) Does the use of Editor Framework require the use of UiBinder? i.e. can
 I use it with a regular Java view?
 2) Does the use of Editor Framework require the use of RequestFactory?
 This answer appears to be no, but I haven't been able to find any examples
 that don't use RequestFactory. Do such examples exist?
 3) What options exist in GWT for doing databinding? It looks like UiBinder
 itself takes care of doing data binding. So I guess that Editor Framework
 is not so much about data binding, instead it adds validation, Editor
 composition, and?

 I still can't really figure out if the Editor Framework is right for my
 project or not. I use DTOs via GWT-RPC without any RequestFactory. My
 current views are Java (no UiBinder) but I might switch to UiBinder. I've
 got the architecture for MVP laid out pretty well and I'm having a hard
 time figuring out how Editors fit into the mix.

 The DTOs whose data is exposed in my views does not map directly to what
 is displayed in the view one-to-one. Many views display data taken from
 multiple DTOs. Also actions/selections in one view must result in changes
 to other views on the page. This means that selecting an item in one view
 could cause (via Events) multiple presenters to disable/enable elements in
 their views.

 Are there are good IO videos that cover Editor Framework in detail? So far
 my searches have not come up with any, but the names don't always 

Problem decoding complex AutoBean

2013-08-19 Thread Thad Humphries
I've managed a simple AutoBean with a list. Now I've a more complex one, 
and I don't understand what's wrong. My get methods are returning null 
though the debugger shows the object has data.

The JSON looks like this:

{
  mquery:
{
  screenname:Index Card,
  fields:
{
  field:[
{title:Name,  name:odname,   value:*TIFF*},
{title:Date,  name:oddate,   value:},
{title:Ref #, name:odrefnum, value:}
  ]
}
}
} 


I have three interfaces:

public interface Field {
  String getTitle();
  void setTitle(String title);
  String getName();
  void setName(String name);
  String getValue();
  void setValue(String value);
}

public interface FieldList {
  ListField getField();
  void setField(ListField field);
}

public interface MQuery {
  String getScreenname();
  void setScreenname(String screenname);
  FieldList getFields();
  void setFields(FieldList fields);
}

In my bean factory, I have

public interface BeanFactory extends AutoBeanFactory {
  ...
  AutoBeanField field();
  AutoBeanFieldList fields();
  AutoBeanMQuery mquery();
}

In my onResponseReceived() method, I call

  AutoBeanMQuery mqueryBean = 
  AutoBeanCodex.decode(clientFactory.getBeanFactory(), 
  MQuery.class, response.getText());
  MQuery mQuery = mqueryBean.as();
  logger.log(Level.INFO, mQuery.getScreenname());
  screenName = mQuery.getScreenname();
  fieldList = mQuery.getFields().getField();
  view.renderFields(fieldList);

When I look at the debugger in Chrome, screenname, etc are populated (in 
mQuery:this$0:data_0 there is mquery with screenename set and 3 field 
objects in fields). However mQuery.getScreenname() returns null as does 
mQuery.getFields().

What am I not seeing here? Could the presence of other AutoBeans in my 
factory (beans that work) be messing me up (do I need a separate factory)?

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


Running over ubuntu

2013-08-19 Thread Muhammad Bashir Al-Noimi

  
  
Howdy,
When I tried to run GWT quick start
  tutorial I got this error message!

How can I fix this issue?


  I already installed GWT Developer plugin for Firefox 1.23
  I installed eclipse from ubuntu 13.04 repository (version
3.8.1)
  I already GWT from ubuntu 13.04 repository (version 2.4.0)


02:00:37.373 [ERROR] [hellostupid] Exception initializing module

java.lang.NullPointerException: null
at com.google.gwt.dev.javac.JsniChecker.getSuppressedWarnings(JsniChecker.java:565)
at com.google.gwt.dev.javac.JsniChecker$JsniDeclChecker.visit(JsniChecker.java:135)
at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.traverse(TypeDeclaration.java:1233)
at org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration.traverse(CompilationUnitDeclaration.java:679)
at com.google.gwt.dev.javac.JsniChecker.check(JsniChecker.java:615)
at com.google.gwt.dev.javac.JsniChecker.check(JsniChecker.java:559)
at com.google.gwt.dev.javac.CompilationStateBuilder$CompileMoreLater$UnitProcessorImpl.process(CompilationStateBuilder.java:83)
at com.google.gwt.dev.javac.JdtCompiler$CompilerImpl.process(JdtCompiler.java:251)
at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:464)
at com.google.gwt.dev.javac.JdtCompiler.doCompile(JdtCompiler.java:710)
at com.google.gwt.dev.javac.CompilationStateBuilder$CompileMoreLater.compile(CompilationStateBuilder.java:235)
at com.google.gwt.dev.javac.CompilationStateBuilder.doBuildFrom(CompilationStateBuilder.java:447)
at com.google.gwt.dev.javac.CompilationStateBuilder.buildFrom(CompilationStateBuilder.java:370)
at com.google.gwt.dev.cfg.ModuleDef.getCompilationState(ModuleDef.java:360)
at com.google.gwt.dev.DevModeBase$UiBrowserWidgetHostImpl.createModuleSpaceHost(DevModeBase.java:110)
at com.google.gwt.dev.shell.OophmSessionHandler.loadModule(OophmSessionHandler.java:197)
at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:525)
at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:363)
at java.lang.Thread.run(Thread.java:724)


The project was not built since its build path is incomplete. Cannot find the class file for javax.servlet.http.HttpServletResponse. Fix the build path then try building this project	HelloStupid		Unknown	Java Problem
The type javax.servlet.http.HttpServletResponse cannot be resolved. It is indirectly referenced from required .class files	GreetingServiceImpl.java	/HelloStupid/src/com/example/hello/server	line 1	Java Problem



-- 
Best Regards,
Muhammad Bashir Al-Noimi
  




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


Re: Running over ubuntu

2013-08-19 Thread Muhammad Bashir Al-Noimi

  
  
On 08/20/2013 02:06 AM, Muhammad Bashir
  Al-Noimi wrote:


  
  
  Howdy,
  When I tried to run GWT quick
start tutorial I got this error message!
  
  How can I fix this issue?
  
  
I already installed GWT Developer plugin for Firefox 1.23
I installed eclipse from ubuntu 13.04 repository (version
  3.8.1)
I already GWT from ubuntu 13.04 repository (version 2.4.0)
  
  
  02:00:37.373 [ERROR] [hellostupid] Exception initializing module

java.lang.NullPointerException: null
at com.google.gwt.dev.javac.JsniChecker.getSuppressedWarnings(JsniChecker.java:565)
at com.google.gwt.dev.javac.JsniChecker$JsniDeclChecker.visit(JsniChecker.java:135)
at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.traverse(TypeDeclaration.java:1233)
at org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration.traverse(CompilationUnitDeclaration.java:679)
at com.google.gwt.dev.javac.JsniChecker.check(JsniChecker.java:615)
at com.google.gwt.dev.javac.JsniChecker.check(JsniChecker.java:559)
at com.google.gwt.dev.javac.CompilationStateBuilder$CompileMoreLater$UnitProcessorImpl.process(CompilationStateBuilder.java:83)
at com.google.gwt.dev.javac.JdtCompiler$CompilerImpl.process(JdtCompiler.java:251)
at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:464)
at com.google.gwt.dev.javac.JdtCompiler.doCompile(JdtCompiler.java:710)
at com.google.gwt.dev.javac.CompilationStateBuilder$CompileMoreLater.compile(CompilationStateBuilder.java:235)
at com.google.gwt.dev.javac.CompilationStateBuilder.doBuildFrom(CompilationStateBuilder.java:447)
at com.google.gwt.dev.javac.CompilationStateBuilder.buildFrom(CompilationStateBuilder.java:370)
at com.google.gwt.dev.cfg.ModuleDef.getCompilationState(ModuleDef.java:360)
at com.google.gwt.dev.DevModeBase$UiBrowserWidgetHostImpl.createModuleSpaceHost(DevModeBase.java:110)
at com.google.gwt.dev.shell.OophmSessionHandler.loadModule(OophmSessionHandler.java:197)
at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:525)
at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:363)
at java.lang.Thread.run(Thread.java:724)


The project was not built since its build path is incomplete. Cannot find the class file for javax.servlet.http.HttpServletResponse. Fix the build path then try building this project	HelloStupid		Unknown	Java Problem
The type javax.servlet.http.HttpServletResponse cannot be resolved. It is indirectly referenced from required .class files	GreetingServiceImpl.java	/HelloStupid/src/com/example/hello/server	line 1	Java Problem

I forgot to mention that I installed eclipse plugin from
http://dl.google.com/eclipse/plugin/4.2

-- 
Best Regards,
Muhammad Bashir Al-Noimi
  




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


Re: Running over ubuntu

2013-08-19 Thread Alvin Reyes
It seems that you don't have the Servlet API on your classpath upon
compilation. If you're using Maven, make sure that you put the servlet api
dependency on the pom.xml with a scope = compile. This will include the
servlet api on compilation, but exclude it on the deployment.

We need to exclude it, since Jetty (I assumed you are using Jetty here)
already has a servlet api.

Thanks,


On Tue, Aug 20, 2013 at 8:06 AM, Muhammad Bashir Al-Noimi mbno...@gmail.com
 wrote:

  Howdy, When I tried to run GWT quick start 
 tutorialhttp://www.gwtproject.org/usingeclipse.htmlI got this error message!

 How can I fix this issue?


- I already installed GWT Developer plugin for Firefox 1.23
- I installed eclipse from ubuntu 13.04 repository (version 3.8.1)
- I already GWT from ubuntu 13.04 repository (version 2.4.0)


 02:00:37.373 [ERROR] [hellostupid] Exception initializing module

 java.lang.NullPointerException: null
 at 
 com.google.gwt.dev.javac.JsniChecker.getSuppressedWarnings(JsniChecker.java:565)
 at 
 com.google.gwt.dev.javac.JsniChecker$JsniDeclChecker.visit(JsniChecker.java:135)
 at 
 org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.traverse(TypeDeclaration.java:1233)
 at 
 org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration.traverse(CompilationUnitDeclaration.java:679)
 at com.google.gwt.dev.javac.JsniChecker.check(JsniChecker.java:615)
 at com.google.gwt.dev.javac.JsniChecker.check(JsniChecker.java:559)
 at 
 com.google.gwt.dev.javac.CompilationStateBuilder$CompileMoreLater$UnitProcessorImpl.process(CompilationStateBuilder.java:83)
 at 
 com.google.gwt.dev.javac.JdtCompiler$CompilerImpl.process(JdtCompiler.java:251)
 at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:464)
 at com.google.gwt.dev.javac.JdtCompiler.doCompile(JdtCompiler.java:710)
 at 
 com.google.gwt.dev.javac.CompilationStateBuilder$CompileMoreLater.compile(CompilationStateBuilder.java:235)
 at 
 com.google.gwt.dev.javac.CompilationStateBuilder.doBuildFrom(CompilationStateBuilder.java:447)
 at 
 com.google.gwt.dev.javac.CompilationStateBuilder.buildFrom(CompilationStateBuilder.java:370)
 at 
 com.google.gwt.dev.cfg.ModuleDef.getCompilationState(ModuleDef.java:360)
 at 
 com.google.gwt.dev.DevModeBase$UiBrowserWidgetHostImpl.createModuleSpaceHost(DevModeBase.java:110)
 at 
 com.google.gwt.dev.shell.OophmSessionHandler.loadModule(OophmSessionHandler.java:197)
 at 
 com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:525)
 at 
 com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:363)
 at java.lang.Thread.run(Thread.java:724)



 The project was not built since its build path is incomplete. Cannot find the 
 class file for javax.servlet.http.HttpServletResponse. Fix the build path 
 then try building this projectHelloStupid Unknown Java 
 Problem
 The type javax.servlet.http.HttpServletResponse cannot be resolved. It is 
 indirectly referenced from required .class filesGreetingServiceImpl.java  
   /HelloStupid/src/com/example/hello/server   line 1  Java Problem


 --
 Best Regards,
 Muhammad Bashir Al-Noimi

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




-- 
*Alvin P. Reyes*,
Oracle Certified Professional
Software Engineer

Blog: http://www.alvinjayreyes.com

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


Re: [gwt-contrib] Google team meeting notes for August 7 (and earlier)

2013-08-19 Thread John Stalcup
re: Heiko Braun

it means having an optional compilation path that does not recompile the
entire world (as the current monolithic compile path does) and instead
tries to recompile just files (or or modules) that have changed.

it is exploratory work for me right now as there are very many issues
standing in its way.

if/when it is done and ready it should make a big impact on SuperDev mode
refresh time by reducing compile time (when compiles are run
non-monolithically)


On Sat, Aug 10, 2013 at 12:01 AM, Heiko Braun ike.br...@googlemail.comwrote:

 Regarding hello world app running using separate compilation:  can you
 elaborate on that? Do you mean support for two distinct compilation units
 within the same page?

 Regards,Heiko

 --
 http://groups.google.com/group/Google-Web-Toolkit-Contributors
 ---
 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.
 For more options, visit https://groups.google.com/groups/opt_out.




-- 
http://groups.google.com/group/Google-Web-Toolkit-Contributors
--- 
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.
For more options, visit https://groups.google.com/groups/opt_out.


[gwt-contrib] Re: I'm enhancing GWT to provide Java stack traces for clientside exceptions in production

2013-08-19 Thread Alex Epshteyn
Hello folks,

I just wanted to remind everyone that the last day to fund this project is 
this Friday, August 23.

I've been using this framework in production in my app now for 2 months, 
and it works great.  Have logged 70,000 perfect stack traces so far! 
 Already fixed 3 major bugs in my GWT-based UI code that I would NEVER 
found otherwise.

Let's get this capability into GWT by the end of the year.  Please donate!

Thanks,
Alex



On Wednesday, July 17, 2013 4:56:40 PM UTC-4, Alex Epshteyn wrote:

 Dear fellow GWT users,

 I would like to announce that I have finally solved what I always thought 
 to be GWT's greatest weakness: its lack of debugging information for 
 client-side exceptions in production.  

 With my patch, your deployed app will be able to report stack traces like 
 this:

 com.google.gwt.core.client.JavaScriptException: (TypeError) : a is null

 com.google.gwt.dom.client.DOMImplMozilla.$getBodyOffsetLeft(DOMImplMozilla.java:145)
  

 com.google.gwt.user.client.ui.PopupPanel.$setPopupPosition(Document.java:1287)

 com.google.gwt.user.client.ui.PopupPanel.setPopupPosition(PopupPanel.java:884)
 com.google.gwt.user.client.ui.PopupPanel.PopupPanel(PopupPanel.java:453) 

 com.typeracer.commons.client.widgets.EnhancedPopup.EnhancedPopup(EnhancedPopup.java:32)

 com.typeracer.commons.client.widgets.PopupWithIcon.PopupWithIcon(PopupWithFocusableTextBox.java:28)
  

 com.typeracer.main.client.controller.TyperacerUncaughtExceptionHandler$1.execute(TyperacerUncaughtExceptionHandler.java:55)
  

 com.google.gwt.core.client.impl.SchedulerImpl.runScheduledTasks(SchedulerImpl.java:50)
  
 etc... :-)


 instead of the current state of affairs that looks like this:

 lineNumber: 3190 columnNumber: 15354: a is null; (TypeError) fileName:  
 http://localhost:8088/9C4DC2D905BEA407601C92C56B43E3B8.cache.html 
 stack: @
 http://localhost:8088/9C4DC2D905BEA407601C92C56B43E3B8.cache.html:2422 
 Rub@http://localhost:8088/9C4DC2D905BEA407601C92C56B43E3B8.cache.html:2423
  
 dSb@http://localhost:8088/9C4DC2D905BEA407601C92C56B43E3B8.cache.html:3190
  
 tA@http://localhost:8088/9C4DC2D905BEA407601C92C56B43E3B8.cache.html:2810 
 Xmb@http://localhost:8088/9C4DC2D905BEA407601C92C56B43E3B8.cache.html:2289
  
 etc... :-(


 I am asking the community to support me in finishing this effort and 
 integrating my patch into GWT.  Please take a look and what I've done, and 
 consider making a donation:

 http://igg.me/at/gwt-stack-traces/x/3494291

 I am an indie developer and I just need some funding to continue this 
 work.  I'm looking for both grassroots and corporate sponsorship for my 
 quest of improving GWT's error reporting and debugging support.

 I've written a detailed white paper ( http://goo.gl/YGsrQ ) that 
 describes how my solution works and why it is necessary.  I welcome your 
 feedback!

 Thanks!
 Alex


-- 
http://groups.google.com/group/Google-Web-Toolkit-Contributors
--- 
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.
For more options, visit https://groups.google.com/groups/opt_out.


Re: [gwt-contrib] Initial support for @GwtCreate (code-gen methods)

2013-08-19 Thread Brian Slesinsky
Interesting. I like the idea of replacing class parameters with something
else. I'm not sure we need to sweep the implementation under the rug.
Particularly in fancier scenarios, it might be easier to work with it
explicitly.

Suppose we have:

/** Encapsulates a GWT create call. */
interface CreatorT {
  Class? getClassLiteral();
  ListObject getArgs();
  T get();
}

public class GWT {
  ...

   /** Performs a GWT.create() call an encapsulates the result. */
   final T CreatorT creator(Class? classLiteral, Object... args);
}

Then you can write code that takes a Creator:

MyService s = createService(GWT.creator(MyService.class), arg);

static S extends FooService S createService(CreatorS creator, String
arg) {
   S s = creator.get();
   // do some initialization involving arg.
   return s;
}

This is how you write it without any compiler magic. But we would also
support using a bare class:

MyService s = createService(MyService.class, arg);

static S extends FooService S createService(@Creator final ClassS
theClass, String arg) {
   S s = GWT.create(theClass);
   // do some initialization involving arg.
   return s;
}

The compiler rewrites any Class arg marked as @Creator to actually take a
Creator, inserts the GWT.creator() call at the call site, and replaces the
GWT.create() call with a creator.get() call in the API. So we have compiler
magic to make the API look pretty for simple cases, but it's not strictly
necessary since you could write the same thing yourself (at the cost of
some verbosity).

(I bundled the arguments along with the class since that seemed like the
most conservative approach. I'm not sure what happens if you have
compile-time arguments coming from the different places than the class
itself.)

- Brian




On Fri, Aug 16, 2013 at 2:22 AM, Andrés Testi andres.a.te...@gmail.comwrote:

 I've been working on a prototype inspired by Ray Cromwell's proposal for
 @GwtCreate parameters, borrowing some ideas from Scala implicit macros. I
 apologize for not to post this in the Possible GWT.create() Improvements
 thread, but this message is too long to be only a comment.
 You can check my patch at https://gwt-review.googlesource.com/4110. This
 prototype has passed many JUnit tests cases and works fine (only fails
 JEnumTypeTest after my last pull, I don't know why). Devmode also works.
 This proposal differs from Ray's original idea in that @GwtCreate is a
 parameter annotation instead of a method annotation. Later I will justify
 this decision.
 This new proposal consists on rewriting methods adding a trailing implicit
 parameter of type GwtCreateFactory for each parameter annotated with
 @GwtCreate. GwtCreateFactory is a hidden interface used by the compiler:

   interface GwtCreateFactory {
 T T create();
   }

 When the compiler finds a code-gen method like

   Foo createFoo(@GwtCreate final Class? extends Foo fooType) {
 return GWT.create(fooType);
   }

 it is rewritten as

   Foo createFoo(final Class? extends Foo type, GwtCreateFactory
 fooType$factory) {
 return fooType$factory.create();
   }

 IMPORTANT:
  The @GwtCreate parameter requires to be final.
  This proposal doesn't require constant evaluation expression. The
 final modifier is required to disable non reproductible side effects.

 At method call site, an invocation like

   Foo foo = createFoo(SubFoo.class);

 is rewritten as

   class SubFoo$GwtCreateFactory implements GwtCreateFactory {
 @Override public T T create() {
   return GWT.create(SubFoo.class);
 }
   }

   Foo foo = createFoo(SubFoo.class, new SubFoo$GwtCreateFactory());

 Just like Scala implicit parameters, @GwtCreate can fight against type
 erasure and subtyping

   interface FooCreator {

 T extends Foo T create(@GwtCreate ClassT fooType);
   }

   class FooCreatorImpl extends FooCreator {

 T extends Foo T create(@GwtCreate final ClassT fooType) {
   return GWT.create(fooType);
 }
   }

 code-gen constructors are supported too

   class CreateByConstructorT extends Foo {

 final T instance;

 public  CreateByConstructor(@GwtCreate final ClassT fooType) {
   instance = GWT.create(fooType);
 }
   }

 Again, as in Scala implicit parameters, nesting is allowed

   class Foo {}
   class SubFoo extends Foo {}

   F extends Foo F createFoo(@GwtCreate final ClassF fooType) {
 return GWT.create(fooType);
   }

   S extends SubFoo S createSubFoo(@GwtCreate final ClassS subFooType) {
 return createFoo(subFooType);
   }

 The decision to locate @GwtCreate on parameters was taken to support mixed
 code-gen methods

   F extends Foo, B extends Bar
   void fooBarCreator(@GwtCreate final ClassF fooType, @GwtCreate final
 ClassB barType) {
 foo = GWT.create(fooType);
 bar = GWT.create(barType);
   }

 Note that the @GwtCreate class parameters aren't replaced by
 GwtCreateFactory as was originally suggested by Ray Cromwell. This provides
 access to actual parameters.

   ClassT storedType;
   T