/* (c) 2014 - 2016 Open Source Geospatial Foundation - all rights reserved * (c) 2001 - 2013 OpenPlans * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.web.data.store; import org.apache.wicket.Component; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.request.mapper.parameter.PageParameters; import org.geoserver.catalog.Catalog; import org.geoserver.catalog.WMSStoreInfo; import org.geoserver.web.wicket.GeoServerDialog; import org.geotools.data.wms.WebMapServer; public class WMSStoreEditPage extends AbstractWMSStorePage { public static final String STORE_NAME = "storeName"; public static final String WS_NAME = "wsName"; /** * Uses a "name" parameter to locate the datastore * @param parameters */ public WMSStoreEditPage(PageParameters parameters) { String wsName = parameters.get(WS_NAME).toOptionalString(); String storeName = parameters.get(STORE_NAME).toString(); WMSStoreInfo store = getCatalog().getStoreByName(wsName, storeName, WMSStoreInfo.class); initUI(store); } /** * Creates a new edit page directly from a store object. */ public WMSStoreEditPage(WMSStoreInfo store) { initUI(store); } @Override protected void onSave(WMSStoreInfo info, AjaxRequestTarget target) throws IllegalArgumentException { if(!info.isEnabled()) { doSaveStore(info); } else { try { // try to see if we can connect getCatalog().getResourcePool().clear(info); // do not call info.getWebMapServer cause it ends up calling // resourcepool.getWebMapServer with the unproxied instance (old values) //info.getWebMapServer(null).getCapabilities(); WebMapServer webMapServer = getCatalog().getResourcePool().getWebMapServer(info); webMapServer.getCapabilities(); doSaveStore(info); } catch(Exception e) { confirmSaveOnConnectionFailure(info, target, e); } } } /** * Performs the save of the store. * <p> * This method may be subclasses to provide custom save functionality. * </p> */ protected void doSaveStore(WMSStoreInfo info) { Catalog catalog = getCatalog(); // Cloning into "expandedStore" through the super class "clone" method WMSStoreInfo expandedStore = catalog.getResourcePool().clone(info, true); getCatalog().validate(expandedStore, false).throwIfInvalid(); getCatalog().save(info); doReturn(StorePage.class); } @SuppressWarnings("serial") private void confirmSaveOnConnectionFailure(final WMSStoreInfo info, final AjaxRequestTarget requestTarget, final Exception error) { getCatalog().getResourcePool().clear(info); final String exceptionMessage; { String message = error.getMessage(); if (message == null && error.getCause() != null) { message = error.getCause().getMessage(); } exceptionMessage = message; } dialog.showOkCancel(requestTarget, new GeoServerDialog.DialogDelegate() { boolean accepted = false; @Override protected Component getContents(String id) { return new StoreConnectionFailedInformationPanel(id, info.getName(), exceptionMessage); } @Override protected boolean onSubmit(AjaxRequestTarget target, Component contents) { doSaveStore(info); accepted = true; return true; } @Override protected boolean onCancel(AjaxRequestTarget target) { return true; } @Override public void onClose(AjaxRequestTarget target) { if (accepted) { doReturn(StorePage.class); } } }); } }