1 package org.csc.phynixx.connection;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 import java.lang.reflect.Method;
25
26 class AbstractDynaProxyFactory {
27
28 private Class[] supportedInterfaces = null;
29 private Class[] requiredInterfaces = null;
30 private Class[] optionalInterfaces = null;
31 private Class[] implementedInterfaces = null;
32
33
34
35
36
37
38
39
40 protected AbstractDynaProxyFactory(Class[] supportedInterfaces, Class[] requiredInterfaces, Class[] optionalInterfaces, boolean synchronize) {
41 if (supportedInterfaces == null || supportedInterfaces.length == 0) {
42 throw new IllegalArgumentException("supportedInterfaces are missing");
43 }
44 this.supportedInterfaces = supportedInterfaces;
45 this.requiredInterfaces = requiredInterfaces;
46 this.implementedInterfaces = supportedInterfaces;
47 this.optionalInterfaces = optionalInterfaces;
48 if (requiredInterfaces == null) {
49 return;
50 }
51 for (int i = 0; i < requiredInterfaces.length; i++) {
52 this.implementedInterfaces = this.addRequiredInterface(this.implementedInterfaces, requiredInterfaces[i]);
53 }
54
55 }
56
57
58 private Class[] addRequiredInterface(Class[] implementedInterfaces, Class requiredInterface) {
59 for (int i = 0; i < implementedInterfaces.length; i++) {
60 if (implementedInterfaces[i].isInterface() &&
61 requiredInterface.isAssignableFrom(implementedInterfaces[i])) {
62 return implementedInterfaces;
63 }
64 }
65
66
67 Class[] xImplementedInterfaces = new Class[implementedInterfaces.length + 1];
68 xImplementedInterfaces[0] = requiredInterface;
69 for (int i = 0; i < implementedInterfaces.length; i++) {
70 xImplementedInterfaces[i + 1] = implementedInterfaces[i];
71 }
72 return xImplementedInterfaces;
73
74 }
75
76
77 protected Class[] getSupportedInterfaces() {
78 return supportedInterfaces;
79 }
80
81
82 protected Class[] getImplementedInterfaces() {
83 return implementedInterfaces;
84 }
85
86 protected Class[] getRequiredInterfaces() {
87 return requiredInterfaces;
88 }
89
90
91 public Class[] getOptionalInterfaces() {
92 return optionalInterfaces;
93 }
94
95 private boolean declaredBy(Method method, Class[] interfaces) {
96 Class declaringClass = method.getDeclaringClass();
97 for (int i = 0; i < interfaces.length; i++) {
98 if (declaringClass.equals(interfaces[i])) {
99 return true;
100 }
101 }
102 return false;
103 }
104
105 protected boolean declaredBySupportedInterface(Method method) {
106 return declaredBy(method, this.getSupportedInterfaces());
107 }
108
109 protected boolean declaredBySystemInterface(Method method) {
110 return declaredBy(method, this.getRequiredInterfaces()) || declaredBy(method, this.getOptionalInterfaces());
111 }
112
113 }