/*
* GeoTools - The Open Source Java GIS Toolkit
* http://geotools.org
*
* (C) 2002-2008, Open Source Geospatial Foundation (OSGeo)
*
* This library 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;
* version 2.1 of the License.
*
* This library 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
* Lesser General Public License for more details.
*/
package org.geotools.styling;
import javax.measure.quantity.Length;
import javax.measure.unit.Unit;
import org.geotools.util.SimpleInternationalString;
import org.opengis.style.StyleVisitor;
import org.opengis.util.Cloneable;
/**
* Provides a Java representation of the PointSymbolizer. This defines how
* points are to be rendered.
*
* @author Ian Turton, CCG
* @author Johann Sorel (Geomatys)
* @source $URL$
* @version $Id$
*/
public class PointSymbolizerImpl extends AbstractSymbolizer implements PointSymbolizer, Cloneable {
private GraphicImpl graphic = new GraphicImpl();
/**
* Creates a new instance of DefaultPointSymbolizer
*/
protected PointSymbolizerImpl() {
this(new GraphicImpl(),
null,
null,
null,
new DescriptionImpl(
new SimpleInternationalString("title"),
new SimpleInternationalString("abstract")));
}
protected PointSymbolizerImpl(Graphic graphic, Unit<Length> uom, String geom, String name, Description desc){
super(name, desc, geom, uom);
this.graphic = GraphicImpl.cast(graphic);
}
/**
* Provides the graphical-symbolization parameter to use for the point
* geometry.
*
* @return The Graphic to be used when drawing a point
*/
public GraphicImpl getGraphic() {
return graphic;
}
/**
* Setter for property graphic.
*
* @param graphic New value of property graphic.
*/
public void setGraphic(org.opengis.style.Graphic graphic) {
if (this.graphic == graphic) {
return;
}
this.graphic = GraphicImpl.cast( graphic );
}
/**
* Accept a StyleVisitor to perform an operation on this symbolizer.
*
* @param visitor The StyleVisitor to accept.
*/
public Object accept(StyleVisitor visitor,Object data) {
return visitor.visit(this,data);
}
public void accept(org.geotools.styling.StyleVisitor visitor) {
visitor.visit(this);
}
/**
* Creates a deep copy clone.
*
* @return The deep copy clone.
*
* @throws RuntimeException DOCUMENT ME!
*/
public Object clone() {
PointSymbolizerImpl clone;
try {
clone = (PointSymbolizerImpl) super.clone();
if(graphic != null) clone.graphic = (GraphicImpl) ((Cloneable) graphic).clone();
} catch (CloneNotSupportedException e) {
throw new RuntimeException(e); // this should never happen.
}
return clone;
}
@Override
public int hashCode() {
final int prime = 31;
int result = super.hashCode();
result = prime * result + ((graphic == null) ? 0 : graphic.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (!super.equals(obj))
return false;
if (getClass() != obj.getClass())
return false;
PointSymbolizerImpl other = (PointSymbolizerImpl) obj;
if (graphic == null) {
if (other.graphic != null)
return false;
} else if (!graphic.equals(other.graphic))
return false;
return true;
}
static PointSymbolizerImpl cast(org.opengis.style.Symbolizer symbolizer) {
if (symbolizer == null) {
return null;
} else if (symbolizer instanceof PointSymbolizerImpl) {
return (PointSymbolizerImpl) symbolizer;
} else if (symbolizer instanceof org.opengis.style.PointSymbolizer) {
org.opengis.style.PointSymbolizer pointSymbolizer = (org.opengis.style.PointSymbolizer) symbolizer;
PointSymbolizerImpl copy = new PointSymbolizerImpl();
copy.setDescription( pointSymbolizer.getDescription() );
copy.setGeometryPropertyName( pointSymbolizer.getGeometryPropertyName() );
copy.setGraphic( pointSymbolizer.getGraphic());
copy.setName(pointSymbolizer.getName());
copy.setUnitOfMeasure(pointSymbolizer.getUnitOfMeasure());
return copy;
}
return null; // not a PointSymbolizer
}
}