1 /**
2 *
3 * Copyright 2004 The Apache Software Foundation
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18 package org.apache.geronimo.security;
19
20 import java.io.Serializable;
21
22
23 /**
24 * @version $Rev: 355877 $ $Date: 2005-12-10 18:48:27 -0800 (Sat, 10 Dec 2005) $
25 */
26 public class SubjectId implements Serializable {
27 private final Long subjectId;
28 private final byte[] hash;
29 private transient int hashCode;
30 private transient String name;
31
32 public SubjectId(Long subjectId, byte[] hash) {
33 this.subjectId = subjectId;
34 this.hash = hash;
35 }
36
37 public Long getSubjectId() {
38 return subjectId;
39 }
40
41 public byte[] getHash() {
42 return hash;
43 }
44
45 public boolean equals(Object obj) {
46 if (!(obj instanceof SubjectId)) return false;
47
48 SubjectId another = (SubjectId) obj;
49 if (!another.subjectId.equals(subjectId)) return false;
50 for (int i = 0; i < hash.length; i++) {
51 if (another.hash[i] != hash[i]) return false;
52 }
53 return true;
54 }
55
56 public String toString() {
57 if (name == null) {
58 StringBuffer buffer = new StringBuffer();
59 buffer.append('[');
60 buffer.append(subjectId);
61 buffer.append(":0x");
62 for (int i = 0; i < hash.length; i++) {
63 buffer.append(HEXCHAR[(hash[i]>>>4)&0x0F]);
64 buffer.append(HEXCHAR[(hash[i] )&0x0F]);
65 }
66 buffer.append(']');
67 name = buffer.toString();
68 }
69 return name;
70 }
71
72 /**
73 * Returns a hashcode for this LoginModuleId.
74 *
75 * @return a hashcode for this LoginModuleId.
76 */
77 public int hashCode() {
78 if (hashCode == 0) {
79 for (int i = 0; i < hash.length; i++) {
80 hashCode ^= hash[i];
81 }
82 hashCode ^= subjectId.hashCode();
83 }
84 return hashCode;
85 }
86
87 private static final char[] HEXCHAR = {
88 '0', '1', '2', '3', '4', '5', '6', '7',
89 '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'
90 };
91 }