Bug4168 Deprecate inappropriate uses of StringBuilder
[aaa.git] / aaa-authn / src / main / java / org / opendaylight / aaa / ClaimBuilder.java
index 2cf4cb8dc79fe2745d039223ccb60ed6280b0fc0..09d217f33404b8ee41b4bd4e65f9f39ba47b4fd2 100644 (file)
@@ -1,9 +1,8 @@
 /*
- * Copyright (c) 2014 Hewlett-Packard Development Company, L.P. and others.
- * All rights reserved.
+ * Copyright (c) 2014, 2015 Hewlett-Packard Development Company, L.P. and others.  All rights reserved.
  *
  * This program and the accompanying materials are made available under the
- * terms of the Eclipse License v1.0 which accompanies this distribution,
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
 package org.opendaylight.aaa;
@@ -11,119 +10,152 @@ package org.opendaylight.aaa;
 import static org.opendaylight.aaa.EqualUtil.areEqual;
 import static org.opendaylight.aaa.HashCodeUtil.hash;
 
-import java.util.Collections;
-import java.util.HashSet;
+import com.google.common.base.Strings;
+import com.google.common.collect.ImmutableSet;
+import java.io.Serializable;
+import java.util.LinkedHashSet;
 import java.util.Set;
 
 import org.opendaylight.aaa.api.Claim;
 
 /**
- * Builder for a {@link Claim}
+ * Builder for a {@link Claim}. The userId, user, and roles information is mandatory.
  *
  * @author liemmn
  *
  */
-public class ClaimBuilder implements Claim {
-
-    protected int hashCode = 0;
-
-    protected String userId;
-    protected String user;
-    protected String domain;
-    protected final Set<String> roles = new HashSet<String>();
-
-    public ClaimBuilder() {}
+public class ClaimBuilder {
+    private String userId = "";
+    private String user = "";
+    private Set<String> roles = new LinkedHashSet<>();
+    private String clientId = "";
+    private String domain = "";
+
+    public ClaimBuilder() {
+    }
 
     public ClaimBuilder(Claim claim) {
+        clientId = claim.clientId();
         userId = claim.userId();
         user = claim.user();
         domain = claim.domain();
         roles.addAll(claim.roles());
     }
 
-    @Override
-    public String userId() {
-        return userId;
+    public ClaimBuilder setClientId(String clientId) {
+        this.clientId = Strings.nullToEmpty(clientId).trim();
+        return this;
     }
 
     public ClaimBuilder setUserId(String userId) {
-        this.userId = userId;
+        this.userId = Strings.nullToEmpty(userId).trim();
         return this;
     }
 
-    @Override
-    public String user() {
-        return user;
-    }
-
     public ClaimBuilder setUser(String userName) {
-        this.user = userName;
+        user = Strings.nullToEmpty(userName).trim();
         return this;
     }
 
-    @Override
-    public String domain() {
-        return domain;
-    }
-
     public ClaimBuilder setDomain(String domain) {
-        this.domain = domain;
+        this.domain = Strings.nullToEmpty(domain).trim();
         return this;
     }
 
-    @Override
-    public Set<String> roles() {
-        return Collections.unmodifiableSet(roles);
-    }
-
     public ClaimBuilder addRoles(Set<String> roles) {
-        this.roles.addAll(roles);
+        for (String role : roles) {
+            addRole(role);
+        }
         return this;
     }
 
     public ClaimBuilder addRole(String role) {
-        this.roles.add(role);
+        roles.add(Strings.nullToEmpty(role).trim());
         return this;
     }
 
     public Claim build() {
-        return this;
+        return new ImmutableClaim(this);
     }
 
-    @Override
-    public boolean equals(Object o) {
-        if (this == o)
-            return true;
-        if (!(o instanceof Claim))
-            return false;
-        Claim a = (Claim) o;
-        return areEqual(roles, a.roles())
-                && areEqual(domain, a.domain())
-                && areEqual(userId, a.userId())
-                && areEqual(user, a.user());
-    }
+    protected static class ImmutableClaim implements Claim, Serializable {
+        private static final long serialVersionUID = -8115027645190209129L;
+        private int hashCode = 0;
+        protected String clientId;
+        protected String userId;
+        protected String user;
+        protected String domain;
+        protected ImmutableSet<String> roles;
+
+        protected ImmutableClaim(ClaimBuilder base) {
+            clientId = base.clientId;
+            userId = base.userId;
+            user = base.user;
+            domain = base.domain;
+            roles = ImmutableSet.<String>builder().addAll(base.roles).build();
+
+            if (userId.isEmpty() || user.isEmpty() || roles.isEmpty() || roles.contains("")) {
+                throw new IllegalStateException("The Claim is missing one or more of the required fields.");
+            }
+        }
+        @Override
+        public String clientId() {
+            return clientId;
+        }
 
-    @Override
-    public int hashCode() {
-        if (hashCode == 0) {
-            int result = HashCodeUtil.SEED;
-            result = hash(result, userId);
-            result = hash(result, user);
-            result = hash(result, domain);
-            result = hash(result, roles);
-            hashCode = result;
+        @Override
+        public String userId() {
+            return userId;
         }
-        return hashCode;
-    }
 
-    @Override
-    public String toString() {
-        StringBuffer sb = new StringBuffer();
-        if (userId != null) sb.append("userId:").append(userId).append(",");
-        if (user != null) sb.append("userName:").append(user).append(",");
-        if (domain != null) sb.append("domain:").append(domain).append(",");
-        sb.append("roles:").append(roles);
-        return sb.toString();
-    }
+        @Override
+        public String user() {
+            return user;
+        }
+
+        @Override
+        public String domain() {
+            return domain;
+        }
+
+        @Override
+        public Set<String> roles() {
+            return roles;
+        }
+
+        @Override
+        public boolean equals(Object o) {
+            if (this == o)
+                return true;
+            if (!(o instanceof Claim))
+                return false;
+            Claim a = (Claim) o;
+            return areEqual(roles, a.roles()) && areEqual(domain, a.domain())
+                && areEqual(userId, a.userId()) && areEqual(user, a.user())
+                && areEqual(clientId, a.clientId());
+        }
 
+        @Override
+        public int hashCode() {
+            if (hashCode == 0) {
+                int result = HashCodeUtil.SEED;
+                result = hash(result, clientId);
+                result = hash(result, userId);
+                result = hash(result, user);
+                result = hash(result, domain);
+                result = hash(result, roles);
+                hashCode = result;
+            }
+            return hashCode;
+        }
+
+        @Override
+        public String toString() {
+            return "clientId:" + clientId + ","
+                 + "userId:" + userId + ","
+                 + "userName:" + user + ","
+                 + "domain:" + domain + ","
+                 + "roles:" + roles;
+        }
+    }
 }