001 /**
002 *
003 * Copyright 2003-2004 The Apache Software Foundation
004 *
005 * Licensed under the Apache License, Version 2.0 (the "License");
006 * you may not use this file except in compliance with the License.
007 * You may obtain a copy of the License at
008 *
009 * http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017
018 package org.apache.geronimo.security;
019
020 import java.security.Principal;
021 import java.io.Serializable;
022
023
024 /**
025 * Represents a principal in an realm.
026 *
027 * @version $Rev: 355877 $ $Date: 2005-12-10 18:48:27 -0800 (Sat, 10 Dec 2005) $
028 */
029 public class RealmPrincipal implements Principal, Serializable {
030 private final String realm;
031 private final String domain;
032 private final Principal principal;
033 private transient String name = null;
034
035 public RealmPrincipal(String realm, String domain, Principal principal) {
036
037 if (realm == null) throw new IllegalArgumentException("realm is null");
038 if (domain == null) throw new IllegalArgumentException("domain is null");
039 if (principal == null) throw new IllegalArgumentException("principal is null");
040
041 this.realm = realm;
042 this.domain = domain;
043 this.principal = principal;
044 }
045
046 public boolean equals(Object o) {
047 if (this == o) return true;
048 if (o == null || getClass() != o.getClass()) return false;
049
050 final RealmPrincipal that = (RealmPrincipal) o;
051
052 if (!domain.equals(that.domain)) return false;
053 if (!principal.equals(that.principal)) return false;
054 if (!realm.equals(that.realm)) return false;
055
056 return true;
057 }
058
059 public int hashCode() {
060 int result;
061 result = realm.hashCode();
062 result = 29 * result + domain.hashCode();
063 result = 29 * result + principal.hashCode();
064 return result;
065 }
066
067 /**
068 * Returns a string representation of this principal.
069 *
070 * @return a string representation of this principal.
071 */
072 public String toString() {
073 return getName();
074 }
075
076 /**
077 * Returns the name of this principal.
078 *
079 * @return the name of this principal.
080 */
081 public String getName() {
082 if (name == null) {
083 StringBuffer buffer = new StringBuffer("");
084 buffer.append(realm);
085 buffer.append("::");
086 buffer.append(domain);
087 buffer.append("::");
088 buffer.append(principal.getClass().getName());
089 buffer.append(':');
090 buffer.append(principal.getName());
091
092 name = buffer.toString();
093 }
094 return name;
095 }
096
097 /**
098 * Returns the realm that is associated with the principal.
099 *
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 }