hi all

to keep everyone in the loop just a short update on this issue:

in order to get a better feeling for the value story i continued
working on this:

- replacing the extra implementation in the query package and
  in oak-jcr/query by the API CoreValue in revision 1329612 [1].

- replacing Scalar by API CoreValue in revision 1329741 [2].
  both Scalar and ScalarImpl are still present but i
  added a TODO in order to clarify this.

as a next step i will address the last major issue in this
area: encoding non-json property types before writing to
the MicroKernel (currently in KernelRoot#encode) and the
other way round (currently in KernelNodeState#readValue).

in a first step i will move both methods to a utility since
IMO they belong together. my preference was to have the
encoding in the property value.
michael in addition suggested to handle it differently for
multi-valued properties: add the type hint as first entry
in the array. that would prevent having different types in
the array and would nicely solve the issue of empty-array
properties in JCR.

once this is completed, we should basically be able to remove the
@Ignore tags with special-type property-tests and enable
quite some tests from TCK that deal with value-conversion etc.

kind regards
angela


[1] http://svn.apache.org/viewvc?rev=1329612&view=rev
[2] http://svn.apache.org/viewvc?rev=1329741&view=rev


On 4/23/12 5:41 PM, Angela Schreiber wrote:
hi all

as discussed recently in revision rev. 1329281 [1] i added a
new implementation of ValueFactory and Value/Binary in oak-jcr that
is based on value handling exposed by oak-api.

my goal was to address both the needs from jcr (API contract)
and oak-core (ability to detect value types for validation)
without adding significant overhead in terms of value conversion
and object creation.

i didn't yet perform additional tests since i would like to get
your feedback first.

for the same reason i did neither remove CoreValue/*Factory that
is present in oak-core/query package nor the Scalar interface
present in the oak-api (and it's usages)

here some further details:

- JCR Value and ValueFactory are intended to be thin wrappers
    around the corresponding objects being exposed by the oak-api.
    they are in charge of dealing with session-wide namespace
    remapping and any other kind of conversion from JCR level
    name/path to 'internal' name/path representation.

- Since the JCR namespace/name/path handling is work in progress
    i simply added a DummyNamePathResolver class to the implementation,
    just to indicate what needs to be done there.

- note, that value conversion is mostly delegated to the implementation
    in oak-core (except for those cases that need to respect name/path
    stuff and date conversion. for boolean-conversion i have to look up
    the API contract again in order to simplify it on oak-jcr).

- in the oak-API i added CoreValue and CoreValueFactory borrowing the
    names thomas used within the query. please let me know, if you have
    a better one :)
    the methods present on those interfaces are a subset of what is
    present in JCR but still allow to perform validation in terms
    of jcr value types.

- oak-api property types: for simplicity i currently just used the JCR
    property type constants... we may want to discuss if we should
    redefine them on oak-api.

- with thomas help, i also added an initial draft for binary support.

i am looking for your comments/concerns. my next step would be to
add some more tests and replace scalar and corevalue in oak-core/query.

kind regards
angela

[1] http://svn.apache.org/viewvc?rev=1329281&view=rev

Reply via email to