package com.vci.client.framework.rightdistribution.roleRight;
|
|
import java.awt.BorderLayout;
|
import java.awt.Dimension;
|
import java.awt.FlowLayout;
|
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionListener;
|
import java.awt.event.ItemEvent;
|
import java.awt.event.ItemListener;
|
import java.awt.event.MouseAdapter;
|
import java.awt.event.MouseEvent;
|
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.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.JComboBox;
|
import javax.swing.ListSelectionModel;
|
import javax.swing.event.TreeExpansionEvent;
|
import javax.swing.event.TreeExpansionListener;
|
import javax.swing.tree.TreePath;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
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.common.objects.UserEntityObject;
|
import com.vci.client.framework.common.RightType;
|
import com.vci.client.framework.rightdistribution.object.BizTypeEx;
|
import com.vci.client.framework.rightdistribution.object.UILayoutEx;
|
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.rightdistribution.object.RoleRightObject;
|
import com.vci.client.framework.specialrole.ModuleInterface.IModuleShow;
|
import com.vci.client.framework.systemConfig.stafforgmanage.ListLabelCellRender;
|
import com.vci.client.omd.provider.BtmProvider;
|
import com.vci.client.portal.utility.UIDataFetcher;
|
import com.vci.client.portal.utility.UITools;
|
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.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.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;
|
|
/**
|
* 在bs架构下,基于建模类型的UI模块授权
|
* @author VCI_STGK_Lincq
|
*
|
*/
|
public class BSTypeRoleRightPanel2 extends VCIBasePanel implements IModuleShow{
|
private String moduleName = "UI授权";
|
|
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 JButton addButton = new JButton();
|
private JButton reAddButton = new JButton();
|
private JButton delButton = new JButton();
|
// private JButton searchButton = new JButton();
|
private JButton clearButton = new JButton();
|
private JButton removeButton = new JButton();
|
|
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 static Map<String, String> funMap = new LinkedHashMap<String, String>();
|
private Map<String,RoleRightObject> rightMap = new HashMap<String,RoleRightObject>();
|
|
/**
|
* 刷新按钮
|
*/
|
private JMenuItem refMenuItem = new JMenuItem("刷新", VCISwingUtil.createImageIcon("arrow_refresh.png"));//刷新
|
|
/**查询功能**/
|
private JLabel searchLbl = new JLabel("查询:");
|
private JTextField searchTxt = new JTextField(20);
|
private KJButton searchBtn = new KJButton("", "search.gif");
|
private String currentUserName = LogonApplication.getUserEntityObject().getUserName();
|
|
/**权限树的查询 */
|
private JLabel typeLbl = new JLabel("业务类型:");
|
private JTextField typeText = new JTextField(20);
|
private JComboBox<BizTypeEx> comboType = new JComboBox<BizTypeEx>();
|
private JLabel contextLbl = new JLabel("上下文:");
|
private JTextField contextText = new JTextField(20);
|
private JComboBox<UILayoutEx> comboUIContext = new JComboBox<UILayoutEx>();
|
private KJButton sBtn = new KJButton("", "search.gif");
|
private UIDataFetcher uiDataFechter = new UIDataFetcher();
|
|
public BSTypeRoleRightPanel2(FunctionObject funcObj) {
|
super(funcObj);
|
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());
|
initRoleList("");
|
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();
|
}
|
});
|
// searchButton.setText(LocaleDisplay.getI18nString("rmip.framework.rightdistribution.moduleRight.lookButton.file","RMIPFramework", getLocale()));
|
// searchButton.setIcon(new BundleImage().createImageIcon("search.gif"));
|
// searchButton.addActionListener(new ActionListener() {
|
// public void actionPerformed(ActionEvent e) {
|
//// searchMyRigth();
|
// }
|
// });
|
|
midPanel.setLayout(new BorderLayout());
|
midPanel.add(top, BorderLayout.NORTH);
|
midPanel.add(bottom, BorderLayout.SOUTH);
|
midPanel.add(contentPanel, BorderLayout.CENTER);
|
|
JPanel panelTitle = new JPanel();
|
FlowLayout fl = new FlowLayout();
|
fl.setAlignment(FlowLayout.LEFT);
|
panelTitle.setLayout(fl);
|
panelTitle.add(titleLab);
|
|
JLabel labelSpace = new JLabel();
|
labelSpace.setPreferredSize(new Dimension(50, 20));
|
panelTitle.add(labelSpace);
|
panelTitle.add(typeLbl);
|
//panelTitle.add(typeText);
|
comboType.setPreferredSize(new Dimension(250, 25));
|
comboType.addItemListener(new ItemListener() {
|
|
@Override
|
public void itemStateChanged(ItemEvent e) {
|
if(e.getStateChange() == ItemEvent.SELECTED){
|
BizTypeItemSelectChanged(e);
|
}
|
}
|
});
|
|
panelTitle.add(comboType);
|
panelTitle.add(contextLbl);
|
//panelTitle.add(contextText);
|
comboUIContext.setPreferredSize(new Dimension(250, 25));
|
comboUIContext.addItemListener(new ItemListener() {
|
|
@Override
|
public void itemStateChanged(ItemEvent e) {
|
if(e.getStateChange() == ItemEvent.SELECTED){
|
UIContextSelectChanged(e);
|
}
|
}
|
});
|
|
panelTitle.add(comboUIContext);
|
panelTitle.add(sBtn);
|
|
palMain.add(panelTitle, 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 void BizTypeItemSelectChanged(ItemEvent e) {
|
comboUIContext.removeAllItems();
|
|
BizTypeEx btEx = (BizTypeEx)comboType.getSelectedItem();
|
if (btEx == null || btEx.getBizType() == null)
|
{
|
initUIContextTree(null, null);
|
return;
|
}
|
|
BtmItem bt = btEx.getBizType();
|
|
PLUILayout[] contexts;
|
try {
|
contexts = UITools.getService().getPLUILayoutsByRelatedType(bt.name);
|
|
comboUIContext.addItem(new UILayoutEx(null));
|
for (PLUILayout ui : contexts) {
|
comboUIContext.addItem(new UILayoutEx(ui));
|
}
|
} catch (VCIError e1) {
|
// TODO Auto-generated catch block
|
e1.printStackTrace();
|
}
|
}
|
|
|
private void UIContextSelectChanged(ItemEvent e) {
|
BtmItem bt = null;
|
PLUILayout uiContext = null;
|
|
BizTypeEx btEx = (BizTypeEx)comboType.getSelectedItem();
|
if (btEx != null)
|
bt = btEx.getBizType();
|
|
UILayoutEx uiEx = (UILayoutEx)comboUIContext.getSelectedItem();
|
if (uiEx != null)
|
uiContext = uiEx.getUIContext();
|
|
initUIContextTree(bt, uiContext);
|
}
|
|
private String getNodeText(Object obj) {
|
String text = "";
|
|
if (obj == null)
|
return null;
|
|
if (obj instanceof BtmItem) {
|
BtmItem bt = (BtmItem)obj;
|
return bt.name+" ["+ bt.label+"]";
|
} else if (obj instanceof PLUILayout) {
|
PLUILayout ui = (PLUILayout)obj;
|
return ui.plCode+" ["+ui.plName+"]";
|
} else if (obj instanceof PLTabPage) {
|
PLTabPage tab = (PLTabPage)obj;
|
return tab.plName;
|
} else if (obj instanceof PLPageDefination) {
|
PLPageDefination page = (PLPageDefination)obj;
|
return page.name;
|
} else if (obj instanceof PLTabButton) {
|
PLTabButton btn = (PLTabButton)obj;
|
return btn.plLabel;
|
}
|
return text;
|
}
|
|
private void initUIContextTree(BtmItem bt, PLUILayout uiContext) {
|
|
treeManager.getSelectionModel().removeSelectionPath(new TreePath(rootNode.getPath()));
|
//先清除所有展开的节点
|
rootNode.removeAllChildren();
|
treeModel.reload();
|
// for(int i=rootNode.getChildCount(); i>0; i--){
|
// VCIBaseTreeNode childNode = (VCIBaseTreeNode)rootNode.getChildAt(i-1);
|
// treeModel.removeNodeFromParent(childNode);
|
// }
|
funMap.clear();
|
|
//rootNode.setExpand(true);
|
|
if(bt != null) {
|
if (uiContext != null) {
|
Map<String, VCIBaseTreeNode> showNodes = new HashMap<String, VCIBaseTreeNode>();
|
VCIBaseTreeNode typeNode = showNodes.get(bt.name);
|
if(typeNode == null){
|
//添加类型节点
|
typeNode = new VCIBaseTreeNode(getNodeText(bt), bt);//bt.name+" ["+ bt.label+"]", bt);
|
treeModel.insertNodeInto(typeNode, rootNode,rootNode.getChildCount());
|
//typeNode.setExpand(true);
|
funMap.put(bt.name, bt.name);
|
showNodes.put(bt.name, typeNode);
|
}
|
//添加上下文节点及子节点
|
VCIBaseTreeNode curNode = new VCIBaseTreeNode(getNodeText(uiContext), uiContext);//uiContext.plName+" ["+uiContext.plCode+"]", uiContext);
|
//curNode.setExpand(true);
|
treeModel.insertNodeInto(curNode, typeNode,typeNode.getChildCount());
|
funMap.put(uiContext.plOId, uiContext.plCode);
|
setChildNode(curNode, uiContext);
|
} else {
|
VCIBaseTreeNode typeNode = new VCIBaseTreeNode(getNodeText(bt), bt);//bt.label+" ["+ bt.name+"]", bt);
|
treeModel.insertNodeInto(typeNode, rootNode,rootNode.getChildCount());
|
//typeNode.setExpand(true);
|
funMap.put(bt.name, bt.name);
|
setChildNode(typeNode, bt, uiDataFechter);
|
}
|
}else{
|
BtmItem[] btmItems = BtmProvider.getInstance().getAllBtmItems();
|
for (int i = 0; i < btmItems.length; i++) {
|
VCIBaseTreeNode typeNode = new VCIBaseTreeNode(getNodeText(btmItems[i]), btmItems[i]);//btmItems[i].label+"("+ btmItems[i].name+")", btmItems[i]);
|
treeModel.insertNodeInto(typeNode, rootNode,rootNode.getChildCount());
|
//typeNode.setExpand(true);
|
funMap.put(btmItems[i].name, btmItems[i].name);
|
setChildNode(typeNode, bt, uiDataFechter);
|
}
|
}
|
|
tree.scrollPathToVisible(new TreePath(rootNode.getPath()));
|
//tree.expandAllTreeNode(new TreePath(rootNode.getPath()), true);
|
if (curRole != null)
|
initRoleRight(curRole.getId());
|
}
|
|
public void initRoleList(String searchText) {
|
setRoleList(searchText);
|
roleList.setCellRenderer(new ListLabelCellRender());
|
roleList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
|
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<String,RoleRightObject> allRightRoleMap = new HashMap<String,RoleRightObject>();
|
|
public void initRoleRight(String roleId){
|
try {
|
allRightRoleMap = new HashMap<String,RoleRightObject>();
|
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 setChildNode(VCIBaseTreeNode node ,Object funcObj, UIDataFetcher uiDataFechter) {
|
if (funcObj instanceof BtmItem) {
|
BtmItem btmItem = (BtmItem) funcObj;
|
List<PLUILayout> contexts = uiDataFechter.getContext(btmItem.name);
|
if (contexts == null) {
|
return;
|
}
|
for(PLUILayout context : contexts){
|
VCIBaseTreeNode curNode = new VCIBaseTreeNode(getNodeText(context), context);// context.plName+"("+context.plCode+")", context);
|
treeModel.insertNodeInto(curNode, node,node.getChildCount());
|
funMap.put(context.plOId, context.plCode);
|
setChildNode(curNode, context, uiDataFechter);
|
}
|
} else if (funcObj instanceof PLUILayout) {
|
PLUILayout context = (PLUILayout) funcObj;
|
List<PLTabPage> tabs = uiDataFechter.getTabs(context.plOId);
|
if (tabs == null) {
|
return;
|
}
|
for(PLTabPage tab : tabs){
|
VCIBaseTreeNode curNode = new VCIBaseTreeNode(getNodeText(tab), tab);//tab.plName, tab);
|
treeModel.insertNodeInto(curNode, node,node.getChildCount());
|
funMap.put(tab.plOId, tab.plName);
|
setChildNode(curNode, tab, uiDataFechter);
|
}
|
} else if (funcObj instanceof PLTabPage) {
|
PLTabPage tab = (PLTabPage) funcObj;
|
List<PLPageDefination> pageDefinations = uiDataFechter.getComopnent(tab.plOId);
|
if (pageDefinations == null) {
|
return;
|
}
|
for (PLPageDefination pageDefination : pageDefinations) {
|
VCIBaseTreeNode curNode = new VCIBaseTreeNode(getNodeText(pageDefination), pageDefination);//pageDefination.name, pageDefination);
|
treeModel.insertNodeInto(curNode, node,node.getChildCount());
|
funMap.put(pageDefination.plOId, pageDefination.name);
|
setChildNode(curNode, pageDefination, uiDataFechter);
|
}
|
} else if (funcObj instanceof PLPageDefination) {
|
PLPageDefination pageDef = (PLPageDefination) funcObj;
|
List<PLTabButton> buttons = uiDataFechter.getButtons(pageDef.plOId);
|
if (buttons == null) {
|
return;
|
}
|
for(PLTabButton button : buttons){
|
if(!button.show.equals("0")){
|
continue;
|
}
|
VCIBaseTreeNode curNode = new VCIBaseTreeNode(getNodeText(button), button);//button.plLabel, button);
|
treeModel.insertNodeInto(curNode, node,node.getChildCount());
|
funMap.put(button.plTableOId, button.plLabel);
|
setChildNode(curNode, button, uiDataFechter);
|
curNode.setLeaf(true);
|
}
|
}
|
else if (funcObj instanceof PLTabButton) {
|
node.setLeaf(true);
|
}
|
}
|
private void setChildNode(VCIBaseTreeNode node ,Object funcObj, Map<String, Long> rightMap) {
|
if (funcObj instanceof BtmItem) {
|
BtmItem btmItem = (BtmItem) funcObj;
|
List<PLUILayout> contexts = uiDataFechter.getContext(btmItem.name);
|
if (contexts == null) {
|
return;
|
}
|
for(PLUILayout context : contexts){
|
if(rightMap.containsKey(context.plOId)){
|
VCIBaseTreeNode curNode = new VCIBaseTreeNode(context.plName+"("+context.plCode+")", context);
|
curNode.setExpand(true);
|
treeModel.insertNodeInto(curNode, node,node.getChildCount());
|
funMap.put(context.plOId, context.plCode);
|
setChildNode(curNode, context, rightMap);
|
}
|
}
|
} else if (funcObj instanceof PLUILayout) {
|
PLUILayout context = (PLUILayout) funcObj;
|
List<PLTabPage> tabs = uiDataFechter.getTabs(context.plOId);
|
if (tabs == null) {
|
return;
|
}
|
for(PLTabPage tab : tabs){
|
if(rightMap.containsKey(tab.plOId)){
|
VCIBaseTreeNode curNode = new VCIBaseTreeNode(tab.plName, tab);
|
curNode.setExpand(true);
|
treeModel.insertNodeInto(curNode, node,node.getChildCount());
|
funMap.put(tab.plOId, tab.plName);
|
setChildNode(curNode, tab, rightMap);
|
}
|
}
|
} else if (funcObj instanceof PLTabPage) {
|
PLTabPage tab = (PLTabPage) funcObj;
|
List<PLPageDefination> pageDefinations = uiDataFechter.getComopnent(tab.plOId);
|
if (pageDefinations == null) {
|
return;
|
}
|
for (PLPageDefination pageDefination : pageDefinations) {
|
if(rightMap.containsKey(pageDefination.plOId)){
|
VCIBaseTreeNode curNode = new VCIBaseTreeNode(pageDefination.name, pageDefination);
|
curNode.setExpand(true);
|
treeModel.insertNodeInto(curNode, node,node.getChildCount());
|
funMap.put(pageDefination.plOId, pageDefination.name);
|
setChildNode(curNode, pageDefination, rightMap);
|
}
|
}
|
} else if (funcObj instanceof PLPageDefination) {
|
PLPageDefination pageDef = (PLPageDefination) funcObj;
|
List<PLTabButton> buttons = uiDataFechter.getButtons(pageDef.plOId);
|
if (buttons == null) {
|
return;
|
}
|
for(PLTabButton button : buttons){
|
if(rightMap.containsKey(button.plTableOId)){
|
Long rightValue = rightMap.get(button.plTableOId);
|
int nodeValue = button.plSeq;
|
if (nodeValue >= 0 && nodeValue <= 63) {
|
//long preValue = (long)Math.pow(2, nodeValue);
|
//进行位与操作,如果相等则表示具有当前操作的权限
|
//if(preValue == (preValue & rightValue)){
|
long preValue = (rightValue >> nodeValue) & 1;
|
if (preValue == 1) {
|
VCIBaseTreeNode curNode = new VCIBaseTreeNode(button.plLabel, button);
|
curNode.setExpand(true);
|
treeModel.insertNodeInto(curNode, node,node.getChildCount());
|
funMap.put(button.plTableOId, button.plLabel);
|
setChildNode(curNode, button, rightMap);
|
curNode.setLeaf(true);
|
}
|
}
|
}
|
}
|
}
|
else if (funcObj instanceof PLTabButton) {
|
node.setLeaf(true);
|
}
|
}
|
|
private void visitAllTreeNode(VCIBaseTreeNode node, RoleRightObject[] roleRightObjs){
|
Map<String,Long> rightMap = new HashMap<String,Long>();
|
for(RoleRightObject obj:roleRightObjs){
|
allRightRoleMap.put(obj.getFuncId(), obj);
|
rightMap.put(obj.getFuncId(), obj.getRightValue());
|
}
|
visitAllTreeNode(node,rightMap);
|
}
|
private void visitAllTreeNode(VCIBaseTreeNode node,Map<String,Long> 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) {
|
//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()));
|
}
|
}
|
}
|
}
|
}
|
}
|
|
/**
|
* 给角色列表赋值
|
*/
|
private void setRoleList(String searchText) {
|
try {
|
RightManagementClientDelegate rightManagementClient = new RightManagementClientDelegate(LogonApplication.getUserEntityObject());
|
RoleObject[] roleObjs = rightManagementClient.fetchRoleInfoByUserType(LogonApplication.getUserEntityObject().getUserName());// 取得角色信息
|
if(!"".equals(searchText)) {
|
List<RoleObject> list = new LinkedList<RoleObject>();
|
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();
|
}
|
});
|
|
// reAddButton.setText(LocaleDisplay.getI18nString("rmip.framework.rightdistribution.moduleRight.reAddButton.file","RMIPFramework", getLocale()));
|
// reAddButton.setIcon(new BundleImage().createImageIcon("create.gif"));
|
// reAddButton.addActionListener(new ActionListener() {
|
// public void actionPerformed(ActionEvent e) {
|
// reAdd_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();
|
}
|
});
|
|
// removeButton.setText(LocaleDisplay.getI18nString("rmip.framework.rightdistribution.moduleRight.removeButton.file","RMIPFramework", getLocale()));
|
// removeButton.setIcon(new BundleImage().createImageIcon("remove.gif"));
|
// removeButton.addActionListener(new ActionListener() {
|
// public void actionPerformed(ActionEvent e) {
|
// remove_actionPerform();
|
// }
|
// });
|
|
// clearButton.setText(LocaleDisplay.getI18nString("rmip.framework.rightdistribution.moduleRight.clearButton.file","RMIPFramework", getLocale()));
|
// clearButton.setIcon(new BundleImage().createImageIcon("clear.gif"));
|
// clearButton.addActionListener(new ActionListener() {
|
// public void actionPerformed(ActionEvent e) {
|
// clear_actionPerform();
|
// }
|
// });
|
|
sBtn.addActionListener(new ActionListener() {
|
public void actionPerformed(ActionEvent e) {
|
String typeStr = typeText.getText();
|
String contextStr = contextText.getText();
|
//先清除所有展开的节点
|
for(int i=rootNode.getChildCount(); i>0; i--){
|
VCIBaseTreeNode childNode = (VCIBaseTreeNode)rootNode.getChildAt(i-1);
|
treeModel.removeNodeFromParent(childNode);
|
}
|
funMap.clear();
|
//为保证每次的查询还原到初始所有一级节点执行以下操作
|
/*BtmItem[] btmItems = BtmProvider.getInstance().getAllBtmItems();
|
for (int i = 0; i < btmItems.length; i++) {
|
VCIBaseTreeNode node = new VCIBaseTreeNode(btmItems[i].label+"("+ btmItems[i].name+")", btmItems[i]);
|
treeModel.insertNodeInto(node, rootNode,rootNode.getChildCount());
|
}*/
|
/*for(int i=0; i< rootNode.getChildCount(); i++){
|
VCIBaseTreeNode childNode = (VCIBaseTreeNode)rootNode.getChildAt(i);
|
for(int j=childNode.getChildCount(); j>0; j--){
|
VCIBaseTreeNode node = (VCIBaseTreeNode) childNode.getChildAt(j-1);
|
treeModel.removeNodeFromParent(node);
|
}
|
}*/
|
BtmItem[] btmItems = BtmProvider.getInstance().getAllBtmItems();
|
|
if(contextStr.trim().length() > 0){
|
try {
|
//获取所有匹配的上下文对象???sss
|
PLUILayout[] contexts = UITools.getService().getPLUILayoutEntity(contextStr);
|
Map<String, VCIBaseTreeNode> showNodes = new HashMap<String, VCIBaseTreeNode>();
|
for(PLUILayout context: contexts){
|
for (int i = 0; i < btmItems.length; i++) {
|
if((context.plRelatedType).equals(btmItems[i].name)){
|
if(btmItems[i].label.contains(typeStr) || btmItems[i].name.contains(typeStr)){
|
VCIBaseTreeNode typeNode = showNodes.get(btmItems[i].name);
|
if(typeNode == null){
|
//添加类型节点
|
typeNode = new VCIBaseTreeNode(btmItems[i].label+"("+ btmItems[i].name+")", btmItems[i]);
|
funMap.put(btmItems[i].name, btmItems[i].name);
|
showNodes.put(btmItems[i].name, typeNode);
|
treeModel.insertNodeInto(typeNode, rootNode,rootNode.getChildCount());
|
}
|
//添加上下文节点及子节点
|
VCIBaseTreeNode curNode = new VCIBaseTreeNode(context.plName+"("+context.plCode+")", context);
|
treeModel.insertNodeInto(curNode, typeNode,typeNode.getChildCount());
|
funMap.put(context.plOId, context.plCode);
|
setChildNode(curNode, context);
|
}
|
}
|
}
|
}
|
} catch (VCIError e1) {
|
e1.printStackTrace();
|
}
|
}else if(typeStr.trim().length() > 0 ){
|
for (int i = 0; i < btmItems.length; i++) {
|
if(btmItems[i].label.contains(typeStr) || btmItems[i].name.contains(typeStr)){
|
VCIBaseTreeNode typeNode = new VCIBaseTreeNode(btmItems[i].label+"("+ btmItems[i].name+")", btmItems[i]);
|
funMap.put(btmItems[i].name, btmItems[i].name);
|
treeModel.insertNodeInto(typeNode, rootNode,rootNode.getChildCount());
|
}
|
}
|
}else{
|
for (int i = 0; i < btmItems.length; i++) {
|
VCIBaseTreeNode typeNode = new VCIBaseTreeNode(btmItems[i].label+"("+ btmItems[i].name+")", btmItems[i]);
|
funMap.put(btmItems[i].name, btmItems[i].name);
|
treeModel.insertNodeInto(typeNode, rootNode,rootNode.getChildCount());
|
}
|
}
|
treeManager.getSelectionModel().removeSelectionPath(new TreePath(rootNode.getPath()));
|
}
|
});
|
// p.add(typeLbl);
|
// p.add(typeText);
|
// p.add(contextLbl);
|
// p.add(contextText);
|
// p.add(sBtn);
|
p.add(addButton);
|
// p.add(reAddButton);
|
p.add(delButton);
|
// p.add(removeButton);
|
// p.add(clearButton);
|
}
|
|
// private void remove_actionPerform(){
|
// if (!checkItem()) {
|
// return;
|
// }
|
// final QANProcessBarFrame frame = new QANProcessBarFrame();
|
// TreePath[] treePath = treeManager.getSelectionModel().getSelectionPaths();
|
// if (treePath == null || treePath.length == 0) {
|
// VCIOptionPane.showMessage(LogonApplication.frame, "请选择要删除的权限");
|
// return ;
|
// }
|
// QANProcessBar bar = null;
|
// Thread t = new Thread(){
|
// public void run() {
|
// frame.setContent("正在授权,请稍等......");
|
// try {
|
// rightMap.clear();
|
// boolean refresh = true;
|
// TreePath[] treePath = treeManager.getSelectionModel().getSelectionPaths();
|
// //当没有选中模块的时候
|
// if (treePath == null && treePath.length == 0){
|
// refresh = false;
|
// }else{
|
// RoleRightObject[] roleRightObjs = getRemoveedSelectedRoleRightObjs(treePath);
|
// boolean res = new RoleRightClientDelegate(LogonApplication.getUserEntityObject()).removeRoleRight(roleRightObjs,curRole.getId(),currentUserName);
|
// frame.setProcessBarCancel(true);
|
// if(res){
|
// VCIOptionPane.showMessage(LogonApplication.frame, "移除UI操作权限成功!");
|
// }
|
// }
|
// if(refresh){
|
// treeManager.getSelectionModel().clearSelection();
|
// initRoleRight(curRole.getId());
|
// }
|
// } catch (VCIException e1) {
|
// e1.printStackTrace();
|
// VCIOptionPane.showError(LogonApplication.frame, "RMIPFramework", e1);
|
// } finally {
|
// frame.setProcessBarCancel(true);
|
// }
|
// }
|
// };
|
// bar = new QANProcessBar(t, frame, frame,"UI操作授权",false);
|
// bar.setVisible(true);
|
// }
|
//
|
// private void clear_actionPerform(){
|
// if (!checkItem()) {
|
// return;
|
// }
|
// final QANProcessBarFrame frame = new QANProcessBarFrame();
|
// TreePath[] treePath = treeManager.getSelectionModel().getSelectionPaths();
|
// if (treePath == null || treePath.length == 0) {
|
// int result = VCIOptionPane.showConfirmDialog(LogonApplication.frame, this, "您确定要清除所有的UI操作权限吗?", "注意,您确定要清除所有的UI权限吗?", VCIOptionPane.YES_NO_OPTION, VCIOptionPane.WARNING_MESSAGE);
|
// if(result != VCIOptionPane.YES_OPTION){
|
// return;
|
// }
|
// }
|
// QANProcessBar bar = null;
|
// Thread t = new Thread(){
|
// public void run() {
|
// frame.setContent("正在清除授权,请稍等......");
|
// try {
|
// rightMap.clear();
|
// boolean refresh = true;
|
// TreePath[] treePath = treeManager.getSelectionModel().getSelectionPaths();
|
// //当没有选中模块的时候
|
// RoleRightObject[] roleRightObjs = new RoleRightObject[0];
|
// boolean res = new RoleRightClientDelegate(LogonApplication.getUserEntityObject()).clearRight(curRole.getId(),currentUserName, RightType.UI);
|
// frame.setProcessBarCancel(true);
|
// if(res){
|
// VCIOptionPane.showMessage(LogonApplication.frame, "UI操作权限清空成功!");
|
// }
|
//
|
// if(refresh){
|
// treeManager.getSelectionModel().clearSelection();
|
// initRoleRight(curRole.getId());
|
// }
|
// } catch (VCIException e1) {
|
// e1.printStackTrace();
|
// VCIOptionPane.showError(LogonApplication.frame, "RMIPFramework", e1);
|
// } finally {
|
// frame.setProcessBarCancel(true);
|
// }
|
// }
|
// };
|
// bar = new QANProcessBar(t, frame, frame,"UI操作授权",false);
|
// bar.setVisible(true);
|
// }
|
|
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[] btmItems = BtmProvider.getInstance().getAllBtmItems();
|
funMap.clear();
|
|
comboType.addItem(new BizTypeEx(null));
|
|
for(int k = 0;k < btmItems.length;k++) {
|
comboType.addItem(new BizTypeEx(btmItems[k]));
|
}
|
|
for (int i = 0; i < btmItems.length; i++) {
|
VCIBaseTreeNode node = new VCIBaseTreeNode(btmItems[i].label+" ["+ btmItems[i].name+"]", btmItems[i]);
|
treeModel.insertNodeInto(node, rootNode,rootNode.getChildCount());
|
funMap.put(btmItems[i].name, btmItems[i].name);
|
setChildNode(node, btmItems[i]);
|
}
|
|
treeManager = new CheckBoxTreeManager(tree);
|
scrollTree.getViewport().removeAll();
|
scrollTree.getViewport().add(tree);
|
scrollTree.repaint();
|
// tree.addTreeExpansionListener(new TreeExpansionListener() {
|
//
|
// @Override
|
// public void treeExpanded(TreeExpansionEvent event) {
|
// TreePath path = event.getPath();
|
// VCIBaseTreeNode selNode = (VCIBaseTreeNode)path.getLastPathComponent();
|
// if(!selNode.isLeaf() && selNode.getChildCount() == 0 && !selNode.isExpand()){
|
// setChildNode(selNode, selNode.getObj());
|
// }
|
// }
|
//
|
// @Override
|
// public void treeCollapsed(TreeExpansionEvent event) {
|
//
|
// }
|
// });
|
}
|
|
private void refreshRole() {
|
initRoleList("");
|
treeManager.getSelectionModel().clearSelection();
|
}
|
|
/**查询满足条件的角色信息**/
|
private void searchRoleList() {
|
String search = this.searchTxt.getText().trim();
|
initRoleList(search);
|
treeManager.getSelectionModel().clearSelection();
|
}
|
|
private JPanel getSearchPanel() {
|
JPanel searchPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
|
searchPanel.add(searchLbl);
|
searchPanel.add(searchTxt);
|
searchPanel.add(searchBtn);
|
|
return searchPanel;
|
|
}
|
|
private void add_actionPerform(){
|
if (!checkItem()) {
|
return;
|
}
|
final QANProcessBarFrame frame = new QANProcessBarFrame();
|
TreePath[] treePath = treeManager.getSelectionModel().getSelectionPaths();
|
if (treePath == null || treePath.length == 0) {
|
VCIOptionPane.showMessage(LogonApplication.frame, "您没有选择当前页面上的任何权限,如果需要去除当前页面下的所有权限请选择权限后点击【清除本界面中权限】");
|
return ;
|
}
|
QANProcessBar bar = null;
|
Thread t = new Thread(){
|
public void run() {
|
frame.setContent("正在授权,请稍等......");
|
try {
|
rightMap.clear();
|
boolean refresh = true;
|
TreePath[] treePath = treeManager.getSelectionModel().getSelectionPaths();
|
//当没有选中模块的时候
|
if (treePath == null && treePath.length == 0){
|
refresh = false;
|
}else{
|
RoleRightObject[] roleRightObjs = getSelectedRoleRightObjs(treePath);
|
boolean res = new RoleRightClientDelegate(LogonApplication.getUserEntityObject()).saveRoleRight(roleRightObjs,curRole.getId(),currentUserName);
|
frame.setProcessBarCancel(true);
|
if(res){
|
VCIOptionPane.showMessage(LogonApplication.frame, "UI授权成功!");
|
}
|
}
|
if(refresh){
|
treeManager.getSelectionModel().clearSelection();
|
initRoleRight(curRole.getId());
|
}
|
} catch (VCIException e1) {
|
e1.printStackTrace();
|
VCIOptionPane.showError(LogonApplication.frame, "RMIPFramework", e1);
|
} finally {
|
frame.setProcessBarCancel(true);
|
}
|
}
|
};
|
bar = new QANProcessBar(t, frame, frame,"功能模块授权",false);
|
bar.setVisible(true);
|
}
|
|
|
/*
|
* 该方法作为补充添加授权功能应用
|
*/
|
// private void reAdd_actionPerform(){
|
// if (!checkItem()) {
|
// return;
|
// }
|
// TreePath[] treePath = treeManager.getSelectionModel().getSelectionPaths();
|
// if (treePath == null || treePath.length == 0) {
|
// VCIOptionPane.showMessage(LogonApplication.frame, "您没有在当前页面选择任何的权限,所以将不执行追加权限");
|
// return ;
|
// }
|
// final QANProcessBarFrame frame = new QANProcessBarFrame();
|
// Thread t = new Thread(){
|
// public void run() {
|
// frame.setContent("正在授权,请稍等......");
|
// try {
|
// rightMap.clear();
|
// boolean refresh = true;
|
// TreePath[] treePath = treeManager.getSelectionModel().getSelectionPaths();
|
// //当没有选中模块的时候
|
// if (treePath == null) {
|
// refresh = false;
|
// }
|
// RoleRightObject[] roleRightObjs = getSelectedRoleRightObjs(treePath);
|
// boolean res = new RoleRightClientDelegate(LogonApplication.getUserEntityObject()).addRoleRight(roleRightObjs,curRole.getId(),currentUserName);
|
// frame.setProcessBarCancel(true);
|
// if(res){
|
// VCIOptionPane.showMessage(LogonApplication.frame, "功能模块授权成功!");
|
// }
|
// if(refresh){
|
// treeManager.getSelectionModel().clearSelection();
|
// initRoleRight(curRole.getId());
|
// }
|
// } catch (VCIException e1) {
|
// e1.printStackTrace();
|
// VCIOptionPane.showError(LogonApplication.frame, "RMIPFramework", e1);
|
// } finally {
|
// if (frame.isActive()) {
|
// frame.setProcessBarCancel(true);
|
// }
|
// }
|
// }
|
// };
|
// QANProcessBar bar = new QANProcessBar(t, frame, frame,"功能模块授权",false);
|
// bar.setVisible(true);
|
// }
|
|
private RoleRightObject[] getSelectedRoleRightObjs(TreePath[] treePath){
|
rightMap.clear();
|
RoleRightObject[] roleRightObjs = new RoleRightObject[0];
|
if(treePath == null){
|
//1。先从所有权限对象中删除模块权限对象
|
Set<Entry<String, String>> funSet = funMap.entrySet();
|
Iterator<Entry<String, String>> funIt = funSet.iterator();
|
while(funIt.hasNext()){
|
Entry<String, String> next = funIt.next();
|
String key = next.getKey();
|
//String value = next.getValue();
|
allRightRoleMap.remove(key);
|
}
|
//2。再保存选中的模块对象到所有权限中
|
Set<Entry<String, RoleRightObject>> entrySet = rightMap.entrySet();
|
Iterator<Entry<String, RoleRightObject>> iterator = entrySet.iterator();
|
while(iterator.hasNext()){
|
Entry<String, RoleRightObject> next = iterator.next();
|
String key = next.getKey();
|
RoleRightObject value = next.getValue();
|
allRightRoleMap.put(value.getFuncId(), value);
|
}
|
cloneMap(allRightRoleMap, rightMap);
|
//rightMap = allRightRoleMap;
|
/**上面处理完成后,循环遍历取出MAP里的对象进行保存**/
|
roleRightObjs = new RoleRightObject[rightMap.size()];
|
Set<String> objSet = rightMap.keySet();
|
Iterator<String> 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(RightType.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<Entry<String, String>> funSet = funMap.entrySet();
|
Iterator<Entry<String, String>> funIt = funSet.iterator();
|
while(funIt.hasNext()){
|
Entry<String, String> next = funIt.next();
|
String key = next.getKey();
|
//String value = next.getValue();
|
allRightRoleMap.remove(key);
|
}
|
//2。再保存选中的模块对象到所有权限中
|
Set<Entry<String, RoleRightObject>> entrySet = rightMap.entrySet();
|
Iterator<Entry<String, RoleRightObject>> iterator = entrySet.iterator();
|
while(iterator.hasNext()){
|
Entry<String, RoleRightObject> next = iterator.next();
|
String key = next.getKey();
|
RoleRightObject value = next.getValue();
|
if(!allRightRoleMap.containsKey(value.getFuncId().trim())){
|
allRightRoleMap.put(value.getFuncId(), value);
|
}
|
}
|
cloneMap(allRightRoleMap, rightMap);
|
//rightMap = allRightRoleMap;
|
/**上面处理完成后,循环遍历取出MAP里的对象进行保存**/
|
roleRightObjs = new RoleRightObject[rightMap.size()];
|
Set<String> objSet = rightMap.keySet();
|
Iterator<String> it = objSet.iterator();
|
int i = 0;
|
while(it.hasNext()){
|
roleRightObjs[i++] = rightMap.get(it.next());
|
}
|
}
|
return roleRightObjs;
|
}
|
|
private RoleRightObject[] getRemoveedSelectedRoleRightObjs(TreePath[] treePath){
|
rightMap.clear();
|
RoleRightObject[] roleRightObjs = new RoleRightObject[0];
|
if(treePath != null){
|
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(RightType.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);
|
}
|
}
|
}
|
//cloneMap(allRightRoleMap, rightMap);
|
//rightMap = allRightRoleMap;
|
/**上面处理完成后,循环遍历取出MAP里的对象进行保存**/
|
roleRightObjs = new RoleRightObject[rightMap.size()];
|
Set<String> objSet = rightMap.keySet();
|
Iterator<String> it = objSet.iterator();
|
int i = 0;
|
while(it.hasNext()){
|
roleRightObjs[i++] = rightMap.get(it.next());
|
}
|
}
|
return roleRightObjs;
|
}
|
|
|
private void cloneMap(Map source, Map target){
|
target.clear();
|
for( Object key: source.keySet()){
|
target.put(key, source.get(key));
|
}
|
}
|
|
/**
|
* 获取权限
|
* @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(RightType.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.isLeaf() && node.getChildCount() == 0){
|
setChildNode(node, node.getObj());
|
}
|
if(!(node.getObj() instanceof PLPageDefination)){//子节点不是操作
|
if(!rightMap.containsKey(funcId)&&!funcId.equals("root")){
|
RoleRightObject roleRightObj = new RoleRightObject();
|
roleRightObj.setFuncId(funcId);
|
roleRightObj.setRightType(RightType.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(RightType.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 void setChildNode(VCIBaseTreeNode node ,Object funcObj) {
|
if (funcObj instanceof BtmItem) {
|
BtmItem btmItem = (BtmItem) funcObj;
|
List<PLUILayout> contexts = uiDataFechter.getContext(btmItem.name);
|
if (contexts == null) {
|
return;
|
}
|
for(PLUILayout context : contexts){
|
VCIBaseTreeNode curNode = new VCIBaseTreeNode(context.plName+"("+context.plCode+")", context);
|
treeModel.insertNodeInto(curNode, node,node.getChildCount());
|
funMap.put(context.plOId, context.plCode);
|
setChildNode(curNode, context);
|
}
|
} else if (funcObj instanceof PLUILayout) {
|
PLUILayout context = (PLUILayout) funcObj;
|
List<PLTabPage> tabs = uiDataFechter.getTabs(context.plOId);
|
if (tabs == null) {
|
return;
|
}
|
for(PLTabPage tab : tabs){
|
VCIBaseTreeNode curNode = new VCIBaseTreeNode(tab.plName, tab);
|
treeModel.insertNodeInto(curNode, node,node.getChildCount());
|
funMap.put(tab.plOId, tab.plName);
|
setChildNode(curNode, tab);
|
}
|
} else if (funcObj instanceof PLTabPage) {
|
PLTabPage tab = (PLTabPage) funcObj;
|
List<PLPageDefination> pageDefinations = uiDataFechter.getComopnent(tab.plOId);
|
if (pageDefinations == null) {
|
return;
|
}
|
for (PLPageDefination pageDefination : pageDefinations) {
|
VCIBaseTreeNode curNode = new VCIBaseTreeNode(pageDefination.name, pageDefination);
|
treeModel.insertNodeInto(curNode, node,node.getChildCount());
|
funMap.put(pageDefination.plOId, pageDefination.name);
|
setChildNode(curNode, pageDefination);
|
}
|
} else if (funcObj instanceof PLPageDefination) {
|
PLPageDefination pageDef = (PLPageDefination) funcObj;
|
List<PLTabButton> buttons = uiDataFechter.getButtons(pageDef.plOId);
|
if (buttons == null) {
|
return;
|
}
|
for(PLTabButton button : buttons){
|
if(!button.show.equals("0")){
|
continue;
|
}
|
VCIBaseTreeNode curNode = new VCIBaseTreeNode(button.plLabel, button);
|
treeModel.insertNodeInto(curNode, node,node.getChildCount());
|
funMap.put(button.plTableOId, button.plLabel);
|
setChildNode(curNode, button);
|
curNode.setLeaf(true);
|
}
|
}
|
else if (funcObj instanceof PLTabButton) {
|
node.setLeaf(true);
|
}
|
}
|
|
/**
|
* 校验
|
*
|
* @return
|
*/
|
public boolean checkItem() {
|
//modify by weidy@2019-02-17
|
//修改模块的名称
|
UserEntityObject ueo = LogonApplication.getUserEntityObject();
|
if(getFuncObj() != null && StringUtils.isNotBlank(getFuncObj().getName())) {
|
ueo.setModules(getFuncObj().getName());
|
}else {
|
ueo.setModules("授权");
|
}
|
LogonApplication.userEntityObject = ueo;
|
//end weidy
|
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();
|
}
|
|
@Override
|
public String getIconName() {
|
// TODO Auto-generated method stub
|
return null;
|
}
|
|
@Override
|
public String getModuleShowInfo() {
|
// TODO Auto-generated method stub
|
return null;
|
}
|
|
|
private LinkedHashMap<RoleObject, RoleRightObject[]> roleRightObjsMap = new LinkedHashMap<RoleObject, RoleRightObject[]>();
|
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<RoleObject> 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;
|
}
|
|
}
|