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());
