1 /**
2 *
3 * Copyright 2003-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.security.Principal;
21 import java.io.Serializable;
22
23
24 /**
25 * Represents a principal in an realm.
26 *
27 * @version $Rev: 355877 $ $Date: 2005-12-10 18:48:27 -0800 (Sat, 10 Dec 2005) $
28 */
29 public class RealmPrincipal implements Principal, Serializable {
30 private final String realm;
31 private final String domain;
32 private final Principal principal;
33 private transient String name = null;
34
35 public RealmPrincipal(String realm, String domain, Principal principal) {
36
37 if (realm == null) throw new IllegalArgumentException("realm is null");
38 if (domain == null) throw new IllegalArgumentException("domain is null");
39 if (principal == null) throw new IllegalArgumentException("principal is null");
40
41 this.realm = realm;
42 this.domain = domain;
43 this.principal = principal;
44 }
45
46 public boolean equals(Object o) {
47 if (this == o) return true;
48 if (o == null || getClass() != o.getClass()) return false;
49
50 final RealmPrincipal that = (RealmPrincipal) o;
51
52 if (!domain.equals(that.domain)) return false;
53 if (!principal.equals(that.principal)) return false;
54 if (!realm.equals(that.realm)) return false;
55
56 return true;
57 }
58
59 public int hashCode() {
60 int result;
61 result = realm.hashCode();
62 result = 29 * result + domain.hashCode();
63 result = 29 * result + principal.hashCode();
64 return result;
65 }
66
67 /**
68 * Returns a string representation of this principal.
69 *
70 * @return a string representation of this principal.
71 */
72 public String toString() {
73 return getName();
74 }
75
76 /**
77 * Returns the name of this principal.
78 *
79 * @return the name of this principal.
80 */
81 public String getName() {
82 if (name == null) {
83 StringBuffer buffer = new StringBuffer("");
84 buffer.append(realm);
85 buffer.append("::");
86 buffer.append(domain);
87 buffer.append("::");
88 buffer.append(principal.getClass().getName());
89 buffer.append(':');
90 buffer.append(principal.getName());
91
92 name = buffer.toString();
93 }
94 return name;
95 }
96
97 /**
98 * Returns the realm that is associated with the principal.
99 *
100 * @return the realm that is associated with the principal.
101 */
102 public String getRealm() {
103 return realm;
104 }
105
106 /**
107 * Returns the principal that is associated with the realm.
108 *
109 * @return the principal that is associated with the realm.
110 */
111 public Principal getPrincipal() {
112 return principal;
113 }
114
115 /**
116 * Returns the realm that is associated with the principal.
117 *
118 * @return the realm that is associated with the principal.
119 */
120 public String getLoginDomain() {
121 return domain;
122 }
123 }