/*******************************************************************************
* Copyright (c) 2012 Dmitry Tikhomirov.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Public License v3.0
* which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/gpl.html
*
* Contributors:
* Dmitry Tikhomirov - initial API and implementation
******************************************************************************/
package org.opensheet.client.widges;
import java.util.List;
import org.opensheet.client.dto.DepartmentDTO;
import org.opensheet.client.mvc.events.AdminEvents;
import org.opensheet.client.mvc.events.EventBus;
import org.opensheet.client.services.DepartmentService;
import org.opensheet.client.services.DepartmentServiceAsync;
import org.opensheet.client.utils.Resources;
import com.extjs.gxt.ui.client.data.BaseListLoader;
import com.extjs.gxt.ui.client.data.BaseModel;
import com.extjs.gxt.ui.client.data.BeanModel;
import com.extjs.gxt.ui.client.data.BeanModelReader;
import com.extjs.gxt.ui.client.data.ListLoadResult;
import com.extjs.gxt.ui.client.data.ListLoader;
import com.extjs.gxt.ui.client.data.ModelData;
import com.extjs.gxt.ui.client.data.RpcProxy;
import com.extjs.gxt.ui.client.event.BaseEvent;
import com.extjs.gxt.ui.client.event.Events;
import com.extjs.gxt.ui.client.event.Listener;
import com.extjs.gxt.ui.client.store.ListStore;
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.ComboBox.TriggerAction;
import com.extjs.gxt.ui.client.widget.menu.AdapterMenuItem;
import com.extjs.gxt.ui.client.widget.menu.Menu;
import com.extjs.gxt.ui.client.widget.menu.MenuItem;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.rpc.AsyncCallback;
public class BranchDepartmentUserSwitchMenu extends Button{
final private DepartmentServiceAsync departmentService = GWT.create(DepartmentService.class);
private BranchComboBox branchComboBox;
private Integer branch = 1;
private Integer department = 1;
private ComboBox<BeanModel> departmentComboBox;
private ListStore<BeanModel> departmentStore;
private ListLoader<?> dloader;
private BaseModel result;
public BranchDepartmentUserSwitchMenu(){
super();
doMenu();
setWidth(200);
setText("Choose Branch/Department: ");
setTitle("Choose Branch/Department: ");
setIcon(Resources.ICONS.user_add());
}
private void doMenu(){
Menu menu = new Menu();
branchComboBox = new BranchComboBox(false);
branchComboBox.setWidth(180);
branchComboBox.setValue(branchComboBox.getStore().getAt(0));
branchComboBox.addListener(Events.Select, new Listener<BaseEvent>(){
@Override
public void handleEvent(BaseEvent be) {
branch = Integer.parseInt(branchComboBox.getValue().get("id").toString());
departmentComboBox.getStore().getLoader().load();
}
});
AdapterMenuItem adapterBranch = new AdapterMenuItem(branchComboBox);
adapterBranch.setManageFocus(true);
adapterBranch.setCanActivate(true);
RpcProxy<List<DepartmentDTO>> departmentProxy = new RpcProxy<List<DepartmentDTO>>() {
@Override
protected void load(Object loadConfig, AsyncCallback<List<DepartmentDTO>> callback) {
departmentService.getDepartmentsByBranch("1", branch, callback);
}
};
dloader = new BaseListLoader<ListLoadResult<ModelData>>(departmentProxy,new BeanModelReader());
departmentStore = new ListStore<BeanModel>(dloader);
departmentStore.setMonitorChanges(true);
departmentComboBox = new ComboBox<BeanModel>();
departmentComboBox.setDisplayField("name");
departmentComboBox.setWidth(150);
departmentComboBox.setName("department");
departmentComboBox.setFieldLabel("Department");
departmentComboBox.setAllowBlank(false);
departmentComboBox.setEditable(false);
departmentComboBox.setStore(departmentStore);
departmentComboBox.setTypeAhead(true);
departmentComboBox.setTriggerAction(TriggerAction.ALL);
departmentComboBox.addListener(Events.Select, new Listener<BaseEvent>(){
@Override
public void handleEvent(BaseEvent be) {
department = Integer.parseInt(departmentComboBox.getValue().get("id").toString());
result = new BaseModel();
result.set("branch", branch);
result.set("department", department);
EventBus.get().fireEvent(AdminEvents.AdminAssignmentDepartmentUserSwitch, new BaseEvent(AdminEvents.AdminAssignmentDepartmentUserSwitch));
closeAll();
}
});
AdapterMenuItem adapterDepartment = new AdapterMenuItem(departmentComboBox);
adapterDepartment.setManageFocus(true);
adapterDepartment.setCanActivate(true);
menu.add(new MenuItem("<b>Branch:</b>"));
menu.add(adapterBranch);
menu.add(new MenuItem("<b>Department:</b>"));
menu.add(adapterDepartment);
setMenu(menu) ;
}
public BaseModel getResult(){
return result;
}
private void closeAll(){
this.hideMenu();
}
}