2 * Copyright (c) 2014, 2017 Hewlett-Packard Development Company, L.P. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.aaa.impl.shiro.tokenauthrealm.auth;
10 import static org.opendaylight.aaa.impl.shiro.tokenauthrealm.util.EqualUtil.areEqual;
11 import static org.opendaylight.aaa.impl.shiro.tokenauthrealm.util.HashCodeUtil.hash;
13 import com.google.common.base.Strings;
14 import com.google.common.collect.ImmutableSet;
15 import java.io.Serializable;
16 import java.util.LinkedHashSet;
18 import org.opendaylight.aaa.api.Claim;
19 import org.opendaylight.aaa.impl.shiro.tokenauthrealm.util.HashCodeUtil;
22 * Builder for a {@link Claim}. The userId, user, and roles information is
27 public class ClaimBuilder {
28 private String userId = "";
29 private String user = "";
30 private final Set<String> roles = new LinkedHashSet<>();
31 private String clientId = "";
32 private String domain = "";
34 public ClaimBuilder() {
37 public ClaimBuilder(Claim claim) {
38 clientId = claim.clientId();
39 userId = claim.userId();
41 domain = claim.domain();
42 roles.addAll(claim.roles());
45 public ClaimBuilder setClientId(String clientId) {
46 this.clientId = Strings.nullToEmpty(clientId).trim();
50 public ClaimBuilder setUserId(String userId) {
51 this.userId = Strings.nullToEmpty(userId).trim();
55 public ClaimBuilder setUser(String userName) {
56 user = Strings.nullToEmpty(userName).trim();
60 public ClaimBuilder setDomain(String domain) {
61 this.domain = Strings.nullToEmpty(domain).trim();
65 public ClaimBuilder addRoles(Set<String> roles) {
66 for (String role : roles) {
72 public ClaimBuilder addRole(String role) {
73 roles.add(Strings.nullToEmpty(role).trim());
77 public Claim build() {
78 return new ImmutableClaim(this);
81 protected static class ImmutableClaim implements Claim, Serializable {
82 private static final long serialVersionUID = -8115027645190209129L;
83 private int hashCode = 0;
84 protected String clientId;
85 protected String userId;
86 protected String user;
87 protected String domain;
88 protected ImmutableSet<String> roles;
90 protected ImmutableClaim(ClaimBuilder base) {
91 clientId = base.clientId;
95 roles = ImmutableSet.<String>builder().addAll(base.roles).build();
97 if (userId.isEmpty() || user.isEmpty() || roles.isEmpty() || roles.contains("")) {
98 throw new IllegalStateException(
99 "The Claim is missing one or more of the required fields.");
104 public String clientId() {
109 public String userId() {
114 public String user() {
119 public String domain() {
124 public Set<String> roles() {
129 public boolean equals(Object object) {
130 if (this == object) {
133 if (!(object instanceof Claim)) {
136 Claim claim = (Claim) object;
137 return areEqual(roles, claim.roles()) && areEqual(domain, claim.domain())
138 && areEqual(userId, claim.userId()) && areEqual(user, claim.user())
139 && areEqual(clientId, claim.clientId());
143 public int hashCode() {
145 int result = HashCodeUtil.SEED;
146 result = hash(result, clientId);
147 result = hash(result, userId);
148 result = hash(result, user);
149 result = hash(result, domain);
150 result = hash(result, roles);
157 public String toString() {
158 return "clientId:" + clientId + "," + "userId:" + userId + "," + "userName:" + user
159 + "," + "domain:" + domain + "," + "roles:" + roles;