/*
* 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.user;
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.PermissionView;
import pl.touk.wonderfulsecurity.beans.RoleView;
import pl.touk.wonderfulsecurity.beans.WsecGroup;
import pl.touk.wonderfulsecurity.beans.WsecUser;
import static pl.touk.wonderfulsecurity.gwt.client.WsEvents.CREATE_NEW_USER;
import static pl.touk.wonderfulsecurity.gwt.client.WsEvents.START_USER_EDIT;
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.HashSet;
import java.util.Map;
import pl.touk.wonderfulsecurity.beans.WsecPermission;
import pl.touk.wonderfulsecurity.beans.WsecRole;
/**
* @author Lukasz Kucharski - lkc@touk.pl
*/
public class CreateEditUserView extends BaseCreateEditView {
// ------------------------------ FIELDS ------------------------------
private final Map<WsecUser, CreateEditUserTab> tabMap = new HashMap<WsecUser, CreateEditUserTab>();
private TabItem newUserStep1Tab;
// --------------------------- CONSTRUCTORS ---------------------------
/**
* Creates a new view instance.
*
* @param controller the parent controller
*/
public CreateEditUserView(Controller controller) {
super(controller);
}
// -------------------------- OTHER METHODS --------------------------
protected void handleEvent(AppEvent event) {
EventType type = event.getType();
if (type == START_USER_EDIT) {
doStartUserEdit(event);
} else if (type == CREATE_NEW_USER) {
doCreateNewUser(event);
}
}
public void closeNewUserSetp1Tab() {
if (newUserStep1Tab == null) {
throw new IllegalStateException("Nie można zamknąć nieistniejącej zakladki");
}
newUserStep1Tab.close();
}
private void doCreateNewUser(AppEvent event) {
newUserStep1Tab = new BaseEditTabItem("Nowy użytkownik");
UserDetailsForm uForm = new UserDetailsForm(true);
newUserStep1Tab.add(uForm);
attachTabItemToMainPanel(newUserStep1Tab);
}
private void doStartUserEdit(AppEvent event) {
WsecUser user = (WsecUser) event.getData("USER");
ArrayList<WsecGroup> groups = (ArrayList<WsecGroup>) event.getData("GROUPS");
ArrayList<RoleView> roles = (ArrayList<RoleView>) event.getData("ROLES");
ArrayList<RoleView> rolesInherited = (ArrayList<RoleView>) event.getData("ROLES_INHERITED");
ArrayList<PermissionView> permissions = (ArrayList<PermissionView>) event.getData("PERMISSIONS");
ArrayList<PermissionView> groupPermissionsInherited = (ArrayList<PermissionView>) event.getData("PERMISSIONS_INHERITED_FROM_GROUPS");
ArrayList<PermissionView> rolePermissionsInherited = (ArrayList<PermissionView>) event.getData("PERMISSIONS_INHERITED_FROM_ROLES");
ArrayList<PermissionView> permissionsInheritedFromInheritedRoles = (ArrayList<PermissionView>) event.getData("PERMISSIONS_INHERITED_FROM_INHERITED_ROLES");
// test if there is such tab in cache
CreateEditUserTab ti = tabMap.get(user);
if (ti != null) {
ti.editForm.getModelData().updateModel(user, rolesInherited, roles, groups, permissions, groupPermissionsInherited, rolePermissionsInherited, permissionsInheritedFromInheritedRoles);
ti.editForm.doRedisplayUserData();
setActiveTab(ti);
} else {
CreateEditUserTabData userTabData = new CreateEditUserTabData(user, rolesInherited, roles, groups, permissions, groupPermissionsInherited, rolePermissionsInherited, permissionsInheritedFromInheritedRoles);
WsecUserEditForm edit = new WsecUserEditForm(userTabData);
ti = new CreateEditUserTab("Edycja użytkownika " + user.getLogin(), edit);
// ti.setScrollMode(Style.Scroll.AUTO);
// ti.setScrollMode(Style.Scroll.AUTO);
ti.add(edit);
edit.doRedisplayUserData();
tabMap.put(user, ti);
attachTabItemToMainPanel(ti);
}
}
// -------------------------- INNER CLASSES --------------------------
class CreateEditUserTab extends BaseEditTabItem {
WsecUserEditForm editForm;
CreateEditUserTab(String text, WsecUserEditForm editForm) {
super(text);
this.editForm = editForm;
}
protected void onTabClose(TabPanelEvent be) {
super.onTabClose(be);
tabMap.remove(editForm.getModelData().getUser());
}
}
static class CreateEditUserTabData {
final ArrayList groups;
private WsecUser user;
final ArrayList<RoleView> roles;
final ArrayList<RoleView> rolesInherited;
final ArrayList<PermissionView> permissions;
final ArrayList<PermissionView> groupPermissionsInherited;
final ArrayList<PermissionView> rolePermissionsInherited;
final ArrayList<PermissionView> permissionsInheritedFromInheritedRoles;
CreateEditUserTabData(WsecUser user, ArrayList<RoleView> rolesInherited, ArrayList<RoleView> roles, ArrayList groups, ArrayList<PermissionView> permissions, ArrayList<PermissionView> groupPermissionsInherited, ArrayList<PermissionView> rolePermissionsInherited, ArrayList<PermissionView> permissionsInheritedFromInheritedRoles) {
this.user = user;
this.rolesInherited = rolesInherited;
this.roles = roles;
this.groups = groups;
this.permissions = permissions;
this.groupPermissionsInherited = groupPermissionsInherited;
this.rolePermissionsInherited = rolePermissionsInherited;
this.permissionsInheritedFromInheritedRoles = permissionsInheritedFromInheritedRoles;
}
public void updateModel(WsecUser user, ArrayList<RoleView> rolesInherited, ArrayList<RoleView> roles, ArrayList groups, ArrayList<PermissionView> permissions, ArrayList<PermissionView> groupPermissionsInherited, ArrayList<PermissionView> rolePermissionsInherited, ArrayList<PermissionView> permissionsInheritedFromInheritedRoles) {
this.user = user;
this.groups.clear();
this.roles.clear();
this.rolesInherited.clear();
this.permissions.clear();
this.groupPermissionsInherited.clear();
this.rolePermissionsInherited.clear();
this.permissionsInheritedFromInheritedRoles.clear();
this.groups.addAll(groups);
this.roles.addAll(roles);
this.rolesInherited.addAll(rolesInherited);
this.permissions.addAll(permissions);
this.groupPermissionsInherited.addAll(groupPermissionsInherited);
this.rolePermissionsInherited.addAll(rolePermissionsInherited);
this.permissionsInheritedFromInheritedRoles.addAll(permissionsInheritedFromInheritedRoles);
}
public WsecUser getUser() {
return user;
}
public void setUser(WsecUser user) {
this.user = user;
}
public int hashCode() {
return user.hashCode();
}
public boolean equals(Object obj) {
return user.equals(obj);
}
}
}