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 <[email protected]>
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.
  */
 
[email protected]("1.0")
[email protected]("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());

Reply via email to