@sap/xsodata
Version:
Expose data from a HANA database as OData V2 service with help of .xsodata files.
93 lines (78 loc) • 3.64 kB
JavaScript
'use strict';
var oDataUriParser = require('../../lib/uri/oDataUriParser');
var DBSegment = require('../db/dbSegment');
exports.URI0 = 0; // scheme serviceRoot
exports.URI1 = 1; // scheme serviceRoot "/" entitySet
exports.URI2 = 2; // scheme serviceRoot "/" entitySet "(" keyPredicate ")"
exports.URI3 = 3; // scheme serviceRoot "/" entitySet "(" keyPredicate ")/" entityComplexProperty
exports.URI4 = 4; // scheme serviceRoot "/" entitySet "(" keyPredicate ")/" entityComplexProperty "/" entityProperty
exports.URI5A = 51; // scheme serviceRoot "/" entitySet "(" keyPredicate ")/" entityProperty
exports.URI5B = 52; // scheme serviceRoot "/" entitySet "(" keyPredicate ")/" entityProperty value
exports.URI6A = 61; // scheme serviceRoot "/" entitySet "(" keyPredicate ")/" entityNavProperty
exports.URI6B = 62; // scheme serviceRoot "/" entitySet "(" keyPredicate ")/" collectionNavProperty
exports.URI7A = 71; // scheme serviceRoot "/" entitySet "(" keyPredicate ")/$links/" entityNavProperty
exports.URI7B = 72; // scheme serviceRoot "/" entitySet "(" keyPredicate ")/$links/" collectionNavProperty
exports.URI8 = 8; // scheme serviceRoot "/$metadata"
exports.URI9 = 9; // scheme serviceRoot "/$batch"
exports.URI10 = 10; // scheme serviceRoot "/" serviceOperation-et
exports.URI11 = 11; // scheme serviceRoot "/" serviceOperation-collCt
exports.URI12 = 12; // scheme serviceRoot "/" serviceOperation-ct
exports.URI13 = 13; // scheme serviceRoot "/" serviceOperation-collPrim
exports.URI14 = 14; // scheme serviceRoot "/" serviceOperation-prim
exports.URI15 = 15; // scheme serviceRoot "/" entitySet count
exports.URI16 = 16; // scheme serviceRoot "/" entitySet "(" keyPredicate ")" count
exports.URI17 = 17; // scheme serviceRoot "/" entitySet "(" keyPredicate ")" value
exports.UNKNOWN_URI = -1; // "fallback" uri type, which is used when uri type cannot be determined
/**
* Determines and returns the OData URI type based on the information from the specified context.
*
* @param {object} context - OData context, which represents the current request.
* @returns {number} OData URI type (e.g. URI1 having number value of 1).
*/
exports.determineUriType = function determineUriType(context) {
var uriKind = context.oData.kind,
dbSegmentLast,
isCollection,
isCount,
isValue,
segmentKind,
isLinks;
if (uriKind === oDataUriParser.URI_KIND_Service) {
return exports.URI0;
}
if (uriKind === oDataUriParser.URI_KIND_MetaData) {
return exports.URI8;
}
if (uriKind === oDataUriParser.URI_KIND_Batch) {
return exports.URI9;
}
dbSegmentLast = context.oData.dbSegmentLast;
isCollection = dbSegmentLast.isCollection;
isCount = dbSegmentLast.restriction.onlyCount;
isValue = dbSegmentLast.restriction.onlyValue;
isLinks = context.oData.dbSegment && context.oData.dbSegment.isLinks;
segmentKind = dbSegmentLast.kind;
if ((segmentKind === DBSegment.DBS_Entity || segmentKind === DBSegment.DBS_ResourceNavigation) && isCount &&
!isValue && !isLinks) {
return isCollection ? exports.URI15 : exports.URI16;
}
if (isCount) {
return exports.UNKNOWN_URI;
}
if (segmentKind === DBSegment.DBS_Entity && !dbSegmentLast.singleProperty && !isLinks) {
if (isCollection) {
return exports.URI1;
}
return isValue ? exports.URI17 : exports.URI2;
}
if (dbSegmentLast.singleProperty && !isCollection && !isLinks) {
return isValue ? exports.URI5B : exports.URI5A;
}
if (segmentKind === DBSegment.DBS_ResourceNavigation) {
if (isLinks) {
return isCollection ? exports.URI7B : exports.URI7A;
}
return isCollection ? exports.URI6B : exports.URI6A;
}
return exports.UNKNOWN_URI;
};