Author: hiranya
Date: Fri Jul 24 06:24:06 2009
New Revision: 797333

URL: http://svn.apache.org/viewvc?rev=797333&view=rev
Log:
Adding the SynapseObserver interface. Implementations of this interface can be 
used to monitor a SynapseConfiguration instance at runtime. A SynapseObserver 
instance registered with a SynapseConfiguration receives events regarding 
configuration updates (add/remove items). Useful when writing custom 
configuration monitors, dependency trackers etc.

Added:
    
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/SynapseObserver.java
Modified:
    
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/SynapseConfiguration.java

Modified: 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/SynapseConfiguration.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/SynapseConfiguration.java?rev=797333&r1=797332&r2=797333&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/SynapseConfiguration.java
 (original)
+++ 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/SynapseConfiguration.java
 Fri Jul 24 06:24:06 2009
@@ -118,6 +118,10 @@
      */
     private Map<String, SynapseEventSource> eventSources = new HashMap<String, 
SynapseEventSource>();
 
+    /**
+     * The list of registered configuration observers
+     */
+    private List<SynapseObserver> observers = new ArrayList<SynapseObserver>();
 
     /**
      * Add a named sequence into the local registry. If a sequence already 
exists by the specified
@@ -131,6 +135,10 @@
     public void addSequence(String key, Mediator mediator) {
         assertAlreadyExists(key,SEQUENCE);
         localRegistry.put(key, mediator);
+
+        for (SynapseObserver o : observers) {
+            o.sequenceAdded(mediator);
+        }
     }
 
     /**
@@ -254,6 +262,9 @@
         Object sequence = localRegistry.get(key);
         if (sequence instanceof Mediator) {
             localRegistry.remove(key);
+            for (SynapseObserver o : observers) {
+                o.sequenceRemoved((Mediator) sequence);
+            }
         } else {
             handleException("No sequence exists by the key/name : " + key);
         }
@@ -302,12 +313,18 @@
                 
entry.setValue(SynapseConfigUtils.getOMElementFromURL(entry.getSrc()
                         .toString()));
                 localRegistry.put(key, entry);
+                for (SynapseObserver o : observers) {
+                    o.entryAdded(entry);
+                }
             } catch (IOException e) {
                 handleException("Can not read from source URL : "
                         + entry.getSrc());
             }
         } else {
             localRegistry.put(key, entry);
+            for (SynapseObserver o : observers) {
+                o.entryAdded(entry);
+            }
         }
     }
 
@@ -421,6 +438,9 @@
         Object entry = localRegistry.get(key);
         if (entry instanceof Entry) {
             localRegistry.remove(key);
+            for (SynapseObserver o : observers) {
+                o.entryRemoved((Entry) entry);    
+            }
         } else {
             handleException("No entry exists by the key : " + key);
         }
@@ -467,6 +487,9 @@
     public void addEndpoint(String key, Endpoint endpoint) {
         assertAlreadyExists(key, ENDPOINT);
         localRegistry.put(key, endpoint);
+        for (SynapseObserver o : observers) {
+            o.endpointAdded(endpoint);
+        }
     }
 
     /**
@@ -568,6 +591,9 @@
         Object endpoint = localRegistry.get(key);
         if (endpoint instanceof Endpoint) {
             localRegistry.remove(key);
+            for (SynapseObserver o : observers) {
+                o.endpointRemoved((Endpoint) endpoint);
+            }
         } else {
             handleException("No endpoint exists by the key/name : " + key);
         }
@@ -585,6 +611,9 @@
     public void addProxyService(String name, ProxyService proxy) {
         if (!proxyServices.containsKey(name)) {
             proxyServices.put(name, proxy);
+            for (SynapseObserver o : observers) {
+                o.proxyServiceAdded(proxy);
+            }
         } else {
             handleException("Duplicate proxy service by the name : " + name);
         }
@@ -609,8 +638,8 @@
      *            of the Proxy Service to be deleted
      */
     public void removeProxyService(String name) {
-        Object o = proxyServices.get(name);
-        if (o == null) {
+        ProxyService proxy = proxyServices.get(name);
+        if (proxy == null) {
             handleException("Unknown proxy service for name : " + name);
         } else {
             try {
@@ -623,6 +652,9 @@
                     getAxisConfiguration().removeService(name);
                 }
                 proxyServices.remove(name);
+                for (SynapseObserver o : observers) {
+                    o.proxyServiceRemoved(proxy);
+                }
             } catch (AxisFault axisFault) {
                 handleException(axisFault.getMessage());
             }
@@ -759,6 +791,9 @@
     public void addStartup(Startup startup) {
         if (!startups.containsKey(startup.getName())) {
             startups.put(startup.getName(), startup);
+            for (SynapseObserver o : observers) {
+                o.startupAdded(startup);
+            }
         } else {
             handleException("Duplicate startup by the name : " + 
startup.getName());
         }
@@ -771,8 +806,12 @@
      * @param name - name of the startup that needs to be removed
      */
     public void removeStartup(String name) {
-        if (startups.containsKey(name)) {
+        Startup startup = startups.get(name);
+        if (startup != null) {
             startups.remove(name);
+            for (SynapseObserver o : observers) {
+                o.startupRemoved(startup);
+            }
         } else {
             handleException("No startup exists by the name : " + name);
         }
@@ -1000,6 +1039,9 @@
     public void addEventSource(String name, SynapseEventSource eventSource) {
         if (!eventSources.containsKey(name)) {
             eventSources.put(name, eventSource);
+            for (SynapseObserver o : observers) {
+                o.eventSourceAdded(eventSource);
+            }
         } else {
             handleException("Duplicate event source by the name : " + name);
         }
@@ -1016,8 +1058,12 @@
      * @param name name of the event source to be removed
      */
     public void removeEventSource(String name) {
-        if (eventSources.containsKey(name)) {
+        SynapseEventSource eventSource = eventSources.get(name);
+        if (eventSource != null) {
             eventSources.remove(name);
+            for (SynapseObserver o : observers) {
+                o.eventSourceRemoved(eventSource);
+            }
         } else {
             handleException("No event source exists by the name : " + name);
         }
@@ -1031,6 +1077,12 @@
         this.eventSources = eventSources;
     }
 
+    public void registerObserver(SynapseObserver o) {
+        if (!observers.contains(o)) {
+            observers.add(o);
+        }
+    }
+
     private void assertAlreadyExists(String key, String type) {
 
         if (key == null || "".equals(key)) {

Added: 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/SynapseObserver.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/SynapseObserver.java?rev=797333&view=auto
==============================================================================
--- 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/SynapseObserver.java
 (added)
+++ 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/SynapseObserver.java
 Fri Jul 24 06:24:06 2009
@@ -0,0 +1,107 @@
+/*
+ *  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.synapse.config;
+
+import org.apache.synapse.Mediator;
+import org.apache.synapse.Startup;
+import org.apache.synapse.eventing.SynapseEventSource;
+import org.apache.synapse.core.axis2.ProxyService;
+import org.apache.synapse.endpoints.Endpoint;
+
+/**
+ * An implementation of this interface can be registered with the 
SynapseConfiguration to receive
+ * configuration update events. Whenever a new item is added to the 
configuration or an existing
+ * item is removed the events defined in this interface will be fired.
+ */
+public interface SynapseObserver {
+
+    /** Event fired when a new sequence is added to the configuration
+     *
+     * @param sequence the Sequence mediator added to the configuration
+     */
+    public void sequenceAdded(Mediator sequence);
+
+    /** Event fired when an existing sequence is removed from the configuration
+     *
+     * @param sequence the Sequence removed from the configuration
+     */
+    public void sequenceRemoved(Mediator sequence);
+
+    /** Event fired when an entry is added to the configuration
+     *
+     * @param entry the Entry added to the configuration
+     */
+    public void entryAdded(Entry entry);
+
+    /** Event fired when an entry is removed from the configuration
+     *
+     * @param entry the Entry removed from the configuration
+     */
+    public void entryRemoved(Entry entry);
+
+    /** Event fired when an endpoint is added to the configuration
+     *
+     * @param endpoint the Endpoint added to the configuration
+     */
+    public void endpointAdded(Endpoint endpoint);
+
+    /** Event fired when an endpoint is removed from the configuration
+     *
+     * @param endpoint the Endpoint removed from the configuration
+     */
+    public void endpointRemoved(Endpoint endpoint);
+
+    /** Event fired when a proxy service is added to the configuration
+     *
+     * @param proxy the ProxyService added to the configuration
+     */
+    public void proxyServiceAdded(ProxyService proxy);
+
+     /** Event fired when a proxy service is removed from the configuration
+     *
+     * @param proxy the ProxyService removed from the configuration
+     */
+    public void proxyServiceRemoved(ProxyService proxy);
+
+    /** Event fired when a startup is added to the configuration
+     *
+     * @param startup the Startup added to the configuration
+     */
+    public void startupAdded(Startup startup);
+
+     /** Event fired when a startup is removed from the configuration
+     *
+     * @param startup the Startup removed from the configuration
+     */
+    public void startupRemoved(Startup startup);
+
+    /** Event fired when an event source is added to the configuration
+     *
+     * @param eventSource the SynapseEventSource added to the configuration
+     */
+    public void eventSourceAdded(SynapseEventSource eventSource);
+
+     /** Event fired when an event source is removed from the configuration
+     *
+     * @param eventSource the SynapseEventSource removed from the 
configuration 
+     */
+    public void eventSourceRemoved(SynapseEventSource eventSource);    
+
+}


Reply via email to