package org.geotools.styling.builder;
import java.util.ArrayList;
import java.util.List;
import org.geotools.Builder;
import org.geotools.factory.CommonFactoryFinder;
import org.geotools.styling.FeatureTypeStyle;
import org.geotools.styling.Style;
import org.geotools.styling.StyleFactory;
import org.geotools.util.SimpleInternationalString;
public class StyleBuilder<P> implements Builder<Style> {
StyleFactory sf = CommonFactoryFinder.getStyleFactory(null);
P parent;
List<FeatureTypeStyle> fts = new ArrayList<FeatureTypeStyle>();
FeatureTypeStyleBuilder ftsBuilder;
String name;
String styleAbstract;
String title;
boolean isDefault;
private boolean unset;
public StyleBuilder(){
this(null);
}
public StyleBuilder(P parent){
parent = null;
reset();
}
public StyleBuilder<P> name(String name) {
this.name = name;
return this;
}
public StyleBuilder title(String title) {
this.title = title;
return this;
}
public StyleBuilder styleAbstract(String styleAbstract) {
this.styleAbstract = styleAbstract;
return this;
}
public FeatureTypeStyleBuilder newFeatureTypeStyle() {
if (ftsBuilder == null)
ftsBuilder = new FeatureTypeStyleBuilder();
else
fts.add(ftsBuilder.build());
return ftsBuilder;
}
public Style build() {
if( unset ){
return null;
}
if (ftsBuilder == null)
ftsBuilder = new FeatureTypeStyleBuilder();
fts.add(ftsBuilder.build());
Style s = sf.createStyle();
s.setName(name);
if (styleAbstract != null)
s.getDescription().setAbstract(new SimpleInternationalString(styleAbstract));
if (title != null)
s.getDescription().setTitle(new SimpleInternationalString(title));
s.featureTypeStyles().addAll(fts);
s.setDefault(isDefault);
if( parent == null ) reset();
return s;
}
public StyleBuilder unset() {
reset();
unset = true;
return this;
}
public StyleBuilder reset() {
fts.clear();
ftsBuilder = null;
name = null;
styleAbstract = null;
title = null;
isDefault = false;
unset = false;
return this;
}
public StyleBuilder reset(Style style) {
if( style == null ){
return unset();
}
fts.clear();
fts.addAll( style.featureTypeStyles() ); // TODO: copy into builders
ftsBuilder = null;
name = style.getName();
styleAbstract = style.getAbstract();
title = style.getTitle();
isDefault = style.isDefault();
unset = false;
return this;
}
}