/*
* 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.data.BeanModel;
import com.extjs.gxt.ui.client.data.ModelData;
import com.extjs.gxt.ui.client.mvc.AppEvent;
import com.extjs.gxt.ui.client.mvc.Dispatcher;
import static com.extjs.gxt.ui.client.store.Record.RecordUpdate.COMMIT;
import com.extjs.gxt.ui.client.store.StoreEvent;
import com.extjs.gxt.ui.client.store.StoreListener;
import com.extjs.gxt.ui.client.util.Margins;
import com.extjs.gxt.ui.client.widget.LayoutContainer;
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.layout.RowData;
import com.extjs.gxt.ui.client.widget.layout.RowLayout;
import com.extjs.gxt.ui.client.event.EventType;
import pl.touk.wonderfulsecurity.beans.GroupView;
import pl.touk.wonderfulsecurity.beans.PermissionView;
import pl.touk.wonderfulsecurity.beans.RoleView;
import pl.touk.wonderfulsecurity.beans.WsecPermission;
import static pl.touk.wonderfulsecurity.gwt.client.WsEvents.*;
import pl.touk.wonderfulsecurity.gwt.client.ui.BaseGridOfEntities;
import pl.touk.wonderfulsecurity.gwt.client.ui.permission.InheritedPermissionsFromRoleGrid;
import pl.touk.wonderfulsecurity.gwt.client.ui.role.BaseAssignableRoleGrid;
import pl.touk.wonderfulsecurity.core.ClientSecurity;
import java.util.ArrayList;
/**
* @author Lukasz Kucharski - lkc@touk.pl
*/
public class WsecUserEditForm extends LayoutContainer {
// ------------------------------ FIELDS ------------------------------
protected AssignedGroups groupGrid;
protected AssignedRolesGrid roleGrid;
protected InheritedRolesGrid inheritedRolesGrid;
protected UserDetailsForm detailsForm;
private CreateEditUserView.CreateEditUserTabData modelData;
protected AssignedPermisionsGrid permissionGrid;
protected InheritedPermissionsFromGroupGrid inheritedPermissionFromGroupGrid;
protected InheritedPermissionsFromRoleGrid inheritedPermissionFromRoleGrid;
protected InheritedPermissionsFromInheritedRolesGrid inheritedPermissionsFromInheritedRolesGrid;
// --------------------------- CONSTRUCTORS ---------------------------
public WsecUserEditForm(CreateEditUserView.CreateEditUserTabData userTabData) {
this.modelData = userTabData;
groupGrid = new AssignedGroups(userTabData.groups);
roleGrid = new AssignedRolesGrid(userTabData.roles);
permissionGrid = new AssignedPermisionsGrid(userTabData.permissions);
detailsForm = new UserDetailsForm(false);
inheritedRolesGrid = new InheritedRolesGrid(userTabData.rolesInherited);
inheritedPermissionFromGroupGrid = new InheritedPermissionsFromGroupGrid(userTabData.groupPermissionsInherited);
inheritedPermissionFromRoleGrid = new InheritedPermissionsFromRoleGrid(userTabData.rolePermissionsInherited);
inheritedPermissionsFromInheritedRolesGrid = new InheritedPermissionsFromInheritedRolesGrid(userTabData.permissionsInheritedFromInheritedRoles);
this.setLayout(new RowLayout());
RowData topRowData = new RowData(1, -1, new Margins(2, 2, 0, 2));
RowData middleRowData = new RowData(1, -1, new Margins(2));
RowData bottomRowData = new RowData(1, -1, new Margins(0, 2, 2, 2));
this.add(detailsForm, topRowData);
this.add(groupGrid, middleRowData);
this.add(roleGrid, middleRowData);
this.add(permissionGrid, middleRowData);
this.add(inheritedRolesGrid, middleRowData);
this.add(inheritedPermissionFromGroupGrid, middleRowData);
this.add(inheritedPermissionFromRoleGrid, bottomRowData);
this.add(inheritedPermissionsFromInheritedRolesGrid, bottomRowData);
}
// --------------------- GETTER / SETTER METHODS ---------------------
public CreateEditUserView.CreateEditUserTabData getModelData() {
return modelData;
}
// -------------------------- OTHER METHODS --------------------------
public void doRedisplayUserData() {
groupGrid.load();
roleGrid.load();
permissionGrid.load();
inheritedRolesGrid.load();
inheritedPermissionFromGroupGrid.load();
inheritedPermissionFromRoleGrid.load();
inheritedPermissionsFromInheritedRolesGrid.load();
detailsForm.setModelObject(modelData.getUser());
}
// -------------------------- INNER CLASSES --------------------------
class AssignedGroups extends BaseAssignableRoleGrid {
public AssignedGroups(ArrayList beansToDisplay) {
super(beansToDisplay);
}
@Override
protected void beforeRender() {
this.getSaveButton().setEnabled(ClientSecurity.hasPermission(WsecPermission.WSEC_CHNG_GRP_4USER));
}
@Override
protected String getAssignedToColumnName() {
return "assigned";
}
@Override
protected String getAssignedToColumnLabel() {
return "Przypisany";
}
@Override
protected String buildHeading() {
return "Przynależność do grupy";
}
@Override
protected void onGridRowDoubleClick(ModelData ge) {
GroupView gv = ((BeanModel) ge).getBean();
Dispatcher.get().dispatch(GROUP_GRID_DOUBLE_CLICK, gv);
}
protected StoreListener<BeanModel> buildStoreChangeListener() {
StoreListener<BeanModel> assignmentChangeListener = new StoreListener<BeanModel>() {
public void storeUpdate(StoreEvent<BeanModel> se) {
if (se.getOperation() == COMMIT) {
AppEvent ae = new AppEvent(new EventType(-1));
GroupView assignedGroup = (GroupView) se.getModel().getBean();
ae.setData("GROUP", assignedGroup);
ae.setData("USER", modelData.getUser());
if (assignedGroup.isAssigned()) {
ae.setType(ASSIGN_GROUP_TO_USER);
} else {
ae.setType(DEASSIGN_GROUP_FROM_USER);
}
Dispatcher.get().dispatch(ae);
}
}
};
return assignmentChangeListener;
}
}
/**
* @author Lukasz Kucharski - lkc@touk.pl
*/
class AssignedRolesGrid extends BaseAssignableRoleGrid {
public AssignedRolesGrid(ArrayList beansToDisplay) {
super(beansToDisplay);
}
@Override
protected void beforeRender() {
this.getSaveButton().setEnabled(ClientSecurity.hasPermission(WsecPermission.WSEC_CHNG_ROLE_4USER));
}
protected String buildHeading() {
return "Role przypisane bezpośrednio do tego użytkownika";
}
protected StoreListener<BeanModel> buildStoreChangeListener() {
StoreListener<BeanModel> assignmentChangeListener = new StoreListener<BeanModel>() {
public void storeUpdate(StoreEvent<BeanModel> se) {
if (se.getOperation() == COMMIT) {
AppEvent ae = new AppEvent(new EventType(-1));
RoleView assignedRole = (RoleView) se.getModel().getBean();
ae.setData("ROLE", assignedRole);
ae.setData("USER", modelData.getUser());
if (assignedRole.isAssignedToUser()) {
ae.setType(ASSIGN_ROLE_TO_USER);
} else {
ae.setType( DEASSIGN_ROLE_FROM_USER);
}
Dispatcher.get().dispatch(ae);
}
}
};
return assignmentChangeListener;
}
protected String getAssignedToColumnName() {
return "assignedToUser";
}
protected String getAssignedToColumnLabel() {
return "Przypisana do użytkownika";
}
}
class InheritedRolesGrid extends BaseGridOfEntities {
protected InheritedRolesGrid(ArrayList beansToDisplay) {
super(beansToDisplay);
}
protected ColumnModel createColumnModel() {
ArrayList<ColumnConfig> cc = new ArrayList<ColumnConfig>();
cc.add(new ColumnConfig("name", "Nazwa", 180));
cc.add(new ColumnConfig("description", "Description", 100));
this.setExpandedColumnId("description");
ColumnModel cm = new ColumnModel(cc);
return cm;
}
protected String buildHeading() {
return "Role odziedziczone z nadanych grup";
}
}
class AssignedPermisionsGrid extends BaseAssignableRoleGrid {
public AssignedPermisionsGrid(ArrayList beansToDisplay) {
super(beansToDisplay);
}
@Override
protected void beforeRender() {
this.getSaveButton().setEnabled(ClientSecurity.hasPermission(WsecPermission.WSEC_CHNG_PERM_4USER));
}
@Override
protected String getAssignedToColumnName() {
return "assignedToUser";
}
@Override
protected String getAssignedToColumnLabel() {
return "Przypisane do tego użytkownika";
}
@Override
protected String buildHeading() {
return "Przypisane uprawnienia";
}
@Override
protected StoreListener<BeanModel> buildStoreChangeListener() {
StoreListener<BeanModel> assignmentChangeListener = new StoreListener<BeanModel>() {
@Override
public void storeUpdate(StoreEvent<BeanModel> se) {
if (se.getOperation() == com.extjs.gxt.ui.client.store.Record.RecordUpdate.COMMIT) {
PermissionView assignedPermission = (PermissionView) se.getModel().getBean();
if (assignedPermission.isAssignedToUser()) {
Dispatcher.get().dispatch(pl.touk.wonderfulsecurity.gwt.client.WsEvents.ASSIGN_PERMISSION_TO_USER, assignedPermission);
} else {
Dispatcher.get().dispatch(pl.touk.wonderfulsecurity.gwt.client.WsEvents.DEASSIGN_PERMISSION_FROM_USER, assignedPermission);
}
}
}
};
return assignmentChangeListener;
}
}
class InheritedPermissionsFromGroupGrid extends BaseGridOfEntities {
protected InheritedPermissionsFromGroupGrid(ArrayList beansToDisplay) {
super(beansToDisplay);
}
protected ColumnModel createColumnModel() {
ArrayList<ColumnConfig> cc = new ArrayList<ColumnConfig>();
cc.add(new ColumnConfig("inheritedFromGroup", "Nazwa grupy", 180));
cc.add(new ColumnConfig("name", "Nazwa", 180));
cc.add(new ColumnConfig("description", "Description", 100));
this.setExpandedColumnId("description");
ColumnModel cm = new ColumnModel(cc);
return cm;
}
protected String buildHeading() {
return "Uprawnienia odziedziczone z nadanych grup";
}
}
public class InheritedPermissionsFromInheritedRolesGrid extends BaseGridOfEntities {
public InheritedPermissionsFromInheritedRolesGrid(ArrayList beansToDisplay) {
super(beansToDisplay);
}
protected ColumnModel createColumnModel() {
ArrayList<ColumnConfig> cc = new ArrayList<ColumnConfig>();
cc.add(new ColumnConfig("inheritedFromGroup", "Nazwa grupy", 180));
cc.add(new ColumnConfig("inheritedFromRole", "Nazwa roli", 180));
cc.add(new ColumnConfig("name", "Nazwa", 180));
cc.add(new ColumnConfig("description", "Description", 100));
this.setExpandedColumnId("description");
ColumnModel cm = new ColumnModel(cc);
return cm;
}
protected String buildHeading() {
return "Uprawnienia odziedziczone z odziedziczonych ról";
}
}
}