View Javadoc

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  }