/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /* $Id$ */ package org.apache.fop.events; import java.util.Collections; import java.util.EventObject; import java.util.Locale; import java.util.Map; import org.apache.fop.events.model.EventSeverity; /** * This is the default event class used by this package. Each event has a unique event identifier * (a String), a severity indicator, a locale (for formatting event messages), and a map of * name/value pairs. */ public class Event extends EventObject { private static final long serialVersionUID = -1310594422868258083L; private String eventGroupID; private String eventKey; private EventSeverity severity; private Locale locale; private Map<String, Object> params; /** * Creates a new Event using default locale. * @param source the object that creates the event * @param eventID the unique identifier of the event * @param severity the severity level * @param params the event parameters (a map of name/value pairs) */ public Event(Object source, String eventID, EventSeverity severity, Map<String, Object> params) { this (source, eventID, severity, Locale.getDefault(), params); } /** * Creates a new Event. * @param source the object that creates the event * @param eventID the unique identifier of the event * @param severity the severity level * @param locale to use when formatting event (or null, which means use default locale) * @param params the event parameters (a map of name/value pairs) */ public Event(Object source, String eventID, EventSeverity severity, Locale locale, Map<String, Object> params) { super(source); int pos = eventID.lastIndexOf('.'); if (pos < 0 || pos == eventID.length() - 1) { eventKey = eventID; } else { eventGroupID = eventID.substring(0, pos); eventKey = eventID.substring(pos + 1); } setSeverity(severity); this.locale = locale; this.params = params; } /** * Returns the event identifier. * @return the event identifier */ public String getEventID() { if (eventGroupID == null) { return eventKey; } else { return eventGroupID + '.' + eventKey; } } /** * Returns the event group identifier. * @return the event group identifier (or null if there is no group identifier) */ public String getEventGroupID() { return eventGroupID; } /** * Returns the event key. * @return the event key */ public String getEventKey() { return eventKey; } /** * Returns the severity level. * @return the severity level */ public EventSeverity getSeverity() { return this.severity; } /** * Sets the event's severity level. This method can be used to increase or decrease the * severity level in a listener. * @param severity the new event severity */ public void setSeverity(EventSeverity severity) { this.severity = severity; } /** * Returns the locale. * @return the locale */ public Locale getLocale() { return this.locale; } /** * Returns a parameter. * @param key the key to the parameter * @return the parameter value or null if no value with this key is found */ public Object getParam(String key) { if (this.params != null) { return this.params.get(key); } else { return null; } } /** * Returns an unmodifiable {@link java.util.Map} with all event parameters. * @return the parameter map */ public Map<String, Object> getParams() { return Collections.unmodifiableMap(this.params); } /** * Creates and returns a fluent builder object for building up the parameter map. * @return the parameter builder */ public static ParamsBuilder paramsBuilder() { return new ParamsBuilder(); } /** * This class is a fluent builder class for building up the parameter map. */ public static class ParamsBuilder { private Map<String, Object> params; /** * Adds a new parameter (a name/value pair). * @param name the name of the parameter * @param value the value of the parameter * @return this instance */ public ParamsBuilder param(String name, Object value) { if (this.params == null) { this.params = new java.util.HashMap<String, Object>(); } this.params.put(name, value); return this; } /** * Returns the accumulated parameter map. * @return the accumulated parameter map */ public Map<String, Object> build() { return this.params; } } }