1 |
| |
2 |
| |
3 |
| |
4 |
| |
5 |
| |
6 |
| |
7 |
| |
8 |
| |
9 |
| |
10 |
| |
11 |
| |
12 |
| |
13 |
| |
14 |
| |
15 |
| package org.apache.hivemind.lib.pipeline; |
16 |
| |
17 |
| import org.apache.hivemind.service.MethodSignature; |
18 |
| |
19 |
| |
20 |
| |
21 |
| |
22 |
| |
23 |
| |
24 |
| |
25 |
| |
26 |
| class FilterMethodAnalyzer |
27 |
| { |
28 |
| private Class _serviceInterface; |
29 |
| |
30 |
15
| FilterMethodAnalyzer(Class serviceInterface)
|
31 |
| { |
32 |
15
| _serviceInterface = serviceInterface;
|
33 |
| } |
34 |
| |
35 |
13
| public int findServiceInterfacePosition(MethodSignature ms, MethodSignature fms)
|
36 |
| { |
37 |
13
| if (ms.getReturnType() != fms.getReturnType())
|
38 |
1
| return -1;
|
39 |
| |
40 |
12
| if (!ms.getName().equals(fms.getName()))
|
41 |
0
| return -1;
|
42 |
| |
43 |
12
| Class[] filterParameters = fms.getParameterTypes();
|
44 |
12
| int filterParameterCount = filterParameters.length;
|
45 |
12
| Class[] serviceParameters = ms.getParameterTypes();
|
46 |
| |
47 |
12
| if (filterParameterCount != (serviceParameters.length + 1))
|
48 |
1
| return -1;
|
49 |
| |
50 |
| |
51 |
| |
52 |
| |
53 |
| |
54 |
| |
55 |
| |
56 |
11
| boolean found = false;
|
57 |
11
| int result = -1;
|
58 |
| |
59 |
11
| for (int i = 0; i < filterParameterCount; i++)
|
60 |
| { |
61 |
21
| if (filterParameters[i] == _serviceInterface)
|
62 |
| { |
63 |
10
| result = i;
|
64 |
10
| found = true;
|
65 |
10
| break;
|
66 |
| } |
67 |
| } |
68 |
| |
69 |
11
| if (!found)
|
70 |
1
| return -1;
|
71 |
| |
72 |
| |
73 |
| |
74 |
| |
75 |
10
| for (int i = 0; i < result; i++)
|
76 |
| { |
77 |
10
| if (filterParameters[i] != serviceParameters[i])
|
78 |
0
| return -1;
|
79 |
| } |
80 |
| |
81 |
10
| for (int i = result + 1; i < filterParameterCount; i++)
|
82 |
| { |
83 |
2
| if (filterParameters[i] != serviceParameters[i - 1])
|
84 |
0
| return -1;
|
85 |
| } |
86 |
| |
87 |
10
| return result;
|
88 |
| } |
89 |
| |
90 |
| } |