package com.jcommerce.gwt.client.panels.article;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.extjs.gxt.ui.client.data.ModelData;
import com.extjs.gxt.ui.client.event.ButtonEvent;
import com.extjs.gxt.ui.client.event.SelectionListener;
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.store.TreeStore;
import com.extjs.gxt.ui.client.widget.ContentPanel;
import com.extjs.gxt.ui.client.widget.button.Button;
import com.extjs.gxt.ui.client.widget.grid.CheckColumnConfig;
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.layout.FitLayout;
import com.extjs.gxt.ui.client.widget.treegrid.EditorTreeGrid;
import com.extjs.gxt.ui.client.widget.treegrid.TreeGridCellRenderer;
import com.google.gwt.user.client.Element;
import com.jcommerce.gwt.client.ContentWidget;
import com.jcommerce.gwt.client.ModelNames;
import com.jcommerce.gwt.client.PageState;
import com.jcommerce.gwt.client.form.ArticleCatForm;
import com.jcommerce.gwt.client.form.BeanObject;
import com.jcommerce.gwt.client.model.IArticleCategory;
import com.jcommerce.gwt.client.resources.Resources;
import com.jcommerce.gwt.client.service.DeleteService;
import com.jcommerce.gwt.client.widgets.ActionCellRenderer;
public class ArticleCatListPanel extends ContentWidget {
public static interface Constants {
String ArticleCat_MenuName();
String ArticleCat_col_name();
String ArticleCat_col_type();
String ArticleCat_col_desc();
String ArticleCat_col_order();
String ArticleCat_col_showInNav();
String ArticleCat_sbtn_add();
String ArticleCat_title();
}
private ArticleCatListPanel(){
curState = new State();
initJS(this);
}
private native void initJS(ArticleCatListPanel me) /*-{
$wnd.changeArticleCat = function (id) {
me.@com.jcommerce.gwt.client.panels.article.ArticleCatListPanel::modifyArticleCatAndRefrsh(Ljava/lang/Long;)(id);
};
$wnd.deleteArticleCat = function(id){
me.@com.jcommerce.gwt.client.panels.article.ArticleCatListPanel::deleteArticleCatAndRefrsh(Ljava/lang/Long;)(id);
}
}-*/;
private static ArticleCatListPanel instance;
public static ArticleCatListPanel getInstance(){
if(instance == null){
return new ArticleCatListPanel();
}
else return instance;
}
public static class State extends PageState{
@Override
public String getPageClassName() {
// TODO Auto-generated method stub
return ArticleCatListPanel.class.getName();
}
public String getMenuDisplayName() {
return Resources.constants.ArticleCat_MenuName();
}
}
private void modifyArticleCatAndRefrsh(final Long id){
ArticleCatPanel.State newState = new ArticleCatPanel.State();
newState.setIsEdit(true);
newState.setId(id);
newState.execute();
}
private void deleteArticleCatAndRefrsh(final Long id){
new DeleteService().deleteBean(ModelNames.ARTICLECATAGORY, id, new DeleteService.Listener(){
@Override
public void onSuccess(Boolean success) {
refresh();
}
});
}
TreeStore<BeanObject> store = new TreeStore<BeanObject>();
protected void onRender(Element parent, int index) {
super.onRender(parent, index);
store.addStoreListener(new StoreListener<BeanObject>() {
public void storeUpdate(StoreEvent<BeanObject> se) {
List<Record> changed = store.getModifiedRecords();
}
});
//toolBar = new PagingToolBar(50);
//toolBar.bind(loader);
List<ColumnConfig> columns = new ArrayList<ColumnConfig>();
//CheckBoxSelectionModel<BeanObject> sm = new CheckBoxSelectionModel<BeanObject>();
//columns.add(sm.getColumn());
ColumnConfig colName = new ColumnConfig(IArticleCategory.NAME, Resources.constants.ArticleCat_col_name(), 150);
colName.setRenderer(new TreeGridCellRenderer<BeanObject>());
columns.add(colName);
ColumnConfig colcatType = new ColumnConfig(IArticleCategory.TYPE, Resources.constants.ArticleCat_col_type(), 150);
colcatType.setRenderer(new GridCellRenderer<BeanObject>(){
public Object render(BeanObject model, String property,
ColumnData config, int rowIndex, int colIndex,
ListStore store, Grid grid) {
String html = "";
if(model.getString(IArticleCategory.TYPE).equals("1")){
html = "普通分类";
}
else if(model.getString(IArticleCategory.TYPE).equals("2")){
html = "系统分类";
}
else if(model.getString(IArticleCategory.TYPE).equals("3")){
html = "信息分类";
}
else if(model.getString(IArticleCategory.TYPE).equals("4")){
html = "帮助分类";
}
else if(model.getString(IArticleCategory.TYPE).equals("5")){
html = "网店帮助";
}
return html;
}
});
columns.add(colcatType);
columns.add(new ColumnConfig(IArticleCategory.DESCRIPTION, Resources.constants.ArticleCat_col_desc(), 200));
columns.add(new ColumnConfig(IArticleCategory.SORT_ORDER, Resources.constants.ArticleCat_col_order(), 80));
columns.add(new CheckColumnConfig(IArticleCategory.SHOW_IN_NAV, Resources.constants.ArticleCat_col_showInNav(), 150) {
// TODO: wrap the code for Long type column into a baseclass
protected String getCheckState(ModelData model, String property, int rowIndex,
int colIndex) {
int v = 0;
if (model.get(property) != null) {
v = ((Number)model.get(property)).intValue();
}
// see IConstants.DBTYPE_TRUE
String on = v==1 ? "-on" : "";
return on;
}
});
ColumnConfig actcol = new ColumnConfig("Action", Resources.constants.action(), 150);
columns.add(actcol);
ColumnModel cm = new ColumnModel(columns);
EditorTreeGrid<BeanObject> grid = new EditorTreeGrid<BeanObject>(store, cm);
grid.setLoadMask(true);
grid.setBorders(true);
grid.setAutoExpand(true);
grid.setAutoExpandColumn(IArticleCategory.NAME);
ActionCellRenderer render = new ActionCellRenderer(grid){
public Boolean filtActs(BeanObject model,ActionCellRenderer.ActionInfo act){
String catType = model.getString(ArticleCatForm.TYPE);
if((catType.equals("2")||catType.equals("3")||catType.equals("4")) && act.getText().equals(Resources.constants.delete().toString())){
return true;
}
else {
return false;
}
}
};
ActionCellRenderer.ActionInfo act = new ActionCellRenderer.ActionInfo();
act.setText(Resources.constants.edit());
act.setAction("changeArticleCat($id)");
render.addAction(act);
act = new ActionCellRenderer.ActionInfo();
act.setText(Resources.constants.delete());
act.setAction("deleteArticleCat($id)");
act.setTooltip(Resources.constants.GoodsList_action_delete());
render.addAction(act);
actcol.setRenderer(render);
ContentPanel panel = new ContentPanel();
panel.setFrame(true);
panel.setCollapsible(true);
panel.setAnimCollapse(false);
panel.setIconStyle("icon-table");
//panel.setHeading("Paging Grid");
panel.setLayout(new FitLayout());
panel.add(grid);
panel.setHeight(350);
add(panel);
}
public Button getShortCutButton(){
Button sButton = new Button(Resources.constants.ArticleCat_sbtn_add());
sButton.addSelectionListener(new SelectionListener<ButtonEvent>() {
public void componentSelected(ButtonEvent ce) {
onShortCutButtonClicked();
}
});
return sButton;
}
public void onShortCutButtonClicked() {
ArticleCatPanel.State newState = new ArticleCatPanel.State();
newState.setIsEdit(false);
newState.execute();
}
public void refresh(){
Map<String,List<String>> wantedFields = new HashMap<String,List<String>>();
String model = ModelNames.ARTICLECATAGORY;
List<String> fields = new ArrayList<String>();
fields.add(ArticleCatForm.ID);
fields.add(ArticleCatForm.NAME);
fields.add(ArticleCatForm.TYPE);
fields.add(ArticleCatForm.DESCRIPTION);
fields.add(ArticleCatForm.SHOW_IN_NAV);
fields.add(ArticleCatForm.KEYWORDS);
fields.add(ArticleCatForm.PARENT);
fields.add(ArticleCatForm.PARENT);
wantedFields.put(model, fields);
// FIXME
// new ListService().treeListBeans(ModelNames.ARTICLECATAGORY,null,wantedFields,new ListService.Listener(){
//
// @Override
// public void onSuccess(List<BeanObject> beans) {
// System.out.println("========ArticleCat size = "+beans.size()+"====");
// if(store.getChildCount()>0){
// store.removeAll();
// }
// store.add(beans, true);
// }
//
// });
//toolBar.refresh();
}
@Override
public String getDescription() {
// TODO Auto-generated method stub
return null;
}
@Override
public String getName() {
// TODO Auto-generated method stub
return Resources.constants.ArticleCat_title();
}
}