[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
-~----------~----~----~----~------~----~------~--~---

Reply via email to