/**
* This program is free software: you can redistribute it and/or modify
* it 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.
*
* 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 Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* @author Arne Kepp, OpenGeo, Copyright 2009
*/
package org.geowebcache.config;
import java.io.Serializable;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ReflectionToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.geowebcache.grid.BoundingBox;
import org.geowebcache.grid.GridSet;
import org.geowebcache.grid.GridSetBroker;
import org.geowebcache.grid.GridSubset;
import org.geowebcache.grid.GridSubsetFactory;
public class XMLGridSubset implements Serializable, Cloneable {
private static final long serialVersionUID = 2758612849329765806L;
private static Log log = LogFactory.getLog(XMLGridSubset.class);
private String gridSetName;
private BoundingBox extent;
private Integer zoomStart;
private Integer zoomStop;
private Integer minCachedLevel;
private Integer maxCachedLevel;
/**
* Empty constructor
*/
public XMLGridSubset() {
// nothing to do
readResolve();
}
private XMLGridSubset readResolve() {
return this;
}
/**
* Copy constructor
*/
public XMLGridSubset(XMLGridSubset sset) {
setGridSetName(sset.getGridSetName());
setExtent(sset.getExtent() == null ? null : new BoundingBox(sset.getExtent()));
setZoomStart(sset.getZoomStart());
setZoomStop(sset.getZoomStop());
setMinCachedLevel(sset.getMinCachedLevel());
setMaxCachedLevel(sset.getMaxCachedLevel());
}
/**
* Builds an XMLGridSubset out of a {@link GridSubset}
*/
public XMLGridSubset(GridSubset sset) {
setGridSetName(sset.getName());
setExtent(sset.getOriginalExtent() == null ? null : new BoundingBox(
sset.getOriginalExtent()));
setZoomStart(sset.getZoomStart());
setZoomStop(sset.getZoomStop());
setMinCachedLevel(sset.getMinCachedZoom());
setMaxCachedLevel(sset.getMaxCachedZoom());
}
@Override
public XMLGridSubset clone() {
return new XMLGridSubset(this);
}
public GridSubset getGridSubSet(GridSetBroker gridSetBroker) {
GridSet gridSet = gridSetBroker.get(getGridSetName());
if (gridSet == null) {
log.error("Unable to find GridSet for \"" + getGridSetName() + "\"");
return null;
}
return GridSubsetFactory.createGridSubSet(gridSet, getExtent(), getZoomStart(),
getZoomStop(), minCachedLevel, maxCachedLevel);
}
public String getGridSetName() {
return gridSetName;
}
/**
* @param gridSetName
* the gridSetName to set
*/
public void setGridSetName(String gridSetName) {
this.gridSetName = gridSetName;
}
/**
* @return the extent
*/
public BoundingBox getExtent() {
return extent;
}
/**
* @param extent
* the extent to set
*/
public void setExtent(BoundingBox extent) {
this.extent = extent;
}
/**
* @return the zoomStart
*/
public Integer getZoomStart() {
return zoomStart;
}
/**
* @param zoomStart
* the zoomStart to set
*/
public void setZoomStart(Integer zoomStart) {
this.zoomStart = zoomStart;
}
/**
* @return the zoomStop
*/
public Integer getZoomStop() {
return zoomStop;
}
/**
* @param zoomStop
* the zoomStop to set
*/
public void setZoomStop(Integer zoomStop) {
this.zoomStop = zoomStop;
}
@Override
public String toString() {
return ReflectionToStringBuilder.toString(this, ToStringStyle.SHORT_PREFIX_STYLE);
}
@Override
public int hashCode() {
return HashCodeBuilder.reflectionHashCode(this);
}
@Override
public boolean equals(Object o) {
return EqualsBuilder.reflectionEquals(this, o);
}
public Integer getMinCachedLevel() {
return minCachedLevel;
}
public void setMinCachedLevel(Integer minCachedLevel) {
this.minCachedLevel = minCachedLevel;
}
public Integer getMaxCachedLevel() {
return maxCachedLevel;
}
public void setMaxCachedLevel(Integer maxCachedLevel) {
this.maxCachedLevel = maxCachedLevel;
}
}