You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2011/05/02 08:56:02 UTC
svn commit: r1098502 - in /sling/trunk/bundles/jcr/resource: pom.xml
src/main/java/org/apache/sling/jcr/resource/internal/JcrResourceListener.java
Author: cziegeler
Date: Mon May 2 06:56:02 2011
New Revision: 1098502
URL: http://svn.apache.org/viewvc?rev=1098502&view=rev
Log:
SLING-2068 : Add info if resource event is external or locally
Modified:
sling/trunk/bundles/jcr/resource/pom.xml
sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrResourceListener.java
Modified: sling/trunk/bundles/jcr/resource/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/resource/pom.xml?rev=1098502&r1=1098501&r2=1098502&view=diff
==============================================================================
--- sling/trunk/bundles/jcr/resource/pom.xml (original)
+++ sling/trunk/bundles/jcr/resource/pom.xml Mon May 2 06:56:02 2011
@@ -71,6 +71,9 @@
org.apache.sling.commons.osgi;version="$(@)",
*
</Import-Package>
+ <DynamicImport-Package>
+ org.apache.jackrabbit.api.observation
+ </DynamicImport-Package>
<Export-Package>
org.apache.sling.jcr.resource;version=2.1
</Export-Package>
@@ -103,6 +106,12 @@
<dependencies>
<dependency>
+ <groupId>org.apache.jackrabbit</groupId>
+ <artifactId>jackrabbit-api</artifactId>
+ <version>2.0.0</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
<groupId>org.apache.felix</groupId>
<artifactId>org.apache.felix.scr.annotations</artifactId>
</dependency>
@@ -205,11 +214,5 @@
<version>1.4</version>
<scope>test</scope>
</dependency>
- <dependency>
- <groupId>org.apache.jackrabbit</groupId>
- <artifactId>jackrabbit-api</artifactId>
- <version>2.0.0</version>
- <scope>test</scope>
- </dependency>
</dependencies>
</project>
Modified: sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrResourceListener.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrResourceListener.java?rev=1098502&r1=1098501&r2=1098502&view=diff
==============================================================================
--- sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrResourceListener.java (original)
+++ sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrResourceListener.java Mon May 2 06:56:02 2011
@@ -31,6 +31,7 @@ import javax.jcr.observation.Event;
import javax.jcr.observation.EventIterator;
import javax.jcr.observation.EventListener;
+import org.apache.jackrabbit.api.observation.JackrabbitEvent;
import org.apache.sling.api.SlingConstants;
import org.apache.sling.api.resource.LoginException;
import org.apache.sling.api.resource.Resource;
@@ -71,6 +72,9 @@ public class JcrResourceListener impleme
/** The event admin tracker. */
private final ServiceTracker eventAdminTracker;
+ /** Is the Jackrabbit event class available? */
+ private final boolean hasJackrabbitEventClass;
+
/**
* Constructor.
* @param workspaceName The workspace name to observe
@@ -100,6 +104,14 @@ public class JcrResourceListener impleme
this.session.getWorkspace().getObservationManager().addEventListener(this,
Event.NODE_ADDED|Event.NODE_REMOVED|Event.PROPERTY_ADDED|Event.PROPERTY_CHANGED|Event.PROPERTY_REMOVED,
this.startPath, true, null, null, false);
+ boolean foundClass = false;
+ try {
+ this.getClass().getClassLoader().loadClass(JackrabbitEvent.class.getName());
+ foundClass = true;
+ } catch (final Throwable t) {
+ // we ignore this
+ }
+ this.hasJackrabbitEventClass = foundClass;
}
/**
@@ -169,6 +181,9 @@ public class JcrResourceListener impleme
final Dictionary<String, String> properties = new Hashtable<String, String>();
properties.put(SlingConstants.PROPERTY_PATH, createWorkspacePath(e.getKey()));
properties.put(SlingConstants.PROPERTY_USERID, e.getValue().getUserID());
+ if ( this.isExternal(e.getValue()) ) {
+ properties.put("event.application", "unknown");
+ }
localEA.postEvent(new org.osgi.service.event.Event(SlingConstants.TOPIC_RESOURCE_REMOVED, properties));
}
@@ -194,7 +209,7 @@ public class JcrResourceListener impleme
* @param topic The topic that should be used for the OSGi event.
* @param localEA The OSGi Event Admin that can be used to post events.
*/
- private void sendOsgiEvent(String path, Event event, final String topic, final EventAdmin localEA) {
+ private void sendOsgiEvent(String path, final Event event, final String topic, final EventAdmin localEA) {
path = createWorkspacePath(path);
Resource resource = this.resolver.getResource(path);
if ( resource != null ) {
@@ -225,10 +240,21 @@ public class JcrResourceListener impleme
if ( resourceSuperType != null ) {
properties.put(SlingConstants.PROPERTY_RESOURCE_SUPER_TYPE, resource.getResourceSuperType());
}
+ if ( this.isExternal(event) ) {
+ properties.put("event.application", "unknown");
+ }
localEA.postEvent(new org.osgi.service.event.Event(topic, properties));
}
}
+ private boolean isExternal(final Event event) {
+ if ( this.hasJackrabbitEventClass && event instanceof JackrabbitEvent) {
+ final JackrabbitEvent jEvent = (JackrabbitEvent)event;
+ return jEvent.isExternal();
+ }
+ return false;
+ }
+
private String createWorkspacePath(final String path) {
if (workspaceName == null) {
return path;