Martin,

The code we are using is found in 
referencing->org.geotools.geometry->GeometryFactoryFinder.java  and we 
have begun adding the Hints constructors to PrimitiveFactoryImpl in the 
unsupported gometry module.

Graham.


Martin Desruisseaux wrote:

> Jody Garnett a écrit :
>
>> In my understanding there are three steps:
>> 1- it needs the no argument constructor so that the FactorySPI system 
>> can return an Object (if the user explicitly specified an exact 
>> implementation it would be found and returned directly
>
>
> Yes. Note that the no-argument constructor is never invoked explicitly 
> by org.geotools.factory.FactoryRegistry. It is invoked by 
> javax.imageio.spi.ServiceRegistry.
>
>
>> 2- It would then ask the object for its class
>> 3- And then finally perform reflection on that class in order to look 
>> for a constructor that creates hints
>
>
> There is a missing step:
>
> 2.5- It ask for Factory.getImplementationHints() and checks if the 
> hints used by the Factory match the hints specified by the users.
>
>
>> Step 1 seems broken; when I commented out step 1 I was able to 
>> confirm that step 2 and 3 work as expected.
>
>
> I'm not sure that it is broken; It seems to work with the referencing 
> module, which uses many hints. Can you point me to a code I could look 
> at?
>
>
>> We implemented the GeoTools Factory interface - it has the 
>> getImplementationHints method and was suited for our purpose. Do you 
>> really want us to extend the AbstractFactory?
>
>
> Right, you don't have to extends AbstractFactory. You can do as you 
> wish as long as getImplementationHints() returns all relevant hints, 
> but it must returns those hints (not an empty map). The hint must be 
> declared even if its value is null. For example if a Factory cares 
> about Hints.COORDINATE_REFERENCE_SYSTEM, then we must have something 
> functionnaly equivalent to:
>
>     public Map getImplementationHints() {
>         Map hints = new HashMap();
>         hints.put(Hints.COORDINATE_REFERENCE_SYSTEM, crs);
>         return hints;
>     }
>
> even if "crs" is null. Workflow example:
>
>   * A user ask for a GeometryFactory with the following hints:
>     userHints.put(Hints.COORDINATE_REFERENCE_SYSTEM, WGS_84);
>
>   * FactoryRegistry scans for GeometryFactory in priority order. If
>     it find a GeometryFactory of appropriate class (if a particular
>     class was requested), it call its getImplementationHints() method.
>     Then there is a choice:
>
>     - If the getImplementationHints() do *not* contains a
>       Hints.COORDINATE_REFERENCE_SYSTEM key (no matter if the associated
>       value is null or not), then FactoryRegistry said "this factory 
> don't
>       care about the CRS. It is suitable for the user needs, since the 
> user
>       COORDINATE_REFERENCE_SYSTEM hint will not make any difference 
> for this
>       factory". No GeometryFactory(Hints) constructor is invoked since 
> the
>       existing factory is considered suitable and returned (as a cached
>       factory).
>
>     - If the getImplementationHints() do contains a
>       Hints.COORDINATE_REFERENCE_SYSTEM key, then the value for this key
>       is compared with the value provided in the "userHints" map. Then 
> there
>       is a choice:
>
>       * If the values are equal (and assuming that all other relevant 
> hints
>         have been checked in the same way), then the GeometryFactory is
>         considered suitable to user needs. No GeometryFactory(Hints)
>         constructor is invoked since the existing factory is considered
>         suitable and returned (as a cached factory).
>
>       * If the values are not equal, then FactoryFinder continue the 
> search
>         for an other GeometryFactory. If no suitable GeometryFactory 
> is found,
>         then an exception is thrown. If we are actually using 
> FactoryCreator
>         instead of FactoryRegistry, only then the exception is caugh 
> and a
>         new factory is created using the GeometryFactory(Hints) 
> constructor.
>         This factory is then cached. Next time that a user will ask for a
>         GeometryFactory, the new GeometryFactory just created will be one
>         more candidate in the process described above.
>
>         Martin



-- 
Graham Davis
Refractions Research Inc.
[EMAIL PROTECTED]


-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >>  http://get.splunk.com/
_______________________________________________
Geotools-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/geotools-devel

Reply via email to