You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by js...@apache.org on 2021/07/02 14:10:49 UTC
[jackrabbit-filevault] branch
bugfix/JCRVLT-544-refactored-EffectiveNodeType updated: JCRVLT-544 never
create intermediate nodes of type nt:base or nt:hierarchyNode
This is an automated email from the ASF dual-hosted git repository.
jsedding pushed a commit to branch bugfix/JCRVLT-544-refactored-EffectiveNodeType
in repository https://gitbox.apache.org/repos/asf/jackrabbit-filevault.git
The following commit(s) were added to refs/heads/bugfix/JCRVLT-544-refactored-EffectiveNodeType by this push:
new 3734a33 JCRVLT-544 never create intermediate nodes of type nt:base or nt:hierarchyNode
3734a33 is described below
commit 3734a3384f734b27c93be6f059074d3543167813
Author: Julian Sedding <js...@apache.org>
AuthorDate: Fri Jul 2 16:10:37 2021 +0200
JCRVLT-544 never create intermediate nodes of type nt:base or nt:hierarchyNode
- address feedback
---
.../vault/fs/impl/io/DocViewSAXImporter.java | 2 +-
.../vault/fs/impl/io/FolderArtifactHandler.java | 3 +-
.../jackrabbit/vault/util/EffectiveNodeType.java | 43 ++++++++++------------
3 files changed, 22 insertions(+), 26 deletions(-)
diff --git a/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/io/DocViewSAXImporter.java b/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/io/DocViewSAXImporter.java
index 084f4d9..1cfa615 100644
--- a/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/io/DocViewSAXImporter.java
+++ b/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/io/DocViewSAXImporter.java
@@ -1114,7 +1114,7 @@ public class DocViewSAXImporter extends RejectingEntityDefaultHandler implements
* @return {@code true} in case the property is protected, {@code false} otherwise
*/
private static boolean isPropertyProtected(@NotNull EffectiveNodeType effectiveNodeType, @NotNull DocViewProperty docViewProperty) {
- return effectiveNodeType.getPropertyDef(docViewProperty.name, docViewProperty.isMulti, docViewProperty.type)
+ return effectiveNodeType.getPropertyDefinition(docViewProperty.name, docViewProperty.isMulti, docViewProperty.type)
.map(PropertyDefinition::isProtected)
.orElse(false);
}
diff --git a/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/io/FolderArtifactHandler.java b/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/io/FolderArtifactHandler.java
index b142c6a..85ecd2e 100644
--- a/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/io/FolderArtifactHandler.java
+++ b/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/io/FolderArtifactHandler.java
@@ -87,9 +87,10 @@ public class FolderArtifactHandler extends AbstractArtifactHandler {
private @Nullable String getDefaultPrimaryChildNodeType(Node parent, String intermediateNodeName) throws RepositoryException {
EffectiveNodeType effectiveNodeType = EffectiveNodeType.ofNode(parent);
- return effectiveNodeType.getChildNodeDef(intermediateNodeName)
+ return effectiveNodeType.getChildNodeDefinitions(intermediateNodeName)
.filter(nd -> nd.getDefaultPrimaryType() != null)
.map(NodeDefinition::getDefaultPrimaryTypeName)
+ .findFirst()
.orElse(null);
}
diff --git a/vault-core/src/main/java/org/apache/jackrabbit/vault/util/EffectiveNodeType.java b/vault-core/src/main/java/org/apache/jackrabbit/vault/util/EffectiveNodeType.java
index b75d14b..adb109e 100644
--- a/vault-core/src/main/java/org/apache/jackrabbit/vault/util/EffectiveNodeType.java
+++ b/vault-core/src/main/java/org/apache/jackrabbit/vault/util/EffectiveNodeType.java
@@ -29,6 +29,7 @@ import javax.jcr.nodetype.PropertyDefinition;
import java.util.Comparator;
import java.util.List;
import java.util.Optional;
+import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -65,46 +66,40 @@ public final class EffectiveNodeType {
*
* This replicates the logic from https://github.com/apache/jackrabbit-oak/blob/274f92402a12978040939965e92ee4519f2ce1c3/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/EffectiveNodeTypeImpl.java#L365
*/
- public @NotNull Optional<PropertyDefinition> getPropertyDef(@NotNull String name, boolean isMultiple, int type) {
- return getPropertyDef(name)
+ public @NotNull Optional<PropertyDefinition> getPropertyDefinition(@NotNull String name, boolean isMultiple, int type) {
+ return getPropertyDefinitions(name)
.filter(pd -> isMultiple == pd.isMultiple())
- .filter(pd -> type == pd.getRequiredType() || UNDEFINED == type || UNDEFINED == pd.getRequiredType());
+ .filter(pd -> type == pd.getRequiredType() || UNDEFINED == type || UNDEFINED == pd.getRequiredType())
+ .findFirst();
}
- public @NotNull Optional<PropertyDefinition> getPropertyDef(@NotNull String name) {
- return nodeTypes.stream()
- .flatMap(nt -> Stream.of(nt.getPropertyDefinitions()))
- .filter(byName(name))
- .min(Comparator.comparing(ItemDefinition::getName, wildcardAwareNameComparator()));
+ public @NotNull Stream<PropertyDefinition> getPropertyDefinitions(@NotNull String name) {
+ return getItemDefinitions(name, NodeType::getPropertyDefinitions);
+ }
+
+ public @NotNull Stream<NodeDefinition> getChildNodeDefinitions(@NotNull String name) {
+ return getItemDefinitions(name, NodeType::getChildNodeDefinitions);
}
- public @NotNull Optional<NodeDefinition> getChildNodeDef(@NotNull String name) {
+ private <T extends ItemDefinition> Stream<T> getItemDefinitions(String name, Function<NodeType, T[]> itemDefinitionAccessor) {
return nodeTypes.stream()
- .flatMap(nt -> Stream.of(nt.getChildNodeDefinitions()))
+ .map(itemDefinitionAccessor)
+ .flatMap(Stream::of)
.filter(byName(name))
- .min(Comparator.comparing(ItemDefinition::getName, wildcardAwareNameComparator()));
+ .sorted(Comparator.comparing(ItemDefinition::getName, wildcardAwareNameComparator()));
}
private static Predicate<? super ItemDefinition> byName(String name) {
- final Predicate<? super ItemDefinition> namePredicate;
- if (name != null) {
- namePredicate = pd -> name.equals(pd.getName()) || "*".equals(pd.getName());
- } else {
- namePredicate = pd -> "*".equals(pd.getName());
- }
- return namePredicate;
+ return pd -> Optional.ofNullable(name).orElse("*").equals(pd.getName());
}
// always sort wildcard(s) last
private static Comparator<String> wildcardAwareNameComparator() {
return (a, b) -> {
- if (a.equals("*")) {
- return (b.equals("*")) ? 0 : 1;
- } else if (b.equals("*")) {
- return -1;
- } else {
- return a.compareTo(b);
+ if (a.equals("*") || b.equals("*")) {
+ return (a.equals("*")) ? 1 : -1;
}
+ return 0;
};
}