X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;f=system%2Fgeneral%2Fsrc%2Fmain%2Fjava%2Forg%2Fwamblee%2Fsystem%2Fcore%2FDefaultRequiredInterface.java;h=4e0db74be375620f8f60dd5b383a2e1a5017de32;hb=e1975449f1bf16ccb441632d68e440f3e3704a79;hp=32276a25cc26d7237e479f379b5b94309773e3ae;hpb=4845c677310814de4c98e22aad483e49b9dfc594;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 32276a25..4e0db74b 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,9 +17,12 @@ 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; @@ -28,7 +31,17 @@ public class DefaultRequiredInterface implements RequiredInterface { } public DefaultRequiredInterface(String aName, Class[] aInterfaces) { + this(aName, aInterfaces, false); + } + + public DefaultRequiredInterface(String aName, Class aInterface, boolean aIsOptional) { + this(aName, new Class[] { aInterface }, aIsOptional ); + } + + + public DefaultRequiredInterface(String aName, Class[] aInterfaces, boolean aIsOptional) { _name = aName; + _optional = aIsOptional; _required = aInterfaces; } @@ -37,6 +50,11 @@ public class DefaultRequiredInterface implements RequiredInterface { return _name; } + @Override + public boolean isOptional() { + return _optional; + } + @Override public boolean implementedBy(ProvidedInterface aDescriptor) { Class[] provided = aDescriptor.getInterfaceTypes(); @@ -58,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) { @@ -74,19 +94,19 @@ public class DefaultRequiredInterface implements RequiredInterface { @Override public void setProvider(ProvidedInterface aProvider) { + assert aProvider != null; + assert implementedBy(aProvider); _provider = aProvider; } - + @Override - public T getImplementation(Class aClass) { - if ( _provider == null ) { - return null; - } - return (T)_provider.getImplementation(); + 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; } @@ -113,6 +133,7 @@ public class DefaultRequiredInterface implements RequiredInterface { @Override public String toString() { StringBuffer buf = new StringBuffer(); + buf.append("." + getName() + ":"); for (Class intf: _required) { buf.append("." + intf.getName()); }