GeoserveLayersService.java

package gov.usgs.earthquake.geoserve;

import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;

import javax.json.Json;
import javax.json.JsonObject;

import gov.usgs.util.StreamUtils;

/**
 * Access layers from the Geoserve Layers service.
 */
public class GeoserveLayersService {

    /** Default URL for GeoServe Layers service. */
    public static final String DEFAULT_GEOSERVE_LAYERS_URL = "https://earthquake.usgs.gov/ws/geoserve/layers.json?type={type}";

    /** Configured URL for GeoServe Layers service. */
    private String endpointUrl;


    /**
     * Create a service using the default URL.
     */
    public GeoserveLayersService() {
        this(DEFAULT_GEOSERVE_LAYERS_URL);
    }

    /**
     * Create a service using a custom URL.
     *
     * @param endpointUrl layers service URL.
     *       Should contain the string <code>{type}</code>,
     *       which is replaced during the #{@link #getLayer(String)}.
     */
    public GeoserveLayersService(final String endpointUrl) {
        this.endpointUrl = endpointUrl;
    }

    /**
     * Get the endpoint URL.
     * @return endpoint URL
     */
    public String getEndpointURL() {
        return this.endpointUrl;
    }

    /**
     * Set the endpoint URL.
     * @param url endpoint URL to set
     */
    public void setEndpointURL(final String url) {
        this.endpointUrl = url;
    }

    /**
     * Fetch and parse a JSON response from the Geoserve layers service.
     * @param type type of response to fetch
     * @return JSONObject response
     * @throws IOException on IO error
     * @throws MalformedURLException Error on URL failure
     */
    public JsonObject getLayer(final String type) throws IOException, MalformedURLException {
        final URL url = new URL(endpointUrl.replace("{type}", type));
        try (InputStream in = StreamUtils.getInputStream(url)) {
            JsonObject json = Json.createReader(in).readObject();
            return json.getJsonObject(type);
        }
    }

}