package org.wamblee.system; public class DefaultRequiredInterfaceDescriptor extends DefaultProvidedInterfaceDescriptor implements RequiredInterfaceDescriptor { public DefaultRequiredInterfaceDescriptor(String aName, Class aInterface) { super(aName, aInterface); } public DefaultRequiredInterfaceDescriptor(String aName, Class[] aInterfaces) { super(aName, aInterfaces); } @Override public boolean implementedBy(ProvidedInterfaceDescriptor aDescriptor) { Class[] provided = aDescriptor.getInterfaceTypes(); for (Class required : getInterfaceTypes()) { if ( !serviceProvided(required, provided)) { return false; } } // all required interfaces are provided. return true; } /** * Check if the required interface is implemented by one of the provided interfaces. * @param aRequired required interface * @param aProvided Provided interfaces. * @return */ private boolean serviceProvided(Class aRequired, Class[] aProvided) { for (Class provided: aProvided) { try { provided.asSubclass(aRequired); return true; } catch (ClassCastException e) { // No match, try the next one. } } return false; } }