I am concerned that this would undo one of the things we fixed in GEOT-2505:
http://jira.codehaus.org/browse/GEOT-2505

This might break a bunch of use cases. I'll check with the users.

On 05/10/10 04:35, Justin Deoliveira wrote:
> That makes sense. That GMLSchema contains autogenerated types for all gml 
> schema types and gets customized in a need by need basis, as with the regular 
> geometry types. +1 here but I think you may want to wait for Ben or Rini to 
> weigh in before proceeding.
>
> 2c.
>
> -Justin
>
> On Mon, Oct 4, 2010 at 11:51 AM, Andrea 
> Aime<andrea.a...@geo-solutions.it<mailto:andrea.a...@geo-solutions.it>>  
> wrote:
> On Mon, Oct 4, 2010 at 7:26 PM, Andrea Aime
> <andrea.a...@geo-solutions.it<mailto:andrea.a...@geo-solutions.it>>  wrote:
>> Hi,
>> I'm trying to use app-schema with a target schema that, unfortunately,
>> uses a DirectPosition as
>> the feature "geometry". I don't have any control over the schema so I
>> have to try and make it work
>> anyways.
>>
>> What I get overall is that my points are turned into their WKT
>> representation when the
>> GML encoding happens. Which is not what I want.
>>
>> Looking a bit more deeply I see that the attribute is correctly bound
>> to DirectPosition:
>> ComplexTypeImpl http://www.opengis.net/gml:DirectPositionType extends
>> doubleList(axisLabels:NCNameList,srsDimension:positiveInteger,srsName:anyURI,uomLabels:NCNameList)
>> but nowhere in the code there is an attempt to use converters to turn
>> the JTS Point into a DirectPosition.
>>
>> Now, I tracked down the issue to XPath.convertValue:
>>
>> private Object convertValue(final AttributeDescriptor descriptor,
>> final Object value) {
>>         final AttributeType type = descriptor.getType();
>>         Class<?>  binding = type.getBinding();
>>
>>         if (type instanceof ComplexType&&  binding == Collection.class) {
>>             if (!(value instanceof Collection)&&  isSimpleContentType(type)) 
>> {
>>                 ArrayList<Property>  list = new ArrayList<Property>();
>>                 if (value == null&&  !descriptor.isNillable()) {
>>                     return list;
>>                 }
>>                 list.add(buildSimpleContent(type, value));
>>                 return list;
>>             }
>>         }
>>         if (binding == String.class&&  value instanceof Collection) {
>>             // if it's a single value in a collection, strip the square 
>> brackets
>>             String collectionString = value.toString();
>>             return collectionString.substring(1, collectionString.length() - 
>> 1);
>>         }
>>         return FF.literal(value).evaluate(value, binding);
>>     }
>>
>> type is a complex type, but binding for some reason is exactly 
>> Collection.class,
>> which results in the wrong code path being chosen (the right one, imho, would
>> be the usage of the last line, FF.literal(value).evaluate(value, binding), 
>> which
>> could be expressed also as Converters.convert(value, binding)).
>>
>> Now... does anybody know why the binding ends up being a collection instead
>> of org.opengis.geometry.DirectPosition?
>> I still haven't quite tracked down where the bindings are built...
>
> Ok, tracked it down.
> The GMLSchema class contains the definitions of many gml foundation types,
> for point the definition is:
>
>
> public static final AttributeType POINTTYPE_TYPE = build_POINTTYPE_TYPE();
>
>     private static AttributeType build_POINTTYPE_TYPE() {
>         AttributeType builtType;
>         builtType = new AttributeTypeImpl(
>             new NameImpl("http://www.opengis.net/gml","PointType";),
> com.vividsolutions.jts.geom.Point.class, false,
>             false, Collections.<Filter>emptyList(),
> ABSTRACTGEOMETRICPRIMITIVETYPE_TYPE, null
>         );
>         return builtType;
>     }
>
> Notice the direct binding to Point.class.
> But for DirectPosition it is:
>
> public static final ComplexType DIRECTPOSITIONTYPE_TYPE =
> build_DIRECTPOSITIONTYPE_TYPE();
>
>     private static ComplexType build_DIRECTPOSITIONTYPE_TYPE() {
>         ComplexType builtType;
>         List<PropertyDescriptor>  schema = new 
> ArrayList<PropertyDescriptor>();
>         schema.add(
>             new AttributeDescriptorImpl(
>                 NCNAMELIST_TYPE, new
> NameImpl("http://www.opengis.net/gml","axisLabels";), 0, 1, true, null
>             )
>         );
>         schema.add(
>             new AttributeDescriptorImpl(
>                 XSSchema.POSITIVEINTEGER_TYPE, new
> NameImpl("http://www.opengis.net/gml","srsDimension";), 0, 1, true,
> null
>             )
>         );
>         schema.add(
>             new AttributeDescriptorImpl(
>                 XSSchema.ANYURI_TYPE, new
> NameImpl("http://www.opengis.net/gml","srsName";), 0, 1, true, null
>             )
>         );
>         schema.add(
>             new AttributeDescriptorImpl(
>                 NCNAMELIST_TYPE, new
> NameImpl("http://www.opengis.net/gml","uomLabels";), 0, 1, true, null
>             )
>         );
>         builtType = new ComplexTypeImpl(
>             new
> NameImpl("http://www.opengis.net/gml","DirectPositionType";), schema,
> false,
>             false, Collections.<Filter>emptyList(), DOUBLELIST_TYPE, null
>         );
>         return builtType;
>     }
>
> That is, it's built as a complex type, and all complex types bind to
> Collection.class (that's inside the
> ComplexTypeImpl constructor).
>
> The change I'm tempted to perform is to make the direct position bound
> to a opengis DirectPosition
> instead. It would contain the ordinates and the crs, but not the other
> attributes...
> And then make a converter between Point and DirectPosition... the
> DirectPositionTypeBinding
>   is actually already there and should work
>
> Thoughts?
>
> Cheers
> Andrea
>
>
> -----------------------------------------------------
> Ing. Andrea Aime
> Senior Software Engineer
>
> GeoSolutions S.A.S.
> Via Poggio alle Viti 1187
> 55054  Massarosa (LU)
> Italy
>
> phone: +39 0584962313
> fax:     +39 0584962313
>
> http://www.geo-solutions.it
> http://geo-solutions.blogspot.com/
> http://www.linkedin.com/in/andreaaime
> http://twitter.com/geowolf
>
> -----------------------------------------------------
>
> ------------------------------------------------------------------------------
> Virtualization is moving to the mainstream and overtaking non-virtualized
> environment for deploying applications. Does it make network security
> easier or more difficult to achieve? Read this whitepaper to separate the
> two and get a better understanding.
> http://p.sf.net/sfu/hp-phase2-d2d
> _______________________________________________
> Geotools-devel mailing list
> Geotools-devel@lists.sourceforge.net<mailto:Geotools-devel@lists.sourceforge.net>
> https://lists.sourceforge.net/lists/listinfo/geotools-devel
>
>
>
> --
> Justin Deoliveira
> OpenGeo - http://opengeo.org
> Enterprise support for open source geospatial.
>
>


-- 
Ben Caradoc-Davies <ben.caradoc-dav...@csiro.au>
Software Engineering Team Leader
CSIRO Earth Science and Resource Engineering
Australian Resources Research Centre

------------------------------------------------------------------------------
Beautiful is writing same markup. Internet Explorer 9 supports
standards for HTML5, CSS3, SVG 1.1,  ECMAScript5, and DOM L2 & L3.
Spend less time writing and  rewriting code and more time creating great
experiences on the web. Be a part of the beta today.
http://p.sf.net/sfu/beautyoftheweb
_______________________________________________
Geotools-devel mailing list
Geotools-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geotools-devel

Reply via email to