/* * Copyright (c) 2016 Fraunhofer IGD * * All rights reserved. This program and the accompanying materials are made * available under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation, either version 3 of the License, * or (at your option) any later version. * * You should have received a copy of the GNU Lesser General Public License * along with this distribution. If not, see <http://www.gnu.org/licenses/>. * * Contributors: * Fraunhofer IGD <http://www.igd.fraunhofer.de/> */ package de.fhg.igd.mapviewer.server.wms; import java.util.LinkedList; import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.eclipse.jface.wizard.WizardDialog; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.PlatformUI; import de.fhg.igd.eclipse.util.extension.AbstractObjectFactory; import de.fhg.igd.eclipse.util.extension.ExtensionObjectDefinition; import de.fhg.igd.eclipse.util.extension.ExtensionObjectFactory; import de.fhg.igd.eclipse.util.extension.ExtensionObjectFactoryCollection; import de.fhg.igd.mapviewer.server.MapServer; import de.fhg.igd.mapviewer.server.MapServerFactory; import de.fhg.igd.mapviewer.server.MapServerFactoryCollection; import de.fhg.igd.mapviewer.server.wms.wizard.WMSConfigurationWizard; import de.fhg.igd.mapviewer.server.wms.wizard.WMSTileConfigurationWizard; /** * WMSMapServerFactory * * @author <a href="mailto:simon.templer@igd.fhg.de">Simon Templer</a> * * @version $Id$ */ public class WMSMapServerFactory implements MapServerFactoryCollection { /** * WMS server factory */ public class WMSFactory extends AbstractObjectFactory<MapServer>implements MapServerFactory { private final String name; /** * Constructor * * @param name the WMS map name */ public WMSFactory(String name) { super(); this.name = name; } /** * @see ExtensionObjectFactory#createExtensionObject() */ @Override public MapServer createExtensionObject() throws Exception { WMSMapServer server = new WMSMapServer(); if (server.load(name)) { return server; } else { throw new IllegalArgumentException("Loading configuration " + name + " failed"); //$NON-NLS-1$ //$NON-NLS-2$ } } /** * @see ExtensionObjectDefinition#getDisplayName() */ @Override public String getDisplayName() { return name; } /** * @see ExtensionObjectDefinition#getIdentifier() */ @Override public String getIdentifier() { return getTypeName() + ":" + getDisplayName(); //$NON-NLS-1$ } /** * @see ExtensionObjectDefinition#getTypeName() */ @Override public String getTypeName() { return WMSMapServerFactory.class.getName(); } /** * @see AbstractObjectFactory#allowConfigure() */ @Override public boolean allowConfigure() { return true; } /** * @see AbstractObjectFactory#configure() */ @Override public boolean configure() { try { WMSMapServer server = (WMSMapServer) createExtensionObject(); return WMSMapServerFactory.this.configure(server, true); } catch (Exception e) { return false; } } /** * @see ExtensionObjectFactory#dispose(java.lang.Object) */ @Override public void dispose(MapServer instance) { instance.cleanup(); } } private static final Log log = LogFactory.getLog(WMSMapServerFactory.class); /** * @see ExtensionObjectFactoryCollection#addNew() */ @Override public MapServerFactory addNew() { MapServer server = createNewServer(); if (server != null) { return new WMSFactory(server.getName()); } else { return null; } } /** * @see ExtensionObjectFactoryCollection#allowAddNew() */ @Override public boolean allowAddNew() { return true; } /** * @see ExtensionObjectFactoryCollection#allowRemove() */ @Override public boolean allowRemove() { return true; } /** * @see ExtensionObjectFactoryCollection#getFactories() */ @Override public List<MapServerFactory> getFactories() { List<MapServerFactory> results = new LinkedList<MapServerFactory>(); for (String name : WMSMapServer.getConfigurationNames()) { results.add(new WMSFactory(name)); } return results; } /** * @see ExtensionObjectFactoryCollection#getName() */ @Override public String getName() { return Messages.WMSMapServerFactory_3; } /** * @see ExtensionObjectFactoryCollection#remove(ExtensionObjectFactory) */ @Override public boolean remove(MapServerFactory factory) { return WMSMapServer.removeConfiguration(factory.getDisplayName()); } /** * Creates a new WMS map server * * @return the map server or <code>null</code> */ private MapServer createNewServer() { WMSMapServer server = new WMSMapServer(); if (configure(server, false)) { return server; } else { return null; } } /** * Configure the given WMS map server * * @param server the WMS map server * @param overwrite if old settings may be overridden * @return if the configuration was saved */ private boolean configure(WMSMapServer server, boolean overwrite) { try { final Display display = PlatformUI.getWorkbench().getDisplay(); WMSConfigurationWizard<WMSTileConfiguration> wizard = new WMSTileConfigurationWizard( server, true); WizardDialog dialog = new WizardDialog(display.getActiveShell(), wizard); if (dialog.open() == WizardDialog.OK) { server.save(overwrite); return true; } else return false; } catch (Exception e) { log.error("Error configuring wms map server", e); //$NON-NLS-1$ return false; } } }