This is an automated email from the ASF dual-hosted git repository.

kwin pushed a commit to branch master
in repository 
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-jcr-resource.git


The following commit(s) were added to refs/heads/master by this push:
     new 8fb5a3d  SLING-12076 Export JcrResourceChange with additional method 
(#39)
8fb5a3d is described below

commit 8fb5a3d44de01f05964028debcf24531f2f65747
Author: Konrad Windszus <k...@apache.org>
AuthorDate: Mon Dec 4 13:25:23 2023 +0100

    SLING-12076 Export JcrResourceChange with additional method (#39)
    
    getUserData()
---
 pom.xml                                                |  6 ++++++
 .../resource/{internal => api}/JcrResourceChange.java  | 18 ++++++++++++++----
 .../apache/sling/jcr/resource/api/package-info.java    |  2 +-
 .../jcr/resource/internal/JcrResourceListener.java     | 13 ++++++++++++-
 .../jcr/resource/internal/JcrResourceListenerTest.java |  4 ++++
 5 files changed, 37 insertions(+), 6 deletions(-)

diff --git a/pom.xml b/pom.xml
index 23dee99..4e0a3a9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -221,6 +221,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.jmock</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 66%
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..4191888 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,37 @@
  * 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 {
+public final 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;
     }
+
+    /**
+     * Get the user data associated with the underlying JCR observation event 
({@link javax.jcr.observation.Event#getUserData()})
+     * @return the JCR observation event's user data (may be {@code null})
+     */
+    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());

Reply via email to