You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tika.apache.org by Nick Burch <ni...@alfresco.com> on 2012/02/08 19:06:58 UTC
Re: Sharing metadata logic between parsers
On Mon, 30 Jan 2012, Jukka Zitting wrote:
>> If we're doing that sort of thing, then I'd rather we put the logic
>> onto the Property for that. The Property already has a type and the
>> closed list of allowed values (as Strings, from the XMPDM
>> specification). It would seem to me that the logic for going to/from
>> channel numbers would best live with the strings themselves, on the
>> property, rather than outside?
>
> I'm thinking of cases where such a convenience methods could rely on
> more than just a single property. For example, a getNumberOfPages()
> convenience method could look something like this (with an extra
> getInt(String) helper method):
>
> int getNumberOfPages() {
> Integer pages = metadata.getInt(PagedText.N_PAGES);
> if (pages == null) {
> pages = metadata.getInt(MSOffice.PAGE_COUNT);
> }
I decided, after thinking on this a bit, that the best bet was to try to
implement the solution and see how it actually worked
I've however just found a snag with Jukka's proposed solution above. I
wanted to put the logic on XMPDM, as static methods, because I thought
that the logic should really live with the property definition.
Unfortunately, this doesn't work, as XMPDM is an interface so Java won't
let you add random static methods. I tried putting the static method on
Metadata itself, but I really didn't like the look of it
Property itself is final, as we don't want people to go around adding
extra types in that the specifications don't support, so I can't simply
add a converter method onto that.
In r1242018 I've committed a couple of different possible ways to do the
conversion, which do work, so people can have a look and a think. I could
see the static class being attached optionally to the Property, for either
explicit calling, or implicit as Ray described.
Based on how it looks now I've actually coded something, I'm leaning
towards implicit conversion in metadata.set(Property, thing) calling
methods on an optional attached converter on the property. (I guess Ray
would be in favour of this, as it's quite like his idea!).
Thoughts? Should I go ahead and try to implement my plan, so we can see if
we like how it looks in real code and if there are any problems with doing
it? Can anyone think of a cleaner way to do it? Can anyone think of a way
to do what Jukka suggested, but without having to clutter up the main
concrete class?
Cheers
Nick