ifc-expressions
Version:
Parsing and evaluation of IFC expressions
71 lines (70 loc) • 4.8 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.PROPERTYSET = void 0;
const Func_js_1 = require("../Func.js");
const FuncArg_js_1 = require("../FuncArg.js");
const ExprEvalResult_js_1 = require("../../ExprEvalResult.js");
const ObjectAccessorValue_js_1 = require("../../../value/ObjectAccessorValue.js");
const ExprKind_js_1 = require("../../ExprKind.js");
const FuncArgObjectAccessor_js_1 = require("../arg/FuncArgObjectAccessor.js");
const IfcElementAccessor_js_1 = require("../../../context/IfcElementAccessor.js");
const StringValue_js_1 = require("../../../value/StringValue.js");
const IfcPropertyAccessor_js_1 = require("../../../context/IfcPropertyAccessor.js");
const IfcTypeObjectAccessor_js_1 = require("../../../context/IfcTypeObjectAccessor.js");
const IfcExpressionUtils_js_1 = require("../../../util/IfcExpressionUtils.js");
const Types_js_1 = require("../../../type/Types.js");
class PROPERTYSET extends Func_js_1.Func {
constructor() {
super("PROPERTYSET", [
new FuncArgObjectAccessor_js_1.FuncArgObjectAccessor(true, PROPERTYSET.KEY_OBJECT_REF, Types_js_1.Types.or(Types_js_1.Type.IFC_ELEMENT_REF, Types_js_1.Type.IFC_PROPERTY_REF, Types_js_1.Type.IFC_TYPE_OBJECT_REF)),
new FuncArg_js_1.FuncArg(false, PROPERTYSET.KEY_PSET_NAME),
]);
}
getReturnType(argumentTypes) {
return Types_js_1.Type.IFC_PROPERTY_SET_REF;
}
calculateResult(callingExpr, evaluatedArguments) {
const objectRef = evaluatedArguments
.get(PROPERTYSET.KEY_OBJECT_REF)
.getValue();
if ((0, IfcElementAccessor_js_1.isIfcElementAccessor)(objectRef)) {
const psetNameVal = evaluatedArguments.get(PROPERTYSET.KEY_PSET_NAME);
if (typeof psetNameVal === undefined) {
return new ExprEvalResult_js_1.ExprEvalMissingRequiredFunctionArgumentErrorObj(ExprKind_js_1.ExprKind.FUNCTION_ARGUMENTS, "Name is required to access a property set of an IFC element", this.getName(), PROPERTYSET.KEY_PSET_NAME, 1, callingExpr.getTextSpan());
}
if (!StringValue_js_1.StringValue.isStringValueType(psetNameVal)) {
return new ExprEvalResult_js_1.ExprEvalTypeErrorObj(ExprKind_js_1.ExprKind.FUNCTION_ARGUMENTS, "Property set name must be a string", psetNameVal, callingExpr.getTextSpan());
}
const psetName = psetNameVal.stringValue;
const resultingObjectAccessor = objectRef.getIfcPropertySetAccessor(psetName);
return this.makeResult(callingExpr, resultingObjectAccessor, psetName);
}
else if ((0, IfcPropertyAccessor_js_1.isIfcPropertyAccessor)(objectRef)) {
return this.makeResult(callingExpr, objectRef.getIfcPropertySetAccessor(), "[PropertySet of Property]");
}
else if ((0, IfcTypeObjectAccessor_js_1.isIfcTypeObjectAccessor)(objectRef)) {
const psetNameVal = evaluatedArguments.get(PROPERTYSET.KEY_PSET_NAME);
if (typeof psetNameVal === undefined) {
return new ExprEvalResult_js_1.ExprEvalMissingRequiredFunctionArgumentErrorObj(ExprKind_js_1.ExprKind.FUNCTION_ARGUMENTS, "Name is required to access a property set of an IFC type object", this.getName(), PROPERTYSET.KEY_PSET_NAME, 1, callingExpr.getTextSpan());
}
if (!StringValue_js_1.StringValue.isStringValueType(psetNameVal)) {
return new ExprEvalResult_js_1.ExprEvalTypeErrorObj(ExprKind_js_1.ExprKind.FUNCTION_ARGUMENTS, "Property set name must be a string", psetNameVal, callingExpr.getTextSpan());
}
const psetName = psetNameVal.stringValue;
return this.makeResult(callingExpr, objectRef.getIfcPropertySetAccessor(psetName), psetName);
}
return new ExprEvalResult_js_1.ExprEvalTypeErrorObj(ExprKind_js_1.ExprKind.FUNCTION_ARGUMENTS, "Cannot evaluate function 'propertySet' on the specified object", objectRef, callingExpr.getTextSpan());
}
makeResult(callingExpr, resultingObjectAccessor, psetName) {
if ((0, IfcExpressionUtils_js_1.isNullish)(resultingObjectAccessor)) {
return new ExprEvalResult_js_1.ExprEvalFunctionEvaluationObjectNotFoundErrorObj(ExprKind_js_1.ExprKind.FUNCTION, ExprEvalResult_js_1.ExprEvalStatus.IFC_PROPERTY_SET_NOT_FOUND, `No ifc property set found with name '${psetName}'`, this.getName(), psetName, callingExpr.getTextSpan());
}
else {
return new ExprEvalResult_js_1.ExprEvalSuccessObj(ObjectAccessorValue_js_1.ObjectAccessorValue.of(resultingObjectAccessor));
}
}
}
exports.PROPERTYSET = PROPERTYSET;
PROPERTYSET.KEY_OBJECT_REF = "objectRef";
PROPERTYSET.KEY_PSET_NAME = "pset_name";
//# sourceMappingURL=PROPERTYSET.js.map