/*
* Copyright (c) 2008 TouK.pl
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package pl.touk.wonderfulsecurity.gwt.client.ui.group;
import com.extjs.gxt.ui.client.event.TabPanelEvent;
import com.extjs.gxt.ui.client.event.EventType;
import com.extjs.gxt.ui.client.mvc.AppEvent;
import com.extjs.gxt.ui.client.mvc.Controller;
import com.extjs.gxt.ui.client.widget.TabItem;
import pl.touk.wonderfulsecurity.beans.RoleView;
import pl.touk.wonderfulsecurity.beans.WsecGroup;
import static pl.touk.wonderfulsecurity.gwt.client.WsEvents.*;
import pl.touk.wonderfulsecurity.gwt.client.ui.BaseCreateEditView;
import pl.touk.wonderfulsecurity.gwt.client.ui.BaseEditTabItem;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import pl.touk.wonderfulsecurity.beans.PermissionView;
/**
* @author Lukasz Kucharski - lkc@touk.pl
*/
public class CreateEditGroupView extends BaseCreateEditView {
// ------------------------------ FIELDS ------------------------------
protected final ArrayList<RoleView> availableAndAssignedRoles = new ArrayList<RoleView>();
protected final ArrayList<PermissionView> availableAndAssignedPermissions = new ArrayList<PermissionView>();
protected final ArrayList<PermissionView> inheritedPermissionsFromRoles = new ArrayList<PermissionView>();
private TabItem newGroupTab;
private final Map<WsecGroup, CreateEditGroupTab> tabMap = new HashMap<WsecGroup, CreateEditGroupTab>();
// --------------------------- CONSTRUCTORS ---------------------------
/**
* Creates a new view instance.
*
* @param controller the parent controller
*/
public CreateEditGroupView(Controller controller) {
super(controller);
}
// --------------------- GETTER / SETTER METHODS ---------------------
public ArrayList<RoleView> getAvailableAndAssignedRoles() {
return availableAndAssignedRoles;
}
// -------------------------- OTHER METHODS --------------------------
protected String getTabName() {
return "Edycja grupy";
}
protected void handleEvent(AppEvent event) {
EventType type = event.getType();
if(type == START_GROUP_EDIT){
doStartGroupEdit(event);
} else if (type == CREATE_NEW_GROUP){
doCreateNewGroup(event);
}
}
public void closeNewGroupTab() {
if (newGroupTab != null) {
newGroupTab.close();
}
}
public void doCreateNewGroup(AppEvent event) {
newGroupTab = new BaseEditTabItem("Nowa grupa");
newGroupTab.add(new GroupDetailsForm(true));
attachTabItemToMainPanel(newGroupTab);
}
private void doStartGroupEdit(AppEvent event) {
WsecGroup group = event.getData("GROUP");
ArrayList<RoleView> roles = event.getData("ROLES");
ArrayList<PermissionView> permissions = event.getData("PERMISSIONS");
ArrayList<PermissionView> inheritedPermissions = event.getData("PERMISSIONS_INHERITED_FROM_ROLES");
CreateEditGroupTab gt = tabMap.get(group);
if (gt != null) {
gt.editForm.getModelData().updateModel(group, roles, permissions, inheritedPermissions);
gt.editForm.doRedisplayGroupData();
setActiveTab(gt);
} else {
CreateEditGroupTabData groupTabData = new CreateEditGroupTabData(group, roles, permissions, inheritedPermissions);
GroupEditForm editForm = new GroupEditForm(groupTabData);
gt = new CreateEditGroupTab("Edycja grupy " + group.getName(), editForm);
gt.add(editForm);
editForm.doRedisplayGroupData();
tabMap.put(group, gt);
attachTabItemToMainPanel(gt);
}
}
class CreateEditGroupTab extends BaseEditTabItem {
GroupEditForm editForm;
CreateEditGroupTab(String text, GroupEditForm editForm) {
super(text);
this.editForm = editForm;
}
@Override
protected void onTabClose(TabPanelEvent be) {
super.onTabClose(be);
tabMap.remove(editForm.getModelData().getGroup());
}
}
static class CreateEditGroupTabData {
private WsecGroup group;
final ArrayList<PermissionView> permissions;
final ArrayList<RoleView> roles;
final ArrayList<PermissionView> rolePermissionsInherited;
CreateEditGroupTabData(WsecGroup group, ArrayList<RoleView> roles, ArrayList<PermissionView> permissions, ArrayList<PermissionView> rolePermissionsInherited) {
this.group = group;
this.roles = roles;
this.permissions = permissions;
this.rolePermissionsInherited = rolePermissionsInherited;
}
public void updateModel(WsecGroup group, ArrayList<RoleView> roles, ArrayList<PermissionView> permissions, ArrayList<PermissionView> rolePermissionsInherited) {
this.group = group;
this.roles.clear();
this.permissions.clear();
this.rolePermissionsInherited.clear();
this.roles.addAll(roles);
this.permissions.addAll(permissions);
this.rolePermissionsInherited.addAll(rolePermissionsInherited);
}
public WsecGroup getGroup() {
return group;
}
public void setGroup(WsecGroup group) {
this.group = group;
}
@Override
public int hashCode() {
return group.hashCode();
}
@Override
public boolean equals(Object obj) {
return group.equals(obj);
}
}
}