com.xyz.stock.client.view.OnsaleItemView.java Source code

Java tutorial

Introduction

Here is the source code for com.xyz.stock.client.view.OnsaleItemView.java

Source

/*
 * Ext GWT - Ext for GWT
 * Copyright(c) 2007-2009, Ext JS, LLC.
 * licensing@extjs.com
 * 
 * http://extjs.com/license
 */
package com.xyz.stock.client.view;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import com.extjs.gxt.ui.client.Registry;
import com.extjs.gxt.ui.client.Style.HorizontalAlignment;
import com.extjs.gxt.ui.client.Style.SortDir;
import com.extjs.gxt.ui.client.binding.FieldBinding;
import com.extjs.gxt.ui.client.binding.FormBinding;
import com.extjs.gxt.ui.client.core.XTemplate;
import com.extjs.gxt.ui.client.data.BasePagingLoadConfig;
import com.extjs.gxt.ui.client.data.BasePagingLoader;
import com.extjs.gxt.ui.client.data.BeanModel;
import com.extjs.gxt.ui.client.data.BeanModelLookup;
import com.extjs.gxt.ui.client.data.BeanModelReader;
import com.extjs.gxt.ui.client.data.LoadEvent;
import com.extjs.gxt.ui.client.data.Loader;
import com.extjs.gxt.ui.client.data.ModelKeyProvider;
import com.extjs.gxt.ui.client.data.PagingLoadConfig;
import com.extjs.gxt.ui.client.data.PagingLoadResult;
import com.extjs.gxt.ui.client.data.PagingLoader;
import com.extjs.gxt.ui.client.data.RpcProxy;
import com.extjs.gxt.ui.client.event.ButtonEvent;
import com.extjs.gxt.ui.client.event.Events;
import com.extjs.gxt.ui.client.event.GridEvent;
import com.extjs.gxt.ui.client.event.Listener;
import com.extjs.gxt.ui.client.event.SelectionListener;
import com.extjs.gxt.ui.client.mvc.Dispatcher;
import com.extjs.gxt.ui.client.store.ListStore;
import com.extjs.gxt.ui.client.widget.ContentPanel;
import com.extjs.gxt.ui.client.widget.LayoutContainer;
import com.extjs.gxt.ui.client.widget.button.Button;
import com.extjs.gxt.ui.client.widget.form.ComboBox;
import com.extjs.gxt.ui.client.widget.form.DateField;
import com.extjs.gxt.ui.client.widget.form.FormPanel;
import com.extjs.gxt.ui.client.widget.form.TextField;
import com.extjs.gxt.ui.client.widget.form.ComboBox.TriggerAction;
import com.extjs.gxt.ui.client.widget.form.FormPanel.LabelAlign;
import com.extjs.gxt.ui.client.widget.grid.ColumnConfig;
import com.extjs.gxt.ui.client.widget.grid.ColumnData;
import com.extjs.gxt.ui.client.widget.grid.ColumnModel;
import com.extjs.gxt.ui.client.widget.grid.Grid;
import com.extjs.gxt.ui.client.widget.grid.GridCellRenderer;
import com.extjs.gxt.ui.client.widget.grid.RowExpander;
import com.extjs.gxt.ui.client.widget.layout.ColumnLayout;
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
import com.extjs.gxt.ui.client.widget.layout.FormData;
import com.extjs.gxt.ui.client.widget.layout.FormLayout;
import com.extjs.gxt.ui.client.widget.layout.RowLayout;
import com.extjs.gxt.ui.client.widget.table.NumberCellRenderer;
import com.extjs.gxt.ui.client.widget.toolbar.PagingToolBar;
import com.extjs.gxt.ui.client.widget.toolbar.SeparatorToolItem;
import com.extjs.gxt.ui.client.widget.toolbar.ToolBar;
import com.google.gwt.i18n.client.DateTimeFormat;
import com.google.gwt.i18n.client.NumberFormat;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.xyz.customer.client.CusServiceAsync;
import com.xyz.customer.client.Customer;
import com.xyz.customer.client.mvc.CusModel;
import com.xyz.resources.client.ZkbConstants;
import com.xyz.resources.client.model.Status;
import com.xyz.resources.client.pages.Template;
import com.xyz.stock.client.ProductServiceAsync;
import com.xyz.stock.client.Stock;
import com.xyz.stock.client.i18n.StockMessages;
import com.xyz.stock.client.model.ItemModel;

public class OnsaleItemView extends LayoutContainer {

    private ProductServiceAsync service;
    private ContentPanel panel;
    private Grid<BeanModel> grid;
    private ListStore<BeanModel> store;
    private BasePagingLoader<PagingLoadResult<ItemModel>> loader;
    private GridCellRenderer<BeanModel> gridNumber;
    private GridCellRenderer<BeanModel> statusRen;
    // ?
    private ItemModel tm;//

    private ItemForm itemForm;
    private StockMessages msg;

    public OnsaleItemView() {
        service = (ProductServiceAsync) Registry.get(Stock.PRODSERVICE);
        final NumberFormat currency = NumberFormat.getCurrencyFormat();
        final NumberFormat number = NumberFormat.getFormat("0.00");
        final NumberCellRenderer<Grid<BeanModel>> numberRenderer = new NumberCellRenderer<Grid<BeanModel>>(
                currency);
        msg = (StockMessages) Registry.get(Stock.MESSAGE);

        statusRen = new GridCellRenderer<BeanModel>() {
            public String render(BeanModel model, String property, ColumnData config, int rowIndex, int colIndex,
                    ListStore<BeanModel> store, Grid<BeanModel> grid) {
                String val = (String) model.get(property);
                String sta = ZkbConstants.get().getStatus(val);
                return sta;
            }
        };

        gridNumber = new GridCellRenderer<BeanModel>() {
            public String render(BeanModel model, String property, ColumnData config, int rowIndex, int colIndex,
                    ListStore<BeanModel> store, Grid<BeanModel> grid) {
                return numberRenderer.render(null, property, model.get(property));
            }
        };

        panel = new ContentPanel();
        panel.setHeaderVisible(false);
        panel.setLayout(new RowLayout());
    }

    @Override
    protected void onRender(Element parent, int index) {
        super.onRender(parent, index);
        // ?
        createQueryForm();
        createExpander();
        setLayout(new FitLayout());
        add(panel);
    }

    private void createExpander() {
        // data proxy
        RpcProxy<PagingLoadResult<ItemModel>> proxy = new RpcProxy<PagingLoadResult<ItemModel>>() {
            @Override
            protected void load(Object loadConfig, AsyncCallback<PagingLoadResult<ItemModel>> callback) {
                service.getOnsaleItems((PagingLoadConfig) loadConfig, tm, callback);
            }
        };
        loader = new BasePagingLoader<PagingLoadResult<ItemModel>>(proxy, new BeanModelReader());

        final PagingToolBar pagingBar = new PagingToolBar(16);
        pagingBar.bind(loader);

        List<ColumnConfig> configs = new ArrayList<ColumnConfig>();
        StringBuilder sb = new StringBuilder();
        sb.append("<table>");

        sb.append("</table>");
        XTemplate tpl = XTemplate.create(sb.toString());

        RowExpander expander = new RowExpander();
        expander.setTemplate(tpl);
        configs.add(expander);

        ColumnConfig column = new ColumnConfig("approveStatus", "?", 120);
        configs.add(column);

        column = new ColumnConfig("title", "?? ", 100);
        configs.add(column);

        column = new ColumnConfig("price", "", 100);
        configs.add(column);

        column = new ColumnConfig("num", "?", 100);
        configs.add(column);

        column = new ColumnConfig("dateModified", "", 200);
        column.setAlignment(HorizontalAlignment.RIGHT);
        column.setDateTimeFormat(DateTimeFormat.getShortDateFormat());
        configs.add(column);

        column = new ColumnConfig("delistTime", "", 200);
        column.setAlignment(HorizontalAlignment.RIGHT);
        column.setDateTimeFormat(DateTimeFormat.getMediumDateTimeFormat());
        configs.add(column);

        store = new ListStore<BeanModel>(loader);
        store.setKeyProvider(new ModelKeyProvider<BeanModel>() {
            public String getKey(BeanModel model) {
                return model.get("key");
            }
        });

        ColumnModel cm = new ColumnModel(configs);

        ContentPanel cp = new ContentPanel();
        cp.setLayout(new FitLayout());
        cp.setHeading(msg.itemList());
        ToolBar toolBar = new ToolBar();
        toolBar.setAlignment(HorizontalAlignment.RIGHT);
        Button ctBtn = new Button(msg.create(), Stock.ICONS.add());
        ctBtn.addSelectionListener(new SelectionListener<ButtonEvent>() {
            @Override
            public void componentSelected(ButtonEvent ce) {
                ItemModel itemModel = new ItemModel();
                BeanModel bean = BeanModelLookup.get().getFactory(ItemModel.class).createModel(itemModel);
                itemForm = new ItemForm(service, store);
                itemForm.setModel(bean);
                itemForm.show();
            }
        });
        toolBar.add(ctBtn);
        toolBar.add(new SeparatorToolItem());
        toolBar.add(new Button(msg.delete(), Stock.ICONS.delete()));
        toolBar.add(new SeparatorToolItem());
        toolBar.add(new Button(msg.config(), Stock.ICONS.plugin()));
        cp.setTopComponent(toolBar);
        cp.setBottomComponent(pagingBar);

        cp.setIcon(Stock.ICONS.table());
        cp.setAnimCollapse(false);
        cp.setCollapsible(true);

        grid = new Grid<BeanModel>(store, cm);
        // ?
        grid.addListener(Events.Attach, new Listener<GridEvent<BeanModel>>() {
            public void handleEvent(GridEvent<BeanModel> be) {
                PagingLoadConfig config = new BasePagingLoadConfig();
                config.setOffset(0);
                config.setLimit(16);

                Map<String, Object> state = grid.getState();
                if (state.containsKey("offset")) {
                    int offset = (Integer) state.get("offset");
                    int limit = (Integer) state.get("limit");
                    config.setOffset(offset);
                    config.setLimit(limit);
                }
                if (state.containsKey("sortField")) {
                    config.setSortField((String) state.get("sortField"));
                    config.setSortDir(SortDir.valueOf((String) state.get("sortDir")));
                }
                loader.load(config);
            }
        });
        grid.setLoadMask(true);

        grid.addPlugin(expander);
        grid.setAutoExpandColumn("title");
        // grid.getView().setAutoFill(true);
        grid.setAutoHeight(true);
        cp.add(grid);

        panel.add(cp);
        grid.addListener(Events.RowDoubleClick, new Listener<GridEvent<BeanModel>>() {
            public void handleEvent(GridEvent<BeanModel> be) {
                itemForm = new ItemForm(service, store);
                itemForm.setModel(be.getModel());
                itemForm.setVisible(true);
            }
        });
    }

    private GridCellRenderer<BeanModel> createEditIcon() {
        GridCellRenderer<BeanModel> buttonRenderer = new GridCellRenderer<BeanModel>() {

            public Object render(final BeanModel model, String property, ColumnData config, final int rowIndex,
                    final int colIndex, final ListStore<BeanModel> store, Grid<BeanModel> grid) {
                ToolBar toolBar = new ToolBar();
                toolBar.setAlignment(HorizontalAlignment.LEFT);
                toolBar.setBorders(false);
                toolBar.setShadow(false);
                Button b = new Button("", Stock.ICONS.edit(), new SelectionListener<ButtonEvent>() {
                    @Override
                    public void componentSelected(ButtonEvent ce) {
                        String key = ce.getButton().getData("key");
                        /*itemForm = new StockForm(service, store);
                        itemForm.setModel(store.findModel(key));
                        itemForm.setVisible(true);*/
                        BeanModel bm = store.findModel(key);
                        ItemModel tm = (ItemModel) bm.getBean();
                        //String status = tm.getStatus();
                        /*final StockDetail td = new StockDetail(tm);
                            
                        td.setVisible(true);*/
                    }
                });
                b.setData("key", model.get(property));
                b.setToolTip(msg.edit());
                toolBar.add(b);
                Button quitBtn = new Button("", Stock.ICONS.delete());
                toolBar.add(quitBtn);
                quitBtn.setToolTip("?,,?");
                return toolBar;
            }
        };
        return buttonRenderer;
    }

    /**
     * ?
     */
    private void createQueryForm() {
        FormData formData = new FormData("95%");
        FormPanel formpanel = new FormPanel();

        formpanel.setBorders(false);
        formpanel.setAnimCollapse(true);
        formpanel.setCollapsible(true);
        formpanel.setIcon(Stock.ICONS.form());
        formpanel.setHeading(msg.itemQuery());
        formpanel.setLabelAlign(LabelAlign.LEFT);
        formpanel.setButtonAlign(HorizontalAlignment.CENTER);

        formpanel.setLayout(new ColumnLayout());

        LayoutContainer left = new LayoutContainer();
        left.setStyleAttribute("paddingRight", "10px");
        FormLayout layout = new FormLayout();
        layout.setLabelAlign(LabelAlign.LEFT);
        left.setLayout(layout);

        /*final ComboBox<CusModel> combo = createCusField();
        left.add(combo, formData);*/

        TextField<String> tid = new TextField<String>();
        tid.setFieldLabel("");
        tid.setName("title");
        left.add(tid, formData);

        LayoutContainer center = new LayoutContainer();
        center.setStyleAttribute("paddingLeft", "10px");
        layout = new FormLayout();
        layout.setLabelAlign(LabelAlign.LEFT);
        center.setLayout(layout);

        DateField created = new DateField();
        created.setFieldLabel("");
        created.setName("delistTime");
        center.add(created, formData);

        center.add(new Button(msg.query(), Stock.ICONS.search(), new SelectionListener<ButtonEvent>() {
            @Override
            public void componentSelected(ButtonEvent ce) {
                // ??
                grid.fireEvent(Events.Attach);
            }
        }));

        LayoutContainer right = new LayoutContainer();
        right.setStyleAttribute("paddingLeft", "10px");
        layout = new FormLayout();
        layout.setLabelAlign(LabelAlign.LEFT);
        right.setLayout(layout);

        DateField createdEnd = new DateField();
        createdEnd.setFieldLabel(msg.fromTo());
        createdEnd.setName("modified");
        right.add(createdEnd, formData);

        panel.add(formpanel);

        final FormBinding queryFb = new FormBinding(formpanel, true);
        tm = new ItemModel();
        BeanModel bm = BeanModelLookup.get().getFactory(ItemModel.class).createModel(tm);
        queryFb.bind(bm);
        /*FieldBinding nickBinding = new FieldBinding(combo, "buyerNick") {
        @Override
        protected Object onConvertFieldValue(Object value) {
           if(combo.getValue()!=null)
              return combo.getValue().getNick();
           else
             return null;
        }
        };
        queryFb.addFieldBinding(nickBinding);
        FieldBinding statusBinding = new FieldBinding(tStatus, "status") {
        @Override
        protected Object onConvertFieldValue(Object value) {
           if(tStatus.getValue()!=null)
              return tStatus.getValue().getCode();
           else
            return null;
        }
        };
        queryFb.addFieldBinding(statusBinding);
        FieldBinding ownerBinding = new FieldBinding(owner, "ownerId") {
        @Override
        protected Object onConvertFieldValue(Object value) {
           if(owner.getValue()!=null)
              return owner.getValue().getKey();
           else
            return null;
        }
        };
        queryFb.addFieldBinding(ownerBinding);*/
    }

    /*private ComboBox<CusModel> createCusField() {
       cusService = (CusServiceAsync) Registry.get(Customer.CUSSERVICE);
           
       final ComboBox<CusModel> combo = new ComboBox<CusModel>();
           
       // data proxy
     RpcProxy<PagingLoadResult<CusModel>> cproxy = new RpcProxy<PagingLoadResult<CusModel>>() {
         @Override
         protected void load(Object loadConfig, AsyncCallback<PagingLoadResult<CusModel>> callback) {
            cusService.getCuss((PagingLoadConfig) loadConfig, callback);
         }
     };
        
       PagingLoader<PagingLoadResult<CusModel>> cloader = new BasePagingLoader<PagingLoadResult<CusModel>>(cproxy);
        
       cloader.addListener(Loader.BeforeLoad, new Listener<LoadEvent>() {
     public void handleEvent(LoadEvent be) {
        PagingLoadConfig plc = be.getConfig();
        plc.set("start",plc.get("offset"));
     }
       });
        
       ListStore<CusModel> cstore = new ListStore<CusModel>(cloader);
        
       combo.setFieldLabel(msg.lBuyerNick());
       combo.setName("buyerNick");
       combo.setDisplayField("nick");
       combo.setValueField("nick");
       combo.setTypeAhead(true);
       combo.setItemSelector("div.search-item");
       combo.setTemplate(Template.getCustomerTpl());
       combo.setStore(cstore);
       combo.setMinChars(2);
       combo.setHideTrigger(true);
       combo.setPageSize(10);
       return combo;
    }*/
}