00001
00025
package org.objectweb.cjdbc.common.jmx.notifications;
00026
00027
import java.io.IOException;
00028
import java.io.StringReader;
00029
import java.io.StringWriter;
00030
import java.util.ArrayList;
00031
import java.util.Enumeration;
00032
import java.util.Hashtable;
00033
import java.util.Iterator;
00034
00035
import org.dom4j.Document;
00036
import org.dom4j.DocumentHelper;
00037
import org.dom4j.Element;
00038
import org.dom4j.io.OutputFormat;
00039
import org.dom4j.io.SAXReader;
00040
import org.dom4j.io.XMLWriter;
00041
00079 public class JmxNotification
00080 {
00084 private static final String
ELT_jmxevent =
"jmxevent";
00085 private static final String
ELT_info =
"info";
00086 private static final String
ELT_source =
"source";
00087 private static final String
ELT_data =
"data";
00088 private static final String
ELT_priority =
"priority";
00089 private static final String
ELT_sequence =
"sequence";
00090 private static final String
ELT_type =
"type";
00091 private static final String
ELT_description =
"description";
00092 private static final String
ELT_time =
"time";
00093 private static final String
ELT_controller =
"controller";
00094 private static final String
ELT_mbean =
"mbean";
00095 private static final String
ELT_class =
"class";
00096 private static final String
ELT_server =
"server";
00097 private static final String
ELT_value =
"value";
00098
00099 private static final String
ATT_ip =
"ip";
00100 private static final String
ATT_port =
"port";
00101 private static final String
ATT_name =
"name";
00102
00103 String
priority;
00104 String
sequence;
00105 String
type;
00106 String
description;
00107 String
controllerName;
00108 String
mbeanClass;
00109 String
mbeanName;
00110 String
mbeanServerIP;
00111 String
mbeanServerPort;
00112 String
time;
00113 Hashtable
dataList;
00114
00130 public JmxNotification(String priority, String sequence, String type,
00131 String description, String time, String controllerName,
00132 String mbeanClass, String mbeanName, String mbeanServerIP,
00133 String mbeanServerPort, Hashtable dataList)
00134 {
00135
this.priority = priority;
00136
this.sequence = sequence;
00137
this.type = type;
00138
this.description = description;
00139
this.controllerName = controllerName;
00140
this.mbeanClass = mbeanClass;
00141
this.mbeanName = mbeanName;
00142
this.mbeanServerIP = mbeanServerIP;
00143
this.mbeanServerPort = mbeanServerPort;
00144
this.time = time;
00145
this.dataList = dataList;
00146 }
00147
00157 public static JmxNotification createNotificationFromXmlString(String xml)
00158
throws Exception
00159 {
00160 StringReader sreader =
new StringReader(xml);
00161 SAXReader reader =
new SAXReader();
00162 Document document = reader.read(sreader);
00163
return createNotificationFromXml(document);
00164 }
00165
00169 public Hashtable
getDataList()
00170 {
00171
return dataList;
00172 }
00173
00180 public String
getDataValue(String key)
00181 {
00182
if(!
dataList.containsKey(key))
00183
return null;
00184
else
00185
return(String) ((ArrayList)
dataList.get(key)).get(0);
00186 }
00187
00191 public String
getControllerName()
00192 {
00193
return controllerName;
00194 }
00195
00201 public String
getControllerJmxName()
00202 {
00203
return getMbeanServerIP()+
":"+
getMbeanServerPort();
00204 }
00205
00209 public void setControllerName(String controllerName)
00210 {
00211
this.controllerName = controllerName;
00212 }
00213
00217 public String
getDescription()
00218 {
00219
return description;
00220 }
00221
00225 public void setDescription(String description)
00226 {
00227
this.description = description;
00228 }
00229
00233 public String
getMbeanClass()
00234 {
00235
return mbeanClass;
00236 }
00237
00241 public void setMbeanClass(String mbeanClass)
00242 {
00243
this.mbeanClass = mbeanClass;
00244 }
00245
00249 public String
getMbeanName()
00250 {
00251
return mbeanName;
00252 }
00253
00257 public void setMbeanName(String mbeanName)
00258 {
00259
this.mbeanName = mbeanName;
00260 }
00261
00265 public String
getMbeanServerIP()
00266 {
00267
return mbeanServerIP;
00268 }
00269
00273 public void setMbeanServerIP(String mbeanServerIP)
00274 {
00275
this.mbeanServerIP = mbeanServerIP;
00276 }
00277
00281 public String
getMbeanServerPort()
00282 {
00283
return mbeanServerPort;
00284 }
00285
00289 public void setMbeanServerPort(String mbeanServerPort)
00290 {
00291
this.mbeanServerPort = mbeanServerPort;
00292 }
00293
00297 public String
getPriority()
00298 {
00299
return priority;
00300 }
00301
00305 public void setPriority(String priority)
00306 {
00307
this.priority = priority;
00308 }
00309
00313 public String
getSequence()
00314 {
00315
return sequence;
00316 }
00317
00321 public void setSequence(String sequence)
00322 {
00323
this.sequence = sequence;
00324 }
00325
00329 public String
getType()
00330 {
00331
return type;
00332 }
00333
00337 public void setType(String type)
00338 {
00339
this.type = type;
00340 }
00341
00348 public static JmxNotification createNotificationFromXml(Document document)
00349 {
00350 String
priority = document.selectSingleNode(
00351
"//" +
ELT_jmxevent +
"/" +
ELT_info +
"/" +
ELT_priority).getText();
00352 String
sequence = document.selectSingleNode(
00353
"//" +
ELT_jmxevent +
"/" +
ELT_info +
"/" +
ELT_sequence).getText();
00354 String
type = document.selectSingleNode(
00355
"//" +
ELT_jmxevent +
"/" +
ELT_info +
"/" +
ELT_type).getText();
00356 String
description = document.selectSingleNode(
00357
"//" +
ELT_jmxevent +
"/" +
ELT_info +
"/" +
ELT_description).getText();
00358 String
time = document.selectSingleNode(
00359
"//" +
ELT_jmxevent +
"/" +
ELT_info +
"/" +
ELT_time).getText();
00360
00361 String
controllerName = document.selectSingleNode(
00362
"//" +
ELT_jmxevent +
"/" +
ELT_source +
"/" +
ELT_controller)
00363 .getText();
00364 String mbeanclass = document.selectSingleNode(
00365
"//" +
ELT_jmxevent +
"/" +
ELT_source +
"/" +
ELT_mbean +
"/"
00366 +
ELT_class).getText();
00367 String mbeanname = document.selectSingleNode(
00368
"//" +
ELT_jmxevent +
"/" +
ELT_source +
"/" +
ELT_mbean).valueOf(
00369
"@" +
ATT_name);
00370 String serverip = document.selectSingleNode(
00371
"//" +
ELT_jmxevent +
"/" +
ELT_source +
"/" + ELT_mbean +
"/"
00372 +
ELT_server).valueOf(
"@" +
ATT_ip);
00373 String serverport = document.selectSingleNode(
00374
"//" +
ELT_jmxevent +
"/" +
ELT_source +
"/" + ELT_mbean +
"/"
00375 + ELT_server).valueOf(
"@" +
ATT_port);
00376
00377 Element root = document.getRootElement();
00378
00379 Hashtable
dataList =
new Hashtable();
00380
for (Iterator i = root.elementIterator(
ELT_data); i.hasNext();)
00381 {
00382 Element data = (Element) i.next();
00383 ArrayList list =
new ArrayList();
00384
for (Iterator j = data.elementIterator(
ELT_value); j.hasNext();)
00385 {
00386 Element value = (Element) j.next();
00387 list.add(value.getTextTrim());
00388 }
00389 dataList.put(data.valueOf(
"@" +
ATT_name), list);
00390 }
00391
JmxNotification notif =
new JmxNotification(priority, sequence, type,
00392 description, time, controllerName, mbeanclass, mbeanname, serverip,
00393 serverport, dataList);
00394
return notif;
00395 }
00396
00402 public Document
toXmlDocument()
00403 {
00404 Document document = DocumentHelper.createDocument();
00405 Element root = document.addElement(
ELT_jmxevent);
00406
00407
00408 Element info = root.addElement(
ELT_info);
00409 info.addElement(
ELT_priority).addText(
priority);
00410 info.addElement(
ELT_sequence).addText(
sequence);
00411 info.addElement(
ELT_type).addText(
type);
00412 info.addElement(
ELT_description).addText(
description);
00413 info.addElement(
ELT_time).addText(
time);
00414
00415
00416 Element source = root.addElement(
ELT_source);
00417 source.addElement(
ELT_controller).addText(
controllerName);
00418
00419
00420 Element mbean = source.addElement(
ELT_mbean).addAttribute(
ATT_name,
00421
mbeanName);
00422 mbean.addElement(
ELT_class).addText(
mbeanClass);
00423 mbean.addElement(
ELT_server).addAttribute(
ATT_ip,
mbeanServerIP)
00424 .addAttribute(
ATT_port,
mbeanServerPort);
00425
00426
00427 Enumeration keys =
dataList.keys();
00428
while (keys.hasMoreElements())
00429 {
00430 String key = (String) keys.nextElement();
00431 Element data = root.addElement(
ELT_data).addAttribute(
ATT_name, key);
00432
00433 Object entry =
dataList.get(key);
00434
if (entry instanceof ArrayList)
00435 {
00436 ArrayList list = (ArrayList) entry;
00437
for (
int i = 0; i < list.size(); i++)
00438 data.addElement(
ELT_value).addText((String) list.get(i));
00439 }
00440
else if (entry instanceof String[])
00441 {
00442 String[] list = (String[]) entry;
00443
for (
int i = 0; i < list.length; i++)
00444 data.addElement(
ELT_value).addText(list[i]);
00445 }
00446
else if (entry instanceof String)
00447 {
00448 data.addElement(
ELT_value).addText((String) entry);
00449 }
00450 }
00451
return document;
00452 }
00453
00457 public String
toString()
00458 {
00459 StringWriter swriter =
new StringWriter();
00460 OutputFormat format = OutputFormat.createCompactFormat();
00461 XMLWriter writer =
new XMLWriter(swriter, format);
00462
try
00463 {
00464 writer.write(
toXmlDocument());
00465 }
00466
catch (IOException e)
00467 {
00468
00469 }
00470
return swriter.getBuffer().toString();
00471 }
00472
00476 public String
getTime()
00477 {
00478
return time;
00479 }
00480
00484 public void setTime(String time)
00485 {
00486
this.time = time;
00487 }
00488
00492 public void setDataList(Hashtable dataList)
00493 {
00494
this.dataList = dataList;
00495 }
00496 }