You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by jo...@apache.org on 2024/10/15 10:28:30 UTC
(jackrabbit-oak) branch trunk updated: OAK-11187 implement JackrabbitNode.getParentOrNull (#1781)
This is an automated email from the ASF dual-hosted git repository.
joerghoh pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/jackrabbit-oak.git
The following commit(s) were added to refs/heads/trunk by this push:
new bc58fea9b3 OAK-11187 implement JackrabbitNode.getParentOrNull (#1781)
bc58fea9b3 is described below
commit bc58fea9b36aea8d0579ec561a3bd9469bca3141
Author: Jörg Hoh <jo...@users.noreply.github.com>
AuthorDate: Tue Oct 15 12:28:26 2024 +0200
OAK-11187 implement JackrabbitNode.getParentOrNull (#1781)
---
.../org/apache/jackrabbit/api/JackrabbitNode.java | 16 ++++++++++++++++
.../java/org/apache/jackrabbit/api/package-info.java | 2 +-
.../apache/jackrabbit/oak/jcr/session/NodeImpl.java | 19 +++++++++++++++++++
3 files changed, 36 insertions(+), 1 deletion(-)
diff --git a/oak-jackrabbit-api/src/main/java/org/apache/jackrabbit/api/JackrabbitNode.java b/oak-jackrabbit-api/src/main/java/org/apache/jackrabbit/api/JackrabbitNode.java
index 537dd672e9..c5669fb102 100644
--- a/oak-jackrabbit-api/src/main/java/org/apache/jackrabbit/api/JackrabbitNode.java
+++ b/oak-jackrabbit-api/src/main/java/org/apache/jackrabbit/api/JackrabbitNode.java
@@ -16,6 +16,8 @@
*/
package org.apache.jackrabbit.api;
+import javax.jcr.AccessDeniedException;
+import javax.jcr.ItemNotFoundException;
import javax.jcr.Node;
import javax.jcr.Property;
import javax.jcr.RepositoryException;
@@ -87,4 +89,18 @@ public interface JackrabbitNode extends Node {
return null;
}
}
+
+ /**
+ * Same as {@link #getParent()}, but instead of throwing an ItemNotFoundException or AccessDeniedException
+ * just return {@code null}.
+ * @return the parent node, or {@code null} if there is no parent or the parent node is not accessible.
+ * @throws RepositoryException if an error occurs.
+ */
+ default @Nullable Node getParentOrNull() throws RepositoryException {
+ try {
+ return getParent();
+ } catch (ItemNotFoundException | AccessDeniedException e) {
+ return null;
+ }
+ }
}
diff --git a/oak-jackrabbit-api/src/main/java/org/apache/jackrabbit/api/package-info.java b/oak-jackrabbit-api/src/main/java/org/apache/jackrabbit/api/package-info.java
index 596e4759a1..9d79c4bf19 100644
--- a/oak-jackrabbit-api/src/main/java/org/apache/jackrabbit/api/package-info.java
+++ b/oak-jackrabbit-api/src/main/java/org/apache/jackrabbit/api/package-info.java
@@ -18,6 +18,6 @@
/**
* Jackrabbit extensions for JCR core interfaces
*/
-@org.osgi.annotation.versioning.Version("2.8.1")
+@org.osgi.annotation.versioning.Version("2.9.0")
package org.apache.jackrabbit.api;
diff --git a/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/NodeImpl.java b/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/NodeImpl.java
index 9265048926..688a798620 100644
--- a/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/NodeImpl.java
+++ b/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/NodeImpl.java
@@ -1679,6 +1679,25 @@ public class NodeImpl<T extends NodeDelegate> extends ItemImpl<T> implements Jac
});
}
+ @Override
+ public @Nullable Node getParentOrNull() throws RepositoryException {
+ return sessionDelegate.performNullable(new NodeOperation<Node>(dlg, "getParentOrNull") {
+ @Nullable
+ @Override
+ public Node performNullable() throws RepositoryException {
+ if (node.isRoot()) {
+ return null;
+ } else {
+ NodeDelegate parent = node.getParent();
+ if (parent == null) {
+ return null;
+ }
+ return createNode(parent, sessionContext);
+ }
+ }
+ });
+ }
+
/**
* Provide current node path. Should be invoked from within
* the SessionDelegate#perform and preferred instead of getPath