aboutsummaryrefslogtreecommitdiffstats
path: root/server
diff options
context:
space:
mode:
authorLeif Åstrand <leif@vaadin.com>2013-02-06 12:26:45 +0200
committerLeif Åstrand <leif@vaadin.com>2013-02-06 12:26:45 +0200
commit7e278d4af37a45fda84cbda917418dcd6d8e08e6 (patch)
treeb107cb915d5e6ceb30da427c6f4dd34a0eac7ba2 /server
parent2d9e28e19c27554ba84ba935271bbbfe101459d5 (diff)
downloadvaadin-framework-7e278d4af37a45fda84cbda917418dcd6d8e08e6.tar.gz
vaadin-framework-7e278d4af37a45fda84cbda917418dcd6d8e08e6.zip
Set the first cause as the cause of CacheUpdateException (#10951)
Change-Id: Icadfd46919c14fccfa1531b6f2b3e245dea3b111
Diffstat (limited to 'server')
-rw-r--r--server/src/com/vaadin/ui/Table.java17
-rw-r--r--server/tests/src/com/vaadin/tests/server/component/table/CacheUpdateExceptionCauses.java56
2 files changed, 70 insertions, 3 deletions
diff --git a/server/src/com/vaadin/ui/Table.java b/server/src/com/vaadin/ui/Table.java
index 940001fb51..a9632da038 100644
--- a/server/src/com/vaadin/ui/Table.java
+++ b/server/src/com/vaadin/ui/Table.java
@@ -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
index 0000000000..7a7b488bc0
--- /dev/null
+++ b/server/tests/src/com/vaadin/tests/server/component/table/CacheUpdateExceptionCauses.java
@@ -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());
+ }
+}