updated coding rules.
[utils] / system / general / src / main / java / org / wamblee / system / core / DefaultProvidedInterface.java
index b751a67144d00542804ea39354a5eafa88e83af3..d30a8c150d39c5c956cd3295f5901d87cdc0ccf0 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.
@@ -24,75 +28,80 @@ import java.util.Arrays;
  */
 public class DefaultProvidedInterface implements ProvidedInterface {
        
-       private String _name; 
-       private Class[] _interfaces;
-       private Object _implementation; 
+       private String name; 
+       private Class[] interfaces;
        
        /**
         * Constructs the descriptor. 
         * @param aInterface Type of service. 
         */
        public DefaultProvidedInterface(String aName, Class aInterface) {
-               _name = aName; 
-               _interfaces = new Class[] { aInterface };  
+               this(aName, new Class[] { aInterface }); 
        }
        
-       public DefaultProvidedInterface(String aName, Class[] aInterfaces) {
-               _name = aName; 
-               _interfaces = Arrays.copyOf(aInterfaces, aInterfaces.length);  
+       public DefaultProvidedInterface(String aName, Class[] aInterfaces) { 
+               name = aName; 
+               interfaces = Arrays.copyOf(aInterfaces, aInterfaces.length); 
        }
 
        @Override
        public String getName() {
-               return _name;
+               return name;
        }
        
        @Override
        public Class[] getInterfaceTypes() {
-               return _interfaces;
+               return interfaces;
        }
        
        @Override
-       public void publish(Object aImplementation) {
-               _implementation = aImplementation;      
+       public String toString() {
+               StringBuffer buf = new StringBuffer();
+               buf.append(getName());
+               buf.append(":");
+               for (Class intf: interfaces) { 
+                       buf.append(" " + intf.getName());
+               }
+               return buf.toString();
        }
        
        @Override
-       public Object getImplementation() {
-               return _implementation; 
+       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 boolean equals(Object obj) {
-               if ( !(obj instanceof DefaultProvidedInterface)) { 
-                       return false; 
-               }
-               DefaultProvidedInterface descr = (DefaultProvidedInterface)obj;
-               if ( _interfaces.length != descr._interfaces.length ) { 
-                       return false; 
-               }
-               String[] interfaces1 = new String[_interfaces.length];
-               String[] interfaces2 = new String[_interfaces.length];
-               for (int i = 0; i < _interfaces.length; i++) {  
-                       interfaces1[i] = _interfaces[i].getName();
-                       interfaces2[i] = descr._interfaces[i].getName();
-               }
-               Arrays.sort(interfaces1);
-               Arrays.sort(interfaces2);
-               return Arrays.equals(interfaces1, interfaces2);
-       }
-
        @Override
        public int hashCode() {
-               return _interfaces.hashCode(); 
+           return getEqualsRepresentation().hashCode();
        }
        
        @Override
-       public String toString() {
-               StringBuffer buf = new StringBuffer();
-               for (Class intf: _interfaces) { 
-                       buf.append("." + intf.getName());
-               }
-               return buf.toString();
+       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; 
        }
 }