Package org.slf4j.ext

Source Code of org.slf4j.ext.EventData

/*
* Copyright (c) 2004-2009 QOS.ch All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS  IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/

package org.slf4j.ext;

import java.io.Serializable;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.beans.XMLDecoder;
import java.beans.XMLEncoder;
import java.beans.ExceptionListener;

/**
* Base class for Event Data. Event Data contains data to be logged about an
* event. Users may extend this class for each EventType they want to log.
*
* @author Ralph Goers
*/
public class EventData implements Serializable {
 
  private static final long serialVersionUID = 153270778642103985L;
 
  private Map<String, Object> eventData = new HashMap<String, Object>();
  public static final String EVENT_MESSAGE = "EventMessage";
  public static final String EVENT_TYPE = "EventType";
  public static final String EVENT_DATETIME = "EventDateTime";
  public static final String EVENT_ID = "EventId";

  /**
   * Default Constructor
   */
  public EventData() {
  }

  /**
   * Constructor to create event data from a Map.
   *
   * @param map
   *          The event data.
   */
  public EventData(Map<String, Object> map) {
    eventData.putAll(map);
  }

  /**
   * Construct from a serialized form of the Map containing the RequestInfo
   * elements
   *
   * @param xml
   *          The serialized form of the RequestInfo Map.
   */
  @SuppressWarnings("unchecked")
  public EventData(String xml) {
    ByteArrayInputStream bais = new ByteArrayInputStream(xml.getBytes());
    try {
      XMLDecoder decoder = new XMLDecoder(bais);
      this.eventData = (Map<String, Object>) decoder.readObject();
    } catch (Exception e) {
      throw new EventException("Error decoding " + xml, e);
    }
  }

  /**
   * Serialize all the EventData items into an XML representation.
   *
   * @return an XML String containing all the EventDAta items.
   */
  public String toXML() {
    return toXML(eventData);
  }

  /**
   * Serialize all the EventData items into an XML representation.
   *
   * @return an XML String containing all the EventDAta items.
   */
  public static String toXML(Map<String, Object> map) {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    try {
      XMLEncoder encoder = new XMLEncoder(baos);
      encoder.setExceptionListener(new ExceptionListener() {
        public void exceptionThrown(Exception exception) {
          exception.printStackTrace();
        }
      });
      encoder.writeObject(map);
      encoder.close();
      return baos.toString();
    } catch (Exception e) {
      e.printStackTrace();
      return null;
    }
  }

  /**
   * Retrieve the event identifier.
   *
   * @return The event identifier
   */
  public String getEventId() {
    return (String) this.eventData.get(EVENT_ID);
  }

  /**
   * Set the event identifier.
   *
   * @param eventId
   *          The event identifier.
   */
  public void setEventId(String eventId) {
    if (eventId == null) {
      throw new IllegalArgumentException("eventId cannot be null");
    }
    this.eventData.put(EVENT_ID, eventId);
  }

  /**
   * Retrieve the message text associated with this event, if any.
   *
   * @return The message text associated with this event or null if there is
   *         none.
   */
  public String getMessage() {
    return (String) this.eventData.get(EVENT_MESSAGE);
  }

  /**
   * Set the message text associated with this event.
   *
   * @param message
   *          The message text.
   */
  public void setMessage(String message) {
    this.eventData.put(EVENT_MESSAGE, message);
  }

  /**
   * Retrieve the date and time the event occurred.
   *
   * @return The Date associated with the event.
   */
  public Date getEventDateTime() {
    return (Date) this.eventData.get(EVENT_DATETIME);
  }

  /**
   * Set the date and time the event occurred in case it is not the same as when
   * the event was logged.
   *
   * @param eventDateTime
   *          The event Date.
   */
  public void setEventDateTime(Date eventDateTime) {
    this.eventData.put(EVENT_DATETIME, eventDateTime);
  }

  /**
   * Set the type of event that occurred.
   *
   * @param eventType
   *          The type of the event.
   */
  public void setEventType(String eventType) {
    this.eventData.put(EVENT_TYPE, eventType);
  }

  /**
   * Retrieve the type of the event.
   *
   * @return The event type.
   */
  public String getEventType() {
    return (String) this.eventData.get(EVENT_TYPE);
  }

  /**
   * Add arbitrary attributes about the event.
   *
   * @param name
   *          The attribute's key.
   * @param obj
   *          The data associated with the key.
   */
  public void put(String name, Serializable obj) {
    this.eventData.put(name, obj);
  }

  /**
   * Retrieve an event attribute.
   *
   * @param name
   *          The attribute's key.
   * @return The value associated with the key or null if the key is not
   *         present.
   */
  public Serializable get(String name) {
    return (Serializable) this.eventData.get(name);
  }

  /**
   * Populate the event data from a Map.
   *
   * @param data
   *          The Map to copy.
   */
  public void putAll(Map<String, Object> data) {
    this.eventData.putAll(data);
  }

  /**
   * Returns the number of attributes in the EventData.
   *
   * @return the number of attributes in the EventData.
   */
  public int getSize() {
    return this.eventData.size();
  }

  /**
   * Returns an Iterator over all the entries in the EventDAta.
   *
   * @return an Iterator that can be used to access all the event attributes.
   */
  public Iterator<Map.Entry<String, Object>> getEntrySetIterator() {
    return this.eventData.entrySet().iterator();
  }

  /**
   * Retrieve all the attributes in the EventData as a Map. Changes to this map
   * will be reflected in the EventData.
   *
   * @return The Map of attributes in this EventData instance.
   */
  public Map<String, Object> getEventMap() {
    return this.eventData;
  }

  /**
   * Convert the EventData to a String.
   *
   * @return The EventData as a String.
   */
  @Override
  public String toString() {
    return toXML();
  }

  /**
   * Compare two EventData objects for equality.
   *
   * @param o
   *          The Object to compare.
   * @return true if the objects are the same instance or contain all the same
   *         keys and their values.
   */
  @SuppressWarnings("unchecked")
  @Override
  public boolean equals(Object o) {
    if (this == o) {
      return true;
    }
    if (!(o instanceof EventData || o instanceof Map)) {
      return false;
    }
    Map<String, Object> map = (o instanceof EventData) ? ((EventData) o)
        .getEventMap() : (Map<String, Object>) o;

    return this.eventData.equals(map);
  }

  /**
   * Compute the hashCode for this EventData instance.
   *
   * @return The hashcode for this EventData instance.
   */
  @Override
  public int hashCode() {
    return this.eventData.hashCode();
  }
}
TOP

Related Classes of org.slf4j.ext.EventData

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.