package com.vci.client.framework.rightdistribution.roleRight; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JMenuItem; import javax.swing.JPanel; import javax.swing.JPopupMenu; import javax.swing.JScrollPane; import javax.swing.JSplitPane; import javax.swing.JTextField; import javax.swing.ListSelectionModel; import javax.swing.tree.TreePath; import com.vci.client.LogonApplication; import com.vci.client.common.VCIBasePanel; import com.vci.client.common.objects.RoleObject; import com.vci.client.common.objects.UserObject; import com.vci.client.framework.common.RightType; import com.vci.client.framework.delegate.FuncOperationClientDelegate; import com.vci.client.framework.delegate.FunctionClientDelegate; import com.vci.client.framework.delegate.RightManagementClientDelegate; import com.vci.client.framework.delegate.RoleRightClientDelegate; import com.vci.client.framework.rightConfig.modelConfig.ModuleTreeCellRenderer; import com.vci.client.framework.rightConfig.object.FuncOperationObject; import com.vci.client.framework.rightConfig.object.FunctionObject; import com.vci.client.framework.rightConfig.operate.ObjectListCellRenderer; import com.vci.client.framework.rightdistribution.object.RoleRightObject; import com.vci.client.framework.specialrole.ModuleInterface.IModuleShow; import com.vci.client.framework.systemConfig.stafforgmanage.ListLabelCellRender; import com.vci.client.framework.util.RightControlUtil; import com.vci.client.ui.exception.VCIException; import com.vci.client.ui.image.BundleImage; import com.vci.client.ui.locale.LocaleDisplay; import com.vci.client.ui.swing.KJButton; import com.vci.client.ui.swing.VCIOptionPane; import com.vci.client.ui.swing.VCISwingUtil; import com.vci.client.ui.swing.components.VCIJButton; import com.vci.client.ui.swing.components.VCIJLabel; import com.vci.client.ui.swing.components.VCIJList; import com.vci.client.ui.swing.components.VCIJOptionPane; import com.vci.client.ui.swing.components.VCIJPanel; import com.vci.client.ui.swing.components.VCIJScrollPane; import com.vci.client.ui.tree.CheckBoxTreeManager; import com.vci.client.ui.tree.VCIBaseTree; import com.vci.client.ui.tree.VCIBaseTreeModel; import com.vci.client.ui.tree.VCIBaseTreeNode; /** * 功能模块授权 升级版本,支持 角色权限复制、粘贴(将角色权限快速应用到其它角色) * * @author xchao * */ public class CSRoleRightPanelV2 extends VCIBasePanel implements IModuleShow{ private static final long serialVersionUID = -2672216434571403222L; private final JLabel roleListLab = new JLabel(LocaleDisplay.getI18nString("rmip.framework.rightdistribution.moduleRight.RoleList","RMIPFramework", getLocale()));// 角色列表Lab JList roleList = new JList(); // 角色列表 private final JLabel titleLab = new JLabel(LocaleDisplay.getI18nString("rmip.framework.rightdistribution.moduleRight.name","RMIPFramework", getLocale()));// title private final JButton addButton = new JButton(); private final JButton delButton = new JButton(); private final VCIJButton btnSaveToTemp = VCISwingUtil.createVCIJButton( "saveToTemp", "复制", "复制", "copy.gif", new ActionListener() { @Override public void actionPerformed(ActionEvent e) { saveToTemp(); } }); private final VCIJButton btnApplyFromTemp = VCISwingUtil.createVCIJButton( "saveToTemp", "粘贴", "粘贴", "paste.gif", new ActionListener() { @Override public void actionPerformed(ActionEvent e) { applyFromTemp(); } }); JScrollPane scrollTree = null; JSplitPane jspConfigPanel; // 把Panel分成左右两部分 private final JScrollPane leftPanel = new JScrollPane(); VCIBaseTree tree; VCIBaseTreeModel treeModel; VCIBaseTreeNode rootNode; private final JTextField top = new JTextField();// 上横线 private final JTextField bottom = new JTextField();// 下横线 RightManagementClientDelegate rightManagementClient = new RightManagementClientDelegate(LogonApplication.getUserEntityObject()); RoleRightClientDelegate moduleRightClientDelegate = new RoleRightClientDelegate(LogonApplication.getUserEntityObject()); CheckBoxTreeManager treeManager; private final String currentUserName = LogonApplication.getUserEntityObject().getUserName(); /** * 记录当前选中的角色 */ private RoleObject curRole = null; /** * 存储需要保存的权限 */ private Map rightMap = new HashMap(); /** * 刷新按钮 */ private JPopupMenu popupMenu; private final JMenuItem refMenuItem = new JMenuItem("刷新", VCISwingUtil.createImageIcon("arrow_refresh.png"));//刷新 /**查询功能**/ private final JLabel searchLbl = new JLabel("查询:"); private final JTextField searchTxt = new JTextField(20); private final KJButton searchBtn = new KJButton("", "search.gif"); private String logonUserId = "",logonRoleId; private String moduleName = ""; private String iconName,moduleShowInfo ; // private SpecialRoleObject specialRoleObject = new SpecialRoleObject(); // public SpecialRoleObject getSpecialRoleObject() { // return specialRoleObject; // } // // public void setSpecialRoleObject(SpecialRoleObject specialRoleObject) { // this.specialRoleObject = specialRoleObject; // } public String getLogonUserId() { return logonUserId; } public void setLogonUserId(String logonUserId) { this.logonUserId = logonUserId; } public String getLogonRoleId() { return logonRoleId; } public void setLogonRoleId(String logonRoleId) { this.logonRoleId = logonRoleId; } public void setModuleName(String moduleName) { this.moduleName = moduleName; } public void setIconName(String iconName) { this.iconName = iconName; } public void setModuleShowInfo(String moduleShowInfo) { this.moduleShowInfo = moduleShowInfo; } public CSRoleRightPanelV2(FunctionObject funcObj) { super(funcObj); rightRoleMap(); init(); LogonApplication.getUserEntityObject().setModules(this.getModuleName()); } /** * 初始化页面 * */ public void init() { JPanel palMain = new JPanel(); JPanel contentPanel = new JPanel(); JPanel buttonPanel = new JPanel(); JPanel midPanel = new JPanel(); palMain.setLayout(new BorderLayout()); roleList(""); contentItem(contentPanel); jButtonPanl(buttonPanel); initTreeNode(); refMenuItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { refreshRole(); } }); searchBtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { searchRoleList(); } }); midPanel.setLayout(new BorderLayout()); midPanel.add(top, BorderLayout.NORTH); midPanel.add(bottom, BorderLayout.SOUTH); midPanel.add(contentPanel, BorderLayout.CENTER); palMain.add(titleLab, BorderLayout.NORTH); palMain.add(midPanel, BorderLayout.CENTER); palMain.add(buttonPanel, BorderLayout.SOUTH); JPanel leftMainPanel = new JPanel(new BorderLayout()); leftMainPanel.add(leftPanel,BorderLayout.CENTER); leftMainPanel.add(getSearchPanel(),BorderLayout.NORTH); jspConfigPanel = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, leftMainPanel, palMain); jspConfigPanel.setDividerSize(7); jspConfigPanel.setContinuousLayout(true); jspConfigPanel.setOneTouchExpandable(true); jspConfigPanel.setDividerLocation(220); this.setLayout(new BorderLayout()); this.add(jspConfigPanel, BorderLayout.CENTER); } private JPanel getSearchPanel() { //JPanel searchPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); JPanel searchPanel = new JPanel(); searchPanel.add(searchLbl); searchPanel.add(searchTxt); searchPanel.add(searchBtn); GridBagLayout layout = new GridBagLayout(); searchPanel.setLayout(layout); GridBagConstraints s = new GridBagConstraints(); s.fill = GridBagConstraints.HORIZONTAL; s.gridwidth = 1; s.weightx = 0; s.weighty = 0; layout.setConstraints(searchLbl, s); s.gridwidth = 1; s.weightx = 1; s.weighty = 0; layout.setConstraints(searchTxt, s); s.gridwidth = 0; s.weightx = 0; s.weighty = 0; layout.setConstraints(searchBtn, s); //GridLayout layout = new GridLayout(1, 3); //searchPanel.add(searchLbl); //searchPanel.add(searchTxt); //searchPanel.add(searchBtn); return searchPanel; } /** * 根据父模块ID,过滤出CS的功能模块 * @param parentId 父模块oid * @return * @throws VCIException */ private FunctionObject[] getModuleListByParentIdForCS(String parentId) throws VCIException{ FunctionClientDelegate funcDel = new FunctionClientDelegate(); // 不分CS、B/S、.NET、Mobile,加载出全部的子功能模块 FunctionObject[] funcObjs = funcDel.getModuleListByParentId(parentId, false); return funcObjs; // 在客户端本地过滤 //return getFinalCSModules(funcObjs); } /** * 过滤出CS功能模块 * @param funcs * @return */ private FunctionObject[] getFinalCSModules(FunctionObject[] funcs){ List list = new LinkedList(); for(FunctionObject func : funcs){ // String cs = func.getResourceC(); // // if(cs != null && !"".equals(cs)){ // } list.add(func); } return list.toArray(new FunctionObject[0]); } public void initTreeNode(){ rootNode = new VCIBaseTreeNode(LocaleDisplay.getI18nString("rmip.framework.rightdistribution.moduleRight.moduleTree","RMIPFramework", getLocale()), "root"); treeModel = new VCIBaseTreeModel(rootNode); tree = new VCIBaseTree(treeModel, new ModuleTreeCellRenderer()); FunctionObject[] funcObjs = null; try { String rootModel = "business"; UserObject curUser = LogonApplication.getUserObject(); // 超级管理员给三员账号授权 if (RightControlUtil.isAdminOrDeveloperOrRoot(curUser.getUserName())) { rootModel = "system"; } // 三员可以给普通用户授权业务功能 else if (RightControlUtil.isThreeAdminCurUser()) { rootModel = "business"; } // 其他用户不能授权 else { return; } // 在客户端过滤出CS功能模块 funcObjs = getModuleListByParentIdForCS(rootModel); funMap.clear(); for(int k = 0;k < funcObjs.length;k++) { funMap.put(funcObjs[k].getName(), funcObjs[k].getId()); } for (int i = 0; i < funcObjs.length; i++) { VCIBaseTreeNode node = new VCIBaseTreeNode(funcObjs[i].getName(), funcObjs[i]); if (rootModel.equals(funcObjs[i].getParentId())) { treeModel.insertNodeInto(node, rootNode,rootNode.getChildCount()); } setChildNode(node,funcObjs[i]); } } catch (VCIException e) { e.printStackTrace(); VCIOptionPane.showError(LogonApplication.frame,LocaleDisplay.getI18nString(e, "RMIPFramework", getLocale())); return; } treeManager = new CheckBoxTreeManager(tree); scrollTree.getViewport().removeAll(); scrollTree.getViewport().add(tree); scrollTree.repaint(); } private void setChildNode(VCIBaseTreeNode node ,FunctionObject funcObj) { /**0表示该模块下什么都没有,1表示有模块,2表示有操作**/ FunctionClientDelegate funcDel = new FunctionClientDelegate(); try{ int childType = funcDel.checkChildObject(funcObj.getId()); if(childType == 1){ // FunctionObject[] funcObjs = new FunctionClientDelegate().getModuleListByParentIdForCS(funcObj.getId(),false); // 在CS客户端本地,过滤出CS功能模块 FunctionObject[] funcObjs = getModuleListByParentIdForCS(funcObj.getId()); for(int i=0;iDescription:获取角色是0和1的授权(系统管理员,审计管理员,安全管理员所具有的权限)

* * @author sunbo * @time 2013-2-21 */ Map rightRoleMap = new HashMap(); public void rightRoleMap(){ RoleRightObject[] roleRightObjs; try { roleRightObjs = new RoleRightClientDelegate().getRoleRightListByType(new String[]{"0", "1"}); for(RoleRightObject obj : roleRightObjs){ String key = obj.getFuncId(); rightRoleMap.put(key, obj.getRightValue()); } } catch (VCIException e) { e.printStackTrace(); VCIOptionPane.showError(LogonApplication.frame, LocaleDisplay.getI18nString(e,"RMIPFramework", getLocale())); } } public boolean initRoleRightByType(VCIBaseTreeNode childNode){ boolean res = true; res = isShowChildNode(childNode,rightRoleMap); return res; } private boolean isShowChildNode(VCIBaseTreeNode node, Map rightMap){ boolean res = true; Object obj = node.getObj(); String id = ((FuncOperationObject) obj).getFuncId(); if(rightMap.containsKey(id)){ Object a = rightMap.get(id); if(a instanceof HashSet){ HashSet set = (HashSet) a; Iterator it = set.iterator(); while(it.hasNext()){ long rightValue = (Integer) it.next(); long nodeValue = ((FuncOperationObject) obj).getNumber(); //long preValue = (long)Math.pow(2, nodeValue); //进行位与操作,如果相等则表示具有当前操作的权限 //if(preValue == (preValue & rightValue)){ long preValue = (rightValue >> nodeValue) & 1; if (preValue == 1) { res = false ; } } }else{ long rightValue = (Integer) a; long nodeValue = ((FuncOperationObject) obj).getNumber(); //long preValue = (long)Math.pow(2, nodeValue); //进行位与操作,如果相等则表示具有当前操作的权限 //if(preValue == (preValue & rightValue)){ long preValue = (rightValue >> nodeValue) & 1; if (preValue == 1) { res = false ; } } } return res; } /** * 按钮 * * @return */ public void jButtonPanl(JPanel p) { addButton.setText(LocaleDisplay.getI18nString("rmip.framework.rightdistribution.moduleRight.addButton.file","RMIPFramework", getLocale())); addButton.setIcon(new BundleImage().createImageIcon("create.gif")); addButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { add_actionPerform(); } }); delButton.setText(LocaleDisplay.getI18nString("rmip.framework.rightdistribution.moduleRight.delButton.file","RMIPFramework", getLocale())); delButton.setIcon(new BundleImage().createImageIcon("delete.gif")); delButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { rightMap.clear(); treeManager.getSelectionModel().clearSelection(); } }); p.add(addButton); p.add(delButton); p.add(btnSaveToTemp); p.add(btnApplyFromTemp); } private void add_actionPerform(){ if (!checkItem()) { return; } try { rightMap.clear(); TreePath[] treePath = treeManager.getSelectionModel().getSelectionPaths(); //当没有选中模块的时候 if (treePath == null) { new RoleRightClientDelegate(LogonApplication.getUserEntityObject()).saveRoleRight(new RoleRightObject[0],curRole.getId(),LogonApplication.getUserEntityObject().getUserName()); } else { for(int i = 0;i < treePath.length;i++){ VCIBaseTreeNode node = (VCIBaseTreeNode)treePath[i].getLastPathComponent(); Object obj = node.getObj(); if(obj instanceof String){//如果是root节点,则保存所有模块的权限 getRightValue(node,false);//向下获取所有模块的权限值 }else if(obj instanceof FunctionObject){ getRightValue(node,true);//向上处理 getRightValue(node,false);//向下处理(包含当前节点) }else if(obj instanceof FuncOperationObject){ VCIBaseTreeNode parentNode = (VCIBaseTreeNode)node.getParent(); String funcId = ((FunctionObject)parentNode.getObj()).getId(); getRightValue(parentNode,true);//向上处理该操作父级的上级模块权限(不包含父节点) if(!rightMap.containsKey(funcId)){ RoleRightObject roleRightObj = new RoleRightObject(); roleRightObj.setFuncId(funcId); roleRightObj.setRightType(RightType.Function); roleRightObj.setRightValue(countRightValue(parentNode,false));//没有操作的模块权限值存储为0 roleRightObj.setRoleId(curRole.getId()); roleRightObj.setCreateUser(currentUserName); roleRightObj.setCreateTime(new Date()); roleRightObj.setModifyUser(currentUserName); roleRightObj.setModifyTime(new Date()); roleRightObj.setLicensor(""); rightMap.put(funcId, roleRightObj); } } } //1。先从所有权限对象中删除模块权限对象 Set> funSet = funMap.entrySet(); Iterator> funIt = funSet.iterator(); while(funIt.hasNext()){ Entry next = funIt.next(); String key = next.getKey(); String value = next.getValue(); allRightRoleMap.remove(value); } //2。再保存选中的模块对象到所有权限中 Set> entrySet = rightMap.entrySet(); Iterator> iterator = entrySet.iterator(); while(iterator.hasNext()){ Entry next = iterator.next(); String key = next.getKey(); RoleRightObject value = next.getValue(); if(!allRightRoleMap.containsKey(value.getFuncId())){ allRightRoleMap.put(value.getFuncId(), value); } } rightMap = allRightRoleMap; /**上面处理完成后,循环遍历取出MAP里的对象进行保存**/ RoleRightObject[] roleRightObjs = new RoleRightObject[rightMap.size()]; Set objSet = rightMap.keySet(); Iterator it = objSet.iterator(); int i = 0; while(it.hasNext()){ roleRightObjs[i++] = rightMap.get(it.next()); } boolean res = new RoleRightClientDelegate(LogonApplication.getUserEntityObject()).saveRoleRight(roleRightObjs,curRole.getId(),currentUserName); if(res){ VCIOptionPane.showMessage(LogonApplication.frame, "功能模块授权成功!"); treeManager.getSelectionModel().clearSelection(); initRoleRight(curRole.getId()); } // /**上面处理完成后,循环遍历取出MAP里的对象进行保存**/ // RoleRightObject[] roleRightObjs = new RoleRightObject[rightMap.size()]; // Set objSet = rightMap.keySet(); // Iterator it = objSet.iterator(); // int i = 0; // while(it.hasNext()){ // roleRightObjs[i++] = rightMap.get(it.next()); // } // boolean res = new RoleRightClientDelegate(LogonApplication.getUserEntityObject()).saveRoleRight(roleRightObjs,curRole.getId(),currentUserName); // if(res){ // VCIOptionPane.showMessage(LogonApplication.frame, "功能模块授权成功!"); // } } }catch (VCIException e1) { e1.printStackTrace(); VCIOptionPane.showError(LogonApplication.frame, "RMIPFramework", e1); } } /** * 获取权限 * @param isUp 是否是向上获取,如果是向上获取,传进来的必然是模块节点,且上级模块必然是没有选中 */ private void getRightValue(VCIBaseTreeNode node,boolean isUp){ if(isUp){//向上获取,存储每个上级模块的权限值 VCIBaseTreeNode parentNode = (VCIBaseTreeNode)node.getParent(); while(!"root".equals(parentNode.getObj())){ String funcId = ((FunctionObject)parentNode.getObj()).getId(); RoleRightObject obj = null; if(!rightMap.containsKey(funcId)){ obj = new RoleRightObject(); obj.setFuncId(funcId); obj.setRightType(RightType.Function); obj.setRightValue(1);//没有操作的模块权限值存储为0 obj.setRoleId(curRole.getId()); obj.setCreateUser(currentUserName); obj.setCreateTime(new Date()); obj.setModifyUser(currentUserName); obj.setModifyTime(new Date()); obj.setLicensor(""); rightMap.put(funcId, obj); } else{ obj = rightMap.get(funcId); if (obj == null) { obj = new RoleRightObject(); obj.setFuncId(funcId); obj.setRightType(RightType.Function); obj.setRightValue(1);//没有操作的模块权限值存储为0 obj.setRoleId(curRole.getId()); obj.setCreateUser(currentUserName); obj.setCreateTime(new Date()); obj.setModifyUser(currentUserName); obj.setModifyTime(new Date()); obj.setLicensor(""); }else { obj.setRightValue(1); } } parentNode = (VCIBaseTreeNode)parentNode.getParent(); } }else{//向下获取,无需判断是否选中,但需要判断其子级是否是操作 //先存储当前节点 String funcId = ""; if(node.getObj() instanceof String){ funcId = (String)node.getObj(); }else if(node.getObj() instanceof FunctionObject){ funcId = ((FunctionObject)node.getObj()).getId(); } if(!isChildOperate(node)){//子节点不是操作 if(!rightMap.containsKey(funcId)&&!funcId.equals("root")){ RoleRightObject roleRightObj = new RoleRightObject(); roleRightObj.setFuncId(funcId); roleRightObj.setRightType(RightType.Function); roleRightObj.setRightValue(0);//没有操作的模块权限值存储为0 roleRightObj.setRoleId(curRole.getId()); roleRightObj.setCreateUser(currentUserName); roleRightObj.setCreateTime(new Date()); roleRightObj.setModifyUser(currentUserName); roleRightObj.setModifyTime(new Date()); roleRightObj.setLicensor(""); rightMap.put(funcId, roleRightObj); } for(int i = 0;i < node.getChildCount();i++){ //对每个子向下递归遍历 getRightValue((VCIBaseTreeNode)node.getChildAt(i),false); } }else{//子节点是操作 if(!rightMap.containsKey(funcId)){ RoleRightObject roleRightObj = new RoleRightObject(); roleRightObj.setFuncId(funcId); roleRightObj.setRightType(RightType.Function); roleRightObj.setRightValue(countRightValue(node,true));//没有操作的模块权限值存储为0 roleRightObj.setRoleId(curRole.getId()); roleRightObj.setCreateUser(currentUserName); roleRightObj.setCreateTime(new Date()); roleRightObj.setModifyUser(currentUserName); roleRightObj.setModifyTime(new Date()); roleRightObj.setLicensor(""); rightMap.put(funcId, roleRightObj); } } } } /** * 传入直接挂接操作的模块的节点,计算该节点的权限值 * @param node 模块节点 * @param isAll 是否子级全部选中 * @return */ private long countRightValue(VCIBaseTreeNode node,boolean isAll){ long value = 0; for(int i = 0;i < node.getChildCount();i++){ VCIBaseTreeNode childNode = (VCIBaseTreeNode)node.getChildAt(i); if(isAll || treeManager.getSelectionModel().isPathSelected(new TreePath(childNode.getPath()))){ FuncOperationObject obj = (FuncOperationObject)childNode.getObj(); value += (long)Math.pow(2, obj.getNumber());//累计加上各个操作的权限值 } } return value; } /** * 判断子级是否是操作 * @param node * @return */ private boolean isChildOperate(VCIBaseTreeNode node){ if(node.getChildCount() > 0){ VCIBaseTreeNode childNode = (VCIBaseTreeNode)node.getChildAt(0); if(childNode.getObj() instanceof FuncOperationObject){ return true; } } return false; } /** * 内容项 * * @return */ public void contentItem(JPanel contentPanel) { top.setPreferredSize(new Dimension(60,2)); scrollTree = new JScrollPane(); bottom.setPreferredSize(new Dimension(60,2)); contentPanel.setLayout(new BorderLayout()); contentPanel.add(roleListLab); contentPanel.add(scrollTree); } public void roleList(String searchText) { setRoleList(searchText); roleList.setCellRenderer(new ListLabelCellRender()); roleList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); roleList.getSelectedValue(); roleList.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { RoleObject roleObj = (RoleObject)roleList.getSelectedValue(); curRole = roleObj; tree.clearSelection(); treeManager.getSelectionModel().clearSelection(); initRoleRight(roleObj.getId()); } }); setComponentPopupMenu(roleList,getPopupMenu()); leftPanel.getViewport().add(roleList); } /** * 角色刷新功能的添加 *

Description:

* * @author 李刚 * @time 2012-7-20 */ private void refreshRole() { roleList(""); treeManager.getSelectionModel().clearSelection(); } /**查询满足条件的角色信息**/ private void searchRoleList() { String search = this.searchTxt.getText().trim(); roleList(search); treeManager.getSelectionModel().clearSelection(); } /** * 右键菜单 * @param parent * @param menu */ private void setComponentPopupMenu(final java.awt.Component parent, final javax.swing.JPopupMenu menu) { parent.addMouseListener(new java.awt.event.MouseAdapter() { @Override public void mouseReleased(java.awt.event.MouseEvent e) { int i = e.getButton(); if(i == 3) {//鼠标右键 popupMenu.removeAll(); popupMenu.add(refMenuItem); menu.show(parent, e.getX(), e.getY()); } } }); } Map allRightRoleMap = new HashMap(); Map > roleRightMap = new HashMap>(); /** * 初始化角色权限 * @param roleId */ public void initRoleRight(String roleId){ try { allRightRoleMap = new HashMap(); RoleRightObject[] roleRightObjs = new RoleRightClientDelegate().getRoleRightList(roleId, LogonApplication.getUserEntityObject().getUserName()); Map rightMap = new HashMap(); for(RoleRightObject obj:roleRightObjs){ allRightRoleMap.put(obj.getFuncId(), obj); rightMap.put(obj.getFuncId(), obj.getRightValue()); } if(roleRightMap.containsKey(roleId)){ roleRightMap.remove(roleId); } roleRightMap.put(roleId, rightMap); visitAllTreeNode(rootNode,rightMap); } catch (VCIException e) { e.printStackTrace(); VCIOptionPane.showError(LogonApplication.frame, LocaleDisplay.getI18nString(e,"RMIPFramework", getLocale())); } } /** * 遍历整棵树进行权限选中 * @param node * @param rightMap */ private void visitAllTreeNode(VCIBaseTreeNode node,Map rightMap){ for(int i = 0;i < node.getChildCount();i++){ VCIBaseTreeNode childNode = (VCIBaseTreeNode)node.getChildAt(i); Object obj = childNode.getObj(); //如果是模块,则先判断是否有此模块权限,如果有,则判断下级模块及操作 if(obj instanceof FunctionObject){ String id = ((FunctionObject) obj).getId(); if(rightMap.containsKey(id)){ visitAllTreeNode(childNode,rightMap); } }else if(obj instanceof FuncOperationObject){ String id = ((FuncOperationObject) obj).getFuncId(); if(rightMap.containsKey(id)){ long rightValue = rightMap.get(id); long nodeValue = ((FuncOperationObject) obj).getNumber(); //long preValue = (long)Math.pow(2, nodeValue); //进行位与操作,如果相等则表示具有当前操作的权限 //if(preValue == (preValue & rightValue)){ long preValue = (rightValue >> nodeValue) & 1; if (preValue == 1) { treeManager.getSelectionModel().addSelectionPath(new TreePath(childNode.getPath())); } } } } } //右键菜单 public JPopupMenu getPopupMenu() { if (popupMenu == null) { popupMenu = new JPopupMenu(); } return popupMenu; } /** * 给角色列表赋值 */ private void setRoleList(String searchText) { try { RoleObject[] roleObjs = rightManagementClient.fetchRoleInfoByUserType(LogonApplication.getUserEntityObject().getUserName());// 取得角色信息 if(!"".equals(searchText)) { List list = new LinkedList(); for(RoleObject roleObj : roleObjs) { if(roleObj.getName().indexOf(searchText) != -1) { list.add(roleObj); } } roleList = new JList(list.toArray(new RoleObject[0])); return ; } roleList = new JList(roleObjs); roleList.setCellRenderer(new ObjectListCellRenderer()); } catch (VCIException e) { e.printStackTrace(); VCIOptionPane.showError(LogonApplication.frame, LocaleDisplay.getI18nString(e,"RMIPFramework", getLocale())); } } /** * 提示信息框 * * @param proValue * 资源文件的值 * @param fileName * 资源文件的名 * @param title * 标题 */ private void message(String proValue, String fileName) { VCIOptionPane.showMessage(LogonApplication.frame,LocaleDisplay.getI18nString(proValue, fileName, getLocale())); } /** * 校验 * * @return */ public boolean checkItem() { if (roleList.getSelectedValue() == null|| "null".equals(roleList.getSelectedValue())) { message("rmip.framework.rightdistribution.moduleRight.roleListNotNull.message","RMIPFramework"); return false; } return true; } private static Map funMap = new LinkedHashMap(); // private ArrayList getModelIds() { // ArrayList list = new ArrayList(); // for(String name : funMap.keySet()) { // if("日志管理".equals(name) || "权限管理".equals(name) || "人员组织管理".equals(name)) { // list.add(funMap.get(name)); // } // } // // return list; // } @Override public String getUserID() { return logonUserId; } @Override public String getRoleID() { return logonRoleId; } @Override public JPanel getModuleComponent() { return this; } @Override public String getModuleName() { if (this.getFuncObj() != null && this.getFuncObj().getName() != null) return this.getFuncObj().getName(); else if (moduleName != null && !moduleName.isEmpty()) return moduleName; else return this.getClass().getName(); //return moduleName; } @Override public String getIconName() { return iconName; } @Override public String getModuleShowInfo() { return moduleShowInfo; } // private boolean isSecurtyAdmin() { // String roleName = getRoleByConf(); // String userName = LogonApplication.frame.getUserEntityObject().getUserName(); // try { // UserObject userObj = new RightManagementClientDelegate().fetchUserInfoByName(userName); // RoleObject[] roleObjs = new RightManagementClientDelegate().fetchRoleInfoByUserId(userObj.getId()); // for(RoleObject obj : roleObjs) { // if(roleName.equals(obj.getName())) { // return true; // } // } // } catch (VCIError e) { // e.printStackTrace(); // } // // // return false; // } // private String getRoleByConf() { // try { // String result = new SystemCfgClientDelegate().getConfigValue("user.Sysadmin"); // return result; // } catch (VCIException e) { // e.printStackTrace(); // } // return ""; // } private final LinkedHashMap> roleRightObjsMap = new LinkedHashMap>(); private void saveToTemp(){ if(!isSelectedRole()) return; String ruleId = curRole.getId(); Map rightMap = roleRightMap.get(ruleId); roleRightObjsMap.put(curRole, rightMap); VCIJOptionPane.showMessage(this, "复制 成功!"); } private void applyFromTemp(){ if(!isSelectedRole()) return; if(roleRightObjsMap.size() == 0){ VCIJOptionPane.showMessage(this, "请先复制权限!"); return; } int index = 0; int size = roleRightObjsMap.size(); Map rightMap = new HashMap(); Object[] roles = new Object[size]; Iterator its = roleRightObjsMap.keySet().iterator(); while(its.hasNext()){ RoleObject roleObj = its.next(); roles[index++] = roleObj; rightMap = roleRightObjsMap.get(roleObj); } if(size == 1){ tree.clearSelection(); treeManager.getSelectionModel().clearSelection(); visitAllTreeNode(rootNode, rightMap); VCIJOptionPane.showMessage(this, "粘贴 成功!\n(点击‘授权’后才生效)"); } else { Object[] messages = new Object[2]; messages[0] = new VCIJLabel("" + "" + "

请选择角色:

" + "

(将该角色权限应用到当前选择的角色)

" + "

 

" + "" ); VCIJPanel pal = new VCIJPanel(new BorderLayout()); VCIJList list = new VCIJList(roles); list.setSelectedIndex(0); list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); pal.add(new VCIJScrollPane(list), BorderLayout.CENTER); pal.setPreferredSize(new Dimension(200, 100)); messages[1] = pal; Object[] options = {"确定","取消"}; int res = VCIJOptionPane.showOptionDialog( LogonApplication.frame, messages, "粘贴权限", VCIJOptionPane.DEFAULT_OPTION, VCIJOptionPane.INFORMATION_MESSAGE, null, options, options[0]); if(res == 0){ RoleObject roleObj = (RoleObject)list.getSelectedValue(); rightMap = roleRightObjsMap.get(roleObj); tree.clearSelection(); treeManager.getSelectionModel().clearSelection(); visitAllTreeNode(rootNode, rightMap); VCIJOptionPane.showMessage(this, "粘贴 成功!\n(点击‘授权’后才生效)"); } } } private boolean isSelectedRole(){ if(curRole == null) { VCIJOptionPane.showMessage(this, "请先选择角色!"); return false; } return true; } }