/*******************************************************************************
* Copyright (c) MOBAC developers
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
******************************************************************************/
package mobac.program.interfaces;
import java.awt.Color;
import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.xml.bind.annotation.XmlTransient;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
import mobac.exceptions.TileException;
import mobac.exceptions.UnrecoverableDownloadException;
import mobac.gui.mapview.JMapViewer;
import mobac.program.jaxb.MapSourceAdapter;
import mobac.program.model.MapSourceLoaderInfo;
import mobac.program.model.TileImageType;
//License: GPL. Copyright 2008 by Jan Peter Stotz
/**
*
* @author Jan Peter Stotz
*/
@XmlJavaTypeAdapter(MapSourceAdapter.class)
public interface MapSource {
public enum LoadMethod {
DEFAULT, CACHE, SOURCE
};
/**
* Specifies the maximum zoom value. The number of zoom levels is [0.. {@link #getMaxZoom()}].
*
* @return maximum zoom value that has to be smaller or equal to {@link JMapViewer#MAX_ZOOM}
*/
public int getMaxZoom();
/**
* Specifies the minimum zoom value. This value is usually 0. Only for maps that cover a certain region up to a
* limited zoom level this method should return a value different than 0.
*
* @return minimum zoom value - usually 0
*/
public int getMinZoom();
/**
* A tile layer name has to be unique and has to consist only of characters valid for filenames.
*
* @return Name of the tile layer
*/
public String getName();
/**
*
* @param zoom
* @param x
* @param y
* @param loadMethod
* TODO
* @return
* @throws IOException
* @throws InterruptedException
* @throws UnrecoverableDownloadException
*/
public byte[] getTileData(int zoom, int x, int y, LoadMethod loadMethod) throws IOException, TileException,
InterruptedException;
/**
*
* @param zoom
* @param x
* @param y
* @param loadMethod
* @return
* @throws IOException
* @throws UnrecoverableDownloadException
* @throws InterruptedException
*/
public BufferedImage getTileImage(int zoom, int x, int y, LoadMethod loadMethod) throws IOException, TileException,
InterruptedException;
/**
* Specifies the tile image type. For tiles rendered by Mapnik or Osmarenderer this is usually
* {@link TileImageType#PNG}.
*
* @return file extension of the tile image type
*/
public TileImageType getTileImageType();
public MapSpace getMapSpace();
public Color getBackgroundColor();
@XmlTransient
public MapSourceLoaderInfo getLoaderInfo();
public void setLoaderInfo(MapSourceLoaderInfo loaderInfo);
public boolean getHiddenDefault();
}