some major refactoring.
[utils] / system / general / src / main / java / org / wamblee / system / DefaultRequiredInterfaceDescriptor.java
index a6e85bc53f33cf8fe0fef3c69cc017515a2de152..580b390b4402dbc7fb45b0972ed9bdeb8db248fe 100644 (file)
@@ -1,20 +1,31 @@
 package org.wamblee.system;
 
-public class DefaultRequiredInterfaceDescriptor extends AbstractProvidedInterfaceDescriptor
-               implements RequiredInterfaceDescriptor {
+import java.util.Arrays;
 
+public class DefaultRequiredInterfaceDescriptor implements RequiredInterface {
+
+       private String _name;
+       private Class[] _required;
+       private ProvidedInterface _provider; 
+       
        public DefaultRequiredInterfaceDescriptor(String aName, Class aInterface) {
-               super(aName, aInterface);
+               this(aName, new Class[] { aInterface }); 
        }
 
        public DefaultRequiredInterfaceDescriptor(String aName, Class[] aInterfaces) {
-               super(aName, aInterfaces);
+               _name = aName; 
+               _required = aInterfaces; 
        }
 
        @Override
-       public boolean implementedBy(ProvidedInterfaceDescriptor aDescriptor) {
+       public String getName() {
+               return _name;
+       }
+       
+       @Override
+       public boolean implementedBy(ProvidedInterface aDescriptor) {
                Class[] provided = aDescriptor.getInterfaceTypes();
-               for (Class required : getInterfaceTypes()) {
+               for (Class required : _required) {
                        if ( !serviceProvided(required, provided)) { 
                                return false; 
                        }
@@ -40,5 +51,53 @@ public class DefaultRequiredInterfaceDescriptor extends AbstractProvidedInterfac
                }
                return false; 
        }
+       
+       @Override
+       public ProvidedInterface getProvider() {
+               return _provider; 
+       }
+       
+       @Override
+       public void setProvider(ProvidedInterface aProvider) {
+               _provider = aProvider;  
+       }
+
+       @Override
+       public <T> T getImplementation(Class<T> aClass) {
+               return (T)_provider.getImplementation();
+       }
+       
+       @Override
+       public boolean equals(Object obj) {
+               if ( !(obj instanceof DefaultRequiredInterfaceDescriptor)) { 
+                       return false; 
+               }
+               DefaultRequiredInterfaceDescriptor descr = (DefaultRequiredInterfaceDescriptor)obj;
+               if ( _required.length != descr._required.length ) { 
+                       return false; 
+               }
+               String[] interfaces1 = new String[_required.length];
+               String[] interfaces2 = new String[_required.length];
+               for (int i = 0; i < _required.length; i++) {  
+                       interfaces1[i] = _required[i].getName();
+                       interfaces2[i] = descr._required[i].getName();
+               }
+               Arrays.sort(interfaces1);
+               Arrays.sort(interfaces2);
+               return Arrays.equals(interfaces1, interfaces2);
+       }
 
+       @Override
+       public int hashCode() {
+               return _required.hashCode(); 
+       }
+       
+       @Override
+       public String toString() {
+               StringBuffer buf = new StringBuffer();
+               for (Class intf: _required) { 
+                       buf.append("." + intf.getName());
+               }
+               return buf.toString();
+       }
 }