Repository: olingo-odata4-js
Updated Branches:
  refs/heads/OLINGO-324 [created] 54486148e


http://git-wip-us.apache.org/repos/asf/olingo-odata4-js/blob/54486148/datajs/demo/tester.html
----------------------------------------------------------------------
diff --git a/datajs/demo/tester.html b/datajs/demo/tester.html
new file mode 100644
index 0000000..011bf90
--- /dev/null
+++ b/datajs/demo/tester.html
@@ -0,0 +1,98 @@
+<html>
+    <head>
+        <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+        <title>datajs startup perf test</title>
+        <script type="text/javascript" 
src="./jscripts/jquery-1.11.1.min.js"></script>
+        <script type="text/javascript" src="./jscripts/underscore-min.js" 
></script>
+        <script type="text/javascript" src="./jscripts/backbone-min.js" 
></script>
+        <script type="text/javascript" 
src="./jscripts/datajs-2.0.0.js"></script>
+        <!--https://github.com/warfares/pretty-json/blob/master/index.html-->
+        <script type="text/javascript" src="./jscripts/pretty-json-min.js" 
></script>
+        
+    </head>   
+    <body>
+        <button id="startXML">XML</button><br/>
+        <button id="startJSON">JSON</button><br/>
+        <button id="btnMetaData">MetaData</button><br/>
+        <button id="btnJSONwithMetaData">JSON with MetaData</button><br/>
+        <div id='resultsArea'>
+
+        </div>
+        <script type='text/html' id='template'>
+            {{#items}}
+            <p><a href="{{id}}">{{name}}</a></p>
+            {{/items}}
+        </script>
+        <script>
+            function success(data) {
+                $('#resultsArea').empty();
+                
//$('#resultsArea').html(Mustache.render($('#template').html(), {items:data})); 
+                //var out = JSON.stringify(data, null, 4)
+                //$('#resultsArea').html(out);
+                var node = new PrettyJSON.view.Node({ 
+                    el:$('#resultsArea'), 
+                    data: data,
+                });
+                node.expandAll();
+            }
+
+            function errorFunc(err) {
+                $('#resultsArea').empty();
+                $("#resultsArea").text(JSON.stringify(err));
+            }
+
+            $('#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';
+                OData.read(requestUri, success, errorFunc);
+            });
+            $('#startJSON').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=json';
+                OData.read(requestUri, success, errorFunc);
+            });
+
+            $('#btnMetaData').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,
+                };
+
+                OData.read(metadataRequest, success, 
errorFunc,OData.metadataHandler);
+            });
+            $('#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';
+                    OData.read(requestUri, success, errorFunc, null, null, 
metadata);
+                }
+
+
+                OData.read(metadataRequest, metaDatasuccess, 
errorFunc,OData.metadataHandler);
+            });
+
+        </script>
+    </body>
+</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/olingo-odata4-js/blob/54486148/datajs/demo/testerV2.html
----------------------------------------------------------------------
diff --git a/datajs/demo/testerV2.html b/datajs/demo/testerV2.html
new file mode 100644
index 0000000..e21e364
--- /dev/null
+++ b/datajs/demo/testerV2.html
@@ -0,0 +1,55 @@
+<html>
+    <head>
+        <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+        <title>datajs startup perf test</title>
+        <script type="text/javascript" 
src="./jscripts/jquery-1.11.1.min.js"></script>
+        <script type="text/javascript" src="./jscripts/underscore-min.js" 
></script>
+        <script type="text/javascript" src="./jscripts/backbone-min.js" 
></script>
+        <script type="text/javascript" 
src="./jscripts/datajs-1.1.2.js"></script>
+        <!--https://github.com/warfares/pretty-json/blob/master/index.html-->
+        <script type="text/javascript" src="./jscripts/pretty-json-min.js" 
></script>
+        
+    </head>   
+    <body>
+        <button id="startXML">startXML</button><br/>
+        <button id="startJSON">startJSON</button><br/>
+        <div id='resultsArea'>
+
+        </div>
+        <script type='text/html' id='template'>
+            {{#items}}
+            <p><a href="{{id}}">{{name}}</a></p>
+            {{/items}}
+        </script>
+        <script>
+            function success(data) {
+                $('#resultsArea').empty();
+                
//$('#resultsArea').html(Mustache.render($('#template').html(), {items:data})); 
+                //var out = JSON.stringify(data, null, 4)
+                //$('#resultsArea').html(out);
+                var node = new PrettyJSON.view.Node({ 
+                    el:$('#resultsArea'), 
+                    data: data,
+                });
+                node.expandAll();
+            }
+
+            function errorFunc(err) {
+                $('#resultsArea').empty();
+                $("#resultsArea").text(JSON.stringify(err));
+            }
+
+            $('#startXML').on("click", function(){
+                //var requestUri = 
'http://localhost:4002/tests/endpoints/FoodStoreDataServiceV4.svc/Foods';
+                var requestUri ='http://localhost:4003/sap/bc/odata/Employees';
+                OData.read(requestUri, success, errorFunc);
+            });
+            $('#startJSON').on("click", function(){
+                //var requestUri = 
'http://localhost:4002/tests/endpoints/FoodStoreDataServiceV4.svc/Foods';
+                var requestUri 
='http://localhost:4003/sap/bc/odata/Employees?$format=json';
+                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/54486148/datajs/package.json
----------------------------------------------------------------------
diff --git a/datajs/package.json b/datajs/package.json
index a45f2e8..e047bb8 100644
--- a/datajs/package.json
+++ b/datajs/package.json
@@ -21,14 +21,14 @@
       "email": "[email protected]"
     }
   ],
-  "scripts": {
-  },
+  "scripts": {},
   "devDependencies": {
     "browserify": "^4.1.5",
     "grunt": "^0.4.5",
     "grunt-browserify": "^2.1.0",
     "grunt-connect-proxy": "^0.1.10",
     "grunt-contrib-connect": "^0.7.1",
+    "grunt-contrib-copy": "^0.5.0",
     "grunt-contrib-uglify": "^0.4.0",
     "grunt-node-qunit": "^2.0.2"
   }

http://git-wip-us.apache.org/repos/asf/olingo-odata4-js/blob/54486148/datajs/src/lib/odata.js
----------------------------------------------------------------------
diff --git a/datajs/src/lib/odata.js b/datajs/src/lib/odata.js
index 7c44a19..47cc503 100644
--- a/datajs/src/lib/odata.js
+++ b/datajs/src/lib/odata.js
@@ -100,7 +100,7 @@ exports.defaultHandler = {
         accept: "application/json;q=0.9, application/atomsvc+xml;q=0.8, 
*/*;q=0.1"
     };
 
-exports.defaultMetadata = [];
+exports.defaultMetadata = []; //TODO check why is the defaultMetadata an 
Array? and not an Object.
 
 exports.read = function (urlOrRequest, success, error, handler, httpClient, 
metadata) {
     /// <summary>Reads data from the specified URL.</summary>
@@ -155,7 +155,13 @@ exports.request = function (request, success, error, 
handler, httpClient, metada
         odataUtils.prepareRequest(request, handler, context);
         return odataUtils.invokeRequest(request, success, error, handler, 
httpClient, context);
     } catch (err) {
-        error(err);
+        // errors in success handler for sync requests are catched here and 
result in error handler calls. 
+        // So here we fix this and throw that error further.
+        if (err.bIsSuccessHandlerError) {
+            throw err;
+        } else {
+            error(err);
+        }
     }
 
 };

http://git-wip-us.apache.org/repos/asf/olingo-odata4-js/blob/54486148/datajs/src/lib/odata/json-light.js
----------------------------------------------------------------------
diff --git a/datajs/src/lib/odata/json-light.js 
b/datajs/src/lib/odata/json-light.js
index e00f146..3e97c56 100644
--- a/datajs/src/lib/odata/json-light.js
+++ b/datajs/src/lib/odata/json-light.js
@@ -536,7 +536,7 @@ var jsonLightReadObject = function (data, objectInfo, 
baseURI, model, recognizeD
     var obj = { __metadata: metadata };
     var propertiesMetadata = {};
     var baseTypeModel;
-    if (isEntry && dataModel && objectInfo.entitySet && 
objectInfo.contentTypeOdata == "minimalmetadata") {
+    if (isEntry && dataModel && objectInfo.entitySet && 
objectInfo.contentTypeOdata === "minimalmetadata") {
         var serviceURI = baseURI.substring(0, 
baseURI.lastIndexOf("$metadata"));
         baseTypeModel = null; // check if the key model is in a parent type.
         if (!dataModel.key) {

http://git-wip-us.apache.org/repos/asf/olingo-odata4-js/blob/54486148/datajs/src/lib/odata/json.js
----------------------------------------------------------------------
diff --git a/datajs/src/lib/odata/json.js b/datajs/src/lib/odata/json.js
index 5265c0e..d90225a 100644
--- a/datajs/src/lib/odata/json.js
+++ b/datajs/src/lib/odata/json.js
@@ -36,7 +36,7 @@ var normalizeURI = utils.normalizeURI;
 var parseInt10 = utils.parseInt10;
 
 var contentType = oDataUtils.contentType;
-var jsonLightReadPayload = oDataUtils.jsonLightReadPayload;
+var jsonLightReadPayload = oJsonLight.jsonLightReadPayload;
 var formatDateTimeOffset = oDataUtils.formatDateTimeOffset;
 var formatDuration = oDataUtils.formatDuration;
 var formatJsonLight = oDataUtils.formatJsonLight;
@@ -119,7 +119,9 @@ var jsonApplyMetadata = function (value, metadata, 
dateParser, recognizeDates) {
                             value[propertyName] = propertyValue;
                         }
                     } else if (property.type === "Edm.Time") {
-                        value[propertyName] = parseDuration(propertyValue);
+                        if (propertyValue) {
+                            value[propertyName] = 
parseDuration(propertyValue);    
+                        }
                     }
                 }
             }
@@ -242,14 +244,21 @@ var jsonParser = function (handler, text, context) {
     /// <param name="context" type="Object">Object with parsing 
context.</param>
     /// <returns>An object representation of the OData payload.</returns>
 
+    var recognizeDates = defined(context.recognizeDates, 
handler.recognizeDates);
+    var inferJsonLightFeedAsObject = 
defined(context.inferJsonLightFeedAsObject, handler.inferJsonLightFeedAsObject);
+    var model = context.metadata;
     var dataServiceVersion = context.dataServiceVersion;
     var json = (typeof text === "string") ? JSON.parse(text) : text;
 
-    if ((maxVersion("4.0", dataServiceVersion) === dataServiceVersion)) {
+
+    if (utils.isArray(context.metadata)) {
         return json;
+    } else {
+        return jsonLightReadPayload(json, model, recognizeDates, 
inferJsonLightFeedAsObject, context.contentType.properties['odata.metadata']);
     }
 
-    return undefined;
+
+    
 };
 
 var jsonToString = function (data) {
@@ -263,9 +272,10 @@ var jsonToString = function (data) {
     try {
         // Set our own date.toJSON function
         Date.prototype.toJSON = function () {
-            return formatDateTimeOffset(this);
+            return formatDateTimeOffsetJSON(this);
         };
         result = JSON.stringify(data, jsonReplacer);
+        result = result.replace(/\/Date\(([0-9.+-]+)\)\//g, "\\/Date($1)\\/");
     } finally {
         // Restore the original toJSON function
         Date.prototype.toJSON = dateToJSON;
@@ -324,6 +334,8 @@ var jsonNormalizeData = function (data, baseURI) {
 
 var jsonHandler = oDataHandler.handler(jsonParser, jsonSerializer, 
jsonMediaType, MAX_DATA_SERVICE_VERSION);
 jsonHandler.recognizeDates = false;
+jsonHandler.useJsonLight = true;
+jsonHandler.inferJsonLightFeedAsObject = false;
 
 exports.jsonHandler = jsonHandler;
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4-js/blob/54486148/datajs/src/lib/odata/utils.js
----------------------------------------------------------------------
diff --git a/datajs/src/lib/odata/utils.js b/datajs/src/lib/odata/utils.js
index f5c17f6..40e014a 100644
--- a/datajs/src/lib/odata/utils.js
+++ b/datajs/src/lib/odata/utils.js
@@ -185,6 +185,10 @@ var formatMilliseconds = function (ms, ns) {
     return ms;
 };
 
+var formatDateTimeOffsetJSON = function (value) {
+    return "\/Date(" + value.getTime() + ")\/";
+};
+
 var formatDateTimeOffset = function (value) {
     /// <summary>Formats a DateTime or DateTimeOffset value a string.</summary>
     /// <param name="value" type="Date" mayBeNull="false">Value to 
format.</param>
@@ -329,8 +333,13 @@ var invokeRequest = function (request, success, error, 
handler, httpClient, cont
             error(err);
             return;
         }
-
-        success(response.data, response);
+        // errors in success handler for sync requests result in error handler 
calls. So here we fix this. 
+        try {
+            success(response.data, response);
+        } catch (err) {
+            err.bIsSuccessHandlerError = true;
+            throw err;
+        }
     }, error);
 };
 
@@ -555,7 +564,10 @@ var lookupDefaultEntityContainer = function (metadata) {
     /// <returns>An entity container description if the name is found; null 
otherwise.</returns>
 
     return forEachSchema(metadata, function (schema) {
-        return find(schema.entityContainer, function (container) {
+        if (isObject(schema.entityContainer)) { 
+            return schema.entityContainer;
+        }
+        return find(schema.entityContainer, function (container) { //TODO 
check if in V4 there is only 1 entitycontainer
             return parseBool(container.isDefaultEntityContainer);
         });
     });
@@ -653,14 +665,12 @@ var getEntitySetInfo = function (entitySetName, metadata) 
{
     /// <returns type="Object">The info about the entitySet.</returns>
 
     var info = forEachSchema(metadata, function (schema) {
-        var containers = schema.entityContainer;
-        for (var i = 0; i < containers.length; i++) {
-            var entitySets = containers[i].entitySet;
-            if (entitySets) {
-                for (var j = 0; j < entitySets.length; j++) {
-                    if (entitySets[j].name == entitySetName) {
-                        return { entitySet: entitySets[j], containerName: 
containers[i].name, functionImport: containers[i].functionImport };
-                    }
+        var container = schema.entityContainer;
+        var entitySets = container.entitySet;
+        if (entitySets) {
+            for (var j = 0; j < entitySets.length; j++) {
+                if (entitySets[j].name == entitySetName) {
+                    return { entitySet: entitySets[j], containerName: 
container.name, functionImport: container.functionImport };
                 }
             }
         }
@@ -1008,6 +1018,11 @@ var prepareRequest = function (request, handler, 
context) {
     if (!assigned(request.headers["OData-MaxVersion"])) {
         request.headers["OData-MaxVersion"] = handler.maxDataServiceVersion || 
"4.0";
     }
+
+    if (request.async === undefined) {
+        request.async = true;
+    }
+
 };
 
 var traverseInternal = function (item, owner, callback) {
@@ -1091,6 +1106,7 @@ exports.GEOJSON_MULTIPOLYGON = GEOJSON_MULTIPOLYGON;
 exports.GEOJSON_GEOMETRYCOLLECTION = GEOJSON_GEOMETRYCOLLECTION;
 exports.forEachSchema = forEachSchema;
 exports.formatDateTimeOffset = formatDateTimeOffset;
+exports.formatDateTimeOffsetJSON = formatDateTimeOffsetJSON;
 exports.formatDuration = formatDuration;
 exports.formatNumberWidth = formatNumberWidth;
 exports.getCanonicalTimezone = getCanonicalTimezone;

Reply via email to