1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 package org.archive.hcc.util.jmx;
24
25 import javax.management.MBeanException;
26 import javax.management.MBeanParameterInfo;
27 import javax.management.ReflectionException;
28 import javax.management.openmbean.OpenMBeanOperationInfo;
29
30 public abstract class MBeanOperationBase implements
31 MBeanOperation {
32
33 private OpenMBeanOperationInfo info;
34
35 public MBeanOperationBase(OpenMBeanOperationInfo info) {
36 this.info = info;
37 }
38
39 public OpenMBeanOperationInfo getInfo() {
40 return this.info;
41 }
42
43 public boolean matches(String name, String[] signature) {
44 if (!name.equals(this.info.getName())) {
45 return false;
46 }
47 MBeanParameterInfo[] infoSignature = this.info.getSignature();
48 if (signature.length != infoSignature.length) {
49 return false;
50 }
51
52 for (int i = 0; i < signature.length; i++) {
53 boolean namesMatch = signature[i]
54 .equals(infoSignature[i].getType());
55 if (!namesMatch) {
56 return false;
57 }
58 }
59
60 return true;
61
62 }
63
64 public boolean validate(String name, Object[] parameters, String[] signature) {
65 if (!name.equals(this.info.getName())) {
66 return false;
67 }
68 MBeanParameterInfo[] infoSignature = this.info.getSignature();
69 if (signature.length != infoSignature.length) {
70 return false;
71 }
72
73 for (int i = 0; i < signature.length; i++) {
74 boolean namesMatch = signature[i]
75 .equals(infoSignature[i].getName());
76 boolean typesMatch = parameters[i].getClass().getName().equals(
77 infoSignature[i].getType());
78
79 if (!namesMatch || !typesMatch) {
80 return false;
81 }
82 }
83
84 return true;
85
86 }
87
88 public MBeanInvocation createInvocation(
89 Object[] parameters,
90 String[] signature) throws MBeanException, ReflectionException {
91
92 return getInvocation(parameters);
93 }
94
95 protected abstract MBeanInvocation getInvocation(Object[] params);
96
97 }