Repository: olingo-odata4-js
Updated Branches:
  refs/heads/OLINGO-324 a95a8d336 -> 064542b83


[OLINGO-324] datetime conversion on some cases


Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4-js/repo
Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4-js/commit/064542b8
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4-js/tree/064542b8
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4-js/diff/064542b8

Branch: refs/heads/OLINGO-324
Commit: 064542b8312d16a5ad118419321498fbcfcf9e54
Parents: a95a8d3
Author: Sven Kobler <[email protected]>
Authored: Fri Jun 20 16:52:13 2014 +0200
Committer: Sven Kobler <[email protected]>
Committed: Fri Jun 20 16:52:13 2014 +0200

----------------------------------------------------------------------
 datajs/demo/tester.html      | 21 ++++++---
 datajs/src/lib/odata/json.js | 94 +++++++++++++++++++++++++++++++++------
 2 files changed, 97 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata4-js/blob/064542b8/datajs/demo/tester.html
----------------------------------------------------------------------
diff --git a/datajs/demo/tester.html b/datajs/demo/tester.html
index e1745d0..11cc85f 100644
--- a/datajs/demo/tester.html
+++ b/datajs/demo/tester.html
@@ -29,10 +29,13 @@
     </head>   
     <body>
         <button id="startXML">XML</button><br/>
-        <button id="btnJSON_none">JSON odata.metadata=none</button><br/>
-        <button id="btnJSON_minimal">JSON odata.metadata=minimal</button><br/>
-        <button id="btnJSON_full">JSON odata.metadata=full</button><br/>
-        <button id="btnJSON_all">JSON odata.metadata=full with extend to 
all</button><br/>
+        <button id="btnJSON_none">pure JSON odata.metadata=none</button><br/>
+        <button id="btnJSON_minimal">pure JSON 
odata.metadata=minimal</button><br/>
+        <button id="btnJSON_full">pure JSON odata.metadata=full</button><br/>
+        <button id="btnJSON_full_date_conversion">JSON odata.metadata=full 
with date conversion</button><br/>
+        <button id="btnJSON_all">JSON odata.metadata=full with adding types 
for string, bool, numbers</button><br/>
+
+        
         <button id="btnMetaData">MetaData</button><br/>
         <button id="btnJSONwithMetaData">JSON with MetaData</button><br/>
         <div id='resultsArea' data-type="json">
@@ -93,9 +96,17 @@
                     extendMetadataToLevel : 'all' ,
                     recognizeDates : true
                 };
-                var context = { };
                 OData.read(requestUri, success, errorFunc);
             });
+            $('#btnJSON_full_date_conversion').on("click", function(){
+                var requestUri = {
+                    requestUri : 
'http://localhost:4002/tests/endpoints/FoodStoreDataServiceV4.svc/Foods',
+                    headers : { Accept : 
'application/json;odata.metadata=full' },
+                    recognizeDates : true
+                };
+                OData.read(requestUri, success, errorFunc);
+            });
+
             $('#btnMetaData').on("click", function(){
                 var oHeaders = {
                     'Accept': 
'text/html,application/xhtml+xml,application/xml,application/json;odata.metadata=full',

http://git-wip-us.apache.org/repos/asf/olingo-odata4-js/blob/064542b8/datajs/src/lib/odata/json.js
----------------------------------------------------------------------
diff --git a/datajs/src/lib/odata/json.js b/datajs/src/lib/odata/json.js
index c33104d..90758e0 100644
--- a/datajs/src/lib/odata/json.js
+++ b/datajs/src/lib/odata/json.js
@@ -270,19 +270,29 @@ var jsonParser = function (handler, text, context) {
     //return jsonLightReadPayload(json, model, recognizeDates, 
inferJsonLightFeedAsObject, context.contentType.properties['odata.metadata']);
 
     if ( payloadFormat >= demandedFormat) {
+        //there is no need to add additional metadata
         if (recognizeDates) {
-            return convertPrimitivetypesGeneric(json,context); //should be fast
+            if (payloadFormat === 0) {
+                //error no typeinformation in payload, conversion of dates not 
possible
+            } else if (payloadFormat === 1) { //minimal
+                //TODO use metadata in context to determine which properties 
need to be converted
+            } else {
+                return convertPrimitivetypesOnMetadataFull(json); //should be 
fast    
+            }
         } else {
             return json;
         }
     } else {
-        if (payloadFormat === 2) { //full, no metadata in context required
+        if (payloadFormat === 2) { 
+            //demandedFormat is all
+            //metaData=full, no metadata in context required
             //insert the missing type information for strings, bool, etc.
-            //guess type for nummber as defined in the 
odata-json-format-v4.0.doc specification
+            //guess types for nummber as defined in the 
odata-json-format-v4.0.doc specification
             return extendMetadataFromPayload(json,context,recognizeDates);
         } else if (payloadFormat === 1) { //minmal
             if (utils.isArray(context.metadata)) {
-                //use context metadata to extend the payload metadata
+                //TODO use metadata in context to determine which properties 
need to be converted
+                // and extend the metadata
                 return extendMetadataFromContext(json,context,recognizeDates);
             } else {
                 //error metadata in context required
@@ -296,11 +306,51 @@ var jsonParser = function (handler, text, context) {
     
 };
 
-var convertPrimitivetypesGeneric = function(json,context) {
+var extendMetadataFromContext = function(json,context,recognizeDates) {
+    return jsonLightReadPayload(json, model, recognizeDates, 
inferJsonLightFeedAsObject, context.contentType.properties['odata.metadata']);
+};
+
+var convertPrimitivetypesGeneric = function(data) {
     
 };
 
 
+var convertPrimitivetypesOnMetadataFull = function(data) {
+    /// <summary>Converts some primitive data types in payload</summary>
+    /// <param name="data">Date which will be extendet</param>
+    /// <returns>An object representation of the OData payload.</returns>
+
+    if ( utils.isObject(data) ) {
+        for (var key in data) {
+            if (data.hasOwnProperty(key)) {
+                if (key.indexOf('@') === -1) {
+                    if (utils.isArray(data[key])) {
+                        for ( var i = 0; i < data[key].length; ++i) {
+                            convertPrimitivetypesOnMetadataFull(data[key][i]);
+                        }
+                    } else if (utils.isObject(data[key])) {
+                        if (data[key] !== null) {
+                            convertPrimitivetypesOnMetadataFull(data[key]);
+                        }
+                    } else {
+                        var type = data[key+'@odata.type'];
+                        if ( type === undefined ) {
+                            var typeFromObject = typeof data[key];
+                            //TODO check the datatype                          
   
+                        } else if ( type === '#DateTimeOffset' ) {
+                           data[key] = 
oDataUtils.parseDateTimeOffset(data[key],true);
+                        } else if ( type === '#DateTime' ) {
+                           data[key] = 
oDataUtils.parseDateTimeOffset(data[key],true);
+                        }
+                    }
+                }
+            }
+        }
+    }
+    return data;
+};
+
+
 var addType = function(data, name, value ) {
     var fullName = name+'@odata.type';
 
@@ -310,8 +360,17 @@ var addType = function(data, name, value ) {
 };
 
 var extendMetadataFromPayload = function(data,context,recognizeDates) {
-    if ( utils.isObject(data) ) {
+    /// <summary>Adds typeinformation for String, Boolean and numerical 
EDM-types. 
+    /// The type is determined from the odata-json-format-v4.0.doc 
specification
+    ///</summary>
+    /// <param name="data">Date which will be extendet</param>
+    /// <param name="context" type="Object">Object with parsing 
context.</param>
+    /// <param name="recognizeDates" type="Boolean">
+    ///     True if strings formatted as datetime values should be treated as 
datetime values. False otherwise.
+    /// </param>
+    /// <returns>An object representation of the OData payload.</returns>
 
+    if ( utils.isObject(data) ) {
         for (var key in data) {
             if (data.hasOwnProperty(key)) {
                 if (key.indexOf('@') === -1) {
@@ -324,12 +383,23 @@ var extendMetadataFromPayload = 
function(data,context,recognizeDates) {
                             extendMetadataFromPayload(data[key],context, 
recognizeDates);
                         }
                     } else {
-                        var type = typeof data[key];
-                        if ( type === 'string' ) {
+                        if (recognizeDates) {
+                            var type = data[key+'@odata.type'];
+                            if ( type === undefined ) {
+                                var typeFromObject = typeof data[key];
+                                //TODO check the datatype                      
       
+                            } else if ( type === '#DateTimeOffset' ) {
+                               data[key] = 
oDataUtils.parseDateTimeOffset(data[key],true);
+                            } else if ( type === '#DateTime' ) {
+                               data[key] = 
oDataUtils.parseDateTimeOffset(data[key],true);
+                            }
+                        }
+                        var typeFromObject = typeof data[key];
+                        if ( typeFromObject === 'string' ) {
                            addType(data,key,'#String');
-                        } else if (type ==='boolean') {
+                        } else if (typeFromObject ==='boolean') {
                             addType(data,key,'#Bool');
-                        } else if (type ==='number') {
+                        } else if (typeFromObject ==='number') {
                             if ( data[key] % 1 === 0 ) {
                                 addType(data,key,'#Integer');
                             } else {
@@ -344,9 +414,7 @@ var extendMetadataFromPayload = 
function(data,context,recognizeDates) {
     return data;
 };
 
-var extendMetadataFromContext = function(json,context,recognizeDates) {
-    return json;
-};
+
 
 
 var jsonToString = function (data) {

Reply via email to