[Code] package com.google.stock.application.client;
import java.util.List;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Hyperlink;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.xml.client.Document;
import com.google.gwt.xml.client.Element;
import com.google.gwt.xml.client.Node;
import com.google.gwt.xml.client.NodeList;
import com.google.gwt.xml.client.XMLParser;
import com.google.stock.application.entities.Item;
import com.google.stock.application.entities.User;
import com.gwtext.client.core.EventObject;
import com.gwtext.client.core.Position;
import com.gwtext.client.data.ArrayReader;
import com.gwtext.client.data.FieldDef;
import com.gwtext.client.data.FloatFieldDef;
import com.gwtext.client.data.MemoryProxy;
import com.gwtext.client.data.Record;
import com.gwtext.client.data.RecordDef;
import com.gwtext.client.data.SimpleStore;
import com.gwtext.client.data.Store;
import com.gwtext.client.data.StringFieldDef;
import com.gwtext.client.data.Tree;
import com.gwtext.client.widgets.BoxComponent;
import com.gwtext.client.widgets.Button;
import com.gwtext.client.widgets.Component;
import com.gwtext.client.widgets.Container;
import com.gwtext.client.widgets.MessageBox;
import com.gwtext.client.widgets.Panel;
import com.gwtext.client.widgets.TabPanel;
import com.gwtext.client.widgets.Toolbar;
import com.gwtext.client.widgets.ToolbarButton;
import com.gwtext.client.widgets.Window;
import com.gwtext.client.widgets.event.ButtonListenerAdapter;
import com.gwtext.client.widgets.event.PanelListener;
import com.gwtext.client.widgets.event.PanelListenerAdapter;
import com.gwtext.client.widgets.form.ComboBox;
import com.gwtext.client.widgets.form.FormPanel;
import com.gwtext.client.widgets.form.TextField;
import com.gwtext.client.widgets.grid.BaseColumnConfig;
import com.gwtext.client.widgets.grid.ColumnConfig;
import com.gwtext.client.widgets.grid.ColumnModel;
import com.gwtext.client.widgets.grid.EditorGridPanel;
import com.gwtext.client.widgets.grid.GridPanel;
import com.gwtext.client.widgets.grid.RowNumberingColumnConfig;
import com.gwtext.client.widgets.grid.event.GridCellListenerAdapter;
import com.gwtext.client.widgets.layout.FitLayout;
import com.gwtext.client.widgets.tree.TreeNode;
import com.gwtext.client.widgets.tree.TreePanel;
/**
* Entry point classes define <code>onModuleLoad()</code>.
*/
public class StockApplication implements EntryPoint {
private Store storeItem;
private Store storeUser;
private SimplePanel deckPanel;
private GridPanel gridItem = new GridPanel();
private EditorGridPanel gridUser= new EditorGridPanel();
private Document xmlDoc;
private TabPanel userItemPanel = new TabPanel();
/**
* Create a remote service proxy to talk to the server-side Item
service.
*/
private final ItemServiceAsync itemService = GWT.create
(ItemService.class);
private final UserServiceAsync userService = GWT.create
(UserService.class);
/**
* This is the entry point method.
*/
public void onModuleLoad() {
// call the method to display list of items
this.getUserData();
this.getItemData();
// The deckpanel will toggle display of lists
deckPanel = new SimplePanel();
deckPanel.setPixelSize(800, 500);
RootPanel.get("detailPanel").add(deckPanel);
userItemPanel.setBorder(true);
userItemPanel.setPaddings(15);
userItemPanel.setPixelSize(800, 500);
final Panel itemsTab = new Panel();
userItemPanel.add(itemsTab);
itemsTab.setTitle("Users");
itemsTab.addListener(new PanelListenerAdapter() {
@Override
public void onActivate(Panel panel) {
Component[] components = panel.getComponents();
if (components.length == 0 || components ==
null) {
// call the service to get the list of
users and their
// associated items
userService.getUserItems(new
AsyncCallback<String>() {
@Override
public void onSuccess(String
result) {
xmlDoc =
XMLParser.parse(result);
TreeNode root = new
TreeNode("Users");
NodeList nodesUser =
xmlDoc
.getElementsByTagName("user");
if (nodesUser != null
&& nodesUser.getLength() != 0) {
for (int i = 0;
i < nodesUser.getLength(); i++) {
TreeNode userName = new TreeNode(nodesUser
.item(i).getAttributes()
.getNamedItem("firstname")
.getNodeValue()
+ " "
+ nodesUser.item(i).getAttributes()
.getNamedItem("lastname")
.getNodeValue());
root.appendChild(userName);
if
(nodesUser.item(i).hasChildNodes()) {
// get the items associated now
NodeList nodesItems = nodesUser.item(i)
.getChildNodes();
for (int j = 0; j < nodesItems
.getLength(); j++) {
try {
String text = nodesItems
.item(j)
.getAttributes()
.getNamedItem("name")
.getNodeValue();
TreeNode itemNode = new TreeNode();
itemNode.setText(text);
userName.appendChild(itemNode);
} catch (Exception e) {
continue;
}
}
}
}
}
Tree tree = new Tree();
tree.setRootNode(root);
final TreePanel
treePanel = new TreePanel();
treePanel.setBorder(false);
treePanel.setRootNode(root);
treePanel.expandAll();
itemsTab.add(treePanel);
treePanel.show();
}
@Override
public void onFailure(Throwable
caught) {
MessageBox.alert(caught.getMessage());
}
});
}
}
});
final Panel itemTypeTab = new Panel();
userItemPanel.add(itemTypeTab);
itemTypeTab.setTitle("Item types");
itemTypeTab.addListener(new PanelListenerAdapter() {
@Override
public void onActivate(Panel panel) {
Component[] components = panel.getComponents();
if (components.length == 0 || components ==
null) {
// call the service to get the list of
users and their
// associated items
userService.getUserItems(new
AsyncCallback<String>() {
@Override
public void onSuccess(String
result) {
xmlDoc =
XMLParser.parse(result);
TreeNode root = new
TreeNode("Users");
NodeList nodesUser =
xmlDoc
.getElementsByTagName("user");
if (nodesUser != null
&& nodesUser.getLength() != 0) {
for (int i = 0;
i < nodesUser.getLength(); i++) {
TreeNode userName = new TreeNode(nodesUser
.item(i).getAttributes()
.getNamedItem("firstname")
.getNodeValue()
+ " "
+ nodesUser.item(i).getAttributes()
.getNamedItem("lastname")
.getNodeValue());
root.appendChild(userName);
if
(nodesUser.item(i).hasChildNodes()) {
// get the items associated now
NodeList nodesItems = nodesUser.item(i)
.getChildNodes();
for (int j = 0; j < nodesItems
.getLength(); j++) {
try {
String text = nodesItems
.item(j)
.getAttributes()
.getNamedItem("name")
.getNodeValue();
TreeNode itemNode = new TreeNode();
itemNode.setText(text);
userName.appendChild(itemNode);
} catch (Exception e) {
continue;
}
}
}
}
}
Tree tree = new Tree();
tree.setRootNode(root);
final TreePanel
treePanel = new TreePanel();
treePanel.setBorder(false);
treePanel.setRootNode(root);
treePanel.expandAll();
itemTypeTab.add(treePanel);
treePanel.show();
}
@Override
public void onFailure(Throwable
caught) {
MessageBox.alert(caught.getMessage());
}
});
}
}
});
// Creating hyperlinks for menu
Hyperlink linkItem = new Hyperlink();
linkItem.setTargetHistoryToken("itemList");
linkItem.setText("Item list");
linkItem.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
deckPanel.setWidget(gridItem);
}
});
Hyperlink linkUser = new Hyperlink();
linkUser.setTargetHistoryToken("userList");
linkUser.setText("User list");
linkUser.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
deckPanel.setWidget(gridUser);
}
});
Hyperlink linkUserItem = new Hyperlink();
linkUserItem.setTargetHistoryToken("UserItemsList");
linkUserItem.setText("User's item list");
linkUserItem.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
deckPanel.setWidget(userItemPanel);
userItemPanel.activate(0);
}
});
Panel navPanel = new Panel();
navPanel.setTitle("Navigation");
navPanel.setWidth(200);
navPanel.setHeight(500);
navPanel.setCollapsible(false);
navPanel.add(linkItem);
navPanel.add(linkUser);
navPanel.add(linkUserItem);
RootPanel.get("menuPanel").add(navPanel);
}
private void showItemForm(final RecordDef recordDef, final Store
store,
boolean edit, final int rowIndex, final GridPanel grid)
{
final Window window = new Window();
window.setTitle("Add item");
window.setWidth(500);
window.setHeight(300);
window.setMinWidth(350);
window.setMinHeight(300);
window.setLayout(new FitLayout());
window.setPaddings(5);
window.setButtonAlign(Position.CENTER);
window.setClosable(true);
window.setCloseAction(Window.HIDE);
window.setPlain(true);
final FormPanel formPanel = new FormPanel();
formPanel.setFrame(true);
formPanel.setTitle("");
formPanel.setWidth(350);
formPanel.setLabelWidth(75);
formPanel.setClosable(true);
final TextField productName = new TextField("Product Name",
"productName", 230);
productName.setAllowBlank(false);
formPanel.add(productName);
final TextField price = new TextField("Price", "price", 230);
price.setAllowBlank(false);
formPanel.add(price);
final ComboBox cbType = new ComboBox();
Store storeComboType = new SimpleStore("type", new Object[] {
"Clothing", "Food", "Construction" });
formPanel.add(cbType);
cbType.setStore(storeComboType);
cbType.setForceSelection(true);
cbType.setMinChars(1);
cbType.setFieldLabel("Type");
cbType.setDisplayField("type");
cbType.setMode(ComboBox.LOCAL);
cbType.setTriggerAction(ComboBox.ALL);
cbType.setEmptyText("Enter type");
cbType.setLoadingText("Searching...");
cbType.setTypeAhead(true);
cbType.setSelectOnFocus(true);
cbType.setHideTrigger(false);
if (edit) {
final Record record = store.getRecordAt(rowIndex);
productName.setValue(record.getAsString("item"));
price.setValue(Double.toString(record.getAsDouble("price")));
cbType.setValue(record.getAsString("itemType"));
Button update = new Button("Update");
formPanel.add(update);
// add handler for update
update.addListener(new ButtonListenerAdapter() {
@Override
public void onClick(Button button, EventObject
e) {
// get the record to be updated
record.set("item",
productName.getText());
record.set("price", price.getText());
record.set("itemType",
cbType.getText());
record.commit();
store.commitChanges();
window.close();
}
});
} else {
Button save = new Button("Save");
formPanel.add(save);
// add handler for Save
save.addListener(new ButtonListenerAdapter() {
@Override
public void onClick(Button button, EventObject
e) {
// save the new record
Record record =
recordDef.createRecord(new Object[] {
productName.getText(),
price.getText(),
cbType.getText(), "x"
});
store.add(record);
window.close();
}
});
}
window.add(formPanel);
RootPanel.get().add(window);
window.show();
}
private void getItemData() {
itemService.getItems(new AsyncCallback<List<Item>>() {
Object[][] data = null;
@Override
public void onFailure(Throwable caught) {
MessageBox.alert(caught.getMessage());
}
@Override
public void onSuccess(List<Item> result) {
for (Item item : result) {
data = new Object[][] { {
item.getItem(), item.getPrice(),
item.getItemType(), "x"
} };
}
ToolbarButton addItem = new ToolbarButton("Add
Item");
Toolbar toolbar = new Toolbar();
toolbar.addButton(addItem);
// List of items
MemoryProxy proxy = new MemoryProxy(data);
final RecordDef recordDef = new RecordDef(new
FieldDef[] {
new StringFieldDef("item"), new
FloatFieldDef("price"),
new StringFieldDef("itemType"),
new StringFieldDef("remove") });
ArrayReader reader = new ArrayReader(recordDef);
storeItem = new Store(proxy, reader, true);
BaseColumnConfig[] columns = new
BaseColumnConfig[] {
new
RowNumberingColumnConfig(),// Row numbers
new ColumnConfig("Item",
"item", 320, true, null,
"item"),
new ColumnConfig("Price",
"price", 195),
new ColumnConfig("Item type",
"itemType", 195),
new ColumnConfig("Remove",
"remove", 90) };
ColumnModel columnModel = new
ColumnModel(columns);
gridItem.setStore(storeItem);
gridItem.setColumnModel(columnModel);
gridItem.setFrame(true);
gridItem.setStripeRows(true);
gridItem.setAutoExpandColumn("item");
gridItem.setWidth(800);
gridItem.setHeight(500);
gridItem.setTitle("List of items");
gridItem.setTopToolbar(toolbar);
gridItem.setTrackMouseOver(true);
gridItem.addGridCellListener(new
GridCellListenerAdapter() {
@Override
public void onCellClick(GridPanel grid,
int rowIndex,
int colIndex,
EventObject e) {
if (colIndex == 4) {
storeItem.remove(storeItem.getRecordAt(rowIndex));
}
if (colIndex == 0) {
showItemForm(recordDef,
storeItem, true, rowIndex, grid);
}
}
});
storeItem.load();
deckPanel.setWidget(gridItem);
addItem.addListener(new ButtonListenerAdapter()
{
@Override
public void onClick(Button button,
EventObject e) {
itemService.addItem(new
AsyncCallback<Item>() {
@Override
public void
onFailure(Throwable caught) {
MessageBox.alert(caught.getMessage());
}
@Override
public void
onSuccess(Item result) {
// save the new
record
String item =
result.getItem();
String itemType
= result.getItemType();
Double price =
result.getPrice();
Record record =
recordDef
.createRecord(new Object[] { item,
new Double(price), itemType,
"x" });
storeItem.add(record);
}
});
}
});
}
});
}
private void getUserData(){
userService.getUsers(new AsyncCallback<List<User>>() {
Object[][] data = null;
@Override
public void onFailure(Throwable caught) {
MessageBox.alert(caught.getMessage());
}
@Override
public void onSuccess(List<User> result) {
for (User user : result) {
data = new Object[][] { {
user.getFirstName(), user.getLastName
(),
user.getAdresse(), "x" } };
}
ToolbarButton addUser = new ToolbarButton("Add
User");
Toolbar toolbar = new Toolbar();
toolbar.addButton(addUser);
// List of items
MemoryProxy proxy = new MemoryProxy(data);
final RecordDef recordDef = new RecordDef(new
FieldDef[] {
new
StringFieldDef("firstname"), new StringFieldDef("lastname"),
new StringFieldDef("address"),
new StringFieldDef("remove") });
ArrayReader reader = new ArrayReader(recordDef);
storeUser = new Store(proxy, reader, true);
BaseColumnConfig[] columns = new
BaseColumnConfig[] {
new
RowNumberingColumnConfig(),// Row numbers
new ColumnConfig("Firstname",
"firstname", 320, true, null,
"firstname"),
new ColumnConfig("Lastname",
"lastname", 195),
new ColumnConfig("Address",
"address", 195),
new ColumnConfig("Remove",
"remove", 90) };
ColumnModel columnModel = new
ColumnModel(columns);
gridUser.setStore(storeUser);
gridUser.setColumnModel(columnModel);
gridUser.setFrame(true);
gridUser.setStripeRows(true);
gridUser.setAutoExpandColumn("firstname");
gridUser.setWidth(800);
gridUser.setHeight(500);
gridUser.setTitle("List of users");
gridUser.setTopToolbar(toolbar);
gridUser.setTrackMouseOver(true);
gridUser.setClicksToEdit(1);
gridUser.addGridCellListener(new
GridCellListenerAdapter() {
@Override
public void onCellClick(GridPanel grid,
int rowIndex,
int colIndex,
EventObject e) {
if (colIndex == 4) {
storeUser.remove(storeUser.getRecordAt(rowIndex));
}
if (colIndex == 0) {
showUserForm(storeUser,
rowIndex);
}
}
});
storeUser.load();
addUser.addListener(new ButtonListenerAdapter()
{
@Override
public void onClick(Button button,
EventObject e) {
userService.addUser(new
AsyncCallback<User>() {
@Override
public void
onFailure(Throwable caught) {
MessageBox.alert(caught.getMessage());
}
@Override
public void
onSuccess(User result) {
// save the new
record
String
firstname = result.getFirstName();
String lastname
= result.getLastName();
String addresse
= result.getAdresse();
Record record =
recordDef.createRecord(new Object[]
{ firstname,
lastname, addresse,
"x" });
storeUser.add(record);
}
});
}
});
}
});
}
private void showUserForm( final Store store, final int rowIndex) {
final Window window = new Window();
window.setTitle("Edit user");
window.setWidth(500);
window.setHeight(300);
window.setMinWidth(350);
window.setMinHeight(300);
window.setLayout(new FitLayout());
window.setPaddings(5);
window.setButtonAlign(Position.CENTER);
window.setClosable(true);
window.setCloseAction(Window.HIDE);
window.setPlain(true);
final FormPanel formPanel = new FormPanel();
formPanel.setFrame(true);
formPanel.setTitle("");
formPanel.setWidth(350);
formPanel.setLabelWidth(75);
formPanel.setClosable(true);
final TextField firstName = new TextField("First Name",
"firstname", 230);
firstName.setAllowBlank(false);
formPanel.add(firstName);
final TextField lastName = new TextField("Last Name",
"lastname",
230);
lastName.setAllowBlank(false);
formPanel.add(lastName);
final TextField address = new TextField("Address", "address",
230);
address.setAllowBlank(false);
formPanel.add(address);
final Record record = store.getRecordAt(rowIndex);
firstName.setValue(record.getAsString("firstname"));
lastName.setValue(record.getAsString("lastname"));
address.setValue(record.getAsString("address"));
Button update = new Button("Update");
formPanel.add(update);
// add handler for update
update.addListener(new ButtonListenerAdapter() {
@Override
public void onClick(Button button, EventObject
e) {
// get the record to be updated
record.set("firstname",
firstName.getText());
record.set("lastname",
lastName.getText());
record.set("address",
address.getText());
record.commit();
store.commitChanges();
window.close();
}
});
window.add(formPanel);
RootPanel.get().add(window);
window.show();
}
}
[\Code]
I have the above code which works fine but the panel does not display
when the hyperlink is clicked, that is first time it is not loaded.
Only when in click on second tab, then first tab, the tree is
displayed
Anyone has an idea what's wong with the tree.
Rgds
Neerou
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"GWT-Ext Developer Forum" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/gwt-ext?hl=en
-~----------~----~----~----~------~----~------~--~---
