@dasch-swiss/dsp-js
Version:
TypeScript client library for DSP-API
70 lines • 2.96 kB
JavaScript
import { Cardinality } from '../ontologies/class-definition';
/**
* Utility methods to facilitate the handling of a property's cardinality.
*
* @category Model V2
*/
export var CardinalityUtil;
(function (CardinalityUtil) {
/**
* Returns the cardinality for a property from a `ResourceClassDefinition`.
*
* @param propertyIri Iri of the property.
* @param entityInfo class information.
*/
const getCardinalityForProp = (propertyIri, entityInfo) => {
const cardinalityForProp = entityInfo.propertiesList.filter(hasProp => hasProp.propertyIndex === propertyIri);
if (cardinalityForProp.length !== 1) {
throw new Error(`No cardinality found for ${propertyIri}`);
}
return cardinalityForProp[0].cardinality;
};
CardinalityUtil.cardinalities = new Map([
[Cardinality._0_1, '0-1'],
[Cardinality._0_n, '0-n'],
[Cardinality._1, '1'],
[Cardinality._1_n, '1-n'],
]);
/**
* Determines if a value can be created for a given property.
*
* @param propertyIri Iri of the property.
* @param numberOfInstances number of existing values of the property in question.
* @param entityInfo class information.
*/
CardinalityUtil.createValueForPropertyAllowed = (propertyIri, numberOfInstances, entityInfo) => {
const cardinality = getCardinalityForProp(propertyIri, entityInfo);
if (numberOfInstances > 0) {
// at least one existing value for property
// 1-n and 0-n allow for the creation of additional values
return cardinality === Cardinality._1_n || cardinality === Cardinality._0_n;
}
else {
// no existing value for property
// 0-1 and 0-n allow for the creation of a value
return cardinality === Cardinality._0_1 || cardinality === Cardinality._0_n;
}
};
/**
* Determines if a value can be deleted for a given property.
*
* @param propertyIri Iri of the property.
* @param numberOfInstances number of existing values of the property in question.
* @param entityInfo class information.
*/
CardinalityUtil.deleteValueForPropertyAllowed = (propertyIri, numberOfInstances, entityInfo) => {
const cardinality = getCardinalityForProp(propertyIri, entityInfo);
if (numberOfInstances > 1) {
// more than one existing value
// 1-n allows for the deletion of a value
// if there is at least one remaining value
return cardinality === Cardinality._1_n || cardinality === Cardinality._0_n;
}
else {
// single value
// 0-1 and 0-n allow for deletion of a single value
return cardinality === Cardinality._0_1 || cardinality === Cardinality._0_n;
}
};
})(CardinalityUtil || (CardinalityUtil = {}));
//# sourceMappingURL=cardinality-util.js.map