You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by kw...@apache.org on 2023/10/05 13:42:25 UTC
[sling-org-apache-sling-jcr-resource] branch feature/expose-jcr-observation-user-data created (now 915295b)
This is an automated email from the ASF dual-hosted git repository.
kwin pushed a change to branch feature/expose-jcr-observation-user-data
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-jcr-resource.git
at 915295b SLING-12076 Export JcrResourceChange with additional method getUserData()
This branch includes the following new commits:
new 915295b SLING-12076 Export JcrResourceChange with additional method getUserData()
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
[sling-org-apache-sling-jcr-resource] 01/01: SLING-12076 Export JcrResourceChange with additional method getUserData()
Posted by kw...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
kwin pushed a commit to branch feature/expose-jcr-observation-user-data
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-jcr-resource.git
commit 915295bee7e00991c0e6c1fea833f1051a03bc82
Author: Konrad Windszus <kw...@apache.org>
AuthorDate: Thu Oct 5 15:42:19 2023 +0200
SLING-12076 Export JcrResourceChange with additional method
getUserData()
---
pom.xml | 6 ++++++
.../jcr/resource/{internal => api}/JcrResourceChange.java | 12 +++++++++---
.../org/apache/sling/jcr/resource/api/package-info.java | 2 +-
.../sling/jcr/resource/internal/JcrResourceListener.java | 13 ++++++++++++-
.../jcr/resource/internal/JcrResourceListenerTest.java | 4 ++++
5 files changed, 32 insertions(+), 5 deletions(-)
diff --git a/pom.xml b/pom.xml
index 4897f40..6bd54d0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -212,6 +212,12 @@
<artifactId>org.apache.sling.testing.sling-mock.junit4</artifactId>
<version>2.6.2</version>
<scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>org.apache.sling.jcr.resource</artifactId>
+ </exclusion>
+ </exclusions>
</dependency>
<dependency>
<groupId>org.osgi</groupId>
diff --git a/src/main/java/org/apache/sling/jcr/resource/internal/JcrResourceChange.java b/src/main/java/org/apache/sling/jcr/resource/api/JcrResourceChange.java
similarity index 79%
rename from src/main/java/org/apache/sling/jcr/resource/internal/JcrResourceChange.java
rename to src/main/java/org/apache/sling/jcr/resource/api/JcrResourceChange.java
index c647a05..62fb8af 100644
--- a/src/main/java/org/apache/sling/jcr/resource/internal/JcrResourceChange.java
+++ b/src/main/java/org/apache/sling/jcr/resource/api/JcrResourceChange.java
@@ -16,27 +16,33 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.sling.jcr.resource.internal;
+package org.apache.sling.jcr.resource.api;
import org.apache.sling.api.resource.observation.ResourceChange;
/**
- * Extension of {@code ResourceChange} to support user id (if available)
+ * Extension of {@code ResourceChange} to support user id and user data (if available)
*/
public class JcrResourceChange extends ResourceChange {
private final String userId;
+ private final String userData;
public JcrResourceChange(final ResourceChange.ChangeType changeType,
final String path,
final boolean isExternal,
- final String userId) {
+ final String userId, String userData) {
super(changeType, path, isExternal);
this.userId = userId;
+ this.userData = userData;
}
@Override
public String getUserId() {
return userId;
}
+
+ public String getUserData() {
+ return userData;
+ }
}
\ No newline at end of file
diff --git a/src/main/java/org/apache/sling/jcr/resource/api/package-info.java b/src/main/java/org/apache/sling/jcr/resource/api/package-info.java
index 7d9e0ee..c9eec2c 100644
--- a/src/main/java/org/apache/sling/jcr/resource/api/package-info.java
+++ b/src/main/java/org/apache/sling/jcr/resource/api/package-info.java
@@ -17,7 +17,7 @@
* under the License.
*/
-@org.osgi.annotation.versioning.Version("1.0")
+@org.osgi.annotation.versioning.Version("1.1.0")
package org.apache.sling.jcr.resource.api;
diff --git a/src/main/java/org/apache/sling/jcr/resource/internal/JcrResourceListener.java b/src/main/java/org/apache/sling/jcr/resource/internal/JcrResourceListener.java
index 122a2bb..66c4357 100644
--- a/src/main/java/org/apache/sling/jcr/resource/internal/JcrResourceListener.java
+++ b/src/main/java/org/apache/sling/jcr/resource/internal/JcrResourceListener.java
@@ -38,8 +38,11 @@ import javax.jcr.observation.EventListener;
import org.apache.jackrabbit.api.observation.JackrabbitEvent;
import org.apache.sling.api.resource.observation.ResourceChange;
import org.apache.sling.api.resource.observation.ResourceChange.ChangeType;
+import org.apache.sling.jcr.resource.api.JcrResourceChange;
import org.apache.sling.spi.resource.provider.ObservationReporter;
import org.apache.sling.spi.resource.provider.ObserverConfiguration;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* The <code>JcrResourceListener</code> listens for JCR observation
@@ -52,6 +55,8 @@ public class JcrResourceListener implements EventListener, Closeable {
private final JcrListenerBaseConfig baseConfig;
+ private static final Logger logger = LoggerFactory.getLogger(JcrResourceListener.class);
+
public JcrResourceListener(final JcrListenerBaseConfig listenerConfig,
final ObserverConfiguration config) throws RepositoryException {
this.baseConfig = listenerConfig;
@@ -164,7 +169,13 @@ public class JcrResourceListener implements EventListener, Closeable {
} else {
userId = null;
}
- return new JcrResourceChange(changeType, path, isExternal, userId);
+ String userData = null;
+ try {
+ userData = event.getUserData();
+ } catch (RepositoryException e) {
+ logger.debug("Could not access user data from event " + event, e);
+ }
+ return new JcrResourceChange(changeType, path, isExternal, userId, userData);
}
private static boolean isExternal(final Event event) {
diff --git a/src/test/java/org/apache/sling/jcr/resource/internal/JcrResourceListenerTest.java b/src/test/java/org/apache/sling/jcr/resource/internal/JcrResourceListenerTest.java
index 421c166..9389a69 100644
--- a/src/test/java/org/apache/sling/jcr/resource/internal/JcrResourceListenerTest.java
+++ b/src/test/java/org/apache/sling/jcr/resource/internal/JcrResourceListenerTest.java
@@ -39,6 +39,7 @@ import org.apache.sling.api.resource.observation.ResourceChange;
import org.apache.sling.api.resource.observation.ResourceChange.ChangeType;
import org.apache.sling.api.resource.path.PathSet;
import org.apache.sling.jcr.api.SlingRepository;
+import org.apache.sling.jcr.resource.api.JcrResourceChange;
import org.apache.sling.jcr.resource.internal.helper.jcr.SlingRepositoryProvider;
import org.apache.sling.spi.resource.provider.ObservationReporter;
import org.apache.sling.spi.resource.provider.ObserverConfiguration;
@@ -165,6 +166,7 @@ public class JcrResourceListenerTest {
@Test
public void testSimpleOperations() throws Exception {
+ this.adminSession.getWorkspace().getObservationManager().setUserData("testUserData");
generateEvents(adminSession);
assertEquals("Received: " + events, 5, events.size());
final Set<String> addPaths = new HashSet<>();
@@ -182,6 +184,8 @@ public class JcrResourceListenerTest {
fail("Unexpected event: " + event);
}
assertNotNull(event.getUserId());
+ assertTrue(event instanceof JcrResourceChange);
+ assertEquals("testUserData", JcrResourceChange.class.cast(event).getUserData());
}
assertEquals(3, addPaths.size());