Author: oheger
Date: Wed Aug 5 20:31:01 2009
New Revision: 801402
URL: http://svn.apache.org/viewvc?rev=801402&view=rev
Log:
Added an event listener interface for configuration sources.
Added:
commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/base/ConfigurationSourceEvent.java
(with props)
commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/base/ConfigurationSourceListener.java
(with props)
Added:
commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/base/ConfigurationSourceEvent.java
URL:
http://svn.apache.org/viewvc/commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/base/ConfigurationSourceEvent.java?rev=801402&view=auto
==============================================================================
---
commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/base/ConfigurationSourceEvent.java
(added)
+++
commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/base/ConfigurationSourceEvent.java
Wed Aug 5 20:31:01 2009
@@ -0,0 +1,174 @@
+/*
+ * 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.configuration2.base;
+
+import java.util.EventObject;
+
+/**
+ * <p>
+ * An event class for reporting changes on a {...@link ConfigurationSource}.
+ * </p>
+ * <p>
+ * Events of this type are generated by modifications on
+ * {...@link ConfigurationSource} objects. They allow interested listeners to
keep
+ * track on changes of a source. Each event can contain the following data:
+ * <ul>
+ * <li>A source object, which is usually the {...@code ConfigurationSource}
object
+ * that was modified.</li>
+ * <li>The event's type. This is a constant of the nested {...@code Type}
+ * enumeration class. It describes the nature of the current change.</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>An additional object with information specific to a concrete
+ * implementation of {...@link ConfigurationSource}.</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>
+ *
+ * @author Commons Configuration team
+ * @version $Id$
+ */
+public class ConfigurationSourceEvent extends EventObject
+{
+ /**
+ * The serial version UID.
+ */
+ private static final long serialVersionUID = -2061962830139289603L;
+
+ /** Stores the property name. */
+ private final String propertyName;
+
+ /** Stores the property value. */
+ private final Object propertyValue;
+
+ /** The type of this event. */
+ private final Type type;
+
+ /** An object with additional data. */
+ private final Object data;
+
+ /** Stores the before update flag. */
+ private final boolean beforeUpdate;
+
+ /**
+ * Creates a new instance of {...@code ConfigurationSourceEvent} and
+ * initializes it.
+ *
+ * @param source the source of this event
+ * @param type the event type
+ * @param name the name of the affected property
+ * @param value the value of the affected property if available
+ * @param data additional data
+ * @param before a flag whether this event was triggered before
+ * (<b>true</b>) or after (<b>false</b>) the actual modification
+ */
+ public ConfigurationSourceEvent(Object source, Type type, String name,
+ Object value, Object data, boolean before)
+ {
+ super(source);
+ this.type = type;
+ propertyName = name;
+ propertyValue = value;
+ this.data = data;
+ beforeUpdate = before;
+ }
+
+ /**
+ * Returns the name of the property affected by this event. This
information
+ * is available for all event types related to properties.
+ *
+ * @return the name of the affected property
+ */
+ public String getPropertyName()
+ {
+ return propertyName;
+ }
+
+ /**
+ * Returns the value of the property affected by this event. This
+ * information is available only for some event types: If a new property is
+ * added or the value of a property is changed, the new value is returned.
+ *
+ * @return the value of the affected property
+ */
+ public Object getPropertyValue()
+ {
+ return propertyValue;
+ }
+
+ /**
+ * Returns the type of this event. The type determines in which way the
+ * {...@link ConfigurationSource} was manipulated.
+ *
+ * @return the event type
+ */
+ public Type getType()
+ {
+ return type;
+ }
+
+ /**
+ * Returns additional data about this event. The object returned by this
+ * method is specific for a concrete implementation of
+ * {...@link ConfigurationSource}. Some implementations may be able to
provide
+ * interesting data related to the event.
+ *
+ * @return additional data about this event
+ */
+ public Object getData()
+ {
+ return data;
+ }
+
+ /**
+ * Returns a flag whether 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;
+ }
+
+ /**
+ * An enumeration class defining the event types supported by configuration
+ * sources. The constants defined by this class can appear in the {...@code
+ * type} property of {...@code ConfigurationSourceEvent} objects.
+ *
+ * @author Commons Configuration team
+ * @version $Id$
+ */
+ public enum Type {
+ /** A property was added to a {...@code ConfigurationSource}. */
+ ADD_PROPERTY,
+
+ /** The value of a property was changed. */
+ MODIFY_PROPERTY,
+
+ /** A property was removed from a {...@code ConfigurationSource}. */
+ CLEAR_PROPERTY,
+
+ /** The source was cleared. */
+ CLEAR_SOURCE
+ }
+}
Propchange:
commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/base/ConfigurationSourceEvent.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/base/ConfigurationSourceEvent.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange:
commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/base/ConfigurationSourceEvent.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added:
commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/base/ConfigurationSourceListener.java
URL:
http://svn.apache.org/viewvc/commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/base/ConfigurationSourceListener.java?rev=801402&view=auto
==============================================================================
---
commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/base/ConfigurationSourceListener.java
(added)
+++
commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/base/ConfigurationSourceListener.java
Wed Aug 5 20:31:01 2009
@@ -0,0 +1,47 @@
+/*
+ * 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.configuration2.base;
+
+import java.util.EventListener;
+
+/**
+ * <p>
+ * An event listener interface to be implemented by observers of
+ * {...@link ConfigurationSource} objects.
+ * </p>
+ * <p>
+ * This interface defines a callback method that is invoked on each
manipulation
+ * of a {...@link ConfigurationSource}. It allows interested components to keep
+ * track on the changes of a {...@link ConfigurationSource}. The exact nature
of
+ * the change can be determined by inspecting the
+ * {...@link ConfigurationSourceEvent} object passed to the event listener
method.
+ * </p>
+ *
+ * @author Commons Configuration team
+ * @version $Id$
+ * @see ConfigurationSourceEvent
+ */
+public interface ConfigurationSourceListener extends EventListener
+{
+ /**
+ * Notifies this listener about a change on a monitored
+ * {...@link ConfigurationSource} object.
+ *
+ * @param event the event describing the change
+ */
+ void configurationSourceChanged(ConfigurationSourceEvent event);
+}
Propchange:
commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/base/ConfigurationSourceListener.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/base/ConfigurationSourceListener.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange:
commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/base/ConfigurationSourceListener.java
------------------------------------------------------------------------------
svn:mime-type = text/plain