package com.jcommerce.gwt.client.panels.system; import java.util.ArrayList; import java.util.List; import com.extjs.gxt.ui.client.Style.HorizontalAlignment; import com.extjs.gxt.ui.client.data.BaseListLoader; import com.extjs.gxt.ui.client.data.ListLoadConfig; import com.extjs.gxt.ui.client.data.ListLoadResult; import com.extjs.gxt.ui.client.data.ListLoader; import com.extjs.gxt.ui.client.data.RpcProxy; import com.extjs.gxt.ui.client.store.ListStore; import com.extjs.gxt.ui.client.store.Record; import com.extjs.gxt.ui.client.store.StoreEvent; import com.extjs.gxt.ui.client.store.StoreListener; import com.extjs.gxt.ui.client.widget.ContentPanel; import com.extjs.gxt.ui.client.widget.Info; import com.extjs.gxt.ui.client.widget.form.TextField; import com.extjs.gxt.ui.client.widget.grid.CellEditor; import com.extjs.gxt.ui.client.widget.grid.CheckBoxSelectionModel; 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.EditorGrid; 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.layout.FitLayout; import com.google.gwt.event.logical.shared.ResizeEvent; import com.google.gwt.event.logical.shared.ResizeHandler; import com.google.gwt.user.client.Element; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback; import com.jcommerce.gwt.client.ContentWidget; import com.jcommerce.gwt.client.PageState; import com.jcommerce.gwt.client.resources.Resources; import com.jcommerce.gwt.client.service.RemoteService; public class ShippingMetaListPanel extends ContentWidget { public static interface Constants { String ShippingMetaList_MenuName(); String ShippingMetaList_ID(); String ShippingMetaList_NAME(); String ShippingMetaList_INSURE(); String ShippingMetaList_DESC(); String ShippingMetaList_COD(); String ShippingMetaList_AUTHOR(); String ShippingMetaList_WEBSITE(); String ShippingMetaList_VERSION(); String ShippingMetaList_ACTION(); String ShippingMetaList_INSTALL(); String ShippingMetaList_UNINSTALL(); String ShippingMetaList_SHIPPINGAREA(); String ShippingMetaList_EDITTEMPLATE(); } public static class State extends PageState { public String getPageClassName() { return ShippingMetaListPanel.class.getName(); } public String getMenuDisplayName() { return Resources.constants.ShippingMetaList_MenuName(); } } @Override protected PageState getCurState() { if (curState == null ) { curState = new State(); } return (State)curState; } @Override public String getDescription() { return "cwBasicTextDescription"; } private static ShippingMetaListPanel instance; public static ShippingMetaListPanel getInstance() { if(instance == null) { instance = new ShippingMetaListPanel(); } return instance; } private ShippingMetaListPanel() { super(); initJS(this); } private native void initJS(ShippingMetaListPanel me) /*-{ $wnd.installShipping = function (code) { me.@com.jcommerce.gwt.client.panels.system.ShippingMetaListPanel::installShipping(Ljava/lang/String;)(code); }; $wnd.editTemplate = function (id) { me.@com.jcommerce.gwt.client.panels.system.ShippingMetaListPanel::editTemplate(Ljava/lang/String;)(id); }; $wnd.uninstallShipping = function (id) { me.@com.jcommerce.gwt.client.panels.system.ShippingMetaListPanel::uninstallShipping(Ljava/lang/String;)(id); }; $wnd.shippingArea = function (id) { me.@com.jcommerce.gwt.client.panels.system.ShippingMetaListPanel::shippingArea(Ljava/lang/String;)(id); }; }-*/; @Override public String getName() { return Resources.constants.ShippingMetaList_MenuName(); } ListLoader<ListLoadResult<ShippingConfigMetaForm>> loader = null; protected void onRender(Element parent, int index) { super.onRender(parent, index); RpcProxy<ListLoadResult<ShippingConfigMetaForm>> proxy = new RpcProxy<ListLoadResult<ShippingConfigMetaForm>>() { public void load(Object loadConfig, AsyncCallback<ListLoadResult<ShippingConfigMetaForm>> callback) { RemoteService.getSpecialService().getCombinedShippingMetaList((ListLoadConfig) loadConfig, callback); } }; loader = new BaseListLoader<ListLoadResult<ShippingConfigMetaForm>>(proxy); loader.setRemoteSort(true); final ListStore<ShippingConfigMetaForm> store = new ListStore<ShippingConfigMetaForm>(loader); store.addStoreListener(new StoreListener<ShippingConfigMetaForm>() { public void storeUpdate(StoreEvent<ShippingConfigMetaForm> se) { List<Record> changed = store.getModifiedRecords(); } }); List<ColumnConfig> columns = new ArrayList<ColumnConfig>(); final CheckBoxSelectionModel<ShippingConfigMetaForm> smRowSelection = new CheckBoxSelectionModel<ShippingConfigMetaForm>(); columns.add(smRowSelection.getColumn()); // columns.add(new ColumnConfig(ShippingConfigMetaForm.ID, Resources.constants // .ShippingMetaList_ID(), 50)); ColumnConfig col = new ColumnConfig(ShippingConfigMetaForm.NAME, Resources.constants .ShippingMetaList_NAME(), 100); col.setEditor(new CellEditor(new TextField<String>())); columns.add(col); columns.add(new ColumnConfig(ShippingConfigMetaForm.DESCRIPTION, Resources.constants .ShippingMetaList_DESC(), 200)); columns.add(new ColumnConfig(ShippingConfigMetaForm.INSURE, Resources.constants .ShippingMetaList_INSURE(), 100)); columns.add(new ColumnConfig(ShippingConfigMetaForm.SUPPORTCOD, Resources.constants .ShippingMetaList_COD(), 100)); columns.add(new ColumnConfig(ShippingConfigMetaForm.VERSION, Resources.constants .ShippingMetaList_VERSION(), 100)); columns.add(new ColumnConfig(ShippingConfigMetaForm.AUTHOR, Resources.constants .ShippingMetaList_AUTHOR(), 100)); ColumnConfig actcol = new ColumnConfig("Action", Resources.constants .ShippingMetaList_ACTION(), 200); columns.add(actcol); ColumnModel cm = new ColumnModel(columns); Grid<ShippingConfigMetaForm> grid = new EditorGrid<ShippingConfigMetaForm>(store, cm); grid.setLoadMask(true); grid.setBorders(true); grid.setSelectionModel(smRowSelection); grid.setAutoExpandColumn(ShippingConfigMetaForm.NAME); ActionCellRenderer render = new ActionCellRenderer(grid); actcol.setRenderer(render); final ContentPanel panel = new ContentPanel(); panel.setFrame(true); panel.setCollapsible(true); panel.setAnimCollapse(false); panel.setButtonAlign(HorizontalAlignment.CENTER); panel.setIconStyle("icon-table"); // panel.setHeading("Paging Grid"); panel.setLayout(new FitLayout()); panel.add(grid); panel.setHeight(500); panel.setWidth("100%"); // panel.setBottomComponent(toolBar); add(panel); Window.addResizeHandler(new ResizeHandler() { public void onResize(ResizeEvent event) { int w = event.getWidth() - 300; panel.setWidth(w + "px"); } }); } class ActionCellRenderer implements GridCellRenderer<ShippingConfigMetaForm> { public ActionCellRenderer(Grid grid) { } public String render(ShippingConfigMetaForm model, String property, ColumnData config, final int rowIndex, final int colIndex, ListStore<ShippingConfigMetaForm> store, Grid<ShippingConfigMetaForm> grid) { try { Boolean install = model.getInstall(); System.out.println("install: "+install); String code = model.getShippingCode(); System.out.println("code: "+code); String id = model.getID(); if(id==null) { id = ""; } System.out.println("id: "+id); StringBuffer sb = new StringBuffer(); if(install) { sb.append("<a href=\"javascript:uninstallShipping('"); sb.append(id); sb.append("');\">").append(Resources.constants.ShippingMetaList_UNINSTALL()).append("</a> "); sb.append("<a href=\"javascript:shippingArea('"); sb.append(id); sb.append("');\">").append(Resources.constants.ShippingMetaList_SHIPPINGAREA()).append("</a> "); sb.append("<a href=\"javascript:editTemplate('"); sb.append(id); sb.append("');\">").append(Resources.constants.ShippingMetaList_EDITTEMPLATE()).append("</a> "); } else { sb.append("<a href=\"javascript:installShipping('"); sb.append(code); sb.append("');\">").append(Resources.constants.ShippingMetaList_INSTALL()).append("</a>"); } return sb.toString(); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); } } } public void refresh() { loader.load(); } private void installShipping(String code) { System.out.println("installShipping: "+code); RemoteService.getSpecialService().installShipping(code, new AsyncCallback<Boolean>() { public void onFailure(Throwable caught) { log("error in install shipping: "+caught.getMessage()); } public void onSuccess(Boolean result) { if(result) { refresh(); } else { Info.display("oops", "install failed!!!"); } } }); } private void uninstallShipping(String id) { System.out.println("uninstallShipping: "+id); RemoteService.getSpecialService().uninstallShipping(id, new AsyncCallback<Boolean>() { public void onFailure(Throwable caught) { log("error in uninstall shipping: "+caught.getMessage()); } public void onSuccess(Boolean result) { if(result) { refresh(); } else { Info.display("oops", "uninstall failed!!!"); } } }); } private void editTemplate(String id){ System.out.println("editTemplate, id: "+id); ShippingTemplatePanel.State newState = new ShippingTemplatePanel.State(); newState.setId(id); newState.setIsEdit(true); newState.execute(); } private void shippingArea(String id) { System.out.println("shippingArea, id: "+id); ShippingAreaListPanel.State newState = new ShippingAreaListPanel.State(); newState.setShippingId(id); newState.execute(); } }