package com.jcommerce.gwt.client.panels.member;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import com.extjs.gxt.ui.client.Style.HorizontalAlignment;
import com.extjs.gxt.ui.client.data.BasePagingLoader;
import com.extjs.gxt.ui.client.event.ButtonEvent;
import com.extjs.gxt.ui.client.event.Listener;
import com.extjs.gxt.ui.client.event.MessageBoxEvent;
import com.extjs.gxt.ui.client.event.SelectionListener;
import com.extjs.gxt.ui.client.store.ListStore;
import com.extjs.gxt.ui.client.widget.ContentPanel;
import com.extjs.gxt.ui.client.widget.HorizontalPanel;
import com.extjs.gxt.ui.client.widget.MessageBox;
import com.extjs.gxt.ui.client.widget.button.Button;
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.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.layout.FitLayout;
import com.extjs.gxt.ui.client.widget.toolbar.PagingToolBar;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.TextBox;
import com.jcommerce.gwt.client.ContentWidget;
import com.jcommerce.gwt.client.ModelNames;
import com.jcommerce.gwt.client.PageState;
import com.jcommerce.gwt.client.iShop;
import com.jcommerce.gwt.client.form.BeanObject;
import com.jcommerce.gwt.client.model.IUser;
import com.jcommerce.gwt.client.model.IUserRank;
import com.jcommerce.gwt.client.panels.data.ImportPanel.State;
import com.jcommerce.gwt.client.panels.order.OrderListPanel;
import com.jcommerce.gwt.client.panels.privilege.AdminLog;
import com.jcommerce.gwt.client.resources.Resources;
import com.jcommerce.gwt.client.service.Condition;
import com.jcommerce.gwt.client.service.Criteria;
import com.jcommerce.gwt.client.service.DeleteService;
import com.jcommerce.gwt.client.service.ListService;
import com.jcommerce.gwt.client.service.PagingListService;
import com.jcommerce.gwt.client.service.ReadService;
import com.jcommerce.gwt.client.service.UpdateService;
import com.jcommerce.gwt.client.service.WaitService;
import com.jcommerce.gwt.client.widgets.ActionCellRenderer;
import com.jcommerce.gwt.client.widgets.ColumnPanel;
public class MemberList extends ContentWidget {
ColumnPanel contentPanel = new ColumnPanel();
TextBox commentContent = new TextBox();
Button btnFind = new Button(Resources.constants.GoodsList_search());
ListBox lstAction = new ListBox();
ListBox rankList = new ListBox();
Button btnAct = new Button(Resources.constants.GoodsList_action_OK());
Criteria criteria = new Criteria();
int deleteSize = 1;
PagingToolBar toolBar;
public static class State extends PageState {
public String getPageClassName() {
return MemberList.class.getName();
}
public String getMenuDisplayName() {
return "会员列表";
}
}
public State getCurState() {
if (curState == null ) {
curState = new State();
}
return (State)curState;
}
public MemberList() {
add(contentPanel);
initJS(this);
}
public String getDescription() {
return "cwBasicTextDescription";
}
public String getName() {
return "会员列表";
}
protected void onRender(Element parent, int index) {
super.onRender(parent, index);
// Condition cond = new Condition();
// cond.setField(IComment.PARENT);
// cond.setOperator(Condition.EQUALS);
// cond.setValue(null);
// criteria.addCondition(cond);
BasePagingLoader loader = new PagingListService().getLoader(
ModelNames.USER, criteria);
loader.load(0, 10);
final ListStore<BeanObject> store = new ListStore<BeanObject>(loader);
toolBar = new PagingToolBar(10);
toolBar.bind(loader);
List<ColumnConfig> columns = new ArrayList<ColumnConfig>();
final CheckBoxSelectionModel<BeanObject> smRowSelection = new CheckBoxSelectionModel<BeanObject>();
columns.add(smRowSelection.getColumn());
columns.add(new ColumnConfig(IUser.ID, "编号", 100));
columns.add(new ColumnConfig(IUser.NAME, "会员名称", 120));
columns.add(new ColumnConfig(IUser.EMAIL, "邮件地址", 200));
columns.add(new ColumnConfig(IUser.REGISTERTIME, "注册时间", 180));
ColumnConfig actcol = new ColumnConfig("Action", Resources.constants
.GoodsList_action(), 150);
columns.add(actcol);
ColumnModel cm = new ColumnModel(columns);
Grid<BeanObject> grid = new EditorGrid<BeanObject>(store, cm);
grid.setLoadMask(true);
grid.setBorders(true);
grid.setSelectionModel(smRowSelection);
// grid.setAutoExpandColumn("forum");
ActionCellRenderer render = new ActionCellRenderer(grid);
ActionCellRenderer.ActionInfo act = new ActionCellRenderer.ActionInfo();
act.setImage("icon_edit.gif");
act.setAction("checkMemberAction($id)");
act.setTooltip("编辑");
render.addAction(act);
act = new ActionCellRenderer.ActionInfo();
act.setImage("book_open.gif");
act.setAction("memberAddressAction($id)");
act.setTooltip("收货地址");
render.addAction(act);
act = new ActionCellRenderer.ActionInfo();
act.setImage("icon_view.gif");
act.setAction("memberOrderAction($id)");
act.setTooltip("查看订单");
render.addAction(act);
act = new ActionCellRenderer.ActionInfo();
act.setImage("icon_account.gif");
act.setAction("memberAccountAction($id)");
act.setTooltip("查看账目明细");
render.addAction(act);
act = new ActionCellRenderer.ActionInfo();
act.setImage("icon_trash.gif");
act.setAction("deleteMemberAction($id)");
act.setTooltip("删除");
render.addAction(act);
actcol.setRenderer(render);
rankList.addItem("所有等级", "all");
new ListService().listBeans(ModelNames.USERRANK,
new ListService.Listener() {
public synchronized void onSuccess(List<BeanObject> result) {
for (Iterator<BeanObject> it = result.iterator(); it
.hasNext();) {
BeanObject brand = it.next();
rankList.addItem(brand.getString(IUserRank.NAME),
brand.getString(IUserRank.ID));
}
}
});
HorizontalPanel header = new HorizontalPanel();
header.add(Resources.images.icon_search().createImage());
header.add(new Label("会员等级"));
header.add(rankList);
header.add(btnFind);
add(header);
btnFind.addSelectionListener(new SelectionListener<ButtonEvent>() {
public void componentSelected(ButtonEvent ce) {
search();
}
});
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.setSize(800, 350);
panel.setBottomComponent(toolBar);
panel.setButtonAlign(HorizontalAlignment.CENTER);
add(panel);
// 添加下面一行的操作BUTTON 及 listener 包括 删除评论 允许显示 禁止显示
lstAction.addItem("请选择...", "---");
lstAction.addItem("删除会员", "delete");
btnAct.addSelectionListener(new SelectionListener<ButtonEvent>() {
public void componentSelected(ButtonEvent ce) {
int index = lstAction.getSelectedIndex();
if (index == 0) {
// it is prompt
return;
}
String sel = lstAction.getValue(index);
final List<BeanObject> items = smRowSelection
.getSelectedItems();
executeAction(items, sel);
}
});
HorizontalPanel footer = new HorizontalPanel();
footer.add(lstAction);
footer.add(btnAct);
add(footer);
}
private void updateComment(BeanObject members,
UpdateService.Listener listener) {
new UpdateService().updateBean(members.getString(IUser.ID), members,
listener);
}
private void search() {
criteria.removeAll();
if (rankList.getSelectedIndex() > 0) {
String rank = rankList.getValue(rankList.getSelectedIndex());
Condition cond = new Condition();
cond.setField(IUser.RANK);
cond.setOperator(Condition.EQUALS);
cond.setValue(rank);
criteria.addCondition(cond);
} else {
System.out.println("Input nothing!");
}
toolBar.refresh();
}
private void executeAction(final List<BeanObject> items, String action) {
if (items == null) {
return;
}
final List listeners = new ArrayList();
for (BeanObject item : items) {
if ("delete".equals(action)) {
DeleteListener listener = new DeleteListener();
listeners.add(listener);
deleteComment(item.getString(IUser.ID), listener);
}
}
new WaitService(new WaitService.Job() {
public boolean isReady() {
if (listeners.size() != items.size()) {
return false;
}
for (int i = 0; i < listeners.size(); i++) {
if (listeners.get(i) instanceof DeleteListener) {
if (!((DeleteListener) listeners.get(i)).isFinished()) {
return false;
}
} else if (listeners.get(i) instanceof UpdateListener) {
if (!((UpdateListener) listeners.get(i)).isFinished()) {
return false;
}
} else {
throw new RuntimeException("Unknown listener type:"
+ listeners.get(i));
}
}
return false;
}
public void run() {
toolBar.refresh();
}
});
}
private native void initJS(MemberList me) /*-{
$wnd.deleteMemberAction = function (id) {
me.@com.jcommerce.gwt.client.panels.member.MemberList::deleteMemberAndRefrsh(Ljava/lang/String;)(id);
};
$wnd.checkMemberAction = function (id) {
me.@com.jcommerce.gwt.client.panels.member.MemberList::checkMember(Ljava/lang/String;)(id);
};
$wnd.memberAddressAction = function (id) {
me.@com.jcommerce.gwt.client.panels.member.MemberList::checkMemberAddress(Ljava/lang/String;)(id);
};
$wnd.memberOrderAction = function (id) {
me.@com.jcommerce.gwt.client.panels.member.MemberList::checkOrders(Ljava/lang/String;)(id);
};
}-*/;
private void checkOrders(String id) {
OrderListPanel.State state = new OrderListPanel.State();
state.setId(id);
state.execute();
}
private void deleteComment(String id, DeleteService.Listener listener) {
new DeleteService().deleteBean(ModelNames.USER, id, new DeleteService.Listener() {
@Override
public void onSuccess(Boolean success) {
toolBar.refresh();
}
});
}
private void deleteMemberAndRefrsh(final String id) {
final Listener<MessageBoxEvent> deleteListener = new Listener<MessageBoxEvent>() {
public void handleEvent(MessageBoxEvent ce) {
Button btn = ce.getButtonClicked();
if (btn.getText().equals("是")) {
new DeleteService().deleteBean(ModelNames.USER, id,
new DeleteService.Listener() {
public void onSuccess(Boolean success) {
AdminLog.createAdminLog("删除会员;");
UserListPanel.State state = new UserListPanel.State();
state.execute();
}
});
}
}
};
MessageBox.confirm("Confirm", "Are you sure you want to do that?",
deleteListener);
}
private void checkMember(String id) {
new ReadService().getBean(ModelNames.USER, id,
new ReadService.Listener() {
public void onSuccess(BeanObject bean) {
// iShop.getInstance().displayMemberInfo(bean);
}
});
}
private void checkMemberAddress(String id) {
// iShop.getInstance().displayMemberAddresses(id);
}
public void refresh() {
toolBar.refresh();
}
class DeleteListener extends DeleteService.Listener {
private boolean finished = false;
public void onSuccess(Boolean sucess) {
finished = true;
}
public void onFailure(Throwable caught) {
finished = true;
}
boolean isFinished() {
return finished;
}
}
class UpdateListener extends UpdateService.Listener {
private boolean finished = false;
public void onSuccess(Boolean sucess) {
finished = true;
}
public void onFailure(Throwable caught) {
finished = true;
}
boolean isFinished() {
return finished;
}
}
}