package org.geotools.styling.builder; import java.util.ArrayList; import java.util.List; import org.geotools.styling.FeatureTypeStyle; import org.geotools.styling.Style; import org.geotools.util.SimpleInternationalString; /** * * * @source $URL$ */ public class StyleBuilder extends AbstractStyleBuilder<Style> { List<FeatureTypeStyleBuilder> fts = new ArrayList<FeatureTypeStyleBuilder>(); String name; String styleAbstract; String title; boolean isDefault; public StyleBuilder() { super(null); reset(); } StyleBuilder(AbstractSLDBuilder<?> parent) { super(parent); reset(); } public StyleBuilder 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 featureTypeStyle() { this.unset = unset; FeatureTypeStyleBuilder ftsBuilder = new FeatureTypeStyleBuilder(this); fts.add(ftsBuilder); return ftsBuilder; } public Style build() { if (unset) { return null; } Style s; if (fts.size() == 0) { s = sf.createNamedStyle(); s.setName(name); } else { s = sf.createStyle(); s.setName(name); if (styleAbstract != null) s.getDescription().setAbstract(new SimpleInternationalString(styleAbstract)); if (title != null) s.getDescription().setTitle(new SimpleInternationalString(title)); for (FeatureTypeStyleBuilder builder : fts) { s.featureTypeStyles().add(builder.build()); } s.setDefault(isDefault); } reset(); return s; } public StyleBuilder unset() { return (StyleBuilder) super.unset(); } public StyleBuilder reset() { fts.clear(); name = null; styleAbstract = null; title = null; isDefault = false; unset = false; return this; } public StyleBuilder reset(Style style) { if (style == null) { return unset(); } fts.clear(); for (FeatureTypeStyle ft : style.featureTypeStyles()) { fts.add(new FeatureTypeStyleBuilder(this).reset(ft)); } name = style.getName(); styleAbstract = style.getAbstract(); title = style.getTitle(); isDefault = style.isDefault(); unset = false; return this; } @Override public Style buildStyle() { return build(); } @Override protected void buildStyleInternal(StyleBuilder sb) { // no-op } }