I prefer the fluent approach for code examples, and that is a good idea using AttributeTypeBuilder as a delegate to avoid duplicating code.
Jody On Fri, May 27, 2022 at 12:31 AM Roar Brænden <roar.brenden...@gmail.com> wrote: > Hi, > > Thanks for the feedback. There wasn't that much of problems with unit > tests as I was afraid of. > > When looking into the code I saw that these methods should have been in an > AttributeDescriptorBuilder. I have been thinking more about it, and see > that it could be using a AttributeTypeBuilder as a delegate. Then it > wouldn't be that much work. > > Another thing about AttributeTypeBuilder is that it's taken a new fluent > approach, together with the more ordinary with setter's. > If we make a new AttributeDescriptorBuilder what would you prefer. Having > it fluent like: > > AttributeDescriptorBuilder builder = new > AttributeDescriptorBuilder(factory); > AttributeDescriptor attribute = builder.name > ("location").typeName("gml:PointPropertyType").binding(Point.class).buildDescriptor(); > > or > > AttributeDescriptorBuilder builder = new > AttributeDescriptorBuilder(factory); > builder.setName("location"); > builder.setTypeName("gml:PointPropertyType"); > builder.setBinding(Point.class); > AttributeDescriptor attribute = builder.buildDescriptor(); > > Best regards, > > Roar Brænden > > > 27. mai 2022 kl. 03:33 skrev Jody Garnett <jody.garn...@gmail.com>: > > I remember annoying cite test style problems where tests were checking > that an attribute named "location" was required to be a PointPropertyType. > > OGC 07-036r1 > > *Table 11* > GML object element: gml:Point > > GML type: gml:PointType > > GML property type: gml:PointPropertyType > > *F.2.1.2.4 Default property types for gml object types* > > A default GML property type may be defined in a GML application schema for > every GML object type defined in that GML application schema. > The GML property type shall either use or inherit directly or indirectly > from one of the property types specified in 7.2.3 or it shall be defined in > accordance with the patterns specified in this subclause. > > > Here is the simple feature logic in our codebase: > - > https://github.com/geotools/geotools/blob/main/modules/library/xml/src/main/java/org/geotools/gml/producer/FeatureTypeTransformer.java#L446 > > And the annoying case of "location" property: > - > https://github.com/geotools/geotools/blob/main/modules/library/sample-data/src/main/resources/org/geotools/test-data/xml/gml/feature.xsd#L33 > > -- > Jody Garnett > > > On Thu, 26 May 2022 at 09:07, Andrea Aime < > andrea.a...@geosolutionsgroup.com> wrote: > >> I'm actually not sure we ever use the type name... just the descriptor >> name. >> I have faint memories about this, but I think the parallel was: >> - descriptor is like an XML element name >> - type is like the XML type backing the element >> >> They can have legitimately two different names, no? In theory the same >> type could be shared across multiple descriptors >> Don't think it happens with simple features, not sure if that's something >> used by app-schema, it might if it's driven by an actual XML schema though?. >> >> Cheers >> Andrea >> >> On Thu, May 26, 2022 at 5:49 PM Jody Garnett <jody.garn...@gmail.com> >> wrote: >> >>> Please go ahead with the fix, now that GeoServer has the ability to >>> redefine schema attributes (and I hope to add the ability to edit title / >>> abstract) this information will be more widely used and relied on. >>> >>> Jody >>> >>> >>> On Wed, May 25, 2022 at 11:32 PM Roar Brænden <roar.brenden...@gmail.com> >>> wrote: >>> >>>> Hi, >>>> >>>> I was reading some shapefiles when it came to my attention that >>>> something was strange with the schema's reported: >>>> >>>> TS14_max identified extends >>>> polygonFeature(the_geom:MultiPolygon,ID1:ID1,AV_Time:AV_Time,Shape_Leng:Shape_Leng,Shape_Area:Shape_Area) >>>> TS21_min identified extends >>>> polygonFeature(the_geom:MultiPolygon,ID1:ID1,AV_Time:AV_Time,Shape_Leng:Shape_Leng,Shape_Area:Shape_Area) >>>> TS16_mc identified extends >>>> polygonFeature(the_geom:MultiPolygon,ID1:ID1,AV_Time:AV_Time,Shape_Leng:Shape_Leng,Shape_Area:Shape_Area) >>>> >>>> The problem is why does it repeat the name of the fields. After some >>>> digging in the code, I realized that the problem is within: >>>> org.geotools.feature.AttributeTypeBuilder.buildDescriptor(String name) >>>> >>>> public AttributeDescriptor buildDescriptor(String name) { >>>> setName(name); <---- name isn't the type's >>>> name. It's the attributes name >>>> if (binding == null) >>>> throw new IllegalStateException("No binding has been >>>> provided for this attribute"); >>>> if (crs != null || Geometry.class.isAssignableFrom(binding)) { >>>> return buildDescriptor(name, buildGeometryType()); >>>> } else { >>>> return buildDescriptor(name, buildType()); >>>> } >>>> } >>>> >>>> According to Github that code hasn't been changed for years, so >>>> GeoTools users must have become familiar with this "problem". Because it >>>> might not be a real problem. I do believe most people are using >>>> getBinding() rather than looking at what is returned by getName() when >>>> looking at an AttributeType. >>>> >>>> I'm quite sure removing that setName(name) line will fix the problem, >>>> but doing so will possibly end up in a lot of unit test failures like this >>>> one: >>>> >>>> [ERROR] ImageMosaicReaderTest.granuleSourceTest:1437 >>>> expected:<...ltiPolygon,location:[location,time:time,endtime:endtime,date:date,lowz:lowz,highz:highz,loww:loww,highw:highw])> >>>> but >>>> was:<...ltiPolygon,location:[String,time:Date,endtime:Date,date:String,lowz:Integer,highz:Integer,loww:Integer,highw:Integer])> >>>> >>>> >>>> Should I go forward fixing this, or are people so used to this that >>>> they don't bother? >>>> >>>> Best regards, >>>> Roar Brænden >>>> >>>> _______________________________________________ >>>> GeoTools-Devel mailing list >>>> GeoTools-Devel@lists.sourceforge.net >>>> https://lists.sourceforge.net/lists/listinfo/geotools-devel >>>> >>> -- >>> -- >>> Jody Garnett >>> _______________________________________________ >>> GeoTools-Devel mailing list >>> GeoTools-Devel@lists.sourceforge.net >>> https://lists.sourceforge.net/lists/listinfo/geotools-devel >>> >> >> >> -- >> Regards, >> Andrea Aime >> == >> GeoServer Professional Services from the experts! >> Visit http://bit.ly/gs-services-us for more information. >> == >> >> Ing. Andrea Aime >> @geowolf >> Technical Lead >> >> GeoSolutions Group >> phone: +39 0584 962313 >> fax: +39 0584 1660272 >> mob: +39 333 8128928 >> >> https://www.geosolutionsgroup.com/ >> http://twitter.com/geosolutions_it >> ------------------------------------------------------- >> >> Con riferimento alla normativa sul trattamento dei dati personali (Reg. >> UE 2016/679 - Regolamento generale sulla protezione dei dati “GDPR”), si >> precisa che ogni circostanza inerente alla presente email (il suo >> contenuto, gli eventuali allegati, etc.) è un dato la cui conoscenza è >> riservata al/i solo/i destinatario/i indicati dallo scrivente. Se il >> messaggio Le è giunto per errore, è tenuta/o a cancellarlo, ogni altra >> operazione è illecita. Le sarei comunque grato se potesse darmene notizia. >> >> This email is intended only for the person or entity to which it is >> addressed and may contain information that is privileged, confidential or >> otherwise protected from disclosure. We remind that - as provided by >> European Regulation 2016/679 “GDPR” - copying, dissemination or use of this >> e-mail or the information herein by anyone other than the intended >> recipient is prohibited. If you have received this email by mistake, please >> notify us immediately by telephone or e-mail >> > > -- -- Jody Garnett
_______________________________________________ GeoTools-Devel mailing list GeoTools-Devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/geotools-devel