X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;f=trunk%2Fsystem%2Fgeneral%2Fsrc%2Fmain%2Fjava%2Forg%2Fwamblee%2Fsystem%2Fcore%2FDefaultProvidedInterface.java;h=c790567300206015123a27ee8bcf721b34c693a2;hb=0947230f5c04f78e5fe2e4cb6e8b6b0e734d93a5;hp=60c111ed1ecfd14c699924b0f2fb10b8476af2ce;hpb=fcf46bf4ba1749730d584ce0be783c7787fee27c;p=utils diff --git a/trunk/system/general/src/main/java/org/wamblee/system/core/DefaultProvidedInterface.java b/trunk/system/general/src/main/java/org/wamblee/system/core/DefaultProvidedInterface.java index 60c111ed..c7905673 100644 --- a/trunk/system/general/src/main/java/org/wamblee/system/core/DefaultProvidedInterface.java +++ b/trunk/system/general/src/main/java/org/wamblee/system/core/DefaultProvidedInterface.java @@ -15,7 +15,11 @@ */ 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. @@ -26,20 +30,18 @@ public class DefaultProvidedInterface implements ProvidedInterface { private String _name; private Class[] _interfaces; - private Object _implementation; /** * 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) { + public DefaultProvidedInterface(String aName, Class[] aInterfaces) { _name = aName; - _interfaces = Arrays.copyOf(aInterfaces, aInterfaces.length); + _interfaces = Arrays.copyOf(aInterfaces, aInterfaces.length); } @Override @@ -53,48 +55,53 @@ public class DefaultProvidedInterface implements ProvidedInterface { } @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(); - buf.append(getName()); - buf.append(":"); - 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 result = new ArrayList(); + for (Class cls: _interfaces) { + result.add(cls.getName()); + } + Collections.sort(result); + String value = ""; + for (String str: result) { + value += ":" + str; + } + return value; } }