/*
* GeoTools - The Open Source Java GIS Toolkit
* http://geotools.org
*
* (C) 2002-2012, 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;
/**
* A basic implementation of the StyleVisitor interface.
* <p>
* This class implements the full StyleVisitor interface and visits all components of a style object
* tree.
* </p>
*/
public class AbstractStyleVisitor implements StyleVisitor {
@Override
public void visit(StyledLayerDescriptor sld) {
for (StyledLayer sl : sld.getStyledLayers()) {
if (sl instanceof UserLayer) {
((UserLayer)sl).accept(this);
} else if (sl instanceof NamedLayer) {
((NamedLayer)sl).accept(this);
}
}
}
@Override
public void visit(NamedLayer layer) {
for (Style s : layer.getStyles()) {
s.accept(this);
}
for (FeatureTypeConstraint ftc : layer.getLayerFeatureConstraints()) {
ftc.accept(this);
}
}
@Override
public void visit(UserLayer layer) {
for (Style s : layer.getUserStyles()) {
s.accept(this);
}
for (FeatureTypeConstraint ftc : layer.getLayerFeatureConstraints()) {
ftc.accept(this);
}
}
@Override
public void visit(FeatureTypeConstraint ftc) {
}
@Override
public void visit(Style style) {
for (FeatureTypeStyle fts : style.getFeatureTypeStyles()) {
fts.accept(this);
}
}
@Override
public void visit(Rule rule) {
for (Symbolizer sym : rule.getSymbolizers()) {
sym.accept(this);
}
}
@Override
public void visit(FeatureTypeStyle fts) {
for (Rule r : fts.getRules()) {
r.accept(this);
}
}
@Override
public void visit(Fill fill) {
if (fill.getColor() != null) {
//fill.getColor().accept(visitor, extraData)
}
if (fill.getGraphicFill() != null) {
fill.getGraphicFill().accept(this);
}
if (fill.getOpacity() != null) {
//fill.getOpacity().accept(visitor, extraData)
}
}
@Override
public void visit(Stroke stroke) {
if (stroke.getColor() != null) {
//stroke.getColor().accept(visitor, extraData)
}
if (stroke.getDashOffset() != null) {
//stroke.getDashOffset().accept(visitor, extraData)
}
if (stroke.getGraphicFill() != null) {
stroke.getGraphicFill().accept(this);
}
if (stroke.getGraphicStroke() != null) {
stroke.getGraphicStroke().accept(this);
}
if (stroke.getLineCap() != null) {
//stroke.getLineCap().accept(visitor, extraData)
}
if (stroke.getLineJoin() != null) {
//stroke.getLineJoin().accept(visitor, extraData)
}
if (stroke.getOpacity() != null) {
//stroke.getOpacity().accept(visitor, extraData)
}
if (stroke.getWidth() != null) {
//stroke.getWidth().accept(visitor, extraData)
}
}
@Override
public void visit(Symbolizer sym) {
if( sym instanceof RasterSymbolizer){
visit( (RasterSymbolizer) sym );
}
else if( sym instanceof LineSymbolizer){
visit( (LineSymbolizer) sym );
}
else if( sym instanceof PolygonSymbolizer){
visit( (PolygonSymbolizer) sym );
}
else if( sym instanceof PointSymbolizer){
visit( (PointSymbolizer) sym );
}
else if( sym instanceof TextSymbolizer){
visit( (TextSymbolizer) sym );
}
else {
throw new RuntimeException("visit(Symbolizer) unsupported");
}
}
@Override
public void visit(PointSymbolizer ps) {
if (ps.getDescription() != null) {
ps.getDescription().accept(this);
}
if (ps.getGeometry() != null) {
//ps.getGeometry().accept(visitor, extraData)
}
if (ps.getGraphic() != null) {
ps.getGraphic().accept(this);
}
}
@Override
public void visit(LineSymbolizer line) {
if (line.getDescription() != null) {
line.getDescription().accept(this);
}
if (line.getGeometry() != null) {
//line.getGeometry().accept(visitor, extraData)
}
if (line.getPerpendicularOffset() != null) {
//line.getPerpendicularOffset().accept(visitor, extraData)
}
if (line.getStroke() != null) {
line.getStroke().accept(this);
}
}
@Override
public void visit(PolygonSymbolizer poly) {
if (poly.getDescription() != null) {
poly.getDescription().accept(this);
}
if (poly.getDisplacement() != null) {
poly.getDisplacement().accept(this);
}
if (poly.getFill() != null) {
poly.getFill().accept(this);
}
if (poly.getGeometry() != null) {
//poly.getGeometry().accept(visitor, extraData);
}
if (poly.getPerpendicularOffset() != null) {
//poly.getPerpendicularOffset().accept(visitor, extraData)
}
if (poly.getStroke() != null) {
poly.getStroke().accept(this);
}
}
@Override
public void visit(TextSymbolizer text) {
if (text.getDescription() != null) {
text.getDescription().accept(this);
}
if (text.getFill() != null) {
text.getFill().accept(this);
}
if (text.getFont() != null) {
//text.getFont().accept(this, null);
}
if (text.getGeometry() != null) {
//text.getGeometry().accept(visitor, extraData)
}
if (text.getHalo() != null) {
text.getHalo().accept(this);
}
if (text.getLabel() != null) {
//text.getLabel().accept(visitor, extraData)
}
if (text.getLabelPlacement() != null) {
text.getLabelPlacement().accept(this);
}
if (text.getPriority() != null) {
//text.getPriority().accept(visitor, extraData)
}
}
@Override
public void visit(RasterSymbolizer raster) {
if (raster.getChannelSelection() != null) {
raster.getChannelSelection().accept(this);
}
if (raster.getColorMap() != null) {
raster.getColorMap().accept(this);
}
if (raster.getContrastEnhancement() != null) {
raster.getContrastEnhancement().accept(this);
}
if (raster.getDescription() != null) {
raster.getDescription().accept(this);
}
if (raster.getGeometry() != null) {
//raster.getGeometry().accept(visitor, extraData)
}
if (raster.getImageOutline() != null) {
raster.getImageOutline().accept(this);
}
if (raster.getOpacity() != null) {
//raster.getOpacity().accept(visitor, extraData)
}
if (raster.getOverlap() != null) {
//raster.getOverlap().accept(visitor, extraData);
}
if (raster.getShadedRelief() != null) {
raster.getShadedRelief().accept(this);
}
}
@Override
public void visit(Graphic gr) {
if (gr.getAnchorPoint() != null) {
gr.getAnchorPoint().accept(this);
}
if (gr.getDisplacement() != null) {
gr.getDisplacement().accept(this);
}
for (ExternalGraphic eg : gr.getExternalGraphics()) {
eg.accept(this);
}
if (gr.getGap() != null) {
//gr.getGap().accept(visitor, extraData)
}
if (gr.getInitialGap() != null) {
//gr.getInitialGap().accept(visitor, extraData)
}
for (Mark m : gr.getMarks()) {
m.accept(this);
}
if (gr.getOpacity() != null) {
//gr.getOpacity().accept(visitor, extraData)
}
if (gr.getRotation() != null) {
//gr.getRotation().accept(visitor, extraData)
}
if (gr.getSize() != null) {
//gr.getSize().accept(visitor, extraData)
}
}
@Override
public void visit(Mark mark) {
if (mark.getExternalMark() != null) {
//mark.getExternalMark().accept(this, extraData);
}
if (mark.getFill() != null) {
mark.getFill().accept(this);
}
if (mark.getStroke() != null) {
mark.getStroke().accept(this);
}
if (mark.getWellKnownName() != null) {
//mark.getWellKnownName().accept(visitor, extraData)
}
}
@Override
public void visit(ExternalGraphic exgr) {
for (org.opengis.style.ColorReplacement cr : exgr.getColorReplacements()) {
//cr.accept(visitor, extraData)
}
}
@Override
public void visit(PointPlacement pp) {
if (pp.getAnchorPoint() != null) {
pp.getAnchorPoint().accept(this);
}
if (pp.getDisplacement() != null) {
pp.getDisplacement().accept(this);
}
if (pp.getRotation() != null) {
//pp.getRotation().accept(visitor, extraData)
}
}
@Override
public void visit(AnchorPoint ap) {
if (ap.getAnchorPointX() != null) {
//ap.getAnchorPointX().accept(visitor, extraData)
}
if (ap.getAnchorPointY() != null) {
//ap.getAnchorPointY().accept(visitor, extraData)
}
}
@Override
public void visit(Displacement dis) {
if (dis.getDisplacementX() != null) {
//dis.getDisplacementX().accept(visitor, extraData)
}
if (dis.getDisplacementY() != null) {
//dis.getDisplacementY().accept(visitor, extraData)
}
}
@Override
public void visit(LinePlacement lp) {
if (lp.getGap() != null) {
//lp.getGap().accept(visitor, extraData)
}
if (lp.getInitialGap() != null) {
//lp.getInitialGap().accept(visitor, extraData)
}
if (lp.getPerpendicularOffset() != null) {
//lp.getPerpendicularOffset().accept(visitor, extraData)
}
}
@Override
public void visit(Halo halo) {
if (halo.getFill() != null) {
halo.getFill().accept(this);
}
if (halo.getRadius() != null) {
//halo.getRadius().accept(visitor, extraData)
}
}
@Override
public void visit(ColorMap colorMap) {
for (ColorMapEntry cme : colorMap.getColorMapEntries()) {
cme.accept(this);
}
if (colorMap.getFunction() != null) {
//colorMap.getFunction().accept(visitor, extraData)
}
}
@Override
public void visit(ColorMapEntry colorMapEntry) {
if (colorMapEntry.getColor() != null) {
//colorMapEntry.getColor().accept(visitor, extraData)
}
if (colorMapEntry.getOpacity() != null) {
//colorMapEntry.getOpacity().accept(visitor, extraData)
}
if (colorMapEntry.getQuantity() != null) {
//colorMapEntry.getQuantity().accept(visitor, extraData)
}
}
@Override
public void visit(ContrastEnhancement contrastEnhancement) {
if (contrastEnhancement.getGammaValue() != null) {
//contrastEnhancement.getGammaValue().accept(visitor, extraData)
}
}
@Override
public void visit(ImageOutline outline) {
if (outline.getSymbolizer() != null) {
outline.getSymbolizer().accept(this);
}
}
@Override
public void visit(ChannelSelection cs) {
if (cs.getGrayChannel() != null) {
cs.getGrayChannel().accept(this);
}
for (SelectedChannelType ch : cs.getRGBChannels()) {
if (ch != null) {
ch.accept(this);
}
}
}
@Override
public void visit(OverlapBehavior ob) {
}
@Override
public void visit(SelectedChannelType sct) {
if (sct.getContrastEnhancement() != null) {
sct.getContrastEnhancement().accept(this);
}
}
@Override
public void visit(ShadedRelief sr) {
if (sr.getReliefFactor() != null) {
//sr.getReliefFactor().accept(visitor, extraData)
}
}
}