Open Source Repository

Home /commons-configuration/commons-configuration-1.7 | Repository Home


org/apache/commons/configuration/event/ConfigurationEvent.java
/*
 * 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.
 */
package org.apache.commons.configuration.event;

import java.util.EventObject;

/**
 <p>
 * An event class for reporting updates on a configuration object.
 </p>
 <p>
 * Event objects of this type are used for &quot;raw&quot; events, i.e.
 * unfiltered modifications of any kind. A level with semantically higher events
 * (e.g. for property changes) may be built on top of this fundamental event
 * mechanism.
 </p>
 <p>
 * Each event can contain the following data:
 <ul>
 <li>A source object, which is usually the configuration object that was
 * modified.</li>
 <li>The event's type. This is a numeric value that corresponds to constant
 * declarations in concrete configuration classes. It describes what exactly has
 * happended.</li>
 <li>If available, the name of the property whose modification caused the
 * event.</li>
 <li>If available, the value of the property that caused this event.</li>
 <li>A flag whether this event was generated before or after the update of
 * the source configuration. A modification of a configuration typically causes
 * two events: one event before and one event after the modification is
 * performed. This allows event listeners to react at the correct point of time.</li>
 </ul>
 </p>
 <p>
 * The following standard events are generated by typical configuration
 * implementations (the constants for the event types are defined in
 <code>{@link org.apache.commons.configuration.AbstractConfiguration}</code>):
 <dl>
 <dt>EVENT_ADD_PROPERTY</dt>
 <dd>This event is triggered for each call of the <code>addProperty()</code>
 * method of a configuration object. It contains the name of the property, to
 * which new data is added, and the value object that is added to this property
 * (this may be an array or a list if multiple values are added).</dd>
 <dt>EVENT_SET_PROPERTY</dt>
 <dd>Calling the <code>setProperty()</code> method triggers this event. The
 * event object stores the name of the affected property and its new value.</dd>
 <dt>EVENT_CLEAR_PROPERTY</dt>
 <dd>If a property is removed from a configuration (by calling the
 <code>clearProperty()</code> method), an event of this type is fired. In
 * this case the event object only stores the name of the removed property, the
 * value is <b>null</b>.</dd>
 <dt>EVENT_CLEAR</dt>
 <dd>This event is fired when the whole configuration is cleared. The
 * corresponding event object contains no additional data.</dd>
 </dl>
 </p>
 *
 @author <a
 * href="http://commons.apache.org/configuration/team-list.html">Commons
 * Configuration team</a>
 @version $Id: ConfigurationEvent.java 561230 2007-07-31 04:17:09Z rahul $
 @since 1.3
 */
public class ConfigurationEvent extends EventObject
{
    /**
     * The serial version UID.
     */
    private static final long serialVersionUID = 3277238219073504136L;

    /** Stores the event type. */
    private int type;

    /** Stores the property name. */
    private String propertyName;

    /** Stores the property value. */
    private Object propertyValue;

    /** Stores the before update flag. */
    private boolean beforeUpdate;

    /**
     * Creates a new instance of <code>ConfigurationEvent</code> and
     * initializes it.
     *
     @param source the event source
     @param type the event's type
     @param propertyName the name of the affected property
     @param propertyValue the value of the affected property
     @param beforeUpdate the before update flag
     */
    public ConfigurationEvent(Object source, int type, String propertyName,
            Object propertyValue, boolean beforeUpdate)
    {
        super(source);
        this.type = type;
        this.propertyName = propertyName;
        this.propertyValue = propertyValue;
        this.beforeUpdate = beforeUpdate;
    }

    /**
     * Returns the name of the affected property. This can be <b>null</b> if no
     * property change has lead to this event.
     *
     @return the name of the property
     */
    public String getPropertyName()
    {
        return propertyName;
    }

    /**
     * Returns the value of the affected property if available.
     *
     @return the value of the property; can be <b>null</b>
     */
    public Object getPropertyValue()
    {
        return propertyValue;
    }

    /**
     * Returns the type of this event. This describes the update process that
     * caused this event.
     *
     @return the event's type
     */
    public int getType()
    {
        return type;
    }

    /**
     * Returns a flag if this event was generated before or after an update.
     *
     @return <b>true</b> if this event was generated before an update;
     <b>false</b> otherwise
     */
    public boolean isBeforeUpdate()
    {
        return beforeUpdate;
    }
}