You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by kw...@apache.org on 2023/04/18 08:56:53 UTC

[jackrabbit-filevault] branch master updated: JCRVLT-703 always use original node context when reporting violations in NodeTypeValidator (#289)

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/jackrabbit-filevault.git


The following commit(s) were added to refs/heads/master by this push:
     new 21aa90f9 JCRVLT-703 always use original node context when reporting violations in NodeTypeValidator (#289)
21aa90f9 is described below

commit 21aa90f9c79f35865ab802a54f9aa8b13588ba69
Author: Konrad Windszus <kw...@apache.org>
AuthorDate: Tue Apr 18 10:56:47 2023 +0200

    JCRVLT-703 always use original node context when reporting violations in NodeTypeValidator (#289)
---
 .../spi/impl/nodetype/JcrNodeTypeMetaDataImpl.java | 30 +++++-----------------
 .../impl/nodetype/JcrNodeTypeMetaDataImplTest.java | 11 ++++----
 .../spi/impl/nodetype/NodeTypeValidatorTest.java   |  2 +-
 3 files changed, 14 insertions(+), 29 deletions(-)

diff --git a/vault-validation/src/main/java/org/apache/jackrabbit/vault/validation/spi/impl/nodetype/JcrNodeTypeMetaDataImpl.java b/vault-validation/src/main/java/org/apache/jackrabbit/vault/validation/spi/impl/nodetype/JcrNodeTypeMetaDataImpl.java
index 183ce877..e770ef1d 100644
--- a/vault-validation/src/main/java/org/apache/jackrabbit/vault/validation/spi/impl/nodetype/JcrNodeTypeMetaDataImpl.java
+++ b/vault-validation/src/main/java/org/apache/jackrabbit/vault/validation/spi/impl/nodetype/JcrNodeTypeMetaDataImpl.java
@@ -62,6 +62,7 @@ import org.apache.jackrabbit.util.Text;
 import org.apache.jackrabbit.vault.validation.spi.NodeContext;
 import org.apache.jackrabbit.vault.validation.spi.ValidationMessage;
 import org.apache.jackrabbit.vault.validation.spi.ValidationMessageSeverity;
+import org.apache.jackrabbit.vault.validation.spi.util.NodeContextImpl;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
@@ -334,7 +335,7 @@ public class JcrNodeTypeMetaDataImpl implements JcrNodeTypeMetaData {
             // in incremental validations ignore missing mandatory properties and child nodes (as they might not be visible to the validator)
             if (!isIncremental) {
                 messages.add(new ValidationMessage(ValidationMessageSeverity.DEBUG,
-                        "Validate children and mandatory properties of " + getQualifiedPath(namePathResolver)));
+                        "Validate children and mandatory properties of " + getQualifiedPath(namePathResolver), context));
                 messages.addAll(validateChildNodes(namePathResolver, nodeTypeDefinitionProvider, itemDefinitionProvider, severity, severityForDefaultNodeTypeViolations, filter));
                 messages.addAll(validateMandatoryProperties(namePathResolver, severity, severityForDefaultNodeTypeViolations));
             }
@@ -342,11 +343,11 @@ public class JcrNodeTypeMetaDataImpl implements JcrNodeTypeMetaData {
             childNodesByName.clear();
             isValidationDone = true;
             messages.add(new ValidationMessage(ValidationMessageSeverity.DEBUG,
-                    "Remove node information of children of " + getQualifiedPath(namePathResolver)));
+                    "Remove node information of children of " + getQualifiedPath(namePathResolver), context));
             return messages;
         } else {
             return Collections.singletonList(new ValidationMessage(ValidationMessageSeverity.DEBUG,
-                    "Already finalized validation of " + getQualifiedPath(namePathResolver)));
+                    "Already finalized validation of " + getQualifiedPath(namePathResolver), context));
         }
     }
 
@@ -397,7 +398,7 @@ public class JcrNodeTypeMetaDataImpl implements JcrNodeTypeMetaData {
                         messages.add(new ValidationMessage(isImplicit ? severityForDefaultNodeTypeViolations : severity,
                                 String.format(MESSAGE_MANDATORY_CHILD_NODE_MISSING,
                                 getNodeDefinitionLabel(namePathResolver, mandatoryNodeType),
-                                getEffectiveNodeTypeLabel(namePathResolver, effectiveNodeType))));
+                                getEffectiveNodeTypeLabel(namePathResolver, effectiveNodeType)), context));
                     } else {
                         // if mandatory child nodes are missing outside filter rules, this is not an issue
                         messages.add(new ValidationMessage(ValidationMessageSeverity.DEBUG, String.format(MESSAGE_MANDATORY_UNCONTAINED_CHILD_NODE_MISSING,
@@ -648,25 +649,8 @@ public class JcrNodeTypeMetaDataImpl implements JcrNodeTypeMetaData {
 
     public static @NotNull JcrNodeTypeMetaDataImpl createRoot(boolean isIncremental, @NotNull EffectiveNodeTypeProvider effectiveNodeTypeProvider)
             throws ConstraintViolationException, NoSuchNodeTypeException {
-        return new JcrNodeTypeMetaDataImpl(isIncremental, new NodeContext() {
-
-            @Override
-            public @NotNull String getNodePath() {
-                return "";
-            }
-
-            @Override
-            @NotNull
-            public java.nio.file.@NotNull Path getFilePath() {
-                return Paths.get("");
-            }
-
-            @Override
-            public java.nio.file.@NotNull Path getBasePath() {
-                return Paths.get("");
-            }
-            
-        }, NameConstants.ROOT, NameConstants.REP_ROOT, effectiveNodeTypeProvider.getEffectiveNodeType(
+        return new JcrNodeTypeMetaDataImpl(isIncremental, new NodeContextImpl("", Paths.get(""), Paths.get("")),
+            NameConstants.ROOT, NameConstants.REP_ROOT, effectiveNodeTypeProvider.getEffectiveNodeType(
                 new Name[] {
                         NameConstants.REP_ROOT,
                         NameConstants.REP_ACCESS_CONTROLLABLE,
diff --git a/vault-validation/src/test/java/org/apache/jackrabbit/vault/validation/spi/impl/nodetype/JcrNodeTypeMetaDataImplTest.java b/vault-validation/src/test/java/org/apache/jackrabbit/vault/validation/spi/impl/nodetype/JcrNodeTypeMetaDataImplTest.java
index f2dba150..97a00e58 100644
--- a/vault-validation/src/test/java/org/apache/jackrabbit/vault/validation/spi/impl/nodetype/JcrNodeTypeMetaDataImplTest.java
+++ b/vault-validation/src/test/java/org/apache/jackrabbit/vault/validation/spi/impl/nodetype/JcrNodeTypeMetaDataImplTest.java
@@ -142,8 +142,8 @@ public class JcrNodeTypeMetaDataImplTest {
                 ntManagerProvider.getItemDefinitionProvider(), ValidationMessageSeverity.ERROR, ValidationMessageSeverity.ERROR, filter);
         ValidationExecutorTest.assertViolation(messages,
                 new ValidationMessage(ValidationMessageSeverity.ERROR,
-                        String.format(JcrNodeTypeMetaDataImpl.MESSAGE_MANDATORY_CHILD_NODE_MISSING, "jcr:content [nt:base]", "types [nt:file]",
-                        nodeContext)));
+                        String.format(JcrNodeTypeMetaDataImpl.MESSAGE_MANDATORY_CHILD_NODE_MISSING, "jcr:content [nt:base]", "types [nt:file]"),
+                        nodeContext));
     }
     
     @Test
@@ -256,9 +256,10 @@ public class JcrNodeTypeMetaDataImplTest {
                 ValidationMessageSeverity.ERROR, ValidationMessageSeverity.ERROR, filter);
         MatcherAssert.assertThat(messages, AnyValidationViolationMessageMatcher.noValidationViolationMessageInCollection());
 
+        NodeContext nodeContext = createSimpleNodeContext("name2");
         node = root.addChildNode(ntManagerProvider.getNamePathResolver(),
                 ntManagerProvider.getEffectiveNodeTypeProvider(), ntManagerProvider.getNodeTypeDefinitionProvider(),
-                ntManagerProvider.getItemDefinitionProvider(), createSimpleNodeContext("name2"),
+                ntManagerProvider.getItemDefinitionProvider(), nodeContext,
                 "my:nodeType1");
         
         // mandatory child node missing inside filter
@@ -267,7 +268,7 @@ public class JcrNodeTypeMetaDataImplTest {
                 ntManagerProvider.getItemDefinitionProvider(),ValidationMessageSeverity.ERROR, ValidationMessageSeverity.ERROR, filter);
         ValidationExecutorTest.assertViolation(messages, new ValidationMessage(ValidationMessageSeverity.ERROR,
                 String.format(JcrNodeTypeMetaDataImpl.MESSAGE_MANDATORY_CHILD_NODE_MISSING, "my:namedChild1 [my:nodeType1]", "types [my:nodeType1]",
-                        "/name2")));
+                        "/name2"), nodeContext));
 
         // calling a second time will not lead to anything
         messages = node.finalizeValidation(ntManagerProvider.getNamePathResolver(), ntManagerProvider.getNodeTypeDefinitionProvider(),
@@ -295,7 +296,7 @@ public class JcrNodeTypeMetaDataImplTest {
                 ntManagerProvider.getItemDefinitionProvider(),ValidationMessageSeverity.ERROR, ValidationMessageSeverity.ERROR,  "property", false,
                 ValueFactoryImpl.getInstance().createValue("foo")), AnyValidationViolationMessageMatcher.noValidationViolationMessageInCollection());
         
-        NodeContext nodeContext = createSimpleNodeContext("nodeForMandatoryProperties");
+        nodeContext = createSimpleNodeContext("nodeForMandatoryProperties");
         node = root.addChildNode(ntManagerProvider.getNamePathResolver(),
                 ntManagerProvider.getEffectiveNodeTypeProvider(), ntManagerProvider.getNodeTypeDefinitionProvider(),
                 ntManagerProvider.getItemDefinitionProvider(), nodeContext, "my:nodeType2");
diff --git a/vault-validation/src/test/java/org/apache/jackrabbit/vault/validation/spi/impl/nodetype/NodeTypeValidatorTest.java b/vault-validation/src/test/java/org/apache/jackrabbit/vault/validation/spi/impl/nodetype/NodeTypeValidatorTest.java
index b89d4e69..20c4d925 100644
--- a/vault-validation/src/test/java/org/apache/jackrabbit/vault/validation/spi/impl/nodetype/NodeTypeValidatorTest.java
+++ b/vault-validation/src/test/java/org/apache/jackrabbit/vault/validation/spi/impl/nodetype/NodeTypeValidatorTest.java
@@ -182,7 +182,7 @@ public class NodeTypeValidatorTest {
         ValidationExecutorTest.assertViolation(validator.done(),
                 new ValidationMessage(ValidationMessageSeverity.ERROR,
                         String.format(JcrNodeTypeMetaDataImpl.MESSAGE_MANDATORY_CHILD_NODE_MISSING,
-                                "jcr:content [nt:base]", "types [nt:file]", "/apps/test/node4")));
+                                "jcr:content [nt:base]", "types [nt:file]", "/apps/test/node4"), nodeContext));
         MatcherAssert.assertThat(validator.done(), AnyValidationViolationMessageMatcher.noValidationViolationMessageInCollection());
     }