/*
* This is part of Geomajas, a GIS framework, http://www.geomajas.org/.
*
* Copyright 2008-2015 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.client.map.layer;
import org.geomajas.gwt2.client.map.View;
import org.geomajas.gwt2.client.map.layer.tile.TileBasedLayer;
import org.geomajas.gwt2.client.map.layer.tile.TileConfiguration;
import org.geomajas.gwt2.client.map.render.LayerRenderer;
import org.geomajas.gwt2.client.map.render.TileLevelRenderer;
import org.geomajas.gwt2.client.map.render.TileRenderer;
import org.geomajas.gwt2.client.map.render.dom.DomTileLevelLayerRenderer;
import org.geomajas.gwt2.client.map.render.dom.DomTileLevelRenderer;
import org.geomajas.gwt2.client.map.render.dom.container.HtmlContainer;
/**
* This is an abstract class representing a basic layer that depends on tile for it's rendering. Examples are TMS layers
* or OSM or...<br/> While this base class does provide most functionalities, it does still require an implementation of
* the {@link #getTileRenderer()} method. Also, you must provide the hasResolutions with the correct tile level
* resolutions. If you forget this, no rendering will ever take place!
*
* @author Pieter De Graef
*/
public abstract class AbstractTileBasedLayer extends AbstractLayer implements TileBasedLayer {
protected final TileConfiguration tileConfiguration;
protected LayerRenderer renderer;
/**
* Create a new layer that belongs to the given map model, using the given meta-data.
*
* @param id The unique ID for this layer.
*/
public AbstractTileBasedLayer(String id, TileConfiguration tileConfiguration) {
super(id);
this.tileConfiguration = tileConfiguration;
}
// ------------------------------------------------------------------------
// Abstract methods:
// ------------------------------------------------------------------------
/**
* Get the renderer for individual tiles that make up the rendering for this layer.
*
* @return The tile renderer for this layer.
*/
public abstract TileRenderer getTileRenderer();
// ------------------------------------------------------------------------
// TileBasedLayer implementation:
// ------------------------------------------------------------------------
@Override
public TileConfiguration getTileConfiguration() {
return tileConfiguration;
}
// ------------------------------------------------------------------------
// Layer implementation:
// ------------------------------------------------------------------------
@Override
public LayerRenderer getRenderer() {
if (renderer == null) {
renderer = new DomTileLevelLayerRenderer(viewPort, this, eventBus) {
@Override
public TileLevelRenderer createNewScaleRenderer(int tileLevel, View view, HtmlContainer container) {
return new DomTileLevelRenderer(AbstractTileBasedLayer.this, tileLevel, viewPort, container,
getTileRenderer());
}
};
}
return renderer;
}
@Override
public void setOpacity(double opacity) {
renderer.setOpacity(opacity);
}
@Override
public double getOpacity() {
return renderer.getOpacity();
}
@Override
public double getMaxResolution() {
return tileConfiguration.getMaximumResolution();
}
@Override
public double getMinResolution() {
return tileConfiguration.getMinimumResolution();
}
}