org.geomajas.gwt2.plugin.tms.client.TmsClient.java Source code

Java tutorial

Introduction

Here is the source code for org.geomajas.gwt2.plugin.tms.client.TmsClient.java

Source

/*
 * This is part of Geomajas, a GIS framework, http://www.geomajas.org/.
 *
 * Copyright 2008-2014 Geosparc nv, http://www.geosparc.com/, Belgium.
 *
 * The program is available in open source according to the GNU Affero
 * General Public License. All contributions in this program are covered
 * by the Geomajas Contributors License Agreement. For full licensing
 * details, see LICENSE.txt in the project root.
 */

package org.geomajas.gwt2.plugin.tms.client;

import com.google.gwt.core.client.Callback;
import com.google.gwt.http.client.Request;
import com.google.gwt.http.client.RequestBuilder;
import com.google.gwt.http.client.RequestCallback;
import com.google.gwt.http.client.RequestException;
import com.google.gwt.http.client.Response;
import com.google.gwt.xml.client.Document;
import com.google.gwt.xml.client.XMLParser;
import org.geomajas.annotation.Api;
import org.geomajas.gwt2.client.map.layer.tile.TileConfiguration;
import org.geomajas.gwt2.plugin.tms.client.configuration.TileMapInfo;
import org.geomajas.gwt2.plugin.tms.client.configuration.TileMapServiceInfo;
import org.geomajas.gwt2.plugin.tms.client.configuration.v1_0_0.TileMapInfo100;
import org.geomajas.gwt2.plugin.tms.client.configuration.v1_0_0.TileMapServiceInfo100;
import org.geomajas.gwt2.plugin.tms.client.layer.TmsLayer;
import org.geomajas.gwt2.plugin.tms.client.layer.TmsLayerConfiguration;

/**
 * Starting point for the TMS client plugin.
 *
 * @author Pieter De Graef
 * @since 2.1.0
 */
@Api(allMethods = true)
public final class TmsClient {

    private static TmsClient instance;

    private TmsClient() {
    }

    /**
     * Get a singleton instance.
     *
     * @return Return WmsClient!
     */
    public static TmsClient getInstance() {
        if (instance == null) {
            instance = new TmsClient();
        }
        return instance;
    }

    // ------------------------------------------------------------------------
    // TMS utility methods:
    // ------------------------------------------------------------------------

    /**
     * Create a new TMS layer instance.
     *
     * @param id                 The unique layer ID.
     * @param tileConfiguration  The tile configuration object.
     * @param layerConfiguration The layer configuration object.
     * @return A new TMS layer.
     */
    public TmsLayer createLayer(String id, TileConfiguration tileConfiguration,
            TmsLayerConfiguration layerConfiguration) {
        return new TmsLayer(id, tileConfiguration, layerConfiguration);
    }

    /**
     * Create a new TMS layer instance.
     *
     * @param id                 The unique layer ID.
     * @param title              The title for this layer. It's the title that is usually used in the GUI as label.
     * @param tileConfiguration  The tile configuration object.
     * @param layerConfiguration The layer configuration object.
     * @return A new TMS layer.
     */
    public TmsLayer createLayer(String id, String title, TileConfiguration tileConfiguration,
            TmsLayerConfiguration layerConfiguration) {
        return new TmsLayer(id, title, tileConfiguration, layerConfiguration);
    }

    /**
     * Create a new TMS layer from a tile map info object.
     *
     * @param tileMapInfo The tile map object that is the result from parsing a TMS service XML.
     * @return A new TMS layer.
     */
    public TmsLayer createLayer(TileMapInfo tileMapInfo) {
        return new TmsLayer(tileMapInfo);
    }

    /**
     * Create a new TMS layer from a tile map info object.
     *
     * @param id The unique layer ID.
     * @param tileMapInfo The tile map object that is the result from parsing a TMS service XML.
     * @return A new TMS layer.
     */
    public TmsLayer createLayer(String id, TileMapInfo tileMapInfo) {
        return new TmsLayer(tileMapInfo);
    }

    /**
     * Fetch the capabilities of a TileMapService and parse it. This is the base URL that contains a list of TileMaps.
     *
     * @param baseUrl  The URL that points to the TileMapService.
     * @param callback The callback tat contains the parsed capabilities as a {@link org.geomajas.gwt2.plugin.tms.client
     *                 .configuration.TileMapServiceInfo} object.
     */
    public void getTileMapService(final String baseUrl, final Callback<TileMapServiceInfo, String> callback) {
        RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, baseUrl);
        builder.setHeader("Cache-Control", "no-cache");
        builder.setHeader("Pragma", "no-cache");
        try {
            builder.sendRequest(null, new RequestCallback() {

                public void onError(Request request, Throwable e) {
                    callback.onFailure(e.getMessage());
                }

                public void onResponseReceived(Request request, Response response) {
                    if (200 == response.getStatusCode()) {
                        Document messageDom = XMLParser.parse(response.getText());
                        callback.onSuccess(new TileMapServiceInfo100(messageDom.getDocumentElement()));
                    } else {
                        callback.onFailure(response.getText());
                    }
                }
            });
        } catch (RequestException e) {
            // Couldn't connect to server
            callback.onFailure(e.getMessage());
        }
    }

    /**
     * Fetch the capabilities of a single TileMap configuration XML and parse it. A single TileMap can be used to create
     * a {@link org.geomajas.gwt2.plugin.tms.client.layer.TmsLayer}.
     *
     * @param baseUrl  The URL that points to the TileMap XML.
     * @param callback The callback that contains the parsed capabilities as a
     *       {@link org.geomajas.gwt2.plugin.tms.client.configuration.TileMapInfo} object.
     */
    public void getTileMap(final String baseUrl, final Callback<TileMapInfo, String> callback) {
        RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, baseUrl);
        builder.setHeader("Cache-Control", "no-cache");
        builder.setHeader("Pragma", "no-cache");
        try {
            builder.sendRequest(null, new RequestCallback() {

                public void onError(Request request, Throwable e) {
                    callback.onFailure(e.getMessage());
                }

                public void onResponseReceived(Request request, Response response) {
                    if (200 == response.getStatusCode()) {
                        Document messageDom = XMLParser.parse(response.getText());
                        callback.onSuccess(new TileMapInfo100(messageDom.getDocumentElement()));
                    } else {
                        callback.onFailure(response.getText());
                    }
                }
            });
        } catch (RequestException e) {
            // Couldn't connect to server
            callback.onFailure(e.getMessage());
        }
    }
}