From dc96368417f19fe7c9064ca0c57bb87cc0009ba6 Mon Sep 17 00:00:00 2001
From: Brian Major <major.brian@gmail.com>
Date: Tue, 22 Nov 2016 15:20:09 -0800
Subject: [PATCH] issue-10 - fix to GroupURI equals()

---
 .../main/java/ca/nrc/cadc/ac/GroupURI.java    | 26 ++++++++++++-------
 .../java/ca/nrc/cadc/ac/GroupURITest.java     | 12 +++++++++
 2 files changed, 29 insertions(+), 9 deletions(-)

diff --git a/cadc-access-control/src/main/java/ca/nrc/cadc/ac/GroupURI.java b/cadc-access-control/src/main/java/ca/nrc/cadc/ac/GroupURI.java
index 16265fbf..870639d1 100644
--- a/cadc-access-control/src/main/java/ca/nrc/cadc/ac/GroupURI.java
+++ b/cadc-access-control/src/main/java/ca/nrc/cadc/ac/GroupURI.java
@@ -156,16 +156,19 @@ public class GroupURI
     }
 
     @Override
-    public boolean equals(Object rhs)
+    public boolean equals(Object other)
     {
-        if (rhs == null)
+        if (other == null)
             return false;
-        if (this == rhs)
+        if (this == other)
             return true;
-        if (rhs instanceof GroupURI)
+        if (other instanceof GroupURI)
         {
-            GroupURI vu = (GroupURI) rhs;
-            return uri.toString().equals(vu.uri.toString());
+
+            GroupURI oID = (GroupURI) other;
+            String otherURI = getServiceIDString() + "?" + oID.getName();
+            String thisURI = getServiceIDString() + "?" + this.getName();
+            return thisURI.equals(otherURI);
         }
         return false;
     }
@@ -200,15 +203,20 @@ public class GroupURI
         return name;
     }
 
-    public URI getServiceID()
+    public String getServiceIDString()
     {
-        String serviceID = uri.getScheme() +
+        return uri.getScheme() +
             "://" +
             uri.getAuthority() +
             uri.getPath();
+    }
+
+    public URI getServiceID()
+    {
+        String serviceIDString = getServiceIDString();
         try
         {
-            return new URI(serviceID);
+            return new URI(serviceIDString);
         }
         catch (URISyntaxException e)
         {
diff --git a/cadc-access-control/src/test/java/ca/nrc/cadc/ac/GroupURITest.java b/cadc-access-control/src/test/java/ca/nrc/cadc/ac/GroupURITest.java
index 423f7df9..16b658bb 100644
--- a/cadc-access-control/src/test/java/ca/nrc/cadc/ac/GroupURITest.java
+++ b/cadc-access-control/src/test/java/ca/nrc/cadc/ac/GroupURITest.java
@@ -18,6 +18,18 @@ public class GroupURITest
         Log4jInit.setLevel("ca.nrc.cadc.ac", Level.DEBUG);
     }
 
+    @Test
+    public void testEquals()
+    {
+        GroupURI uri1 = new GroupURI("ivo://example.org/gms?name");
+        GroupURI uri2 = new GroupURI("ivo://example.org/gms?name");
+        Assert.assertTrue(uri1.equals(uri2));
+
+        uri1 = new GroupURI("ivo://example.org/gms?name");
+        uri2 = new GroupURI("ivo://example.org/gms#name");
+        Assert.assertTrue(uri1.equals(uri2));
+    }
+
     @Test
     public void testMalformed()
     {
-- 
GitLab