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.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.Set;
import java.util.Map.Entry;
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.corba.omd.btm.BtmItem;
import com.vci.corba.portal.data.PLCommandParameter;
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.common.RightType;
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.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.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.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;
/**
*
UI 模块授权 升级版
* 与BSTypeRoleRightPanel的区别是:
* 点击角色时:只列出这个角色在功能模块授权下拥有的模块对应的上下文、业务类型关联出的UI定义中及按钮
* @author xchao
*
*/
public class BSTypeRoleRightPanelV2 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 = "";
private JButton addButton = new JButton();
private JButton delButton = new JButton();
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 static Map funMap = new LinkedHashMap();
private Map rightMap = new HashMap();
/**
* 刷新按钮
*/
private JPopupMenu popupMenu;
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();
public BSTypeRoleRightPanelV2(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);
}
public void roleList(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 allRightRoleMap = new HashMap();
public void initRoleRight(String roleId){
try {
loadModuleRight();
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) {
visitAllTreeNode(childNode,rightMap);
String id = ((PLTabButton) obj).plTableOId;
//if(rightMap.containsKey(id))
{
long rightValue = 0;
if (rightMap.containsKey(id))
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 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);
}
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();
for(int k = 0;k < btmItems.length;k++) {
funMap.put(btmItems[k].name, btmItems[k].name);
}
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());
setChildNode(node, btmItems[i]);
}
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(new FlowLayout(FlowLayout.LEFT));
searchPanel.add(searchLbl);
searchPanel.add(searchTxt);
searchPanel.add(searchBtn);
return searchPanel;
}
private void add_actionPerform(){
if (!checkItem()) {
return;
}
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()).saveRoleRight(roleRightObjs,curRole.getId(),currentUserName);
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);
}
}
private RoleRightObject[] getSelectedRoleRightObjs(TreePath[] treePath){
boolean isNew = false;
if(isNew){
return getSelectedRoleRightObjsV2(treePath);
}
rightMap.clear();
RoleRightObject[] roleRightObjs = new RoleRightObject[0];
if(treePath == null){
//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());
}
} 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> 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;
}
private RoleRightObject[] getSelectedRoleRightObjsV2(TreePath[] treePath){
if(treeManager.getSelectionModel().isPathSelected(new TreePath(rootNode.getPath()), true)){
System.out.println("1");
}else {
System.out.println("2");
}
rightMap.clear();
RoleRightObject[] roleRightObjs = new RoleRightObject[0];
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(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.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) {
try{
if (funcObj instanceof BtmItem) {
BtmItem btmItem = (BtmItem) funcObj;
PLUILayout[] contexts = UITools.getService().getPLUILayoutsByRelatedType(btmItem.name);
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);
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);
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);
for(int i = 0; i < buttons.length; i++){
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();
}
@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;
}
private Map btmItemsMap = new LinkedHashMap();
private BtmItem[] btmItems = BtmProvider.getInstance().getAllBtmItems();
private Map getBtmItemsMap(){
if(btmItemsMap.size() == 0){
synchronized (BSTypeRoleRightPanelV2.class) {
if(btmItemsMap.size() == 0){
for(BtmItem btmItem : btmItems){
btmItemsMap.put(btmItem.name, btmItem);
}
}
}
}
return btmItemsMap;
}
private void loadModuleRight(){
String roleId = curRole.getId();
try {
// 查询出有权限的功能模块权限
RoleRightObject[] roleRightObjs = new RoleRightClientDelegate().getRoleRightList(roleId, currentUserName);
FunctionClientDelegate funcDel = new FunctionClientDelegate();
btmItemsMap = this.getBtmItemsMap();
rootNode.removeAllChildren();
btnNameToTreeNodeMap.clear();
btmContextToMap.clear();
for(RoleRightObject rightObj : roleRightObjs){
FunctionObject funcObj = funcDel.getFunctionObjectById(rightObj.getFuncId());
if("".equals(funcObj.getId())) continue;
getParamMap(funcObj.getResourceC(), btmItemsMap);
}
tree.updateUI();
scrollTree.repaint();
} catch (VCIException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (VCIError e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private void getParamMap(String resourceCS, Map btmItemsMap) throws VCIError{
//plm.uif.engine.client.UILayoutPanel?type=product&context=productManagement
String compareString = ",type,context,";
String paramSplitChar = "?";
if(!resourceCS.contains(paramSplitChar)) return ;
int indexSplit = resourceCS.indexOf(paramSplitChar);
String paramStrings = resourceCS.substring(indexSplit + 1);
if("".equals(paramStrings)) return ;
String btmName = "";
String contextValue = "";
String[] paramGroups = paramStrings.split("&");
for(String paramGroup : paramGroups){
String[] keyVals = paramGroup.split("=");
if(keyVals.length != 2) continue;
String key = keyVals[0];
String value = keyVals[1];
if(!compareString.contains("," + key + ",")) continue;
if(key.equals("type")){
btmName = value;
} else if(key.equals("context")){
contextValue = value;
}
}
if(!btmItemsMap.containsKey(btmName)) return;
if("".equals(btmName) || "".equals(contextValue)) return;
setChildNodeV2(rootNode, btmName, contextValue);
}
private LinkedHashMap btnNameToTreeNodeMap = new LinkedHashMap();
private LinkedHashMap btmContextToMap = new LinkedHashMap();
private void setChildNodeV2(VCIBaseTreeNode parentNode, String btmName, String contextValue) throws VCIError{
String btmNameContext = btmName + "." + contextValue;
if(btmContextToMap.containsKey(btmNameContext)) return;
BtmItem btmItem = btmItemsMap.get(btmName);
VCIBaseTreeNode node = new VCIBaseTreeNode(btmItem.label+"("+ btmItem.name+")", btmItem);
// if(btnNameToTreeNodeMap.containsKey(btmName)){
// node = btnNameToTreeNodeMap.get(btmName);
// } else {
// treeModel.insertNodeInto(node, rootNode, rootNode.getChildCount());
// }
treeModel.insertNodeInto(node, parentNode, parentNode.getChildCount());
// if(btnNameToTreeNodeMap.containsKey(btmName)){
//// treeModel.insertNodeInto(node, parentNode, parentNode.getChildCount());
// node = parentNode;
// } else {
//// treeModel.insertNodeInto(node, parentNode, parentNode.getChildCount());
// treeModel.insertNodeInto(node, rootNode, rootNode.getChildCount());
// }
btnNameToTreeNodeMap.put(btmName, node);
btmContextToMap.put(btmNameContext, node);
PLUILayout[] contexts = UITools.getService().getPLUILayoutsByRelatedType(btmName);
for(int i = 0; i < contexts.length; i++){
if(!contextValue.equals(contexts[i].plCode)) continue;
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);
setChildNodeV2(curNode, contexts[i]);
}
}
private void setChildNodeV2(VCIBaseTreeNode node ,Object funcObj) {
try{
if (funcObj instanceof BtmItem) {
BtmItem btmItem = (BtmItem) funcObj;
PLUILayout[] contexts = UITools.getService().getPLUILayoutsByRelatedType(btmItem.name);
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);
setChildNodeV2(curNode, contexts[i]);
}
} else if (funcObj instanceof PLUILayout) {
PLUILayout context = (PLUILayout) funcObj;
PLTabPage[] tabs = UITools.getService().getPLTabPagesByPageDefinationOId(context.plOId);
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);
setChildNodeV2(curNode, tabs[i]);
}
} else if (funcObj instanceof PLTabPage) {
PLTabPage tab = (PLTabPage) funcObj;
PLPageDefination[] pageDefinations = UITools.getService().getPLPageDefinationsByPageContextOId(tab.plOId);
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);
setChildNodeV2(curNode, pageDefinations[i]);
}
} else if (funcObj instanceof PLPageDefination) {
PLPageDefination pageDef = (PLPageDefination) funcObj;
PLTabButton[] buttons = UITools.getService().getPLTabButtonsByTableOId(pageDef.plOId);
for(int i = 0; i < buttons.length; i++){
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);
String btnParamBtmType = "";
String btnParamContextValue = "";
PLCommandParameter[] btnParams = UITools.getService().getPLCommandParametersByCommandOId(buttons[i].plOId);
for(PLCommandParameter cp : btnParams){
String key = cp.plKey;
String value = cp.plValue;
if(key.equals("type")){
btnParamBtmType = value;
} else if(key.equals("context")){
btnParamContextValue = value;
}
}
if(!"".equals(btnParamBtmType) && !"".equals(btnParamContextValue)) {
curNode.setLeaf(false);
setChildNodeV2(curNode, btnParamBtmType, btnParamContextValue);
}
}
}
else if (funcObj instanceof PLTabButton) {
node.setLeaf(true);
}
} catch (VCIError e) {
//TODO 抛出异常
e.printStackTrace();
}
}
}