Reorganize the bikeshed directories Add a TreeView to the stock sample app git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@7625 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/bikeshed/src/com/google/gwt/cells/Cells.gwt.xml b/bikeshed/src/com/google/gwt/bikeshed/cells/Cells.gwt.xml similarity index 100% rename from bikeshed/src/com/google/gwt/cells/Cells.gwt.xml rename to bikeshed/src/com/google/gwt/bikeshed/cells/Cells.gwt.xml
diff --git a/bikeshed/src/com/google/gwt/cells/client/ButtonCell.java b/bikeshed/src/com/google/gwt/bikeshed/cells/client/ButtonCell.java similarity index 96% rename from bikeshed/src/com/google/gwt/cells/client/ButtonCell.java rename to bikeshed/src/com/google/gwt/bikeshed/cells/client/ButtonCell.java index 9aa06cd..48eb1c4 100644 --- a/bikeshed/src/com/google/gwt/cells/client/ButtonCell.java +++ b/bikeshed/src/com/google/gwt/bikeshed/cells/client/ButtonCell.java
@@ -13,7 +13,7 @@ * License for the specific language governing permissions and limitations under * the License. */ -package com.google.gwt.cells.client; +package com.google.gwt.bikeshed.cells.client; import com.google.gwt.dom.client.Element; import com.google.gwt.dom.client.NativeEvent;
diff --git a/bikeshed/src/com/google/gwt/cells/client/Cell.java b/bikeshed/src/com/google/gwt/bikeshed/cells/client/Cell.java similarity index 96% rename from bikeshed/src/com/google/gwt/cells/client/Cell.java rename to bikeshed/src/com/google/gwt/bikeshed/cells/client/Cell.java index 27f84bb..ccfe97e 100644 --- a/bikeshed/src/com/google/gwt/cells/client/Cell.java +++ b/bikeshed/src/com/google/gwt/bikeshed/cells/client/Cell.java
@@ -13,7 +13,7 @@ * License for the specific language governing permissions and limitations under * the License. */ -package com.google.gwt.cells.client; +package com.google.gwt.bikeshed.cells.client; import com.google.gwt.dom.client.Element; import com.google.gwt.dom.client.NativeEvent;
diff --git a/bikeshed/src/com/google/gwt/cells/client/CheckboxCell.java b/bikeshed/src/com/google/gwt/bikeshed/cells/client/CheckboxCell.java similarity index 96% rename from bikeshed/src/com/google/gwt/cells/client/CheckboxCell.java rename to bikeshed/src/com/google/gwt/bikeshed/cells/client/CheckboxCell.java index ee711f8..a085f46 100644 --- a/bikeshed/src/com/google/gwt/cells/client/CheckboxCell.java +++ b/bikeshed/src/com/google/gwt/bikeshed/cells/client/CheckboxCell.java
@@ -13,7 +13,7 @@ * License for the specific language governing permissions and limitations under * the License. */ -package com.google.gwt.cells.client; +package com.google.gwt.bikeshed.cells.client; import com.google.gwt.dom.client.Element; import com.google.gwt.dom.client.InputElement;
diff --git a/bikeshed/src/com/google/gwt/cells/client/CurrencyCell.java b/bikeshed/src/com/google/gwt/bikeshed/cells/client/CurrencyCell.java similarity index 95% rename from bikeshed/src/com/google/gwt/cells/client/CurrencyCell.java rename to bikeshed/src/com/google/gwt/bikeshed/cells/client/CurrencyCell.java index 9a7a1fa..02cbbe6 100644 --- a/bikeshed/src/com/google/gwt/cells/client/CurrencyCell.java +++ b/bikeshed/src/com/google/gwt/bikeshed/cells/client/CurrencyCell.java
@@ -13,7 +13,7 @@ * License for the specific language governing permissions and limitations under * the License. */ -package com.google.gwt.cells.client; +package com.google.gwt.bikeshed.cells.client; /** * A {@link Cell} used to render currency.
diff --git a/bikeshed/src/com/google/gwt/cells/client/FieldUpdater.java b/bikeshed/src/com/google/gwt/bikeshed/cells/client/FieldUpdater.java similarity index 95% rename from bikeshed/src/com/google/gwt/cells/client/FieldUpdater.java rename to bikeshed/src/com/google/gwt/bikeshed/cells/client/FieldUpdater.java index 84d5a28..2e0fd85 100644 --- a/bikeshed/src/com/google/gwt/cells/client/FieldUpdater.java +++ b/bikeshed/src/com/google/gwt/bikeshed/cells/client/FieldUpdater.java
@@ -13,7 +13,7 @@ * License for the specific language governing permissions and limitations under * the License. */ -package com.google.gwt.cells.client; +package com.google.gwt.bikeshed.cells.client; /** * A {@link FieldUpdater} may be added to a Column to update a particular field
diff --git a/bikeshed/src/com/google/gwt/cells/client/TextCell.java b/bikeshed/src/com/google/gwt/bikeshed/cells/client/TextCell.java similarity index 94% rename from bikeshed/src/com/google/gwt/cells/client/TextCell.java rename to bikeshed/src/com/google/gwt/bikeshed/cells/client/TextCell.java index 5dd5ebe..994e103 100644 --- a/bikeshed/src/com/google/gwt/cells/client/TextCell.java +++ b/bikeshed/src/com/google/gwt/bikeshed/cells/client/TextCell.java
@@ -13,7 +13,7 @@ * License for the specific language governing permissions and limitations under * the License. */ -package com.google.gwt.cells.client; +package com.google.gwt.bikeshed.cells.client; /** * A {@link Cell} used to render text.
diff --git a/bikeshed/src/com/google/gwt/cells/client/TextInputCell.java b/bikeshed/src/com/google/gwt/bikeshed/cells/client/TextInputCell.java similarity index 96% rename from bikeshed/src/com/google/gwt/cells/client/TextInputCell.java rename to bikeshed/src/com/google/gwt/bikeshed/cells/client/TextInputCell.java index 96834a6..5257918 100644 --- a/bikeshed/src/com/google/gwt/cells/client/TextInputCell.java +++ b/bikeshed/src/com/google/gwt/bikeshed/cells/client/TextInputCell.java
@@ -13,7 +13,7 @@ * License for the specific language governing permissions and limitations under * the License. */ -package com.google.gwt.cells.client; +package com.google.gwt.bikeshed.cells.client; import com.google.gwt.dom.client.Element; import com.google.gwt.dom.client.InputElement;
diff --git a/bikeshed/src/com/google/gwt/cells/client/ValueUpdater.java b/bikeshed/src/com/google/gwt/bikeshed/cells/client/ValueUpdater.java similarity index 94% rename from bikeshed/src/com/google/gwt/cells/client/ValueUpdater.java rename to bikeshed/src/com/google/gwt/bikeshed/cells/client/ValueUpdater.java index 27c6f51..5ce2587 100644 --- a/bikeshed/src/com/google/gwt/cells/client/ValueUpdater.java +++ b/bikeshed/src/com/google/gwt/bikeshed/cells/client/ValueUpdater.java
@@ -13,7 +13,7 @@ * License for the specific language governing permissions and limitations under * the License. */ -package com.google.gwt.cells.client; +package com.google.gwt.bikeshed.cells.client; /** * A {@link ValueUpdater} may be added to a Cell to provide updated data.
diff --git a/bikeshed/src/com/google/gwt/list/List.gwt.xml b/bikeshed/src/com/google/gwt/bikeshed/list/List.gwt.xml similarity index 92% rename from bikeshed/src/com/google/gwt/list/List.gwt.xml rename to bikeshed/src/com/google/gwt/bikeshed/list/List.gwt.xml index 5a4b63d..8fdf178 100644 --- a/bikeshed/src/com/google/gwt/list/List.gwt.xml +++ b/bikeshed/src/com/google/gwt/bikeshed/list/List.gwt.xml
@@ -15,7 +15,7 @@ --> <module> <inherits name='com.google.gwt.user.User'/> - <inherits name='com.google.gwt.cells.Cells'/> + <inherits name='com.google.gwt.bikeshed.cells.Cells'/> <source path="shared" /> <source path="client" /> </module>
diff --git a/bikeshed/src/com/google/gwt/list/client/Column.java b/bikeshed/src/com/google/gwt/bikeshed/list/client/Column.java similarity index 87% rename from bikeshed/src/com/google/gwt/list/client/Column.java rename to bikeshed/src/com/google/gwt/bikeshed/list/client/Column.java index c19a7df..dc81c23 100644 --- a/bikeshed/src/com/google/gwt/list/client/Column.java +++ b/bikeshed/src/com/google/gwt/bikeshed/list/client/Column.java
@@ -13,11 +13,11 @@ * License for the specific language governing permissions and limitations under * the License. */ -package com.google.gwt.list.client; +package com.google.gwt.bikeshed.list.client; -import com.google.gwt.cells.client.Cell; -import com.google.gwt.cells.client.ValueUpdater; -import com.google.gwt.cells.client.FieldUpdater; +import com.google.gwt.bikeshed.cells.client.Cell; +import com.google.gwt.bikeshed.cells.client.FieldUpdater; +import com.google.gwt.bikeshed.cells.client.ValueUpdater; import com.google.gwt.dom.client.Element; import com.google.gwt.dom.client.NativeEvent;
diff --git a/bikeshed/src/com/google/gwt/list/client/PagingTableListView.java b/bikeshed/src/com/google/gwt/bikeshed/list/client/PagingTableListView.java similarity index 94% rename from bikeshed/src/com/google/gwt/list/client/PagingTableListView.java rename to bikeshed/src/com/google/gwt/bikeshed/list/client/PagingTableListView.java index 88ac483..90a9164 100644 --- a/bikeshed/src/com/google/gwt/list/client/PagingTableListView.java +++ b/bikeshed/src/com/google/gwt/bikeshed/list/client/PagingTableListView.java
@@ -13,10 +13,15 @@ * License for the specific language governing permissions and limitations under * the License. */ -package com.google.gwt.list.client; +package com.google.gwt.bikeshed.list.client; -import com.google.gwt.cells.client.ButtonCell; -import com.google.gwt.cells.client.ValueUpdater; +import com.google.gwt.bikeshed.cells.client.ButtonCell; +import com.google.gwt.bikeshed.cells.client.ValueUpdater; +import com.google.gwt.bikeshed.list.shared.ListEvent; +import com.google.gwt.bikeshed.list.shared.ListHandler; +import com.google.gwt.bikeshed.list.shared.ListModel; +import com.google.gwt.bikeshed.list.shared.ListRegistration; +import com.google.gwt.bikeshed.list.shared.SizeChangeEvent; import com.google.gwt.dom.client.Document; import com.google.gwt.dom.client.Element; import com.google.gwt.dom.client.EventTarget; @@ -27,11 +32,6 @@ import com.google.gwt.dom.client.TableElement; import com.google.gwt.dom.client.TableRowElement; import com.google.gwt.dom.client.Style.Display; -import com.google.gwt.list.shared.ListEvent; -import com.google.gwt.list.shared.ListHandler; -import com.google.gwt.list.shared.ListModel; -import com.google.gwt.list.shared.ListRegistration; -import com.google.gwt.list.shared.SizeChangeEvent; import com.google.gwt.user.client.Event; import com.google.gwt.user.client.ui.Widget;
diff --git a/bikeshed/src/com/google/gwt/list/client/SimpleCellList.java b/bikeshed/src/com/google/gwt/bikeshed/list/client/SimpleCellList.java similarity index 90% rename from bikeshed/src/com/google/gwt/list/client/SimpleCellList.java rename to bikeshed/src/com/google/gwt/bikeshed/list/client/SimpleCellList.java index d283d6a..e1dba47 100644 --- a/bikeshed/src/com/google/gwt/list/client/SimpleCellList.java +++ b/bikeshed/src/com/google/gwt/bikeshed/list/client/SimpleCellList.java
@@ -13,17 +13,17 @@ * License for the specific language governing permissions and limitations under * the License. */ -package com.google.gwt.list.client; +package com.google.gwt.bikeshed.list.client; -import com.google.gwt.cells.client.Cell; -import com.google.gwt.cells.client.ValueUpdater; +import com.google.gwt.bikeshed.cells.client.Cell; +import com.google.gwt.bikeshed.cells.client.ValueUpdater; +import com.google.gwt.bikeshed.list.shared.ListEvent; +import com.google.gwt.bikeshed.list.shared.ListHandler; +import com.google.gwt.bikeshed.list.shared.ListModel; +import com.google.gwt.bikeshed.list.shared.ListRegistration; +import com.google.gwt.bikeshed.list.shared.SizeChangeEvent; import com.google.gwt.dom.client.Document; import com.google.gwt.dom.client.Element; -import com.google.gwt.list.shared.ListEvent; -import com.google.gwt.list.shared.ListHandler; -import com.google.gwt.list.shared.ListModel; -import com.google.gwt.list.shared.ListRegistration; -import com.google.gwt.list.shared.SizeChangeEvent; import com.google.gwt.user.client.Event; import com.google.gwt.user.client.ui.Widget;
diff --git a/bikeshed/src/com/google/gwt/list/shared/AbstractListModel.java b/bikeshed/src/com/google/gwt/bikeshed/list/shared/AbstractListModel.java similarity index 98% rename from bikeshed/src/com/google/gwt/list/shared/AbstractListModel.java rename to bikeshed/src/com/google/gwt/bikeshed/list/shared/AbstractListModel.java index 7daf7c1..f46dba0 100644 --- a/bikeshed/src/com/google/gwt/list/shared/AbstractListModel.java +++ b/bikeshed/src/com/google/gwt/bikeshed/list/shared/AbstractListModel.java
@@ -13,7 +13,7 @@ * License for the specific language governing permissions and limitations under * the License. */ -package com.google.gwt.list.shared; +package com.google.gwt.bikeshed.list.shared; import java.io.Serializable; import java.util.ArrayList;
diff --git a/bikeshed/src/com/google/gwt/list/shared/AsyncListModel.java b/bikeshed/src/com/google/gwt/bikeshed/list/shared/AsyncListModel.java similarity index 97% rename from bikeshed/src/com/google/gwt/list/shared/AsyncListModel.java rename to bikeshed/src/com/google/gwt/bikeshed/list/shared/AsyncListModel.java index d2124ed..903041e 100644 --- a/bikeshed/src/com/google/gwt/list/shared/AsyncListModel.java +++ b/bikeshed/src/com/google/gwt/bikeshed/list/shared/AsyncListModel.java
@@ -13,7 +13,7 @@ * License for the specific language governing permissions and limitations under * the License. */ -package com.google.gwt.list.shared; +package com.google.gwt.bikeshed.list.shared; import java.util.List;
diff --git a/bikeshed/src/com/google/gwt/list/shared/ListEvent.java b/bikeshed/src/com/google/gwt/bikeshed/list/shared/ListEvent.java similarity index 97% rename from bikeshed/src/com/google/gwt/list/shared/ListEvent.java rename to bikeshed/src/com/google/gwt/bikeshed/list/shared/ListEvent.java index 0986dc4..82ceec6 100644 --- a/bikeshed/src/com/google/gwt/list/shared/ListEvent.java +++ b/bikeshed/src/com/google/gwt/bikeshed/list/shared/ListEvent.java
@@ -13,7 +13,7 @@ * License for the specific language governing permissions and limitations under * the License. */ -package com.google.gwt.list.shared; +package com.google.gwt.bikeshed.list.shared; import com.google.gwt.event.shared.GwtEvent;
diff --git a/bikeshed/src/com/google/gwt/list/shared/ListHandler.java b/bikeshed/src/com/google/gwt/bikeshed/list/shared/ListHandler.java similarity index 95% rename from bikeshed/src/com/google/gwt/list/shared/ListHandler.java rename to bikeshed/src/com/google/gwt/bikeshed/list/shared/ListHandler.java index 9ccfa1f..fd41884 100644 --- a/bikeshed/src/com/google/gwt/list/shared/ListHandler.java +++ b/bikeshed/src/com/google/gwt/bikeshed/list/shared/ListHandler.java
@@ -13,7 +13,7 @@ * License for the specific language governing permissions and limitations under * the License. */ -package com.google.gwt.list.shared; +package com.google.gwt.bikeshed.list.shared; import com.google.gwt.event.shared.EventHandler;
diff --git a/bikeshed/src/com/google/gwt/list/shared/ListListModel.java b/bikeshed/src/com/google/gwt/bikeshed/list/shared/ListListModel.java similarity index 97% rename from bikeshed/src/com/google/gwt/list/shared/ListListModel.java rename to bikeshed/src/com/google/gwt/bikeshed/list/shared/ListListModel.java index fa63a24..1327de5 100644 --- a/bikeshed/src/com/google/gwt/list/shared/ListListModel.java +++ b/bikeshed/src/com/google/gwt/bikeshed/list/shared/ListListModel.java
@@ -13,7 +13,7 @@ * License for the specific language governing permissions and limitations under * the License. */ -package com.google.gwt.list.shared; +package com.google.gwt.bikeshed.list.shared; import com.google.gwt.user.client.Command; import com.google.gwt.user.client.DeferredCommand; @@ -31,6 +31,8 @@ */ public class ListListModel<T> extends AbstractListModel<T> { + public int insertIndex; + /** * A wrapper around a list that updates the model on any change. */ @@ -48,13 +50,14 @@ */ private Command flushCommand = new Command() { public void execute() { - flushPending = false; int newSize = list.size(); if (curSize != newSize) { curSize = newSize; updateDataSize(curSize, true); } updateViewData(0, list.size(), list); + + flushPending = false; } }; @@ -74,6 +77,7 @@ public void add(int index, T element) { list.add(index, element); + // insert(index); flush(); }
diff --git a/bikeshed/src/com/google/gwt/list/shared/ListModel.java b/bikeshed/src/com/google/gwt/bikeshed/list/shared/ListModel.java similarity index 94% rename from bikeshed/src/com/google/gwt/list/shared/ListModel.java rename to bikeshed/src/com/google/gwt/bikeshed/list/shared/ListModel.java index 2a1c521..6bf9ee5 100644 --- a/bikeshed/src/com/google/gwt/list/shared/ListModel.java +++ b/bikeshed/src/com/google/gwt/bikeshed/list/shared/ListModel.java
@@ -13,7 +13,7 @@ * License for the specific language governing permissions and limitations under * the License. */ -package com.google.gwt.list.shared; +package com.google.gwt.bikeshed.list.shared; /** * A model for a list.
diff --git a/bikeshed/src/com/google/gwt/list/shared/ListRegistration.java b/bikeshed/src/com/google/gwt/bikeshed/list/shared/ListRegistration.java similarity index 95% rename from bikeshed/src/com/google/gwt/list/shared/ListRegistration.java rename to bikeshed/src/com/google/gwt/bikeshed/list/shared/ListRegistration.java index a0e2761..a417fb1 100644 --- a/bikeshed/src/com/google/gwt/list/shared/ListRegistration.java +++ b/bikeshed/src/com/google/gwt/bikeshed/list/shared/ListRegistration.java
@@ -13,7 +13,7 @@ * License for the specific language governing permissions and limitations under * the License. */ -package com.google.gwt.list.shared; +package com.google.gwt.bikeshed.list.shared; import com.google.gwt.event.shared.HandlerRegistration;
diff --git a/bikeshed/src/com/google/gwt/list/shared/Range.java b/bikeshed/src/com/google/gwt/bikeshed/list/shared/Range.java similarity index 94% rename from bikeshed/src/com/google/gwt/list/shared/Range.java rename to bikeshed/src/com/google/gwt/bikeshed/list/shared/Range.java index e798658..ac9a883 100644 --- a/bikeshed/src/com/google/gwt/list/shared/Range.java +++ b/bikeshed/src/com/google/gwt/bikeshed/list/shared/Range.java
@@ -13,7 +13,7 @@ * License for the specific language governing permissions and limitations under * the License. */ -package com.google.gwt.list.shared; +package com.google.gwt.bikeshed.list.shared; /** * The range of interest for a single handler.
diff --git a/bikeshed/src/com/google/gwt/list/shared/SizeChangeEvent.java b/bikeshed/src/com/google/gwt/bikeshed/list/shared/SizeChangeEvent.java similarity index 97% rename from bikeshed/src/com/google/gwt/list/shared/SizeChangeEvent.java rename to bikeshed/src/com/google/gwt/bikeshed/list/shared/SizeChangeEvent.java index 73b4bf6..bc82706 100644 --- a/bikeshed/src/com/google/gwt/list/shared/SizeChangeEvent.java +++ b/bikeshed/src/com/google/gwt/bikeshed/list/shared/SizeChangeEvent.java
@@ -13,7 +13,7 @@ * License for the specific language governing permissions and limitations under * the License. */ -package com.google.gwt.list.shared; +package com.google.gwt.bikeshed.list.shared; import com.google.gwt.event.shared.GwtEvent;
diff --git a/bikeshed/src/com/google/gwt/sample/stocks/Stocks.gwt.xml b/bikeshed/src/com/google/gwt/bikeshed/sample/stocks/StockSample.gwt.xml similarity index 84% rename from bikeshed/src/com/google/gwt/sample/stocks/Stocks.gwt.xml rename to bikeshed/src/com/google/gwt/bikeshed/sample/stocks/StockSample.gwt.xml index 6788e6a..b8af876 100644 --- a/bikeshed/src/com/google/gwt/sample/stocks/Stocks.gwt.xml +++ b/bikeshed/src/com/google/gwt/bikeshed/sample/stocks/StockSample.gwt.xml
@@ -3,7 +3,8 @@ <module rename-to='stocks'> <!-- Inherit the core Web Toolkit stuff. --> <inherits name='com.google.gwt.user.User'/> - <inherits name='com.google.gwt.list.List'/> + <inherits name='com.google.gwt.bikeshed.list.List'/> + <inherits name='com.google.gwt.bikeshed.tree.Tree'/> <!-- Inherit the default GWT style sheet. You can change --> <!-- the theme of your GWT application by uncommenting --> @@ -15,7 +16,7 @@ <!-- Other module inherits --> <!-- Specify the app entry point class. --> - <entry-point class='com.google.gwt.sample.stocks.client.Stocks'/> + <entry-point class='com.google.gwt.bikeshed.sample.stocks.client.StockSample'/> <!-- Specify the paths for translatable code --> <source path='client'/>
diff --git a/bikeshed/src/com/google/gwt/sample/stocks/client/BuySellPopup.java b/bikeshed/src/com/google/gwt/bikeshed/sample/stocks/client/BuySellPopup.java similarity index 95% rename from bikeshed/src/com/google/gwt/sample/stocks/client/BuySellPopup.java rename to bikeshed/src/com/google/gwt/bikeshed/sample/stocks/client/BuySellPopup.java index feeb8c1..c313777 100644 --- a/bikeshed/src/com/google/gwt/sample/stocks/client/BuySellPopup.java +++ b/bikeshed/src/com/google/gwt/bikeshed/sample/stocks/client/BuySellPopup.java
@@ -13,15 +13,15 @@ * License for the specific language governing permissions and limitations under * the License. */ -package com.google.gwt.sample.stocks.client; +package com.google.gwt.bikeshed.sample.stocks.client; +import com.google.gwt.bikeshed.sample.stocks.shared.StockQuote; +import com.google.gwt.bikeshed.sample.stocks.shared.Transaction; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.dom.client.KeyUpEvent; import com.google.gwt.event.dom.client.KeyUpHandler; import com.google.gwt.i18n.client.NumberFormat; -import com.google.gwt.sample.stocks.shared.StockQuote; -import com.google.gwt.sample.stocks.shared.Transaction; import com.google.gwt.user.client.Command; import com.google.gwt.user.client.DeferredCommand; import com.google.gwt.user.client.Window;
diff --git a/bikeshed/src/com/google/gwt/sample/stocks/client/StockQuoteCell.java b/bikeshed/src/com/google/gwt/bikeshed/sample/stocks/client/StockQuoteCell.java similarity index 83% rename from bikeshed/src/com/google/gwt/sample/stocks/client/StockQuoteCell.java rename to bikeshed/src/com/google/gwt/bikeshed/sample/stocks/client/StockQuoteCell.java index 38c8eb4..150ac04 100644 --- a/bikeshed/src/com/google/gwt/sample/stocks/client/StockQuoteCell.java +++ b/bikeshed/src/com/google/gwt/bikeshed/sample/stocks/client/StockQuoteCell.java
@@ -13,10 +13,10 @@ * License for the specific language governing permissions and limitations under * the License. */ -package com.google.gwt.sample.stocks.client; +package com.google.gwt.bikeshed.sample.stocks.client; -import com.google.gwt.cells.client.Cell; -import com.google.gwt.sample.stocks.shared.StockQuote; +import com.google.gwt.bikeshed.cells.client.Cell; +import com.google.gwt.bikeshed.sample.stocks.shared.StockQuote; /** * A cell that represents a {@link StockQuote}.
diff --git a/bikeshed/src/com/google/gwt/bikeshed/sample/stocks/client/StockSample.java b/bikeshed/src/com/google/gwt/bikeshed/sample/stocks/client/StockSample.java new file mode 100644 index 0000000..c7f2be2 --- /dev/null +++ b/bikeshed/src/com/google/gwt/bikeshed/sample/stocks/client/StockSample.java
@@ -0,0 +1,446 @@ +/* + * Copyright 2010 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.bikeshed.sample.stocks.client; + +import com.google.gwt.bikeshed.cells.client.ButtonCell; +import com.google.gwt.bikeshed.cells.client.CheckboxCell; +import com.google.gwt.bikeshed.cells.client.CurrencyCell; +import com.google.gwt.bikeshed.cells.client.FieldUpdater; +import com.google.gwt.bikeshed.cells.client.TextCell; +import com.google.gwt.bikeshed.list.client.Column; +import com.google.gwt.bikeshed.list.client.PagingTableListView; +import com.google.gwt.bikeshed.list.shared.AsyncListModel; +import com.google.gwt.bikeshed.list.shared.ListListModel; +import com.google.gwt.bikeshed.list.shared.Range; +import com.google.gwt.bikeshed.list.shared.AsyncListModel.DataSource; +import com.google.gwt.bikeshed.sample.stocks.shared.StockQuote; +import com.google.gwt.bikeshed.sample.stocks.shared.StockQuoteList; +import com.google.gwt.bikeshed.sample.stocks.shared.StockRequest; +import com.google.gwt.bikeshed.sample.stocks.shared.StockResponse; +import com.google.gwt.bikeshed.sample.stocks.shared.Transaction; +import com.google.gwt.bikeshed.tree.client.TreeView; +import com.google.gwt.core.client.EntryPoint; +import com.google.gwt.core.client.GWT; +import com.google.gwt.event.dom.client.KeyUpEvent; +import com.google.gwt.event.dom.client.KeyUpHandler; +import com.google.gwt.event.logical.shared.CloseEvent; +import com.google.gwt.event.logical.shared.CloseHandler; +import com.google.gwt.i18n.client.NumberFormat; +import com.google.gwt.user.client.Timer; +import com.google.gwt.user.client.Window; +import com.google.gwt.user.client.rpc.AsyncCallback; +import com.google.gwt.user.client.ui.HTML; +import com.google.gwt.user.client.ui.HorizontalPanel; +import com.google.gwt.user.client.ui.Label; +import com.google.gwt.user.client.ui.PopupPanel; +import com.google.gwt.user.client.ui.RootPanel; +import com.google.gwt.user.client.ui.TextBox; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Entry point classes define <code>onModuleLoad()</code>. + */ +public class StockSample implements EntryPoint { + + static class Columns { + + private static Column<StockQuote, String> buyColumn = new Column<StockQuote, String>( + new ButtonCell()) { + @Override + protected String getValue(StockQuote object) { + return "Buy"; + } + }; + + private static Column<StockQuote, Boolean> favoriteColumn = + new Column<StockQuote, Boolean>(new CheckboxCell()) { + @Override + protected Boolean getValue(StockQuote object) { + return object.isFavorite(); + } + }; + + private static Column<StockQuote, String> nameColumn = + new Column<StockQuote, String>(new TextCell()) { + @Override + protected String getValue(StockQuote object) { + return object.getName(); + } + }; + + private static Column<StockQuote, Integer> priceColumn = + new Column<StockQuote, Integer>(new CurrencyCell()) { + @Override + protected Integer getValue(StockQuote object) { + return object.getPrice(); + } + }; + + private static Column<StockQuote, String> sellColumn = + new Column<StockQuote, String>(new ButtonCell()) { + @Override + protected String getValue(StockQuote object) { + return "Sell"; + } + }; + + private static Column<StockQuote, String> sharesColumn = + new Column<StockQuote, String>(new TextCell()) { + @Override + protected String getValue(StockQuote object) { + return "" + object.getSharesOwned(); + } + }; + + private static Column<Transaction, String> subtotalColumn = + new Column<Transaction, String>(new TextCell()) { + @Override + protected String getValue(Transaction object) { + int price = object.getActualPrice() * object.getQuantity(); + return (object.isBuy() ? " (" : " ") + getFormattedPrice(price) + + (object.isBuy() ? ")" : ""); + } + }; + + private static Column<StockQuote, String> tickerColumn = + new Column<StockQuote, String>(new TextCell()) { + @Override + protected String getValue(StockQuote object) { + return object.getTicker(); + } + }; + + private static Column<Transaction, String> transactionColumn = + new Column<Transaction, String>(new TextCell()) { + @Override + protected String getValue(Transaction object) { + return object.toString(); + } + }; + } + + /** + * The delay between updates in milliseconds. + */ + private static final int UPDATE_DELAY = 5000; + + private static String getFormattedPrice(int price) { + return NumberFormat.getCurrencyFormat("USD").format(price / 100.0); + } + + /** + * The popup used to purchase stock. + */ + private BuySellPopup buySellPopup = new BuySellPopup(); + + private final Label cashLabel = new Label(); + + /** + * The {@link StockService} used to retrieve data. + */ + private final StockServiceAsync dataService = GWT.create(StockService.class); + + private final Label errorLabel = new Label(); + + private AsyncListModel<StockQuote> favoritesListModel; + + private PagingTableListView<StockQuote> favoritesTable; + + private final TextBox queryField = new TextBox(); + + private PagingTableListView<StockQuote> resultsTable; + + private AsyncListModel<StockQuote> searchListModel; + + private ListListModel<String> tickersListModel = new ListListModel<String>(); + + private Map<String, ListListModel<Transaction>> transactionListListModelsByTicker = + new HashMap<String, ListListModel<Transaction>>(); + + private ListListModel<Transaction> transactionListModel; + + private List<Transaction> transactions; + + private PagingTableListView<Transaction> transactionTable; + + private TreeView transactionTree; + + private List<String> transactionTreeTickers = tickersListModel.getList(); + + /** + * The timer used to update the stock quotes. + */ + private Timer updateTimer = new Timer() { + @Override + public void run() { + update(); + } + }; + + /** + * This is the entry point method. + */ + public void onModuleLoad() { + queryField.setText("G"); + + // Add the nameField and sendButton to the RootPanel + // Use RootPanel.get() to get the entire body element + RootPanel.get("queryFieldContainer").add(queryField); + RootPanel.get("errorLabelContainer").add(errorLabel); + + // Focus the cursor on the name field when the app loads + queryField.setFocus(true); + queryField.selectAll(); + + // Create the list models + searchListModel = new AsyncListModel<StockQuote>( + new DataSource<StockQuote>() { + public void requestData(AsyncListModel<StockQuote> listModel) { + update(); + } + }); + + favoritesListModel = new AsyncListModel<StockQuote>( + new DataSource<StockQuote>() { + public void requestData(AsyncListModel<StockQuote> listModel) { + update(); + } + }); + + transactionListModel = new ListListModel<Transaction>(); + transactions = transactionListModel.getList(); + + // Create the results table. + resultsTable = new PagingTableListView<StockQuote>(searchListModel, 10); + resultsTable.addColumn(Columns.favoriteColumn); + resultsTable.addColumn(Columns.tickerColumn); + resultsTable.addColumn(Columns.nameColumn); + resultsTable.addColumn(Columns.priceColumn); + resultsTable.addColumn(Columns.buyColumn); + + // Create the favorites table. + favoritesTable = new PagingTableListView<StockQuote>(favoritesListModel, 10); + favoritesTable.addColumn(Columns.tickerColumn); + favoritesTable.addColumn(Columns.priceColumn); + favoritesTable.addColumn(Columns.sharesColumn); + favoritesTable.addColumn(Columns.buyColumn); + favoritesTable.addColumn(Columns.sellColumn); + + // Create the transactions table. + transactionTable = new PagingTableListView<Transaction>(transactionListModel, 10); + transactionTable.addColumn(Columns.transactionColumn); + transactionTable.addColumn(Columns.subtotalColumn); + + // Create the transactions tree. + transactionTree = new TreeView(new TransactionTreeViewModel(tickersListModel, + transactionListListModelsByTicker), null); + + Columns.favoriteColumn.setFieldUpdater(new FieldUpdater<StockQuote, Boolean>() { + public void update(StockQuote object, Boolean value) { + setFavorite(object.getTicker(), value); + } + }); + + Columns.buyColumn.setFieldUpdater(new FieldUpdater<StockQuote, String>() { + public void update(StockQuote object, String value) { + buySellPopup.setStockQuote(object, true); + buySellPopup.center(); + } + }); + + Columns.sellColumn.setFieldUpdater(new FieldUpdater<StockQuote, String>() { + public void update(StockQuote object, String value) { + buySellPopup.setStockQuote(object, false); + buySellPopup.center(); + } + }); + + buySellPopup.addCloseHandler(new CloseHandler<PopupPanel>() { + public void onClose(CloseEvent<PopupPanel> event) { + Transaction t = buySellPopup.getTransaction(); + if (t != null) { + dataService.transact(t, new AsyncCallback<Transaction>() { + public void onFailure(Throwable caught) { + Window.alert("Error: " + caught.getMessage()); + } + + public void onSuccess(Transaction result) { + recordTransaction(result); + update(); + } + + /** + * Update transactions (list of all transactions), + * transactionTickers (set of all tickers involved in + * transactions), and transactionsByTicker (map from + * ticker to lists of transactions for that ticker). + */ + private void recordTransaction(Transaction result) { + transactions.add(0, result); + + // Add ticker in alphebetical order + String ticker = result.getTicker(); + int index = 0; + for (String s : transactionTreeTickers) { + int compare = s.compareTo(ticker); + if (compare == 0) { + // Already have the ticker + index = -1; + break; + } else if (compare > 0) { + break; + } + + index++; + } + if (index != -1) { + transactionTreeTickers.add(index, ticker); + } + + // Update the next level of the transaction tree + // for the given ticker + ListListModel<Transaction> t = + transactionListListModelsByTicker.get(ticker); + if (t == null) { + t = new ListListModel<Transaction>(); + transactionListListModelsByTicker.put(ticker, t); + } + t.getList().add(result); + } + }); + } + } + }); + + // Add components to the page. + HorizontalPanel hPanel = new HorizontalPanel(); + hPanel.add(new HTML("<b>Available cash:</b>")); + hPanel.add(cashLabel); + RootPanel.get().add(hPanel); + + RootPanel.get().add(resultsTable); + RootPanel.get().add(new HTML("<hr>")); + RootPanel.get().add(favoritesTable); + RootPanel.get().add(new HTML("<hr>")); + RootPanel.get().add(transactionTable); + RootPanel.get().add(new HTML("<hr>")); + RootPanel.get().add(transactionTree); + + // Add a handler to send the name to the server + queryField.addKeyUpHandler(new KeyUpHandler() { + public void onKeyUp(KeyUpEvent event) { + update(); + } + }); + + update(); + } + + /** + * Set or unset a ticker symbol as a 'favorite'. + * + * @param ticker the ticker symbol + * @param favorite if true, make the stock a favorite + */ + public void setFavorite(String ticker, boolean favorite) { + if (favorite) { + dataService.addFavorite(ticker, new AsyncCallback<Void>() { + public void onFailure(Throwable caught) { + Window.alert("Error adding favorite"); + } + + public void onSuccess(Void result) { + // do nothing + } + }); + } else { + dataService.removeFavorite(ticker, new AsyncCallback<Void>() { + public void onFailure(Throwable caught) { + Window.alert("Error removing favorite"); + } + + public void onSuccess(Void result) { + // do nothing + } + }); + } + } + + /** + * Process the {@link StockResponse} from the server. + * + * @param response the stock response + */ + private void processStockResponse(StockResponse response) { + // Update the search list. + StockQuoteList searchResults = response.getSearchResults(); + searchListModel.updateDataSize(response.getNumSearchResults(), true); + searchListModel.updateViewData(searchResults.getStartIndex(), + searchResults.size(), searchResults); + + // Update the favorites list. + StockQuoteList favorites = response.getFavorites(); + favoritesListModel.updateDataSize(response.getNumFavorites(), true); + favoritesListModel.updateViewData(favorites.getStartIndex(), + favorites.size(), favorites); + + // Update available cash. + int cash = response.getCash(); + cashLabel.setText(getFormattedPrice(cash)); + buySellPopup.setAvailableCash(cash); + + // Restart the update timer. + updateTimer.schedule(UPDATE_DELAY); + } + + /** + * Request data from the server using the last query string. + */ + private void update() { + updateTimer.cancel(); + + Range[] searchRanges = searchListModel.getRanges(); + Range[] favoritesRanges = favoritesListModel.getRanges(); + + if (searchRanges == null || searchRanges.length == 0 + || favoritesRanges == null || favoritesRanges.length == 0) { + return; + } + + String searchQuery = queryField.getText(); + StockRequest request = new StockRequest(searchQuery, searchRanges[0], + favoritesRanges[0]); + dataService.getStockQuotes(request, new AsyncCallback<StockResponse>() { + public void onFailure(Throwable caught) { + String message = caught.getMessage(); + if (message.contains("Not logged in")) { + // Force the user to login. + Window.Location.reload(); + } else { + Window.alert("ERROR: " + caught.getMessage()); + updateTimer.schedule(UPDATE_DELAY); + } + } + + public void onSuccess(StockResponse result) { + processStockResponse(result); + } + }); + } +}
diff --git a/bikeshed/src/com/google/gwt/sample/stocks/client/StockService.java b/bikeshed/src/com/google/gwt/bikeshed/sample/stocks/client/StockService.java similarity index 81% rename from bikeshed/src/com/google/gwt/sample/stocks/client/StockService.java rename to bikeshed/src/com/google/gwt/bikeshed/sample/stocks/client/StockService.java index 23299e9..7589ca88 100644 --- a/bikeshed/src/com/google/gwt/sample/stocks/client/StockService.java +++ b/bikeshed/src/com/google/gwt/bikeshed/sample/stocks/client/StockService.java
@@ -13,11 +13,11 @@ * License for the specific language governing permissions and limitations under * the License. */ -package com.google.gwt.sample.stocks.client; +package com.google.gwt.bikeshed.sample.stocks.client; -import com.google.gwt.sample.stocks.shared.StockRequest; -import com.google.gwt.sample.stocks.shared.StockResponse; -import com.google.gwt.sample.stocks.shared.Transaction; +import com.google.gwt.bikeshed.sample.stocks.shared.StockRequest; +import com.google.gwt.bikeshed.sample.stocks.shared.StockResponse; +import com.google.gwt.bikeshed.sample.stocks.shared.Transaction; import com.google.gwt.user.client.rpc.RemoteService; import com.google.gwt.user.client.rpc.RemoteServiceRelativePath;
diff --git a/bikeshed/src/com/google/gwt/sample/stocks/client/StockServiceAsync.java b/bikeshed/src/com/google/gwt/bikeshed/sample/stocks/client/StockServiceAsync.java similarity index 80% rename from bikeshed/src/com/google/gwt/sample/stocks/client/StockServiceAsync.java rename to bikeshed/src/com/google/gwt/bikeshed/sample/stocks/client/StockServiceAsync.java index 0eda48f..88a6b56 100644 --- a/bikeshed/src/com/google/gwt/sample/stocks/client/StockServiceAsync.java +++ b/bikeshed/src/com/google/gwt/bikeshed/sample/stocks/client/StockServiceAsync.java
@@ -13,11 +13,11 @@ * License for the specific language governing permissions and limitations under * the License. */ -package com.google.gwt.sample.stocks.client; +package com.google.gwt.bikeshed.sample.stocks.client; -import com.google.gwt.sample.stocks.shared.StockRequest; -import com.google.gwt.sample.stocks.shared.StockResponse; -import com.google.gwt.sample.stocks.shared.Transaction; +import com.google.gwt.bikeshed.sample.stocks.shared.StockRequest; +import com.google.gwt.bikeshed.sample.stocks.shared.StockResponse; +import com.google.gwt.bikeshed.sample.stocks.shared.Transaction; import com.google.gwt.user.client.rpc.AsyncCallback; /**
diff --git a/bikeshed/src/com/google/gwt/bikeshed/sample/stocks/client/TransactionTreeViewModel.java b/bikeshed/src/com/google/gwt/bikeshed/sample/stocks/client/TransactionTreeViewModel.java new file mode 100644 index 0000000..6f95667 --- /dev/null +++ b/bikeshed/src/com/google/gwt/bikeshed/sample/stocks/client/TransactionTreeViewModel.java
@@ -0,0 +1,73 @@ +/* + * Copyright 2010 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.bikeshed.sample.stocks.client; + +import com.google.gwt.bikeshed.cells.client.Cell; +import com.google.gwt.bikeshed.cells.client.TextCell; +import com.google.gwt.bikeshed.list.shared.ListListModel; +import com.google.gwt.bikeshed.sample.stocks.shared.Transaction; +import com.google.gwt.bikeshed.tree.client.TreeNodeView; +import com.google.gwt.bikeshed.tree.client.TreeViewModel; + +import java.util.Map; + +/** + * A TreeViewModel for a tree with a hidden root node of null, + * a first level containing ticker symbol Strings, and a second + * level containing Transactions. + */ +class TransactionTreeViewModel implements TreeViewModel { + + static class TransactionCell extends Cell<Transaction> { + + @Override + public void render(Transaction value, StringBuilder sb) { + sb.append(value.toString()); + } + } + + private static final Cell<String> TEXT_CELL = new TextCell(); + + private static final Cell<Transaction> TRANSACTION_CELL = + new TransactionCell(); + + private ListListModel<String> tickersListModel; + private Map<String, ListListModel<Transaction>> transactionListListModelsByTicker; + + public TransactionTreeViewModel(ListListModel<String> tickersListModel, + Map<String, ListListModel<Transaction>> transactionListListModelsByTicker) { + this.tickersListModel = tickersListModel; + this.transactionListListModelsByTicker = transactionListListModelsByTicker; + } + + public <T> NodeInfo<?> getNodeInfo(T value, TreeNodeView<T> treeNodeView) { + if (value == null) { + return new TreeViewModel.DefaultNodeInfo<String>(tickersListModel, + TEXT_CELL); + } else if (value instanceof String) { + return new TreeViewModel.DefaultNodeInfo<Transaction>( + transactionListListModelsByTicker.get(value), TRANSACTION_CELL); + } else if (value instanceof Transaction) { + return null; + } + + throw new IllegalArgumentException(value.toString()); + } + + public boolean isLeaf(Object value) { + return value instanceof Transaction; + } +} \ No newline at end of file
diff --git a/bikeshed/src/com/google/gwt/sample/stocks/server/NasdaqStocks.java b/bikeshed/src/com/google/gwt/bikeshed/sample/stocks/server/NasdaqStocks.java similarity index 99% rename from bikeshed/src/com/google/gwt/sample/stocks/server/NasdaqStocks.java rename to bikeshed/src/com/google/gwt/bikeshed/sample/stocks/server/NasdaqStocks.java index b1671f6..f1c9022 100644 --- a/bikeshed/src/com/google/gwt/sample/stocks/server/NasdaqStocks.java +++ b/bikeshed/src/com/google/gwt/bikeshed/sample/stocks/server/NasdaqStocks.java
@@ -13,7 +13,7 @@ * License for the specific language governing permissions and limitations under * the License. */ -package com.google.gwt.sample.stocks.server; +package com.google.gwt.bikeshed.sample.stocks.server; /** * The list of all Nasdaq stocks (note: this is a snapshot plus
diff --git a/bikeshed/src/com/google/gwt/sample/stocks/server/PlayerStatus.java b/bikeshed/src/com/google/gwt/bikeshed/sample/stocks/server/PlayerStatus.java similarity index 98% rename from bikeshed/src/com/google/gwt/sample/stocks/server/PlayerStatus.java rename to bikeshed/src/com/google/gwt/bikeshed/sample/stocks/server/PlayerStatus.java index 1893f56..c9e3dcd 100644 --- a/bikeshed/src/com/google/gwt/sample/stocks/server/PlayerStatus.java +++ b/bikeshed/src/com/google/gwt/bikeshed/sample/stocks/server/PlayerStatus.java
@@ -13,7 +13,7 @@ * License for the specific language governing permissions and limitations under * the License. */ -package com.google.gwt.sample.stocks.server; +package com.google.gwt.bikeshed.sample.stocks.server; import java.util.HashMap; import java.util.TreeSet;
diff --git a/bikeshed/src/com/google/gwt/sample/stocks/server/StockServiceImpl.java b/bikeshed/src/com/google/gwt/bikeshed/sample/stocks/server/StockServiceImpl.java similarity index 93% rename from bikeshed/src/com/google/gwt/sample/stocks/server/StockServiceImpl.java rename to bikeshed/src/com/google/gwt/bikeshed/sample/stocks/server/StockServiceImpl.java index b268e5b..13672fc 100644 --- a/bikeshed/src/com/google/gwt/sample/stocks/server/StockServiceImpl.java +++ b/bikeshed/src/com/google/gwt/bikeshed/sample/stocks/server/StockServiceImpl.java
@@ -13,19 +13,19 @@ * License for the specific language governing permissions and limitations under * the License. */ -package com.google.gwt.sample.stocks.server; +package com.google.gwt.bikeshed.sample.stocks.server; import com.google.appengine.api.users.User; import com.google.appengine.api.users.UserService; import com.google.appengine.api.users.UserServiceFactory; -import com.google.gwt.list.shared.Range; -import com.google.gwt.list.shared.AbstractListModel.DefaultRange; -import com.google.gwt.sample.stocks.client.StockService; -import com.google.gwt.sample.stocks.shared.StockQuote; -import com.google.gwt.sample.stocks.shared.StockQuoteList; -import com.google.gwt.sample.stocks.shared.StockRequest; -import com.google.gwt.sample.stocks.shared.StockResponse; -import com.google.gwt.sample.stocks.shared.Transaction; +import com.google.gwt.bikeshed.list.shared.Range; +import com.google.gwt.bikeshed.list.shared.AbstractListModel.DefaultRange; +import com.google.gwt.bikeshed.sample.stocks.client.StockService; +import com.google.gwt.bikeshed.sample.stocks.shared.StockQuote; +import com.google.gwt.bikeshed.sample.stocks.shared.StockQuoteList; +import com.google.gwt.bikeshed.sample.stocks.shared.StockRequest; +import com.google.gwt.bikeshed.sample.stocks.shared.StockResponse; +import com.google.gwt.bikeshed.sample.stocks.shared.Transaction; import com.google.gwt.user.server.rpc.RemoteServiceServlet; import java.io.IOException;
diff --git a/bikeshed/src/com/google/gwt/sample/stocks/shared/StockQuote.java b/bikeshed/src/com/google/gwt/bikeshed/sample/stocks/shared/StockQuote.java similarity index 97% rename from bikeshed/src/com/google/gwt/sample/stocks/shared/StockQuote.java rename to bikeshed/src/com/google/gwt/bikeshed/sample/stocks/shared/StockQuote.java index 678c752..4e3df91 100644 --- a/bikeshed/src/com/google/gwt/sample/stocks/shared/StockQuote.java +++ b/bikeshed/src/com/google/gwt/bikeshed/sample/stocks/shared/StockQuote.java
@@ -13,7 +13,7 @@ * License for the specific language governing permissions and limitations under * the License. */ -package com.google.gwt.sample.stocks.shared; +package com.google.gwt.bikeshed.sample.stocks.shared; import java.io.Serializable;
diff --git a/bikeshed/src/com/google/gwt/sample/stocks/shared/StockQuoteList.java b/bikeshed/src/com/google/gwt/bikeshed/sample/stocks/shared/StockQuoteList.java similarity index 94% rename from bikeshed/src/com/google/gwt/sample/stocks/shared/StockQuoteList.java rename to bikeshed/src/com/google/gwt/bikeshed/sample/stocks/shared/StockQuoteList.java index fff7c51..7fa900a 100644 --- a/bikeshed/src/com/google/gwt/sample/stocks/shared/StockQuoteList.java +++ b/bikeshed/src/com/google/gwt/bikeshed/sample/stocks/shared/StockQuoteList.java
@@ -13,7 +13,7 @@ * License for the specific language governing permissions and limitations under * the License. */ -package com.google.gwt.sample.stocks.shared; +package com.google.gwt.bikeshed.sample.stocks.shared; import java.util.ArrayList;
diff --git a/bikeshed/src/com/google/gwt/sample/stocks/shared/StockRequest.java b/bikeshed/src/com/google/gwt/bikeshed/sample/stocks/shared/StockRequest.java similarity index 92% rename from bikeshed/src/com/google/gwt/sample/stocks/shared/StockRequest.java rename to bikeshed/src/com/google/gwt/bikeshed/sample/stocks/shared/StockRequest.java index c76ca2c..d7724b3 100644 --- a/bikeshed/src/com/google/gwt/sample/stocks/shared/StockRequest.java +++ b/bikeshed/src/com/google/gwt/bikeshed/sample/stocks/shared/StockRequest.java
@@ -13,9 +13,9 @@ * License for the specific language governing permissions and limitations under * the License. */ -package com.google.gwt.sample.stocks.shared; +package com.google.gwt.bikeshed.sample.stocks.shared; -import com.google.gwt.list.shared.Range; +import com.google.gwt.bikeshed.list.shared.Range; import java.io.Serializable;
diff --git a/bikeshed/src/com/google/gwt/sample/stocks/shared/StockResponse.java b/bikeshed/src/com/google/gwt/bikeshed/sample/stocks/shared/StockResponse.java similarity index 96% rename from bikeshed/src/com/google/gwt/sample/stocks/shared/StockResponse.java rename to bikeshed/src/com/google/gwt/bikeshed/sample/stocks/shared/StockResponse.java index 83091f0..1df16ab 100644 --- a/bikeshed/src/com/google/gwt/sample/stocks/shared/StockResponse.java +++ b/bikeshed/src/com/google/gwt/bikeshed/sample/stocks/shared/StockResponse.java
@@ -13,7 +13,7 @@ * License for the specific language governing permissions and limitations under * the License. */ -package com.google.gwt.sample.stocks.shared; +package com.google.gwt.bikeshed.sample.stocks.shared; import java.io.Serializable;
diff --git a/bikeshed/src/com/google/gwt/sample/stocks/shared/Transaction.java b/bikeshed/src/com/google/gwt/bikeshed/sample/stocks/shared/Transaction.java similarity index 96% rename from bikeshed/src/com/google/gwt/sample/stocks/shared/Transaction.java rename to bikeshed/src/com/google/gwt/bikeshed/sample/stocks/shared/Transaction.java index 10b7df8..0b637a6 100644 --- a/bikeshed/src/com/google/gwt/sample/stocks/shared/Transaction.java +++ b/bikeshed/src/com/google/gwt/bikeshed/sample/stocks/shared/Transaction.java
@@ -13,7 +13,7 @@ * License for the specific language governing permissions and limitations under * the License. */ -package com.google.gwt.sample.stocks.shared; +package com.google.gwt.bikeshed.sample.stocks.shared; import com.google.gwt.i18n.client.NumberFormat;
diff --git a/bikeshed/src/com/google/gwt/sample/tree/Tree.gwt.xml b/bikeshed/src/com/google/gwt/bikeshed/sample/tree/TreeSample.gwt.xml similarity index 84% rename from bikeshed/src/com/google/gwt/sample/tree/Tree.gwt.xml rename to bikeshed/src/com/google/gwt/bikeshed/sample/tree/TreeSample.gwt.xml index 31e9531..802fdd7 100644 --- a/bikeshed/src/com/google/gwt/sample/tree/Tree.gwt.xml +++ b/bikeshed/src/com/google/gwt/bikeshed/sample/tree/TreeSample.gwt.xml
@@ -3,7 +3,8 @@ <module rename-to='tree'> <!-- Inherit the core Web Toolkit stuff. --> <inherits name='com.google.gwt.user.User'/> - <inherits name='com.google.gwt.list.List'/> + <inherits name='com.google.gwt.bikeshed.list.List'/> + <inherits name='com.google.gwt.bikeshed.tree.Tree'/> <!-- Inherit the default GWT style sheet. You can change --> <!-- the theme of your GWT application by uncommenting --> @@ -15,7 +16,7 @@ <!-- Other module inherits --> <!-- Specify the app entry point class. --> - <entry-point class='com.google.gwt.sample.tree.client.TreeEntryPoint'/> + <entry-point class='com.google.gwt.bikeshed.sample.tree.client.TreeSample'/> <!-- Specify the paths for translatable code --> <source path='client'/>
diff --git a/bikeshed/src/com/google/gwt/sample/tree/client/MyTreeViewModel.java b/bikeshed/src/com/google/gwt/bikeshed/sample/tree/client/MyTreeViewModel.java similarity index 89% rename from bikeshed/src/com/google/gwt/sample/tree/client/MyTreeViewModel.java rename to bikeshed/src/com/google/gwt/bikeshed/sample/tree/client/MyTreeViewModel.java index d0bda7a..89474f5 100644 --- a/bikeshed/src/com/google/gwt/sample/tree/client/MyTreeViewModel.java +++ b/bikeshed/src/com/google/gwt/bikeshed/sample/tree/client/MyTreeViewModel.java
@@ -13,14 +13,16 @@ * License for the specific language governing permissions and limitations under * the License. */ -package com.google.gwt.sample.tree.client; +package com.google.gwt.bikeshed.sample.tree.client; -import com.google.gwt.cells.client.ButtonCell; -import com.google.gwt.cells.client.Cell; -import com.google.gwt.cells.client.ValueUpdater; +import com.google.gwt.bikeshed.cells.client.ButtonCell; +import com.google.gwt.bikeshed.cells.client.Cell; +import com.google.gwt.bikeshed.cells.client.ValueUpdater; +import com.google.gwt.bikeshed.list.shared.AsyncListModel; +import com.google.gwt.bikeshed.list.shared.ListModel; +import com.google.gwt.bikeshed.tree.client.TreeNodeView; +import com.google.gwt.bikeshed.tree.client.TreeViewModel; import com.google.gwt.core.client.GWT; -import com.google.gwt.list.shared.AsyncListModel; -import com.google.gwt.list.shared.ListModel; import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback;
diff --git a/bikeshed/src/com/google/gwt/sample/tree/client/TreeEntryPoint.java b/bikeshed/src/com/google/gwt/bikeshed/sample/tree/client/TreeSample.java similarity index 85% rename from bikeshed/src/com/google/gwt/sample/tree/client/TreeEntryPoint.java rename to bikeshed/src/com/google/gwt/bikeshed/sample/tree/client/TreeSample.java index 90d1372..5a59f8b 100644 --- a/bikeshed/src/com/google/gwt/sample/tree/client/TreeEntryPoint.java +++ b/bikeshed/src/com/google/gwt/bikeshed/sample/tree/client/TreeSample.java
@@ -13,15 +13,16 @@ * License for the specific language governing permissions and limitations under * the License. */ -package com.google.gwt.sample.tree.client; +package com.google.gwt.bikeshed.sample.tree.client; +import com.google.gwt.bikeshed.tree.client.TreeView; import com.google.gwt.core.client.EntryPoint; import com.google.gwt.user.client.ui.RootPanel; /** * A demo of the asynchronous Tree model. */ -public class TreeEntryPoint implements EntryPoint { +public class TreeSample implements EntryPoint { public void onModuleLoad() { TreeView tree = new TreeView(new MyTreeViewModel(), "...");
diff --git a/bikeshed/src/com/google/gwt/sample/tree/client/TreeService.java b/bikeshed/src/com/google/gwt/bikeshed/sample/tree/client/TreeService.java similarity index 94% rename from bikeshed/src/com/google/gwt/sample/tree/client/TreeService.java rename to bikeshed/src/com/google/gwt/bikeshed/sample/tree/client/TreeService.java index 473be0e..2b2f7ae 100644 --- a/bikeshed/src/com/google/gwt/sample/tree/client/TreeService.java +++ b/bikeshed/src/com/google/gwt/bikeshed/sample/tree/client/TreeService.java
@@ -13,7 +13,7 @@ * License for the specific language governing permissions and limitations under * the License. */ -package com.google.gwt.sample.tree.client; +package com.google.gwt.bikeshed.sample.tree.client; import com.google.gwt.user.client.rpc.RemoteService; import com.google.gwt.user.client.rpc.RemoteServiceRelativePath;
diff --git a/bikeshed/src/com/google/gwt/sample/tree/client/TreeServiceAsync.java b/bikeshed/src/com/google/gwt/bikeshed/sample/tree/client/TreeServiceAsync.java similarity index 93% rename from bikeshed/src/com/google/gwt/sample/tree/client/TreeServiceAsync.java rename to bikeshed/src/com/google/gwt/bikeshed/sample/tree/client/TreeServiceAsync.java index 71d3bee..8f1bc03 100644 --- a/bikeshed/src/com/google/gwt/sample/tree/client/TreeServiceAsync.java +++ b/bikeshed/src/com/google/gwt/bikeshed/sample/tree/client/TreeServiceAsync.java
@@ -13,7 +13,7 @@ * License for the specific language governing permissions and limitations under * the License. */ -package com.google.gwt.sample.tree.client; +package com.google.gwt.bikeshed.sample.tree.client; import com.google.gwt.user.client.rpc.AsyncCallback;
diff --git a/bikeshed/src/com/google/gwt/sample/tree/server/Dictionary.java b/bikeshed/src/com/google/gwt/bikeshed/sample/tree/server/Dictionary.java similarity index 99% rename from bikeshed/src/com/google/gwt/sample/tree/server/Dictionary.java rename to bikeshed/src/com/google/gwt/bikeshed/sample/tree/server/Dictionary.java index 0a1b0eb..8e5b4e6 100644 --- a/bikeshed/src/com/google/gwt/sample/tree/server/Dictionary.java +++ b/bikeshed/src/com/google/gwt/bikeshed/sample/tree/server/Dictionary.java
@@ -13,7 +13,7 @@ * License for the specific language governing permissions and limitations under * the License. */ -package com.google.gwt.sample.tree.server; +package com.google.gwt.bikeshed.sample.tree.server; import java.util.ArrayList; import java.util.List;
diff --git a/bikeshed/src/com/google/gwt/sample/tree/server/TreeServiceImpl.java b/bikeshed/src/com/google/gwt/bikeshed/sample/tree/server/TreeServiceImpl.java similarity index 89% rename from bikeshed/src/com/google/gwt/sample/tree/server/TreeServiceImpl.java rename to bikeshed/src/com/google/gwt/bikeshed/sample/tree/server/TreeServiceImpl.java index b1c585d..5c468b7 100644 --- a/bikeshed/src/com/google/gwt/sample/tree/server/TreeServiceImpl.java +++ b/bikeshed/src/com/google/gwt/bikeshed/sample/tree/server/TreeServiceImpl.java
@@ -13,9 +13,9 @@ * License for the specific language governing permissions and limitations under * the License. */ -package com.google.gwt.sample.tree.server; +package com.google.gwt.bikeshed.sample.tree.server; -import com.google.gwt.sample.tree.client.TreeService; +import com.google.gwt.bikeshed.sample.tree.client.TreeService; import com.google.gwt.user.server.rpc.RemoteServiceServlet; import java.util.List;
diff --git a/bikeshed/src/com/google/gwt/list/List.gwt.xml b/bikeshed/src/com/google/gwt/bikeshed/tree/Tree.gwt.xml similarity index 85% copy from bikeshed/src/com/google/gwt/list/List.gwt.xml copy to bikeshed/src/com/google/gwt/bikeshed/tree/Tree.gwt.xml index 5a4b63d..2bddb52 100644 --- a/bikeshed/src/com/google/gwt/list/List.gwt.xml +++ b/bikeshed/src/com/google/gwt/bikeshed/tree/Tree.gwt.xml
@@ -15,7 +15,8 @@ --> <module> <inherits name='com.google.gwt.user.User'/> - <inherits name='com.google.gwt.cells.Cells'/> + <inherits name='com.google.gwt.bikeshed.cells.Cells'/> + <inherits name='com.google.gwt.bikeshed.list.List'/> <source path="shared" /> <source path="client" /> </module>
diff --git a/bikeshed/src/com/google/gwt/sample/tree/client/TreeNodeView.java b/bikeshed/src/com/google/gwt/bikeshed/tree/client/TreeNodeView.java similarity index 95% rename from bikeshed/src/com/google/gwt/sample/tree/client/TreeNodeView.java rename to bikeshed/src/com/google/gwt/bikeshed/tree/client/TreeNodeView.java index e159107..c82a8f3 100644 --- a/bikeshed/src/com/google/gwt/sample/tree/client/TreeNodeView.java +++ b/bikeshed/src/com/google/gwt/bikeshed/tree/client/TreeNodeView.java
@@ -13,21 +13,21 @@ * License for the specific language governing permissions and limitations under * the License. */ -package com.google.gwt.sample.tree.client; +package com.google.gwt.bikeshed.tree.client; -import com.google.gwt.cells.client.Cell; +import com.google.gwt.bikeshed.cells.client.Cell; +import com.google.gwt.bikeshed.list.shared.ListEvent; +import com.google.gwt.bikeshed.list.shared.ListHandler; +import com.google.gwt.bikeshed.list.shared.ListModel; +import com.google.gwt.bikeshed.list.shared.ListRegistration; +import com.google.gwt.bikeshed.list.shared.SizeChangeEvent; +import com.google.gwt.bikeshed.tree.client.TreeViewModel.NodeInfo; import com.google.gwt.dom.client.Document; import com.google.gwt.dom.client.Element; import com.google.gwt.dom.client.NativeEvent; import com.google.gwt.dom.client.Style.Display; import com.google.gwt.dom.client.Style.Overflow; import com.google.gwt.dom.client.Style.Position; -import com.google.gwt.list.shared.ListEvent; -import com.google.gwt.list.shared.ListHandler; -import com.google.gwt.list.shared.ListModel; -import com.google.gwt.list.shared.ListRegistration; -import com.google.gwt.list.shared.SizeChangeEvent; -import com.google.gwt.sample.tree.client.TreeViewModel.NodeInfo; import com.google.gwt.user.client.ui.Composite; import java.util.ArrayList;
diff --git a/bikeshed/src/com/google/gwt/sample/tree/client/TreeView.java b/bikeshed/src/com/google/gwt/bikeshed/tree/client/TreeView.java similarity index 99% rename from bikeshed/src/com/google/gwt/sample/tree/client/TreeView.java rename to bikeshed/src/com/google/gwt/bikeshed/tree/client/TreeView.java index b640ef4..62b128b 100644 --- a/bikeshed/src/com/google/gwt/sample/tree/client/TreeView.java +++ b/bikeshed/src/com/google/gwt/bikeshed/tree/client/TreeView.java
@@ -13,7 +13,7 @@ * License for the specific language governing permissions and limitations under * the License. */ -package com.google.gwt.sample.tree.client; +package com.google.gwt.bikeshed.tree.client; import com.google.gwt.animation.client.Animation; import com.google.gwt.core.client.GWT;
diff --git a/bikeshed/src/com/google/gwt/sample/tree/client/TreeViewModel.java b/bikeshed/src/com/google/gwt/bikeshed/tree/client/TreeViewModel.java similarity index 93% rename from bikeshed/src/com/google/gwt/sample/tree/client/TreeViewModel.java rename to bikeshed/src/com/google/gwt/bikeshed/tree/client/TreeViewModel.java index d45a9e9..78dc7e1 100644 --- a/bikeshed/src/com/google/gwt/sample/tree/client/TreeViewModel.java +++ b/bikeshed/src/com/google/gwt/bikeshed/tree/client/TreeViewModel.java
@@ -13,13 +13,13 @@ * License for the specific language governing permissions and limitations under * the License. */ -package com.google.gwt.sample.tree.client; +package com.google.gwt.bikeshed.tree.client; -import com.google.gwt.cells.client.Cell; -import com.google.gwt.cells.client.ValueUpdater; +import com.google.gwt.bikeshed.cells.client.Cell; +import com.google.gwt.bikeshed.cells.client.ValueUpdater; +import com.google.gwt.bikeshed.list.shared.ListModel; import com.google.gwt.dom.client.Element; import com.google.gwt.dom.client.NativeEvent; -import com.google.gwt.list.shared.ListModel; /** * A model of a tree. @@ -116,6 +116,5 @@ * @param value the value at the node * @return true if the node is known to be a leaf node, false if not */ - boolean isLeaf(Object value); }
diff --git a/bikeshed/src/com/google/gwt/sample/tree/client/treeClosed.gif b/bikeshed/src/com/google/gwt/bikeshed/tree/client/treeClosed.gif similarity index 100% rename from bikeshed/src/com/google/gwt/sample/tree/client/treeClosed.gif rename to bikeshed/src/com/google/gwt/bikeshed/tree/client/treeClosed.gif Binary files differ
diff --git a/bikeshed/src/com/google/gwt/sample/tree/client/treeOpen.gif b/bikeshed/src/com/google/gwt/bikeshed/tree/client/treeOpen.gif similarity index 100% rename from bikeshed/src/com/google/gwt/sample/tree/client/treeOpen.gif rename to bikeshed/src/com/google/gwt/bikeshed/tree/client/treeOpen.gif Binary files differ
diff --git a/bikeshed/src/com/google/gwt/sample/stocks/client/Stocks.java b/bikeshed/src/com/google/gwt/sample/stocks/client/Stocks.java deleted file mode 100644 index e995851..0000000 --- a/bikeshed/src/com/google/gwt/sample/stocks/client/Stocks.java +++ /dev/null
@@ -1,383 +0,0 @@ -/* - * Copyright 2010 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.sample.stocks.client; - -import com.google.gwt.cells.client.ButtonCell; -import com.google.gwt.cells.client.CheckboxCell; -import com.google.gwt.cells.client.CurrencyCell; -import com.google.gwt.cells.client.FieldUpdater; -import com.google.gwt.cells.client.TextCell; -import com.google.gwt.core.client.EntryPoint; -import com.google.gwt.core.client.GWT; -import com.google.gwt.event.dom.client.KeyUpEvent; -import com.google.gwt.event.dom.client.KeyUpHandler; -import com.google.gwt.event.logical.shared.CloseEvent; -import com.google.gwt.event.logical.shared.CloseHandler; -import com.google.gwt.i18n.client.NumberFormat; -import com.google.gwt.list.client.Column; -import com.google.gwt.list.client.PagingTableListView; -import com.google.gwt.list.shared.AsyncListModel; -import com.google.gwt.list.shared.ListListModel; -import com.google.gwt.list.shared.Range; -import com.google.gwt.list.shared.AsyncListModel.DataSource; -import com.google.gwt.sample.stocks.shared.StockQuote; -import com.google.gwt.sample.stocks.shared.StockQuoteList; -import com.google.gwt.sample.stocks.shared.StockRequest; -import com.google.gwt.sample.stocks.shared.StockResponse; -import com.google.gwt.sample.stocks.shared.Transaction; -import com.google.gwt.user.client.Timer; -import com.google.gwt.user.client.Window; -import com.google.gwt.user.client.rpc.AsyncCallback; -import com.google.gwt.user.client.ui.HTML; -import com.google.gwt.user.client.ui.HorizontalPanel; -import com.google.gwt.user.client.ui.Label; -import com.google.gwt.user.client.ui.PopupPanel; -import com.google.gwt.user.client.ui.RootPanel; -import com.google.gwt.user.client.ui.TextBox; - -import java.util.List; - -/** - * Entry point classes define <code>onModuleLoad()</code>. - */ -public class Stocks implements EntryPoint { - - /** - * The delay between updates in milliseconds. - */ - private static final int UPDATE_DELAY = 5000; - - private Column<StockQuote, String> buyColumn = new Column<StockQuote, String>( - new ButtonCell()) { - @Override - protected String getValue(StockQuote object) { - return "Buy"; - } - }; - - /** - * The popup used to purchase stock. - */ - private BuySellPopup buySellPopup = new BuySellPopup(); - - private final Label cashLabel = new Label(); - - /** - * The {@link StockService} used to retrieve data. - */ - private final StockServiceAsync dataService = GWT.create(StockService.class); - - private final Label errorLabel = new Label(); - - private Column<StockQuote, Boolean> favoriteColumn = new Column<StockQuote, Boolean>( - new CheckboxCell()) { - @Override - protected Boolean getValue(StockQuote object) { - return object.isFavorite(); - } - }; - - private AsyncListModel<StockQuote> favoritesListModel; - - private PagingTableListView<StockQuote> favoritesTable; - private Column<StockQuote, String> nameColumn = new Column<StockQuote, String>( - new TextCell()) { - @Override - protected String getValue(StockQuote object) { - return object.getName(); - } - }; - - private Column<StockQuote, Integer> priceColumn = new Column<StockQuote, Integer>( - new CurrencyCell()) { - @Override - protected Integer getValue(StockQuote object) { - return object.getPrice(); - } - }; - - private final TextBox queryField = new TextBox(); - - private PagingTableListView<StockQuote> resultsTable; - - private AsyncListModel<StockQuote> searchListModel; - - private Column<StockQuote, String> sellColumn = new Column<StockQuote, String>( - new ButtonCell()) { - @Override - protected String getValue(StockQuote object) { - return "Sell"; - } - }; - - private Column<StockQuote, String> sharesColumn = new Column<StockQuote, String>( - new TextCell()) { - @Override - protected String getValue(StockQuote object) { - return "" + object.getSharesOwned(); - } - }; - - private Column<Transaction, String> subtotalColumn = new Column<Transaction, String>( - new TextCell()) { - @Override - protected String getValue(Transaction object) { - int price = object.getActualPrice() * object.getQuantity(); - return (object.isBuy() ? " (" : " ") + getFormattedPrice(price) + - (object.isBuy() ? ")" : ""); - } - }; - - private Column<StockQuote, String> tickerColumn = new Column<StockQuote, String>( - new TextCell()) { - @Override - protected String getValue(StockQuote object) { - return object.getTicker(); - } - }; - - private Column<Transaction, String> transactionColumn = new Column<Transaction, String>( - new TextCell()) { - @Override - protected String getValue(Transaction object) { - return object.toString(); - } - }; - - private ListListModel<Transaction> transactionListModel; - - private List<Transaction> transactions; - - private PagingTableListView<Transaction> transactionTable; - - /** - * The timer used to update the stock quotes. - */ - private Timer updateTimer = new Timer() { - @Override - public void run() { - update(); - } - }; - - /** - * This is the entry point method. - */ - public void onModuleLoad() { - queryField.setText("G"); - - // Add the nameField and sendButton to the RootPanel - // Use RootPanel.get() to get the entire body element - RootPanel.get("queryFieldContainer").add(queryField); - RootPanel.get("errorLabelContainer").add(errorLabel); - - // Focus the cursor on the name field when the app loads - queryField.setFocus(true); - queryField.selectAll(); - - // Create the list models - searchListModel = new AsyncListModel<StockQuote>( - new DataSource<StockQuote>() { - public void requestData(AsyncListModel<StockQuote> listModel) { - update(); - } - }); - - favoritesListModel = new AsyncListModel<StockQuote>( - new DataSource<StockQuote>() { - public void requestData(AsyncListModel<StockQuote> listModel) { - update(); - } - }); - - transactionListModel = new ListListModel<Transaction>(); - transactions = transactionListModel.getList(); - - // Create the results table. - resultsTable = new PagingTableListView<StockQuote>(searchListModel, 10); - resultsTable.addColumn(favoriteColumn); - resultsTable.addColumn(tickerColumn); - resultsTable.addColumn(nameColumn); - resultsTable.addColumn(priceColumn); - resultsTable.addColumn(buyColumn); - - favoritesTable = new PagingTableListView<StockQuote>(favoritesListModel, 10); - favoritesTable.addColumn(tickerColumn); - favoritesTable.addColumn(priceColumn); - favoritesTable.addColumn(sharesColumn); - favoritesTable.addColumn(buyColumn); - favoritesTable.addColumn(sellColumn); - - transactionTable = new PagingTableListView<Transaction>(transactionListModel, 10); - transactionTable.addColumn(transactionColumn); - transactionTable.addColumn(subtotalColumn); - - favoriteColumn.setFieldUpdater(new FieldUpdater<StockQuote, Boolean>() { - public void update(StockQuote object, Boolean value) { - setFavorite(object.getTicker(), value); - } - }); - - buyColumn.setFieldUpdater(new FieldUpdater<StockQuote, String>() { - public void update(StockQuote object, String value) { - buySellPopup.setStockQuote(object, true); - buySellPopup.center(); - } - }); - - sellColumn.setFieldUpdater(new FieldUpdater<StockQuote, String>() { - public void update(StockQuote object, String value) { - buySellPopup.setStockQuote(object, false); - buySellPopup.center(); - } - }); - - buySellPopup.addCloseHandler(new CloseHandler<PopupPanel>() { - public void onClose(CloseEvent<PopupPanel> event) { - Transaction t = buySellPopup.getTransaction(); - if (t != null) { - dataService.transact(t, new AsyncCallback<Transaction>() { - public void onFailure(Throwable caught) { - Window.alert("Error: " + caught.getMessage()); - } - - public void onSuccess(Transaction result) { - transactions.add(0, result); - update(); - } - }); - } - } - }); - - // Add components to the page. - HorizontalPanel hPanel = new HorizontalPanel(); - hPanel.add(new HTML("<b>Available cash:</b>")); - hPanel.add(cashLabel); - RootPanel.get().add(hPanel); - - RootPanel.get().add(resultsTable); - RootPanel.get().add(new HTML("<hr>")); - RootPanel.get().add(favoritesTable); - RootPanel.get().add(new HTML("<hr>")); - RootPanel.get().add(transactionTable); - - // Add a handler to send the name to the server - queryField.addKeyUpHandler(new KeyUpHandler() { - public void onKeyUp(KeyUpEvent event) { - update(); - } - }); - - update(); - } - - /** - * Set or unset a ticker symbol as a 'favorite'. - * - * @param ticker the ticker symbol - * @param favorite if true, make the stock a favorite - */ - public void setFavorite(String ticker, boolean favorite) { - if (favorite) { - dataService.addFavorite(ticker, new AsyncCallback<Void>() { - public void onFailure(Throwable caught) { - Window.alert("Error adding favorite"); - } - - public void onSuccess(Void result) { - // do nothing - } - }); - } else { - dataService.removeFavorite(ticker, new AsyncCallback<Void>() { - public void onFailure(Throwable caught) { - Window.alert("Error removing favorite"); - } - - public void onSuccess(Void result) { - // do nothing - } - }); - } - } - - private String getFormattedPrice(int price) { - return NumberFormat.getCurrencyFormat("USD").format(price / 100.0); - } - - /** - * Process the {@link StockResponse} from the server. - * - * @param response the stock response - */ - private void processStockResponse(StockResponse response) { - // Update the search list. - StockQuoteList searchResults = response.getSearchResults(); - searchListModel.updateDataSize(response.getNumSearchResults(), true); - searchListModel.updateViewData(searchResults.getStartIndex(), - searchResults.size(), searchResults); - - // Update the favorites list. - StockQuoteList favorites = response.getFavorites(); - favoritesListModel.updateDataSize(response.getNumFavorites(), true); - favoritesListModel.updateViewData(favorites.getStartIndex(), - favorites.size(), favorites); - - // Update available cash. - int cash = response.getCash(); - cashLabel.setText(getFormattedPrice(cash)); - buySellPopup.setAvailableCash(cash); - - // Restart the update timer. - updateTimer.schedule(UPDATE_DELAY); - } - - /** - * Request data from the server using the last query string. - */ - private void update() { - updateTimer.cancel(); - - Range[] searchRanges = searchListModel.getRanges(); - Range[] favoritesRanges = favoritesListModel.getRanges(); - - if (searchRanges == null || searchRanges.length == 0 - || favoritesRanges == null || favoritesRanges.length == 0) { - return; - } - - String searchQuery = queryField.getText(); - StockRequest request = new StockRequest(searchQuery, searchRanges[0], - favoritesRanges[0]); - dataService.getStockQuotes(request, new AsyncCallback<StockResponse>() { - public void onFailure(Throwable caught) { - String message = caught.getMessage(); - if (message.contains("Not logged in")) { - // Force the user to login. - Window.Location.reload(); - } else { - Window.alert("ERROR: " + caught.getMessage()); - updateTimer.schedule(UPDATE_DELAY); - } - } - - public void onSuccess(StockResponse result) { - processStockResponse(result); - } - }); - } -}
diff --git a/bikeshed/war/WEB-INF/web.xml b/bikeshed/war/WEB-INF/web.xml index a2c7cb2..0c3db41 100644 --- a/bikeshed/war/WEB-INF/web.xml +++ b/bikeshed/war/WEB-INF/web.xml
@@ -8,12 +8,12 @@ <!-- Servlets --> <servlet> <servlet-name>stockServlet</servlet-name> - <servlet-class>com.google.gwt.sample.stocks.server.StockServiceImpl</servlet-class> + <servlet-class>com.google.gwt.bikeshed.sample.stocks.server.StockServiceImpl</servlet-class> </servlet> <servlet> <servlet-name>treeServlet</servlet-name> - <servlet-class>com.google.gwt.sample.tree.server.TreeServiceImpl</servlet-class> + <servlet-class>com.google.gwt.bikeshed.sample.tree.server.TreeServiceImpl</servlet-class> </servlet> <servlet-mapping>