+1 for that. Looking at the mailing lists, I got a little bit of a "dark 
feeling" about the SLD/Styling complex. Since I know that this is the future 
for many departments of my biggest customer I would really appreciate that. 

As a matter of fact, I have to convince many users to use SLDs in 
conjunction with geoserver instead of doing their own styling in ArcGIS, 
each one styling individually. A challenge :-) 


Andrea Aime writes: 

> Hi all,
> many years ago pissed off by how hard it was to build
> styles with code I created the StyleBuilder we have today...
> shame on me :) 
> 
> Now, I would like to propose a new style builder to replace
> that old clunky one. I would like it to be very compact,
> chock full of default behavior, and fluent.
> This mail just strokes out the general ideas, it's not
> a full fledged spec of how it would look like. 
> 
> A OGC Style is structured as a tree: 
> 
> Style -> FeatureTypeStyle* -> Rule* -> Symbolizer* 
> 
> Now, one could make a tree of builders, but that would
> mean the user would deal explicitly with 4 builders and would
> have to compose the results... ugh, better write the
> SLD by hand and parse it ;-) 
> 
> The idea to simplify the above would be that:
> - there is one main builder that allows access to
>    all the child ones with a fluent api
> - at every moment, there is only one style, one
>    FTS, one rule and one symbolizer being built.
>    When you say you want the symbolizer, it's the
>    current one
> - the only thing you're actually forced to specify
>    is a symbolizer. Everything else is defaulted
>    and assumed to be around (no need to actually
>    make calls to create a fts or a rule). And we
>    could even default the symbolizer itself (if
>    you did not say anything about it, it's a default
>    point style).
> - when a higher level object is built, it cascades
>    the build to the contained objects being built
> - when a new object is started, the previous one
>    is accumulated and will be used when building
>    the upper level object 
> 
> Some ideas of how the api might look like, builder
> orchestration wise:
> StyleBuilder -> the current styleBuilder
> StyleBuilder.fts() -> the current feature type style builder
> StyleBuilder.rule() -> the current rule builder
> StyleBuilder.symbolizer() -> the current symbolizer builder
> StyleBuilder.startFTS() -> starts a new feature type style, accumulates
>                             the previous one, if any
> StyleBuilder.startRule() -> starts a new rule, accumulates the previous
>                              one if any
> StyleBuilder.startPoint() -> starts a new point symbolizer, accumulates
>                               the previous one if any
> StyleBuilder.startLine()
> StyleBuilder.startPolygon()
> StyleBuilder.startRaster() 
> 
> 
> Some examples of how it could be used: 
> 
> // builds a default point style
> StyleBuilder sb = new StyleBuilder();
> sb.startPoint();
> Style ps = sb.buildStyle(); 
> 
> // builds a default polygon style
> sb.startPolygon();
> sb.build(); 
> 
> // builds a blue 2px line style
> sb.startLine().stroke(Color.BLUE).strokeWidth(2);
> sb.build(); 
> 
> // a default polygon style with a filter and min scale
> sb.startPolygon();
> sb.rule().filter(myFilter).minScale(minDenominator);
> sb.build(); 
> 
> // simple two color thematic map
> sb.rule().filter(filter1);
> sb.startPolygon().fill(Color.RED);
> sb.startRule().filter(filter2);
> sb.startPolygon().fill(Color.YELLOW);
> sb.build(); 
> 
> // highway style line with two overlapping fts
> sb.startLine().stroke(Color.WHITE).strokeWidth(3);
> sb.startFTS();
> sb.startLine().stroke(Color.GRAY).strokeWidth(1);
> sb.build(); 
> 
> build() method wise, I was thinking each nested builder
> would show the same method. When called it builds the current
> object and resets it along with the lower levels.
> So for example sb.rule().build() would cascade to the
> current symbolizer, accumulate all the symbolizers found,
> and reset both the rule and the symbolizers states.
> But the most common case would just to call the top
> level build() object to get a full fledged style. 
> 
> What do you think? Am I on to something?
> Cheers
> Andrea 
> 
> -- 
> Andrea Aime
> OpenGeo - http://opengeo.org
> Expert service straight from the developers. 
> 
> ------------------------------------------------------------------------------
> Crystal Reports - New Free Runtime and 30 Day Trial
> Check out the new simplified licensing option that enables unlimited
> royalty-free distribution of the report engine for externally facing 
> server and web deployment.
> http://p.sf.net/sfu/businessobjects
> _______________________________________________
> Geotools-devel mailing list
> Geotools-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/geotools-devel
 


------------------------------------------------------------------------------
Crystal Reports - New Free Runtime and 30 Day Trial
Check out the new simplified licensing option that enables unlimited
royalty-free distribution of the report engine for externally facing 
server and web deployment.
http://p.sf.net/sfu/businessobjects
_______________________________________________
Geotools-devel mailing list
Geotools-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geotools-devel

Reply via email to