From af2e548fec93b992954dc3fa6f69a04fdc69d548 Mon Sep 17 00:00:00 2001
From: Brian Major <major.brian@gmail.com>
Date: Tue, 12 Apr 2016 15:43:07 -0700
Subject: [PATCH] s1885 - custom set for users with underlying array

---
 .../src/ca/nrc/cadc/ac/UserSet.java           | 163 ++++++++++++++++++
 1 file changed, 163 insertions(+)
 create mode 100644 cadcAccessControl/src/ca/nrc/cadc/ac/UserSet.java

diff --git a/cadcAccessControl/src/ca/nrc/cadc/ac/UserSet.java b/cadcAccessControl/src/ca/nrc/cadc/ac/UserSet.java
new file mode 100644
index 00000000..925de85b
--- /dev/null
+++ b/cadcAccessControl/src/ca/nrc/cadc/ac/UserSet.java
@@ -0,0 +1,163 @@
+package ca.nrc.cadc.ac;
+
+import java.security.Principal;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * A custom set built on a list implementation.
+ *
+ * Ordering will not be deterministic as per the Set specification.
+ */
+public class UserSet implements Set<User>
+{
+
+    private List<User> users;
+
+    public UserSet()
+    {
+        users = new ArrayList<User>();
+    }
+
+    public User getUser(Principal identity)
+    {
+        User test = null;
+        for (User u : users)
+        {
+            test = new User();
+            test.getIdentities().add(identity);
+            if (test.isConsistent(u))
+            {
+                return u;
+            }
+        }
+        return null;
+    }
+
+    public List<User> getUserList()
+    {
+        return users;
+    }
+
+    @Override
+    public boolean add(User e)
+    {
+        if (!users.contains(e))
+        {
+            users.add(e);
+            return true;
+        }
+        return false;
+    }
+
+    @Override
+    public boolean addAll(Collection<? extends User> c)
+    {
+        Iterator<? extends User> i = c.iterator();
+        boolean modified = false;
+        while (i.hasNext())
+        {
+            if (this.add(i.next()))
+            {
+                modified = true;
+            }
+        }
+        return modified;
+    }
+
+    @Override
+    public void clear()
+    {
+        users.clear();
+    }
+
+    @Override
+    public boolean contains(Object o)
+    {
+        return users.contains(o);
+    }
+
+    @Override
+    public boolean containsAll(Collection<?> c)
+    {
+        return users.containsAll(c);
+    }
+
+    @Override
+    public boolean isEmpty()
+    {
+        return users.isEmpty();
+    }
+
+    @Override
+    public Iterator<User> iterator()
+    {
+        return users.iterator();
+    }
+
+    @Override
+    public boolean remove(Object o)
+    {
+        if (users.contains(o))
+        {
+            users.remove(o);
+            return true;
+        }
+        return false;
+    }
+
+    @Override
+    public boolean removeAll(Collection<?> c)
+    {
+        Iterator<?> i = c.iterator();
+        boolean modified = false;
+        while (i.hasNext())
+        {
+            if (this.remove(i.next()))
+            {
+                modified = true;
+            }
+        }
+        return modified;
+    }
+
+    @Override
+    public boolean retainAll(Collection<?> c)
+    {
+        Iterator<User> i = users.listIterator();
+        boolean modified = false;
+        User next = null;
+        while (i.hasNext())
+        {
+            next = i.next();
+            if (!c.contains(next))
+            {
+                i.remove();
+                modified = true;
+            }
+        }
+        return modified;
+    }
+
+    @Override
+    public int size()
+    {
+        return users.size();
+    }
+
+    @Override
+    public Object[] toArray()
+    {
+        return users.toArray();
+    }
+
+    @Override
+    public <T> T[] toArray(T[] a)
+    {
+        return users.toArray(a);
+    }
+
+}
-- 
GitLab