de.fhg.igd.mapviewer.server.wms.WMSConfiguration.java Source code

Java tutorial

Introduction

Here is the source code for de.fhg.igd.mapviewer.server.wms.WMSConfiguration.java

Source

/*
 * 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.prefs.BackingStoreException;
import java.util.prefs.Preferences;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import de.fhg.igd.mapviewer.server.wms.capabilities.WMSUtil;

/**
 * Basic WMS client configuration
 * 
 * @author Simon Templer
 */
public abstract class WMSConfiguration {

    private static final Log log = LogFactory.getLog(WMSConfiguration.class);

    /**
     * Any SRS
     */
    public static final int DEFAULT_PREFERRED_EPSG = 0;

    // preference names
    private static final String PREFERRED_EPSG = "preferredEpsg"; //$NON-NLS-1$
    private static final String BASE_URL = "baseUrl"; //$NON-NLS-1$
    private static final String LAYERS = "layers"; //$NON-NLS-1$

    private String name = ""; //$NON-NLS-1$
    private String baseUrl;
    private int preferredEpsg = DEFAULT_PREFERRED_EPSG;

    private String layers = ""; //$NON-NLS-1$

    /**
     * Validate the configuration
     * 
     * @return if the configuration is valid
     */
    public boolean validateSettings() {
        try {
            WMSUtil.getCapabilities(baseUrl);
            return true;
        } catch (Exception e) {
            log.error("Error validating wms settings", e); //$NON-NLS-1$
            return false;
        }
    }

    /**
     * Get the configuration name
     * 
     * @return the configuration name
     */
    public String getName() {
        return name;
    }

    /**
     * Set the configuration name
     * 
     * @param name the configuration name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * Determines if a configuration name already exists
     * 
     * @param name the configuration name
     * @return if the name already exists
     * @throws BackingStoreException if an error occurs accessing the
     *             preferences
     */
    public boolean nameExists(String name) throws BackingStoreException {
        return getPreferences().nodeExists(name);
    }

    /**
     * Get the base URL
     * 
     * @return the base URL
     */
    public String getBaseUrl() {
        return baseUrl;
    }

    /**
     * Set the base URL
     * 
     * @param baseUrl the base URL
     */
    public void setBaseUrl(String baseUrl) {
        this.baseUrl = baseUrl;
    }

    /**
     * Get the EPSG code of the preferred SRS
     * 
     * @return the EPSG code of the preferred SRS, zero if no SRS is preferred
     */
    public int getPreferredEpsg() {
        return preferredEpsg;
    }

    /**
     * Set the EPSG code of the preferred SRS
     * 
     * @param preferredEpsg the EPSG code, zero stands for any SRS
     */
    public void setPreferredEpsg(int preferredEpsg) {
        this.preferredEpsg = preferredEpsg;
    }

    /**
     * Get the configured layers
     * 
     * @return the layers
     */
    public String getLayers() {
        return layers;
    }

    /**
     * Set the configured layers
     * 
     * @param layers the layers
     */
    public void setLayers(String layers) {
        this.layers = layers;
    }

    /**
     * Save the configuration
     * 
     * @param overwrite if old settings/servers with the same name shall be
     *            overridden
     */
    public void save(boolean overwrite) {
        Preferences preferences = getPreferences();

        try {
            String name = getName();

            if (!overwrite) {
                int i = 1;
                // find unique name
                while (preferences.nodeExists(name)) {
                    name = getName() + "_" + i; //$NON-NLS-1$
                    i++;
                }
            }

            Preferences node = preferences.node(name);
            setName(name);

            saveProperties(node);

            node.flush();
        } catch (BackingStoreException e) {
            log.error("Error saving map server preferences", e); //$NON-NLS-1$
        }
    }

    /**
     * Get the preferences where the configurations are saved
     * 
     * @return the preferences
     */
    protected abstract Preferences getPreferences();

    /**
     * Save the configuration's properties to the given preference node
     * 
     * @param node the preference node
     */
    protected void saveProperties(Preferences node) {
        node.put(BASE_URL, getBaseUrl());
        node.putInt(PREFERRED_EPSG, getPreferredEpsg());
        node.put(LAYERS, getLayers());
    }

    /**
     * Load a WMS configuration with the given name
     * 
     * @param name the configuration name
     * 
     * @return if loading the configuration succeeded
     */
    public boolean load(String name) {
        Preferences preferences = getPreferences();

        try {
            if (preferences.nodeExists(name)) {
                Preferences node = preferences.node(name);

                setName(name);

                loadProperties(node);

                return true;
            } else {
                log.warn("No configuration named " + name + " found"); //$NON-NLS-1$ //$NON-NLS-2$
                return false;
            }
        } catch (BackingStoreException e) {
            log.error("Error loading WMS configuration"); //$NON-NLS-1$
            return false;
        }
    }

    /**
     * Load the configuration's properties
     * 
     * @param node the preference node
     */
    protected void loadProperties(Preferences node) {
        setBaseUrl(node.get(BASE_URL, null));
        setPreferredEpsg(node.getInt(PREFERRED_EPSG, DEFAULT_PREFERRED_EPSG));
        setLayers(node.get(LAYERS, "")); //$NON-NLS-1$
    }
}