package com.vci.client.auth2.view; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.Rectangle; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JSplitPane; import javax.swing.JTabbedPane; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.ScrollPaneConstants; import javax.swing.border.TitledBorder; import javax.swing.table.JTableHeader; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.TreePath; import javax.swing.tree.TreeSelectionModel; import org.jdesktop.swingx.JXTable; import org.jdesktop.swingx.decorator.HighlighterFactory; import com.vci.client.auth2.action.ToLeftSubjectAction; import com.vci.client.auth2.action.ToRightSubjectAction; import com.vci.client.auth2.model.BooleanTableModel; import com.vci.client.auth2.utils.IRightConstant; import com.vci.client.auth2.utils.RightManagerHelper; import com.vci.client.auth2.vo.EnumItem; import com.vci.client.auth2.vo.OpItem; import com.vci.client.omd.btm.wrapper.BtmItemWrapper; import com.vci.client.oq.ui.ConditionPanel; import com.vci.client.ui.swing.VCISwingUtil; import com.vci.corba.framework.data.GrandValue; import com.vci.corba.omd.btm.BtmItem; public class RightMainPanel extends JPanel { /** * */ private static final long serialVersionUID = 6600527909636238174L; // 规则列表 private JTable ruleTable = new JXTable(); // 主体工具条 private JPanel subjectPanelToolBar = new JPanel(); // 用户列表 private JXTable userTable = new JXTable(); // 用户组列表 private JXTable userGroupTable = new JXTable(); // 角色列表 private JXTable roleTable = new JXTable(); // 授权主体列表 private JList choosedSubjectList = new JList(); // 规则名称文本框 private JTextField ruleNameTextField = new JTextField(45); private JComboBox ruleTypeCombbox = new JComboBox(); // 客体规则面板 private JPanel objectPanelConditionPanel = new JPanel(); private Map conditionPanelMap = new HashMap(); // 一般操作面板 private JPanel ordinaryOpPanel = new OrdinaryOpPanel(); // 一般操作面板 private JPanel linkAndStateOpPanel = new RelationAndLifeCycleOpPanel(); // 操作面板工具条 private JPanel operationPanelToolBar = new JPanel(); private JPanel rightCenterToolBar = new JPanel(); // 选中向左移动按钮 ToLeftSubjectAction left = new ToLeftSubjectAction("<"); // 选中向右移动按钮 ToRightSubjectAction right = new ToRightSubjectAction(">"); // 客体主面板 private JPanel objectMain = new JPanel(); private final int TABLE_HEADER_HEIGHT = 25; private final int ROW_HEIGHT = 30; private AbstractUIFunclet funclet; // action private JButton[] operationActions; private JButton[] subjectActions; public ToLeftSubjectAction getLeft() { return left; } public ToRightSubjectAction getRight() { return right; } public JButton[] getOperationActions() { return operationActions; } public void setOperationActions(JButton[] operationActions) { this.operationActions = operationActions; updateOperationMenu(); } public void updateOperationMenu() { for (JButton b : operationActions) { operationPanelToolBar.add(b); } } public JPanel getRightCenterToolBar() { return rightCenterToolBar; } public void setRightCenterToolBar(JPanel rightCenterToolBar) { this.rightCenterToolBar = rightCenterToolBar; } public JPanel getObjectMain() { return objectMain; } public void setObjectMain(JPanel objectMain) { this.objectMain = objectMain; } public AbstractUIFunclet getFunclet() { return funclet; } public void setFunclet(AbstractUIFunclet funclet) { this.funclet = funclet; } public JPanel getOrdinaryOpPanel() { return ordinaryOpPanel; } public void setOrdinaryOpPanel(JPanel ordinaryOpPanel) { this.ordinaryOpPanel = ordinaryOpPanel; } public JComboBox getRuleTypeCombbox() { return ruleTypeCombbox; } public JTextField getRuleNameTextField() { return ruleNameTextField; } public String getRuleName() { return ruleNameTextField.getText(); } public JXTable getUserTable() { return userTable; } public void setUserTable(JXTable userTable) { this.userTable = userTable; } public JTable getRuleTable() { return ruleTable; } public void setRuleTable(JXTable ruleTable) { this.ruleTable = ruleTable; } public JPanel getRightRulePanel() { return objectPanelConditionPanel; } public void setRightRulePanel(JPanel objectPanelConditionPanel) { this.objectPanelConditionPanel = objectPanelConditionPanel; } public JPanel getRelationAndLifeCycleOpPanel() { return linkAndStateOpPanel; } public void setRelationAndLifeCycleOpPanel(JPanel linkAndStateOpPanel) { this.linkAndStateOpPanel = linkAndStateOpPanel; } public JXTable getUserGroupTable() { return userGroupTable; } public void setUserGroupTable(JXTable userGroupTable) { this.userGroupTable = userGroupTable; } public JXTable getRoleTable() { return roleTable; } public void setRoleTable(JXTable roleTable) { this.roleTable = roleTable; } public JList getSelectedSubjectComponent() { if (choosedSubjectList != null) { choosedSubjectList.setOpaque(false); } return choosedSubjectList; } public void setRuleType(String ruleType) { getRuleTypeCombbox().setSelectedIndex(Integer.valueOf(ruleType)); } public String getRuleType() { EnumItem item = (EnumItem) getRuleTypeCombbox().getSelectedItem(); return (String) item.getKey(); } public void setModel() { } public RightMainPanel(AbstractUIFunclet funclet) { super(); this.funclet = funclet; initUI(); } public RightMainPanel() { super(); initUI(); } public void addRuleTableSelectListener() { // 设置规则Table选择事件监听器 JTable ruletable = this.getRuleTable(); ruletable.addMouseListener(new MouseListener() { @Override public void mouseReleased(MouseEvent e) { } @Override public void mousePressed(MouseEvent e) { } @Override public void mouseExited(MouseEvent e) { } @Override public void mouseEntered(MouseEvent e) { } @Override public void mouseClicked(MouseEvent e) { JTable source = (JTable) e.getSource(); int row = source.getSelectedRow(); if (row == -1) return; BooleanTableModel ruleModel = (BooleanTableModel) source.getModel(); GrandValue value = ((List) ruleModel.getConditionValueAt(row)).get(0); BtmItem btm = RightManagerHelper.getResourceType(getFunclet()); if (btm == null || value == null) { return; } // 提示 // initTipPanel(null,funclet); // 设置条件表达式 RightManagerHelper.setRuleConditionDatas(getFunclet(), row, value, btm.name); // 设置主体的信息 RightManagerHelper.setSubjectDatas(getFunclet(), value); // 设置一般操作 List ops = new ArrayList(); for (int column = 2; column < ruleModel.getColumnCount(); column++) { OpItem op = new OpItem(); op.setName(ruleModel.getColumnName(column)); op.setValue(ruleModel.getValueAt(row, column)); ops.add(op); } RightManagerHelper.setOpDatas(getFunclet(), ops); } }); } public void setSubjectActions(JButton[] subjectActions) { this.subjectActions = subjectActions; updateSubjectMenu(); } public JButton[] getSubjectActions() { return subjectActions; } public void updateSubjectMenu() { for (JButton b : subjectActions) { subjectPanelToolBar.add(b); } } private void initUI() { this.setLayout(new BorderLayout()); JScrollPane rightNorthPanel = new JScrollPane(); JPanel rightCenterPanel = new JPanel(); rightCenterPanel.setLayout(new BorderLayout()); JPanel rightCenterDownPanel = new JPanel(); // JPanel rightSouthPanel = new JPanel(); rightCenterPanel.add(rightCenterToolBar, BorderLayout.NORTH); rightCenterPanel.add(rightCenterDownPanel, BorderLayout.CENTER); this.add(rightNorthPanel, BorderLayout.NORTH); this.add(rightCenterPanel, BorderLayout.CENTER); // this.add(rightSouthPanel, BorderLayout.SOUTH); ruleTable.setRowHeight(ROW_HEIGHT); ruleTable.setShowGrid(true); ruleTable.getAutoResizeMode(); ruleTable.setOpaque(false); // ruleTable.setHorizontalScrollEnabled(false); ruleTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); // ((JXTable)ruleTable).setHighlighters(HighlighterFactory.createAlternateStriping()); ((JXTable) ruleTable).setSortable(true); ((JXTable) ruleTable).setDragEnabled(true); // ((JXTable)ruleTable).setForeground(Color.gray); // updateHorizontalAction(ruleTable); // JTableHeader tableHeader = ruleTable.getTableHeader(); // Dimension size = tableHeader.getPreferredSize(); // size.height = TABLE_HEADER_HEIGHT; // size.width = TABLE_HEADER_HEIGHT; // tableHeader.setPreferredSize(size); rightNorthPanel.setViewportView(ruleTable); this.add(getSplitPane(JSplitPane.VERTICAL_SPLIT, rightNorthPanel, rightCenterPanel)); // center down tab JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.LEFT, JTabbedPane.SCROLL_TAB_LAYOUT); tabbedPane.addTab("主体", VCISwingUtil.createImageIcon("product.gif"), getSubjectPanel(), "主体配置"); tabbedPane.addTab("客体", VCISwingUtil.createImageIcon("product.gif"), getExpressionPanel(), "表达式配置"); tabbedPane.addTab("操作", VCISwingUtil.createImageIcon("product.gif"), getOperationPanel(), "操作配置"); /* * tabbedPane.addTab("ip密级设置", VCISwingUtil.createImageIcon("product.gif"), * getIPSecurityPanel(), "ip密级设置"); */ rightCenterDownPanel.setLayout(new GridBagLayout()); GridBagConstraints gbc = new GridBagConstraints(); gbc.gridx = 0; gbc.gridy = 0; gbc.weightx = 1.0; gbc.weighty = 1.0; gbc.fill = GridBagConstraints.BOTH; rightCenterDownPanel.add(tabbedPane, gbc); // center top tool bar rightCenterToolBar.setLayout(new FlowLayout(FlowLayout.RIGHT, 0, 0)); // 增加规则table监听器 this.addRuleTableSelectListener(); } // private void updateHorizontalAction(JXTable table) // { // Action showHorizontal = table.getActionMap().get("column.horizontalScroll"); // // if (showHorizontal instanceof BoundAction) // ((BoundAction)showHorizontal).setSelected(true); // } private JPanel getOperationPanel() { // 主操作面板- JPanel operationMain = new JPanel(); operationMain.setLayout(new BorderLayout()); // 操作面板 JScrollPane ordjsp = new JScrollPane(); ordjsp.getViewport().add(ordinaryOpPanel); JScrollPane Wraper = new JScrollPane(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED); Wraper.setVisible(true); Wraper.setViewportView(linkAndStateOpPanel); Wraper.revalidate(); // 一般操作 ordinaryOpPanel.setBorder(BorderFactory.createTitledBorder("一般操作")); ordinaryOpPanel.setLayout(new GridBagLayout()); operationPanelToolBar.setLayout(new FlowLayout(FlowLayout.RIGHT, 0, 0)); // 链接和状态 linkAndStateOpPanel.setBorder(BorderFactory.createTitledBorder("关系和跃迁")); linkAndStateOpPanel.setLayout(new GridBagLayout()); operationMain.add(operationPanelToolBar, BorderLayout.NORTH); JScrollPane centerjsp = new JScrollPane(); JSplitPane centerPanel = new JSplitPane(JSplitPane.VERTICAL_SPLIT, ordjsp, Wraper); centerPanel.setDividerLocation(200); // 是否可以展开 centerPanel.setOneTouchExpandable(true); centerjsp.getViewport().add(centerPanel); operationMain.add(centerjsp, BorderLayout.CENTER); return operationMain; } private JPanel getIPSecurityPanel() { JPanel ipPanel = new JPanel(); ipPanel.setLayout(new BorderLayout()); JPanel northPanel = new JPanel(); northPanel.setLayout(new GridBagLayout()); GridBagConstraints gbc = new GridBagConstraints(); gbc.gridy = 0; gbc.gridx = 0; JTextField comp = new JTextField(40); comp.setText("secret<=${CURRENTMACHINE.SECRET}"); comp.setEditable(false); northPanel.add(comp, gbc); ipPanel.add(northPanel, BorderLayout.NORTH); return ipPanel; } private JPanel getExpressionPanel() { objectMain.setLayout(new BorderLayout()); JPanel topMainPanel = new JPanel(); topMainPanel.setLayout(new GridBagLayout()); // centerPanel.updateUI(); objectMain.add(topMainPanel, BorderLayout.NORTH); JLabel ruleName = new JLabel("规则名称: "); GridBagConstraints g_mpnl = new GridBagConstraints(); g_mpnl.insets = new Insets(5, 5, 5, 5); g_mpnl.anchor = GridBagConstraints.EAST; g_mpnl.gridx = 0; g_mpnl.gridy = 0; topMainPanel.add(ruleName, g_mpnl); g_mpnl.gridx = 1; topMainPanel.add(ruleNameTextField, g_mpnl); JLabel ruleTypeLable = new JLabel("规则类型"); g_mpnl.gridx = 3; EnumItem allNotHas = new EnumItem(IRightConstant.RULETYPE_ALL_NOTHAS, "全部拒绝"); EnumItem notHas = new EnumItem(IRightConstant.RULETYPE__NOTHAS, "拒绝权限"); EnumItem allHas = new EnumItem(IRightConstant.RULETYPE_ALL_HAS, "全部允许"); EnumItem has = new EnumItem(IRightConstant.RULETYPE__HAS, "允许权限"); ruleTypeCombbox.setPreferredSize(new Dimension(150, 25)); ruleTypeCombbox.addItem(allHas); ruleTypeCombbox.addItem(has); ruleTypeCombbox.addItem(allNotHas); ruleTypeCombbox.addItem(notHas); ruleTypeCombbox.setSelectedIndex(0); ruleTypeCombbox.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { JComboBox combbox = (JComboBox) e.getSource(); EnumItem item = (EnumItem) combbox.getSelectedItem(); String ruleType = (String) item.getKey(); if (ruleType.equals(IRightConstant.RULETYPE__NOTHAS) || ruleType.equals(IRightConstant.RULETYPE__HAS)) { TreeSelectionModel model = (TreeSelectionModel) funclet.getResourceTree().getSelectionModel(); TreePath path = model.getSelectionPath(); if (null == path) { JOptionPane.showMessageDialog(com.vci.client.LogonApplication.frame, "请选择业务类型", "提示", JOptionPane.WARNING_MESSAGE); return; } DefaultMutableTreeNode node = (DefaultMutableTreeNode) path.getLastPathComponent(); if (node.isRoot()) { JOptionPane.showMessageDialog(com.vci.client.LogonApplication.frame, "您当前选择的是根类型,请选择具体的业务类型", "提示", JOptionPane.WARNING_MESSAGE); return; } if (!(node.getUserObject() instanceof BtmItemWrapper)) { return; } BtmItemWrapper btmWrap = (BtmItemWrapper) node.getUserObject(); if (null == btmWrap || btmWrap.btmItem == null) { return; } objectMain.remove(objectPanelConditionPanel); // objectMain.updateUI(); if (conditionPanelMap.get(ruleType) == null) { conditionPanelMap.put(ruleType, new ConditionPanel(btmWrap.btmItem, true)); } objectPanelConditionPanel = conditionPanelMap.get(ruleType); ((ConditionPanel) objectPanelConditionPanel).updateUI(btmWrap.btmItem); objectMain.add(objectPanelConditionPanel, BorderLayout.CENTER); objectPanelConditionPanel.updateUI(); ruleNameTextField.setText(((ConditionPanel) objectPanelConditionPanel).getSelectedQTDName()); } else { objectMain.remove(objectPanelConditionPanel); // objectMain.updateUI(); if (conditionPanelMap.get(ruleType) == null) { conditionPanelMap.put(ruleType, new JPanel()); } objectPanelConditionPanel = conditionPanelMap.get(ruleType); objectPanelConditionPanel = new JPanel(); objectMain.add(objectPanelConditionPanel, BorderLayout.CENTER); objectPanelConditionPanel.updateUI(); ruleNameTextField.setText(""); } } }); g_mpnl.gridx = 2; topMainPanel.add(ruleTypeLable, g_mpnl); g_mpnl.gridx = 3; topMainPanel.add(ruleTypeCombbox, g_mpnl); return objectMain; } private JPanel getSubjectPanel() { JPanel subjectMain = new JPanel(); subjectMain.setLayout(new BorderLayout()); subjectPanelToolBar.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0)); // 主体面板 JPanel subject = new JPanel(); subjectMain.add(subjectPanelToolBar, BorderLayout.NORTH); subjectMain.add(subject, BorderLayout.CENTER); subject.setBorder(BorderFactory.createTitledBorder("主体")); subject.setAutoscrolls(true); subject.setLayout(new BorderLayout()); JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP, JTabbedPane.SCROLL_TAB_LAYOUT); tabbedPane.addTab("用户", VCISwingUtil.createImageIcon("product.gif"), getUserPanel(), "用户配置"); tabbedPane.addTab("角色", VCISwingUtil.createImageIcon("product.gif"), getRolePanel(), "角色配置"); tabbedPane.addTab("部门", VCISwingUtil.createImageIcon("product.gif"), getUserGroupPanel(), "用户组配置"); Dimension dimension = new Dimension(Toolkit.getDefaultToolkit().getScreenSize().width * 4 / 5 * 2 / 5, Toolkit.getDefaultToolkit().getScreenSize().height * 6 / 25); tabbedPane.setPreferredSize(dimension); subject.setAutoscrolls(true); subject.add(tabbedPane, BorderLayout.WEST); // subject.add(tabbedPane, g_mpnl); // buttons JPanel buttons = new JPanel(); // ToLeftSubjectAction left = new ToLeftSubjectAction("<"); left.setMainUI(this); // ToLeftAllSubjectAction leftAll = new ToLeftAllSubjectAction("<<"); // leftAll.setFunclet(this); // ToRightSubjectAction right = new ToRightSubjectAction(">"); right.setMainUI(this); // JButton rightAll = new JButton(">>"); buttons.setLayout(new GridBagLayout()); // // 网格布局常量 GridBagConstraints g_mpnl = new GridBagConstraints(); g_mpnl.insets = new Insets(10, 10, 10, 10); g_mpnl.anchor = GridBagConstraints.EAST; g_mpnl.gridx = 0; g_mpnl.gridy = 0; g_mpnl.gridheight = 1; g_mpnl.gridwidth = 1; buttons.add(right, g_mpnl); g_mpnl.gridy = 1; // buttons.add(leftAll); buttons.add(left, g_mpnl); // buttons.add(rightAll); // g_mpnl.gridx = 1; // subject.add(buttons); subject.add(buttons, BorderLayout.CENTER); // 授权主体列表 JScrollPane choosedSubject = new JScrollPane(); choosedSubject.setPreferredSize(dimension); choosedSubject.setBounds(new Rectangle(330, 50, 210, 300)); choosedSubject.setBorder(new TitledBorder("授权主体")); choosedSubject.getViewport().add(getSelectedSubjectComponent()); // g_mpnl.gridx = 2; subject.add(choosedSubject, BorderLayout.EAST); return subjectMain; } private JComponent getRolePanel() { JScrollPane rolepane = new JScrollPane(); roleTable.setRowHeight(ROW_HEIGHT); roleTable.setHorizontalScrollEnabled(true); roleTable.setHighlighters(HighlighterFactory.createAlternateStriping()); roleTable.setSortable(true); roleTable.setOpaque(false); roleTable.setEditable(false); JTableHeader tableHeader = roleTable.getTableHeader(); Dimension size = tableHeader.getPreferredSize(); size.height = TABLE_HEADER_HEIGHT; tableHeader.setPreferredSize(size); rolepane.setViewportView(roleTable); return rolepane; } private JComponent getUserPanel() { JScrollPane userpane = new JScrollPane(); userTable.setRowHeight(ROW_HEIGHT); userTable.setHorizontalScrollEnabled(true); userTable.setHighlighters(HighlighterFactory.createAlternateStriping()); userTable.setSortable(true); userTable.setOpaque(false); userTable.setEditable(false); JTableHeader tableHeader = userTable.getTableHeader(); Dimension size = tableHeader.getPreferredSize(); size.height = TABLE_HEADER_HEIGHT; tableHeader.setPreferredSize(size); userpane.setViewportView(userTable); return userpane; } private JComponent getUserGroupPanel() { JScrollPane userGpane = new JScrollPane(); userGroupTable.setRowHeight(ROW_HEIGHT); userGroupTable.setHorizontalScrollEnabled(true); userGroupTable.setHighlighters(HighlighterFactory.createAlternateStriping()); userGroupTable.setSortable(true); userGroupTable.setOpaque(false); userGroupTable.setEditable(false); JTableHeader tableHeader = userGroupTable.getTableHeader(); Dimension size = tableHeader.getPreferredSize(); size.height = TABLE_HEADER_HEIGHT; tableHeader.setPreferredSize(size); userGpane.setViewportView(userGroupTable); return userGpane; } private JSplitPane getSplitPane(int type, JComponent one, JComponent other) { // split (JSplitPane.HORIZONTAL_SPLIT) JSplitPane centerPanel = new JSplitPane(type, one, other); if (type == JSplitPane.HORIZONTAL_SPLIT) { centerPanel.setDividerLocation(Toolkit.getDefaultToolkit().getScreenSize().width / 5); } else { centerPanel.setDividerLocation(Toolkit.getDefaultToolkit().getScreenSize().height * 2 / 5); } return centerPanel; } }