1 22 23 package org.continuent.sequoia.common.jmx.notifications; 24 25 import java.io.IOException ; 26 import java.io.StringReader ; 27 import java.io.StringWriter ; 28 import java.util.ArrayList ; 29 import java.util.Enumeration ; 30 import java.util.Hashtable ; 31 import java.util.Iterator ; 32 33 import org.dom4j.Document; 34 import org.dom4j.DocumentHelper; 35 import org.dom4j.Element; 36 import org.dom4j.io.OutputFormat; 37 import org.dom4j.io.SAXReader; 38 import org.dom4j.io.XMLWriter; 39 40 77 public class JmxNotification 78 { 79 82 private static final String ELT_jmxevent = "jmxevent"; 83 private static final String ELT_info = "info"; 84 private static final String ELT_source = "source"; 85 private static final String ELT_data = "data"; 86 private static final String ELT_priority = "priority"; 87 private static final String ELT_sequence = "sequence"; 88 private static final String ELT_type = "type"; 89 private static final String ELT_description = "description"; 90 private static final String ELT_time = "time"; 91 private static final String ELT_controller = "controller"; 92 private static final String ELT_mbean = "mbean"; 93 private static final String ELT_class = "class"; 94 private static final String ELT_server = "server"; 95 private static final String ELT_value = "value"; 96 97 private static final String ATT_ip = "ip"; 98 private static final String ATT_port = "port"; 99 private static final String ATT_name = "name"; 100 101 String priority; 102 String sequence; 103 String type; 104 String description; 105 String controllerName; 106 String mbeanClass; 107 String mbeanName; 108 String mbeanServerIP; 109 String mbeanServerPort; 110 String time; 111 Hashtable dataList; 112 113 128 public JmxNotification(String priority, String sequence, String type, 129 String description, String time, String controllerName, 130 String mbeanClass, String mbeanName, String mbeanServerIP, 131 String mbeanServerPort, Hashtable dataList) 132 { 133 this.priority = priority; 134 this.sequence = sequence; 135 this.type = type; 136 this.description = description; 137 this.controllerName = controllerName; 138 this.mbeanClass = mbeanClass; 139 this.mbeanName = mbeanName; 140 this.mbeanServerIP = mbeanServerIP; 141 this.mbeanServerPort = mbeanServerPort; 142 this.time = time; 143 this.dataList = dataList; 144 } 145 146 155 public static JmxNotification createNotificationFromXmlString(String xml) 156 throws Exception 157 { 158 StringReader sreader = new StringReader (xml); 159 SAXReader reader = new SAXReader(); 160 Document document = reader.read(sreader); 161 return createNotificationFromXml(document); 162 } 163 164 167 public Hashtable getDataList() 168 { 169 return dataList; 170 } 171 172 178 public String getDataValue(String key) 179 { 180 if (!dataList.containsKey(key)) 181 return null; 182 else 183 return (String ) ((ArrayList ) dataList.get(key)).get(0); 184 } 185 186 189 public String getControllerName() 190 { 191 return controllerName; 192 } 193 194 199 public String getControllerJmxName() 200 { 201 return getMbeanServerIP() + ":" + getMbeanServerPort(); 202 } 203 204 207 public void setControllerName(String controllerName) 208 { 209 this.controllerName = controllerName; 210 } 211 212 215 public String getDescription() 216 { 217 return description; 218 } 219 220 223 public void setDescription(String description) 224 { 225 this.description = description; 226 } 227 228 231 public String getMbeanClass() 232 { 233 return mbeanClass; 234 } 235 236 239 public void setMbeanClass(String mbeanClass) 240 { 241 this.mbeanClass = mbeanClass; 242 } 243 244 247 public String getMbeanName() 248 { 249 return mbeanName; 250 } 251 252 255 public void setMbeanName(String mbeanName) 256 { 257 this.mbeanName = mbeanName; 258 } 259 260 263 public String getMbeanServerIP() 264 { 265 return mbeanServerIP; 266 } 267 268 271 public void setMbeanServerIP(String mbeanServerIP) 272 { 273 this.mbeanServerIP = mbeanServerIP; 274 } 275 276 279 public String getMbeanServerPort() 280 { 281 return mbeanServerPort; 282 } 283 284 287 public void setMbeanServerPort(String mbeanServerPort) 288 { 289 this.mbeanServerPort = mbeanServerPort; 290 } 291 292 295 public String getPriority() 296 { 297 return priority; 298 } 299 300 303 public void setPriority(String priority) 304 { 305 this.priority = priority; 306 } 307 308 311 public String getSequence() 312 { 313 return sequence; 314 } 315 316 319 public void setSequence(String sequence) 320 { 321 this.sequence = sequence; 322 } 323 324 327 public String getType() 328 { 329 return type; 330 } 331 332 335 public void setType(String type) 336 { 337 this.type = type; 338 } 339 340 346 public static JmxNotification createNotificationFromXml(Document document) 347 { 348 String priority = document.selectSingleNode( 349 "//" + ELT_jmxevent + "/" + ELT_info + "/" + ELT_priority).getText(); 350 String sequence = document.selectSingleNode( 351 "//" + ELT_jmxevent + "/" + ELT_info + "/" + ELT_sequence).getText(); 352 String type = document.selectSingleNode( 353 "//" + ELT_jmxevent + "/" + ELT_info + "/" + ELT_type).getText(); 354 String description = document.selectSingleNode( 355 "//" + ELT_jmxevent + "/" + ELT_info + "/" + ELT_description).getText(); 356 String time = document.selectSingleNode( 357 "//" + ELT_jmxevent + "/" + ELT_info + "/" + ELT_time).getText(); 358 359 String controllerName = document.selectSingleNode( 360 "//" + ELT_jmxevent + "/" + ELT_source + "/" + ELT_controller) 361 .getText(); 362 String mbeanclass = document.selectSingleNode( 363 "//" + ELT_jmxevent + "/" + ELT_source + "/" + ELT_mbean + "/" 364 + ELT_class).getText(); 365 String mbeanname = document.selectSingleNode( 366 "//" + ELT_jmxevent + "/" + ELT_source + "/" + ELT_mbean).valueOf( 367 "@" + ATT_name); 368 String serverip = document.selectSingleNode( 369 "//" + ELT_jmxevent + "/" + ELT_source + "/" + ELT_mbean + "/" 370 + ELT_server).valueOf("@" + ATT_ip); 371 String serverport = document.selectSingleNode( 372 "//" + ELT_jmxevent + "/" + ELT_source + "/" + ELT_mbean + "/" 373 + ELT_server).valueOf("@" + ATT_port); 374 375 Element root = document.getRootElement(); 376 377 Hashtable dataList = new Hashtable (); 378 for (Iterator i = root.elementIterator(ELT_data); i.hasNext();) 379 { 380 Element data = (Element) i.next(); 381 ArrayList list = new ArrayList (); 382 for (Iterator j = data.elementIterator(ELT_value); j.hasNext();) 383 { 384 Element value = (Element) j.next(); 385 list.add(value.getTextTrim()); 386 } 387 dataList.put(data.valueOf("@" + ATT_name), list); 388 } 389 JmxNotification notif = new JmxNotification(priority, sequence, type, 390 description, time, controllerName, mbeanclass, mbeanname, serverip, 391 serverport, dataList); 392 return notif; 393 } 394 395 400 public Document toXmlDocument() 401 { 402 Document document = DocumentHelper.createDocument(); 403 Element root = document.addElement(ELT_jmxevent); 404 405 Element info = root.addElement(ELT_info); 407 info.addElement(ELT_priority).addText(priority); 408 info.addElement(ELT_sequence).addText(sequence); 409 info.addElement(ELT_type).addText(type); 410 info.addElement(ELT_description).addText(description); 411 info.addElement(ELT_time).addText(time); 412 413 Element source = root.addElement(ELT_source); 415 source.addElement(ELT_controller).addText(controllerName); 416 417 Element mbean = source.addElement(ELT_mbean).addAttribute(ATT_name, 419 mbeanName); 420 mbean.addElement(ELT_class).addText(mbeanClass); 421 mbean.addElement(ELT_server).addAttribute(ATT_ip, mbeanServerIP) 422 .addAttribute(ATT_port, mbeanServerPort); 423 424 Enumeration keys = dataList.keys(); 426 while (keys.hasMoreElements()) 427 { 428 String key = (String ) keys.nextElement(); 429 Element data = root.addElement(ELT_data).addAttribute(ATT_name, key); 430 431 Object entry = dataList.get(key); 432 if (entry instanceof ArrayList ) 433 { 434 ArrayList list = (ArrayList ) entry; 435 for (int i = 0; i < list.size(); i++) 436 data.addElement(ELT_value).addText((String ) list.get(i)); 437 } 438 else if (entry instanceof String []) 439 { 440 String [] list = (String []) entry; 441 for (int i = 0; i < list.length; i++) 442 data.addElement(ELT_value).addText(list[i]); 443 } 444 else if (entry instanceof String ) 445 { 446 data.addElement(ELT_value).addText((String ) entry); 447 } 448 } 449 return document; 450 } 451 452 455 public String toString() 456 { 457 StringWriter swriter = new StringWriter (); 458 OutputFormat format = OutputFormat.createCompactFormat(); 459 XMLWriter writer = new XMLWriter(swriter, format); 460 try 461 { 462 writer.write(toXmlDocument()); 463 } 464 catch (IOException e) 465 { 466 } 468 return swriter.getBuffer().toString(); 469 } 470 471 474 public String getTime() 475 { 476 return time; 477 } 478 479 482 public void setTime(String time) 483 { 484 this.time = time; 485 } 486 487 490 public void setDataList(Hashtable dataList) 491 { 492 this.dataList = dataList; 493 } 494 495 } | Popular Tags |