田源
2024-03-07 4b4083fd73dc27ece42f4835483565eef0e4f608
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
package com.vci.client.auth2.action;
 
import java.util.Vector;
 
import javax.swing.DefaultListModel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.ListModel;
import javax.swing.ListSelectionModel;
import javax.swing.table.TableModel;
 
import org.jdesktop.swingx.JXTable;
 
import com.vci.client.auth2.utils.IRightConstant;
import com.vci.client.auth2.view.RightMainPanel;
import com.vci.client.auth2.vo.SelectedSubjectItem;
 
public class ToRightSubjectAction extends Action {
 
    /**
     * 
     */
    private static final long serialVersionUID = -5469627110527278843L;
    private RightMainPanel mainUI;
 
    public ToRightSubjectAction(String name) {
        super(name);
    }
 
    @SuppressWarnings("rawtypes")
    @Override
    public void execute() {
        JXTable usersTable = mainUI.getUserTable();
        JXTable roleTable = mainUI.getRoleTable();
        JXTable userGTable = mainUI.getUserGroupTable();
        JList selectedSubjects = mainUI.getSelectedSubjectComponent();
        Object[] users = getSelectedValues(usersTable, IRightConstant.User);
        Object[] roles = getSelectedValues(roleTable, IRightConstant.Role);
        Object[] userGroups = getSelectedValues(userGTable, IRightConstant.UserGroup);
        if ((null == users && roles == null && userGroups == null)
                || (users.length == 0 && roles.length == 0 && userGroups.length == 0)) {
            JOptionPane.showMessageDialog(
                    com.vci.client.LogonApplication.frame,
                    "请选择用户、用户组、角色信息", "提示", JOptionPane.INFORMATION_MESSAGE);
            return;
        }
 
        ListModel selectListModel = (ListModel) selectedSubjects.getModel();
        if (selectListModel != null
                && !(selectListModel instanceof DefaultListModel)) {
            selectListModel = new DefaultListModel();
        }
        int originalSize  = selectListModel.getSize();
        ((DefaultListModel) selectListModel).setSize(users.length
                + roles.length + userGroups.length + originalSize);
        for (int i = originalSize; i < originalSize+users.length; i++) {
            SelectedSubjectItem item = new SelectedSubjectItem();
            item.setCode((String) ((Vector) users[i -originalSize]).get(0));
            item.setName((String) ((Vector) users[i -originalSize]).get(1));
            item.setType((String) ((Vector) users[i -originalSize]).get(2));
            boolean flag = judgeExistSelectedItem(item, selectListModel, originalSize);
            if(flag){
                JOptionPane.showMessageDialog(
                        com.vci.client.LogonApplication.frame,
                        "授权主体信息选择重复", "提示", JOptionPane.INFORMATION_MESSAGE);
                ((DefaultListModel) selectListModel).setSize(originalSize);
                return;
            }
            ((DefaultListModel) selectListModel).setElementAt(item, i);
 
        }
        for (int i = originalSize+users.length; 
                i < originalSize+users.length + roles.length; i++) {
            SelectedSubjectItem item = new SelectedSubjectItem();
            item.setCode((String) ((Vector) roles[i -originalSize - users.length]).get(0));
            item.setName((String) ((Vector) roles[i -originalSize - users.length]).get(1));
            item.setType((String) ((Vector) roles[i -originalSize - users.length]).get(2));
            boolean flag = judgeExistSelectedItem(item, selectListModel, originalSize);
            if(flag){
                JOptionPane.showMessageDialog(
                        com.vci.client.LogonApplication.frame,
                        "授权主体信息选择重复", "提示", JOptionPane.INFORMATION_MESSAGE);
                ((DefaultListModel) selectListModel).setSize(originalSize);
                return;
            }
            ((DefaultListModel) selectListModel).setElementAt(item, i);
        }
        for (int i = originalSize+users.length + roles.length;
                i < originalSize+users.length+ roles.length + userGroups.length; i++) {
            SelectedSubjectItem item = new SelectedSubjectItem();
            item.setCode((String) ((Vector) userGroups[i -originalSize - users.length-roles.length])
                    .get(0));
            item.setName((String) ((Vector) userGroups[i -originalSize - users.length-roles.length])
                    .get(1));
            item.setType((String) ((Vector) userGroups[i -originalSize - users.length-roles.length])
                    .get(2));
            boolean flag = judgeExistSelectedItem(item, selectListModel, originalSize);
            if(flag){
                JOptionPane.showMessageDialog(
                        com.vci.client.LogonApplication.frame,
                        "授权主体信息选择重复", "提示", JOptionPane.INFORMATION_MESSAGE);
                ((DefaultListModel) selectListModel).setSize(originalSize);
                return;
            }
            ((DefaultListModel) selectListModel).setElementAt(item, i);
        }
 
        selectedSubjects.setModel(selectListModel);
        int selected[] = new int[originalSize + users.length + roles.length+ userGroups.length];
        for (int i = 0; i < originalSize; i++) {
            selected[i] = i;
        }
        for (int i = originalSize; i < originalSize+users.length; i++) {
            selected[i] = i;
        }
        for (int i = originalSize+users.length; i < originalSize+ users.length + roles.length; i++) {
            selected[i] = i;
 
        }
        for (int i = originalSize+users.length + roles.length; 
                i < originalSize + users.length+ roles.length + userGroups.length; i++) {
            selected[i] = i;
        }
        selectedSubjects.setSelectedIndices(selected);
        selectedSubjects.updateUI();
        usersTable.getSelectionModel().clearSelection();
        roleTable.getSelectionModel().clearSelection();
        userGTable.getSelectionModel().clearSelection();
    }
 
    private boolean judgeExistSelectedItem(SelectedSubjectItem item, ListModel selectListModel, int orLength){
        boolean flag = false;
        for(int i =0;i<orLength;i++){
            SelectedSubjectItem checkedItem = (SelectedSubjectItem) selectListModel.getElementAt(i);
            String addCode = item.getCode();
            if(checkedItem!=null&&addCode.equals(checkedItem.getCode())){
                flag = true;
                break;
            }
        }
        return flag;
    }
    
    private Object[] getSelectedValues(JXTable usersTable, String type) {
 
        ListSelectionModel sm = usersTable.getSelectionModel();
        TableModel dm = usersTable.getModel();
 
        int iMin = sm.getMinSelectionIndex();
        int iMax = sm.getMaxSelectionIndex();
 
        if ((iMin < 0) || (iMax < 0)) {
            return new Object[0];
        }
 
        Object[] rvTmp = new Object[1 + (iMax - iMin)];
        int n = 0;
        for (int i = iMin; i <= iMax; i++) {
            if (sm.isSelectedIndex(i)) {
                Vector<Object> value = new Vector<Object>();
                value.add(dm.getValueAt(i, 0));
                value.add(dm.getValueAt(i, 1));
                value.add(type);
                rvTmp[n++] = value;
            }
        }
        Object[] rv = new Object[n];
        System.arraycopy(rvTmp, 0, rv, 0, n);
        return rv;
    }
 
    public RightMainPanel getMainUI() {
        return mainUI;
    }
 
    public void setMainUI(RightMainPanel mainUI) {
        this.mainUI = mainUI;
    }
}