Hi Matthias,

I've added some javadocs that may help to enlighten devs about how to do
some of the URI schema features you were asking about. As a potential user,
if you could take a look and let me know whether it's clear enough, I'd be
very grateful. I always find hard to know how much information to put in a
javadoc...

Thanks

Mehdi

On 26 July 2012 08:48, mehdi houshmand <med1...@gmail.com> wrote:

> That was supposed to say "<RESOLVER FOR GIVEN SCHEMA".
>
>
> On 26 July 2012 08:46, mehdi houshmand <med1...@gmail.com> wrote:
>
>> Hi Matthias,
>>
>> Don't be so quick to thank us for this work, you may retract that once
>> you start using it ;).
>>
>> 1. Good question. The way it works is that you give the FopFactory
>> (either in a constructor or via the EnvironmentProfile) a base-URI, this
>> will become the default base URI should a "<font-base>" not be given.
>>
>> 2. Yes, you can use a relative URI and it resolves against the default
>> base URI described in 1). What I've tried to do is make all URIs resolve to
>> against single base URI that is given in the constructor of the FopFactory.
>> Interestingly though, I just noticed something we didn't consider. What if
>> the URI given to the FopFactory isn't an absolute URI? We don't check at
>> any point to ensure it is absolute... I think it would resolve against "new
>> URI(".")" where-ever that may be. Maybe we want throw an
>> IllegalArgumentException? I don't know.
>>
>> 3. There is some documentation as to how to do this, though I think we
>> could have probably done better in publishing more detailed explanation as
>> to what we've done here. So we have created a mechanism for handling URI
>> schemes, since it's an integral part of the URI spec, and it's almost the
>> raison d'etre. Look at the o.a.f.apps.io.ResourceResolverFactory and its
>> unit test (o.a.f.apps.io.ResourceResolverFactoryTestCase) the static inner
>> class "TestCreateSchemaAwareResourceResolverBuilderHelper" (say that
>> quickly 20 times) does what you're looking for.
>>
>> Essentially do the following:
>> ResourceResolverFactory.SchemaAwareResourceResolverBuilder builder =
>> ResourceResolverFactory.createSchemaAwareResourceResolverBuilder(<DEFAULT
>> RESOLVER>);
>> builder.registerResourceResolverForSchema(<SCHEMA>, <RESOLVER GIVEN
>> SCEHMA>);
>> ... // you can add any number of schemas with their corresponding
>> resolvers
>> ResourceResolver resolver = builder.build();
>> // resolver is then used as the resolver given to either the
>> FopFactoryBuilder or FopConfParser, either directly or via the
>> EnvironmentProfile.
>>
>> I'd play around with this mechanism, it can be very powerful once you
>> play around with URIs. You can define the the font-base as "font://" and
>> use "font" as the schema and thus have much finer control as to where the
>> fonts are. This brings the full power of the URI spec to all resource
>> acquisition. All you have to do is implement the ResourceResolver interface.
>>
>> Also, an FYI for you and anyone else that uses FOP in systems that
>> require fine-grained control over I/O and file access; you can now control
>> where FOP writes/reads from temporary files (scratch files used to save on
>> memory.) By implementing the o.a.f.apps.io.TempResourceResolver, you can
>> mitigate any security risks from leaking information or any worries one may
>> have. (Though realistically, the way FOP uses scratch files, that's not
>> very likely, but it's always better safe than sorry.)
>>
>> I hope all that makes sense, if not, please feel free to ask me to
>> clarify.
>>
>> Mehdi
>>
>> On 25 July 2012 21:25, Matthias Reischenbacher <matthias8...@gmx.at>wrote:
>>
>>> Hi Mehdi,
>>>
>>> thanks for your explanation. Some questions:
>>>
>>> 1. What's the default font base directory? The same as the normal base
>>> directory?
>>>
>>> 2. Can I use a path relative to the normal base directory for the font
>>> base directory?
>>>
>>> 3. Back to URI resolving: I'm a bit afraid of breaking something if I
>>> implement my own URI resolver. What does the default resolver do? It would
>>> be nice if the default resolver would be part of the public API so that I
>>> can sub class it and just inject the authentication params (like before).
>>>
>>> Btw... it's really nice that all data is loaded now through the new URI
>>> resolver. In the near future I'd like to use a custom scheme (e.g.
>>> myscheme://imageid) in order to load images instead of using HTTP. That
>>> wouldn't be possible without your change. So thanks!
>>>
>>> Best regards,
>>> Matthias
>>>
>>>
>>> On 24.07.2012 04:23, mehdi houshmand wrote:
>>>
>>>> Sorry Matthias, I'm an idiot. Not defining a font-base wasn't an over
>>>> sight at all; I was just implementing a font-base injection mechanism
>>>> and I remembered why we didn't allow this programmatically. You have to
>>>> define the font-base using the "<font-base>" element in the fop-conf,
>>>> that's the only way to do it and it's intentional.
>>>>
>>>> I'll take this opportunity to explain why we've done what we've done for
>>>> the sake of the community, if you're not interested feel free to ignore
>>>> the next section:
>>>> Some of the problems we were seeing when dealing with a lot of these
>>>> configuration classes was that people were adding new parameters and
>>>> functionality to them incrementally, as is the case with open-source.
>>>> The problem was that there were several ways of doing the same thing and
>>>> getters/setters all over the place. So what we did was try and ask "what
>>>> would a user want to do? And how do we make that as easy as possible
>>>> while still maintaining some encapsulation and immutability in these
>>>> classes?"
>>>>
>>>> How does relate to the font-base? Well, it seems like an abuse of
>>>> encapsulation to allow users to set the font-base-URI directly onto the
>>>> FontManager. Users shouldn't need to care about these internal
>>>> mechanisms, they should be able to just configure it and it works. So we
>>>> decided to enforce a single parameter to set the font-base
>>>> ("<font-base>" in the fop-conf) because th only reason someone would
>>>> want to define a font-base-URI would be if they had custom fonts setup,
>>>> and in order to do so they'd need a fop-conf anyways. So we might as
>>>> well enforce a single point of entry for the font-base-URI, otherwise
>>>> you'll have to do "if (x != null)" checks all over the place and how
>>>> would you decide which parameter overrides which? Why should a
>>>> programmatically set font-base override the one found in the font-base?
>>>> How do we document this so that users it's abundantly obvious to users?
>>>> We asked ourselves "is there a use case for setting this
>>>> programmatically rather than through the fop-conf?" We couldn't see why
>>>> anyone would want to do that.
>>>>
>>>> We have tried to reduce the number of entry points for injecting
>>>> configuration parameters, for two reasons; 1) because it wasn't
>>>> documented and certainly wasn't obvious which parameters overrode which,
>>>> when two of the same config parameters were used; 2) for the sake of
>>>> developers, so that once the FopFactory hand been created, its state is
>>>> mostly immutable (it has mutable members) and we can make certain
>>>> assertions on the immutability of the members.
>>>>
>>>> Hope that makes our intentions clear,
>>>>
>>>> Mehdi
>>>>
>>>> On 24 July 2012 07:35, mehdi houshmand <med1...@gmail.com
>>>> <mailto:med1...@gmail.com>> wrote:
>>>>
>>>>     Hi Matthias,
>>>>
>>>>     The way we've implemented the interface, you can be completely in
>>>>     control of how HTTP is authenticated by implementing
>>>>     o.a.f.apps.io.**ResourceResolver[1] and giving it to the
>>>>     FopFactoryBuilder/**FopConfParser[2].
>>>>
>>>>     As for the base URI for fonts, you can set this in the fop-conf, we
>>>>     haven't created a way to set this programmatically, that was an
>>>>     oversight on our end. I'll enable a way to do this and get back to
>>>> you.
>>>>
>>>>     [1] 
>>>> http://wiki.apache.org/**xmlgraphics-fop/URIResolution<http://wiki.apache.org/xmlgraphics-fop/URIResolution>
>>>>     [2] http://wiki.apache.org/**xmlgraphics-fop/**
>>>> FopFactoryConfiguration<http://wiki.apache.org/xmlgraphics-fop/FopFactoryConfiguration>
>>>>
>>>>     Hope that helps,
>>>>
>>>>     Mehdi
>>>>
>>>>
>>>>     On 24 July 2012 00:01, Matthias Reischenbacher <matthias8...@gmx.at
>>>>     <mailto:matthias8...@gmx.at>> wrote:
>>>>
>>>>         Hi,
>>>>
>>>>         I just tried to upgrade to latest trunk and noticed two
>>>>         compatibility issues with my application which I couldn't fix on
>>>>         my own:
>>>>
>>>>         * The fontManager has no setBaseURL method anymore. How is the
>>>>         base URL set now?
>>>>
>>>>         * The FOURIResolver class doesn't exist anymore. Sub classing it
>>>>         for applying HTTP basic authentication parameters is therefore
>>>>         not possible.
>>>>         See also:
>>>>         http://wiki.apache.org/__**xmlgraphics-fop/HowTo/__**
>>>> BasicHttpAuthentication<http://wiki.apache.org/__xmlgraphics-fop/HowTo/__BasicHttpAuthentication>
>>>>
>>>>         <http://wiki.apache.org/**xmlgraphics-fop/HowTo/**
>>>> BasicHttpAuthentication<http://wiki.apache.org/xmlgraphics-fop/HowTo/BasicHttpAuthentication>
>>>> >
>>>>         How is HTTP authentication handled now?
>>>>
>>>>         Thanks for your help,
>>>>         Matthias
>>>>
>>>>         ------------------------------**__----------------------------*
>>>> *--__---------
>>>>         To unsubscribe, e-mail:
>>>>         
>>>> fop-users-unsubscribe@__xmlgra**phics.apache.org<http://xmlgraphics.apache.org>
>>>>         
>>>> <mailto:fop-users-unsubscribe@**xmlgraphics.apache.org<fop-users-unsubscr...@xmlgraphics.apache.org>
>>>> >
>>>>         For additional commands, e-mail:
>>>>         fop-users-help@xmlgraphics.__a**pache.org <http://apache.org>
>>>>         
>>>> <mailto:fop-users-help@**xmlgraphics.apache.org<fop-users-h...@xmlgraphics.apache.org>
>>>> >
>>>>
>>>>
>>>>
>>>>
>>>
>>> ------------------------------**------------------------------**
>>> ---------
>>> To unsubscribe, e-mail: 
>>> fop-users-unsubscribe@**xmlgraphics.apache.org<fop-users-unsubscr...@xmlgraphics.apache.org>
>>> For additional commands, e-mail: 
>>> fop-users-help@xmlgraphics.**apache.org<fop-users-h...@xmlgraphics.apache.org>
>>>
>>>
>>
>

Reply via email to