1 package org.objectweb.celtix.bus.management.jmx.export.runtime; 2 3 import java.lang.reflect.Constructor ; 4 5 import java.util.HashMap ; 6 import java.util.Map ; 7 8 9 import javax.management.Descriptor ; 10 import javax.management.MBeanOperationInfo ; 11 import javax.management.MBeanParameterInfo ; 12 import javax.management.modelmbean.DescriptorSupport ; 13 import javax.management.modelmbean.ModelMBeanAttributeInfo ; 14 import javax.management.modelmbean.ModelMBeanConstructorInfo ; 15 import javax.management.modelmbean.ModelMBeanInfo ; 16 import javax.management.modelmbean.ModelMBeanInfoSupport ; 17 import javax.management.modelmbean.ModelMBeanNotificationInfo ; 18 import javax.management.modelmbean.ModelMBeanOperationInfo ; 19 20 import org.objectweb.celtix.bus.management.jmx.export.annotation.ManagedAttribute; 21 import org.objectweb.celtix.bus.management.jmx.export.annotation.ManagedOperation; 22 import org.objectweb.celtix.bus.management.jmx.export.annotation.ManagedResource; 23 24 public class ModelMBeanInfoSupporter { 25 protected Map <String , ModelMBeanAttributeInfo > attributes 26 = new HashMap <String , ModelMBeanAttributeInfo >(); 27 protected Map <String , ModelMBeanNotificationInfo > notifications 28 = new HashMap <String , ModelMBeanNotificationInfo >(); 29 protected Map <Constructor , ModelMBeanConstructorInfo > constructors 30 = new HashMap <Constructor , ModelMBeanConstructorInfo >(); 31 protected Map <String , ModelMBeanOperationInfo > operations 32 = new HashMap <String , ModelMBeanOperationInfo >(); 33 34 public ModelMBeanInfoSupporter() { 35 36 } 37 38 public void clear() { 39 attributes.clear(); 40 notifications.clear(); 41 constructors.clear(); 42 operations.clear(); 43 } 44 public void addModelMBeanMethod(String name, 45 String [] paramTypes, 46 String [] paramNames, 47 String [] paramDescs, 48 String description, 49 String rtype, 50 Descriptor desc) { 51 MBeanParameterInfo [] params = null; 52 if (paramTypes != null) { 53 params = new MBeanParameterInfo [ paramTypes.length ]; 54 for (int i = 0; i < paramTypes.length; i++) { 55 params[i] = new MBeanParameterInfo (paramNames[i], 56 paramTypes[i], paramDescs[i]); 57 } 58 } 59 60 operations.put(name, 61 new ModelMBeanOperationInfo (name, 62 description, 63 params, 64 rtype, 65 MBeanOperationInfo.ACTION, 66 desc)); 67 } 68 69 public void addModelMBeanNotification(String [] type, 70 String className, 71 String description, 72 Descriptor desc) { 73 notifications.put(className, 74 new ModelMBeanNotificationInfo (type, className, description, desc)); 75 } 76 77 public boolean checkAttribute(String attributeName) { 78 return attributes.containsKey(attributeName); 79 } 80 81 public void addModelMBeanAttribute(String fname, 82 String ftype, 83 boolean read, 84 boolean write, 85 boolean is, 86 String description, 87 Descriptor desc) { 88 attributes.put(fname, new ModelMBeanAttributeInfo (fname, 89 ftype, 90 description, 91 read, 92 write, 93 is, 94 desc)); 95 } 96 97 98 public void addModelMBeanConstructor(Constructor c, 99 String description, 100 Descriptor desc) { 101 this.constructors.put(c, 102 new ModelMBeanConstructorInfo (description, 103 c, 104 desc)); 105 } 106 107 public ModelMBeanInfo buildModelMBeanInfo(Descriptor desc) { 108 109 ModelMBeanOperationInfo [] ops = 110 (ModelMBeanOperationInfo [])operations.values().toArray(new ModelMBeanOperationInfo [0]); 111 112 ModelMBeanAttributeInfo [] atts = 113 (ModelMBeanAttributeInfo [])attributes.values().toArray(new ModelMBeanAttributeInfo [0]); 114 115 ModelMBeanConstructorInfo [] cons = 116 (ModelMBeanConstructorInfo [])constructors.values().toArray(new ModelMBeanConstructorInfo [0]); 117 118 ModelMBeanNotificationInfo [] notifs = 119 (ModelMBeanNotificationInfo [])notifications.values().toArray(new ModelMBeanNotificationInfo [0]); 120 121 return new ModelMBeanInfoSupport ("javax.management.modelmbean.ModelMBeanInfo", 122 "description", 123 atts, 124 cons, 125 ops, 126 notifs, desc); 127 } 128 129 130 public Descriptor buildAttributeDescriptor( 131 ManagedAttribute ma, String attributeName, boolean is, boolean read, boolean write) { 132 133 Descriptor desc = new DescriptorSupport (); 134 135 desc.setField("name", attributeName); 136 137 desc.setField("descriptorType", "attribute"); 138 139 if (read) { 140 if (is) { 141 desc.setField("getMethod", "is" + attributeName); 142 } else { 143 desc.setField("getMethod", "get" + attributeName); 144 } 145 } 146 147 if (write) { 148 desc.setField("setMethod", "set" + attributeName); 149 } 150 151 152 if (ma.currencyTimeLimit() >= -1) { 153 desc.setField("currencyTimeLimit", ma.currencyTimeLimit()); 154 } 155 156 if (ma.persistPolicy().length() > 0) { 157 desc.setField("persistPolicy", ma.persistPolicy()); 158 } 159 160 if (ma.persistPeriod() >= -1) { 161 desc.setField("persistPeriod", ma.persistPeriod()); 162 } 163 164 if (ma.defaultValue() != null) { 165 desc.setField("default", ma.defaultValue()); 166 } 167 168 return desc; 169 } 170 171 public Descriptor buildOperationDescriptor(ManagedOperation mo, String operationName) { 172 Descriptor desc = new DescriptorSupport (); 173 174 desc.setField("name", operationName); 175 176 desc.setField("descriptorType", "operation"); 177 178 desc.setField("role", "operation"); 179 180 if (mo.description() != null) { 181 desc.setField("displayName", mo.description()); 182 } 183 184 if (mo.currencyTimeLimit() >= -1) { 185 desc.setField("currencyTimeLimit", mo.currencyTimeLimit()); 186 } 187 188 return desc; 189 } 190 191 public Descriptor buildAttributeOperationDescriptor(String operationName) { 192 193 Descriptor desc = new DescriptorSupport (); 194 195 desc.setField("name", operationName); 196 197 desc.setField("descriptorType", "operation"); 198 199 if (operationName.indexOf("set") == 0) { 200 desc.setField("role", "setter"); 201 } else { 202 desc.setField("role", "getter"); 203 } 204 205 return desc; 206 } 207 208 209 public Descriptor buildMBeanDescriptor(ManagedResource mr) { 210 Descriptor desc = new DescriptorSupport (); 211 212 if (mr.componentName() != null) { 213 desc.setField("name", mr.componentName()); 214 } 215 216 desc.setField("descriptorType", "mbean"); 217 218 if (mr.description() != null) { 219 desc.setField("displayName", mr.description()); 220 } 221 222 if (mr.persistLocation() != null) { 223 desc.setField("persistLocation", mr.persistLocation()); 224 } 225 226 if (mr.persistName() != null) { 227 desc.setField("persistName", mr.persistName()); 228 } 229 230 if (mr.log()) { 231 desc.setField("log", "true"); 232 } else { 233 desc.setField("log", "false"); 234 } 235 236 if (mr.persistPolicy() != null) { 237 desc.setField("persistPolicy", mr.persistPolicy()); 238 } 239 240 if (mr.persistPeriod() >= -1) { 241 desc.setField("persistPeriod", mr.persistPeriod()); 242 } 243 244 if (mr.logFile() != null) { 245 desc.setField("logFile", mr.logFile()); 246 } 247 248 if (mr.currencyTimeLimit() >= -1) { 249 desc.setField("currencyTimeLimit", mr.currencyTimeLimit()); 250 } 251 252 return desc; 253 254 } 255 256 257 } 258 259 | Popular Tags |