package org.geotools.styling.builder;
import java.util.ArrayList;
import java.util.List;
import org.geotools.styling.FeatureTypeConstraint;
import org.geotools.styling.NamedLayer;
import org.geotools.styling.Style;
/**
*
*
* @source $URL$
*/
public class NamedLayerBuilder extends AbstractSLDBuilder<NamedLayer> {
List<FeatureTypeConstraintBuilder> featureTypeConstraint = new ArrayList<FeatureTypeConstraintBuilder>();
private String name;
List<StyleBuilder> styles = new ArrayList<StyleBuilder>();
public NamedLayerBuilder() {
this(null);
}
public NamedLayerBuilder(AbstractSLDBuilder<?> parent) {
super(parent);
reset();
}
public NamedLayerBuilder name(String name) {
this.unset = false;
this.name = name;
return this;
}
public StyleBuilder style() {
this.unset = false;
StyleBuilder sb = new StyleBuilder(this);
styles.add(sb);
return sb;
}
@SuppressWarnings("unchecked")
public NamedLayer build() {
if (unset) {
return null;
}
NamedLayer layer = sf.createNamedLayer();
layer.setName(name);
List<FeatureTypeConstraint> list = new ArrayList<FeatureTypeConstraint>();
for (FeatureTypeConstraintBuilder constraint : featureTypeConstraint) {
list.add(constraint.build());
}
layer.layerFeatureConstraints().addAll(list);
for (StyleBuilder sb : styles) {
layer.addStyle(sb.build());
}
if (parent == null) {
reset();
}
return layer;
}
public NamedLayerBuilder reset() {
unset = false;
this.name = null;
featureTypeConstraint.clear();
return this;
}
public NamedLayerBuilder reset(NamedLayer layer) {
if (layer == null) {
return unset();
}
this.name = layer.getName();
featureTypeConstraint.clear();
if (layer.layerFeatureConstraints() != null) {
for (FeatureTypeConstraint featureConstraint : layer.layerFeatureConstraints()) {
featureTypeConstraint.add(new FeatureTypeConstraintBuilder(this)
.reset(featureConstraint));
}
}
styles.clear();
for (Style style : layer.getStyles()) {
styles.add(new StyleBuilder().reset(style));
}
unset = false;
return this;
}
public NamedLayerBuilder unset() {
return (NamedLayerBuilder) super.unset();
}
@Override
protected void buildSLDInternal(StyledLayerDescriptorBuilder sb) {
sb.namedLayer().init(this);
}
}