(no commit message)
[utils] / system / general / src / main / java / org / wamblee / system / core / DefaultProvidedInterface.java
index 90c230dcc9bf23493fcba2dd629f14c7c880e665..c790567300206015123a27ee8bcf721b34c693a2 100644 (file)
  */ 
 package org.wamblee.system.core;
 
+import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
 
 /**
  * Default implementation of a service descriptor.
@@ -26,7 +30,6 @@ public class DefaultProvidedInterface implements ProvidedInterface {
        
        private String _name; 
        private Class[] _interfaces;
-       private String _uniqueId; 
        
        /**
         * Constructs the descriptor. 
@@ -36,10 +39,9 @@ public class DefaultProvidedInterface implements ProvidedInterface {
                this(aName, new Class[] { aInterface }); 
        }
        
-       public DefaultProvidedInterface(String aName, Class[] aInterfaces) {
+       public DefaultProvidedInterface(String aName, Class[] aInterfaces) { 
                _name = aName; 
-               _interfaces = Arrays.copyOf(aInterfaces, aInterfaces.length);
-               _uniqueId = null; 
+               _interfaces = Arrays.copyOf(aInterfaces, aInterfaces.length); 
        }
 
        @Override
@@ -51,21 +53,6 @@ public class DefaultProvidedInterface implements ProvidedInterface {
        public Class[] getInterfaceTypes() {
                return _interfaces;
        }
-
-       @Override
-       public void setUniqueId(String aId) {
-               _uniqueId = aId;        
-       }
-       
-       @Override
-       public String getUniqueId() {
-               return _uniqueId;
-       }
-       
-       @Override
-       public void publish(Object aImplementation, Scope aScope) {
-               aScope.publishInterface(this, aImplementation);
-       }
        
        @Override
        public String toString() {
@@ -77,4 +64,44 @@ public class DefaultProvidedInterface implements ProvidedInterface {
                }
                return buf.toString();
        }
+       
+       @Override
+       public boolean equals(Object aObj) {
+           return this == aObj;
+           /*
+           if ( !(aObj instanceof DefaultProvidedInterface)) { 
+               return false; 
+           }
+           DefaultProvidedInterface provided = (DefaultProvidedInterface)aObj; 
+           return getEqualsRepresentation().equals(provided.getEqualsRepresentation());
+           */
+       }
+       
+       @Override
+       public int hashCode() {
+           return getEqualsRepresentation().hashCode();
+       }
+       
+       @Override
+       public boolean covers(ProvidedInterface aInterface) {
+           // TODO do more than just equals. 
+           if ( !(aInterface instanceof DefaultProvidedInterface)) { 
+               return false; 
+           }
+           return getEqualsRepresentation().equals(((DefaultProvidedInterface)aInterface).getEqualsRepresentation());
+       }
+       
+       
+       private String getEqualsRepresentation() { 
+           List<String> result = new ArrayList<String>(); 
+           for (Class cls: _interfaces) { 
+               result.add(cls.getName());
+           }
+           Collections.sort(result); 
+           String value = ""; 
+           for (String str: result) { 
+               value += ":" + str; 
+           }
+           return value; 
+       }
 }