package org.wamblee.system;
-public class DefaultRequiredInterfaceDescriptor extends DefaultProvidedInterfaceDescriptor
- implements RequiredInterface {
+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 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;
}
}
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();
+ }
}