package com.ese.beans; import com.ese.model.db.*; import com.ese.model.view.UserView; import com.ese.service.UserManagementService; import com.ese.service.security.UserDetail; import com.ese.utils.MessageDialog; import com.ese.utils.Utils; import lombok.Getter; import lombok.Setter; import org.primefaces.model.CheckboxTreeNode; import org.primefaces.model.TreeNode; import org.springframework.beans.factory.annotation.Value; import javax.annotation.PostConstruct; import javax.faces.bean.ManagedBean; import javax.faces.bean.ManagedProperty; import javax.faces.bean.ViewScoped; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @Getter @Setter @ManagedBean(name = "userManagement") @ViewScoped public class UserManagementBean extends Bean{ private static final long serialVersionUID = 4312578634029874840L; @ManagedProperty("#{userManagementService}") private UserManagementService userManagementService; @ManagedProperty("#{message['authorize.menu.user']}") private String key; private String modeUserManage; private List<MSDepartmentModel> msDepartmentModelList; private MSDepartmentModel msDepartmentModel; private List<StaffModel> staffModelList; private StaffModel staffModel; private List<FactionModel> factionModelList; private FactionModel factionModel; private UserView userView; private List<MSTitleModel> msTitleModelList; private MSTitleModel msTitleModel; private List<StaffRolesModel> staffRolesModelList; private StaffRolesModel staffRolesModel; private List<UserAccessModel> userAccessModelList; private List<UserAccessModel> selectUserAuthorize; //Item private List<MenuObjectModel> menuObjectModelList; private MenuObjectModel menuObjectModel; //Table private List<MenuObjectModel> menuObjectModelTableList; private List<MenuObjectModel> selectList; //Root RoleAccessMode private TreeNode rootMenuObj; private TreeNode rootAccessModel; //Select Root private TreeNode[] selectRootMenuObj; private TreeNode[] selectRootUserAuthorize; Map<Integer, CheckboxTreeNode> treeNodeMenuObjMap; Map<Integer, CheckboxTreeNode> treeNodeUserAccessMap; //Add User Dialog private List<MSDepartmentModel> departmentDialogList; private List<FactionModel> factionDialogList; private boolean flagDepartment; private boolean flagLoginName; private boolean flagFaction; private boolean flagTitle; private boolean flagUserName; private boolean flagPosition; private String value; private boolean flagBtnEdit; private boolean flagBtnDelete; private boolean flagPrint; private boolean flagUserAccess; private String keySearchUser; private String modeBtnAddUser; //Dialog User Access private String keySearchUserAccessDialog; private UserView userAuthorizeView; private List<MenuObjectModel> userAuthorize; private String keySearchUserAuthorize; private List<MenuObjectModel> objectUserAuthorizeList; private MenuObjectModel objectUserAuthorize; private int roleId; //Dialog Add User Role private List<SystemRoleModel> systemRoleModelDialogList; private List<SystemRoleModel> selectRole; private String keySearchRole; private UserDetail userDetail; @PostConstruct public void onCreation(){ log.debug("onCreation()."); if(preLoad() && isAuthorize(key)){ init(); } } private void init(){ newObjectOnload(); actionButton(); departmentOnload(); userOnload(); // factionOnload(); } private void newObjectOnload(){ msDepartmentModel = new MSDepartmentModel(); staffModel = new StaffModel(); factionModel = new FactionModel(); menuObjectModel = new MenuObjectModel(); staffRolesModel = new StaffRolesModel(); objectUserAuthorize = new MenuObjectModel(); rootMenuObj = new CheckboxTreeNode(); rootAccessModel = new CheckboxTreeNode(); // msTitleModel = new MSTitleModel(); } private void actionButton(){ modeUserManage = "Mode = Search "; flagBtnEdit = true; flagBtnDelete = true; flagPrint = true; flagUserAccess = true; keySearchUser = ""; modeBtnAddUser = ""; keySearchUserAccessDialog = ""; keySearchUserAuthorize = ""; keySearchRole = ""; } private void departmentOnload(){ msDepartmentModelList = userManagementService.getDepartAll(); } private void userOnload(){ staffModelList = userManagementService.getUserAll(); } // public void test(){ // log.debug("######## {}", roleId); // } public void onChangeSearchMenu(String target){ log.debug("Target : {}", target); if ("department".equalsIgnoreCase(target)){ factionModelList = userManagementService.getFactionByDepartment(msDepartmentModel.getId()); } staffModelList = userManagementService.getUserBySearch(msDepartmentModel.getId(), factionModel.getId(), keySearchUser); actionButton(); staffRolesModel = new StaffRolesModel(); } public void onClickUserAccess(){ log.debug("staffModel : {}", staffModel.toString()); modeUserManage = "Mode = Edit "; modeBtnAddUser = "Edit"; flagBtnEdit = false; flagBtnDelete = false; flagPrint = false; flagUserAccess = false; } public void preDelete(){ showDialog(MessageDialog.WARNING.getMessageHeader(), "Please click Yes to confirm delete this UserAccess.", "confirmUserAccessDlg"); } public void onDeleteUserAccess(){ userManagementService.delete(staffModel); showDialogDeleted(); userOnload(); actionButton(); } public void onClickNewUser(){ msTitleModelList = userManagementService.getTitleAll(); departmentDialogList = userManagementService.getDepartAll(); if (value.equalsIgnoreCase("New")){ flagDepartment = false; flagLoginName = false; flagFaction = false; flagTitle = false; flagUserName = false; flagPosition = false; userView = new UserView(); } else if (value.equalsIgnoreCase("Edit")){ flagDepartment = true; flagLoginName = true; flagFaction = true; flagTitle = true; flagUserName = true; flagPosition = true; userView = userManagementService.setModelToViewUserAccess(staffModel); factionDialogList = userManagementService.getFactionByDepartment(userView.getFactionModel().getMsDepartmentModel().getId()); // userView.setMsTitleModel(userManagementService.getTitleById(staffModel.getMsTitleModel().getId())); } } public void onChangeDepartment(){ factionDialogList = userManagementService.getFactionByDepartment(userView.getFactionModel().getMsDepartmentModel().getId()); } public void onClickSaveUserAccessDialog(){ System.out.println(userView.getUsername()); if (value.equalsIgnoreCase("New") && !userManagementService.isExisted(userView.getUsername())){ userManagementService.onSaveUserAccess(userView); showDialogSaved(); init(); } else if (value.equalsIgnoreCase("Edit")){ userManagementService.onUpdataeUserAccess(userView); init(); showDialogUpdated(); } else { showDialogWarning("Already existed login name"); } } public void onCancel(){ newObjectOnload(); actionButton(); departmentOnload(); userOnload(); } public void onClickUserAccessDialog(){ menuObjectModelList = userManagementService.getMenuObjectByObjCategory(); menuObjectModelTableList = userManagementService.getMenuObjectAll(); rootMenuObj = creRootMenuObj(); userAuthorizeView = userManagementService.setModelToViewUserAccess(staffModel); staffRolesModelList = userManagementService.getStaffRoleByUserId(staffModel.getId()); userAccessModelList = userManagementService.getMenuObjectByUserId(staffModel.getId()); rootAccessModel = creRootUserAccess(); objectUserAuthorizeList = userManagementService.getMenuObjectByObjCategory(); selectList = new ArrayList<MenuObjectModel>(); } public void onChangeMenuObject(){ menuObjectModelTableList = userManagementService.getMenuObjectId(menuObjectModel.getId(), keySearchUserAccessDialog); rootMenuObj = creRootMenuObj(); } private TreeNode creRootUserAccess() { TreeNode root = new CheckboxTreeNode(new Document(0, "", ""), null); log.debug("userAccessModelList Size : ", userAccessModelList.size()); final int MENU = 1; final int TAB = 2; final int ACTION = 3; treeNodeUserAccessMap = new HashMap<Integer, CheckboxTreeNode>(); for (UserAccessModel model : userAccessModelList) { if ( !Utils.isNull(model) ) { if ( !Utils.isZero(Utils.parseInt(model.getMenuObjectModel().getCode().length(), 0)) && model.getMenuObjectModel().getObjCategory() == MENU ) { treeNodeUserAccessMap.put(model.getMenuObjectModel().getId(), new CheckboxTreeNode(new Document(model.getId(), model.getMenuObjectModel().getCode(), model.getMenuObjectModel().getName()), root)); } else if ( model.getMenuObjectModel().getObjCategory() == TAB ) { treeNodeUserAccessMap.put(model.getMenuObjectModel().getId(), new CheckboxTreeNode(new Document(model.getId(), model.getMenuObjectModel().getCode(), model.getMenuObjectModel().getName()), treeNodeUserAccessMap.get(model.getMenuObjectModel().getParentId()))); } else if ( model.getMenuObjectModel().getObjCategory() == ACTION ) { new CheckboxTreeNode(new Document(model.getId(), model.getMenuObjectModel().getCode(), model.getMenuObjectModel().getName()), treeNodeUserAccessMap.get(model.getMenuObjectModel().getParentId())); } } } return root; } private TreeNode creRootMenuObj() { TreeNode root = new CheckboxTreeNode(new Document(0, "", ""), null); log.debug("menuObjectModelTableList Size : ", menuObjectModelTableList.size()); final int MENU = 1; final int TAB = 2; final int ACTION = 3; treeNodeMenuObjMap = new HashMap<Integer, CheckboxTreeNode>(); for (MenuObjectModel model : menuObjectModelTableList) { if ( !Utils.isNull(model) ) { if ( !Utils.isZero(Utils.parseInt(model.getCode().length(), 0)) && model.getObjCategory() == MENU ) { treeNodeMenuObjMap.put(model.getId(), new CheckboxTreeNode( new Document(model.getId(), model.getCode(), model.getName()), root)); } else if ( model.getObjCategory() == TAB ) { treeNodeMenuObjMap.put(model.getId(), new CheckboxTreeNode( new Document(model.getId(), model.getCode(), model.getName()), treeNodeMenuObjMap.get(model.getParentId()))); } else if ( model.getObjCategory() == ACTION ) { new CheckboxTreeNode(new Document(model.getId(), model.getCode(), model.getName()), treeNodeMenuObjMap.get(model.getParentId())); } } } return root; } public List<Document> selectOnAdd(){ List<Document> documents = new ArrayList<Document>(); Document document = null; if (!Utils.isNull(selectRootMenuObj)){ for (TreeNode node : selectRootMenuObj){ document = new Document(0, "", ""); document = (Document) node.getData(); documents.add(document); } } return documents; } public void onAddToUserAuthorize(){ log.debug("selectList Size : {}", selectList.size()); if (Utils.isNull(selectRootMenuObj)){ showDialog(MessageDialog.WARNING.getMessageHeader(), "Please select Menu Object and Action.", "msgBoxSystemMessageDlg"); } else { userManagementService.onSaveUserAccess(selectOnAdd(), staffModel); showDialogSaved(); selectList = new ArrayList<MenuObjectModel>(); } userAccessModelList = userManagementService.getMenuObjectByUserId(staffModel.getId()); rootAccessModel = creRootUserAccess(); } public List<Document> selectOnRemove(){ List<Document> documents = new ArrayList<Document>(); Document document = null; if (!Utils.isNull(selectRootUserAuthorize)){ for (TreeNode node : selectRootUserAuthorize){ document = new Document(0, "", ""); document = (Document) node.getData(); documents.add(document); } } return documents; } public void onRemoveUserAuthorize(){ StringBuilder selectValue = new StringBuilder(); for (Document model : selectOnRemove()){ selectValue = selectValue.append(model.getCode()).append(" "); } showDialog(MessageDialog.WARNING.getMessageHeader(), "Click Yes to delete " + selectValue.toString(), "confirmRemoveUserAuthorizeDlg"); } public void onDeleteUserAuthorize(){ // log.debug("selectRootUserAuthorize length : {}", selectRootUserAuthorize.length); if (!Utils.isNull(selectRootUserAuthorize)){ for (Document document : selectOnRemove()){ userManagementService.deleteUserAuthorize(document); } } userAccessModelList = userManagementService.getMenuObjectByUserId(staffModel.getId()); rootAccessModel = creRootUserAccess(); } public void onFilterUserAuthorize(){ userAccessModelList = userManagementService.getUserAuthorizeByMenuObjOrKey(objectUserAuthorize.getId(), keySearchUserAuthorize); rootAccessModel = creRootUserAccess(); } public void onPopupRole(){ showDialog(MessageDialog.WARNING.getMessageHeader(), "Click Yes to confirm delete?", "confirmRemoveRoleDlg"); } public void onRemoveRole(){ userManagementService.deleteRole(roleId); staffRolesModelList = userManagementService.getStaffRoleByUserId(staffModel.getId()); } public void onLoadRoleDialog(){ systemRoleModelDialogList = userManagementService.getLoadUserRole(); selectRole = new ArrayList<SystemRoleModel>(); } public void onFilterRole(){ log.debug("keySearchRole {}", keySearchRole); systemRoleModelDialogList = userManagementService.getRoleByKey(keySearchRole); } public void onAddToUserByDialogRole(){ if (!Utils.isSafetyList(selectRole)){ showDialog(MessageDialog.WARNING.getMessageHeader(), "Please select role.", "msgBoxSystemMessageDlg"); } else { userManagementService.onSaveRole(selectRole, staffModel); showDialogSaved(); staffRolesModelList = userManagementService.getStaffRoleByUserId(staffModel.getId()); userAccessModelList = userManagementService.getMenuObjectByUserId(staffModel.getId()); rootAccessModel = creRootUserAccess(); } } public void onPrint(){ userDetail = getUser(); userManagementService.printReportUserAndRole(userDetail.getUserName()); } }