/* Copyright (c) 2001 - 2009 TOPP - www.openplans.org. All rights reserved. * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.web.data.store; import java.util.logging.Level; import javax.management.RuntimeErrorException; import org.apache.wicket.ajax.AjaxRequestTarget; import org.geoserver.catalog.Catalog; import org.geoserver.catalog.CoverageStoreInfo; import org.geoserver.catalog.WorkspaceInfo; import org.geoserver.web.data.layer.NewLayerPage; import org.opengis.coverage.grid.Format; /** * Supports coverage store configuration * * @author Andrea Aime * @author Gabriel Roldan */ public class CoverageStoreNewPage extends AbstractCoverageStorePage { /** * * @param coverageFactoryName * the {@link Format#getName() name} of the format to create a new raster coverage * for */ public CoverageStoreNewPage(final String coverageFactoryName) { Catalog catalog = getCatalog(); final WorkspaceInfo workspace = catalog.getDefaultWorkspace(); CoverageStoreInfo store = catalog.getFactory().createCoverageStore(); store.setWorkspace(workspace); store.setType(coverageFactoryName); store.setEnabled(true); store.setURL("file:data/example.extension"); 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); } setResponsePage(layerChooserPage); } }