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}