@cgignite/ignite-odata
Version:
Odata Connector CG Ignite
81 lines (67 loc) • 1.97 kB
JavaScript
const builder = require('xmlbuilder');
exports.GetMetadata = (model) => {
return buildMetadata(model)
}
function buildMetadata(model) {
var entityTypes = []
for (var typeKey in model.entityTypes) {
var entityType = {
'@Name': typeKey,
'Property': []
}
for (var propKey in model.entityTypes[typeKey]) {
var property = model.entityTypes[typeKey][propKey]
var finalObject = { '@Name': propKey, '@Type': property.type }
if (property.hasOwnProperty('nullable')) finalObject['@Nullable'] = property.nullable
entityType.Property.push(finalObject)
if (property.key) {
entityType.Key = {
PropertyRef: {
'@Name': propKey
}
}
}
}
entityTypes.push(entityType)
}
var complexTypes = []
for (var typeKey in model.complexTypes) {
var complexType = {
'@Name': typeKey,
'Property': []
}
for (var propKey in model.complexTypes[typeKey]) {
var property = model.complexTypes[typeKey][propKey]
complexType.Property.push({ '@Name': propKey, '@Type': property.type })
}
complexTypes.push(complexType)
}
var container = {
'@Name': 'Context',
'EntitySet': []
}
for (var setKey in model.entitySets) {
container.EntitySet.push({
'@EntityType': model.entitySets[setKey].entityType,
'@Name': setKey
})
}
var returnObject = {
'edmx:Edmx': {
'@xmlns:edmx': 'http://docs.oasis-open.org/odata/ns/edmx',
'@Version': '4.0',
'edmx:DataServices': {
'Schema': {
'@xmlns': 'http://docs.oasis-open.org/odata/ns/edm',
'@Namespace': model.namespace,
'EntityType': entityTypes,
'EntityContainer': container
}
}
}
}
if (complexTypes.length) {
returnObject['edmx:Edmx']['edmx:DataServices'].Schema.ComplexType = complexTypes
}
return builder.create(returnObject).end({ pretty: true });
}