You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by ko...@apache.org on 2014/08/04 15:24:46 UTC

git commit: [OLINGO-324] add date/time convertion

Repository: olingo-odata4-js
Updated Branches:
  refs/heads/master 88c0592e6 -> 46937a7af


[OLINGO-324] add date/time convertion


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/46937a7a
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4-js/tree/46937a7a
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4-js/diff/46937a7a

Branch: refs/heads/master
Commit: 46937a7afccff1c67f9233fe530039ff33296905
Parents: 88c0592
Author: Sven Kobler <sv...@sap.com>
Authored: Mon Aug 4 15:24:26 2014 +0200
Committer: Sven Kobler <sv...@sap.com>
Committed: Mon Aug 4 15:24:26 2014 +0200

----------------------------------------------------------------------
 datajs/demo/tester.html       | 393 +++++++++----------------------------
 datajs/src/lib/odata/json.js  |  88 +++++++--
 datajs/src/lib/odata/utils.js |  39 +++-
 3 files changed, 203 insertions(+), 317 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata4-js/blob/46937a7a/datajs/demo/tester.html
----------------------------------------------------------------------
diff --git a/datajs/demo/tester.html b/datajs/demo/tester.html
index 55a0ac0..041f7cd 100644
--- a/datajs/demo/tester.html
+++ b/datajs/demo/tester.html
@@ -25,50 +25,109 @@
             .code .text{color:#000000;}
             .code .cdata{color:#008080;}
             .code .comment,.code .ns{color:#666666;}
+
+            .left {
+                left : 20px;
+                position:relative;
+            }
+
         </style>
     </head>   
     <body>
-        <button id="startXML">XML</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_minimal_to_full">pure JSON odata.metadata=minimal; extendMetadataToLevel=full</button><br/>
-        <button id="btnJSON_minimal_to_all">pure JSON odata.metadata=minimal; extendMetadataToLevel=all</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_full_to_all">JSON odata.metadata=full; extendMetadataToLevel=all (with adding types for string, bool, numbers)</button><br/>
-        <button id="btnJSON_full_to_all_date_conversion">JSON odata.metadata=full; extendMetadataToLevel=all (with adding types for string, bool, numbers) (with date conversion)</button><br/>
-        <button id="btnJSON_entry_minimal">Entry pure JSON odata.metadata=minimal</button><br/>
-        <button id="btnJSON_entry_minimal_to_full">Entry pure JSON odata.metadata=minimal; extendMetadataToLevel=full</button><br/>
-        <button id="btnJSON_entry_minimal_to_all">Entry pure JSON odata.metadata=minimal; extendMetadataToLevel=all</button><br/>
-
-        <button id="btnMetaData">MetaData</button><br/>
-        <button id="btnJSONwithMetaData">JSON with MetaData</button><br/>
-        <button id="btnPOST_entry_food">POST food entry</button><br/>
-        <button id="btnPOST_entry_categorie">POST categorie entry</button><br/>
-
-        <button id="btnGET_collection_full_simple">GET collection odata.metadata=full</button><br/>
-        <button id="btnGET_collection_minimal_simple">GET collection odata.metadata=minimal</button><br/>
-        <button id="btnGET_collection_full_complex">GET complex collection odata.metadata=full</button><br/>
-        <button id="btnGET_collection_minimal_complex">GET complex collection odata.metadata=minimal</button><br/>
-        <button id="btnGET_property_full_name">GET property odata.metadata=full</button><br/>
-        <button id="btnGET_property_minimal_name">GET property odata.metadata=minimal</button><br/>
-        <button id="btnGET_property_full_complex">GET complex  property odata.metadata=full</button><br/>
-        <button id="btnGET_property_minimal_complex">GET complex property odata.metadata=minimal</button><br/>
+        <table><tr><td valign="top" width="150px">
+            Metadata<br>
+            <input type="radio" id="inMetadata1" name="inMetadata" value="none"/>                       
+            <label for="inMetadata1">none</label><br>
+
+            <input type="radio" id="inMetadata2" name="inMetadata" value="minimal" checked="checked"/>  
+            <label for="inMetadata2">minimal<br>
+            <div class="left">                                   
+                <input type="checkbox" id="inMinimalToFull">                                   
+                <label for="inMinimalToFull" id="lblInMinimalToFull">minimal to full</label><br>
+            </div>
+
+            <input type="radio" id="inMetadata3" name="inMetadata" value="full"><label for="inMetadata3">full</label>
+            <br>
+            Recognize Dates<br>
+            <input type="checkbox" id="inRecognizeDates"><label for="check1">yes/no</label><br>
+
+        </td><td>
+            <div id="buttons"></div>
+        </td><td>
+            <button id="btnMetaData">MetaData</button><br/>
+            <button id="btnPOST_entry_food">POST food entry</button><br/>
+            <button id="btnPOST_entry_categorie">POST categorie entry</button><br/>
+        </td></tr></table>
         <div id='resultsArea' data-type="json">
         </div>
         <script>
-            //var x = eval("(function (w, undefined) {alert('A '+JSON.stringify(w.screen));})(this);");
-            //(function () {
-            //    var x = eval("(function (w, undefined) {alert('B '+JSON.stringify(w.screen));})(this);");
-            //})();
-            
+            // Config
+            var config = [
+                { name: 'Feed', url: 'http://localhost:4002/tests/endpoints/FoodStoreDataServiceV4.svc/Foods'},
+                { name: 'Entry', url: 'http://localhost:4002/tests/endpoints/FoodStoreDataServiceV4.svc/Foods(0)'},
+                { name: 'Collection of Complex', url: 'http://localhost:4002/tests/endpoints/FoodStoreDataServiceV4.svc/Foods(0)/Providers'},
+                { name: 'Collection of Simple', url: 'http://localhost:4002/tests/endpoints/FoodStoreDataServiceV4.svc/Foods(0)/AlternativeNames'},
+                { name: 'Complex property', url: 'http://localhost:4002/tests/endpoints/FoodStoreDataServiceV4.svc/Foods(0)/Packaging'},
+                { name: 'Simple property', url: 'http://localhost:4002/tests/endpoints/FoodStoreDataServiceV4.svc/Foods(0)/Name'},
+            ];
+
+            // UI Stuff
+            var createButtonClickHandler = function(nr) {
+                return function() { buttonClick(nr);};
+            };
+
+            var buttonRoot = $('#buttons');
+            $("input[name*='inMetadata'").click( function() {
+                var metadata = $("input[name*='inMetadata']:checked").val();
+                if (metadata === "minimal") {
+                    $("#lblInMinimalToFull").css('color', '#000000');
+                    $("#inMinimalToFull").removeAttr('disabled');
+                } else {
+                    $("#lblInMinimalToFull").css('color', '#999999');
+                    $("#inMinimalToFull").attr('disabled','disabled');
+                }
+            });
+
+            for (var i = 0; i < config.length; i++) {
+                var button = $('<button id="btnArray">'+config[i].name+'</button><br/>"');
+                button.click( createButtonClickHandler(i));
+                buttonRoot.append(button);
+            }
+
+            // Testing 
+            function buttonClick(configNr) {
+                var metadata = $("input[name*='inMetadata']:checked").val();
+                var recognizeDates = $("#inRecognizeDates:checked").val();
+
+                var requestUri = {
+                    requestUri : config[configNr].url
+                };
+
+                if (recognizeDates==='on') {
+                    requestUri.recognizeDates = true;
+                }
+
+                var metaDatasuccess = function(metadata){
+                    datajs.V4.oData.read(requestUri, success, errorFunc, null, null, metadata);
+                };
+
+                if ( metadata === 'full') {
+                    requestUri.headers =  { Accept : 'application/json;odata.metadata=full' };
+                    datajs.V4.oData.read(requestUri, success, errorFunc);
+                } else if ( metadata === 'minimal') {
+                    requestUri.headers =  { Accept : 'application/json;odata.metadata=minimal' };
+                    getMetaData(metaDatasuccess);
+                } else {
+                    requestUri.headers =  { Accept : 'application/json;odata.metadata=none' };
+                    datajs.V4.oData.read(requestUri, success, errorFunc);
+                }
+            }
 
             function show(data) {
                 $('#resultsArea').empty();
-                var code = $('<code data-type="json"></code>').text(JSON.stringify(data))
+                var code = $('<code data-type="json"></code>').text(JSON.stringify(data));
                 $('#resultsArea').append(code);
                 $('code[data-type]').prettify();
-                //$('#resultsArea').prettify();
             }
             function success(data) {
                 show(data);
@@ -94,191 +153,9 @@
                     data: null,
                 };
                 datajs.V4.oData.read(metadataRequest, metaDatasuccess, errorFunc,datajs.V4.oData.metadataHandler);
-            };
-
-            $('#startXML').on("click", function(){
-                //var requestUri = 'http://localhost:4002/tests/endpoints/FoodStoreDataServiceV4.svc/Foods';
-                var requestUri ='http://localhost:4003/sap/bc/ds/odata/v4/ESMixPrimCollComp?$format=xml';
-                datajs.V4.oData.read(requestUri, success, errorFunc);
-            });
-            $('#btnJSON_none').on("click", function(){
-                var requestUri = {
-                    requestUri : 'http://localhost:4002/tests/endpoints/FoodStoreDataServiceV4.svc/Foods',
-                    headers : { Accept : 'application/json;odata.metadata=none' }
-                };
-                datajs.V4.oData.read(requestUri, success, errorFunc);
-            });
-            $('#btnJSON_minimal').on("click", function(){
-                var requestUri = {
-                    requestUri : 'http://localhost:4002/tests/endpoints/FoodStoreDataServiceV4.svc/Foods',
-                    headers : { Accept : 'application/json;odata.metadata=minimal' }
-                };
-                datajs.V4.oData.read(requestUri, success, errorFunc);
-            });
-
-            $('#btnJSON_entry_minimal').on("click", function(){
-                var requestUri = {
-                    requestUri : 'http://localhost:4002/tests/endpoints/FoodStoreDataServiceV4.svc/Foods(0)',
-                    headers : { Accept : 'application/json;odata.metadata=minimal' }
-                };
-                datajs.V4.oData.read(requestUri, success, errorFunc);
-            });
-
-            $('#btnJSON_full').on("click", function(){
-                var requestUri = {
-                    requestUri : 'http://localhost:4002/tests/endpoints/FoodStoreDataServiceV4.svc/Foods',
-                    headers : { Accept : 'application/json;odata.metadata=full' }
-                };
-                datajs.V4.oData.read(requestUri, success, errorFunc);
-            });
-            $('#btnPOST_entry_food').on("click", function(){
-                var requestUri = {
-                    requestUri : 'http://localhost:4002/tests/endpoints/FoodStoreDataServiceV4.svc/Foods(0)/Providers',
-                    headers : { Accept : 'application/json;odata.metadata=full' }
-                };
-                datajs.V4.oData.read(requestUri, success, errorFunc);
-            });
-            $('#btnJSON_full_to_all').on("click", function(){
-                var requestUri = {
-                    requestUri : 'http://localhost:4002/tests/endpoints/FoodStoreDataServiceV4.svc/Foods',
-                    headers : { Accept : 'application/json;odata.metadata=full' },
-                    extendMetadataToLevel : 'all' ,
-                    recognizeDates : false
-                };
-                datajs.V4.oData.read(requestUri, success, errorFunc);
-            });
-
-            $('#btnGET_collection_full_simple').on("click", function(){
-                var metaDatasuccess = function(metadata){
-                    var requestUri = {
-                        requestUri : 'http://localhost:4002/tests/endpoints/FoodStoreDataServiceV4.svc/Foods(0)/AlternativeNames',
-                        headers : { Accept : 'application/json;odata.metadata=full' },
-                        recognizeDates : false
-                    };
-
-                    datajs.V4.oData.read(requestUri, success, errorFunc, null, null, metadata);
-                  
-                }
-                getMetaData(metaDatasuccess);
-            });
-
-            $('#btnGET_collection_full_complex').on("click", function(){
-                var metaDatasuccess = function(metadata){
-                    var requestUri = {
-                        requestUri : 'http://localhost:4002/tests/endpoints/FoodStoreDataServiceV4.svc/Foods(0)/Providers',
-                        headers : { Accept : 'application/json;odata.metadata=full' },
-                        recognizeDates : false
-                    };
-
-                    datajs.V4.oData.read(requestUri, success, errorFunc, null, null, metadata);
-                  
-                }
-                getMetaData(metaDatasuccess);
-            });
-
-            $('#btnGET_property_full_name').on("click", function(){
-                var metaDatasuccess = function(metadata){
-                    var requestUri = {
-                        requestUri : 'http://localhost:4002/tests/endpoints/FoodStoreDataServiceV4.svc/Foods(0)/Name',
-                        headers : { Accept : 'application/json;odata.metadata=full' },
-                        recognizeDates : false
-                    };
-
-                    datajs.V4.oData.read(requestUri, success, errorFunc, null, null, metadata);
-                  
-                }
-                getMetaData(metaDatasuccess);
-            });
-
-            $('#btnGET_property_full_complex').on("click", function(){
-                var metaDatasuccess = function(metadata){
-                    var requestUri = {
-                        requestUri : 'http://localhost:4002/tests/endpoints/FoodStoreDataServiceV4.svc/Foods(0)/Packaging',
-                        headers : { Accept : 'application/json;odata.metadata=full' },
-                        recognizeDates : false
-                    };
-
-                    datajs.V4.oData.read(requestUri, success, errorFunc, null, null, metadata);
-                  
-                }
-                getMetaData(metaDatasuccess);
-            });
-
-            $('#btnGET_property_minimal_name').on("click", function(){
-                var metaDatasuccess = function(metadata){
-                    var requestUri = {
-                        requestUri : 'http://localhost:4002/tests/endpoints/FoodStoreDataServiceV4.svc/Foods(0)/Name',
-                        headers : { Accept : 'application/json;odata.metadata=minimal' },
-                        recognizeDates : false
-                    };
-
-                    datajs.V4.oData.read(requestUri, success, errorFunc, null, null, metadata);
-                  
-                }
-                getMetaData(metaDatasuccess);
-            });
-
-            $('#btnGET_property_minimal_complex').on("click", function(){
-                var metaDatasuccess = function(metadata){
-                    var requestUri = {
-                        requestUri : 'http://localhost:4002/tests/endpoints/FoodStoreDataServiceV4.svc/Foods(0)/Packaging',
-                        headers : { Accept : 'application/json;odata.metadata=minimal' },
-                        recognizeDates : false
-                    };
-
-                    datajs.V4.oData.read(requestUri, success, errorFunc, null, null, metadata);
-                  
-                }
-                getMetaData(metaDatasuccess);
-            });
-
-
-
-            $('#btnGET_collection_minimal_simple').on("click", function(){
-                var metaDatasuccess = function(metadata){
-                    var requestUri = {
-                        requestUri : 'http://localhost:4002/tests/endpoints/FoodStoreDataServiceV4.svc/Foods(0)/AlternativeNames',
-                        headers : { Accept : 'application/json;odata.metadata=minimal' },
-                        recognizeDates : false
-                    };
-
-                    datajs.V4.oData.read(requestUri, success, errorFunc, null, null, metadata);
-                  
-                }
-                getMetaData(metaDatasuccess);
-            });
-
-            $('#btnGET_collection_minimal_complex').on("click", function(){
-                var metaDatasuccess = function(metadata){
-                    var requestUri = {
-                        requestUri : 'http://localhost:4002/tests/endpoints/FoodStoreDataServiceV4.svc/Foods(0)/Providers',
-                        headers : { Accept : 'application/json;odata.metadata=minimal' },
-                        recognizeDates : false
-                    };
+            }
 
-                    datajs.V4.oData.read(requestUri, success, errorFunc, null, null, metadata);
-                  
-                }
-                getMetaData(metaDatasuccess);
-            });
-
-            $('#btnJSON_full_to_all_date_conversion').on("click", function(){
-                var requestUri = {
-                    requestUri : 'http://localhost:4002/tests/endpoints/FoodStoreDataServiceV4.svc/Foods',
-                    headers : { Accept : 'application/json;odata.metadata=full' },
-                    extendMetadataToLevel : 'all' ,
-                    recognizeDates : true
-                };
-                datajs.V4.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
-                };
-                datajs.V4.oData.read(requestUri, success, errorFunc);
-            });
+            /*******Special buttons***********/           
 
             $('#btnMetaData').on("click", function(){
                 var oHeaders = {
@@ -298,86 +175,6 @@
                 datajs.V4.oData.read(metadataRequest, success, errorFunc,datajs.V4.oData.metadataHandler);
             });
 
-
-
-            $('#btnJSON_minimal_to_all').on("click", function(){
-                var metaDatasuccess = function(metadata){
-                    var requestUri = {
-                        requestUri : 'http://localhost:4002/tests/endpoints/FoodStoreDataServiceV4.svc/Foods',
-                        headers : { Accept : 'application/json;odata.metadata=minimal' },
-                        recognizeDates : false
-                    };
-                    //extend to full
-                    datajs.V4.oData.read(requestUri, success, errorFunc, null, null, metadata);
-                    //keep minimal
-                    datajs.V4.oData.read(requestUri, success, errorFunc, null, null, metadata);
-                }
-                getMetaData(metaDatasuccess);
-            });
-
-            $('#btnJSON_minimal_to_full').on("click", function(){
-                var metaDatasuccess = function(metadata){
-                    var requestUri = {
-                        requestUri : 'http://localhost:4002/tests/endpoints/FoodStoreDataServiceV4.svc/Foods',
-                        headers : { Accept : 'application/json;odata.metadata=minimal' },
-                        extendMetadataToLevel : 'full' ,
-                        recognizeDates : false
-                    };
-                    datajs.V4.oData.read(requestUri, success, errorFunc, null, null, metadata);
-                }
-                getMetaData(metaDatasuccess);
-            });
-
-            $('#btnJSON_entry_minimal_to_all').on("click", function(){
-                var metaDatasuccess = function(metadata){
-                    var requestUri = {
-                        requestUri : 'http://localhost:4002/tests/endpoints/FoodStoreDataServiceV4.svc/Foods(0)',
-                        headers : { Accept : 'application/json;odata.metadata=minimal' },
-                        extendMetadataToLevel : 'all' ,
-                        recognizeDates : false
-                    };
-                    datajs.V4.oData.read(requestUri, success, errorFunc, null, null, metadata);
-                }
-                getMetaData(metaDatasuccess);
-            });
-
-            $('#btnJSON_entry_minimal_to_full').on("click", function(){
-                var metaDatasuccess = function(metadata){
-                    var requestUri = {
-                        requestUri : 'http://localhost:4002/tests/endpoints/FoodStoreDataServiceV4.svc/Foods(0)',
-                        headers : { Accept : 'application/json;odata.metadata=minimal' },
-                        extendMetadataToLevel : 'full' ,
-                        recognizeDates : false
-                    };
-                    datajs.V4.oData.read(requestUri, success, errorFunc, null, null, metadata);
-                }
-                getMetaData(metaDatasuccess);
-            });
-
-            $('#btnJSONwithMetaData').on("click", function(){
-                var oHeaders = {
-                    'Accept': 'text/html,application/xhtml+xml,application/xml,application/json;odata.metadata=full',
-                    "Odata-Version": "4.0",
-                    "OData-MaxVersion": "4.0",
-                    "Prefer": "odata.allow-entityreferences"
-                };
-                var metadataRequest =
-                {
-                    headers: oHeaders,
-                    //requestUri: "http://services.odata.org/OData/OData.svc/$metadata",
-                    requestUri: "http://localhost:4002/tests/endpoints/FoodStoreDataServiceV4.svc/$metadata", //"http://localhost:6630/PrimitiveKeys.svc/$metadata",
-                    data: null,
-                };
-
-                var metaDatasuccess = function(metadata){
-                    var requestUri = 'http://localhost:4002/tests/endpoints/FoodStoreDataServiceV4.svc/Foods';
-                    datajs.V4.oData.read(requestUri, success, errorFunc, null, null, metadata);
-                }
-
-
-                datajs.V4.oData.read(metadataRequest, metaDatasuccess, errorFunc,datajs.V4.oData.metadataHandler);
-            });
-
             $('#btnPOST_entry_food').on("click", function(){
                 var requestUri = {
                     requestUri : 'http://localhost:4002/tests/endpoints/FoodStoreDataServiceV4.svc/Foods',
@@ -410,6 +207,8 @@
                 datajs.V4.oData.read(requestUri, success, errorFunc);
             });
 
+
+
         </script>
     </body>
 </html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/olingo-odata4-js/blob/46937a7a/datajs/src/lib/odata/json.js
----------------------------------------------------------------------
diff --git a/datajs/src/lib/odata/json.js b/datajs/src/lib/odata/json.js
index edb0b0b..aff4d76 100644
--- a/datajs/src/lib/odata/json.js
+++ b/datajs/src/lib/odata/json.js
@@ -50,7 +50,7 @@ var lookupDefaultEntityContainer = oDataUtils.lookupDefaultEntityContainer;
 var lookupProperty = oDataUtils.lookupProperty;
 var MAX_DATA_SERVICE_VERSION = oDataUtils.MAX_DATA_SERVICE_VERSION;
 var maxVersion = oDataUtils.maxVersion;
-var parseDateTime = oDataUtils.parseDateTime;
+var XXXparseDateTime = oDataUtils.XXXparseDateTime;
 
 var isPrimitiveEdmType = oDataUtils.isPrimitiveEdmType;
 var isGeographyEdmType = oDataUtils.isGeographyEdmType;
@@ -190,6 +190,32 @@ var addType = function(data, name, value ) {
     }
 };
 
+var addTypeNoEdm = function(data, name, value ) {
+    var fullName = name + '@odata.type';
+
+    if ( data[fullName] === undefined) {
+        if ( value.substring(0,4)==='Edm.') {
+            data[fullName] = value.substring(4);
+        } else {
+            data[fullName] = value;
+        }
+
+    }
+};
+
+var addTypeColNoEdm = function(data, name, value ) {
+    var fullName = name + '@odata.type';
+
+    if ( data[fullName] === undefined) {
+        if ( value.substring(0,4)==='Edm.') {
+            data[fullName] = 'Collection('+value.substring(4)+ ')';
+        } else {
+            data[fullName] = 'Collection('+value+ ')';
+        }
+    }
+};
+
+
 var readPayloadFull = function (data, model, recognizeDates) {
     /// <summary>Adds typeinformation for String, Boolean and numerical EDM-types. 
     /// The type is determined from the odata-json-format-v4.0.doc specification
@@ -236,14 +262,8 @@ var readPayloadFull = function (data, model, recognizeDates) {
                         }
                         else {
                             if (recognizeDates) {
-                                if (type === '#DateTimeOffset') {
-                                    data[key] = oDataUtils.parseDateTimeOffset(data[key], true);
-                                } else if (type === '#DateTime') {
-                                    data[key] = oDataUtils.parseDateTimeOffset(data[key], true);
-                                }
+                                convertDatesNoEdm(data, key, type.substring(1));
                             }
-
-                            // TODO handle more types here 
                         }
                     }
                 }
@@ -616,13 +636,15 @@ var readPayloadMinimalProperty = function (data, model, collectionInfo, baseURI,
     if (collectionInfo.type !== null) {
         readPayloadMinimalObject(data, collectionInfo, baseURI, model, recognizeDates);
     } else {
-        data['value@odata.type'] = '#'+collectionInfo.typeName;
+        addTypeNoEdm(data,'value', collectionInfo.typeName);
+        //data['value@odata.type'] = '#'+collectionInfo.typeName;
     }
     return data;
 };
 
 var readPayloadMinimalCollection = function (data, model, collectionInfo, baseURI, recognizeDates) {
-    data['@odata.type'] = '#Collection('+collectionInfo.typeName + ')';
+    //data['@odata.type'] = '#Collection('+collectionInfo.typeName + ')';
+    addTypeColNoEdm(data,'', collectionInfo.typeName);
 
     if (collectionInfo.type !== null) {
         var entries = [];
@@ -730,6 +752,30 @@ var formatRowLiteral = function (value, type) {
     }
 };
 
+var convertDates = function (data, propertyName,type) {
+    if (type === 'Edm.Date') {
+        data[propertyName] = oDataUtils.parseDate(data[propertyName], true);
+    } else if (type === 'Edm.DateTimeOffset') {
+        data[propertyName] = oDataUtils.parseDateTimeOffset(data[propertyName], true);
+    } else if (type === 'Edm.Duration') {
+        data[propertyName] = oDataUtils.parseDuration(data[propertyName], true);
+    } else if (type === 'Edm.Time') {
+        data[propertyName] = oDataUtils.parseTime(data[propertyName], true);
+    }
+};
+
+var convertDatesNoEdm = function (data, propertyName,type) {
+    if (type === 'Date') {
+        data[propertyName] = oDataUtils.parseDate(data[propertyName], true);
+    } else if (type === 'DateTimeOffset') {
+        data[propertyName] = oDataUtils.parseDateTimeOffset(data[propertyName], true);
+    } else if (type === 'Duration') {
+        data[propertyName] = oDataUtils.parseDuration(data[propertyName], true);
+    } else if (type === 'Time') {
+        data[propertyName] = oDataUtils.parseTime(data[propertyName], true);
+    }
+};
+
 var checkProperties = function (data, objectInfoType, baseURI, model, recognizeDates) {
     for (var name in data) {
         if (name.indexOf("@") === -1) {
@@ -743,14 +789,25 @@ var checkProperties = function (data, objectInfoType, baseURI, model, recognizeD
             }
             
             if ( isArray(propertyValue)) {
-                data[name+'@odata.type'] = '#' + property.type;
+                //data[name+'@odata.type'] = '#' + property.type;
+                if (isCollectionType(property.type)) {
+                    addTypeColNoEdm(data,name,property.type.substring(11,property.type.length-1));
+                } else {
+                    addTypeNoEdm(data,name,property.type);
+                }
+
+
                 for ( var i = 0; i < propertyValue.length; i++) {
                     readPayloadMinimalComplexObject(propertyValue[i], property, baseURI, model, recognizeDates);
                 }
             } else if (isObject(propertyValue) && (propertyValue !== null)) {
                 readPayloadMinimalComplexObject(propertyValue, property, baseURI, model, recognizeDates);
             } else {
-                data[name+'@odata.type'] = '#' + property.type;
+                //data[name+'@odata.type'] = '#' + property.type;
+                addTypeNoEdm(data,name,property.type);
+                if (recognizeDates) {
+                    convertDates(data, name, property.type);
+                }
             }
         }
     }
@@ -762,7 +819,9 @@ var readPayloadMinimalComplexObject = function (data, property, baseURI, model,
         type =property.type.substring(11,property.type.length-1);
     }
 
-    data['@odata.type'] = '#'+type;
+    //data['@odata.type'] = '#'+type;
+    addType(data,'',property.type);
+
 
     var propertyType = lookupComplexType(type, model);
     if (propertyType === null)  {
@@ -773,7 +832,8 @@ var readPayloadMinimalComplexObject = function (data, property, baseURI, model,
 };
 
 var readPayloadMinimalObject = function (data, objectInfo, baseURI, model, recognizeDates) {
-    data['@odata.type'] = '#'+objectInfo.typeName;
+    //data['@odata.type'] = '#'+objectInfo.typeName;
+    addType(data,'',objectInfo.typeName);
 
     var keyType = objectInfo.type;
     while ((defined(keyType)) && ( keyType.key === undefined) && (keyType.baseType !== undefined)) {

http://git-wip-us.apache.org/repos/asf/olingo-odata4-js/blob/46937a7a/datajs/src/lib/odata/utils.js
----------------------------------------------------------------------
diff --git a/datajs/src/lib/odata/utils.js b/datajs/src/lib/odata/utils.js
index 868a3f9..df88e2e 100644
--- a/datajs/src/lib/odata/utils.js
+++ b/datajs/src/lib/odata/utils.js
@@ -889,12 +889,36 @@ var parseDateTimeMaybeOffset = function (value, withOffset, nullOnError) {
     return result;
 };
 
-var parseDateTime = function (propertyValue, nullOnError) {
-    /// <summary>Parses a string into a DateTime value.</summary>
+var parseDate = function (propertyValue, nullOnError) {
+    /// <summary>Parses a string into a Date object.</summary>
     /// <param name="propertyValue" type="String">Value to parse.</param>
-    /// <returns type="Date">The parsed value.</returns>
+    /// <returns type="Date">The parsed with year, month, day set, time values are set to 0</returns>
+    var parts = propertyValue.split('-');
+
+    if (parts.length != 3 && nullOnError) {
+        return null;
+    }
+    return new Date(
+        parseInt10(parts[0]),       // Year.
+        parseInt10(parts[1]) - 1,   // Month (zero-based for Date.UTC and setFullYear).
+        parseInt10(parts[2],
+        0,0,0,0)        // Date.
+        );
+
+};
+
+var parseTimeOfDayRE = /^(\d+):(\d+)(:(\d+)(.(\d+))?)?$/;
+
+var parseTimeOfDay = function (propertyValue, nullOnError) {
+    var parts = parseTimeOfDayRE.exec(propertyValue);
+
 
-    return parseDateTimeMaybeOffset(propertyValue, false, nullOnError);
+    return {
+        'h' :parseInt10(parts[1]),
+        'm' :parseInt10(parts[2]),
+        's' :parseInt10(parts[4]),
+        'ms' :parseInt10(parts[6]),
+     };
 };
 
 var parseDateTimeOffset = function (propertyValue, nullOnError) {
@@ -1145,10 +1169,13 @@ exports.maxVersion = maxVersion;
 exports.navigationPropertyKind = navigationPropertyKind;
 exports.normalizeHeaders = normalizeHeaders;
 exports.parseBool = parseBool;
-exports.parseDateTime = parseDateTime;
+
+
+exports.parseDate = parseDate;
 exports.parseDateTimeOffset = parseDateTimeOffset;
 exports.parseDuration = parseDuration;
-exports.parseTimezone = parseTimezone;
+exports.parseTimeOfDay = parseTimeOfDay;
+
 exports.parseInt10 = parseInt10;
 exports.prepareRequest = prepareRequest;
 exports.removeNamespace = removeNamespace;