On Tue, May 24, 2011 at 2:13 AM, Jody Garnett <jody.garn...@gmail.com>wrote:

>  Giving this one a bit more thought ...  FunctionNameImpl is used directly
> by most of the implementations in gt-main.
>
>    static FunctionName NAME = new FunctionNameImpl("snap", "point",
> "line");
>
> This is backed by the following method:
>
>    private static List<String> generateArgumentNames( int count,
> List<String> copy ){
>         List<String> names = Arrays.asList( new String[count]);
>         for( int i=0; i < count; i++){
>             String name = "arg"+i;
>             if( copy != null && i < copy.size() && copy.get(i) != null ){
>                 name = copy.get(i);
>             }
>             names.set(i, name );
>         }
>         return names;
>     }
>
> There are two quick approaches to use:
>
> 1. Make use of DataUtilities.type(String typeName) to support the
> following:
>
>    static FunctionName NAME = new FunctionNameImpl("snap", "point:Point",
> "line:MultiLineString");
>
> 2. Create a property file that can map common values as you indicated
> before.
>
> line=MultiLineString
> point=Point
> geom=Geometry
> ...
>
> And why not be explicit directly in code? An argument has a name and a type
directly... what would the point of storing them in a property file? Only
thing i can think of is for i18n purposes.

I don't like a utility method DataUtilities either. Seems like another
unnecessary abstraction, again i prefer to be explicit and just use the
filter factory for creation. That DataUtilities class already contains so
much random stuff of various levels of quality that I generally stay away
from it.

If a utility method is desired I would put it somewhere more relevant like
on FunctionImpl or a more filter related utility class.

3. Or combine the two...
>
>     private static List<Parameter<?>> generateArguments( int count,
> List<String> copy ){
>         List<Parameter<?>> arguments = new ArrayList<Parameter<?>>();
>         for( int i=0; i < count; i++){
>             String name = "arg"+i;
>             Class<?> type = Object.class;
>             String title = null;
>             String description = null;
>
>             if( copy != null && i < copy.size() && copy.get(i) != null ){
>                 String specification = copy.get(i);
>                 if( specification.contains(":")){
>                     String split[] = specification.split(":");
>
>                     name = split[0];
>                     type = type( name, split[1]);
>                     title = name;
>                     description = null;
>                 }
>                 else {
>                     title = name;
>                     description = null;
>                     type = type( name, null );
>                 }
>             }
>             Parameter parameter = new Parameter(name, type, title,
> description );
>             arguments.add( parameter );
>         }
>         return arguments;
>     }
>     static Properties lookup;
>     static {
>         lookup = new Properties();
>         ...
>     }
>     private static Class<?> type(String name, String spec) {
>         if( spec == null ){
>             // check for a default
>             spec = lookup.getProperty(name);
>         }
>         Class<?> type = null;
>         if (spec != null ){
>             type = DataUtilities.type(spec);
>         }
>         if( type != null){
>             type = Object.class;
>         }
>         return type;
>     }
>
> --
> Jody Garnett
>
> On Saturday, 21 May 2011 at 10:28 AM, Jody Garnett wrote:
>
>  The argument naming convention was part of jody's last proposal on adding
> arguments names to functionName. In some cases I tried to be a bit smarter
> in geoserver and as a workaround handle some "well known" argument names
> such as "geometry". For example:
>
> I had a similar idea; if we could handle "geom", "geom1","geom2","geomN"
> (and also "int","int1","int2","int3","intN") - even if just for the gt-main
> based functions a lot of of boiler plate code would not be needed (and it
> would encourage consistency).
>
> For the most part when I added names to functions I was consistent; so I
> think this approach would take us 90% of the way.
>
> Jody
>
>
>


-- 
Justin Deoliveira
OpenGeo - http://opengeo.org
Enterprise support for open source geospatial.
------------------------------------------------------------------------------
vRanger cuts backup time in half-while increasing security.
With the market-leading solution for virtual backup and recovery, 
you get blazing-fast, flexible, and affordable data protection.
Download your free trial now. 
http://p.sf.net/sfu/quest-d2dcopy1
_______________________________________________
Geotools-devel mailing list
Geotools-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geotools-devel

Reply via email to