This is the subject of
active development on the GeoAPI Feature Model interfaces.
|
For details of the API please review the nice pictures here:
|
Consult Primer here: |
Quality Assurance Guidelines
One of the big problems the FM branch has run into is inconsistencies in the GeoTools library... needing factories to be used correctly, allowing them to be injected where needed etc.
So far in talking to Justin I have found a few ground rules that when I
screw up has me fail a code review. These are hard to capature .. but I
gotta try anyways.
- Builder vs Factory
- XFactory does what it does exactly with no logic
- XBuilder maintains state and can do the logic you wanted to put in the factory
- DataStore and its Factories
- AbstractDataStore is focused on "simple" features
- AbstractDataStore "owns" types and thus needs a SimpleTypeFactory in order to create them
- FeatureSource "owns" data and thus needs a SimpleFeatureFactory in order to create data
- Iterators and FeatureReaders/FeatureWriters
- FeatureReader and FeatureWriter are no longer a focus of interaction
- Iterators "create" content, so each pass through the data will need its own FeatureBuilder)
- Iterators and Visitors
- Iterators are used to hack at data (isDirty checks, or cloning may not be fast)
- FeatureVisitor are used for blinding fast (possible concurrent) access
- Use of Builders
- Builders should only ever be a local variable, or used in one synchronized method.
- FeatureCollection vs Filter
- FeatureCollections are magic optimized datastore specific pearls of performance (so hold onto them rather then the generic Filter that created them)
- FeatureCollection can do more then Filter, see subCollection(filter), sort( order ), ... and soon join( collection )
- use feature collection methods to build up your "data model" and then use the filter "query model" to select the information you want out.
- The three DataStore specific FeatureCollection implementations
- Represents getFeatures( Filter.NONE ) - ie everything, count and bounds optimized based on metadata etc
- Represents getFeatures( Filter ) - represents a useful collection, may be implemented over random access rowset etc..
- Represents subCollection( Filter ) - used to temporary hold a Filter to paramartize an operation like clear()
- If you can support an index or random access break out FeatureList

All of Data basically fails and will need to be fixed. You can see this failure when ever you see a FeatureBuilder (or any Builder) passed around as a parameter between classes, or stored for reuse). This is hard to test as the problem will only occur when the DataStore is being used by two threads (or if a FeatureCollection is being used by
two threads).
Active Development
|
|
||||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| T | Key | Summary | Assignee | Reporter | Pr | Status | Res | Created | Updated | Due |
|
|
GEOT-882 | Only one of the two methods in DefaultAttrbuteTypeFactory that takes a metadata object parameter sets the CRS on the geometry type | Jesse Eichar | Jesse Eichar |
|
|
FIXED | Jul 07, 2006 | Jul 07, 2006 | |
|
|
GEOT-1302 | add common-lang DateUtils.parseDate to list of things TemporalAttribute uses to parse possible dates | Justin Deoliveira | Ian Turton |
|
|
UNRESOLVED | Jun 12, 2007 | Sep 04, 2008 | |
|
|
GEOT-1360 | deprecate old feature model | Justin Deoliveira | Justin Deoliveira |
|
|
FIXED | Jun 27, 2007 | Nov 11, 2007 | |
|
|
GEOT-1361 | switch client code to new feature and feature type builder api | Justin Deoliveira | Justin Deoliveira |
|
|
FIXED | Jun 27, 2007 | Nov 11, 2007 | |
|
|
GEOT-1455 | reduce property accessor overhead for the simple case | Andrea Aime | Justin Deoliveira |
|
|
FIXED | Aug 27, 2007 | Sep 18, 2007 | |
|
|
GEOT-1102 | DefaultAttributeType.validate shows on rendering profiles | Andrea Aime | Andrea Aime |
|
|
FIXED | Jan 01, 2007 | Jan 08, 2007 | |
|
|
GEOT-1196 | AttributeType min occurs should depend from nullability in the current feature model | Andrea Aime | Andrea Aime |
|
|
FIXED | Mar 13, 2007 | Mar 13, 2007 | |
|
|
GEOT-1420 | Unguarded logging slows down Geotools in benchmarks | Andrea Aime | Andrea Aime |
|
|
FIXED | Aug 01, 2007 | Aug 01, 2007 | |
|
|
GEOT-1152 | Port ISO Feature implementation from FM to trunk/unsupported | Gabriel Roldán | Gabriel Roldán |
|
|
FIXED | Feb 06, 2007 | Feb 07, 2007 | |
|
|
GEOT-1156 | Allow to partially force CRS on feature types | Andrea Aime | Andrea Aime |
|
|
FIXED | Feb 07, 2007 | Feb 12, 2007 | |
|
|
GEOT-1081 | Two GeometricAttributeTypes with different CRS should not be "equals()" to each other | Unassigned | Saul Farber |
|
|
INCOMPLETE | Dec 20, 2006 | Apr 10, 2007 | |
|
|
GEOT-1252 | TypeName and Name equals() implementations are not symetric | Gabriel Roldán | Gabriel Roldán |
|
|
FIXED | Apr 25, 2007 | Apr 26, 2007 | |
|
|
GEOT-1362 | make geotools.AttributeType extend opengis.AttributeDescriptor | Justin Deoliveira | Justin Deoliveira |
|
|
FIXED | Jun 27, 2007 | Jul 27, 2007 | |
|
|
GEOT-1364 | make geotools.Feature extend opengis.Feature | Justin Deoliveira | Justin Deoliveira |
|
|
FIXED | Jun 27, 2007 | Jul 27, 2007 | |
|
|
GEOT-1304 | Port ISO (GeoAPI) FeatureModel implementation from fm branch to unsupported module in trunk | Gabriel Roldán | Gabriel Roldán |
|
|
FIXED | Jun 13, 2007 | Jun 14, 2007 | |
|
|
GEOT-1579 | Use of restrictions fails based on lack of property accessor for Attribute | Unassigned | Jody Garnett |
|
|
DUPLICATE | Nov 11, 2007 | Nov 11, 2007 | |
|
|
GEOT-1316 | AttributeBuilder may receive the AttributeDescriptor instead of the AttributeType | Gabriel Roldán | Gabriel Roldán |
|
|
FIXED | Jun 14, 2007 | Jun 14, 2007 | |
|
|
GEOT-1318 | Provide Adapters from GT-Feature to ISO-Feature | Gabriel Roldán | Gabriel Roldán |
|
|
FIXED | Jun 14, 2007 | Jun 14, 2007 | |
|
|
GEOT-1396 | deprecate SimpleTypeBuilder,SimpleFeatureBuilder, and Schema classes on 2.4 | Justin Deoliveira | Justin Deoliveira |
|
|
FIXED | Jul 15, 2007 | Jul 20, 2007 | |
|
|
GEOT-1577 | Pass uDig Tests | Jody Garnett | Jody Garnett |
|
|
FIXED | Nov 11, 2007 | Mar 05, 2008 | |
|
|
GEOT-1365 | resolve geotools / geoapi feature model naming conflicts | Justin Deoliveira | Justin Deoliveira |
|
|
FIXED | Jun 27, 2007 | Jul 27, 2007 | |
|
|
GEOT-1359 | make old feature model extend new feature model | Justin Deoliveira | Justin Deoliveira |
|
|
FIXED | Jun 27, 2007 | Jul 27, 2007 | |
|
|
GEOT-1413 | make geotools.FeatureCollection extend opengis.FeatureCollection | Justin Deoliveira | Justin Deoliveira |
|
|
FIXED | Jul 27, 2007 | Jul 27, 2007 | |
|
|
GEOT-1363 | make geotools.FeatureType extend opengis.FeatureType | Justin Deoliveira | Justin Deoliveira |
|
|
FIXED | Jun 27, 2007 | Jul 27, 2007 | |
|
|
GEOT-1371 | Inconsistency in ListAttributeType | Unassigned | Wim van Berkel |
|
|
UNRESOLVED | Jul 03, 2007 | Jul 03, 2007 | |
You can also track change requests against the GeoAPI interfaces here:
|
|
||||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| T | Key | Summary | Assignee | Reporter | Pr | Status | Res | Created | Updated | Due |
|
|
GEO-45 | Move FeatureStore* to org.opengis.feature.store package | jesse crossley | jesse crossley |
|
|
UNRESOLVED | Jan 06, 2005 | Mar 27, 2006 | Jan 14, 2005 |
|
|
GEO-140 | Add a @pending javadoc annotation to any experimental interface | Unassigned | Martin Desruisseaux |
|
|
UNRESOLVED | Jun 27, 2008 | Jun 27, 2008 | |
|
|
GEO-144 | Add Name.getSeparator() to simplify use of Name interface | Unassigned | Jody Garnett |
|
|
UNRESOLVED | Jul 30, 2008 | Jul 30, 2008 | |
Since the GeoServer community is championing this effort most of it shows on on the following timeline:
|
|
||||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| T | Key | Summary | Assignee | Reporter | Pr | Status | Res | Created | Updated | Due |
The specific jira item is GEOS-585 above.
History
For background reading please review the following documents:
- Feature Model Proposal
- Feature Model Design Discussion
- Evaulating Modeling Options
- some pdf into ISO 19109 from Bryce
For solid use cases please review the results of the ComplexDataStore project, especial the uses cases in Community Schema Support and Complex Types.