/*
* 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 java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;
import org.geotools.util.Utilities;
/**
* Holds styling information (from a StyleLayerDescriptor document).
*
*
* This class is based on version 1.0 of the SLD specification.
*
*
*
* For many of us in geotools this is the reason we came along for the ride - a
* pretty picture. For documentation on the use of this class please consult
* the SLD 1.0 specification.
*
*
*
* We may experiment with our own (or SLD 1.1) ideas but will mark such
* experiments for you. This is only an issue of you are considering writing
* out these objects for interoptability with other systems.
*
*
*
* General strategy for supporting multiple SLD versions (and experiments):
*
*
* -
* These classes will be BIGGER and more capabile then any one
* specification
*
* -
* We can define (and support) explicit interfaces tracking each version
* (preferably GeoAPI would hold these)
*
* -
* We can use Factories (aka SLD1Factory and SLD1_1Factory and SEFactory) to
* support the creation of conformant datastructures. Code (such as user
* interfaces) can be parameratized with these factories when they need to
* confirm to an exact version supported by an individual service. We hope
* that specifications are always adaptive, and will be forced to throw
* unsupported exceptions when functionality is removed from a specification.
*
*
*
* @source $URL$
*/
public class StyledLayerDescriptorImpl implements StyledLayerDescriptor {
/** The logger for the default core module. */
private static final Logger LOGGER = org.geotools.util.logging.Logging.getLogger(
"org.geotools.styling");
/** Holds value of property name. */
private String name;
/** Holds value of property title. */
private String title;
/** Holds value of property abstract. */
private String abstractStr;
private List layers = new ArrayList();
/**
* Convenience method for grabbing the default style from the
* StyledLayerDescriptor.
*
* @return first Style (in SLD-->UserLayers-->UserStyles) that claims to be
* the default
*/
public Style getDefaultStyle() {
//descend into the layers
for (int i = 0; i < layers.size(); i++) {
StyledLayer layer = (StyledLayer) layers.get(i);
if (layer instanceof UserLayer) {
UserLayer userLayer = (UserLayer) layer;
//descend into the styles
Style[] styles = userLayer.getUserStyles();
for (int j = 0; j < styles.length; j++) {
//return the first style that claims to be the default
if (styles[j].isDefault()) {
return styles[j];
}
}
}
}
return null;
}
public StyledLayer[] getStyledLayers() {
return (StyledLayerImpl[]) layers.toArray(new StyledLayerImpl[layers
.size()]);
}
public void setStyledLayers(StyledLayer[] layers) {
this.layers.clear();
for (int i = 0; i < layers.length; i++) {
addStyledLayer(layers[i]);
}
LOGGER.fine("StyleLayerDescriptorImpl added " + this.layers.size()
+ " styled layers");
}
public List layers() {
return layers;
}
public void addStyledLayer(StyledLayer layer) {
layers.add( (StyledLayerImpl) layer);
}
/**
* Getter for property name.
*
* @return Value of property name.
*/
public String getName() {
return this.name;
}
/**
* Setter for property name.
*
* @param name New value of property name.
*/
public void setName(String name) {
this.name = name;
}
/**
* Getter for property title.
*
* @return Value of property title.
*/
public String getTitle() {
return this.title;
}
/**
* Setter for property title.
*
* @param title New value of property title.
*/
public void setTitle(String title) {
this.title = title;
}
/**
* Getter for property abstractStr.
*
* @return Value of property abstractStr.
*/
public java.lang.String getAbstract() {
return abstractStr;
}
/**
* Setter for property abstractStr.
*
* @param abstractStr New value of property abstractStr.
*/
public void setAbstract(java.lang.String abstractStr) {
this.abstractStr = abstractStr;
}
public void accept(StyleVisitor visitor) {
visitor.visit(this);
}
public boolean equals(Object oth) {
if (this == oth) {
return true;
}
if (oth instanceof StyledLayerDescriptorImpl) {
StyledLayerDescriptorImpl other = (StyledLayerDescriptorImpl) oth;
return (Utilities.equals(abstractStr, other.abstractStr)
&& Utilities.equals(layers, other.layers)
&& Utilities.equals(name, other.name)
&& Utilities.equals(title, other.title));
}
return false;
}
}