package org.geotools.styling.builder; import java.util.ArrayList; import java.util.List; import org.geotools.data.DataStore; import org.geotools.styling.FeatureTypeConstraint; import org.geotools.styling.Style; import org.geotools.styling.UserLayer; import org.opengis.feature.simple.SimpleFeatureType; /** * * * @source $URL$ */ public class UserLayerBuilder extends AbstractSLDBuilder<UserLayer> { DataStore inlineFeatureDataStore; SimpleFeatureType inlineFeatureType; RemoteOWSBuilder remoteOWS = new RemoteOWSBuilder().unset(); List<FeatureTypeConstraintBuilder> featureTypeConstraint = new ArrayList<FeatureTypeConstraintBuilder>(); List<StyleBuilder> userStyles = new ArrayList<StyleBuilder>(); public UserLayerBuilder() { this(null); } public UserLayerBuilder(AbstractSLDBuilder<?> parent) { super(parent); reset(); } public UserLayerBuilder inlineData(DataStore store, SimpleFeatureType sft) { this.unset = false; this.inlineFeatureDataStore = store; this.inlineFeatureType = sft; return this; } public UserLayerBuilder remoteOWS(String onlineResource, String service) { this.unset = false; remoteOWS.resource(onlineResource).service(service); return this; } public FeatureTypeConstraintBuilder featureTypeConstraint() { this.unset = false; FeatureTypeConstraintBuilder builder = new FeatureTypeConstraintBuilder(this); featureTypeConstraint.add(builder); return builder; } public StyleBuilder style() { this.unset = false; StyleBuilder sb = new StyleBuilder(this); userStyles.add(sb); return sb; } /** * Reset stroke to default values. */ public UserLayerBuilder reset() { unset = false; inlineFeatureDataStore = null; inlineFeatureType = null; remoteOWS.unset(); featureTypeConstraint.clear(); userStyles.clear(); return this; } /** * Reset builder to provided original stroke. * * @param stroke */ public UserLayerBuilder reset(UserLayer other) { if (other == null) { return unset(); } inlineFeatureDataStore = other.getInlineFeatureDatastore(); inlineFeatureType = other.getInlineFeatureType(); remoteOWS.reset(other.getRemoteOWS()); featureTypeConstraint.clear(); for (FeatureTypeConstraint ftc : other.getLayerFeatureConstraints()) { featureTypeConstraint.add(new FeatureTypeConstraintBuilder(this).reset(ftc)); } userStyles.clear(); for (Style style : other.getUserStyles()) { userStyles.add(new StyleBuilder(this).reset(style)); } unset = false; return this; } @Override public UserLayerBuilder unset() { return (UserLayerBuilder) super.unset(); } public UserLayer build() { if (unset) { return null; } UserLayer layer = sf.createUserLayer(); layer.setRemoteOWS(remoteOWS.build()); layer.setInlineFeatureDatastore(inlineFeatureDataStore); layer.setInlineFeatureType(inlineFeatureType); if (featureTypeConstraint.size() > 0) { FeatureTypeConstraint[] constraints = new FeatureTypeConstraint[featureTypeConstraint .size()]; for (int i = 0; i < constraints.length; i++) { constraints[i] = featureTypeConstraint.get(i).build(); } layer.setLayerFeatureConstraints(constraints); } for (StyleBuilder sb : userStyles) { layer.addUserStyle(sb.build()); } return layer; } @Override protected void buildSLDInternal(StyledLayerDescriptorBuilder sb) { sb.userLayer().init(this); } }