ad63cb4a001f931472b1fc0d399e6808a4e66b30
[utils] / system / general / src / main / java / org / wamblee / system / DefaultRequiredServiceDescriptor.java
1 package org.wamblee.system;
2
3 public class DefaultRequiredServiceDescriptor extends AbstractServiceDescriptor
4                 implements RequiredServiceDescriptor {
5
6         public DefaultRequiredServiceDescriptor(String aName, Class aInterface) {
7                 super(aName, aInterface);
8         }
9
10         public DefaultRequiredServiceDescriptor(String aName, Class[] aInterfaces) {
11                 super(aName, aInterfaces);
12         }
13
14         @Override
15         public boolean implementedBy(ProvidedServiceDescriptor aDescriptor) {
16                 Class[] provided = aDescriptor.getInterfaceTypes();
17                 for (Class required : getInterfaceTypes()) {
18                         if ( !serviceProvided(required, provided)) { 
19                                 return false; 
20                         }
21                 }
22                 // all required interfaces are provided.
23                 return true; 
24         }
25         
26         /**
27          * Check if the required interface is implemented by one of the provided interfaces. 
28          * @param aRequired required interface
29          * @param aProvided Provided interfaces.
30          * @return
31          */
32         private boolean serviceProvided(Class aRequired, Class[] aProvided) { 
33                 for (Class provided: aProvided) {
34                         try {
35                                 provided.asSubclass(aRequired);
36                                 return true; 
37                         } catch (ClassCastException e) {
38                                 // No match, try the next one.
39                         }
40                 }
41                 return false; 
42         }
43
44 }