initUI(store);
}
@Override
protected void onSave(final CoverageStoreInfo info, AjaxRequestTarget target) throws IllegalArgumentException {
final Catalog catalog = getCatalog();
/*
* Try saving a copy of it so if the process fails somehow the original "info" does not end
* up with an id set
*/
CoverageStoreInfo savedStore = catalog.getFactory().createCoverageStore();
clone(info, savedStore);
// GR: this shouldn't fail, the Catalog.save(StoreInfo) API does not declare any action in
// case
// of a failure!... strange, why a save can't fail?
// Still, be cautious and wrap it in a try/catch block so the page does not blow up
try {
catalog.save(savedStore);
} catch (RuntimeException e) {
LOGGER.log(Level.INFO, "Adding the store for " + info.getURL(), e);
throw new IllegalArgumentException(
"The coverage store could not be saved. Failure message: " + e.getMessage());
}
// the StoreInfo save succeeded... try to present the list of coverages (well, _the_
// coverage while the getotools coverage api does not allow for more than one
NewLayerPage layerChooserPage;
try {
layerChooserPage = new NewLayerPage(savedStore.getId());
} catch (RuntimeException e) {
LOGGER.log(Level.INFO, "Getting list of coverages for saved store " + info.getURL(), e);
// doh, can't present the list of coverages, means saving the StoreInfo is meaningless.
try {// be extra cautious
catalog.remove(savedStore);
} catch (RuntimeErrorException shouldNotHappen) {
LOGGER.log(Level.WARNING, "Can't remove CoverageStoreInfo after adding it!", e);
}
// tell the caller why we failed...
throw new IllegalArgumentException(e.getMessage(), e);