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
180
181
182
183
184
185
186
187
188
189
190
 
package com.vci.client.workflow.editor;
 
 
 
public class CandidateData {
    /**
     * 候选人数据定义组分隔符
     */
    public final static String CANDIDATE_GROUP_SPLIT_CHAR = ";";
    /**
     * 每组内,各个候选人数据之间的分隔符
     */
    public final static String CANDIDATE_DATA_SPLIT_CHAR = ",";
    
    /**
     * 是否定义了成员
     */
    private boolean userDefined = false;
    /**
     * 是否定义了角色
     */
    private boolean roleDefined = false;
    /**
     * 是否定义了部门
     */
    private boolean deptDefined = false;
    
    /**
     * 成员候选人定义数据
     */
    private String userDefinedString = "";
    /**
     * 角色候选人数据
     */
    private String roleDefinedString = "";
    /**
     * 部门候选人定义数据
     */
    private String deptDefinedString = "";
    
    /**
     * 成员候选人定义数组(已分解)
     */
    private String[] userDefinedStrings = new String[]{};
    /**
     * 角色候选人数据(已分解)
     */
    private String[] roleDefinedStrings = new String[]{};
    /**
     *  部门候选人定义数据(已分解)
     */
    private String[] deptDefinedStrings = new String[]{};
    
    /**
     * 候选人定义数据内容
     */
    private String candidateDefineString = "";
    
    /**
     * 构造CandidateData 对象
     * @param candidateDefinedString 流程任务节点上的候选人定义数据
     */
    public CandidateData(String candidateDefinedString){
        this.candidateDefineString = candidateDefinedString;
        
        calcCandidateData();
    }
    
    private void calcCandidateData(){
        String userName = this.candidateDefineString;
        // 兼容曾经约定不需要最后一个;的情况
        // 如果定义的数据中,;(分号)的个数不等于3,则补充;(分号)以达到新约定->只要定义了,就一定是3个;(分号)
        int max = 3;
        int count = 0;
        for(char c : userName.toCharArray()){
            if(String.valueOf(c).equals(";")){
                count += 1;
            }
        }
        for(int i = count; i < max; i++){
            userName += ";";
        }
        /**
         * 支持的有效数据格式列表:
         * ;;;
         * ;r1;;
         * ;r1;d1;
         * ;;d1;
         * u1;;;
         * u1;;d1;
         * u1;r1;;
         * u1;r1;d1;
         */
        userName = userName.replaceAll(",;", ";");    // u001,;roleId,;deptId,; -> u001;roleId;deptId;
        userName = userName.replaceAll(";,", ";");    // ,u001;,roleId;,deptId; -> ,u001;roleId;deptId;
        if(userName.startsWith(",")){
            userName = userName.substring(1);        // ,u001;roleId;deptId;      -> u001;roleId;deptId;
        }
        
        int firstSplitIndex = userName.indexOf(";");
        boolean userDefined = (firstSplitIndex != 1);
        int userDefinedBeginIndex = 0;
        int userDefinedEndIndex = userName.indexOf(";");
        
        String subString = userName.substring(firstSplitIndex + 1);
        int secondSplitIndex = subString.indexOf(";");
        boolean roleDefined = (secondSplitIndex != 1);
        int roleDefinedBeginIndex = (userDefinedEndIndex + 1);
        int roleDefinedEndIndex = (userDefinedEndIndex + secondSplitIndex + 1);
        
        subString = subString.substring(secondSplitIndex + 1);
        int thirdSplitindex = subString.indexOf(";");
        boolean deptDefined = (thirdSplitindex != 1);
        int deptDefinedBeginIndex = roleDefinedEndIndex + 1;
        int deptDefinedEndIndex = userName.lastIndexOf(";");
        
        String userDefinedString = userName.substring(userDefinedBeginIndex, userDefinedEndIndex);
        String roleDefinedString = userName.substring(roleDefinedBeginIndex, roleDefinedEndIndex);
        String deptDefinedString = userName.substring(deptDefinedBeginIndex, deptDefinedEndIndex);
        
        String[] userDefinedStrings = userDefinedString.length() == 0 ? new String[]{} : userDefinedString.split(",");
        String[] roleDefinedStrings = roleDefinedString.length() == 0 ? new String[]{} : roleDefinedString.split(",");
        String[] deptDefinedStrings = deptDefinedString.length() == 0 ? new String[]{} : deptDefinedString.split(",");
        
        
        this.userDefined = userDefined;
        this.roleDefined = roleDefined;
        this.deptDefined = deptDefined;
        
        this.userDefinedString = userDefinedString;
        this.roleDefinedString = roleDefinedString;
        this.deptDefinedString = deptDefinedString;
        
        this.userDefinedStrings = userDefinedStrings;
        this.roleDefinedStrings = roleDefinedStrings;
        this.deptDefinedStrings = deptDefinedStrings;
    }
    /**
     * 
     * <p>Description: </p>
     * 
     * @author xchao
     * @time 2012-11-13
     * @return
     */
    public String getCandidateDefineString() {
        return candidateDefineString;
    }
 
    public void setCandidateDefineString(String candidateDefineString) {
        this.candidateDefineString = candidateDefineString;
    }
 
    public boolean isUserDefined() {
        return userDefined;
    }
 
    public boolean isRoleDefined() {
        return roleDefined;
    }
 
    public boolean isDeptDefined() {
        return deptDefined;
    }
 
    public String getUserDefinedString() {
        return userDefinedString;
    }
 
    public String getRoleDefinedString() {
        return roleDefinedString;
    }
 
    public String getDeptDefinedString() {
        return deptDefinedString;
    }
 
    public String[] getUserDefinedStrings() {
        return userDefinedStrings;
    }
 
    public String[] getRoleDefinedStrings() {
        return roleDefinedStrings;
    }
 
    public String[] getDeptDefinedStrings() {
        return deptDefinedStrings;
    }
}