f110202415a364f2141d80a51f2d08d1df7fc3a7
[aaa.git] / aaa-authn / src / main / java / org / opendaylight / aaa / ClaimBuilder.java
1 /*
2  * Copyright (c) 2014, 2015 Hewlett-Packard Development Company, L.P. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.aaa;
9
10 import static org.opendaylight.aaa.EqualUtil.areEqual;
11 import static org.opendaylight.aaa.HashCodeUtil.hash;
12
13 import com.google.common.base.Strings;
14 import com.google.common.collect.ImmutableSet;
15 import java.io.Serializable;
16 import java.util.LinkedHashSet;
17 import java.util.Set;
18
19 import org.opendaylight.aaa.api.Claim;
20
21 /**
22  * Builder for a {@link Claim}. The userId, user, and roles information is mandatory.
23  *
24  * @author liemmn
25  *
26  */
27 public class ClaimBuilder {
28     private String userId = "";
29     private String user = "";
30     private Set<String> roles = new LinkedHashSet<>();
31     private String clientId = "";
32     private String domain = "";
33
34     public ClaimBuilder() {
35     }
36
37     public ClaimBuilder(Claim claim) {
38         clientId = claim.clientId();
39         userId = claim.userId();
40         user = claim.user();
41         domain = claim.domain();
42         roles.addAll(claim.roles());
43     }
44
45     public ClaimBuilder setClientId(String clientId) {
46         this.clientId = Strings.nullToEmpty(clientId).trim();
47         return this;
48     }
49
50     public ClaimBuilder setUserId(String userId) {
51         this.userId = Strings.nullToEmpty(userId).trim();
52         return this;
53     }
54
55     public ClaimBuilder setUser(String userName) {
56         user = Strings.nullToEmpty(userName).trim();
57         return this;
58     }
59
60     public ClaimBuilder setDomain(String domain) {
61         this.domain = Strings.nullToEmpty(domain).trim();
62         return this;
63     }
64
65     public ClaimBuilder addRoles(Set<String> roles) {
66         for (String role : roles) {
67             addRole(role);
68         }
69         return this;
70     }
71
72     public ClaimBuilder addRole(String role) {
73         roles.add(Strings.nullToEmpty(role).trim());
74         return this;
75     }
76
77     public Claim build() {
78         return new ImmutableClaim(this);
79     }
80
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;
89
90         protected ImmutableClaim(ClaimBuilder base) {
91             clientId = base.clientId;
92             userId = base.userId;
93             user = base.user;
94             domain = base.domain;
95             roles = ImmutableSet.<String>builder().addAll(base.roles).build();
96
97             if (userId.isEmpty() || user.isEmpty() || roles.isEmpty() || roles.contains("")) {
98                 throw new IllegalStateException("The Claim is missing one or more of the required fields.");
99             }
100         }
101         @Override
102         public String clientId() {
103             return clientId;
104         }
105
106         @Override
107         public String userId() {
108             return userId;
109         }
110
111         @Override
112         public String user() {
113             return user;
114         }
115
116         @Override
117         public String domain() {
118             return domain;
119         }
120
121         @Override
122         public Set<String> roles() {
123             return roles;
124         }
125
126         @Override
127         public boolean equals(Object o) {
128             if (this == o)
129                 return true;
130             if (!(o instanceof Claim))
131                 return false;
132             Claim a = (Claim) o;
133             return areEqual(roles, a.roles()) && areEqual(domain, a.domain())
134                 && areEqual(userId, a.userId()) && areEqual(user, a.user())
135                 && areEqual(clientId, a.clientId());
136         }
137
138         @Override
139         public int hashCode() {
140             if (hashCode == 0) {
141                 int result = HashCodeUtil.SEED;
142                 result = hash(result, clientId);
143                 result = hash(result, userId);
144                 result = hash(result, user);
145                 result = hash(result, domain);
146                 result = hash(result, roles);
147                 hashCode = result;
148             }
149             return hashCode;
150         }
151
152         @Override
153         public String toString() {
154             StringBuilder sb = new StringBuilder();
155             sb.append("clientId:").append(clientId).append(",");
156             sb.append("userId:").append(userId).append(",");
157             sb.append("userName:").append(user).append(",");
158             sb.append("domain:").append(domain).append(",");
159             sb.append("roles:").append(roles);
160             return sb.toString();
161         }
162     }
163 }