Created equals()/hashCode() methods for Wire (FELIX-3495), removed exception from
stop() activator method, and make copies of mandatory/optional resource parameters
from ResolveContext.


git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1333021 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/resolver/src/main/java/org/apache/felix/resolver/Activator.java b/resolver/src/main/java/org/apache/felix/resolver/Activator.java
index 0d1c262..2ed989a 100644
--- a/resolver/src/main/java/org/apache/felix/resolver/Activator.java
+++ b/resolver/src/main/java/org/apache/felix/resolver/Activator.java
@@ -48,6 +48,5 @@
 
     public void stop(BundleContext bc) throws Exception
     {
-        throw new UnsupportedOperationException("Not supported yet.");
     }
 }
\ No newline at end of file
diff --git a/resolver/src/main/java/org/apache/felix/resolver/ResolverImpl.java b/resolver/src/main/java/org/apache/felix/resolver/ResolverImpl.java
index 3eed4f9..eb0f0a9 100644
--- a/resolver/src/main/java/org/apache/felix/resolver/ResolverImpl.java
+++ b/resolver/src/main/java/org/apache/felix/resolver/ResolverImpl.java
@@ -67,8 +67,9 @@
         Map<Resource, Packages> resourcePkgMap =
             new HashMap<Resource, Packages>();
 
-        Collection<Resource> mandatoryResources = rc.getMandatoryResources();
-        Collection<Resource> optionalResources = rc.getOptionalResources();
+        // Make copies of arguments in case we want to modify them.
+        Collection<Resource> mandatoryResources = new ArrayList(rc.getMandatoryResources());
+        Collection<Resource> optionalResources = new ArrayList(rc.getOptionalResources());
 // TODO: RFC-112 - Need impl-specific type.
 //        Collection<Resource> ondemandFragments = (rc instanceof ResolveContextImpl)
 //            ? ((ResolveContextImpl) rc).getOndemandResources() : Collections.EMPTY_LIST;
diff --git a/resolver/src/main/java/org/apache/felix/resolver/WireImpl.java b/resolver/src/main/java/org/apache/felix/resolver/WireImpl.java
index 7af9b87..a79ac71 100644
--- a/resolver/src/main/java/org/apache/felix/resolver/WireImpl.java
+++ b/resolver/src/main/java/org/apache/felix/resolver/WireImpl.java
@@ -67,4 +67,50 @@
             + " -> "
             + "[" + m_provider + "]";
     }
+
+    @Override
+    public boolean equals(Object obj)
+    {
+        if (obj == null)
+        {
+            return false;
+        }
+        if (!(obj instanceof Wire))
+        {
+            return false;
+        }
+        final Wire other = (Wire) obj;
+        if (this.m_requirer != other.getRequirer()
+            && (this.m_requirer == null || !this.m_requirer.equals(other.getRequirer())))
+        {
+            return false;
+        }
+        if (this.m_req != other.getRequirement()
+            && (this.m_req == null || !this.m_req.equals(other.getRequirement())))
+        {
+            return false;
+        }
+        if (this.m_provider != other.getProvider()
+            && (this.m_provider == null || !this.m_provider.equals(other.getProvider())))
+        {
+            return false;
+        }
+        if (this.m_cap != other.getCapability()
+            && (this.m_cap == null || !this.m_cap.equals(other.getCapability())))
+        {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public int hashCode()
+    {
+        int hash = 5;
+        hash = 29 * hash + (this.m_requirer != null ? this.m_requirer.hashCode() : 0);
+        hash = 29 * hash + (this.m_req != null ? this.m_req.hashCode() : 0);
+        hash = 29 * hash + (this.m_provider != null ? this.m_provider.hashCode() : 0);
+        hash = 29 * hash + (this.m_cap != null ? this.m_cap.hashCode() : 0);
+        return hash;
+    }
 }
\ No newline at end of file