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