- Optional<TreeNode> apply(ModifiedNode modification, Optional<TreeNode> storeMeta, Version version);
+ abstract Optional<? extends TreeNode> apply(ModifiedNode modification, Optional<? extends TreeNode> storeMeta,
+ Version version);
+
+ /**
+ * Checks if provided node modification could be applied to current metadata node.
+ *
+ * @param path Path to modification
+ * @param modification Modification
+ * @param current Metadata Node to which modification should be applied
+ * @param version Metadata version
+ * @throws DataValidationFailedException if the modification is not applicable
+ */
+ abstract void checkApplicable(ModificationPath path, NodeModification modification,
+ Optional<? extends TreeNode> current, Version version) throws DataValidationFailedException;