00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
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
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079 public class JmxNotification
00080 {
00081
00082
00083
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
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
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
00148
00149
00150
00151
00152
00153
00154
00155
00156
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
00166
00167
00168
00169 public Hashtable getDataList()
00170 {
00171 return dataList;
00172 }
00173
00174
00175
00176
00177
00178
00179
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
00188
00189
00190
00191 public String getControllerName()
00192 {
00193 return controllerName;
00194 }
00195
00196
00197
00198
00199
00200
00201 public String getControllerJmxName()
00202 {
00203 return getMbeanServerIP() + ":" + getMbeanServerPort();
00204 }
00205
00206
00207
00208
00209 public void setControllerName(String controllerName)
00210 {
00211 this.controllerName = controllerName;
00212 }
00213
00214
00215
00216
00217 public String getDescription()
00218 {
00219 return description;
00220 }
00221
00222
00223
00224
00225 public void setDescription(String description)
00226 {
00227 this.description = description;
00228 }
00229
00230
00231
00232
00233 public String getMbeanClass()
00234 {
00235 return mbeanClass;
00236 }
00237
00238
00239
00240
00241 public void setMbeanClass(String mbeanClass)
00242 {
00243 this.mbeanClass = mbeanClass;
00244 }
00245
00246
00247
00248
00249 public String getMbeanName()
00250 {
00251 return mbeanName;
00252 }
00253
00254
00255
00256
00257 public void setMbeanName(String mbeanName)
00258 {
00259 this.mbeanName = mbeanName;
00260 }
00261
00262
00263
00264
00265 public String getMbeanServerIP()
00266 {
00267 return mbeanServerIP;
00268 }
00269
00270
00271
00272
00273 public void setMbeanServerIP(String mbeanServerIP)
00274 {
00275 this.mbeanServerIP = mbeanServerIP;
00276 }
00277
00278
00279
00280
00281 public String getMbeanServerPort()
00282 {
00283 return mbeanServerPort;
00284 }
00285
00286
00287
00288
00289 public void setMbeanServerPort(String mbeanServerPort)
00290 {
00291 this.mbeanServerPort = mbeanServerPort;
00292 }
00293
00294
00295
00296
00297 public String getPriority()
00298 {
00299 return priority;
00300 }
00301
00302
00303
00304
00305 public void setPriority(String priority)
00306 {
00307 this.priority = priority;
00308 }
00309
00310
00311
00312
00313 public String getSequence()
00314 {
00315 return sequence;
00316 }
00317
00318
00319
00320
00321 public void setSequence(String sequence)
00322 {
00323 this.sequence = sequence;
00324 }
00325
00326
00327
00328
00329 public String getType()
00330 {
00331 return type;
00332 }
00333
00334
00335
00336
00337 public void setType(String type)
00338 {
00339 this.type = type;
00340 }
00341
00342
00343
00344
00345
00346
00347
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
00397
00398
00399
00400
00401
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
00454
00455
00456
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
00473
00474
00475
00476 public String getTime()
00477 {
00478 return time;
00479 }
00480
00481
00482
00483
00484 public void setTime(String time)
00485 {
00486 this.time = time;
00487 }
00488
00489
00490
00491
00492 public void setDataList(Hashtable dataList)
00493 {
00494 this.dataList = dataList;
00495 }
00496 }