now distinguishing between provided and required service and added
[utils] / system / general / src / main / java / org / wamblee / system / AbstractServiceDescriptor.java
1 package org.wamblee.system;
2
3 import java.util.Arrays;
4
5 /**
6  * Default implementation of a service descriptor.
7  */
8 public abstract class AbstractServiceDescriptor implements ServiceDescriptor {
9         
10         private String _name; 
11         private Class[] _interfaces; 
12         
13         /**
14          * Constructs the descriptor. 
15          * @param aInterface Type of service. 
16          */
17         public AbstractServiceDescriptor(String aName, Class aInterface) {
18                 _name = aName; 
19                 _interfaces = new Class[] { aInterface };  
20         }
21         
22         public AbstractServiceDescriptor(String aName, Class[] aInterfaces) {
23                 _name = aName; 
24                 _interfaces = Arrays.copyOf(aInterfaces, aInterfaces.length);  
25         }
26
27         @Override
28         public String getName() {
29                 return _name;
30         }
31         
32         @Override
33         public Class[] getInterfaceTypes() {
34                 return _interfaces;
35         }
36         
37         @Override
38         public boolean equals(Object obj) {
39                 if ( !(obj instanceof AbstractServiceDescriptor)) { 
40                         return false; 
41                 }
42                 AbstractServiceDescriptor descr = (AbstractServiceDescriptor)obj;
43                 if ( _interfaces.length != descr._interfaces.length ) { 
44                         return false; 
45                 }
46                 String[] interfaces1 = new String[_interfaces.length];
47                 String[] interfaces2 = new String[_interfaces.length];
48                 for (int i = 0; i < _interfaces.length; i++) {  
49                         interfaces1[i] = _interfaces[i].getName();
50                         interfaces2[i] = descr._interfaces[i].getName();
51                 }
52                 Arrays.sort(interfaces1);
53                 Arrays.sort(interfaces2);
54                 return Arrays.equals(interfaces1, interfaces2);
55         }
56
57         @Override
58         public int hashCode() {
59                 return _interfaces.hashCode(); 
60         }
61         
62         @Override
63         public String toString() {
64                 StringBuffer buf = new StringBuffer();
65                 for (Class intf: _interfaces) { 
66                         buf.append("." + intf.getName());
67                 }
68                 return buf.toString();
69         }
70 }