CellTable - TextColumn.getValue (null) - another strange problem
Hello, after setting an UncaughtExceptionHandler with GWT.setUncaughtExceptionHandler() for the first time, I see a new NullPointerException that I did not see before and which did not cause any visible problems. The exception occurrs, because the getValue methods of the table's columns are called with a null value, e. g.: -- -- TextColumnGame col_Start = new TextColumnGame() { @Override public String getValue(Game obj) { return (obj.str_Start); // exception, obj is null! } }; -- -- As said above, there seem to be no consequences. The table's contents seem to be ok. Also, when I check for null values and return ??? instead, the ??? will not appear in the table. Nevertheless, I do not want to ignore it. Since the getValue methods are called by the GWT framework, I believe that there must be a problem with my own code (rather than a bug in GWT). It onlly happens, when I navigate from the second page back to the first one, so I assume a problem within the onRangeChange callback method. However, I have outsourced most of the CellTable handling into a seperate class CellListController (see below). So if there was a problem with my code, it would most likely be located there. But I really don't know where to start, because I cannot imagine any reason why the framework should call my methods with null values? Any ideas? Thank you Magnus -- -- public class CellListControllerT { public CellListCarrier crr = null; public CellTableT tbl = null; public AsyncDataProviderT pvd = null; public Pager pgr = null; // Construction public CellListController () { super (); } public CellListController (CellListCarrier crr) { setCarrier (crr); } // Component Creation public void createAll (Pager pgr,int pageSize) { createTable(); setPageSize (pageSize); createProvider(); setPager(pgr); } public void createTable () { CellTableT t = new CellTableT (); setTable (t); } public void createProvider () { pvd = new AsyncDataProviderT() { @Override protected void onRangeChanged(HasDataT display) { Range r = display.getVisibleRange(); int start = r.getStart() + 1; int end = start + r.getLength() - 1; onRangeChange (start,end); } }; } // Settings public void setCarrier (CellListCarrier crr) { this.crr = crr; } public void setTable (CellTableT tbl) { this.tbl = tbl; tbl.setPageStart (0); } public void setPager (Pager pgr) { this.pgr = pgr; pgr.setDisplay(tbl); pgr.setRangeLimited(true); } public void setPageSize (int pageSize) { tbl.setPageSize (pageSize); } public int getStart () { Range r = pgr.getDisplay().getVisibleRange(); int start = r.getStart(); return (start); } // Data public void load () { pvd.addDataDisplay(tbl); } public void reload () { Range r = tbl.getVisibleRange(); reload (r); } public void reload (Range r) { tbl.setVisibleRangeAndClearData (r,true); if (!isLoaded ()) load (); } public void reloadLast () { int n = tbl.getRowCount(); Range r = getLastRange (n); reload (r); } public void reloadFirst () { int p = tbl.getPageSize(); Range r = new Range (0,p); reload (r); } public Range getLastRange (int cnt) { int p = tbl.getPageSize(); int s = cnt - p; if (s 0) s = 0; Range r = new Range (s,p); return (r); } public void scheduleReload () { Scheduler.get().scheduleDeferred ( new ScheduledCommand() { @Override public void execute() { reloadFirst (); } } ); } // Callback Methods public void onRangeChange (int i0,int i1) { awi.log(CellListController.onRangeChange( + i0 + , + i1 + )); crr.loadRecordList (i0,i1); crr.loadRecordCount (); } public void updateRowData (ListT lst) { if (lst == null) return; int start = getStart(); pvd.updateRowData (start,lst); } public void updateRowCount (int cnt) { pvd.updateRowCount (cnt,true); } private boolean isLoaded () { SetHasDataT s = pvd.getDataDisplays(); if (s == null) return (false); if (s.isEmpty()) return (false); return (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: Anchor does not work in IE - very strange problem!
Hello, the advice to use an UncaughtExceptionHandler was very helpful for solving this acutal problem. But it also has a disadvantage: It brings to light new problems! :-) But because it would be offtopic here I have started another thread: CellTable - TextColumn.getValue (null) - another strange problemhttps://groups.google.com/forum/#!topic/google-web-toolkit/0QrMpt6Ttrg Magnus -- 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.
ClassCastException when using Code Splitting
I am working on a large application (greater than 500K lines of code) written using GWT. I am working on new screen for the application, and have come across a problem with the code splitting as follows: - The code works successfully when run in Development Mode. - The code fails with a ClassCastException (stack trace below) when the code is compiled to javascript and run within the browser. - If I create the class directly (not using GWT.runAsync()), the problem does not occur. - I have attempted to create a simple testcase to demonstrate the problem, but when I do this the problem no longer occurs. - The ClassCastException occurs within a custom widget that was developed for this application, and is used in hundreds of other places in the application without any similar problems. - Due to the size of the application, code splitting is used extensively. A stack trace of the error is as follows (compiled with -style DETAILED) java.lang.ClassCastException: at Unknown.java_lang_ClassCastException_ClassCastException__V(Unknown Source) at Unknown.com_google_gwt_lang_Cast_dynamicCast__Ljava_lang_Object_2ILjava_lang_Object_2(Unknown Source) at Unknown.au_edu_wa_eddept_irt_client_ui_DetScrollableGrid_$calculateDimensions__Lau_edu_wa_eddept_irt_client_ui_DetScrollableGrid_2V(Unknown Source) at Unknown.au_edu_wa_eddept_irt_client_ui_DetScrollableGrid_$refreshData__Lau_edu_wa_eddept_irt_client_ui_DetScrollableGrid_2V(Unknown Source) at Unknown.au_edu_wa_eddept_irt_client_ui_SortableDetScrollableGrid_$sort__Lau_edu_wa_eddept_irt_client_ui_SortableDetScrollableGrid_2V(Unknown Source) at Unknown.au_edu_wa_eddept_irt_client_ui_SortableDetScrollableGrid_$setDisplayData__Lau_edu_wa_eddept_irt_client_ui_SortableDetScrollableGrid_2Ljava_util_List_2V(Unknown Source) at Unknown.au_edu_wa_eddept_irt_client_panel_search_StudentSearchDialog$AsyncCallbackDoStudentSearch_$onSuccess__Lau_edu_wa_eddept_irt_client_panel_search_StudentSearchDialog$AsyncCallbackDoStudentSearch_2Lau_edu_wa_eddept_irt_client_rpc_Dispatch_2V(Unknown Source) at Unknown.au_edu_wa_eddept_irt_client_panel_search_StudentSearchDialog$AsyncCallbackDoStudentSearch_onSuccess__Ljava_lang_Object_2V(Unknown Source) at Unknown.au_edu_wa_eddept_irt_client_rpc_SecuredAsyncCallback_$onSuccess__Lau_edu_wa_eddept_irt_client_rpc_SecuredAsyncCallback_2Lau_edu_wa_eddept_irt_client_rpc_Dispatch_2V(Unknown Source) at Unknown.au_edu_wa_eddept_irt_client_rpc_SecuredAsyncCallback_onSuccess__Ljava_lang_Object_2V(Unknown Source) at Unknown.com_google_gwt_user_client_rpc_impl_RequestCallbackAdapter_$onResponseReceived__Lcom_google_gwt_user_client_rpc_impl_RequestCallbackAdapter_2Lcom_google_gwt_http_client_Request_2Lcom_google_gwt_http_client_Response_2V(Unknown Source) at Unknown.com_google_gwt_http_client_Request_$fireOnResponseReceived__Lcom_google_gwt_http_client_Request_2Lcom_google_gwt_http_client_RequestCallback_2V(Unknown Source) at Unknown.com_google_gwt_http_client_RequestBuilder$1_onReadyStateChange__Lcom_google_gwt_xhr_client_XMLHttpRequest_2V(Unknown Source) at Unknown.this$static.onreadystatechange(Unknown Source) at Unknown.com_google_gwt_core_client_impl_Impl_apply__Ljava_lang_Object_2Ljava_lang_Object_2Ljava_lang_Object_2Ljava_lang_Object_2(Unknown Source) at Unknown.com_google_gwt_core_client_impl_Impl_entry0__Ljava_lang_Object_2Ljava_lang_Object_2Ljava_lang_Object_2Ljava_lang_Object_2(Unknown Source) at Unknown.anonymous(Unknown Source) at Unknown.anonymous(Unknown Source) Any suggestions on how I should proceed to find a resolution for this problem? -- 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: Simple UiBinder question about ui:image resource=....
Here is kind-a workaraound that worked for me: in cell widget declarative ui add following: ui:UiBinder ... ... ui:with field=loadingIcon type=com.google.gwt.safehtml.shared.SafeHtml/ ... div ui:safehtml from='{loadingIcon}'/ /div /ui:UiBinder = In the code then: = ... interface MyUiRenderer extends UiRenderer { ... void render(SafeHtmlBuilder sb, ... ,SafeHtml loadingIcon); ... } @Override public void render(Context context, ..., SafeHtmlBuilder sb) { if (value == null) { return; } ImageResourceRenderer imageRenderer = new ImageResourceRenderer(); renderer.render(sb, ... ,imageRenderer.render(images.checkOk())); } = On Monday, February 8, 2010 1:49:22 AM UTC-8, cpm wrote: I'm another one finding that the resource={res.myImage} just won't work. My findings are that I can have just ui:image field=myImage / in the file along with an @sprite .logo { gwt-image: myImage; } and as long as I have an image file called myImage.png in the same package/ directory it'll work. You don't seem to need a resource= or src= on the ui:image tag at all - the field attribute is the name of the image it'll look for unless you add a src attribute. This would explain why emerix was getting an No com.google.gwt.resources.client.ClientBundle $Source annotation and no resources found with default extensions error with: ui:image field='logo' resource='../resources/my_logo.png'/ui:image It's just ignoring the resource attribute and looking for a logo.png file instead. The src attribute seems to work like the @Source annotation you would put in a ResourceBundle, such as: @Source(myLogo.png) ImageResource logo(); I would expect this to be the same as: ui:image field=logo src=myLogo.png / The same seems to apply then when you try to use ui:image field=logo resource={res.myLogo} / The resource attribute is ignored and its still looking for a logo.png in the current directory and flagging an error that no Source annotation has been given. What you need to do to get the resource atrribute to work, I've no idea, but it would be a neater solution if it did work. but I got the error : On Jan 18, 5:12 pm, emerix rafa...@gmail.com wrote: Hi, I'm also still looking for some documentation on this ui:image tag. (and the other tags also : ui:data, ui:attribute, ...) Do anyone know how to put absolute path in the src attribute ? ui:image field=myImage src=com/mycompany/path/to/myImage.png/ ui:image doesn't work :/ Using relative path works but I have to change it every time I copy the code to another widget :/ ++emerix On Jan 17, 6:05 pm, Nico nicolas.antonia...@gmail.com wrote: Thanks emerix for the src= tips. It helped me a lot. I have the same problem when I use resource={res.myImage} ... I have declared the ui:with field .. targeting the right Resource class but I always have an error that says : No com.google.gwt.resources.client.ClientBundle$Source annotation and no resources found with default extensions However, I don't know where to find doc about ui:image tag. Where did you find that there was a src or a resource attribute ? directly in the source code ? Thanks a lot. Nicolas On 12 jan, 17:24, Chris Ramsdale cramsd...@google.com wrote: Do you have the following in your ui.xml file: ui:with field='res' type='com.google.gwt.sandbox.client.Resources'/ ...where 'com.google.gwt.sandbox.client.Resources' is replaced with your resources class. On Thu, Jan 7, 2010 at 5:24 AM, emerix rafa...@gmail.com wrote: Hello, I tried using relative paths for the resource property : ui:image field='logo' resource='../resources/my_logo.png'/ui:image but I got the error : No com.google.gwt.resources.client.ClientBundle $Source annotation and no resources found with default extensions if I use the src property, everything is ok : ui:image field='logo' src='../resources/my_logo.png'/ui:image hope someone find this useful :) However what I really wanted is using your 2nd solution : ui:image field='logo' resource='{res.logo}'/ui:image but when I load the page I also get the error : No com.google.gwt.resources.client.ClientBundle$Source annotation and no resources found with default extensions am I missing something ? thanks a lot :) ++emerix On Jan 4, 11:15 pm, Chris Ramsdale cramsd...@google.com wrote: One option would be to use relative paths within the ui:image element. For example: ui:image field='logo' resource='../resources/my_logo.png'/ui:image Another option would be to use ui:with, get a hold of the ClientBundle, and reference an image within it. public interface Resources extends ClientBundle {
Requestfactory, Embedded objects and .with
Hi chaps, Have a problem understanding one thing regarding .with In the following examplehttp://code.google.com/p/gwtinaction2/source/browse/trunk/gwtia-ch08-requestfactory/src/com/manning/gwtia/ch08/v1/client/TestPanel.java?spec=svn216r=216 , http://code.google.com/p/gwtinaction2/source/browse/trunk/gwtia-ch08-requestfactory/src/com/manning/gwtia/ch08/v1/client/TestPanel.java?spec=svn216r=216 you will find a part located in the fetch method. factory.createContactRequest() .find(((Long) Long.parseLong(txtInput.getText( * .with(phones)* .fire(rec); I believe '.with' is used to grab datas from an embedded object within a classhttp://code.google.com/p/gwtinaction2/source/browse/trunk/gwtia-ch08-requestfactory/src/com/manning/gwtia/ch08/v1/server/Contact.java?r=216. ( Contact,Phone) because RequestFactory won't get it if you don't tell him to do so. I believe then it could be Phone but why *phones* ? Can someone point me in the right direction ? Regards Pierre -- 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: Requestfactory, Embedded objects and .with
On Wednesday, June 26, 2013 9:03:47 AM UTC+2, aurelie...@gmail.com wrote: Hi chaps, Have a problem understanding one thing regarding .with In the following examplehttp://code.google.com/p/gwtinaction2/source/browse/trunk/gwtia-ch08-requestfactory/src/com/manning/gwtia/ch08/v1/client/TestPanel.java?spec=svn216r=216 , http://code.google.com/p/gwtinaction2/source/browse/trunk/gwtia-ch08-requestfactory/src/com/manning/gwtia/ch08/v1/client/TestPanel.java?spec=svn216r=216 you will find a part located in the fetch method. factory.createContactRequest() .find(((Long) Long.parseLong(txtInput.getText( * .with(phones)* .fire(rec); I believe '.with' is used to grab datas from an embedded object within a classhttp://code.google.com/p/gwtinaction2/source/browse/trunk/gwtia-ch08-requestfactory/src/com/manning/gwtia/ch08/v1/server/Contact.java?r=216. ( Contact,Phone) because RequestFactory won't get it if you don't tell him to do so. I believe then it could be Phone but why *phones* ? Can someone point me in the right direction ? phones is the name of the property, corresponding to a getPhones() getter (note: on the proxy, not the domain object). See http://www.gwtproject.org/doc/latest/DevGuideRequestFactory.html#relationships -- 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: ClassCastException when using Code Splitting
On Wednesday, June 26, 2013 7:54:13 AM UTC+2, RobV wrote: I am working on a large application (greater than 500K lines of code) written using GWT. I am working on new screen for the application, and have come across a problem with the code splitting as follows: - The code works successfully when run in Development Mode. - The code fails with a ClassCastException (stack trace below) when the code is compiled to javascript and run within the browser. - If I create the class directly (not using GWT.runAsync()), the problem does not occur. - I have attempted to create a simple testcase to demonstrate the problem, but when I do this the problem no longer occurs. - The ClassCastException occurs within a custom widget that was developed for this application, and is used in hundreds of other places in the application without any similar problems. - Due to the size of the application, code splitting is used extensively. A stack trace of the error is as follows (compiled with -style DETAILED) java.lang.ClassCastException: at Unknown.java_lang_ClassCastException_ClassCastException__V(Unknown Source) at Unknown.com_google_gwt_lang_Cast_dynamicCast__Ljava_lang_Object_2ILjava_lang_Object_2(Unknown Source) at Unknown.au_edu_wa_eddept_irt_client_ui_DetScrollableGrid_$calculateDimensions__Lau_edu_wa_eddept_irt_client_ui_DetScrollableGrid_2V(Unknown Source) at Unknown.au_edu_wa_eddept_irt_client_ui_DetScrollableGrid_$refreshData__Lau_edu_wa_eddept_irt_client_ui_DetScrollableGrid_2V(Unknown Source) at Unknown.au_edu_wa_eddept_irt_client_ui_SortableDetScrollableGrid_$sort__Lau_edu_wa_eddept_irt_client_ui_SortableDetScrollableGrid_2V(Unknown Source) at Unknown.au_edu_wa_eddept_irt_client_ui_SortableDetScrollableGrid_$setDisplayData__Lau_edu_wa_eddept_irt_client_ui_SortableDetScrollableGrid_2Ljava_util_List_2V(Unknown Source) at Unknown.au_edu_wa_eddept_irt_client_panel_search_StudentSearchDialog$AsyncCallbackDoStudentSearch_$onSuccess__Lau_edu_wa_eddept_irt_client_panel_search_StudentSearchDialog$AsyncCallbackDoStudentSearch_2Lau_edu_wa_eddept_irt_client_rpc_Dispatch_2V(Unknown Source) at Unknown.au_edu_wa_eddept_irt_client_panel_search_StudentSearchDialog$AsyncCallbackDoStudentSearch_onSuccess__Ljava_lang_Object_2V(Unknown Source) at Unknown.au_edu_wa_eddept_irt_client_rpc_SecuredAsyncCallback_$onSuccess__Lau_edu_wa_eddept_irt_client_rpc_SecuredAsyncCallback_2Lau_edu_wa_eddept_irt_client_rpc_Dispatch_2V(Unknown Source) at Unknown.au_edu_wa_eddept_irt_client_rpc_SecuredAsyncCallback_onSuccess__Ljava_lang_Object_2V(Unknown Source) at Unknown.com_google_gwt_user_client_rpc_impl_RequestCallbackAdapter_$onResponseReceived__Lcom_google_gwt_user_client_rpc_impl_RequestCallbackAdapter_2Lcom_google_gwt_http_client_Request_2Lcom_google_gwt_http_client_Response_2V(Unknown Source) at Unknown.com_google_gwt_http_client_Request_$fireOnResponseReceived__Lcom_google_gwt_http_client_Request_2Lcom_google_gwt_http_client_RequestCallback_2V(Unknown Source) at Unknown.com_google_gwt_http_client_RequestBuilder$1_onReadyStateChange__Lcom_google_gwt_xhr_client_XMLHttpRequest_2V(Unknown Source) at Unknown.this$static.onreadystatechange(Unknown Source) at Unknown.com_google_gwt_core_client_impl_Impl_apply__Ljava_lang_Object_2Ljava_lang_Object_2Ljava_lang_Object_2Ljava_lang_Object_2(Unknown Source) at Unknown.com_google_gwt_core_client_impl_Impl_entry0__Ljava_lang_Object_2Ljava_lang_Object_2Ljava_lang_Object_2Ljava_lang_Object_2(Unknown Source) at Unknown.anonymous(Unknown Source) at Unknown.anonymous(Unknown Source) Any suggestions on how I should proceed to find a resolution for this problem? This is a known issue: https://code.google.com/p/google-web-toolkit/issues/detail?id=7392q=ClassCastException%20runAsync Fixed in 'master' if you want to give it a try. -- 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: CellTable - TextColumn.getValue (null) - another strange problem
Looks like https://code.google.com/p/google-web-toolkit/issues/detail?id=7030 On Wednesday, June 26, 2013 8:23:13 AM UTC+2, Magnus wrote: Hello, after setting an UncaughtExceptionHandler with GWT.setUncaughtExceptionHandler() for the first time, I see a new NullPointerException that I did not see before and which did not cause any visible problems. The exception occurrs, because the getValue methods of the table's columns are called with a null value, e. g.: -- -- TextColumnGame col_Start = new TextColumnGame() { @Override public String getValue(Game obj) { return (obj.str_Start); // exception, obj is null! } }; -- -- As said above, there seem to be no consequences. The table's contents seem to be ok. Also, when I check for null values and return ??? instead, the ??? will not appear in the table. Nevertheless, I do not want to ignore it. Since the getValue methods are called by the GWT framework, I believe that there must be a problem with my own code (rather than a bug in GWT). It onlly happens, when I navigate from the second page back to the first one, so I assume a problem within the onRangeChange callback method. However, I have outsourced most of the CellTable handling into a seperate class CellListController (see below). So if there was a problem with my code, it would most likely be located there. But I really don't know where to start, because I cannot imagine any reason why the framework should call my methods with null values? Any ideas? Thank you Magnus -- -- public class CellListControllerT { public CellListCarrier crr = null; public CellTableT tbl = null; public AsyncDataProviderT pvd = null; public Pager pgr = null; // Construction public CellListController () { super (); } public CellListController (CellListCarrier crr) { setCarrier (crr); } // Component Creation public void createAll (Pager pgr,int pageSize) { createTable(); setPageSize (pageSize); createProvider(); setPager(pgr); } public void createTable () { CellTableT t = new CellTableT (); setTable (t); } public void createProvider () { pvd = new AsyncDataProviderT() { @Override protected void onRangeChanged(HasDataT display) { Range r = display.getVisibleRange(); int start = r.getStart() + 1; int end = start + r.getLength() - 1; onRangeChange (start,end); } }; } // Settings public void setCarrier (CellListCarrier crr) { this.crr = crr; } public void setTable (CellTableT tbl) { this.tbl = tbl; tbl.setPageStart (0); } public void setPager (Pager pgr) { this.pgr = pgr; pgr.setDisplay(tbl); pgr.setRangeLimited(true); } public void setPageSize (int pageSize) { tbl.setPageSize (pageSize); } public int getStart () { Range r = pgr.getDisplay().getVisibleRange(); int start = r.getStart(); return (start); } // Data public void load () { pvd.addDataDisplay(tbl); } public void reload () { Range r = tbl.getVisibleRange(); reload (r); } public void reload (Range r) { tbl.setVisibleRangeAndClearData (r,true); if (!isLoaded ()) load (); } public void reloadLast () { int n = tbl.getRowCount(); Range r = getLastRange (n); reload (r); } public void reloadFirst () { int p = tbl.getPageSize(); Range r = new Range (0,p); reload (r); } public Range getLastRange (int cnt) { int p = tbl.getPageSize(); int s = cnt - p; if (s 0) s = 0; Range r = new Range (s,p); return (r); } public void scheduleReload () { Scheduler.get().scheduleDeferred ( new ScheduledCommand() { @Override public void execute() { reloadFirst (); } } ); } // Callback Methods public void onRangeChange (int i0,int i1) { awi.log(CellListController.onRangeChange( + i0 + , + i1 + )); crr.loadRecordList (i0,i1); crr.loadRecordCount (); } public void updateRowData (ListT lst) { if (lst == null) return; int start = getStart(); pvd.updateRowData (start,lst); } public void updateRowCount (int cnt) { pvd.updateRowCount (cnt,true); } private boolean isLoaded () { SetHasDataT s = pvd.getDataDisplays(); if (s == null) return (false); if (s.isEmpty()) return (false); return (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
Re: ClassCastException when using Code Splitting
If you can not use master, try to chain your constructors so that they end up in the same split point to workaround the issue, e.g. Person() { this(null); } Person(String name) { this(name, null); } Person(String name, Integer age) { ... } -- 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: Requestfactory, Embedded objects and .with
Oh... thanks Thomas for the link and your answer which make sense. Sorry about this silly question, was looking into domain object Le mercredi 26 juin 2013 10:04:22 UTC+2, Thomas Broyer a écrit : phones is the name of the property, corresponding to a getPhones() getter (note: on the proxy, not the domain object). See http://www.gwtproject.org/doc/latest/DevGuideRequestFactory.html#relationships -- 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.
OOP question for remote logging
Hi, I am using java.util.Logger for remote logging. The Logger is called by the client side objects. Other than instantiate Logger for every class on the client side, is there any way to put it in a separate class? (OOP way). Thanks -- 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: CellTable - TextColumn.getValue (null) - another strange problem
Am Mittwoch, 26. Juni 2013 10:10:17 UTC+2 schrieb Thomas Broyer: Looks like https://code.google.com/p/google-web-toolkit/issues/detail?id=7030 Thank you! This can cause a call to the Column's getValue(T object) with a null value, when the HasDataPresenter.setVisibleRange is called and null values are inserted at the beginning of the (pending) rowData collection and the focus in on one of the cells within those rows. and null values are inserted at the beginning of the (pending) rowData collection: I am not sure how to interpret this: The only time when I (my code) insert values into the list is within the onRangeChange method. Then, I make an aynchroneous server call and when it returns, I insert the data like this: -- -- Pager pgr = getPager (); Range r = pgr.getDisplay().getVisibleRange(); int start = r.getStart(); pvrovider.updateRowData (start,lst); // lst contains the data -- -- I am really sure that there are no null values within this data... The issue you pointed to was posted in 2011. Is it still unsolved in GWT? Magnus -- 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.
Is there a way to create cross-platform scripting in GWT?
Hi. I would like to make a web game with GWT, and have some of the code scripted rather then compiled, to allow dynamic updates/tweaking without rebuilding and re-deploying. Now the hard part is, what scripting language could I use to execute the scripts that would both run within the JVM and in JavaScript on the browser? While JavaScript would seem like an obvious answer, I fear it would not do, due to the fact that is doesn't support longs natively (which I use a lot as IDs ...). Maybe there is an easy work-around, I haven't actually dived into GWT, yet so I would not know about it. I do know that GWT can compile Java code to work correctly as JavaScript even with long, but I don't know if the same solution can be used within hand-made scripts. Regards, Sebastien -- 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.
RequestFactory validate entity
Hi! I've a question on bean validation using RequestFactory. Here's my scenario. There's an application based on Spring Framework with a service layer. A WebApplicationContext is initialized and the services can be used by firing RequestContext on client side. Let's suppose I wanna save an entity. The context's save method get fired, a service method is invoked. The entity on the server side is valid. But in the service method another entity must be edited. That entity manipulation could raise ConstraintViolationException. When this happens, on the client side in the Receiver the onFailure method get called and I can't access that ConstraintViolation. Is there a way/workaround to handle in the Receiver another entity's ConstraintViolation? Thanks in advance! Regards, Miklós -- 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: Is there a way to create cross-platform scripting in GWT?
wrt numbers in JavaScript... All numbers in JavaScript are stored as 64-bit (8-bytes) base 10, floating point numbers. This will probably provide enough space for your IDs. On Wednesday, 26 June 2013 12:06:42 UTC+1, Sebastien Diot wrote: Hi. I would like to make a web game with GWT, and have some of the code scripted rather then compiled, to allow dynamic updates/tweaking without rebuilding and re-deploying. Now the hard part is, what scripting language could I use to execute the scripts that would both run within the JVM and in JavaScript on the browser? While JavaScript would seem like an obvious answer, I fear it would not do, due to the fact that is doesn't support longs natively (which I use a lot as IDs ...). Maybe there is an easy work-around, I haven't actually dived into GWT, yet so I would not know about it. I do know that GWT can compile Java code to work correctly as JavaScript even with long, but I don't know if the same solution can be used within hand-made scripts. Regards, Sebastien -- 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: Is there a way to create cross-platform scripting in GWT?
On Wednesday, June 26, 2013 4:55:19 PM UTC+2, Carl wrote: wrt numbers in JavaScript... All numbers in JavaScript are stored as 64-bit (8-bytes) base 10, floating point numbers. This will probably provide enough space for your IDs. This is only true if you assume my IDs start with 0/1, and slowly grow. I also use Java longs to store 64-bit MurmurHash of Strings (class names, ...), which cover the whole bit range of a long. This has the great advantage that it allows things that would otherwise be variable size to then be fixed size when serialized.* * -- 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: Is there a way to create cross-platform scripting in GWT?
Why not use Strings in that use case? On 26 June 2013 16:16, Sebastien Diot skunkifer...@googlemail.com wrote: On Wednesday, June 26, 2013 4:55:19 PM UTC+2, Carl wrote: wrt numbers in JavaScript... All numbers in JavaScript are stored as 64-bit (8-bytes) base 10, floating point numbers. This will probably provide enough space for your IDs. This is only true if you assume my IDs start with 0/1, and slowly grow. I also use Java longs to store 64-bit MurmurHash of Strings (class names, ...), which cover the whole bit range of a long. This has the great advantage that it allows things that would otherwise be variable size to then be fixed size when serialized.* * -- You received this message because you are subscribed to a topic in the Google Groups Google Web Toolkit group. To unsubscribe from this topic, visit https://groups.google.com/d/topic/google-web-toolkit/gC76hol4ZIo/unsubscribe . To unsubscribe from this group and all its topics, 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: Session Listener
Ok, it works! Thanks! My mistake was to think that the sessionCreated event was created when the application started. Shame on me! The sessionCreated is called instead the first time the application interacts with the server. Another wrong assumption by me was that I thought the sessionDestroyed was called when the user closes the web page or navigate to another web site. Wrong! The sessionDestroyed is called after some time of non interaction between the client and the server, no matter if the web page is still open or has been closed. Another time shame on me! I just decided to describe that here to share my discovery. Cheers. On Friday, June 21, 2013 11:35:58 PM UTC+2, Valavanur Man wrote: We resolved the issue by added session listener to web.xml under Web-inf, as described above. We created the build.xml from GWT and referred to the web.xml. target name=war depends=javac, gwtc, libs delete file=${war.name} / war basedir=war destfile=${war.name} webxml=war/WEB-INF/web.xml / jar destfile=${war.name} basedir=war duplicate=preserve / !-- clean up -- delete dir=@dot / /target We use ant to build the war file outside eclipse to build the project. Hope this helps. Thanks, GWTFan On Friday, June 21, 2013 12:40:21 AM UTC-7, Magallo wrote: Hi Valavanur, I know your question is a little outdated, but I have the same necessity and I don't knbow how to do. I mean, I tried in my GWT Explise project, to add a Session Listener as explained by loladi but it seems it doesn't work. Obviously I alse added the listerner section in my web.xml file, but it seems my listener is just ignored and does not execute the code. I tried adding some brerakpoints in the sessionCreated and sessionDestroyed methods, but simply the execution never stops at these points. What am I missing? Thanks. On Monday, June 2, 2008 1:16:11 AM UTC+2, Valavanur Man wrote: I would like to implement Session Listener to log the logins and logouts. Would like to do some housekeeping upon logout. How do I register the class implementing SessionListener in GWT. How do I modify the WEB.xml so that it works both in Hosted mode and as well as when I deploy the war file. Can you provide some instructions/help. Thanks, GWT Fan -- 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: Can't deploy my project anymore
How can be possible that nobody of the Eclipse/GWT Team has nothing to say about?! On Friday, June 21, 2013 5:17:08 PM UTC+2, Jeff Smith wrote: I did not figure out a solution (I reverted back to an older version of my project with get 2.5). Perhaps you should create a brand new get 2.51 project and then just copy/paste your java source code files into this new project. Good luck. Jeff -- 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.
GWT plugin support for Eclipse Kepler (4.3)
I checked the issue tracker for GWT and the google-plugin-for-eclipse and I didn't see any open issues for Kepler (4.3) support. Is this something Google is already working on or should I open an issue on this? (and if so, would that issue be against GWT or the plugin project)? Thanks, -James -- 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.
gwt-maven-archetype modular-webapp giving 404 Error
I have just used the gwt-maven-archetypes to create a modular-webapp. When i followed the steps to run the application. Everything seems to be successfully running but the page throws a 404 error on http://localhost:8080 when launched. I have not changed anything from the archetypes output. Appreciate your help ! -- 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-maven-archetype modular-webapp giving 404 Error
On Wednesday, June 26, 2013 11:14:53 PM UTC+2, Kathiravan Tamilvanan wrote: I have just used the gwt-maven-archetypes to create a modular-webapp. When i followed the steps to run the application. Everything seems to be successfully running but the page throws a 404 error on http://localhost:8080 when launched. I have not changed anything from the archetypes output. Appreciate your help ! What parameters did you use when generating the archetype? (groupId, archetypeId, package, module name, short module name) As an alternative, zip your project and share it somewhere (Google Drive, DropBox, or maybe just an attachment here) Also, what commands do you use to run it? Do they appear to run correctly? Final note: if you want to run in DevMode, the URL should be http://localhost:8080/?gwt.codesvr=127.0.0.1:9997 (you can just click the open in default browser or copy URL to clipboard buttons in the DevMode window that opens when you run the gwt:run goal), but in any case, it shouldn't result in a 404, so that's not the issue there. -- 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 plugin support for Eclipse Kepler (4.3)
On Wednesday, June 26, 2013 10:08:10 PM UTC+2, James Wendel wrote: I checked the issue tracker for GWT and the google-plugin-for-eclipse and I didn't see any open issues for Kepler (4.3) support. Is this something Google is already working on or should I open an issue on this? (and if so, would that issue be against GWT or the plugin project)? The GPE is a really distinct project, and Eclipse support comes from the GPE only; so please use the GPE issue tracker (we close all GPE-related issues in the GWT issue tracker; though we generally move them to the GPE issue tracker) You could also ask on the GPE group: https://groups.google.com/d/forum/google-plugin-eclipse That said, I believe this is planned and should come soon (in the coming weeks or during summer) -- 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: RequestFactory validate entity
On Wednesday, June 26, 2013 4:09:55 PM UTC+2, Miklós Szabó wrote: Hi! I've a question on bean validation using RequestFactory. Here's my scenario. There's an application based on Spring Framework with a service layer. A WebApplicationContext is initialized and the services can be used by firing RequestContext on client side. Let's suppose I wanna save an entity. The context's save method get fired, a service method is invoked. The entity on the server side is valid. But in the service method another entity must be edited. That entity manipulation could raise ConstraintViolationException. When this happens, on the client side in the Receiver the onFailure method get called and I can't access that ConstraintViolation. Is there a way/workaround to handle in the Receiver another entity's ConstraintViolation? onConstraintViolation is only (should only be) about violations on the objects sent from the client, and block calls to service methods. If a service method wants to communicate failure to the client, it has to return a failure code/object (onSuccess). You could use an ExceptionHandler too, but that's a hack: onFailure is about exceptional cases that should theoretically never happen (everything that can be predicted should go through onSuccess, even if it's communicating an error) -- 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: Can't deploy my project anymore
So, I worked on this for a while and basically didn't come up with anything... I think that the context-menu deployment feature is not part of GWT 2.5.1. To get around it, I have a two-step process: I compile my project with the GWT Toolbar Button GWT Compile project option. This compiles the JS in my web app folder. Then I separately set up WAR deployment via the Project Properties Deployment Assembly screen and deploy via standard Eclipse WAR export. This isn't quite as easy as the context-menu deployment, but once it is set up it is pretty fast. Also has the added benefit that if you only change server-side code, you can generate a new WAR very quickly since it doesn't compile the client side every time. Hope this helps! - Jack On Wednesday, June 26, 2013 11:47:01 AM UTC-4, Magallo wrote: How can be possible that nobody of the Eclipse/GWT Team has nothing to say about?! On Friday, June 21, 2013 5:17:08 PM UTC+2, Jeff Smith wrote: I did not figure out a solution (I reverted back to an older version of my project with get 2.5). Perhaps you should create a brand new get 2.51 project and then just copy/paste your java source code files into this new project. Good luck. Jeff -- 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.
[gwt-contrib] Change in gwt[master]: Add FakeSafeHtmlTemplatesMaker
Hello Leeroy Jenkins, I'd like you to reexamine a change. Please visit https://gwt-review.googlesource.com/3581 to look at the new patch set (#2). Change subject: Add FakeSafeHtmlTemplatesMaker .. Add FakeSafeHtmlTemplatesMaker Similar to FakeMessagesMaker and FakeCssMaker, this class allows Java tests to create instances of SafeHtmlTemplates without needing to call GWT.create() JUnitSuite updated accordingly. Change-Id: Ib9a4afc15c0b7210cd9355186b92655ff5c68631 --- R user/src/com/google/gwt/junit/FakeSafeHtmlTemplatesMaker.java 1 file changed, 0 insertions(+), 0 deletions(-) -- To view, visit https://gwt-review.googlesource.com/3581 To unsubscribe, visit https://gwt-review.googlesource.com/settings Gerrit-MessageType: newpatchset Gerrit-Change-Id: Ib9a4afc15c0b7210cd9355186b92655ff5c68631 Gerrit-PatchSet: 2 Gerrit-Project: gwt Gerrit-Branch: master Gerrit-Owner: Jason Heim jasonmh...@google.com Gerrit-Reviewer: Leeroy Jenkins jenk...@gwtproject.org -- 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] Change in gwt[master]: Add FakeSafeHtmlTemplatesMaker
Matthew Dempsky has posted comments on this change. Change subject: Add FakeSafeHtmlTemplatesMaker .. Patch Set 3: This looks right to me, but please squash commit and your previous one together into a single commit (e.g., using git rebase -i), and keep just the Change-Id: Ib9a4afc15c0b7210cd9355186b92655ff5c68631 line in the commit message. -- To view, visit https://gwt-review.googlesource.com/3581 To unsubscribe, visit https://gwt-review.googlesource.com/settings Gerrit-MessageType: comment Gerrit-Change-Id: Ib9a4afc15c0b7210cd9355186b92655ff5c68631 Gerrit-PatchSet: 3 Gerrit-Project: gwt Gerrit-Branch: master Gerrit-Owner: Jason Heim jasonmh...@google.com Gerrit-Reviewer: Leeroy Jenkins jenk...@gwtproject.org Gerrit-Reviewer: Matthew Dempsky mdemp...@google.com Gerrit-HasComments: No -- 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] Change in gwt[master]: Add FakeSafeHtmlTemplatesMaker
Hello Leeroy Jenkins, I'd like you to reexamine a change. Please visit https://gwt-review.googlesource.com/3581 to look at the new patch set (#4). Change subject: Add FakeSafeHtmlTemplatesMaker .. Add FakeSafeHtmlTemplatesMaker Similar to FakeMessagesMaker and FakeCssMaker, this class allows Java tests to create instances of SafeHtmlTemplates without needing to call GWT.create() JUnitSuite updated accordingly. Change-Id: Ib9a4afc15c0b7210cd9355186b92655ff5c68631 --- A user/src/com/google/gwt/junit/FakeSafeHtmlTemplatesMaker.java A user/test/com/google/gwt/junit/FakeSafeHtmlTemplatesMakerTest.java M user/test/com/google/gwt/junit/JUnitSuite.java 3 files changed, 125 insertions(+), 0 deletions(-) -- To view, visit https://gwt-review.googlesource.com/3581 To unsubscribe, visit https://gwt-review.googlesource.com/settings Gerrit-MessageType: newpatchset Gerrit-Change-Id: Ib9a4afc15c0b7210cd9355186b92655ff5c68631 Gerrit-PatchSet: 4 Gerrit-Project: gwt Gerrit-Branch: master Gerrit-Owner: Jason Heim jasonmh...@google.com Gerrit-Reviewer: Leeroy Jenkins jenk...@gwtproject.org Gerrit-Reviewer: Matthew Dempsky mdemp...@google.com -- 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] Change in gwt[master]: Add FakeSafeHtmlTemplatesMaker
Matthew Dempsky has abandoned this change. Change subject: Add FakeSafeHtmlTemplatesMaker .. Abandoned This change is superseded by https://gwt-review.googlesource.com/#/c/3581/ -- To view, visit https://gwt-review.googlesource.com/3580 To unsubscribe, visit https://gwt-review.googlesource.com/settings Gerrit-MessageType: abandon Gerrit-Change-Id: Ic30bd738a9e931d1f207ee3a86eabe52cbee7161 Gerrit-PatchSet: 3 Gerrit-Project: gwt Gerrit-Branch: master Gerrit-Owner: Jason Heim jasonmh...@google.com Gerrit-Reviewer: Leeroy Jenkins jenk...@gwtproject.org Gerrit-Reviewer: Matthew Dempsky mdemp...@google.com -- 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] Change in gwt[master]: Add FakeSafeHtmlTemplatesMaker
Matthew Dempsky has posted comments on this change. Change subject: Add FakeSafeHtmlTemplatesMaker .. Patch Set 4: Oops, disregard the spurious Seem comment. :) -- To view, visit https://gwt-review.googlesource.com/3581 To unsubscribe, visit https://gwt-review.googlesource.com/settings Gerrit-MessageType: comment Gerrit-Change-Id: Ib9a4afc15c0b7210cd9355186b92655ff5c68631 Gerrit-PatchSet: 4 Gerrit-Project: gwt Gerrit-Branch: master Gerrit-Owner: Jason Heim jasonmh...@google.com Gerrit-Reviewer: Leeroy Jenkins jenk...@gwtproject.org Gerrit-Reviewer: Matthew Dempsky mdemp...@google.com Gerrit-HasComments: No -- 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] Change in gwt[master]: Add FakeSafeHtmlTemplatesMaker
Matthew Dempsky has posted comments on this change. Change subject: Add FakeSafeHtmlTemplatesMaker .. Patch Set 4: Code-Review+2 Seem -- To view, visit https://gwt-review.googlesource.com/3581 To unsubscribe, visit https://gwt-review.googlesource.com/settings Gerrit-MessageType: comment Gerrit-Change-Id: Ib9a4afc15c0b7210cd9355186b92655ff5c68631 Gerrit-PatchSet: 4 Gerrit-Project: gwt Gerrit-Branch: master Gerrit-Owner: Jason Heim jasonmh...@google.com Gerrit-Reviewer: Leeroy Jenkins jenk...@gwtproject.org Gerrit-Reviewer: Matthew Dempsky mdemp...@google.com Gerrit-HasComments: No -- 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] Change in gwt[master]: Add FakeSafeHtmlTemplatesMaker
Matthew Dempsky has submitted this change and it was merged. Change subject: Add FakeSafeHtmlTemplatesMaker .. Add FakeSafeHtmlTemplatesMaker Similar to FakeMessagesMaker and FakeCssMaker, this class allows Java tests to create instances of SafeHtmlTemplates without needing to call GWT.create() JUnitSuite updated accordingly. Change-Id: Ib9a4afc15c0b7210cd9355186b92655ff5c68631 --- A user/src/com/google/gwt/junit/FakeSafeHtmlTemplatesMaker.java A user/test/com/google/gwt/junit/FakeSafeHtmlTemplatesMakerTest.java M user/test/com/google/gwt/junit/JUnitSuite.java 3 files changed, 125 insertions(+), 0 deletions(-) Approvals: Matthew Dempsky: Looks good to me, approved Leeroy Jenkins: Verified diff --git a/user/src/com/google/gwt/junit/FakeSafeHtmlTemplatesMaker.java b/user/src/com/google/gwt/junit/FakeSafeHtmlTemplatesMaker.java new file mode 100644 index 000..1e97ff1 --- /dev/null +++ b/user/src/com/google/gwt/junit/FakeSafeHtmlTemplatesMaker.java @@ -0,0 +1,75 @@ +/* + * Copyright 2013 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the License); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.google.gwt.junit; + +import com.google.gwt.safehtml.client.SafeHtmlTemplates; +import com.google.gwt.safehtml.shared.SafeHtml; +import com.google.gwt.safehtml.shared.SafeHtmlUtils; + +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Method; +import java.lang.reflect.Proxy; +import java.util.Arrays; + +/** + * Helper to make a fake implementation of any {@link SafeHtmlTemplates} + * interface via reflection, for use in JUnit tests. (This will not work in + * GWTTestCase.) All calls to the returned object return the method name + * followed by the passed parameters as a list surrounded by []. + * p + * Sample use: + * + * preinterface MyTemplates extends SafeHtmlTemplates { + * #64;Template(span class=\{3}\{0}: a href=\{1}\{2}/a/span) + * SafeHtml messageWithLink(SafeHtml message, String url, String linkText, + * String style); + * } + * + * public void testWithArgs() { + * MyTemplates templates = FakeSafeHtmlTemplatesMaker.create(MyTemplates.class); + * SafeHtml message = SafeHtmlUtils.fromString(message); + * assertEquals(messageWithLink[message, url, link, style], + * templates.messageWithLink(message, url, link, style).asString()); + * } + * /pre + */ +public class FakeSafeHtmlTemplatesMaker implements InvocationHandler { + public static T extends SafeHtmlTemplates T create(ClassT templatesClass) { +return templatesClass.cast(Proxy.newProxyInstance( +FakeSafeHtmlTemplatesMaker.class.getClassLoader(), +new Class[] {templatesClass}, +new FakeSafeHtmlTemplatesMaker())); + } + + public Object invoke(Object proxy, Method method, Object[] args) + throws Throwable { +String name = method.getName(); + +if (args == null || args.length == 0) { + return SafeHtmlUtils.fromString(name); +} + +// SafeHtml does not implement toString(), so use asString() instead. +for (int i = 0; i args.length; i++) { + if (args[i] instanceof SafeHtml) { +args[i] = ((SafeHtml) args[i]).asString(); + } +} + +String result = name + Arrays.asList(args); +return SafeHtmlUtils.fromString(result); + } +} diff --git a/user/test/com/google/gwt/junit/FakeSafeHtmlTemplatesMakerTest.java b/user/test/com/google/gwt/junit/FakeSafeHtmlTemplatesMakerTest.java new file mode 100644 index 000..97583ef --- /dev/null +++ b/user/test/com/google/gwt/junit/FakeSafeHtmlTemplatesMakerTest.java @@ -0,0 +1,49 @@ +/* + * Copyright 2013 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the License); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.google.gwt.junit; + +import com.google.gwt.safehtml.client.SafeHtmlTemplates; +import com.google.gwt.safehtml.shared.SafeHtml; +import com.google.gwt.safehtml.shared.SafeHtmlUtils; + +import junit.framework.TestCase; + +/** + *
[gwt-contrib] Change in gwt[master]: Fix support for Document.{get,set}ScrollLeft() in RTL for sa...
Brian Slesinsky has posted comments on this change. Change subject: Fix support for Document.{get,set}ScrollLeft() in RTL for safari and ie9. .. Patch Set 4: Verified+1 Code-Review+2 Looks like all issues have been resolved. -- To view, visit https://gwt-review.googlesource.com/3420 To unsubscribe, visit https://gwt-review.googlesource.com/settings Gerrit-MessageType: comment Gerrit-Change-Id: I8ce64ab4bbbae02ee7519ed8d24241cdfbc28617 Gerrit-PatchSet: 4 Gerrit-Project: gwt Gerrit-Branch: master Gerrit-Owner: Emmanuel Pellereau emmanu...@google.com Gerrit-Reviewer: Brian Slesinsky skybr...@google.com Gerrit-Reviewer: Emmanuel Pellereau emmanu...@google.com Gerrit-Reviewer: Leeroy Jenkins jenk...@gwtproject.org Gerrit-Reviewer: Thomas Broyer t.bro...@gmail.com Gerrit-HasComments: No -- 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] Change in gwt[master]: Fix support for Document.{get,set}ScrollLeft() in RTL for sa...
Brian Slesinsky has submitted this change and it was merged. Change subject: Fix support for Document.{get,set}ScrollLeft() in RTL for safari and ie9. .. Fix support for Document.{get,set}ScrollLeft() in RTL for safari and ie9. Change-Id: I8ce64ab4bbbae02ee7519ed8d24241cdfbc28617 Review-Link: https://gwt-review.googlesource.com/#/c/3420/ --- M user/src/com/google/gwt/dom/client/DOMImplIE9.java M user/src/com/google/gwt/dom/client/DOMImplStandardBase.java M user/test/com/google/gwt/dom/client/ElementTest.java 3 files changed, 41 insertions(+), 2 deletions(-) Approvals: Leeroy Jenkins: Verified Brian Slesinsky: Verified; Looks good to me, approved diff --git a/user/src/com/google/gwt/dom/client/DOMImplIE9.java b/user/src/com/google/gwt/dom/client/DOMImplIE9.java index 6564bb2..a49c651 100644 --- a/user/src/com/google/gwt/dom/client/DOMImplIE9.java +++ b/user/src/com/google/gwt/dom/client/DOMImplIE9.java @@ -91,6 +91,11 @@ setScrollLeftImpl(elem, left); } + @Override + public void setScrollLeft(Document doc, int left) { +setScrollLeft(doc.getDocumentElement(), left); + } + protected native int getBoundingClientRectLeft(Element elem) /*-{ // getBoundingClientRect() throws a JS exception if the elem is not attached // to the document, so we wrap it in a try/catch block diff --git a/user/src/com/google/gwt/dom/client/DOMImplStandardBase.java b/user/src/com/google/gwt/dom/client/DOMImplStandardBase.java index 5d698f7..acd9c0a 100644 --- a/user/src/com/google/gwt/dom/client/DOMImplStandardBase.java +++ b/user/src/com/google/gwt/dom/client/DOMImplStandardBase.java @@ -223,7 +223,7 @@ @Override public int getScrollLeft(Element elem) { -if (isRTL(elem)) { +if (!elem.hasTagName(BodyElement.TAG) isRTL(elem)) { return super.getScrollLeft(elem) - (elem.getScrollWidth() - elem.getClientWidth()); } @@ -253,7 +253,7 @@ @Override public void setScrollLeft(Element elem, int left) { -if (isRTL(elem)) { +if (!elem.hasTagName(BodyElement.TAG) isRTL(elem)) { left += elem.getScrollWidth() - elem.getClientWidth(); } super.setScrollLeft(elem, left); diff --git a/user/test/com/google/gwt/dom/client/ElementTest.java b/user/test/com/google/gwt/dom/client/ElementTest.java index c4a2acf..23d19f0 100644 --- a/user/test/com/google/gwt/dom/client/ElementTest.java +++ b/user/test/com/google/gwt/dom/client/ElementTest.java @@ -599,6 +599,40 @@ assertEquals(0, outer.getScrollLeft()); } + @DoNotRunWith({Platform.HtmlUnitLayout}) + public void testDocumentScrollLeftInRtl() { +Document.get().getDocumentElement().setDir(rtl); +Document.get().getBody().getStyle().setProperty(direction, rtl); + +final DivElement bigdiv = Document.get().createDivElement(); + +bigdiv.getStyle().setProperty(position, absolute); +bigdiv.getStyle().setProperty(top, 0px); +bigdiv.getStyle().setProperty(right, 0px); +bigdiv.getStyle().setProperty(width, 1px); // Bigger than window size. +bigdiv.getStyle().setProperty(height, 400px); + +Document.get().getBody().appendChild(bigdiv); + +// The important thing is that setting and retrieving scrollLeft values in +// RTL mode works only for negative numbers, and that they round-trip +// correctly. +try { + assertEquals(0, Document.get().getScrollLeft()); + + Document.get().setScrollLeft(-32); + assertEquals(-32, Document.get().getScrollLeft()); + + Document.get().setScrollLeft(32); + assertEquals(0, Document.get().getScrollLeft()); +} finally { + // Restore direction unconditionally to not break all other tests. + Document.get().getBody().removeChild(bigdiv); + Document.get().getBody().getStyle().setProperty(direction, ltr); + Document.get().getDocumentElement().setDir(ltr); +} + } + /** * innerHTML. */ -- To view, visit https://gwt-review.googlesource.com/3420 To unsubscribe, visit https://gwt-review.googlesource.com/settings Gerrit-MessageType: merged Gerrit-Change-Id: I8ce64ab4bbbae02ee7519ed8d24241cdfbc28617 Gerrit-PatchSet: 4 Gerrit-Project: gwt Gerrit-Branch: master Gerrit-Owner: Emmanuel Pellereau emmanu...@google.com Gerrit-Reviewer: Brian Slesinsky skybr...@google.com Gerrit-Reviewer: Emmanuel Pellereau emmanu...@google.com Gerrit-Reviewer: Leeroy Jenkins jenk...@gwtproject.org Gerrit-Reviewer: Thomas Broyer t.bro...@gmail.com -- 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] Change in gwt[master]: adds regression testing against future changes that might ac...
Hello Leeroy Jenkins, I'd like you to reexamine a change. Please visit https://gwt-review.googlesource.com/3590 to look at the new patch set (#2). Change subject: adds regression testing against future changes that might accidentally push all fragment code into the leftover fragment .. adds regression testing against future changes that might accidentally push all fragment code into the leftover fragment Change-Id: I34d21081ea4e90b95f5b2d77a7a647e388e25335 Review-Link: https://gwt-review.googlesource.com/#/c/3590/ --- M user/src/com/google/gwt/core/client/impl/LoadingStrategyBase.java M user/src/com/google/gwt/core/client/impl/XhrLoadingStrategy.java M user/test/com/google/gwt/dev/jjs/CompilerSuite.java A user/test/com/google/gwt/dev/jjs/RunAsyncContent.gwt.xml M user/test/com/google/gwt/dev/jjs/RunAsyncFailure.gwt.xml A user/test/com/google/gwt/dev/jjs/test/LoggingXhrLoadingStrategy.java A user/test/com/google/gwt/dev/jjs/test/RunAsyncContentTest.java M user/test/com/google/gwt/dev/jjs/test/RunAsyncFailureTest.java 8 files changed, 186 insertions(+), 10 deletions(-) -- To view, visit https://gwt-review.googlesource.com/3590 To unsubscribe, visit https://gwt-review.googlesource.com/settings Gerrit-MessageType: newpatchset Gerrit-Change-Id: I34d21081ea4e90b95f5b2d77a7a647e388e25335 Gerrit-PatchSet: 2 Gerrit-Project: gwt Gerrit-Branch: master Gerrit-Owner: John Stalcup stal...@google.com Gerrit-Reviewer: Goktug Gokdogan gok...@google.com Gerrit-Reviewer: Leeroy Jenkins jenk...@gwtproject.org -- 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] Change in gwt[master]: adds regression testing against future changes that might ac...
Hello Leeroy Jenkins, I'd like you to reexamine a change. Please visit https://gwt-review.googlesource.com/3590 to look at the new patch set (#3). Change subject: adds regression testing against future changes that might accidentally push all fragment code into the leftover fragment .. adds regression testing against future changes that might accidentally push all fragment code into the leftover fragment Change-Id: I34d21081ea4e90b95f5b2d77a7a647e388e25335 Review-Link: https://gwt-review.googlesource.com/#/c/3590/ --- M user/src/com/google/gwt/core/client/impl/LoadingStrategyBase.java M user/src/com/google/gwt/core/client/impl/XhrLoadingStrategy.java M user/test/com/google/gwt/dev/jjs/CompilerSuite.java A user/test/com/google/gwt/dev/jjs/RunAsyncContent.gwt.xml M user/test/com/google/gwt/dev/jjs/RunAsyncFailure.gwt.xml A user/test/com/google/gwt/dev/jjs/test/LoggingXhrLoadingStrategy.java A user/test/com/google/gwt/dev/jjs/test/RunAsyncContentTest.java M user/test/com/google/gwt/dev/jjs/test/RunAsyncFailureTest.java 8 files changed, 187 insertions(+), 10 deletions(-) -- To view, visit https://gwt-review.googlesource.com/3590 To unsubscribe, visit https://gwt-review.googlesource.com/settings Gerrit-MessageType: newpatchset Gerrit-Change-Id: I34d21081ea4e90b95f5b2d77a7a647e388e25335 Gerrit-PatchSet: 3 Gerrit-Project: gwt Gerrit-Branch: master Gerrit-Owner: John Stalcup stal...@google.com Gerrit-Reviewer: Goktug Gokdogan gok...@google.com Gerrit-Reviewer: Leeroy Jenkins jenk...@gwtproject.org -- 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] Change in gwt[master]: adds regression testing against future changes that might ac...
Hello Leeroy Jenkins, I'd like you to reexamine a change. Please visit https://gwt-review.googlesource.com/3590 to look at the new patch set (#4). Change subject: adds regression testing against future changes that might accidentally push all fragment code into the leftover fragment .. adds regression testing against future changes that might accidentally push all fragment code into the leftover fragment Change-Id: I34d21081ea4e90b95f5b2d77a7a647e388e25335 Review-Link: https://gwt-review.googlesource.com/#/c/3590/ --- M user/src/com/google/gwt/core/client/impl/LoadingStrategyBase.java M user/src/com/google/gwt/core/client/impl/XhrLoadingStrategy.java M user/test/com/google/gwt/dev/jjs/CompilerSuite.java A user/test/com/google/gwt/dev/jjs/RunAsyncContent.gwt.xml A user/test/com/google/gwt/dev/jjs/test/LoggingXhrLoadingStrategy.java A user/test/com/google/gwt/dev/jjs/test/RunAsyncContentTest.java M user/test/com/google/gwt/dev/jjs/test/RunAsyncFailureTest.java 7 files changed, 185 insertions(+), 6 deletions(-) -- To view, visit https://gwt-review.googlesource.com/3590 To unsubscribe, visit https://gwt-review.googlesource.com/settings Gerrit-MessageType: newpatchset Gerrit-Change-Id: I34d21081ea4e90b95f5b2d77a7a647e388e25335 Gerrit-PatchSet: 4 Gerrit-Project: gwt Gerrit-Branch: master Gerrit-Owner: John Stalcup stal...@google.com Gerrit-Reviewer: Goktug Gokdogan gok...@google.com Gerrit-Reviewer: Leeroy Jenkins jenk...@gwtproject.org -- 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] Change in gwt[master]: adds regression testing against future changes that might ac...
John Stalcup has posted comments on this change. Change subject: adds regression testing against future changes that might accidentally push all fragment code into the leftover fragment .. Patch Set 4: offline you mentioned you'd rather this test be done in it's own dedicated test file. i've made that change. PTAL -- To view, visit https://gwt-review.googlesource.com/3590 To unsubscribe, visit https://gwt-review.googlesource.com/settings Gerrit-MessageType: comment Gerrit-Change-Id: I34d21081ea4e90b95f5b2d77a7a647e388e25335 Gerrit-PatchSet: 4 Gerrit-Project: gwt Gerrit-Branch: master Gerrit-Owner: John Stalcup stal...@google.com Gerrit-Reviewer: Goktug Gokdogan gok...@google.com Gerrit-Reviewer: John Stalcup stal...@google.com Gerrit-Reviewer: Leeroy Jenkins jenk...@gwtproject.org Gerrit-HasComments: No -- 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] Change in gwt[master]: adds regression testing against future changes that might ac...
Goktug Gokdogan has posted comments on this change. Change subject: adds regression testing against future changes that might accidentally push all fragment code into the leftover fragment .. Patch Set 4: (4 comments) Thanks for separating the test. It looks pretty good. File user/src/com/google/gwt/core/client/impl/XhrLoadingStrategy.java Line 32: protected class XhrDownloadStrategy implements DownloadStrategy { I think alternatively we can avoid changing any production code via creating our own loading strategy subclassing of XhrDownloadStrategy and RequestData. Something like: public class LoggingXhrLoadingStrategy extends LoadingStrategyBase { public static MapInteger, String sourceByFragmentIndex = new HashMapInteger, String(); public XhrLoadingStrategy() { super(new XhrDownloadStrategy() { @Override public void tryDownload(final RequestData request) { super.tryDownload(new RequestData(){ public void tryInstall(String code) { super.tryInstall(code); sourceByFragmentIndex.put(request.getFragment(), code); } }); } }); } File user/test/com/google/gwt/dev/jjs/test/RunAsyncContentTest.java Line 44: public void onFailure(Throwable caught) {} We can report the exception for failing faster: reportUncaughtException(caught); Line 55: public void testUniqueContentRegular() { (nit) you may consider naming methods like following: testUniqueContent testUniqueContentWithClassListeral File user/test/com/google/gwt/dev/jjs/test/RunAsyncFailureTest.java Line 250: } I guess this wasn't intentional? -- To view, visit https://gwt-review.googlesource.com/3590 To unsubscribe, visit https://gwt-review.googlesource.com/settings Gerrit-MessageType: comment Gerrit-Change-Id: I34d21081ea4e90b95f5b2d77a7a647e388e25335 Gerrit-PatchSet: 4 Gerrit-Project: gwt Gerrit-Branch: master Gerrit-Owner: John Stalcup stal...@google.com Gerrit-Reviewer: Goktug Gokdogan gok...@google.com Gerrit-Reviewer: John Stalcup stal...@google.com Gerrit-Reviewer: Leeroy Jenkins jenk...@gwtproject.org Gerrit-HasComments: Yes -- 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.