Checkpoint - basic tree example working.
Rename previous example to 'stocks'.
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@7595 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/bikeshed/src/com/google/gwt/cells/client/ButtonCell.java b/bikeshed/src/com/google/gwt/cells/client/ButtonCell.java
index 717fd4c..9aa06cd 100644
--- a/bikeshed/src/com/google/gwt/cells/client/ButtonCell.java
+++ b/bikeshed/src/com/google/gwt/cells/client/ButtonCell.java
@@ -25,13 +25,13 @@
@Override
public void onBrowserEvent(Element parent, String value, NativeEvent event,
- Mutator<String, String> mutator) {
- if (mutator == null) {
+ ValueUpdater<String> valueUpdater) {
+ if (valueUpdater == null) {
return;
}
if ("mouseup".equals(event.getType())) {
- mutator.mutate(value, null);
+ valueUpdater.update(value);
}
}
diff --git a/bikeshed/src/com/google/gwt/cells/client/Cell.java b/bikeshed/src/com/google/gwt/cells/client/Cell.java
index 401a622..27f84bb 100644
--- a/bikeshed/src/com/google/gwt/cells/client/Cell.java
+++ b/bikeshed/src/com/google/gwt/cells/client/Cell.java
@@ -29,10 +29,10 @@
* @param parent
* @param value
* @param event
- * @param mutator
+ * @param valueUpdater a {@link ValueUpdater}, or null
*/
public void onBrowserEvent(Element parent, C value, NativeEvent event,
- Mutator<C, C> mutator) {
+ ValueUpdater<C> valueUpdater) {
}
// TODO: render needs a way of assuming text by default, but allowing HTML.
diff --git a/bikeshed/src/com/google/gwt/cells/client/CheckboxCell.java b/bikeshed/src/com/google/gwt/cells/client/CheckboxCell.java
index 9800eec..ee711f8 100644
--- a/bikeshed/src/com/google/gwt/cells/client/CheckboxCell.java
+++ b/bikeshed/src/com/google/gwt/cells/client/CheckboxCell.java
@@ -26,14 +26,14 @@
@Override
public void onBrowserEvent(Element parent, Boolean value, NativeEvent event,
- Mutator<Boolean, Boolean> mutator) {
- if (mutator == null) {
+ ValueUpdater<Boolean> valueUpdater) {
+ if (valueUpdater == null) {
return;
}
if ("change".equals(event.getType())) {
InputElement input = parent.getFirstChild().cast();
- mutator.mutate(value, input.isChecked());
+ valueUpdater.update(input.isChecked());
}
}
diff --git a/bikeshed/src/com/google/gwt/cells/client/Mutator.java b/bikeshed/src/com/google/gwt/cells/client/Mutator.java
deleted file mode 100644
index 6b20b5e..0000000
--- a/bikeshed/src/com/google/gwt/cells/client/Mutator.java
+++ /dev/null
@@ -1,26 +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.cells.client;
-
-/**
- * A mutator can be added to a Cell to mutate data.
- *
- * @param <T> the data type that will be modified
- * @param <C> the data type of the cell
- */
-public interface Mutator<T, C> {
- void mutate(T object, C after);
-}
diff --git a/bikeshed/src/com/google/gwt/cells/client/TextInputCell.java b/bikeshed/src/com/google/gwt/cells/client/TextInputCell.java
index bafc0ea..96834a6 100644
--- a/bikeshed/src/com/google/gwt/cells/client/TextInputCell.java
+++ b/bikeshed/src/com/google/gwt/cells/client/TextInputCell.java
@@ -26,14 +26,14 @@
@Override
public void onBrowserEvent(Element parent, String value, NativeEvent event,
- Mutator<String, String> mutator) {
- if (mutator == null) {
+ ValueUpdater<String> valueUpdater) {
+ if (valueUpdater == null) {
return;
}
if ("change".equals(event.getType())) {
InputElement input = parent.getFirstChild().cast();
- mutator.mutate(value, input.getValue());
+ valueUpdater.update(input.getValue());
}
}
diff --git a/bikeshed/src/com/google/gwt/list/client/Column.java b/bikeshed/src/com/google/gwt/list/client/Column.java
index e2aec50..c19a7df 100644
--- a/bikeshed/src/com/google/gwt/list/client/Column.java
+++ b/bikeshed/src/com/google/gwt/list/client/Column.java
@@ -16,7 +16,8 @@
package com.google.gwt.list.client;
import com.google.gwt.cells.client.Cell;
-import com.google.gwt.cells.client.Mutator;
+import com.google.gwt.cells.client.ValueUpdater;
+import com.google.gwt.cells.client.FieldUpdater;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.NativeEvent;
@@ -28,16 +29,17 @@
*/
public abstract class Column<T, C> {
private final Cell<C> cell;
- private Mutator<T, C> mutator;
+ private FieldUpdater<T, C> fieldUpdater;
public Column(Cell<C> cell) {
this.cell = cell;
}
public void onBrowserEvent(Element elem, final T object, NativeEvent event) {
- cell.onBrowserEvent(elem, getValue(object), event, new Mutator<C, C>() {
- public void mutate(C unused, C after) {
- mutator.mutate(object, after);
+ cell.onBrowserEvent(elem, getValue(object), event,
+ fieldUpdater == null ? null : new ValueUpdater<C>() {
+ public void update(C value) {
+ fieldUpdater.update(object, value);
}
});
}
@@ -46,8 +48,8 @@
cell.render(getValue(object), sb);
}
- public void setMutator(Mutator<T, C> mutator) {
- this.mutator = mutator;
+ public void setFieldUpdater(FieldUpdater<T, C> fieldUpdater) {
+ this.fieldUpdater = fieldUpdater;
}
protected Cell<C> getCell() {
@@ -55,5 +57,4 @@
}
protected abstract C getValue(T object);
-
}
\ No newline at end of file
diff --git a/bikeshed/src/com/google/gwt/list/client/PagingTableListView.java b/bikeshed/src/com/google/gwt/list/client/PagingTableListView.java
index a4d1811..88ac483 100644
--- a/bikeshed/src/com/google/gwt/list/client/PagingTableListView.java
+++ b/bikeshed/src/com/google/gwt/list/client/PagingTableListView.java
@@ -16,7 +16,7 @@
package com.google.gwt.list.client;
import com.google.gwt.cells.client.ButtonCell;
-import com.google.gwt.cells.client.Mutator;
+import com.google.gwt.cells.client.ValueUpdater;
import com.google.gwt.dom.client.Document;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.EventTarget;
@@ -125,15 +125,15 @@
} else if (row == pageSize) {
if (col == 0) {
prevButton.onBrowserEvent(elem, null, event,
- new Mutator<String, String>() {
- public void mutate(String object, String after) {
+ new ValueUpdater<String>() {
+ public void update(String value) {
previousPage();
}
});
} else if (col == 2) {
nextButton.onBrowserEvent(elem, null, event,
- new Mutator<String, String>() {
- public void mutate(String object, String after) {
+ new ValueUpdater<String>() {
+ public void update(String value) {
nextPage();
}
});
diff --git a/bikeshed/src/com/google/gwt/list/client/SimpleCellList.java b/bikeshed/src/com/google/gwt/list/client/SimpleCellList.java
index b9ba606..d283d6a 100644
--- a/bikeshed/src/com/google/gwt/list/client/SimpleCellList.java
+++ b/bikeshed/src/com/google/gwt/list/client/SimpleCellList.java
@@ -16,7 +16,7 @@
package com.google.gwt.list.client;
import com.google.gwt.cells.client.Cell;
-import com.google.gwt.cells.client.Mutator;
+import com.google.gwt.cells.client.ValueUpdater;
import com.google.gwt.dom.client.Document;
import com.google.gwt.dom.client.Element;
import com.google.gwt.list.shared.ListEvent;
@@ -41,7 +41,7 @@
private final ArrayList<T> data = new ArrayList<T>();
private final Element tmpElem;
private ListRegistration reg;
- private Mutator<T, T> mutator;
+ private ValueUpdater<T> valueUpdater;
public SimpleCellList(ListModel<T> model, Cell<T> cell) {
this.cell = cell;
@@ -93,12 +93,12 @@
}
if (idxString.length() > 0) {
int idx = Integer.parseInt(idxString);
- cell.onBrowserEvent(target, data.get(idx), event, mutator);
+ cell.onBrowserEvent(target, data.get(idx), event, valueUpdater);
}
}
- public void setMutator(Mutator<T, T> mutator) {
- this.mutator = mutator;
+ public void setValueUpdater(ValueUpdater<T> valueUpdater) {
+ this.valueUpdater = valueUpdater;
}
private void gc(int size) {
diff --git a/bikeshed/src/com/google/gwt/list/shared/ListEvent.java b/bikeshed/src/com/google/gwt/list/shared/ListEvent.java
index 1718e52..0986dc4 100644
--- a/bikeshed/src/com/google/gwt/list/shared/ListEvent.java
+++ b/bikeshed/src/com/google/gwt/list/shared/ListEvent.java
@@ -43,8 +43,8 @@
return TYPE;
}
- private final int start;
private final int length;
+ private final int start;
private final List<T> values;
/**
@@ -54,7 +54,7 @@
* @param length the length of the data
* @param values the new values
*/
- protected ListEvent(int start, int length, List<T> values) {
+ public ListEvent(int start, int length, List<T> values) {
this.start = start;
this.length = length;
this.values = values;
diff --git a/bikeshed/src/com/google/gwt/list/shared/SizeChangeEvent.java b/bikeshed/src/com/google/gwt/list/shared/SizeChangeEvent.java
index 7565f1c..73b4bf6 100644
--- a/bikeshed/src/com/google/gwt/list/shared/SizeChangeEvent.java
+++ b/bikeshed/src/com/google/gwt/list/shared/SizeChangeEvent.java
@@ -39,8 +39,8 @@
return TYPE;
}
- private final int size;
private final boolean exact;
+ private final int size;
/**
* Creates a {@link SizeChangeEvent}.
@@ -48,7 +48,7 @@
* @param size the total size of the list
* @param exact true if this is an exact size
*/
- protected SizeChangeEvent(int size, boolean exact) {
+ public SizeChangeEvent(int size, boolean exact) {
this.size = size;
this.exact = exact;
}
diff --git a/bikeshed/src/com/google/gwt/sample/datawidgets/DataBackedWidgets.gwt.xml b/bikeshed/src/com/google/gwt/sample/stocks/Stocks.gwt.xml
similarity index 89%
rename from bikeshed/src/com/google/gwt/sample/datawidgets/DataBackedWidgets.gwt.xml
rename to bikeshed/src/com/google/gwt/sample/stocks/Stocks.gwt.xml
index 69b4052..6788e6a 100644
--- a/bikeshed/src/com/google/gwt/sample/datawidgets/DataBackedWidgets.gwt.xml
+++ b/bikeshed/src/com/google/gwt/sample/stocks/Stocks.gwt.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 0.0.999//EN" "http://google-web-toolkit.googlecode.com/svn/tags/0.0.999/distro-source/core/src/gwt-module.dtd">
-<module rename-to='databackedwidgets'>
+<module rename-to='stocks'>
<!-- Inherit the core Web Toolkit stuff. -->
<inherits name='com.google.gwt.user.User'/>
<inherits name='com.google.gwt.list.List'/>
@@ -15,7 +15,7 @@
<!-- Other module inherits -->
<!-- Specify the app entry point class. -->
- <entry-point class='com.google.gwt.sample.datawidgets.client.DataBackedWidgets'/>
+ <entry-point class='com.google.gwt.sample.stocks.client.Stocks'/>
<!-- Specify the paths for translatable code -->
<source path='client'/>
diff --git a/bikeshed/src/com/google/gwt/sample/datawidgets/client/BuySellPopup.java b/bikeshed/src/com/google/gwt/sample/stocks/client/BuySellPopup.java
similarity index 94%
rename from bikeshed/src/com/google/gwt/sample/datawidgets/client/BuySellPopup.java
rename to bikeshed/src/com/google/gwt/sample/stocks/client/BuySellPopup.java
index 317ae2f..feeb8c1 100644
--- a/bikeshed/src/com/google/gwt/sample/datawidgets/client/BuySellPopup.java
+++ b/bikeshed/src/com/google/gwt/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.datawidgets.client;
+package com.google.gwt.sample.stocks.client;
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.datawidgets.shared.StockQuote;
-import com.google.gwt.sample.datawidgets.shared.Transaction;
+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;
@@ -126,9 +126,9 @@
*
* @param cash the available cash
*/
- public void setAvailableCash(double cash) {
+ public void setAvailableCash(int cash) {
// TODO: Bind the available cash field.
- layout.setText(5, 1, NumberFormat.getCurrencyFormat("USD").format(cash));
+ layout.setText(5, 1, NumberFormat.getCurrencyFormat("USD").format(cash / 100.0));
}
/**
diff --git a/bikeshed/src/com/google/gwt/sample/datawidgets/client/StockQuoteCell.java b/bikeshed/src/com/google/gwt/sample/stocks/client/StockQuoteCell.java
similarity index 89%
rename from bikeshed/src/com/google/gwt/sample/datawidgets/client/StockQuoteCell.java
rename to bikeshed/src/com/google/gwt/sample/stocks/client/StockQuoteCell.java
index 2b9e983..38c8eb4 100644
--- a/bikeshed/src/com/google/gwt/sample/datawidgets/client/StockQuoteCell.java
+++ b/bikeshed/src/com/google/gwt/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.datawidgets.client;
+package com.google.gwt.sample.stocks.client;
import com.google.gwt.cells.client.Cell;
-import com.google.gwt.sample.datawidgets.shared.StockQuote;
+import com.google.gwt.sample.stocks.shared.StockQuote;
/**
* A cell that represents a {@link StockQuote}.
diff --git a/bikeshed/src/com/google/gwt/sample/datawidgets/client/StockService.java b/bikeshed/src/com/google/gwt/sample/stocks/client/StockService.java
similarity index 81%
rename from bikeshed/src/com/google/gwt/sample/datawidgets/client/StockService.java
rename to bikeshed/src/com/google/gwt/sample/stocks/client/StockService.java
index 46d3a3d..23299e9 100644
--- a/bikeshed/src/com/google/gwt/sample/datawidgets/client/StockService.java
+++ b/bikeshed/src/com/google/gwt/sample/stocks/client/StockService.java
@@ -1,23 +1,23 @@
/*
* 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.datawidgets.client;
+package com.google.gwt.sample.stocks.client;
-import com.google.gwt.sample.datawidgets.shared.StockRequest;
-import com.google.gwt.sample.datawidgets.shared.StockResponse;
-import com.google.gwt.sample.datawidgets.shared.Transaction;
+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.rpc.RemoteService;
import com.google.gwt.user.client.rpc.RemoteServiceRelativePath;
diff --git a/bikeshed/src/com/google/gwt/sample/datawidgets/client/StockServiceAsync.java b/bikeshed/src/com/google/gwt/sample/stocks/client/StockServiceAsync.java
similarity index 81%
rename from bikeshed/src/com/google/gwt/sample/datawidgets/client/StockServiceAsync.java
rename to bikeshed/src/com/google/gwt/sample/stocks/client/StockServiceAsync.java
index fca11c4..0eda48f 100644
--- a/bikeshed/src/com/google/gwt/sample/datawidgets/client/StockServiceAsync.java
+++ b/bikeshed/src/com/google/gwt/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.datawidgets.client;
+package com.google.gwt.sample.stocks.client;
-import com.google.gwt.sample.datawidgets.shared.StockRequest;
-import com.google.gwt.sample.datawidgets.shared.StockResponse;
-import com.google.gwt.sample.datawidgets.shared.Transaction;
+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.rpc.AsyncCallback;
/**
diff --git a/bikeshed/src/com/google/gwt/sample/datawidgets/client/DataBackedWidgets.java b/bikeshed/src/com/google/gwt/sample/stocks/client/Stocks.java
similarity index 80%
rename from bikeshed/src/com/google/gwt/sample/datawidgets/client/DataBackedWidgets.java
rename to bikeshed/src/com/google/gwt/sample/stocks/client/Stocks.java
index a1e15c9..2a9f608 100644
--- a/bikeshed/src/com/google/gwt/sample/datawidgets/client/DataBackedWidgets.java
+++ b/bikeshed/src/com/google/gwt/sample/stocks/client/Stocks.java
@@ -1,24 +1,24 @@
/*
* 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.datawidgets.client;
+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.Mutator;
+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;
@@ -30,13 +30,14 @@
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.datawidgets.shared.StockQuote;
-import com.google.gwt.sample.datawidgets.shared.StockQuoteList;
-import com.google.gwt.sample.datawidgets.shared.StockRequest;
-import com.google.gwt.sample.datawidgets.shared.StockResponse;
-import com.google.gwt.sample.datawidgets.shared.Transaction;
+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;
@@ -47,16 +48,33 @@
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 DataBackedWidgets implements EntryPoint {
+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.
*/
@@ -72,6 +90,9 @@
}
};
+ private AsyncListModel<StockQuote> favoritesListModel;
+
+ private PagingTableListView<StockQuote> favoritesTable;
private Column<StockQuote, String> nameColumn = new Column<StockQuote, String>(
new TextCell()) {
@Override
@@ -88,14 +109,12 @@
}
};
- private Column<StockQuote, String> buyColumn = new Column<StockQuote, String>(
- new ButtonCell()) {
- @Override
- protected String getValue(StockQuote object) {
- return "Buy";
- }
- };
+ 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
@@ -104,17 +123,6 @@
}
};
- private final TextBox queryField = new TextBox();
- private final Label cashLabel = new Label();
-
- private Column<StockQuote, String> tickerColumn = new Column<StockQuote, String>(
- new TextCell()) {
- @Override
- protected String getValue(StockQuote object) {
- return object.getTicker();
- }
- };
-
private Column<StockQuote, String> sharesColumn = new Column<StockQuote, String>(
new TextCell()) {
@Override
@@ -123,11 +131,37 @@
}
};
- private AsyncListModel<StockQuote> favoritesListModel;
+ 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 PagingTableListView<StockQuote> resultsTable;
+ private Column<StockQuote, String> tickerColumn = new Column<StockQuote, String>(
+ new TextCell()) {
+ @Override
+ protected String getValue(StockQuote object) {
+ return object.getTicker();
+ }
+ };
- private AsyncListModel<StockQuote> searchListModel;
+ 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.
@@ -139,13 +173,6 @@
}
};
- private PagingTableListView<StockQuote> favoritesTable;
-
- /**
- * The popup used to purchase stock.
- */
- private BuySellPopup buySellPopup = new BuySellPopup();
-
/**
* This is the entry point method.
*/
@@ -175,6 +202,9 @@
update();
}
});
+
+ transactionListModel = new ListListModel<Transaction>();
+ transactions = transactionListModel.getList();
// Create the results table.
resultsTable = new PagingTableListView<StockQuote>(searchListModel, 10);
@@ -190,22 +220,26 @@
favoritesTable.addColumn(sharesColumn);
favoritesTable.addColumn(buyColumn);
favoritesTable.addColumn(sellColumn);
+
+ transactionTable = new PagingTableListView<Transaction>(transactionListModel, 10);
+ transactionTable.addColumn(transactionColumn);
+ transactionTable.addColumn(subtotalColumn);
- favoriteColumn.setMutator(new Mutator<StockQuote, Boolean>() {
- public void mutate(StockQuote object, Boolean after) {
- setFavorite(object.getTicker(), after);
+ favoriteColumn.setFieldUpdater(new FieldUpdater<StockQuote, Boolean>() {
+ public void update(StockQuote object, Boolean value) {
+ setFavorite(object.getTicker(), value);
}
});
- buyColumn.setMutator(new Mutator<StockQuote, String>() {
- public void mutate(StockQuote object, String after) {
+ buyColumn.setFieldUpdater(new FieldUpdater<StockQuote, String>() {
+ public void update(StockQuote object, String value) {
buySellPopup.setStockQuote(object, true);
buySellPopup.center();
}
});
- sellColumn.setMutator(new Mutator<StockQuote, String>() {
- public void mutate(StockQuote object, String after) {
+ sellColumn.setFieldUpdater(new FieldUpdater<StockQuote, String>() {
+ public void update(StockQuote object, String value) {
buySellPopup.setStockQuote(object, false);
buySellPopup.center();
}
@@ -221,6 +255,7 @@
}
public void onSuccess(Transaction result) {
+ transactions.add(0, result);
update();
}
});
@@ -237,6 +272,8 @@
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() {
@@ -250,7 +287,7 @@
/**
* Set or unset a ticker symbol as a 'favorite'.
- *
+ *
* @param ticker the ticker symbol
* @param favorite if true, make the stock a favorite
*/
@@ -278,9 +315,13 @@
}
}
+ private String getFormattedPrice(int price) {
+ return NumberFormat.getCurrencyFormat("USD").format((double) price / 100.0);
+ }
+
/**
* Process the {@link StockResponse} from the server.
- *
+ *
* @param response the stock response
*/
private void processStockResponse(StockResponse response) {
@@ -297,8 +338,8 @@
favorites.size(), favorites);
// Update available cash.
- double cash = response.getCash() / 100.0;
- cashLabel.setText(NumberFormat.getCurrencyFormat("USD").format(cash));
+ int cash = response.getCash();
+ cashLabel.setText(getFormattedPrice(cash));
buySellPopup.setAvailableCash(cash);
// Restart the update timer.
diff --git a/bikeshed/src/com/google/gwt/sample/datawidgets/server/NasdaqStocks.java b/bikeshed/src/com/google/gwt/sample/stocks/server/NasdaqStocks.java
similarity index 99%
rename from bikeshed/src/com/google/gwt/sample/datawidgets/server/NasdaqStocks.java
rename to bikeshed/src/com/google/gwt/sample/stocks/server/NasdaqStocks.java
index 62649a7..b1671f6 100644
--- a/bikeshed/src/com/google/gwt/sample/datawidgets/server/NasdaqStocks.java
+++ b/bikeshed/src/com/google/gwt/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.datawidgets.server;
+package com.google.gwt.sample.stocks.server;
/**
* The list of all Nasdaq stocks (note: this is a snapshot plus
@@ -1063,7 +1063,6 @@
"GBCI", "Glacier Bancorp, Inc.",
"GBNK", "Guaranty Bancorp",
"GCBC", "Greene County Bancorp, Inc.",
- "GCFB", "Granite City Food & Brewery Ltd.",
"GCOM", "Globecomm Systems Inc.",
"GENC", "Gencor Industries Inc.",
"GENE", "Genetic Technologies Ltd",
diff --git a/bikeshed/src/com/google/gwt/sample/datawidgets/server/PlayerStatus.java b/bikeshed/src/com/google/gwt/sample/stocks/server/PlayerStatus.java
similarity index 98%
rename from bikeshed/src/com/google/gwt/sample/datawidgets/server/PlayerStatus.java
rename to bikeshed/src/com/google/gwt/sample/stocks/server/PlayerStatus.java
index 41da1e2..1893f56 100644
--- a/bikeshed/src/com/google/gwt/sample/datawidgets/server/PlayerStatus.java
+++ b/bikeshed/src/com/google/gwt/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.datawidgets.server;
+package com.google.gwt.sample.stocks.server;
import java.util.HashMap;
import java.util.TreeSet;
diff --git a/bikeshed/src/com/google/gwt/sample/datawidgets/server/StockServiceImpl.java b/bikeshed/src/com/google/gwt/sample/stocks/server/StockServiceImpl.java
similarity index 93%
rename from bikeshed/src/com/google/gwt/sample/datawidgets/server/StockServiceImpl.java
rename to bikeshed/src/com/google/gwt/sample/stocks/server/StockServiceImpl.java
index 810cec1..b268e5b 100644
--- a/bikeshed/src/com/google/gwt/sample/datawidgets/server/StockServiceImpl.java
+++ b/bikeshed/src/com/google/gwt/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.datawidgets.server;
+package com.google.gwt.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.datawidgets.client.StockService;
-import com.google.gwt.sample.datawidgets.shared.StockQuote;
-import com.google.gwt.sample.datawidgets.shared.StockQuoteList;
-import com.google.gwt.sample.datawidgets.shared.StockRequest;
-import com.google.gwt.sample.datawidgets.shared.StockResponse;
-import com.google.gwt.sample.datawidgets.shared.Transaction;
+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.user.server.rpc.RemoteServiceServlet;
import java.io.IOException;
@@ -127,14 +127,14 @@
// Perform the transaction with the user.
int quantity = transaction.getQuantity();
+ int price = quote.getPrice();
if (transaction.isBuy()) {
- ensurePlayer().buy(ticker, quantity, quote.getPrice());
+ ensurePlayer().buy(ticker, quantity, price);
} else {
- ensurePlayer().sell(ticker, quantity, quote.getPrice());
+ ensurePlayer().sell(ticker, quantity, price);
}
- //
- return new Transaction(true, ticker, quantity);
+ return new Transaction(true, ticker, quantity, price);
}
/**
diff --git a/bikeshed/src/com/google/gwt/sample/datawidgets/shared/StockQuote.java b/bikeshed/src/com/google/gwt/sample/stocks/shared/StockQuote.java
similarity index 97%
rename from bikeshed/src/com/google/gwt/sample/datawidgets/shared/StockQuote.java
rename to bikeshed/src/com/google/gwt/sample/stocks/shared/StockQuote.java
index 851655b..678c752 100644
--- a/bikeshed/src/com/google/gwt/sample/datawidgets/shared/StockQuote.java
+++ b/bikeshed/src/com/google/gwt/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.datawidgets.shared;
+package com.google.gwt.sample.stocks.shared;
import java.io.Serializable;
diff --git a/bikeshed/src/com/google/gwt/sample/datawidgets/shared/StockQuoteList.java b/bikeshed/src/com/google/gwt/sample/stocks/shared/StockQuoteList.java
similarity index 94%
rename from bikeshed/src/com/google/gwt/sample/datawidgets/shared/StockQuoteList.java
rename to bikeshed/src/com/google/gwt/sample/stocks/shared/StockQuoteList.java
index c1684a4..fff7c51 100644
--- a/bikeshed/src/com/google/gwt/sample/datawidgets/shared/StockQuoteList.java
+++ b/bikeshed/src/com/google/gwt/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.datawidgets.shared;
+package com.google.gwt.sample.stocks.shared;
import java.util.ArrayList;
diff --git a/bikeshed/src/com/google/gwt/sample/datawidgets/shared/StockRequest.java b/bikeshed/src/com/google/gwt/sample/stocks/shared/StockRequest.java
similarity index 95%
rename from bikeshed/src/com/google/gwt/sample/datawidgets/shared/StockRequest.java
rename to bikeshed/src/com/google/gwt/sample/stocks/shared/StockRequest.java
index e895339..c76ca2c 100644
--- a/bikeshed/src/com/google/gwt/sample/datawidgets/shared/StockRequest.java
+++ b/bikeshed/src/com/google/gwt/sample/stocks/shared/StockRequest.java
@@ -13,7 +13,7 @@
* License for the specific language governing permissions and limitations under
* the License.
*/
-package com.google.gwt.sample.datawidgets.shared;
+package com.google.gwt.sample.stocks.shared;
import com.google.gwt.list.shared.Range;
diff --git a/bikeshed/src/com/google/gwt/sample/datawidgets/shared/StockResponse.java b/bikeshed/src/com/google/gwt/sample/stocks/shared/StockResponse.java
similarity index 96%
rename from bikeshed/src/com/google/gwt/sample/datawidgets/shared/StockResponse.java
rename to bikeshed/src/com/google/gwt/sample/stocks/shared/StockResponse.java
index fa560b0..83091f0 100644
--- a/bikeshed/src/com/google/gwt/sample/datawidgets/shared/StockResponse.java
+++ b/bikeshed/src/com/google/gwt/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.datawidgets.shared;
+package com.google.gwt.sample.stocks.shared;
import java.io.Serializable;
diff --git a/bikeshed/src/com/google/gwt/sample/datawidgets/shared/Transaction.java b/bikeshed/src/com/google/gwt/sample/stocks/shared/Transaction.java
similarity index 67%
rename from bikeshed/src/com/google/gwt/sample/datawidgets/shared/Transaction.java
rename to bikeshed/src/com/google/gwt/sample/stocks/shared/Transaction.java
index 01567a3..10b7df8 100644
--- a/bikeshed/src/com/google/gwt/sample/datawidgets/shared/Transaction.java
+++ b/bikeshed/src/com/google/gwt/sample/stocks/shared/Transaction.java
@@ -13,7 +13,9 @@
* License for the specific language governing permissions and limitations under
* the License.
*/
-package com.google.gwt.sample.datawidgets.shared;
+package com.google.gwt.sample.stocks.shared;
+
+import com.google.gwt.i18n.client.NumberFormat;
import java.io.Serializable;
@@ -22,22 +24,34 @@
*/
public class Transaction implements Serializable {
+ private int actualPrice; // in pennies
+
/**
* True if a buy transaction, false if a sell transaction.
*/
private boolean isBuy;
- private String ticker;
private int quantity;
+ private String ticker;
public Transaction(boolean isBuy, String ticker, int quantity) {
+ this(isBuy, ticker, quantity, -1);
+ }
+
+ public Transaction(boolean isBuy, String ticker, int quantity,
+ int actualPrice) {
super();
this.isBuy = isBuy;
this.ticker = ticker;
this.quantity = quantity;
+ this.actualPrice = actualPrice;
+ }
+
+ Transaction() {
}
- Transaction() {
+ public int getActualPrice() {
+ return actualPrice;
}
public int getQuantity() {
@@ -55,6 +69,11 @@
@Override
public String toString() {
String op = isBuy ? "Bought" : "Sold";
- return op + " " + quantity + " shares of " + ticker;
+ if (actualPrice == -1) {
+ return op + " " + quantity + " shares of " + ticker;
+ } else {
+ return op + " " + quantity + " shares of " + ticker + " at " +
+ NumberFormat.getCurrencyFormat("USD").format(actualPrice / 100.0);
+ }
}
}
diff --git a/bikeshed/src/com/google/gwt/sample/tree/client/Tree.java b/bikeshed/src/com/google/gwt/sample/tree/client/Tree.java
new file mode 100644
index 0000000..df03061
--- /dev/null
+++ b/bikeshed/src/com/google/gwt/sample/tree/client/Tree.java
@@ -0,0 +1,60 @@
+/*
+ * 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.tree.client;
+
+import com.google.gwt.core.client.EntryPoint;
+import com.google.gwt.list.shared.ListEvent;
+import com.google.gwt.list.shared.ListHandler;
+import com.google.gwt.list.shared.SizeChangeEvent;
+import com.google.gwt.sample.tree.shared.TreeNode;
+import com.google.gwt.user.client.ui.RootPanel;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * A demo of the asynchronous Tree model.
+ */
+public class Tree implements EntryPoint {
+
+ static class FakeTreeNode extends TreeNode<String> {
+ static int gensym = 1;
+ private static final int FANOUT = 5;
+
+ FakeTreeNode(int value) {
+ this.nodeData = "" + value;
+ }
+
+ @Override
+ protected void onRangeChanged(int start, int length) {
+ // TODO: use start, length
+ for (ListHandler<TreeNode<String>> handler : handlers) {
+ handler.onSizeChanged(new SizeChangeEvent(FANOUT, true));
+ List<TreeNode<String>> values = new ArrayList<TreeNode<String>>(FANOUT);
+ for (int i = 0; i < FANOUT; i++) {
+ values.add(new FakeTreeNode(gensym++));
+ }
+ handler.onDataChanged(new ListEvent<TreeNode<String>>(0, FANOUT, values));
+ }
+ }
+ }
+
+ public void onModuleLoad() {
+ TreeNode<String> root = new FakeTreeNode(0);
+ TreeView<String> treeView = new TreeView<String>(root);
+ RootPanel.get().add(treeView);
+ }
+}
diff --git a/bikeshed/src/com/google/gwt/sample/tree/client/TreeView.java b/bikeshed/src/com/google/gwt/sample/tree/client/TreeView.java
new file mode 100644
index 0000000..2a5bbf2
--- /dev/null
+++ b/bikeshed/src/com/google/gwt/sample/tree/client/TreeView.java
@@ -0,0 +1,96 @@
+/*
+ * 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.tree.client;
+
+import com.google.gwt.event.logical.shared.CloseEvent;
+import com.google.gwt.event.logical.shared.CloseHandler;
+import com.google.gwt.event.logical.shared.OpenEvent;
+import com.google.gwt.event.logical.shared.OpenHandler;
+import com.google.gwt.list.shared.ListEvent;
+import com.google.gwt.list.shared.ListHandler;
+import com.google.gwt.list.shared.ListRegistration;
+import com.google.gwt.list.shared.SizeChangeEvent;
+import com.google.gwt.sample.tree.shared.TreeNode;
+import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.Tree;
+import com.google.gwt.user.client.ui.TreeItem;
+
+import java.util.HashMap;
+
+/**
+ * A tree view.
+ *
+ * @param <T> the data type of each tree node.
+ */
+public class TreeView<T> extends Composite {
+
+ private HashMap<TreeItem, TreeNode<T>> nodeMap =
+ new HashMap<TreeItem, TreeNode<T>>();
+ private Tree tree;
+
+ public TreeView(TreeNode<T> root) {
+ tree = new Tree();
+ tree.setAnimationEnabled(true);
+
+ TreeItem rootItem = new TreeItem("root");
+ nodeMap.put(rootItem, root);
+ rootItem.addItem("");
+ tree.addItem(rootItem);
+
+ addHandler(rootItem).setRangeOfInterest(0, 10);
+
+ tree.addOpenHandler(new OpenHandler<TreeItem>() {
+ public void onOpen(OpenEvent<TreeItem> event) {
+ TreeItem treeItem = event.getTarget();
+ addHandler(treeItem).setRangeOfInterest(0, 10);
+ }
+ });
+ tree.addCloseHandler(new CloseHandler<TreeItem>() {
+ public void onClose(CloseEvent<TreeItem> event) {
+ // TODO - remove list handler
+ }
+ });
+ initWidget(tree);
+ }
+
+ protected TreeNode<T> getNode(TreeItem treeItem) {
+ return nodeMap.get(treeItem);
+ }
+
+ private ListRegistration addHandler(final TreeItem item) {
+ TreeNode<T> node = getNode(item);
+ return node.addListHandler(new ListHandler<TreeNode<T>>() {
+ public void onDataChanged(ListEvent<TreeNode<T>> event) {
+ int idx = event.getStart();
+ for (TreeNode<T> node : event.getValues()) {
+ TreeItem treeItem = item.getChild(idx++);
+ nodeMap.put(treeItem, node);
+ treeItem.setText(node.getNodeData().toString());
+ }
+ }
+
+ public void onSizeChanged(SizeChangeEvent event) {
+ int size = event.getSize();
+ item.removeItems();
+ for (int i = 0; i < size; i++) {
+ TreeItem child = new TreeItem("");
+ item.addItem(child);
+ child.addItem("");
+ }
+ }
+ });
+ }
+}
diff --git a/bikeshed/src/com/google/gwt/sample/tree/shared/TreeNode.java b/bikeshed/src/com/google/gwt/sample/tree/shared/TreeNode.java
new file mode 100644
index 0000000..d191155
--- /dev/null
+++ b/bikeshed/src/com/google/gwt/sample/tree/shared/TreeNode.java
@@ -0,0 +1,56 @@
+/*
+ * 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.tree.shared;
+
+import com.google.gwt.list.shared.ListHandler;
+import com.google.gwt.list.shared.ListRegistration;
+import com.google.gwt.list.shared.SizeChangeEvent;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * A node in a Tree.
+ *
+ * @param <T> the data type contained in the node.
+ */
+public abstract class TreeNode<T> {
+
+ protected List<ListHandler<TreeNode<T>>> handlers =
+ new ArrayList<ListHandler<TreeNode<T>>>();
+ protected T nodeData;
+
+ public ListRegistration addListHandler(final ListHandler<TreeNode<T>> handler) {
+ handler.onSizeChanged(new SizeChangeEvent(5, true)); // TODO - unhack
+ handlers.add(handler);
+
+ return new ListRegistration() {
+ public void removeHandler() {
+ handlers.remove(handler);
+ }
+
+ public void setRangeOfInterest(int start, int length) {
+ onRangeChanged(start, length);
+ }
+ };
+ }
+
+ public T getNodeData() {
+ return nodeData;
+ }
+
+ protected abstract void onRangeChanged(int start, int length);
+}
diff --git a/bikeshed/war/DataBackedWidgets.css b/bikeshed/war/DataBackedWidgets.css
deleted file mode 100644
index 7aca7ac..0000000
--- a/bikeshed/war/DataBackedWidgets.css
+++ /dev/null
@@ -1,34 +0,0 @@
-/** Add css rules here for your application. */
-
-
-/** Example rules used by the template application (remove for your app) */
-h1 {
- font-size: 2em;
- font-weight: bold;
- color: #777777;
- margin: 40px 0px 70px;
- text-align: center;
-}
-
-.sendButton {
- display: block;
- font-size: 16pt;
-}
-
-/** Most GWT widgets already have a style name defined */
-.gwt-DialogBox {
- width: 400px;
-}
-
-.dialogVPanel {
- margin: 5px;
-}
-
-.serverResponseLabelError {
- color: red;
-}
-
-/** Set ids using widget.getElement().setId("idOfElement") */
-#closeButton {
- margin: 15px 6px 6px;
-}
diff --git a/bikeshed/war/DataBackedWidgets.html b/bikeshed/war/DataBackedWidgets.html
deleted file mode 100644
index 7401053..0000000
--- a/bikeshed/war/DataBackedWidgets.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!doctype html>
-<html>
- <head>
- <meta http-equiv="content-type" content="text/html; charset=UTF-8">
- <link type="text/css" rel="stylesheet" href="DataBackedWidgets.css">
- <title>Data Backed Widgets Sample</title>
- <script type="text/javascript" language="javascript" src="databackedwidgets/databackedwidgets.nocache.js"></script>
- </head>
-
- <body>
- <iframe src="javascript:''" id="__gwt_historyFrame" tabIndex='-1' style="position:absolute;width:0;height:0;border:0"></iframe>
- <noscript>
- <div style="width: 22em; position: absolute; left: 50%; margin-left: -11em; color: red; background-color: white; border: 1px solid red; padding: 4px; font-family: sans-serif">
- Your web browser must have JavaScript enabled
- in order for this application to display correctly.
- </div>
- </noscript>
-
- <h1>Data Backed Widgets Sample</h1>
- <table align="center">
- <tr>
- <td colspan="2" style="font-weight:bold;">Enter a search query:</td>
- </tr>
- <tr>
- <td id="queryFieldContainer"></td>
- </tr>
- <tr>
- <td colspan="2" style="color:red;" id="errorLabelContainer"></td>
- </tr>
- </table>
- </body>
-</html>
diff --git a/bikeshed/war/WEB-INF/web.xml b/bikeshed/war/WEB-INF/web.xml
index 73c9336..b41b49d 100644
--- a/bikeshed/war/WEB-INF/web.xml
+++ b/bikeshed/war/WEB-INF/web.xml
@@ -8,17 +8,18 @@
<!-- Servlets -->
<servlet>
<servlet-name>stockServlet</servlet-name>
- <servlet-class>com.google.gwt.sample.datawidgets.server.StockServiceImpl</servlet-class>
+ <servlet-class>com.google.gwt.sample.stocks.server.StockServiceImpl</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>stockServlet</servlet-name>
- <url-pattern>/databackedwidgets/stock</url-pattern>
+ <url-pattern>/stocks/stock</url-pattern>
</servlet-mapping>
<!-- Default page to serve -->
<welcome-file-list>
- <welcome-file>DataBackedWidgets.html</welcome-file>
+ <welcome-file>Stocks.html</welcome-file>
+ <welcome-file>Tree.html</welcome-file>
</welcome-file-list>
<!-- Require login. -->