summaryrefslogtreecommitdiffstats
path: root/pki/base/common/src/com/netscape/certsrv/request/AgentApprovals.java
blob: 9bd7fa85795efe93c169da3fed3aef9cc15bc294 (plain)
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
// --- BEGIN COPYRIGHT BLOCK ---
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; version 2 of the License.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License along
// with this program; if not, write to the Free Software Foundation, Inc.,
// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
//
// (C) 2007 Red Hat, Inc.
// All rights reserved.
// --- END COPYRIGHT BLOCK ---
package com.netscape.certsrv.request;


import java.io.Serializable;

import java.util.Date;
import java.util.Enumeration;
import java.util.Vector;


/**
 * A collection of AgentApproval objects. 
 * <single-threaded>
 *
 * @version $Revision$, $Date$
 */
public class AgentApprovals
    implements Serializable {

    /**
     * Adds an approval to approval's list.
     * <p>
     * If an approval is already present for this user,
     * it is updated with a new date.  Otherwise a new
     * value is  inserted.
     *
     * @param userName user name of the approving agent
     */
    public void addApproval(String userName) {
        AgentApproval a = findApproval(userName);
   
        // update existing approval
        if (a != null) {
            a.mDate = new Date(); /* CMS.getCurrentDate(); */
            return;
        }

        a = new AgentApproval(userName);
        mVector.addElement(a);
    }

    /**
     * Removes an approval from approval's list.
     * <p>
     * If there is no approval for this userName, this
     * call does nothing.
     *
     * @param userName user name of the approving agent
     */
    public void removeApproval(String userName) {
        AgentApproval a = findApproval(userName);

        if (a != null)
            mVector.removeElement(a);
    }

    /**
     * Finds an existing AgentApproval for the named user.
     *
     * @param userName user name of the approving agent
     * @return an AgentApproval object
     */
    public AgentApproval findApproval(String userName) {
        AgentApproval a = null;

        // search
        for (int i = 0; i < mVector.size(); i++) {
            a = (AgentApproval) mVector.elementAt(i);

            if (a.mUserName.equals(userName)) break;
        }

        return a;
    }

    /**
     * Returns an enumeration of the agent approvals
     *
     * @return an enumeration of the agent approvals
     */
    public Enumeration elements() {
        return mVector.elements();
    }

    /**
     * Returns the AgentApprovals as a Vector of strings.
     * Each entry in the vector is of the format:
     *     epoch;username
     * where epoch is the date.getTime()
     * <p>
     * This is used for serialization in Request.setExtData().
     * @return The string vector.
     */
    public Vector toStringVector() {
        Vector retval = new Vector(mVector.size());
        for (int i = 0; i < mVector.size(); i++) {
            AgentApproval a = (AgentApproval) mVector.elementAt(i);
            retval.add(a.getDate().getTime() + ";" + a.getUserName());
        }

        return retval;
    }

    /**
     * Recreates an AgentApprovals instance from a Vector of strings that
     * was created by toStringVector().
     * @param stringVector The vector of strings to translate
     * @return the AgentApprovals instance or null if it can't be translated.
     */
    public static AgentApprovals fromStringVector(Vector stringVector) {
        if (stringVector == null) {
            return null;
        }
        AgentApprovals approvals = new AgentApprovals();
        for (int i = 0; i < stringVector.size(); i++) {
            try {
                String approvalString = (String)stringVector.get(i);
                String[] parts = approvalString.split(";", 2);
                if (parts.length != 2) {
                    return null;
                }
                Long epoch = new Long(parts[0]);
                Date date = new Date(epoch.longValue());

                AgentApproval approval = new AgentApproval(parts[1]);
                approval.mDate = date;

                approvals.mVector.add(approval);
            } catch (ClassCastException e) {
                return null;
            } catch (NumberFormatException e) {
                return null;
            }
        }
        return approvals;
    }

    protected Vector mVector = new Vector();
}