X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;f=system%2Fgeneral%2Fsrc%2Fmain%2Fjava%2Forg%2Fwamblee%2Fsystem%2FDefaultRequiredInterfaceDescriptor.java;h=580b390b4402dbc7fb45b0972ed9bdeb8db248fe;hb=2aa6c38d06e981a4a6c240e2d371638205c3fb54;hp=a6e85bc53f33cf8fe0fef3c69cc017515a2de152;hpb=90df0a8dddc38ee5bc9b3a372af3e4d019293886;p=utils diff --git a/system/general/src/main/java/org/wamblee/system/DefaultRequiredInterfaceDescriptor.java b/system/general/src/main/java/org/wamblee/system/DefaultRequiredInterfaceDescriptor.java index a6e85bc5..580b390b 100644 --- a/system/general/src/main/java/org/wamblee/system/DefaultRequiredInterfaceDescriptor.java +++ b/system/general/src/main/java/org/wamblee/system/DefaultRequiredInterfaceDescriptor.java @@ -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 getImplementation(Class 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(); + } }