@sap/odata-v4
Version:
OData V4.0 server library
110 lines (93 loc) • 2.61 kB
JavaScript
'use strict';
const AnnotationFactory = require('./annotationExpression/AnnotationExpressionFactory');
const Edm = require('./Edm');
const validateThat = require('../validator/ParameterValidator').validateThat;
/**
* <a href="./../ODataSpecification/odata-v4.0-errata03-os/complete/part3-csdl/odata-v4.0-errata03-os-part3-csdl-complete.html#_Toc453752630">
* OData CSDL # 14.3 Element edm:EdmAnnotation
* </a>
*
* @hideconstructor
*/
class EdmAnnotation {
/**
* Constructor
*
* @param {Edm} edm The edm itself
* @param {CsdlAnnotation} annotation The annotation
*/
constructor(edm, annotation) {
validateThat('edm', edm).truthy().instanceOf(Edm);
validateThat('annotation', annotation).truthy().instanceOf(Object);
this._edm = edm;
/**
* @type {CsdlAnnotation}
* @private
*/
this._annotation = annotation;
/**
* @type {EdmTerm}
* @private
*/
this._term = null;
/**
* @type {EdmAnnotationExpression}
* @private
*/
this._annotationExpression = null;
/**
* @type {EdmAnnotation[]}
* @private
*/
this._annotations = null;
}
/**
* Returns the full-qualified name of the term of the annotation.
* @returns {FullQualifiedName}
*/
getTermFullQualifiedName() {
return this._annotation.term;
}
/**
* Returns the term of the annotation.
* @returns {EdmTerm}
*/
getTerm() {
if (!this._term) {
this._term = this._edm.getTerm(this._annotation.term);
}
return this._term;
}
/**
* Returns annotation's qualifier
*
* @returns {string}
*/
getQualifier() {
return this._annotation.qualifier;
}
/**
* Returns the annotation expression
*
* @returns {EdmAnnotationExpression}
*/
getExpression() {
if (!this._annotationExpression) {
this._annotationExpression =
AnnotationFactory.createEdmExpressionFromCsdlExpression(this._edm, this._annotation.expression);
}
return this._annotationExpression;
}
/**
* Returns the annotations for this object
*
* @returns {EdmAnnotation[]}
*/
getAnnotations() {
if (!this._annotations) {
this._annotations = this._annotation.annotations.map(item => new EdmAnnotation(this._edm, item));
}
return this._annotations;
}
}
module.exports = EdmAnnotation;