EventData.java revision f044a8d4614f434c5643f951e4c97dbd51c937f6
1package org.slf4j.ext; 2 3 4import java.io.Serializable; 5import java.io.ByteArrayInputStream; 6import java.io.ByteArrayOutputStream; 7import java.util.Date; 8import java.util.HashMap; 9import java.util.Iterator; 10import java.util.Map; 11import java.beans.XMLDecoder; 12import java.beans.XMLEncoder; 13import java.beans.ExceptionListener; 14 15/** 16 * Base class for Event Data. Event Data contains data to be logged about an event. Users may 17 * extend this class for each EventType they want to log. 18 * 19 * @author Ralph Goers 20 */ 21public class EventData implements Serializable 22{ 23 private Map<String, Object> eventData = new HashMap<String,Object>(); 24 public static final String EVENT_MESSAGE = "EventMessage"; 25 public static final String EVENT_TYPE = "EventType"; 26 public static final String EVENT_DATETIME = "EventDateTime"; 27 public static final String EVENT_ID = "EventId"; 28 29 /** 30 * Default Constructor 31 */ 32 public EventData() 33 { 34 } 35 36 /** 37 * Constructor to create event data from a Map. 38 * @param map The event data. 39 */ 40 public EventData(Map<String, Object> map) 41 { 42 eventData.putAll(map); 43 } 44 45 /** 46 * Construct from a serialized form of the Map containing the RequestInfo elements 47 * @param xml The serialized form of the RequestInfo Map. 48 */ 49 public EventData(String xml) 50 { 51 ByteArrayInputStream bais = new ByteArrayInputStream(xml.getBytes()); 52 try 53 { 54 XMLDecoder decoder = new XMLDecoder(bais); 55 this.eventData = (Map<String, Object>)decoder.readObject(); 56 } 57 catch (Exception e) 58 { 59 throw new EventException("Error decoding " + xml, e); 60 } 61 } 62 63 /** 64 * Serialize all the EventData items into an XML representation. 65 * @return an XML String containing all the EventDAta items. 66 */ 67 public String toXML() 68 { 69 return toXML(eventData); 70 } 71 72 /** 73 * Serialize all the EventData items into an XML representation. 74 * @return an XML String containing all the EventDAta items. 75 */ 76 public static String toXML(Map<String, Object>map) 77 { 78 ByteArrayOutputStream baos = new ByteArrayOutputStream(); 79 try 80 { 81 XMLEncoder encoder = new XMLEncoder(baos); 82 encoder.setExceptionListener(new ExceptionListener() 83 { 84 public void exceptionThrown(Exception exception) 85 { 86 exception.printStackTrace(); 87 } 88 }); 89 encoder.writeObject(map); 90 encoder.close(); 91 return baos.toString(); 92 } 93 catch (Exception e) 94 { 95 e.printStackTrace(); 96 return null; 97 } 98 } 99 100 public String getEventId() 101 { 102 return (String)this.eventData.get(EVENT_ID); 103 } 104 105 public void setEventId(String eventId) 106 { 107 if (eventId == null) 108 { 109 throw new IllegalArgumentException("eventId cannot be null"); 110 } 111 this.eventData.put(EVENT_ID, eventId); 112 } 113 114 public String getMessage() 115 { 116 return (String)this.eventData.get(EVENT_MESSAGE); 117 } 118 119 public void setMessage(String message) 120 { 121 this.eventData.put(EVENT_MESSAGE, message); 122 } 123 124 public Date getEventDateTime() 125 { 126 return (Date)this.eventData.get(EVENT_DATETIME); 127 } 128 129 public void setEventDateTime(Date eventDateTime) 130 { 131 this.eventData.put(EVENT_DATETIME, eventDateTime); 132 } 133 134 public void setEventType(String eventType) 135 { 136 this.eventData.put(EVENT_TYPE, eventType); 137 } 138 139 public String getEventType() 140 { 141 return (String)this.eventData.get(EVENT_TYPE); 142 } 143 144 145 public void put(String name, Serializable obj) 146 { 147 this.eventData.put(name, obj); 148 } 149 150 public Serializable get(String name) 151 { 152 return (Serializable) this.eventData.get(name); 153 } 154 155 public void putAll(Map data) 156 { 157 this.eventData.putAll(data); 158 } 159 160 public int getSize() 161 { 162 return this.eventData.size(); 163 } 164 165 public Iterator getEntrySetIterator() 166 { 167 return this.eventData.entrySet().iterator(); 168 } 169 170 public Map getEventMap() 171 { 172 return this.eventData; 173 } 174 175 public String toString() 176 { 177 return toXML(); 178 } 179 180 public boolean equals(Object o) 181 { 182 if (this == o) return true; 183 if (!(o instanceof EventData || o instanceof Map)) return false; 184 Map<String, Object>map = (o instanceof EventData) ? ((EventData)o).getEventMap() : (Map<String, Object>)o; 185 186 return this.eventData.equals(map); 187 } 188 189 public int hashCode() 190 { 191 return this.eventData.hashCode(); 192 } 193}