package org.geotools.styling.builder;
import java.util.ArrayList;
import java.util.List;
import org.geotools.styling.NamedLayer;
import org.geotools.styling.StyledLayer;
import org.geotools.styling.StyledLayerDescriptor;
import org.geotools.styling.UserLayer;
/**
*
*
* @source $URL$
*/
public class StyledLayerDescriptorBuilder extends AbstractSLDBuilder<StyledLayerDescriptor> {
List<AbstractSLDBuilder<? extends StyledLayer>> layers = new ArrayList<AbstractSLDBuilder<? extends StyledLayer>>();
String name;
String title;
String sldAbstract;
public StyledLayerDescriptorBuilder() {
super(null);
reset();
}
public StyledLayerDescriptorBuilder name(String name) {
unset = false;
this.name = name;
return this;
}
public StyledLayerDescriptorBuilder title(String title) {
unset = false;
this.title = title;
return this;
}
public StyledLayerDescriptorBuilder sldAbstract(String sldAbstract) {
unset = false;
this.sldAbstract = sldAbstract;
return this;
}
public NamedLayerBuilder namedLayer() {
unset = false;
NamedLayerBuilder nlb = new NamedLayerBuilder(this);
layers.add(nlb);
return nlb;
}
public UserLayerBuilder userLayer() {
unset = false;
UserLayerBuilder ulb = new UserLayerBuilder(this);
layers.add(ulb);
return ulb;
}
/**
* Reset stroke to default values.
*/
public StyledLayerDescriptorBuilder reset() {
unset = false;
this.name = null;
this.title = null;
this.sldAbstract = null;
this.layers.clear();
return this;
}
/**
* Reset builder to provided original stroke.
*
* @param stroke
*/
public StyledLayerDescriptorBuilder reset(StyledLayerDescriptor other) {
if(other == null) {
return unset();
}
this.name = other.getName();
this.title = other.getTitle();
this.sldAbstract = other.getAbstract();
this.layers.clear();
for (StyledLayer layer : other.getStyledLayers()) {
if(layer instanceof UserLayer) {
layers.add(new UserLayerBuilder().reset((UserLayer) layer));
} else if(layer instanceof NamedLayer) {
layers.add(new NamedLayerBuilder().reset((NamedLayer) layer));
}
}
unset = false;
return this;
}
public StyledLayerDescriptor build() {
if (unset) {
return null;
}
StyledLayerDescriptor sld = sf.createStyledLayerDescriptor();
sld.setName(name);
sld.setTitle(title);
sld.setAbstract(sldAbstract);
for (AbstractSLDBuilder<? extends StyledLayer> builder : layers) {
sld.addStyledLayer(builder.build());
}
reset();
return sld;
}
@Override
public StyledLayerDescriptor buildSLD() {
return build();
}
@Override
protected void buildSLDInternal(StyledLayerDescriptorBuilder sb) {
sb.init(this);
}
@Override
public StyledLayerDescriptorBuilder unset() {
return (StyledLayerDescriptorBuilder) super.unset();
}
}