From 7e278d4af37a45fda84cbda917418dcd6d8e08e6 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Leif=20=C3=85strand?= Date: Wed, 6 Feb 2013 12:26:45 +0200 Subject: [PATCH] Set the first cause as the cause of CacheUpdateException (#10951) Change-Id: Icadfd46919c14fccfa1531b6f2b3e245dea3b111 --- server/src/com/vaadin/ui/Table.java | 17 +++++- .../table/CacheUpdateExceptionCauses.java | 56 +++++++++++++++++++ 2 files changed, 70 insertions(+), 3 deletions(-) create mode 100644 server/tests/src/com/vaadin/tests/server/component/table/CacheUpdateExceptionCauses.java 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. *

- * 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()}. *

* */ @@ -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()); + } +} -- 2.39.5