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 md...@apache.org on 2012/05/31 09:48:52 UTC

svn commit: r1344583 - /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/ValidatingCommitHook.java

Author: mduerig
Date: Thu May 31 07:48:52 2012
New Revision: 1344583

URL: http://svn.apache.org/viewvc?rev=1344583&view=rev
Log:
OAK-68 - Extension point for commit validation
clean up exception handling... a bit

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/ValidatingCommitHook.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/ValidatingCommitHook.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/ValidatingCommitHook.java?rev=1344583&r1=1344582&r2=1344583&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/ValidatingCommitHook.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/ValidatingCommitHook.java Thu May 31 07:48:52 2012
@@ -56,58 +56,56 @@ public class ValidatingCommitHook implem
 
     //------------------------------------------------------------< private >---
 
-    /**
-     * Checked exceptions don't compose. So we need to hack around. See
-     * <ul>
-     * <li>http://markmail.org/message/ak67n5k7mr3vqylm</li>
-     * <li>http://markmail.org/message/7l26cofhyr3sk5pr</li>
-     * <li>http://markmail.org/message/nw7mg4cmgpeqq4i5</li>
-     * <li>http://markmail.org/message/bhocbruikljpuhu6</li>
-     * </ul>
-     */
-    private static class BreakOutException extends RuntimeException {
-        public BreakOutException(CommitFailedException cause) {
-            super(cause);
-        }
-    }
-
     private static void validate(final NodeStore store, NodeState before, NodeState after,
             final Validator validator) throws CommitFailedException {
 
-        try {
-            store.compare(before, after, new NodeStateDiff() {
-                @Override
-                public void propertyAdded(PropertyState after) {
+        /*
+         * Checked exceptions don't compose. So we need to hack around.
+         * See http://markmail.org/message/ak67n5k7mr3vqylm and
+         * http://markmail.org/message/bhocbruikljpuhu6
+         */
+        final CommitFailedException[] exception = {null};
+
+        store.compare(before, after, new NodeStateDiff() {
+            @Override
+            public void propertyAdded(PropertyState after) {
+                if (exception[0] == null) {
                     try {
                         validator.propertyAdded(after);
                     }
                     catch (CommitFailedException e) {
-                        throw new BreakOutException(e);
+                        exception[0] = e;
                     }
                 }
+            }
 
-                @Override
-                public void propertyChanged(PropertyState before, PropertyState after) {
+            @Override
+            public void propertyChanged(PropertyState before, PropertyState after) {
+                if (exception[0] == null) {
                     try {
                         validator.propertyChanged(before, after);
                     }
                     catch (CommitFailedException e) {
-                        throw new BreakOutException(e);
+                        exception[0] = e;
                     }
                 }
+            }
 
-                @Override
-                public void propertyDeleted(PropertyState before) {
+            @Override
+            public void propertyDeleted(PropertyState before) {
+                if (exception[0] == null) {
                     try {
                         validator.propertyDeleted(before);
                     }
                     catch (CommitFailedException e) {
-                        throw new BreakOutException(e);
+                        exception[0] = e;
                     }
                 }
+            }
 
-                @Override
-                public void childNodeAdded(String name, NodeState after) {
+            @Override
+            public void childNodeAdded(String name, NodeState after) {
+                if (exception[0] == null) {
                     try {
                         Validator childValidator = validator.childNodeAdded(name, after);
                         if (childValidator != null) {
@@ -115,12 +113,14 @@ public class ValidatingCommitHook implem
                         }
                     }
                     catch (CommitFailedException e) {
-                        throw new BreakOutException(e);
+                        exception[0] = e;
                     }
                 }
+            }
 
-                @Override
-                public void childNodeChanged(String name, NodeState before, NodeState after) {
+            @Override
+            public void childNodeChanged(String name, NodeState before, NodeState after) {
+                if (exception[0] == null) {
                     try {
                         Validator childValidator = validator.childNodeChanged(name, before, after);
                         if (childValidator != null) {
@@ -128,23 +128,26 @@ public class ValidatingCommitHook implem
                         }
                     }
                     catch (CommitFailedException e) {
-                        throw new BreakOutException(e);
+                        exception[0] = e;
                     }
                 }
+            }
 
-                @Override
-                public void childNodeDeleted(String name, NodeState before) {
+            @Override
+            public void childNodeDeleted(String name, NodeState before) {
+                if (exception[0] == null) {
                     try {
                         validator.childNodeDeleted(name, before);
                     }
                     catch (CommitFailedException e) {
-                        throw new BreakOutException(e);
+                        exception[0] = e;
                     }
                 }
-            });
-        }
-        catch (BreakOutException e) {
-            throw new CommitFailedException(e);
+            }
+        });
+
+        if (exception[0] != null) {
+            throw new CommitFailedException(exception[0]);
         }
     }