Hi,
I have opened OLINGO-214 for this, and attached a patch there: please take a look and let me know if it is fine, so that I will commit it.

FYI, I have also made some enhancements to V3 EdmDateTime - you can take a look at the version at https://paste.apache.org/hRR3

Regards.

On 22/03/2014 12:00, Francesco Chicchiriccò wrote:
Hi all,
I am almost done with OLINGO-65 and all client code is now using Olingo's EdmType hierarchy, including EdmPrimitiveType children.

I am currently experiencing some troubles because EdmTimeOfDay / EdmDateTimeOffset are not working as I would expect.

In the OData 4.0 ABNF grammar you can find that

dateTimeOffsetValue = year "-" month "-" day "T" hour ":" minute [ ":" second [ "." fractionalSeconds ] ] ( "Z" / sign hour ":" minute )
timeOfDayValue = hour ":" minute [ ":" second [ "." fractionalSeconds ] ]
fractionalSeconds = 1*12DIGIT

This barely refers to EdmTimeOfDay / EdmDateTimeOffset literals and states that you can have up to 12 fractional seconds digits, right? But EdmTimeOfDay [2] and EdmDateTimeOffset [3] are only able to deal with 3 fractional seconds digit - mostly because both internally use Calendar as concrete implementation, and its precision arrives to milliseconds at most.

As part of OLINGO-65 I have developed EdmDateTime for V3 (which you can find at [4] since I haven't pushed yet); as you can see, it works differently: instead of relying upon regexp, it uses SimpleDateFormat and supports both Calendar and java.sql.Timestamp - which allows up to nanoseconds.

What do you think? Shall I try to extends [2] and [3] to make them able to work with up to 12 fractional second digits, as EdmDateTime is doing? Even leaving the regexp mechanism there, in fact, I would need to use java.sql.Timestamp as internal representation.

Moreover, [5] states, about "Precision" facet, that

For a temporal property the value of this attribute specifies the number of decimal places allowed in the seconds portion of the property's value; it MUST be a non-negative integer between zero and twelve. If no value is specified, the temporal property has a precision of zero.

However, [3] do take the precision parameter into account (while [2] does).

Shall we fix this as well?

Regards.

[1] http://docs.oasis-open.org/odata/odata/v4.0/os/abnf/odata-abnf-construction-rules.txt [2] https://git-wip-us.apache.org/repos/asf?p=incubator-olingo-odata4.git;a=blob;f=lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/primitivetype/EdmTimeOfDay.java; [3] https://git-wip-us.apache.org/repos/asf?p=incubator-olingo-odata4.git;a=blob;f=lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/primitivetype/EdmDateTimeOffset.java;
[4] https://paste.apache.org/jilL
[5] http://docs.oasis-open.org/odata/odata/v4.0/os/part3-csdl/odata-v4.0-os-part3-csdl.html#_Attribute_Precision_1

--
Francesco Chicchiriccò

Tirasa - Open Source Excellence
http://www.tirasa.net/

Involved at The Apache Software Foundation:
member, Syncope PMC chair, Cocoon PMC, Olingo PMC
http://people.apache.org/~ilgrosso/

Reply via email to