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