Browse Source

Set the first cause as the cause of CacheUpdateException (#10951)

Change-Id: Icadfd46919c14fccfa1531b6f2b3e245dea3b111
tags/7.0.1
Leif Åstrand 11 years ago
parent
commit
7e278d4af3

+ 14
- 3
server/src/com/vaadin/ui/Table.java View 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
*

+ 56
- 0
server/tests/src/com/vaadin/tests/server/component/table/CacheUpdateExceptionCauses.java View File

@@ -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());
}
}

Loading…
Cancel
Save