package com.vci.client.portal.UI.dialog; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.Arrays; import java.util.Comparator; import java.util.Date; import java.util.HashMap; 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.BoxLayout; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JMenuItem; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JSplitPane; import javax.swing.JTextField; import javax.swing.ListSelectionModel; import javax.swing.tree.TreePath; import com.vci.corba.omd.btm.BtmItem; import com.vci.corba.portal.data.PLPageDefination; import com.vci.corba.portal.data.PLUILayout; import com.vci.corba.portal.data.PLTabButton; import com.vci.corba.portal.data.PLTabPage; import com.vci.client.LogonApplication; import com.vci.client.common.VCIBasePanel; import com.vci.client.common.objects.RoleObject; 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.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.portal.utility.UITools; import com.vci.client.ui.exception.VCIException; import com.vci.client.ui.image.bundle.BundleImage; import com.vci.client.ui.locale.LocaleDisplay; import com.vci.client.ui.process.QANProcessBar; import com.vci.client.ui.process.QANProcessBarFrame; 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; import com.vci.corba.common.VCIError; public class VCIGrandUIPanel extends VCIBasePanel implements IModuleShow{ private JLabel roleListLab = new JLabel(LocaleDisplay.getI18nString("rmip.framework.rightdistribution.moduleRight.RoleList","RMIPFramework", getLocale()));// 角色列表Lab private JLabel titleLab = new JLabel(LocaleDisplay.getI18nString("rmip.framework.rightdistribution.moduleRight.name","RMIPFramework", getLocale()));// title JList roleList = new JList(); // 角色列表 private String moduleName = "UI授权"; private JButton addButton = new JButton(); private JButton delButton = new JButton(); private VCIJButton btnClose = VCISwingUtil.createVCIJButton("close", "关闭", "关闭授权窗口", "cancel.png", new ActionListener() { @Override public void actionPerformed(ActionEvent e) { close(); } }); private VCIJButton btnSaveToTemp = VCISwingUtil.createVCIJButton( "saveToTemp", "保存权限模板", "保存权限模板", "wand.png", new ActionListener() { @Override public void actionPerformed(ActionEvent e) { saveToTemp(); } }); private VCIJButton btnApplyFromTemp = VCISwingUtil.createVCIJButton( "saveToTemp", "应用权限模板", "应用权限模板", "tick.png", new ActionListener() { @Override public void actionPerformed(ActionEvent e) { applyFromTemp(); } }); JScrollPane scrollTree = null; JSplitPane jspConfigPanel; // 把Panel分成左右两部分 private JScrollPane leftPanel = new JScrollPane(); VCIBaseTree tree; VCIBaseTreeModel treeModel; VCIBaseTreeNode rootNode; CheckBoxTreeManager treeManager; private RoleObject curRole = null; private JTextField top = new JTextField();// 上横线 private JTextField bottom = new JTextField();// 下横线 private Map funMap = new LinkedHashMap(); private Map rightMap = new HashMap(); /** * 刷新按钮 */ private JMenuItem refMenuItem = new JMenuItem("刷新", VCISwingUtil.createImageIcon("arrow_refresh.png"));//刷新 /**查询功能**/ private JLabel searchLbl = new JLabel("查询:"); private JTextField searchTxt = new JTextField(7); private KJButton searchBtn = new KJButton("", "search.gif"); private String currentUserName = LogonApplication.getUserEntityObject().getUserName(); private BtmItem btm = null; private VCIGrandUIDialog dialog = null; public VCIGrandUIPanel(FunctionObject funcObj, BtmItem btm, VCIGrandUIDialog dialog) { super(funcObj); this.btm = btm; this.dialog = dialog; // 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(6); jspConfigPanel.setContinuousLayout(true); jspConfigPanel.setOneTouchExpandable(true); jspConfigPanel.setDividerLocation(200); this.setLayout(new BorderLayout()); this.add(jspConfigPanel, BorderLayout.CENTER); } public void roleList(String searchText) { setRoleList(searchText); roleList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); roleList.setCellRenderer(new ObjectListCellRenderer()); roleList.getSelectedValue(); roleList.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { RoleObject roleObj = (RoleObject)roleList.getSelectedValue(); curRole = roleObj; tree.clearSelection(); treeManager.getSelectionModel().clearSelection(); initRoleRight(roleObj.getId()); } }); leftPanel.getViewport().add(roleList); } Map allRightRoleMap = new HashMap(); public void initRoleRight(String roleId){ try { allRightRoleMap = new HashMap(); RoleRightObject[] roleRightObjs = new RoleRightClientDelegate().getRoleRightList(roleId, LogonApplication.getUserEntityObject().getUserName()); visitAllTreeNode(rootNode, roleRightObjs); } catch (VCIException e) { e.printStackTrace(); VCIOptionPane.showError(LogonApplication.frame, LocaleDisplay.getI18nString(e,"RMIPFramework", getLocale())); } } private void visitAllTreeNode(VCIBaseTreeNode node, RoleRightObject[] roleRightObjs){ Map rightMap = new HashMap(); for(RoleRightObject obj:roleRightObjs){ allRightRoleMap.put(obj.getFuncId(), obj); rightMap.put(obj.getFuncId(), obj.getRightValue()); } visitAllTreeNode(node,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 BtmItem){ String id = ((BtmItem) obj).name; if(rightMap.containsKey(id)){ visitAllTreeNode(childNode,rightMap); } } else if(obj instanceof PLUILayout){ visitAllTreeNode(childNode,rightMap); } else if (obj instanceof PLTabPage) { visitAllTreeNode(childNode,rightMap); } else if (obj instanceof PLPageDefination) { visitAllTreeNode(childNode,rightMap); } else if (obj instanceof PLTabButton) { String id = ((PLTabButton) obj).plTableOId; if(rightMap.containsKey(id)){ long rightValue = rightMap.get(id); int nodeValue = ((PLTabButton) obj).plSeq; if (nodeValue >= 0 && nodeValue <= 63) { //int preValue = (int)Math.pow(2, nodeValue); //进行位与操作,如果相等则表示具有当前操作的权限 long preValue = (rightValue >> nodeValue) & 1; //if(preValue == (preValue & rightValue)){ if (preValue == 1){ treeManager.getSelectionModel().addSelectionPath(new TreePath(childNode.getPath())); } } } } } } /** * 给角色列表赋值 */ private void setRoleList(String searchText) { try { RightManagementClientDelegate rightManagementClient = new RightManagementClientDelegate(LogonApplication.getUserEntityObject()); 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); } catch (VCIException e) { e.printStackTrace(); VCIOptionPane.showError(LogonApplication.frame, LocaleDisplay.getI18nString(e,"RMIPFramework", getLocale())); } } 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 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() { 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() { public void actionPerformed(ActionEvent e) { rightMap.clear(); treeManager.getSelectionModel().clearSelection(); } }); p.add(addButton); p.add(delButton); // p.add(btnSaveToTemp); // p.add(btnApplyFromTemp); p.add(btnClose); } 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()); BtmItem btmItem = this.btm; funMap.clear(); funMap.put(btmItem.name, btmItem.name); VCIBaseTreeNode node = new VCIBaseTreeNode(btmItem.label+"("+ btmItem.name+")", btmItem); treeModel.insertNodeInto(node, rootNode,rootNode.getChildCount()); setChildNode(node, btmItem); treeManager = new CheckBoxTreeManager(tree); scrollTree.getViewport().removeAll(); scrollTree.getViewport().add(tree); scrollTree.repaint(); } private void refreshRole() { roleList(""); treeManager.getSelectionModel().clearSelection(); } /**查询满足条件的角色信息**/ private void searchRoleList() { String search = this.searchTxt.getText().trim(); roleList(search); treeManager.getSelectionModel().clearSelection(); } private JPanel getSearchPanel() { JPanel searchPanel = new JPanel(); searchPanel.setLayout(new BoxLayout(searchPanel, BoxLayout.X_AXIS)); searchPanel.add(searchLbl); searchPanel.add(searchTxt); searchPanel.add(searchBtn); return searchPanel; } private void close(){ dialog.dispose(); dialog.setVisible(false); } private void add_actionPerform(){ if (!checkItem()) { return; } final QANProcessBarFrame frame = new QANProcessBarFrame(); final QANProcessBar bar = new QANProcessBar(new Thread(new Runnable() { @Override public void run() { try{ grantRightExec(frame); } finally{ frame.setProcessBarCancel(true); } } }){}, dialog, frame, false); String title = dialog.getTitle(); frame.setTitle(title); bar.setTitle(title); bar.setVisible(true); } private void grantRightExec(QANProcessBarFrame frame){ try { if(!isSelectedRole()) { VCIOptionPane.showMessage(dialog, "请选择角色进行授权!"); return; } rightMap.clear(); boolean refresh = true; TreePath[] treePath = treeManager.getSelectionModel().getSelectionPaths(); //当没有选中模块的时候 if (treePath == null) { refresh = false; } frame.setContent("正在计算权限数据,请稍等..."); RoleRightObject[] roleRightObjs = getSelectedRoleRightObjs(treePath); frame.setContent("正在保存权限数据,请稍等..."); boolean res = new RoleRightClientDelegate(LogonApplication.getUserEntityObject()).saveRoleRight(roleRightObjs,curRole.getId(),currentUserName); if(res){ frame.setProcessBarCancel(true); VCIOptionPane.showMessage(dialog, "功能模块授权成功!"); } if(refresh){ treeManager.getSelectionModel().clearSelection(); initRoleRight(curRole.getId()); } }catch (VCIException e1) { e1.printStackTrace(); frame.setProcessBarCancel(true); VCIOptionPane.showError(dialog, "RMIPFramework", e1); } } private boolean isTypeHasOtherChildren(Map funMap) { Map cMap = new HashMap(); PLUILayout[] contexts = this.dialog.getTypeAllContexts(); for (int i = 0; i < contexts.length; i++) { if (allRightRoleMap.containsKey(contexts[i].plOId)) { cMap.put(contexts[i].plOId, contexts[i].plOId); } } Set> funSet = funMap.entrySet(); Iterator> funIt = funSet.iterator(); while(funIt.hasNext()){ Entry next = funIt.next(); String key = next.getKey(); if (cMap.containsKey(key)) { cMap.keySet().remove(key); } } if (cMap.keySet().size() > 0) { return true; } return false; } private RoleRightObject[] getSelectedRoleRightObjs(TreePath[] treePath){ rightMap.clear(); RoleRightObject[] roleRightObjs = new RoleRightObject[0]; if(treePath == null){ //1。先从所有权限对象中删除模块权限对象 Set> funSet = funMap.entrySet(); Iterator> funIt = funSet.iterator(); boolean isFirst = true; while(funIt.hasNext()){ Entry next = funIt.next(); String key = next.getKey(); String value = next.getValue(); if (isFirst && isTypeHasOtherChildren(funMap)) { isFirst = false; continue; } isFirst = false; allRightRoleMap.remove(key); } //2。再保存选中的模块对象到所有权限中 Set> entrySet = rightMap.entrySet(); Iterator> iterator = entrySet.iterator(); while(iterator.hasNext()){ Entry next = iterator.next(); String key = next.getKey(); RoleRightObject value = next.getValue(); allRightRoleMap.put(value.getFuncId(), value); } rightMap = allRightRoleMap; /**上面处理完成后,循环遍历取出MAP里的对象进行保存**/ 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()); } } 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(!(node.getObj() instanceof PLTabButton)){ getRightValue(node,true);//向上处理 getRightValue(node,false);//向下处理(包含当前节点) }else if(node.getObj() instanceof PLTabButton){ VCIBaseTreeNode parentNode = (VCIBaseTreeNode)node.getParent(); String funcId = ((PLPageDefination)parentNode.getObj()).plOId; getRightValue(parentNode,true);//向上处理该操作父级的上级模块权限(不包含父节点) if(!rightMap.containsKey(funcId)){ RoleRightObject roleRightObj = new RoleRightObject(); roleRightObj.setFuncId(funcId); roleRightObj.setRightType((short)2); // 设置UI权限 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(key); } //2。再保存选中的模块对象到所有权限中 Set> entrySet = rightMap.entrySet(); Iterator> iterator = entrySet.iterator(); while(iterator.hasNext()){ Entry next = iterator.next(); String key = next.getKey(); RoleRightObject value = next.getValue(); allRightRoleMap.put(value.getFuncId(), value); } rightMap = allRightRoleMap; /**上面处理完成后,循环遍历取出MAP里的对象进行保存**/ 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()); } } return roleRightObjs; } /** * 获取权限 * @param isUp 是否是向上获取,如果是向上获取,传进来的必然是模块节点,且上级模块必然是没有选中 */ private void getRightValue(VCIBaseTreeNode node,boolean isUp){ if(isUp){//向上获取,存储每个上级模块的权限值 VCIBaseTreeNode parentNode = (VCIBaseTreeNode)node.getParent(); while(!"root".equals(parentNode.getObj())){ String funcId = ""; if (parentNode.getObj() instanceof BtmItem) { BtmItem btmItem = (BtmItem) parentNode.getObj(); funcId = btmItem.name; } else if (parentNode.getObj() instanceof PLUILayout) { PLUILayout context = (PLUILayout) parentNode.getObj(); funcId = context.plOId; } else if (parentNode.getObj() instanceof PLTabPage) { PLTabPage tab = (PLTabPage) parentNode.getObj(); funcId = tab.plOId; } else if (parentNode.getObj() instanceof PLPageDefination){ PLPageDefination pageDef = (PLPageDefination) parentNode.getObj(); funcId = pageDef.plOId; } else if (parentNode.getObj() instanceof PLTabButton) { PLTabButton but = (PLTabButton)parentNode.getObj(); funcId = but.plOId; } RoleRightObject obj = new RoleRightObject(); obj.setFuncId(funcId); obj.setRightType((short)2); // 设置UI权限 obj.setRightValue(1);//没有操作的模块权限值存储为0 obj.setRoleId(curRole.getId()); obj.setCreateUser(currentUserName); obj.setCreateTime(new Date()); obj.setModifyUser(currentUserName); obj.setModifyTime(new Date()); obj.setLicensor(""); if(!rightMap.containsKey(funcId)){ rightMap.put(funcId, obj); } parentNode = (VCIBaseTreeNode)parentNode.getParent(); } }else{//向下获取,无需判断是否选中,但需要判断其子级是否是操作 //先存储当前节点 String funcId = ""; if(node.getObj() instanceof String){ funcId = (String)node.getObj(); } else if (node.getObj() instanceof BtmItem) { BtmItem btmItem = (BtmItem) node.getObj(); funcId = btmItem.name; } else if (node.getObj() instanceof PLUILayout) { PLUILayout context = (PLUILayout) node.getObj(); funcId = context.plOId; } else if (node.getObj() instanceof PLTabPage) { PLTabPage tab = (PLTabPage) node.getObj(); funcId = tab.plOId; } else if (node.getObj() instanceof PLPageDefination){ PLPageDefination pageDef = (PLPageDefination) node.getObj(); funcId = pageDef.plOId; } else if (node.getObj() instanceof PLTabButton) { PLTabButton but = (PLTabButton)node.getObj(); funcId = but.plOId; } if(!(node.getObj() instanceof PLPageDefination)){//子节点不是操作 if(!rightMap.containsKey(funcId)&&!funcId.equals("root")){ RoleRightObject roleRightObj = new RoleRightObject(); roleRightObj.setFuncId(funcId); roleRightObj.setRightType((short)2); // 设置UI权限 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((short)2); // 设置UI权限 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()))){ PLTabButton obj = (PLTabButton)childNode.getObj(); value += (long)Math.pow(2, obj.plSeq);//累计加上各个操作的权限值 } } return value; } private PLUILayout[] getSortedContexts(PLUILayout[] contexts){ Arrays.sort(contexts, new Comparator(){ @Override public int compare(PLUILayout o1, PLUILayout o2) { return o1.plName.compareTo(o2.plName); } }); return contexts; } private PLTabPage[] getSortedPLTabPages(PLTabPage[] tabs){ Arrays.sort(tabs, new Comparator(){ @Override public int compare(PLTabPage o1, PLTabPage o2) { return o1.plName.compareTo(o2.plName); } }); return tabs; } private PLPageDefination[] getSortedPLPageDefinations(PLPageDefination[] pds){ Arrays.sort(pds, new Comparator(){ @Override public int compare(PLPageDefination o1, PLPageDefination o2) { return o1.name.compareTo(o2.name); } }); return pds; } private PLTabButton[] getSortedPLTabButtons(PLTabButton[] btns){ Arrays.sort(btns, new Comparator(){ @Override public int compare(PLTabButton o1, PLTabButton o2) { return new Integer(o1.plSeq).compareTo(new Integer(o2.plSeq)); } }); return btns; } private PLUILayout[] getFilterContext(BtmItem btmItem) throws VCIError{ PLUILayout[] contexts = this.dialog.getContexts(); contexts = getSortedContexts(contexts); return contexts; } private void setChildNode(VCIBaseTreeNode node ,Object funcObj) { try{ if (funcObj instanceof BtmItem) { BtmItem btmItem = (BtmItem) funcObj; PLUILayout[] contexts = getFilterContext(btmItem); for(int i = 0; i < contexts.length; i++){ VCIBaseTreeNode curNode = new VCIBaseTreeNode(contexts[i].plName+"("+contexts[i].plCode+")", contexts[i]); treeModel.insertNodeInto(curNode, node,node.getChildCount()); funMap.put(contexts[i].plOId, contexts[i].plCode); setChildNode(curNode, contexts[i]); } } else if (funcObj instanceof PLUILayout) { PLUILayout context = (PLUILayout) funcObj; PLTabPage[] tabs = UITools.getService().getPLTabPagesByPageDefinationOId(context.plOId); tabs = getSortedPLTabPages(tabs); for(int i = 0; i < tabs.length; i++){ VCIBaseTreeNode curNode = new VCIBaseTreeNode(tabs[i].plName, tabs[i]); treeModel.insertNodeInto(curNode, node,node.getChildCount()); funMap.put(tabs[i].plOId, tabs[i].plName); setChildNode(curNode, tabs[i]); } } else if (funcObj instanceof PLTabPage) { PLTabPage tab = (PLTabPage) funcObj; PLPageDefination[] pageDefinations = UITools.getService().getPLPageDefinationsByPageContextOId(tab.plOId); pageDefinations = getSortedPLPageDefinations(pageDefinations); for (int i = 0; i < pageDefinations.length; i++) { VCIBaseTreeNode curNode = new VCIBaseTreeNode(pageDefinations[i].name, pageDefinations[i]); treeModel.insertNodeInto(curNode, node,node.getChildCount()); funMap.put(pageDefinations[i].plOId, pageDefinations[i].name); setChildNode(curNode, pageDefinations[i]); } } else if (funcObj instanceof PLPageDefination) { PLPageDefination pageDef = (PLPageDefination) funcObj; PLTabButton[] buttons = UITools.getService().getPLTabButtonsByTableOId(pageDef.plOId); buttons = getSortedPLTabButtons(buttons); for(int i = 0; i < buttons.length; i++){ if(!buttons[i].show.equals("0")){ continue; } VCIBaseTreeNode curNode = new VCIBaseTreeNode(buttons[i].plLabel, buttons[i]); treeModel.insertNodeInto(curNode, node,node.getChildCount()); funMap.put(buttons[i].plTableOId, buttons[i].plLabel); setChildNode(curNode, buttons[i]); curNode.setLeaf(true); } } else if (funcObj instanceof PLTabButton) { node.setLeaf(true); } } catch (VCIError e) { //TODO 抛出异常 e.printStackTrace(); } } /** * 校验 * * @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 void message(String proValue, String fileName) { VCIOptionPane.showMessage(LogonApplication.frame,LocaleDisplay.getI18nString(proValue, fileName, getLocale())); } /** * */ private static final long serialVersionUID = 120493240584388454L; @Override public String getUserID() { // TODO Auto-generated method stub return null; } @Override public String getRoleID() { // TODO Auto-generated method stub return null; } @Override public JPanel getModuleComponent() { // TODO Auto-generated method stub return null; } @Override public String getModuleName() { // TODO Auto-generated method stub 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 "UI授权"; } @Override public String getIconName() { // TODO Auto-generated method stub return null; } @Override public String getModuleShowInfo() { // TODO Auto-generated method stub return null; } private LinkedHashMap roleRightObjsMap = new LinkedHashMap(); private void saveToTemp(){ if(!isSelectedRole()) return; TreePath[] treePath = treeManager.getSelectionModel().getSelectionPaths(); RoleRightObject[] lastRoleRightObjs = getSelectedRoleRightObjs(treePath); if(roleRightObjsMap.containsKey(curRole)){ roleRightObjsMap.remove(curRole); } roleRightObjsMap.put(curRole, lastRoleRightObjs); VCIJOptionPane.showMessage(this, "存储成功!"); } private void applyFromTemp(){ if(!isSelectedRole()) return; if(roleRightObjsMap.size() == 0){ VCIJOptionPane.showMessage(this, "请先存储模板!"); return; } int index = 0; int size = roleRightObjsMap.size(); RoleObject[] roles = new RoleObject[size]; RoleRightObject[] lastRoleRightObjs = new RoleRightObject[0]; Iterator it = roleRightObjsMap.keySet().iterator(); while(it.hasNext()){ RoleObject roleObj = it.next(); roles[index] = roleObj; lastRoleRightObjs = roleRightObjsMap.get(roleObj); index += 1; } if(size == 1){ tree.clearSelection(); treeManager.getSelectionModel().clearSelection(); visitAllTreeNode(rootNode, lastRoleRightObjs); } 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(); lastRoleRightObjs = roleRightObjsMap.get(roleObj); tree.clearSelection(); treeManager.getSelectionModel().clearSelection(); visitAllTreeNode(rootNode, lastRoleRightObjs); VCIJOptionPane.showMessage(this, "应用成功!"); } } } private boolean isSelectedRole(){ if(curRole == null) { VCIJOptionPane.showMessage(this, "请先选择角色!"); return false; } return true; } }