[dna-commits] DNA SVN: r913 - in trunk: dna-graph/src/main/java/org/jboss/dna/graph/connector/federation and 13 other directories.

dna-commits at lists.jboss.org dna-commits at lists.jboss.org
Tue May 19 16:15:06 EDT 2009


Author: rhauch
Date: 2009-05-19 16:15:05 -0400 (Tue, 19 May 2009)
New Revision: 913

Removed:
   trunk/dna-graph/src/main/java/org/jboss/dna/graph/connector/RepositorySourceListener.java
Modified:
   trunk/dna-graph/src/main/java/org/jboss/dna/graph/connector/RepositoryConnection.java
   trunk/dna-graph/src/main/java/org/jboss/dna/graph/connector/RepositoryConnectionPool.java
   trunk/dna-graph/src/main/java/org/jboss/dna/graph/connector/RepositorySourceCapabilities.java
   trunk/dna-graph/src/main/java/org/jboss/dna/graph/connector/federation/FederatedRepositoryConnection.java
   trunk/dna-graph/src/main/java/org/jboss/dna/graph/connector/inmemory/InMemoryRepositoryConnection.java
   trunk/dna-graph/src/main/java/org/jboss/dna/graph/observe/ChangeObservers.java
   trunk/dna-graph/src/test/java/org/jboss/dna/graph/GraphTest.java
   trunk/dna-graph/src/test/java/org/jboss/dna/graph/connector/MockRepositoryConnection.java
   trunk/dna-graph/src/test/java/org/jboss/dna/graph/connector/TimeDelayingRepositorySource.java
   trunk/dna-graph/src/test/java/org/jboss/dna/graph/io/GraphImporterTest.java
   trunk/extensions/dna-connector-federation/src/main/java/org/jboss/dna/connector/federation/FederatedRepository.java
   trunk/extensions/dna-connector-federation/src/main/java/org/jboss/dna/connector/federation/FederatedRepositoryConnection.java
   trunk/extensions/dna-connector-federation/src/test/java/org/jboss/dna/connector/federation/FederatedRepositoryConnectionTest.java
   trunk/extensions/dna-connector-federation/src/test/java/org/jboss/dna/connector/federation/FederatedRepositoryTest.java
   trunk/extensions/dna-connector-filesystem/src/main/java/org/jboss/dna/connector/filesystem/FileSystemConnection.java
   trunk/extensions/dna-connector-jbosscache/src/main/java/org/jboss/dna/connector/jbosscache/JBossCacheConnection.java
   trunk/extensions/dna-connector-jdbc-metadata/src/main/java/org/jboss/dna/connector/jdbc/JdbcConnection.java
   trunk/extensions/dna-connector-store-jpa/src/main/java/org/jboss/dna/connector/store/jpa/JpaConnection.java
   trunk/extensions/dna-connector-svn/src/main/java/org/jboss/dna/connector/svn/SVNRepositoryConnection.java
   trunk/extensions/dna-connector-svn/src/test/java/org/jboss/dna/connector/svn/SVNRepositoryConnectionTest.java
Log:
DNA-252 Complete support for events to the connector framework

Removed the older RepositorySourceListener and all uses of it.

Modified: trunk/dna-graph/src/main/java/org/jboss/dna/graph/connector/RepositoryConnection.java
===================================================================
--- trunk/dna-graph/src/main/java/org/jboss/dna/graph/connector/RepositoryConnection.java	2009-05-19 17:40:25 UTC (rev 912)
+++ trunk/dna-graph/src/main/java/org/jboss/dna/graph/connector/RepositoryConnection.java	2009-05-19 20:15:05 UTC (rev 913)
@@ -47,11 +47,6 @@
  * returning the connection from a connection pool.
  * </p>
  * <p>
- * DNA hasn't yet defined the event mechanism, so connectors don't have any methods to invoke on the
- * {@link RepositorySourceListener}. This will be defined in the next release, so feel free to manage the listeners now. Note that
- * by default the {@link RepositorySourceCapabilities} returns false for supportsEvents().
- * </p>
- * <p>
  * The most important method on this interface, though, is the {@link #execute(ExecutionContext, Request)} method, which serves as
  * the mechanism by which the component using the connector access and manipulates the content exposed by the connector. The first
  * parameter to this method is the {@link ExecutionContext}, which contains the information about environment as well as the
@@ -149,13 +144,6 @@
                   TimeUnit unit ) throws InterruptedException;
 
     /**
-     * Set the listener that is to receive notifications to changes to content within this source.
-     * 
-     * @param listener the new listener, or null if no component is interested in the change notifications
-     */
-    void setListener( RepositorySourceListener listener );
-
-    /**
      * Get the default cache policy for this repository. If none is provided, a global cache policy will be used.
      * 
      * @return the default cache policy

Modified: trunk/dna-graph/src/main/java/org/jboss/dna/graph/connector/RepositoryConnectionPool.java
===================================================================
--- trunk/dna-graph/src/main/java/org/jboss/dna/graph/connector/RepositoryConnectionPool.java	2009-05-19 17:40:25 UTC (rev 912)
+++ trunk/dna-graph/src/main/java/org/jboss/dna/graph/connector/RepositoryConnectionPool.java	2009-05-19 20:15:05 UTC (rev 913)
@@ -1011,14 +1011,6 @@
                 returnConnection(this);
             }
         }
-
-        /**
-         * {@inheritDoc}
-         */
-        public void setListener( RepositorySourceListener listener ) {
-            if (!closed) this.original.setListener(listener);
-        }
-
     }
 
 }

Modified: trunk/dna-graph/src/main/java/org/jboss/dna/graph/connector/RepositorySourceCapabilities.java
===================================================================
--- trunk/dna-graph/src/main/java/org/jboss/dna/graph/connector/RepositorySourceCapabilities.java	2009-05-19 17:40:25 UTC (rev 912)
+++ trunk/dna-graph/src/main/java/org/jboss/dna/graph/connector/RepositorySourceCapabilities.java	2009-05-19 20:15:05 UTC (rev 913)
@@ -122,7 +122,7 @@
     }
 
     /**
-     * Return whether the source supports events through {@link RepositorySourceListener}s.
+     * Return whether the source supports publishing change events.
      * 
      * @return true if events are supported, or false if the source is not capable of generating events
      */

Deleted: trunk/dna-graph/src/main/java/org/jboss/dna/graph/connector/RepositorySourceListener.java
===================================================================
--- trunk/dna-graph/src/main/java/org/jboss/dna/graph/connector/RepositorySourceListener.java	2009-05-19 17:40:25 UTC (rev 912)
+++ trunk/dna-graph/src/main/java/org/jboss/dna/graph/connector/RepositorySourceListener.java	2009-05-19 20:15:05 UTC (rev 913)
@@ -1,35 +0,0 @@
-/*
- * JBoss DNA (http://www.jboss.org/dna)
- * See the COPYRIGHT.txt file distributed with this work for information
- * regarding copyright ownership.  Some portions may be licensed
- * to Red Hat, Inc. under one or more contributor license agreements.
- * See the AUTHORS.txt file in the distribution for a full listing of 
- * individual contributors. 
- *
- * JBoss DNA is free software. Unless otherwise indicated, all code in JBoss DNA
- * is licensed to you under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * JBoss DNA is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.jboss.dna.graph.connector;
-
-/**
- * Interface for a component that wants to listen to changes occurring in a {@link RepositorySource}.
- * 
- * @author Randall Hauch
- */
-public interface RepositorySourceListener {
-
-    void notify( String sourceName,
-                 Object... events );
-}

Modified: trunk/dna-graph/src/main/java/org/jboss/dna/graph/connector/federation/FederatedRepositoryConnection.java
===================================================================
--- trunk/dna-graph/src/main/java/org/jboss/dna/graph/connector/federation/FederatedRepositoryConnection.java	2009-05-19 17:40:25 UTC (rev 912)
+++ trunk/dna-graph/src/main/java/org/jboss/dna/graph/connector/federation/FederatedRepositoryConnection.java	2009-05-19 20:15:05 UTC (rev 913)
@@ -37,7 +37,6 @@
 import org.jboss.dna.graph.cache.CachePolicy;
 import org.jboss.dna.graph.connector.RepositoryConnection;
 import org.jboss.dna.graph.connector.RepositorySourceException;
-import org.jboss.dna.graph.connector.RepositorySourceListener;
 import org.jboss.dna.graph.property.DateTime;
 import org.jboss.dna.graph.request.CompositeRequest;
 import org.jboss.dna.graph.request.Request;
@@ -255,11 +254,4 @@
         // do nothing else, since we don't currently hold any state
     }
 
-    /**
-     * {@inheritDoc}
-     * 
-     * @see org.jboss.dna.graph.connector.RepositoryConnection#setListener(org.jboss.dna.graph.connector.RepositorySourceListener)
-     */
-    public void setListener( RepositorySourceListener listener ) {
-    }
 }

Modified: trunk/dna-graph/src/main/java/org/jboss/dna/graph/connector/inmemory/InMemoryRepositoryConnection.java
===================================================================
--- trunk/dna-graph/src/main/java/org/jboss/dna/graph/connector/inmemory/InMemoryRepositoryConnection.java	2009-05-19 17:40:25 UTC (rev 912)
+++ trunk/dna-graph/src/main/java/org/jboss/dna/graph/connector/inmemory/InMemoryRepositoryConnection.java	2009-05-19 20:15:05 UTC (rev 913)
@@ -32,7 +32,6 @@
 import org.jboss.dna.graph.cache.CachePolicy;
 import org.jboss.dna.graph.connector.RepositoryConnection;
 import org.jboss.dna.graph.connector.RepositorySourceException;
-import org.jboss.dna.graph.connector.RepositorySourceListener;
 import org.jboss.dna.graph.request.Request;
 import org.jboss.dna.graph.request.processor.RequestProcessor;
 
@@ -41,20 +40,8 @@
  */
 public class InMemoryRepositoryConnection implements RepositoryConnection {
 
-    protected static final RepositorySourceListener NO_OP_LISTENER = new RepositorySourceListener() {
-
-        /**
-         * {@inheritDoc}
-         */
-        public void notify( String sourceName,
-                            Object... events ) {
-            // do nothing
-        }
-    };
-
     private final InMemoryRepositorySource source;
     private final InMemoryRepository repository;
-    private RepositorySourceListener listener = NO_OP_LISTENER;
 
     InMemoryRepositoryConnection( InMemoryRepositorySource source,
                                   InMemoryRepository repository ) {
@@ -96,13 +83,6 @@
     /**
      * {@inheritDoc}
      */
-    public void setListener( RepositorySourceListener listener ) {
-        this.listener = listener != null ? listener : NO_OP_LISTENER;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
     public void close() {
         // do nothing
     }
@@ -144,13 +124,6 @@
     }
 
     /**
-     * @return listener
-     */
-    protected RepositorySourceListener getListener() {
-        return this.listener;
-    }
-
-    /**
      * {@inheritDoc}
      * 
      * @see java.lang.Object#toString()

Modified: trunk/dna-graph/src/main/java/org/jboss/dna/graph/observe/ChangeObservers.java
===================================================================
--- trunk/dna-graph/src/main/java/org/jboss/dna/graph/observe/ChangeObservers.java	2009-05-19 17:40:25 UTC (rev 912)
+++ trunk/dna-graph/src/main/java/org/jboss/dna/graph/observe/ChangeObservers.java	2009-05-19 20:15:05 UTC (rev 913)
@@ -23,8 +23,11 @@
  */
 package org.jboss.dna.graph.observe;
 
+import java.lang.ref.WeakReference;
 import java.util.concurrent.CopyOnWriteArrayList;
 import net.jcip.annotations.ThreadSafe;
+import org.jboss.dna.common.util.CheckArg;
+import org.jboss.dna.common.util.Logger;
 
 /**
  * Reusable manager of change listeners, typically employed by another {@link Observable} implementation.
@@ -32,7 +35,7 @@
 @ThreadSafe
 public class ChangeObservers implements Observable {
 
-    private CopyOnWriteArrayList<ChangeObserver> observers = new CopyOnWriteArrayList<ChangeObserver>();
+    private CopyOnWriteArrayList<ObserverReference> observers = new CopyOnWriteArrayList<ObserverReference>();
 
     public ChangeObservers() {
     }
@@ -43,7 +46,7 @@
      * @see org.jboss.dna.graph.observe.Observable#register(org.jboss.dna.graph.observe.ChangeObserver)
      */
     public boolean register( ChangeObserver observer ) {
-        if (observer != null && observers.addIfAbsent(observer)) {
+        if (observer != null && observers.addIfAbsent(new ObserverReference(observer))) {
             observer.registeredWith(this);
             return true;
         }
@@ -63,4 +66,68 @@
         return false;
     }
 
+    /**
+     * Broadcast the supplied changes to the registered observers.
+     * 
+     * @param changes the changes to broadcast
+     * @throws IllegalArgumentException if the changes reference is null
+     */
+    public void broadcast( Changes changes ) {
+        CheckArg.isNotNull(changes, "changes");
+        for (ObserverReference observerReference : observers) {
+            ChangeObserver observer = observerReference.get();
+            if (observer == null) {
+                observers.remove(observerReference);
+                continue;
+            }
+            try {
+                observer.notify(changes);
+            } catch (Throwable t) {
+                Logger.getLogger(getClass()).debug(t, "Exception while notifying");
+            }
+        }
+    }
+
+    /**
+     * A {@link WeakReference} implementation that provides a valid
+     */
+    protected final class ObserverReference extends WeakReference<ChangeObserver> {
+        final int hc;
+
+        protected ObserverReference( ChangeObserver source ) {
+            super(source);
+            this.hc = source.hashCode();
+        }
+
+        /**
+         * {@inheritDoc}
+         * 
+         * @see java.lang.Object#hashCode()
+         */
+        @Override
+        public int hashCode() {
+            return hc;
+        }
+
+        /**
+         * {@inheritDoc}
+         * 
+         * @see java.lang.Object#equals(java.lang.Object)
+         */
+        @Override
+        public boolean equals( Object obj ) {
+            if (obj == this) return true;
+            if (obj instanceof ObserverReference) {
+                ObserverReference that = (ObserverReference)obj;
+                ChangeObserver thisSource = this.get();
+                ChangeObserver thatSource = that.get();
+                return thisSource == thatSource; // reference equality, not object equality!
+            }
+            if (obj instanceof ChangeObserver) {
+                ChangeObserver that = (ChangeObserver)obj;
+                return this.get() == that; // reference equality, not object equality!
+            }
+            return false;
+        }
+    }
 }

Modified: trunk/dna-graph/src/test/java/org/jboss/dna/graph/GraphTest.java
===================================================================
--- trunk/dna-graph/src/test/java/org/jboss/dna/graph/GraphTest.java	2009-05-19 17:40:25 UTC (rev 912)
+++ trunk/dna-graph/src/test/java/org/jboss/dna/graph/GraphTest.java	2009-05-19 20:15:05 UTC (rev 913)
@@ -48,7 +48,7 @@
 import org.jboss.dna.graph.connector.RepositoryConnection;
 import org.jboss.dna.graph.connector.RepositoryConnectionFactory;
 import org.jboss.dna.graph.connector.RepositorySourceException;
-import org.jboss.dna.graph.connector.RepositorySourceListener;
+import org.jboss.dna.graph.observe.ChangeObserver;
 import org.jboss.dna.graph.property.DateTime;
 import org.jboss.dna.graph.property.InvalidPathException;
 import org.jboss.dna.graph.property.Name;
@@ -817,8 +817,16 @@
         assertNextRequestIsMove(Location.create(validUuid), Location.create(validPath));
         assertNoMoreRequests();
 
-        graph.batch().move(validPath).into(validIdProperty1, validIdProperty2).and().move(validPathString).into(validIdProperty1,
-                                                                                                                validIdProperty2).and().move(validUuid).into(validPath).execute();
+        graph.batch()
+             .move(validPath)
+             .into(validIdProperty1, validIdProperty2)
+             .and()
+             .move(validPathString)
+             .into(validIdProperty1, validIdProperty2)
+             .and()
+             .move(validUuid)
+             .into(validPath)
+             .execute();
         assertThat(numberOfExecutions, is(1));
         extractRequestsFromComposite();
         assertNextRequestIsMove(Location.create(validPath), Location.create(validIdProperty1, validIdProperty2));
@@ -844,8 +852,16 @@
         assertNextRequestIsCopy(Location.create(validUuid), Location.create(validPath));
         assertNoMoreRequests();
 
-        graph.batch().copy(validPath).into(validIdProperty1, validIdProperty2).and().copy(validPathString).into(validIdProperty1,
-                                                                                                                validIdProperty2).and().copy(validUuid).into(validPath).execute();
+        graph.batch()
+             .copy(validPath)
+             .into(validIdProperty1, validIdProperty2)
+             .and()
+             .copy(validPathString)
+             .into(validIdProperty1, validIdProperty2)
+             .and()
+             .copy(validUuid)
+             .into(validPath)
+             .execute();
         assertThat(numberOfExecutions, is(1));
         extractRequestsFromComposite();
         assertNextRequestIsCopy(Location.create(validPath), Location.create(validIdProperty1, validIdProperty2));
@@ -1227,8 +1243,7 @@
             return true;
         }
 
-        public void setListener( RepositorySourceListener listener ) {
+        public void setObserver( ChangeObserver observer ) {
         }
-
     }
 }

Modified: trunk/dna-graph/src/test/java/org/jboss/dna/graph/connector/MockRepositoryConnection.java
===================================================================
--- trunk/dna-graph/src/test/java/org/jboss/dna/graph/connector/MockRepositoryConnection.java	2009-05-19 17:40:25 UTC (rev 912)
+++ trunk/dna-graph/src/test/java/org/jboss/dna/graph/connector/MockRepositoryConnection.java	2009-05-19 20:15:05 UTC (rev 913)
@@ -134,13 +134,4 @@
         return true;
     }
 
-    /**
-     * {@inheritDoc}
-     * 
-     * @see org.jboss.dna.graph.connector.RepositoryConnection#setListener(org.jboss.dna.graph.connector.RepositorySourceListener)
-     */
-    public void setListener( RepositorySourceListener listener ) {
-        throw new UnsupportedOperationException();
-    }
-
 }

Modified: trunk/dna-graph/src/test/java/org/jboss/dna/graph/connector/TimeDelayingRepositorySource.java
===================================================================
--- trunk/dna-graph/src/test/java/org/jboss/dna/graph/connector/TimeDelayingRepositorySource.java	2009-05-19 17:40:25 UTC (rev 912)
+++ trunk/dna-graph/src/test/java/org/jboss/dna/graph/connector/TimeDelayingRepositorySource.java	2009-05-19 20:15:05 UTC (rev 913)
@@ -36,12 +36,6 @@
 import net.jcip.annotations.ThreadSafe;
 import org.jboss.dna.graph.ExecutionContext;
 import org.jboss.dna.graph.cache.CachePolicy;
-import org.jboss.dna.graph.connector.RepositoryConnection;
-import org.jboss.dna.graph.connector.RepositoryContext;
-import org.jboss.dna.graph.connector.RepositorySource;
-import org.jboss.dna.graph.connector.RepositorySourceCapabilities;
-import org.jboss.dna.graph.connector.RepositorySourceException;
-import org.jboss.dna.graph.connector.RepositorySourceListener;
 import org.jboss.dna.graph.request.Request;
 
 /**
@@ -373,12 +367,6 @@
             return this.closeCount.get();
         }
 
-        /**
-         * {@inheritDoc}
-         */
-        public void setListener( RepositorySourceListener listener ) {
-        }
-
     }
 
 }

Modified: trunk/dna-graph/src/test/java/org/jboss/dna/graph/io/GraphImporterTest.java
===================================================================
--- trunk/dna-graph/src/test/java/org/jboss/dna/graph/io/GraphImporterTest.java	2009-05-19 17:40:25 UTC (rev 912)
+++ trunk/dna-graph/src/test/java/org/jboss/dna/graph/io/GraphImporterTest.java	2009-05-19 20:15:05 UTC (rev 913)
@@ -45,7 +45,7 @@
 import org.jboss.dna.graph.connector.RepositoryConnection;
 import org.jboss.dna.graph.connector.RepositoryConnectionFactory;
 import org.jboss.dna.graph.connector.RepositorySourceException;
-import org.jboss.dna.graph.connector.RepositorySourceListener;
+import org.jboss.dna.graph.observe.ChangeObserver;
 import org.jboss.dna.graph.property.Name;
 import org.jboss.dna.graph.property.Path;
 import org.jboss.dna.graph.property.Property;
@@ -114,7 +114,9 @@
                          "repositoryName=repositoryB",
                          "jcr:primaryType={http://www.jcp.org/jcr/nt/1.0}unstructured",
                          "dna:classname=org.jboss.dna.connector.inmemory.InMemoryRepositorySource");
-        assertCreateProperties(iter, "/a/b/dna:system[1]/dna:sources[1]", "jcr:primaryType={http://www.jcp.org/jcr/nt/1.0}unstructured");
+        assertCreateProperties(iter,
+                               "/a/b/dna:system[1]/dna:sources[1]",
+                               "jcr:primaryType={http://www.jcp.org/jcr/nt/1.0}unstructured");
         assertCreateProperties(iter, "/a/b/dna:system[1]", "jcr:primaryType={http://www.jcp.org/jcr/nt/1.0}unstructured");
         assertThat(iter.hasNext(), is(false));
     }
@@ -129,7 +131,7 @@
         Path parentPath = createNode.under().getPath();
         assertThat(parentPath, is(expectedPath.getParent()));
         assertThat(createNode.named(), is(expectedPath.getLastSegment().getName()));
-        
+
         if (properties.length > 0) {
             Map<Name, Property> propertiesByName = new HashMap<Name, Property>();
             for (Property prop : createNode.properties()) {
@@ -162,21 +164,20 @@
                                         String path,
                                         String... properties ) {
         Request nextCommand = iterator.next();
-        
+
         if (nextCommand instanceof UpdatePropertiesRequest) {
-            assertUpdateProperties((UpdatePropertiesRequest) nextCommand, path, properties);
-        }
-        else if (nextCommand instanceof SetPropertyRequest) {
-            assertSetProperty((SetPropertyRequest) nextCommand, path, properties);
-        }
-        else {
+            assertUpdateProperties((UpdatePropertiesRequest)nextCommand, path, properties);
+        } else if (nextCommand instanceof SetPropertyRequest) {
+            assertSetProperty((SetPropertyRequest)nextCommand, path, properties);
+        } else {
             fail("Invalid next request type: " + nextCommand.getClass().getName());
         }
-        
+
     }
+
     public void assertUpdateProperties( UpdatePropertiesRequest createNode,
-                                  String path,
-                                  String... properties ) {
+                                        String path,
+                                        String... properties ) {
         Path expectedPath = context.getValueFactories().getPathFactory().create(path);
         Path parentPath = createNode.changedLocation().getPath().getParent();
         assertThat(parentPath, is(expectedPath.getParent()));
@@ -208,39 +209,38 @@
     }
 
     public void assertSetProperty( SetPropertyRequest createNode,
-                                        String path,
-                                        String... properties ) {
-              Path expectedPath = context.getValueFactories().getPathFactory().create(path);
-              Path parentPath = createNode.changedLocation().getPath().getParent();
-              assertThat(parentPath, is(expectedPath.getParent()));
-              assertThat(createNode.changedLocation().getPath().getLastSegment().getName(), is(expectedPath.getLastSegment().getName()));
-              Map<Name, Property> propertiesByName = new HashMap<Name, Property>();
-              Property prop = createNode.property();
-              propertiesByName.put(prop.getName(), prop);
+                                   String path,
+                                   String... properties ) {
+        Path expectedPath = context.getValueFactories().getPathFactory().create(path);
+        Path parentPath = createNode.changedLocation().getPath().getParent();
+        assertThat(parentPath, is(expectedPath.getParent()));
+        assertThat(createNode.changedLocation().getPath().getLastSegment().getName(), is(expectedPath.getLastSegment().getName()));
+        Map<Name, Property> propertiesByName = new HashMap<Name, Property>();
+        Property prop = createNode.property();
+        propertiesByName.put(prop.getName(), prop);
 
-              for (String propertyStr : properties) {
-                  if (propertyStr == "any properties") {
-                      propertiesByName.clear();
-                      break;
-                  }
-                  Matcher matcher = Pattern.compile("([^=]+)=(.*)").matcher(propertyStr);
-                  if (!matcher.matches()) continue;
-                  System.out.println("Property: " + propertyStr + " ==> " + matcher);
-                  Name propertyName = context.getValueFactories().getNameFactory().create(matcher.group(1));
-                  System.out.println("Property name: " + matcher.group(1));
-                  String value = matcher.group(2); // doesn't handle multiple values!!
-                  if (value.trim().length() == 0) value = null;
-                  Property actual = propertiesByName.remove(propertyName);
-                  Property expectedProperty = context.getPropertyFactory().create(propertyName, value);
-                  assertThat("missing property " + propertyName, actual, is(expectedProperty));
-              }
-              if (!propertiesByName.isEmpty()) {
-                  System.out.println("Properties for " + path + "\n" + propertiesByName);
-              }
-              assertThat(propertiesByName.isEmpty(), is(true));
-          }
+        for (String propertyStr : properties) {
+            if (propertyStr == "any properties") {
+                propertiesByName.clear();
+                break;
+            }
+            Matcher matcher = Pattern.compile("([^=]+)=(.*)").matcher(propertyStr);
+            if (!matcher.matches()) continue;
+            System.out.println("Property: " + propertyStr + " ==> " + matcher);
+            Name propertyName = context.getValueFactories().getNameFactory().create(matcher.group(1));
+            System.out.println("Property name: " + matcher.group(1));
+            String value = matcher.group(2); // doesn't handle multiple values!!
+            if (value.trim().length() == 0) value = null;
+            Property actual = propertiesByName.remove(propertyName);
+            Property expectedProperty = context.getPropertyFactory().create(propertyName, value);
+            assertThat("missing property " + propertyName, actual, is(expectedProperty));
+        }
+        if (!propertiesByName.isEmpty()) {
+            System.out.println("Properties for " + path + "\n" + propertiesByName);
+        }
+        assertThat(propertiesByName.isEmpty(), is(true));
+    }
 
-    
     protected class MockRepositoryConnection implements RepositoryConnection {
         public void close() {
         }
@@ -276,7 +276,7 @@
             return true;
         }
 
-        public void setListener( RepositorySourceListener listener ) {
+        public void setObserver( ChangeObserver observer ) {
         }
     }
 

Modified: trunk/extensions/dna-connector-federation/src/main/java/org/jboss/dna/connector/federation/FederatedRepository.java
===================================================================
--- trunk/extensions/dna-connector-federation/src/main/java/org/jboss/dna/connector/federation/FederatedRepository.java	2009-05-19 17:40:25 UTC (rev 912)
+++ trunk/extensions/dna-connector-federation/src/main/java/org/jboss/dna/connector/federation/FederatedRepository.java	2009-05-19 20:15:05 UTC (rev 913)
@@ -25,9 +25,7 @@
 
 import java.util.Collections;
 import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
-import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
@@ -38,7 +36,6 @@
 import org.jboss.dna.graph.connector.RepositoryConnection;
 import org.jboss.dna.graph.connector.RepositoryConnectionFactory;
 import org.jboss.dna.graph.connector.RepositorySource;
-import org.jboss.dna.graph.connector.RepositorySourceListener;
 import org.jboss.dna.graph.request.processor.RequestProcessor;
 
 /**
@@ -59,7 +56,6 @@
     private final AtomicInteger openExecutors = new AtomicInteger(0);
     private final CountDownLatch shutdownLatch = new CountDownLatch(1);
     private final AtomicBoolean shutdownRequested = new AtomicBoolean(false);
-    private final CopyOnWriteArrayList<RepositorySourceListener> listeners = new CopyOnWriteArrayList<RepositorySourceListener>();
 
     /**
      * Create a federated repository instance.
@@ -163,42 +159,6 @@
     }
 
     /**
-     * Add a listener that is to receive notifications to changes to content within this repository. This method does nothing if
-     * the supplied listener is null.
-     * 
-     * @param listener the new listener
-     * @return true if the listener was added, or false if the listener was not added (if reference is null, or if non-null
-     *         listener is already an existing listener)
-     */
-    public boolean addListener( RepositorySourceListener listener ) {
-        if (listener == null) return false;
-        return this.listeners.addIfAbsent(listener);
-    }
-
-    /**
-     * Remove the supplied listener. This method does nothing if the supplied listener is null.
-     * <p>
-     * This method can safely be called while the federation repository is in use.
-     * </p>
-     * 
-     * @param listener the listener to remove
-     * @return true if the listener was removed, or false if the listener was not registered
-     */
-    public boolean removeListener( RepositorySourceListener listener ) {
-        if (listener == null) return false;
-        return this.listeners.remove(listener);
-    }
-
-    /**
-     * Get the list of listeners, which is the actual list used by the repository.
-     * 
-     * @return the listeners
-     */
-    public List<RepositorySourceListener> getListeners() {
-        return this.listeners;
-    }
-
-    /**
      * Authenticate the supplied username with the supplied credentials, and return whether authentication was successful.
      * 
      * @param source the {@link RepositorySource} that should be affiliated with the resulting connection

Modified: trunk/extensions/dna-connector-federation/src/main/java/org/jboss/dna/connector/federation/FederatedRepositoryConnection.java
===================================================================
--- trunk/extensions/dna-connector-federation/src/main/java/org/jboss/dna/connector/federation/FederatedRepositoryConnection.java	2009-05-19 17:40:25 UTC (rev 912)
+++ trunk/extensions/dna-connector-federation/src/main/java/org/jboss/dna/connector/federation/FederatedRepositoryConnection.java	2009-05-19 20:15:05 UTC (rev 913)
@@ -24,14 +24,12 @@
 package org.jboss.dna.connector.federation;
 
 import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicReference;
 import javax.transaction.xa.XAResource;
 import net.jcip.annotations.ThreadSafe;
 import org.jboss.dna.graph.ExecutionContext;
 import org.jboss.dna.graph.cache.CachePolicy;
 import org.jboss.dna.graph.connector.RepositoryConnection;
 import org.jboss.dna.graph.connector.RepositorySourceException;
-import org.jboss.dna.graph.connector.RepositorySourceListener;
 import org.jboss.dna.graph.request.Request;
 import org.jboss.dna.graph.request.processor.RequestProcessor;
 
@@ -41,16 +39,8 @@
 @ThreadSafe
 public class FederatedRepositoryConnection implements RepositoryConnection {
 
-    protected static final RepositorySourceListener NO_OP_LISTENER = new RepositorySourceListener() {
-        public void notify( String sourceName,
-                            Object... events ) {
-            // do nothing
-        }
-    };
-
     private final FederatedRepository repository;
     private final String sourceName;
-    private final AtomicReference<RepositorySourceListener> listener;
 
     protected FederatedRepositoryConnection( FederatedRepository repository,
                                              String sourceName ) {
@@ -58,7 +48,6 @@
         assert repository != null;
         this.sourceName = sourceName;
         this.repository = repository;
-        this.listener = new AtomicReference<RepositorySourceListener>(NO_OP_LISTENER);
         this.repository.register(this);
     }
 
@@ -93,18 +82,6 @@
     /**
      * {@inheritDoc}
      */
-    public void setListener( RepositorySourceListener listener ) {
-        if (listener == null) listener = NO_OP_LISTENER;
-        RepositorySourceListener oldListener = this.listener.getAndSet(listener);
-        this.repository.addListener(listener);
-        if (oldListener != NO_OP_LISTENER) {
-            this.repository.removeListener(oldListener);
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
     public boolean ping( long time,
                          TimeUnit unit ) {
         return this.repository.isRunning();
@@ -136,11 +113,6 @@
      * {@inheritDoc}
      */
     public void close() {
-        try {
-            this.repository.removeListener(this.listener.get());
-        } finally {
-            this.repository.unregister(this);
-        }
     }
 
 }

Modified: trunk/extensions/dna-connector-federation/src/test/java/org/jboss/dna/connector/federation/FederatedRepositoryConnectionTest.java
===================================================================
--- trunk/extensions/dna-connector-federation/src/test/java/org/jboss/dna/connector/federation/FederatedRepositoryConnectionTest.java	2009-05-19 17:40:25 UTC (rev 912)
+++ trunk/extensions/dna-connector-federation/src/test/java/org/jboss/dna/connector/federation/FederatedRepositoryConnectionTest.java	2009-05-19 20:15:05 UTC (rev 913)
@@ -33,7 +33,6 @@
 import java.util.concurrent.TimeUnit;
 import org.jboss.dna.graph.ExecutionContext;
 import org.jboss.dna.graph.connector.RepositorySourceException;
-import org.jboss.dna.graph.connector.RepositorySourceListener;
 import org.jboss.dna.graph.request.Request;
 import org.junit.Before;
 import org.junit.Test;
@@ -93,29 +92,4 @@
         verify(repository, times(1)).isRunning();
     }
 
-    @Test
-    public void shouldAddListenerToRepositoryWhenSetOnConnection() {
-        // Old listener is no-op, so it is not removed from repository ...
-        RepositorySourceListener listener = mock(RepositorySourceListener.class);
-        connection.setListener(listener);
-        verify(repository, times(1)).addListener(listener);
-
-        // Old listener is NOT no-op, so it is removed from repository ...
-        RepositorySourceListener listener2 = mock(RepositorySourceListener.class);
-        connection.setListener(listener2);
-        verify(repository, times(1)).removeListener(listener);
-        verify(repository, times(1)).addListener(listener2);
-    }
-
-    @Test
-    public void shouldRemoveListenerFromRepositoryWhenConnectionIsClosed() {
-        // Old listener is NOT no-op, so it is removed from repository ...
-        RepositorySourceListener listener2 = mock(RepositorySourceListener.class);
-        connection.setListener(listener2);
-        verify(repository, times(1)).addListener(listener2);
-
-        // Closing connection will remove listener ...
-        connection.close();
-        verify(repository, times(1)).removeListener(listener2);
-    }
 }

Modified: trunk/extensions/dna-connector-federation/src/test/java/org/jboss/dna/connector/federation/FederatedRepositoryTest.java
===================================================================
--- trunk/extensions/dna-connector-federation/src/test/java/org/jboss/dna/connector/federation/FederatedRepositoryTest.java	2009-05-19 17:40:25 UTC (rev 912)
+++ trunk/extensions/dna-connector-federation/src/test/java/org/jboss/dna/connector/federation/FederatedRepositoryTest.java	2009-05-19 20:15:05 UTC (rev 913)
@@ -27,13 +27,11 @@
 import static org.hamcrest.core.IsNull.notNullValue;
 import static org.hamcrest.core.IsSame.sameInstance;
 import static org.junit.Assert.assertThat;
-import static org.junit.matchers.JUnitMatchers.hasItems;
 import static org.mockito.Mockito.stub;
 import java.util.ArrayList;
 import java.util.Collection;
 import org.jboss.dna.graph.ExecutionContext;
 import org.jboss.dna.graph.connector.RepositoryConnectionFactory;
-import org.jboss.dna.graph.connector.RepositorySourceListener;
 import org.junit.Before;
 import org.junit.Test;
 import org.mockito.MockitoAnnotations;
@@ -50,10 +48,6 @@
     @Mock
     private FederatedWorkspace config;
     @Mock
-    private RepositorySourceListener listener1;
-    @Mock
-    private RepositorySourceListener listener2;
-    @Mock
     private RepositoryConnectionFactory connectionFactory;
 
     @Before
@@ -73,72 +67,6 @@
     }
 
     @Test
-    public void shouldHaveNoListenersUponCreation() {
-        assertThat(repository.getListeners(), is(notNullValue()));
-        assertThat(repository.getListeners().isEmpty(), is(true));
-    }
-
-    @Test
-    public void shouldNotAddNullListener() {
-        assertThat(repository.addListener(null), is(false));
-    }
-
-    @Test
-    public void shouldNotAddListenerIfAlreadyInList() {
-        assertThat(repository.getListeners().size(), is(0));
-        assertThat(repository.addListener(listener1), is(true));
-        assertThat(repository.getListeners().size(), is(1));
-        assertThat(repository.addListener(listener1), is(false));
-        assertThat(repository.getListeners().size(), is(1));
-    }
-
-    @Test
-    public void shouldAddDifferentListeners() {
-        assertThat(repository.getListeners().size(), is(0));
-        assertThat(repository.addListener(listener1), is(true));
-        assertThat(repository.getListeners().size(), is(1));
-        assertThat(repository.addListener(listener2), is(true));
-        assertThat(repository.getListeners().size(), is(2));
-        assertThat(repository.getListeners(), hasItems(listener1, listener2));
-        assertThat(repository.getListeners().get(0), is(sameInstance(listener1)));
-        assertThat(repository.getListeners().get(1), is(sameInstance(listener2)));
-    }
-
-    @Test
-    public void shouldAllowReorderingOfListeners() {
-        assertThat(repository.getListeners().size(), is(0));
-        assertThat(repository.addListener(listener1), is(true));
-        assertThat(repository.addListener(listener2), is(true));
-        assertThat(repository.getListeners().size(), is(2));
-        assertThat(repository.getListeners(), hasItems(listener1, listener2));
-        repository.getListeners().remove(0);
-        repository.getListeners().add(1, listener1);
-        assertThat(repository.getListeners(), hasItems(listener2, listener1));
-        assertThat(repository.getListeners().get(0), is(sameInstance(listener2)));
-        assertThat(repository.getListeners().get(1), is(sameInstance(listener1)));
-    }
-
-    @Test
-    public void shouldAllowRemovalOfListeners() {
-        assertThat(repository.getListeners().size(), is(0));
-        assertThat(repository.addListener(listener1), is(true));
-        assertThat(repository.addListener(listener2), is(true));
-        assertThat(repository.getListeners(), hasItems(listener1, listener2));
-        assertThat(repository.removeListener(listener1), is(true));
-        assertThat(repository.getListeners(), hasItems(listener2));
-        assertThat(repository.removeListener(listener2), is(true));
-        assertThat(repository.getListeners(), hasItems(new RepositorySourceListener[] {}));
-    }
-
-    @Test
-    public void shouldNotRemoveListenerThatIsNotAlreadyRegistered() {
-        assertThat(repository.getListeners().size(), is(0));
-        assertThat(repository.addListener(listener1), is(true));
-        assertThat(repository.getListeners().size(), is(1));
-        assertThat(repository.removeListener(listener2), is(false));
-    }
-
-    @Test
     public void shouldHaveConfigurationAfterInitialization() {
         assertThat(repository.getWorkspaceConfigurations(), is(notNullValue()));
         assertThat(repository.getWorkspaceConfigurations().get("workspace"), is(sameInstance(config)));

Modified: trunk/extensions/dna-connector-filesystem/src/main/java/org/jboss/dna/connector/filesystem/FileSystemConnection.java
===================================================================
--- trunk/extensions/dna-connector-filesystem/src/main/java/org/jboss/dna/connector/filesystem/FileSystemConnection.java	2009-05-19 17:40:25 UTC (rev 912)
+++ trunk/extensions/dna-connector-filesystem/src/main/java/org/jboss/dna/connector/filesystem/FileSystemConnection.java	2009-05-19 20:15:05 UTC (rev 913)
@@ -26,14 +26,12 @@
 import java.io.File;
 import java.io.FilenameFilter;
 import java.util.Set;
-import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.concurrent.TimeUnit;
 import javax.transaction.xa.XAResource;
 import org.jboss.dna.graph.ExecutionContext;
 import org.jboss.dna.graph.cache.CachePolicy;
 import org.jboss.dna.graph.connector.RepositoryConnection;
 import org.jboss.dna.graph.connector.RepositorySourceException;
-import org.jboss.dna.graph.connector.RepositorySourceListener;
 import org.jboss.dna.graph.request.Request;
 import org.jboss.dna.graph.request.processor.RequestProcessor;
 
@@ -50,7 +48,6 @@
     private final CachePolicy cachePolicy;
     private final Set<String> availableWorkspaceNames;
     private final boolean creatingWorkspacesAllowed;
-    private final CopyOnWriteArrayList<RepositorySourceListener> listeners = new CopyOnWriteArrayList<RepositorySourceListener>();
     private final FilenameFilter filenameFilter;
     private final boolean updatesAllowed;
 
@@ -103,17 +100,6 @@
     /**
      * {@inheritDoc}
      * 
-     * @see org.jboss.dna.graph.connector.RepositoryConnection#setListener(org.jboss.dna.graph.connector.RepositorySourceListener)
-     */
-    public void setListener( RepositorySourceListener listener ) {
-        if (listener != null) {
-            listeners.addIfAbsent(listener);
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     * 
      * @see org.jboss.dna.graph.connector.RepositoryConnection#ping(long, java.util.concurrent.TimeUnit)
      */
     public boolean ping( long time,

Modified: trunk/extensions/dna-connector-jbosscache/src/main/java/org/jboss/dna/connector/jbosscache/JBossCacheConnection.java
===================================================================
--- trunk/extensions/dna-connector-jbosscache/src/main/java/org/jboss/dna/connector/jbosscache/JBossCacheConnection.java	2009-05-19 17:40:25 UTC (rev 912)
+++ trunk/extensions/dna-connector-jbosscache/src/main/java/org/jboss/dna/connector/jbosscache/JBossCacheConnection.java	2009-05-19 20:15:05 UTC (rev 913)
@@ -29,7 +29,6 @@
 import org.jboss.dna.graph.cache.CachePolicy;
 import org.jboss.dna.graph.connector.RepositoryConnection;
 import org.jboss.dna.graph.connector.RepositorySourceException;
-import org.jboss.dna.graph.connector.RepositorySourceListener;
 import org.jboss.dna.graph.request.Request;
 import org.jboss.dna.graph.request.processor.RequestProcessor;
 
@@ -40,20 +39,8 @@
  */
 public class JBossCacheConnection implements RepositoryConnection {
 
-    protected static final RepositorySourceListener NO_OP_LISTENER = new RepositorySourceListener() {
-
-        /**
-         * {@inheritDoc}
-         */
-        public void notify( String sourceName,
-                            Object... events ) {
-            // do nothing
-        }
-    };
-
     private final JBossCacheSource source;
     private final JBossCacheWorkspaces workspaces;
-    private RepositorySourceListener listener = NO_OP_LISTENER;
 
     JBossCacheConnection( JBossCacheSource source,
                           JBossCacheWorkspaces workspaces ) {
@@ -95,13 +82,6 @@
     /**
      * {@inheritDoc}
      */
-    public void setListener( RepositorySourceListener listener ) {
-        this.listener = listener != null ? listener : NO_OP_LISTENER;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
     public void close() {
         // do nothing
     }
@@ -123,11 +103,4 @@
             processor.close();
         }
     }
-
-    /**
-     * @return listener
-     */
-    protected RepositorySourceListener getListener() {
-        return this.listener;
-    }
 }

Modified: trunk/extensions/dna-connector-jdbc-metadata/src/main/java/org/jboss/dna/connector/jdbc/JdbcConnection.java
===================================================================
--- trunk/extensions/dna-connector-jdbc-metadata/src/main/java/org/jboss/dna/connector/jdbc/JdbcConnection.java	2009-05-19 17:40:25 UTC (rev 912)
+++ trunk/extensions/dna-connector-jdbc-metadata/src/main/java/org/jboss/dna/connector/jdbc/JdbcConnection.java	2009-05-19 20:15:05 UTC (rev 913)
@@ -26,17 +26,14 @@
 import java.sql.Connection;
 import java.sql.SQLException;
 import java.util.UUID;
-import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.concurrent.TimeUnit;
-import javax.transaction.xa.XAResource;
 import javax.sql.XAConnection;
-
+import javax.transaction.xa.XAResource;
 import org.jboss.dna.common.util.Logger;
 import org.jboss.dna.graph.ExecutionContext;
 import org.jboss.dna.graph.cache.CachePolicy;
 import org.jboss.dna.graph.connector.RepositoryConnection;
 import org.jboss.dna.graph.connector.RepositorySourceException;
-import org.jboss.dna.graph.connector.RepositorySourceListener;
 import org.jboss.dna.graph.request.Request;
 import org.jboss.dna.graph.request.processor.RequestProcessor;
 
@@ -53,14 +50,13 @@
 
     private final String name;
     private final CachePolicy cachePolicy;
-    private final CopyOnWriteArrayList<RepositorySourceListener> listeners = new CopyOnWriteArrayList<RepositorySourceListener>();
     private final Connection connection;
     private final UUID rootNodeUuid;
 
     /*package*/JdbcConnection( String sourceName,
-                               CachePolicy cachePolicy,
-                               Connection connection,
-                               UUID rootNodeUuid) {
+                                CachePolicy cachePolicy,
+                                Connection connection,
+                                UUID rootNodeUuid ) {
         assert sourceName != null;
         assert connection != null;
         assert rootNodeUuid != null;
@@ -82,17 +78,6 @@
     /**
      * {@inheritDoc}
      * 
-     * @see org.jboss.dna.graph.connector.RepositoryConnection#setListener(org.jboss.dna.graph.connector.RepositorySourceListener)
-     */
-    public void setListener( RepositorySourceListener listener ) {
-        if (listener != null) {
-            listeners.addIfAbsent(listener);
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     * 
      * @see org.jboss.dna.graph.connector.RepositoryConnection#getDefaultCachePolicy()
      */
     public CachePolicy getDefaultCachePolicy() {
@@ -110,13 +95,13 @@
             try {
                 return ((XAConnection)connection).getXAResource();
             } catch (SQLException e) {
-                // handle an exception silently so far and write it to the log 
+                // handle an exception silently so far and write it to the log
                 log.error(e, JdbcMetadataI18n.unableToGetXAResource, getSourceName());
                 return null;
             }
         }
         // default
-        return null;    
+        return null;
     }
 
     /**
@@ -129,7 +114,7 @@
         try {
             // JDBC 4 has a method to check validity of a connection (connection.isValid(timeout))
             // but many drivers didn't get updated with latest spec
-            return connection != null && ! connection.isClosed();
+            return connection != null && !connection.isClosed();
         } catch (SQLException e) {
             // debug
             if (log.isDebugEnabled()) {
@@ -147,8 +132,8 @@
      */
     public void execute( ExecutionContext context,
                          Request request ) throws RepositorySourceException {
-        // create processor and delegate handling 
-        RequestProcessor proc = new JdbcRequestProcesor(getSourceName(),context, connection, rootNodeUuid);
+        // create processor and delegate handling
+        RequestProcessor proc = new JdbcRequestProcesor(getSourceName(), context, connection, rootNodeUuid);
         try {
             proc.process(request);
         } finally {
@@ -164,7 +149,7 @@
     public void close() {
         try {
             // release the JDBC connection resource
-            if (connection != null && ! connection.isClosed()) {
+            if (connection != null && !connection.isClosed()) {
                 connection.close();
             }
         } catch (Exception e) {

Modified: trunk/extensions/dna-connector-store-jpa/src/main/java/org/jboss/dna/connector/store/jpa/JpaConnection.java
===================================================================
--- trunk/extensions/dna-connector-store-jpa/src/main/java/org/jboss/dna/connector/store/jpa/JpaConnection.java	2009-05-19 17:40:25 UTC (rev 912)
+++ trunk/extensions/dna-connector-store-jpa/src/main/java/org/jboss/dna/connector/store/jpa/JpaConnection.java	2009-05-19 20:15:05 UTC (rev 913)
@@ -24,7 +24,6 @@
 package org.jboss.dna.connector.store.jpa;
 
 import java.util.UUID;
-import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.concurrent.TimeUnit;
 import javax.persistence.EntityManager;
 import javax.transaction.xa.XAResource;
@@ -32,7 +31,6 @@
 import org.jboss.dna.graph.cache.CachePolicy;
 import org.jboss.dna.graph.connector.RepositoryConnection;
 import org.jboss.dna.graph.connector.RepositorySourceException;
-import org.jboss.dna.graph.connector.RepositorySourceListener;
 import org.jboss.dna.graph.request.Request;
 import org.jboss.dna.graph.request.processor.RequestProcessor;
 
@@ -43,7 +41,6 @@
 
     private final String name;
     private final CachePolicy cachePolicy;
-    private final CopyOnWriteArrayList<RepositorySourceListener> listeners = new CopyOnWriteArrayList<RepositorySourceListener>();
     private final EntityManager entityManager;
     private final Model model;
     private final UUID rootNodeUuid;
@@ -94,17 +91,6 @@
     /**
      * {@inheritDoc}
      * 
-     * @see org.jboss.dna.graph.connector.RepositoryConnection#setListener(org.jboss.dna.graph.connector.RepositorySourceListener)
-     */
-    public void setListener( RepositorySourceListener listener ) {
-        if (listener != null) {
-            listeners.addIfAbsent(listener);
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     * 
      * @see org.jboss.dna.graph.connector.RepositoryConnection#getDefaultCachePolicy()
      */
     public CachePolicy getDefaultCachePolicy() {

Modified: trunk/extensions/dna-connector-svn/src/main/java/org/jboss/dna/connector/svn/SVNRepositoryConnection.java
===================================================================
--- trunk/extensions/dna-connector-svn/src/main/java/org/jboss/dna/connector/svn/SVNRepositoryConnection.java	2009-05-19 17:40:25 UTC (rev 912)
+++ trunk/extensions/dna-connector-svn/src/main/java/org/jboss/dna/connector/svn/SVNRepositoryConnection.java	2009-05-19 20:15:05 UTC (rev 913)
@@ -30,7 +30,6 @@
 import org.jboss.dna.graph.cache.CachePolicy;
 import org.jboss.dna.graph.connector.RepositoryConnection;
 import org.jboss.dna.graph.connector.RepositorySourceException;
-import org.jboss.dna.graph.connector.RepositorySourceListener;
 import org.jboss.dna.graph.property.PathFactory;
 import org.jboss.dna.graph.property.PropertyFactory;
 import org.jboss.dna.graph.request.Request;
@@ -48,22 +47,10 @@
  */
 public class SVNRepositoryConnection implements RepositoryConnection {
 
-    protected static final RepositorySourceListener NO_OP_LISTENER = new RepositorySourceListener() {
-
-        /**
-         * {@inheritDoc}
-         */
-        public void notify( String sourceName,
-                            Object... events ) {
-            // do nothing
-        }
-    };
-
     private final String sourceName;
     private final CachePolicy cachePolicy;
     private final SVNRepository repository;
     private final boolean updatesAllowed;
-    private RepositorySourceListener listener = NO_OP_LISTENER;
 
     public SVNRepositoryConnection( String sourceName,
                                     CachePolicy cachePolicy,
@@ -142,13 +129,6 @@
 
     /**
      * {@inheritDoc}
-     */
-    public void setListener( RepositorySourceListener listener ) {
-        this.listener = listener != null ? listener : NO_OP_LISTENER;
-    }
-
-    /**
-     * {@inheritDoc}
      * 
      * @see org.jboss.dna.graph.connector.RepositoryConnection#close()
      */
@@ -176,11 +156,4 @@
             processor.close();
         }
     }
-
-    /**
-     * @return listener
-     */
-    protected RepositorySourceListener getListener() {
-        return this.listener;
-    }
 }

Modified: trunk/extensions/dna-connector-svn/src/test/java/org/jboss/dna/connector/svn/SVNRepositoryConnectionTest.java
===================================================================
--- trunk/extensions/dna-connector-svn/src/test/java/org/jboss/dna/connector/svn/SVNRepositoryConnectionTest.java	2009-05-19 17:40:25 UTC (rev 912)
+++ trunk/extensions/dna-connector-svn/src/test/java/org/jboss/dna/connector/svn/SVNRepositoryConnectionTest.java	2009-05-19 20:15:05 UTC (rev 913)
@@ -23,8 +23,6 @@
 */
 package org.jboss.dna.connector.svn;
 
-import static org.mockito.Mockito.stub;
-import static org.mockito.Mockito.verify;
 import static org.hamcrest.core.Is.is;
 import static org.hamcrest.core.IsNull.notNullValue;
 import static org.hamcrest.core.IsSame.sameInstance;
@@ -37,7 +35,6 @@
 import java.util.List;
 import java.util.concurrent.TimeUnit;
 import org.jboss.dna.common.text.UrlEncoder;
-import org.jboss.dna.common.util.FileUtil;
 import org.jboss.dna.graph.DnaLexicon;
 import org.jboss.dna.graph.ExecutionContext;
 import org.jboss.dna.graph.Graph;
@@ -46,7 +43,6 @@
 import org.jboss.dna.graph.Location;
 import org.jboss.dna.graph.Node;
 import org.jboss.dna.graph.cache.CachePolicy;
-import org.jboss.dna.graph.connector.RepositorySourceListener;
 import org.jboss.dna.graph.property.Binary;
 import org.jboss.dna.graph.property.DateTimeFactory;
 import org.jboss.dna.graph.property.Name;
@@ -148,31 +144,11 @@
     @Test
     public void shouldGetTheSVNRepositoryRootFromTheSVNRepositoryWhenPinged() throws Exception {
         CachePolicy policy = mock(CachePolicy.class);
-        repository  = SVNConnectorTestUtil.createRepository(svnUrl, "sp", "");
+        repository = SVNConnectorTestUtil.createRepository(svnUrl, "sp", "");
         connection = new SVNRepositoryConnection("the source name", policy, false, repository);
         assertThat(connection.ping(1, TimeUnit.SECONDS), is(true));
     }
 
-    @Test
-    public void shouldHaveNoOpListenerWhenCreated() {
-        assertThat(connection.getListener(), is(sameInstance(SVNRepositoryConnection.NO_OP_LISTENER)));
-    }
-
-    @Test
-    public void shouldUseNoOpListenerWhenSettingListenerToNull() {
-        connection.setListener(null);
-        assertThat(connection.getListener(), is(sameInstance(SVNRepositoryConnection.NO_OP_LISTENER)));
-    }
-
-    @Test
-    public void shouldSetListenerToNonNullValue() {
-        RepositorySourceListener listener = mock(RepositorySourceListener.class);
-        connection.setListener(listener);
-        assertThat(connection.getListener(), is(sameInstance(listener)));
-        connection.setListener(null);
-        assertThat(connection.getListener(), is(sameInstance(SVNRepositoryConnection.NO_OP_LISTENER)));
-    }
-
     @Test( expected = PathNotFoundException.class )
     public void shouldFailToGetChildrenFromAWrongRequestedPath() {
         List<Location> l = graph.getChildren().of(pathFactory.create("wrongRequestedPath"));
@@ -253,16 +229,22 @@
 
     @Test
     public void shouldAddAndDeleteChildUnderRootNode() throws Exception {
-        graph.batch().create("/nodeC").with(propertyFactory().create(JcrLexicon.PRIMARY_TYPE, JcrNtLexicon.FOLDER)).and(propertyFactory().create(JcrLexicon.CREATED,
-                                                                                                                                                 dateFactory().create(new Date()))).execute();
+        graph.batch()
+             .create("/nodeC")
+             .with(propertyFactory().create(JcrLexicon.PRIMARY_TYPE, JcrNtLexicon.FOLDER))
+             .and(propertyFactory().create(JcrLexicon.CREATED, dateFactory().create(new Date())))
+             .execute();
         // Now look up the root node ...
         Node root = graph.getNodeAt("/");
         assertThat(root, is(notNullValue()));
         assertThat(root.getChildren(), hasChild(child("nodeC")));
         SVNNodeKind nodeCKind = repository.checkPath("nodeC", -1);
         assertThat(nodeCKind, is(SVNNodeKind.DIR));
-        graph.batch().create("/nodeC/nodeC_1").with(propertyFactory().create(JcrLexicon.PRIMARY_TYPE, JcrNtLexicon.FOLDER)).and(propertyFactory().create(JcrLexicon.CREATED,
-                                                                                                                                                         dateFactory().create(new Date()))).execute();
+        graph.batch()
+             .create("/nodeC/nodeC_1")
+             .with(propertyFactory().create(JcrLexicon.PRIMARY_TYPE, JcrNtLexicon.FOLDER))
+             .and(propertyFactory().create(JcrLexicon.CREATED, dateFactory().create(new Date())))
+             .execute();
         // Now look up the root node ...
         Node nodeC = graph.getNodeAt("/nodeC");
         assertThat(nodeC, is(notNullValue()));
@@ -272,8 +254,12 @@
 
         byte[] content1 = "My content".getBytes();
         Property jcrDataProperty = propertyFactory().create(JcrLexicon.DATA, binaryFactory().create(content1));
-        graph.batch().create("/nodeC/nodeC_1/file1.txt").with(propertyFactory().create(JcrLexicon.PRIMARY_TYPE, JcrNtLexicon.FILE)).and(propertyFactory().create(JcrLexicon.CREATED,
-                                                                                                                                                                 new Date())).and(jcrDataProperty).execute();
+        graph.batch()
+             .create("/nodeC/nodeC_1/file1.txt")
+             .with(propertyFactory().create(JcrLexicon.PRIMARY_TYPE, JcrNtLexicon.FILE))
+             .and(propertyFactory().create(JcrLexicon.CREATED, new Date()))
+             .and(jcrDataProperty)
+             .execute();
 
         // Look up the file
         Node nodeC1 = graph.getNodeAt("/nodeC/nodeC_1");




More information about the dna-commits mailing list