X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;f=system%2Fgeneral%2Fsrc%2Fmain%2Fjava%2Forg%2Fwamblee%2Fsystem%2Fcore%2FDefaultRequiredInterface.java;h=80c3d135363f2bb14e0e8bba9564ed9772d9ddc7;hb=0d8d8f24656e585ee75558cfd6a4c661f8f14985;hp=5e9f8bb60dda715ef632f6d58029f88353e89fc4;hpb=0ef16bd1ab00860f90da1198589b3c777561691d;p=utils diff --git a/system/general/src/main/java/org/wamblee/system/core/DefaultRequiredInterface.java b/system/general/src/main/java/org/wamblee/system/core/DefaultRequiredInterface.java index 5e9f8bb6..80c3d135 100644 --- a/system/general/src/main/java/org/wamblee/system/core/DefaultRequiredInterface.java +++ b/system/general/src/main/java/org/wamblee/system/core/DefaultRequiredInterface.java @@ -17,12 +17,14 @@ package org.wamblee.system.core; import java.util.Arrays; +import org.wamblee.reflection.ReflectionUtils; + public class DefaultRequiredInterface implements RequiredInterface { - private String _name; - private boolean _optional; - private Class[] _required; - private ProvidedInterface _provider; + private String name; + private boolean optional; + private Class[] required; + private ProvidedInterface provider; public DefaultRequiredInterface(String aName, Class aInterface) { this(aName, new Class[] { aInterface }); @@ -38,26 +40,26 @@ public class DefaultRequiredInterface implements RequiredInterface { public DefaultRequiredInterface(String aName, Class[] aInterfaces, boolean aIsOptional) { - _name = aName; - _optional = aIsOptional; - _required = aInterfaces; + name = aName; + optional = aIsOptional; + required = aInterfaces; } @Override public String getName() { - return _name; + return name; } @Override public boolean isOptional() { - return _optional; + return optional; } @Override public boolean implementedBy(ProvidedInterface aDescriptor) { Class[] provided = aDescriptor.getInterfaceTypes(); - for (Class required : _required) { - if ( !serviceProvided(required, provided)) { + for (Class requiredIntf : required) { + if ( !serviceProvided(requiredIntf, provided)) { return false; } } @@ -74,6 +76,8 @@ public class DefaultRequiredInterface implements RequiredInterface { private boolean serviceProvided(Class aRequired, Class[] aProvided) { for (Class provided: aProvided) { try { + provided = ReflectionUtils.wrapIfNeeded(provided); + aRequired = ReflectionUtils.wrapIfNeeded(aRequired); provided.asSubclass(aRequired); return true; } catch (ClassCastException e) { @@ -85,28 +89,36 @@ public class DefaultRequiredInterface implements RequiredInterface { @Override public ProvidedInterface getProvider() { - return _provider; + return provider; } @Override public void setProvider(ProvidedInterface aProvider) { - _provider = aProvider; + assert aProvider != null; + assert implementedBy(aProvider); + provider = aProvider; + } + + @Override + public boolean equals(Object obj) { + return this == obj; } @Override - public boolean equals(Object obj) { + public boolean covers(RequiredInterface obj) { + // TODO do more than equals. if ( !(obj instanceof DefaultRequiredInterface)) { return false; } DefaultRequiredInterface descr = (DefaultRequiredInterface)obj; - if ( _required.length != descr._required.length ) { + 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(); + 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); @@ -115,14 +127,14 @@ public class DefaultRequiredInterface implements RequiredInterface { @Override public int hashCode() { - return _required.hashCode(); + return required.hashCode(); } @Override public String toString() { StringBuffer buf = new StringBuffer(); buf.append("." + getName() + ":"); - for (Class intf: _required) { + for (Class intf: required) { buf.append("." + intf.getName()); } return buf.toString();