You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by bi...@apache.org on 2014/07/23 11:55:36 UTC
git commit: Remove the parameter extendMetadataToLevel and Change the
JsonParser logic
Repository: olingo-odata4-js
Updated Branches:
refs/heads/master 3b9342cbb -> 5559adba8
Remove the parameter extendMetadataToLevel and Change the JsonParser logic
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/5559adba
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4-js/tree/5559adba
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4-js/diff/5559adba
Branch: refs/heads/master
Commit: 5559adba8feadd9b11e8f9307e75664a68449bfe
Parents: 3b9342c
Author: Bing Li <bi...@apache.org>
Authored: Wed Jul 23 17:51:57 2014 +0800
Committer: Bing Li <bi...@apache.org>
Committed: Wed Jul 23 17:51:57 2014 +0800
----------------------------------------------------------------------
datajs/demo/mypage.html | 2 +-
datajs/demo/scripts/datajs_demo.js | 26 +--
datajs/src/lib/datajs/utils.js | 25 +++
datajs/src/lib/odata.js | 5 +-
datajs/src/lib/odata/handler.js | 4 -
datajs/src/lib/odata/json.js | 274 +++++++++-----------------------
datajs/src/lib/odata/metadata.js | 1 -
datajs/tests/odata-json-tests.js | 17 ++
8 files changed, 136 insertions(+), 218 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/olingo-odata4-js/blob/5559adba/datajs/demo/mypage.html
----------------------------------------------------------------------
diff --git a/datajs/demo/mypage.html b/datajs/demo/mypage.html
index 8624dce..16517a4 100644
--- a/datajs/demo/mypage.html
+++ b/datajs/demo/mypage.html
@@ -2,7 +2,7 @@
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>data js demo</title>
- <script type="text/javascript" src="scripts/datajs-1.1.1.js"></script>
+ <script type="text/javascript" src="scripts/datajs-2.0.0.js"></script>
<script type="text/javascript" src="scripts/jquery-2.0.3.js"></script>
<script type="text/javascript" src="scripts/datajs_demo.js"></script>
<style type="text/css">.title { font-size: 30px;font-style: italic;}</style>
http://git-wip-us.apache.org/repos/asf/olingo-odata4-js/blob/5559adba/datajs/demo/scripts/datajs_demo.js
----------------------------------------------------------------------
diff --git a/datajs/demo/scripts/datajs_demo.js b/datajs/demo/scripts/datajs_demo.js
index 97ebe36..e2b830d 100644
--- a/datajs/demo/scripts/datajs_demo.js
+++ b/datajs/demo/scripts/datajs_demo.js
@@ -1,7 +1,7 @@
var run = function() {
//testJQueryReadMetadata();
- //runSimpleReadRequest();
- runSimpleReadRequestWithMetadata();
+ runSimpleReadRequest();
+ runSimpleReadRequestWithMetadata();
// readWithJsonP();
//alert(OData.odataRelatedLinksPrefix);
//OData.odataRelatedLinksPrefix = "dasfs";
@@ -19,7 +19,7 @@
var runSimpleReadRequest = function() {
var oHeaders = {
- 'Accept': 'application/atom+xml',
+ 'Accept': 'application/json',
"Odata-Version": "4.0",
"OData-MaxVersion": "4.0"
};
@@ -27,7 +27,8 @@ var runSimpleReadRequest = function() {
var request =
{
headers: oHeaders,
- requestUri: "http://services.odata.org/OData/OData.svc/Categories",
+ // requestUri: "http://services.odata.org/OData/OData.svc/Categories",
+ requestUri: "http://odatasampleservices.azurewebsites.net/V4/OData/OData.svc/Categories",
data: null,
};
var successFunction = function (data) {
@@ -37,12 +38,12 @@ var runSimpleReadRequest = function() {
alert("err");
alert(JSON.stringify(err));
};
- OData.read(request, successFunction, failFunction);
+ datajs.V4.oData.read(request, successFunction, failFunction);
};
var runSimpleReadRequestWithMetadata = function () {
var oHeaders = {
- 'Accept': 'text/html,application/xhtml+xml,application/xml,application/json;odata.metadata=none',
+ 'Accept': 'text/html,application/xhtml+xml,application/xml,application/json;odata.metadata=minimal',
"Odata-Version": "4.0",
"OData-MaxVersion": "4.0",
"Prefer": "odata.allow-entityreferences"
@@ -53,7 +54,7 @@ var runSimpleReadRequestWithMetadata = function () {
var request =
{
headers: oHeaders,
- //requestUri: "http://services.odata.org/OData/OData.svc/Categories",
+ // requestUri: "http://services.odata.org/OData/OData.svc/Categories",
requestUri: "http://odatasampleservices.azurewebsites.net/V4/OData/OData.svc/Products",
data: null,
};
@@ -64,7 +65,7 @@ var runSimpleReadRequestWithMetadata = function () {
alert("err");
alert(JSON.stringify(err));
};
- OData.read(request, successFunction, failFunction, null, null, metadata);
+ datajs.V4.oData.read(request, successFunction, failFunction, null, null, metadata);
};
var readMetadataFail = function (err) {
@@ -75,16 +76,17 @@ var runSimpleReadRequestWithMetadata = function () {
var metadataRequest =
{
headers: oHeaders,
- //requestUri: "http://services.odata.org/OData/OData.svc/$metadata",
- requestUri: "http://odatasampleservices.azurewebsites.net/V4/OData/OData.svc/$metadata", //"http://localhost:6630/PrimitiveKeys.svc/$metadata",
+ // requestUri: "http://services.odata.org/OData/OData.svc/$metadata",
+ requestUri: "http://odatasampleservices.azurewebsites.net/V4/OData/OData.svc/$metadata",
+ // "http://localhost:6630/PrimitiveKeys.svc/$metadata",
data: null,
};
- OData.read(metadataRequest, readMetadataSuccess, readMetadataFail, OData.metadataHandler);
+ datajs.V4.oData.read(metadataRequest, readMetadataSuccess, readMetadataFail, datajs.V4.oData.metadataHandler);
};
var readWithJsonP = function() {
- var sUrl2 = "http://services.odata.org/V3/OData/OData.svc/Products?$expand=Category";
+ var sUrl2 = "http://odatasampleservices.azurewebsites.net/V4/OData/OData.svc?$expand=Category";
var oRequest = {
requestUri: sUrl2,
http://git-wip-us.apache.org/repos/asf/olingo-odata4-js/blob/5559adba/datajs/src/lib/datajs/utils.js
----------------------------------------------------------------------
diff --git a/datajs/src/lib/datajs/utils.js b/datajs/src/lib/datajs/utils.js
index 59c2969..605d5aa 100644
--- a/datajs/src/lib/datajs/utils.js
+++ b/datajs/src/lib/datajs/utils.js
@@ -522,6 +522,30 @@ var startsWith = function (input, search) {
return input.indexOf(search) == 0;
};
+var getFormatKind = function (format, defaultFormatKind) {
+ var formatKind = defaultFormatKind;
+ if (!assigned(format)) {
+ return formatKind;
+ }
+
+ var normalizedFormat = format.toLowerCase();
+ switch (normalizedFormat) {
+ case "none":
+ formatKind = 0;
+ break;
+ case "minimal":
+ formatKind = 1;
+ break;
+ case "full":
+ formatKind = 2;
+ break;
+ default:
+ break;
+ }
+
+ return formatKind;
+};
+
exports.activeXObject = activeXObject;
exports.assigned = assigned;
exports.contains = contains;
@@ -548,4 +572,5 @@ exports.sliceJsonValueArray = sliceJsonValueArray;
exports.concatJsonValueArray = concatJsonValueArray;
exports.startsWith = startsWith;
exports.endsWith = endsWith;
+exports.getFormatKind = getFormatKind;
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/olingo-odata4-js/blob/5559adba/datajs/src/lib/odata.js
----------------------------------------------------------------------
diff --git a/datajs/src/lib/odata.js b/datajs/src/lib/odata.js
index b1abcd6..b0a1dc2 100644
--- a/datajs/src/lib/odata.js
+++ b/datajs/src/lib/odata.js
@@ -36,7 +36,6 @@ exports.metadataHandler = odataMetadata.metadataHandler;
var utils = require('./datajs/utils.js');
var assigned = utils.assigned;
-var assigned = utils.assigned;
var defined = utils.defined;
var throwErrorCallback = utils.throwErrorCallback;
@@ -134,7 +133,6 @@ exports.request = function (request, success, error, handler, httpClient, metada
// Augment the request with additional defaults.
request.recognizeDates = utils.defined(request.recognizeDates, odataJson.jsonHandler.recognizeDates);
- request.extendMetadataToLevel = utils.defined(request.extendMetadataToLevel, odataJson.jsonHandler.extendMetadataToLevel);
request.callbackParameterName = utils.defined(request.callbackParameterName, odataNet.defaultHttpClient.callbackParameterName);
request.formatQueryString = utils.defined(request.formatQueryString, odataNet.defaultHttpClient.formatQueryString);
request.enableJsonpCallback = utils.defined(request.enableJsonpCallback, odataNet.defaultHttpClient.enableJsonpCallback);
@@ -143,10 +141,9 @@ exports.request = function (request, success, error, handler, httpClient, metada
var context = {
metadata: metadata,
recognizeDates: request.recognizeDates,
- extendMetadataToLevel : request.extendMetadataToLevel,
callbackParameterName: request.callbackParameterName,
formatQueryString: request.formatQueryString,
- enableJsonpCallback: request.enableJsonpCallback,
+ enableJsonpCallback: request.enableJsonpCallback
};
try {
http://git-wip-us.apache.org/repos/asf/olingo-odata4-js/blob/5559adba/datajs/src/lib/odata/handler.js
----------------------------------------------------------------------
diff --git a/datajs/src/lib/odata/handler.js b/datajs/src/lib/odata/handler.js
index 58d0d81..60254d7 100644
--- a/datajs/src/lib/odata/handler.js
+++ b/datajs/src/lib/odata/handler.js
@@ -20,15 +20,11 @@
var utils = require('./../datajs.js').utils;
var oDataUtils = require('./utils.js');
-
// Imports.
var assigned = utils.assigned;
var extend = utils.extend;
var trimString = utils.trimString;
-
var maxVersion = oDataUtils.maxVersion;
-
-
var MAX_DATA_SERVICE_VERSION = "4.0";
var contentType = function (str) {
http://git-wip-us.apache.org/repos/asf/olingo-odata4-js/blob/5559adba/datajs/src/lib/odata/json.js
----------------------------------------------------------------------
diff --git a/datajs/src/lib/odata/json.js b/datajs/src/lib/odata/json.js
index 370c23d..ed9dbd0 100644
--- a/datajs/src/lib/odata/json.js
+++ b/datajs/src/lib/odata/json.js
@@ -32,6 +32,7 @@ var isArray = utils.isArray;
var isObject = utils.isObject;
//var normalizeURI = utils.normalizeURI;
var parseInt10 = utils.parseInt10;
+var getFormatKind = utils.getFormatKind;
var formatDateTimeOffset = oDataUtils.formatDateTimeOffset;
var formatDuration = oDataUtils.formatDuration;
@@ -152,187 +153,104 @@ var jsonParser = function (handler, text, context) {
/// <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;
- var metadataMap = { none : 0, minimal : 1, full : 2, all : 3 };
- var payloadFormat = 1;//minmal
- try {
- payloadFormat = metadataMap[context.contentType.properties["odata.metadata"]];//TODO convert to lower before comparism
- } catch(err) {
- payloadFormat = 1;
+ if (assigned(context.contentType) && assigned(context.contentType.properties)) {
+ var metadataContentType = context.contentType.properties["odata.metadata"]; //TODO convert to lower before comparism
}
- payloadFormat = (payloadFormat === undefined) ? 1 : payloadFormat;
- var demandedFormat = 1;//minmal
- try {
- demandedFormat = metadataMap[context.extendMetadataToLevel]; //TODO convert to lower before comparism
- } catch(err) {
- demandedFormat = 1;
+ var payloadFormat = getFormatKind(metadataContentType, 1); // none: 0, minimal: 1, full: 2
+
+ // No errors should be throw out if we could not parse the json payload, instead we should just return the original json object.
+ if (payloadFormat === 0) {
+ return json;
}
- demandedFormat = (demandedFormat === undefined) ? 1 : demandedFormat;
-
- if ( payloadFormat >= demandedFormat) {
- //there is no need to add additional metadata
- if (recognizeDates) {
- 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) {
- //demandedFormat is all
- //metaData=full, no metadata in context required
- //insert the missing type information for strings, bool, etc.
- //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(model)) { // array was default for model in datajsV3 3.0
- return readPayloadMinimal(json, model, demandedFormat,recognizeDates);
- } else {
- //error metadata in context required, TODO: throw a to be defined exception
- }
- } else {
- // the payload contains no context url only guessing possible
- return json;
- }
+ else if (payloadFormat === 1) {
+ return readPayloadMinimal(json, model, recognizeDates);
}
-};
-
-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);
- }
- //TODO handle more types there
- }
- }
- }
- }
+ else if (payloadFormat === 2) {
+ // to do: using the EDM Model to get the type of each property instead of just guessing.
+ return readPayloadFull(json, model, recognizeDates);
+ }
+ else {
+ return json;
}
- return data;
};
var addType = function(data, name, value ) {
- var fullName = name+'@odata.type';
+ var fullName = name + '@odata.type';
if ( data[fullName] === undefined) {
data[fullName] = value;
}
};
-var extendMetadataFromPayload = function(data,context,recognizeDates) {
+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
///</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) ) {
+ 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) {
- extendMetadataFromPayload(data[key][i], context, recognizeDates);
+ for (var i = 0; i < data[key].length; ++i) {
+ readPayloadFull(data[key][i], model, recognizeDates);
}
} else if (utils.isObject(data[key])) {
if (data[key] !== null) {
- extendMetadataFromPayload(data[key],context, recognizeDates);
+ readPayloadFull(data[key], model, recognizeDates);
}
} else {
- 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 type = data[key + '@odata.type'];
+
+ // On .Net OData library, some basic EDM type is omitted, e.g. Edm.String, Edm.Int, and etc.
+ // For the full metadata payload, we need to full fill the @data.type for each property if it is missing.
+ // We do this is to help the OlingoJS consumers to easily get the type of each property.
+ if (!assigned(type)) {
+ // Guessing the "type" from the type of the value is not the right way here.
+ // To do: we need to get the type from metadata instead of guessing.
+ var typeFromObject = typeof data[key];
+ if (typeFromObject === 'string') {
+ addType(data, key, '#String');
+ } else if (typeFromObject === 'boolean') {
+ addType(data, key, '#Bool');
+ } else if (typeFromObject === 'number') {
+ if (data[key] % 1 === 0) { // has fraction
+ addType(data, key, '#Integer'); // the biggst integer
+ } else {
+ addType(data, key, '#Decimal'); // the biggst float single,doulbe,decimal
+ }
}
- //TODO handle more types there
}
- var typeFromObject = typeof data[key];
- if ( typeFromObject === 'string' ) {
- addType(data,key,'#String');
- } else if (typeFromObject ==='boolean') {
- addType(data,key,'#Bool');
- } else if (typeFromObject ==='number') {
- if ( data[key] % 1 === 0 ) { // has fraction
- addType(data,key,'#Integer');// the biggst integer
- } else {
- addType(data,key,'#Decimal');// the biggst float single,doulbe,decimal
+ else {
+ if (recognizeDates) {
+ if (type === '#DateTimeOffset') {
+ data[key] = oDataUtils.parseDateTimeOffset(data[key], true);
+ } else if (type === '#DateTime') {
+ data[key] = oDataUtils.parseDateTimeOffset(data[key], true);
+ }
}
+
+ // TODO handle more types here
}
}
}
}
}
}
+
return data;
};
-
-
-/*
-var jsonToString = function (data) {
- /// <summary>Converts the data into a JSON string.</summary>
- /// <param name="data">Data to serialize.</param>
- /// <returns type="String">The JSON string representation of data.</returns>
-
- var result; // = undefined;
- // Save the current date.toJSON function
- var dateToJSON = Date.prototype.toJSON;
- try {
- // Set our own date.toJSON function
- Date.prototype.toJSON = function () {
- 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;
- }
- return result;
-};*/
-
var jsonSerializer = function (handler, data, context) {
/// <summary>Serializes the data by returning its string representation.</summary>
/// <param name="handler">This handler.</param>
@@ -422,7 +340,6 @@ var jsonLightMakePayloadInfo = function (kind, type) {
var parseContextUriFragment = function( fragments, model ) {
var ret = {};
-
if (fragments.indexOf('/') === -1 ) {
if (fragments.length === 0) {
// Capter 10.1
@@ -587,6 +504,7 @@ var parseContextUriFragment = function( fragments, model ) {
//TODO throw ERROr
}
}
+
return ret;
};
@@ -618,31 +536,34 @@ var createPayloadInfo = function (data, model) {
return parseContextUriFragment(fragment,model);
};
-var readPayloadMinimal = function (data, model, demandedFormat,recognizeDates) {
+var readPayloadMinimal = function (data, model, recognizeDates) {
/// <summary>Processe a JSON response payload with metadata-minimal</summary>
/// <param name="data" type="Object">Json response payload object</param>
/// <param name="model" type="Object">Object describing an OData conceptual schema</param>
- /// <param name="demandedFormat" type="Number">2=extend to metedata-full, 3=extend to metadata-all</param>
/// <param name="recognizeDates" type="Boolean">Flag indicating whether datetime literal strings should be converted to JavaScript Date objects.</param>
/// <returns type="Object">Object in the library's representation.</returns>
+ if (!assigned(model) || !isArray(model) || model.length == 0) {
+ return data;
+ }
+
var baseURI = data[contextUrlAnnotation];
var payloadInfo = createPayloadInfo(data, model);
switch (payloadInfo.detectedPayloadKind) {
case PAYLOADTYPE_FEED:
- return readPayloadMinimalFeed(data, model,payloadInfo, baseURI, demandedFormat,recognizeDates);
+ return readPayloadMinimalFeed(data, model, payloadInfo, baseURI, recognizeDates);
case PAYLOADTYPE_ENTRY:
- return readPayloadMinimalEntry(data, model,payloadInfo, baseURI, demandedFormat,recognizeDates);
+ return readPayloadMinimalEntry(data, model, payloadInfo, baseURI, recognizeDates);
case PAYLOADTYPE_COLLECTION:
- return ;
+ return;
case PAYLOADTYPE_PRIMITIVE:
- return ;
+ return;
case PAYLOADTYPE_SVCDOC:
- return ;
+ return;
case PAYLOADTYPE_LINKS:
- return ;
- }
+ return;
+ }
return;
};
@@ -650,7 +571,6 @@ var jsonLightGetEntryKey = function (data, entityModel) {
/// <summary>Gets the key of an entry.</summary>
/// <param name="data" type="Object">JSON light entry.</param>
/// <paraFrom Subject Received Size Categories
-
/// <returns type="string">Entry instance key.</returns>
var entityInstanceKey;
@@ -676,7 +596,7 @@ var jsonLightGetEntryKey = function (data, entityModel) {
return entityInstanceKey;
};
-var readPayloadMinimalFeed = function (data, model,feedInfo, baseURI, demandedFormat, recognizeDates) {
+var readPayloadMinimalFeed = function (data, model, feedInfo, baseURI, recognizeDates) {
var entries = [];
var items = data.value;
for (i = 0, len = items.length; i < len; i++) {
@@ -692,9 +612,9 @@ var readPayloadMinimalFeed = function (data, model,feedInfo, baseURI, demandedF
typeName : typeName
};
- entry = readPayloadMinimalObject(item, entryInfo, baseURI, model, demandedFormat,recognizeDates);
+ entry = readPayloadMinimalObject(item, entryInfo, baseURI, model, recognizeDates);
} else {
- entry = readPayloadMinimalObject(item, feedInfo, baseURI, model, demandedFormat,recognizeDates);
+ entry = readPayloadMinimalObject(item, feedInfo, baseURI, model, recognizeDates);
}
entries.push(entry);
@@ -703,35 +623,10 @@ var readPayloadMinimalFeed = function (data, model,feedInfo, baseURI, demandedF
return data;
};
-var readPayloadMinimalEntry = function (data, model,entryInfo, baseURI, demandedFormat, recognizeDates) {
- return readPayloadMinimalObject(data, entryInfo, baseURI, model, demandedFormat,recognizeDates);
+var readPayloadMinimalEntry = function (data, model, entryInfo, baseURI, recognizeDates) {
+ return readPayloadMinimalObject(data, entryInfo, baseURI, model, recognizeDates);
};
-
-
-
-
-
-
-
-
-
-
-
-
-/*
-var jsonNormalizeData = function (data, baseURI) {
- /// <summary>
- /// Normalizes the specified data into an intermediate representation.
- /// like the latest supported version.
- /// </summary>
- /// <param name="data" optional="false">Data to update.</param>
- /// <param name="baseURI" optional="false">URI to use as the base for normalizing references.</param>
-
- var isSvcDoc = isComplex(data) && !data.__metadata && isArray(data.EntitySets);
- return isSvcDoc ? normalizeServiceDocument(data, baseURI) : data;
-};*/
-
var formatLiteral = function (value, type) {
/// <summary>Formats a value according to Uri literal format</summary>
/// <param name="value">Value to be formatted.</param>
@@ -779,7 +674,7 @@ var formatRowLiteral = function (value, type) {
}
};
-var checkProperties = function(data,objectInfoType,baseURI,model, demandedFormat, recognizeDates) {
+var checkProperties = function (data, objectInfoType, baseURI, model, recognizeDates) {
for (var name in data) {
if (name.indexOf("@") === -1) {
var curType = objectInfoType;
@@ -794,28 +689,18 @@ var checkProperties = function(data,objectInfoType,baseURI,model, demandedFormat
if ( isArray(propertyValue)) {
data[name+'@odata.type'] = '#' + property.type;
for ( var i = 0; i < propertyValue.length; i++) {
- readPayloadMinimalComplexObject(propertyValue[i], property,baseURI,model,demandedFormat, recognizeDates);
+ readPayloadMinimalComplexObject(propertyValue[i], property, baseURI, model, recognizeDates);
}
} else if (isObject(propertyValue) && (propertyValue !== null)) {
- readPayloadMinimalComplexObject(propertyValue, property,baseURI,model,demandedFormat, recognizeDates);
+ readPayloadMinimalComplexObject(propertyValue, property, baseURI, model, recognizeDates);
} else {
- if (demandedFormat === 3) {
- data[name+'@odata.type'] = '#' + property.type;
- } else {
- if ( property.type != "Edm.String" &&
- property.type != "Edm.Boolean" &&
- property.type != "Edm.Int32" &&
- property.type != "Edm.Single" &&
- property.type != "Edm.Double" ) {
- data[name+'@odata.type'] = '#' + property.type;
- }
- }
+ data[name+'@odata.type'] = '#' + property.type;
}
}
}
};
-var readPayloadMinimalComplexObject = function (data, property, baseURI, model, demandedFormat, recognizeDates) {
+var readPayloadMinimalComplexObject = function (data, property, baseURI, model, recognizeDates) {
var type = property.type;
if (isCollectionType(property.type)) {
type =property.type.substring(11,property.type.length-1);
@@ -828,10 +713,10 @@ var readPayloadMinimalComplexObject = function (data, property, baseURI, model,
return; //TODO check what to do if the type is not known e.g. type #GeometryCollection
}
- checkProperties(data,propertyType ,baseURI,model, demandedFormat, recognizeDates);
+ checkProperties(data, propertyType, baseURI, model, recognizeDates);
};
-var readPayloadMinimalObject = function (data, objectInfo, baseURI, model, demandedFormat, recognizeDates) {
+var readPayloadMinimalObject = function (data, objectInfo, baseURI, model, recognizeDates) {
data['@odata.type'] = '#'+objectInfo.typeName;
var keyType = objectInfo.type;
@@ -846,12 +731,12 @@ var readPayloadMinimalObject = function (data, objectInfo, baseURI, model, deman
var serviceURI = baseURI.substring(0, baseURI.lastIndexOf("$metadata"));
//jsonLightComputeUrisIfMissing(data, entryInfo, actualType, serviceURI, dataModel, baseTypeModel);
- checkProperties(data,objectInfo.type,baseURI,model, demandedFormat, recognizeDates);
+ checkProperties(data, objectInfo.type, baseURI, model, recognizeDates);
return data;
};
-var jsonLightSerializableMetadata = ["@odata.id"];
+var jsonLightSerializableMetadata = ["@odata.id", "@odata.type"];
var isJsonLightSerializableProperty = function (property) {
if (!property) {
@@ -877,11 +762,8 @@ var isJsonLightSerializableProperty = function (property) {
var jsonHandler = oDataHandler.handler(jsonParser, jsonSerializer, jsonMediaType, MAX_DATA_SERVICE_VERSION);
jsonHandler.recognizeDates = false;
jsonHandler.useJsonLight = true;
-jsonHandler.inferJsonLightFeedAsObject = false;
exports.jsonHandler = jsonHandler;
-
exports.jsonParser = jsonParser;
exports.jsonSerializer = jsonSerializer;
-
exports.parseJsonDateString = parseJsonDateString;
http://git-wip-us.apache.org/repos/asf/olingo-odata4-js/blob/5559adba/datajs/src/lib/odata/metadata.js
----------------------------------------------------------------------
diff --git a/datajs/src/lib/odata/metadata.js b/datajs/src/lib/odata/metadata.js
index a29db29..c13c343 100644
--- a/datajs/src/lib/odata/metadata.js
+++ b/datajs/src/lib/odata/metadata.js
@@ -17,7 +17,6 @@
* under the License.
*/
-
var utils = require('./../datajs.js').utils;
var oDataXML = require('./xml.js');
var oDSxml = require('./../datajs.js').xml;
http://git-wip-us.apache.org/repos/asf/olingo-odata4-js/blob/5559adba/datajs/tests/odata-json-tests.js
----------------------------------------------------------------------
diff --git a/datajs/tests/odata-json-tests.js b/datajs/tests/odata-json-tests.js
index 239f4f8..58d8110 100644
--- a/datajs/tests/odata-json-tests.js
+++ b/datajs/tests/odata-json-tests.js
@@ -234,6 +234,7 @@
{ context: { response: { requestUri: "http://base.org" }, dataServiceVersion: "4.0" },
expected: {
"@odata.id": "Foods(4)",
+ "@odata.type": "#DataJS.Tests.V4.Food",
ID: 0,
Name: "Bread",
Description: "Whole grain bread",
@@ -266,18 +267,22 @@
"@odata.id": "Foods(4)",
value : [{
"@odata.id": "Foods(4)",
+ "@odata.type": "#DataJS.Tests.V4.Food",
ID: 0,
ComplexInLayerOne:
{
"@odata.id": "Foods(4)",
+ "@odata.type": "#DataJS.Tests.V4.Food",
ID: 1,
ComplexInLayerTwo:
{
"@odata.id": "Foods(4)",
+ "@odata.type": "#DataJS.Tests.V4.Food",
ID: 2,
ComplexInLayerThreeList: [
{
"@odata.id": "Foods(4)",
+ "@odata.type": "#DataJS.Tests.V4.Food",
ID: 3,
Name: "BreadInLayer3",
Description: "Whole grain bread inLayer3",
@@ -288,6 +293,7 @@
},
{
"@odata.id": "Foods(4)",
+ "@odata.type": "#DataJS.Tests.V4.Food",
ID: 3,
Name: "BreadInLayer3",
Description: "Whole grain bread inLayer3",
@@ -319,18 +325,22 @@
},
{
"@odata.id": "Foods(4)",
+ "@odata.type": "#DataJS.Tests.V4.Food",
ID: 0,
ComplexInLayerOne:
{
"@odata.id": "Foods(4)",
+ "@odata.type": "#DataJS.Tests.V4.Food",
ID: 1,
ComplexInLayerTwo:
{
"@odata.id": "Foods(4)",
+ "@odata.type": "#DataJS.Tests.V4.Food",
ID: 2,
ComplexInLayerThreeList: [
{
"@odata.id": "Foods(4)",
+ "@odata.type": "#DataJS.Tests.V4.Food",
ID: 3,
Name: "BreadInLayer3",
Description: "Whole grain bread inLayer3",
@@ -341,6 +351,7 @@
},
{
"@odata.id": "Foods(4)",
+ "@odata.type": "#DataJS.Tests.V4.Food",
ID: 3,
Name: "BreadInLayer3",
Description: "Whole grain bread inLayer3",
@@ -566,18 +577,22 @@
{ context: { response: { requestUri: "http://base.org" }, dataServiceVersion: "4.0" },
expected: {
"@odata.id": "Foods(4)",
+ "@odata.type": "#DataJS.Tests.V4.Food",
ID: 0,
ComplexInLayerOne:
{
"@odata.id": "Foods(4)",
+ "@odata.type": "#DataJS.Tests.V4.Food",
ID: 1,
ComplexInLayerTwo:
{
"@odata.id": "Foods(4)",
+ "@odata.type": "#DataJS.Tests.V4.Food",
ID: 2,
ComplexInLayerThree:
{
"@odata.id": "Foods(4)",
+ "@odata.type": "#DataJS.Tests.V4.Food",
ID: 3,
Name: "BreadInLayer3",
Description: "Whole grain bread inLayer3",
@@ -687,6 +702,7 @@
expected: {
value: [{
"@odata.id": "Foods(4)",
+ "@odata.type": "#DataJS.Tests.V4.Food",
ID: 0,
Name: "Bread",
Description: "Whole grain bread",
@@ -697,6 +713,7 @@
},
{
"@odata.id": "Foods(2)",
+ "@odata.type": "#DataJS.Tests.V4.Food",
ID: 1,
Name: "Bread",
Description: "Whole grain bread",