]> source.dussan.org Git - vaadin-framework.git/commitdiff
Set the first cause as the cause of CacheUpdateException (#10951)
authorLeif Åstrand <leif@vaadin.com>
Wed, 6 Feb 2013 10:26:45 +0000 (12:26 +0200)
committerLeif Åstrand <leif@vaadin.com>
Wed, 6 Feb 2013 10:26:45 +0000 (12:26 +0200)
Change-Id: Icadfd46919c14fccfa1531b6f2b3e245dea3b111

server/src/com/vaadin/ui/Table.java
server/tests/src/com/vaadin/tests/server/component/table/CacheUpdateExceptionCauses.java [new file with mode: 0644]

index 940001fb511ca74a72da4bad7d2b8eb50dba56e6..a9632da038753c250b7190ebec2bfb20e1552235 100644 (file)
@@ -1660,7 +1660,7 @@ public class Table extends AbstractSelect implements Action.Container,
 
             exceptionsDuringCachePopulation.clear();
             throw new CacheUpdateException(this,
-                    "Error during Table cache update", causes);
+                    "Error during Table cache update.", causes);
         }
 
     }
@@ -1669,7 +1669,9 @@ public class Table extends AbstractSelect implements Action.Container,
      * Exception thrown when one or more exceptions occurred during updating of
      * the Table cache.
      * <p>
-     * Contains all exceptions which occurred during the cache update.
+     * Contains all exceptions which occurred during the cache update. The first
+     * occurred exception is set as the cause of this exception. All occurred
+     * exceptions can be accessed using {@link #getCauses()}.
      * </p>
      * 
      */
@@ -1679,11 +1681,20 @@ public class Table extends AbstractSelect implements Action.Container,
 
         public CacheUpdateException(Table table, String message,
                 Throwable[] causes) {
-            super(message);
+            super(maybeSupplementMessage(message, causes.length), causes[0]);
             this.table = table;
             this.causes = causes;
         }
 
+        private static String maybeSupplementMessage(String message,
+                int causeCount) {
+            if (causeCount > 1) {
+                return message + " Additional causes not shown.";
+            } else {
+                return message;
+            }
+        }
+
         /**
          * Returns the cause(s) for this exception
          * 
diff --git a/server/tests/src/com/vaadin/tests/server/component/table/CacheUpdateExceptionCauses.java b/server/tests/src/com/vaadin/tests/server/component/table/CacheUpdateExceptionCauses.java
new file mode 100644 (file)
index 0000000..7a7b488
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2012 Vaadin Ltd.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package com.vaadin.tests.server.component.table;
+
+import junit.framework.Assert;
+
+import org.junit.Test;
+
+import com.vaadin.ui.Table;
+import com.vaadin.ui.Table.CacheUpdateException;
+
+public class CacheUpdateExceptionCauses {
+    @Test
+    public void testSingleCauseException() {
+        Table table = new Table();
+        Throwable[] causes = new Throwable[] { new RuntimeException(
+                "Broken in one way.") };
+
+        CacheUpdateException exception = new CacheUpdateException(table,
+                "Error during Table cache update.", causes);
+
+        Assert.assertSame(causes[0], exception.getCause());
+        Assert.assertEquals("Error during Table cache update.",
+                exception.getMessage());
+    }
+
+    @Test
+    public void testMultipleCauseException() {
+        Table table = new Table();
+        Throwable[] causes = new Throwable[] {
+                new RuntimeException("Broken in the first way."),
+                new RuntimeException("Broken in the second way.") };
+
+        CacheUpdateException exception = new CacheUpdateException(table,
+                "Error during Table cache update.", causes);
+
+        Assert.assertSame(causes[0], exception.getCause());
+        Assert.assertEquals(
+                "Error during Table cache update. Additional causes not shown.",
+                exception.getMessage());
+    }
+}