UNPKG

@itwin/ecschema-metadata

Version:

ECObjects core concepts in typescript

210 lines • 9.94 kB
/*--------------------------------------------------------------------------------------------- * Copyright (c) Bentley Systems, Incorporated. All rights reserved. * See LICENSE.md in the project root for license terms and full copyright notice. *--------------------------------------------------------------------------------------------*/ import { SchemaItemType } from "./ECObjects"; import { ECClass } from "./Metadata/Class"; import { Property } from "./Metadata/Property"; import { RelationshipConstraint } from "./Metadata/RelationshipClass"; import { SchemaItem } from "./Metadata/SchemaItem"; function isCustomAttributeContainer(object) { return "customAttributes" in object; } /** * A helper class to call methods on the provided [[ISchemaPartVisitor]]. * @public @preview */ export class SchemaPartVisitorDelegate { _visitor; constructor(visitor) { this._visitor = visitor; } /** * Calls (async) visitEmptySchema or visitFullSchema on the configured [[ISchemaPartVisitor]]. * @param schema The schema to pass to the visitor. * @param fullSchema Indicates if the schema is partially or fully-loaded. */ async visitSchema(schema, fullSchema = true) { if (!fullSchema && this._visitor.visitEmptySchema) await this._visitor.visitEmptySchema(schema); if (fullSchema && this._visitor.visitFullSchema) await this._visitor.visitFullSchema(schema); } /** * Calls (synchronously) visitEmptySchema or visitFullSchema on the configured [[ISchemaPartVisitor]]. * @param schema The schema to pass to the visitor. * @param fullSchema Indicates if the schema is partially or fully-loaded. */ visitSchemaSync(schema, fullSchema = true) { if (!fullSchema && this._visitor.visitEmptySchemaSync) this._visitor.visitEmptySchemaSync(schema); if (fullSchema && this._visitor.visitFullSchemaSync) this._visitor.visitFullSchemaSync(schema); } /** * Calls (async) the appropriate visit methods on the configured [[ISchemaPartVisitor]] * based on the type of the part specified. * @param schemaPart The schema part to pass to the visitor methods. */ async visitSchemaPart(schemaPart) { if (SchemaItem.isSchemaItem(schemaPart)) { await this.visitSchemaItem(schemaPart); } else if (Property.isProperty(schemaPart) && this._visitor.visitProperty) { await this._visitor.visitProperty(schemaPart); } else if (RelationshipConstraint.isRelationshipConstraint(schemaPart) && this._visitor.visitRelationshipConstraint) { await this._visitor.visitRelationshipConstraint(schemaPart); } if (isCustomAttributeContainer(schemaPart) && this._visitor.visitCustomAttributeContainer) { await this._visitor.visitCustomAttributeContainer(schemaPart); } } /** * Calls (synchronously) the appropriate visit methods on the configured [[ISchemaPartVisitor]] * based on the type of the part specified. * @param schemaPart The schema part to pass to the visitor methods. */ visitSchemaPartSync(schemaPart) { if (SchemaItem.isSchemaItem(schemaPart)) { this.visitSchemaItemSync(schemaPart); } else if (Property.isProperty(schemaPart) && this._visitor.visitPropertySync) { this._visitor.visitPropertySync(schemaPart); } else if (RelationshipConstraint.isRelationshipConstraint(schemaPart) && this._visitor.visitRelationshipConstraintSync) { this._visitor.visitRelationshipConstraintSync(schemaPart); } if (isCustomAttributeContainer(schemaPart) && this._visitor.visitCustomAttributeContainerSync) this._visitor.visitCustomAttributeContainerSync(schemaPart); } async visitSchemaItem(schemaItem) { if (this._visitor.visitSchemaItem) await this._visitor.visitSchemaItem(schemaItem); if (ECClass.isECClass(schemaItem) && this._visitor.visitClass) await this._visitor.visitClass(schemaItem); switch (schemaItem.schemaItemType) { case SchemaItemType.Constant: if (this._visitor.visitConstant) await this._visitor.visitConstant(schemaItem); break; case SchemaItemType.CustomAttributeClass: if (this._visitor.visitCustomAttributeClass) await this._visitor.visitCustomAttributeClass(schemaItem); break; case SchemaItemType.EntityClass: if (this._visitor.visitEntityClass) await this._visitor.visitEntityClass(schemaItem); break; case SchemaItemType.Enumeration: if (this._visitor.visitEnumeration) await this._visitor.visitEnumeration(schemaItem); break; case SchemaItemType.Format: if (this._visitor.visitFormat) await this._visitor.visitFormat(schemaItem); break; case SchemaItemType.InvertedUnit: if (this._visitor.visitInvertedUnit) await this._visitor.visitInvertedUnit(schemaItem); break; case SchemaItemType.KindOfQuantity: if (this._visitor.visitKindOfQuantity) await this._visitor.visitKindOfQuantity(schemaItem); break; case SchemaItemType.Mixin: if (this._visitor.visitMixin) await this._visitor.visitMixin(schemaItem); break; case SchemaItemType.Phenomenon: if (this._visitor.visitPhenomenon) await this._visitor.visitPhenomenon(schemaItem); break; case SchemaItemType.PropertyCategory: if (this._visitor.visitPropertyCategory) await this._visitor.visitPropertyCategory(schemaItem); break; case SchemaItemType.RelationshipClass: if (this._visitor.visitRelationshipClass) await this._visitor.visitRelationshipClass(schemaItem); break; case SchemaItemType.StructClass: if (this._visitor.visitStructClass) await this._visitor.visitStructClass(schemaItem); break; case SchemaItemType.Unit: if (this._visitor.visitUnit) await this._visitor.visitUnit(schemaItem); break; case SchemaItemType.UnitSystem: if (this._visitor.visitUnitSystem) await this._visitor.visitUnitSystem(schemaItem); break; } } visitSchemaItemSync(schemaItem) { if (this._visitor.visitSchemaItemSync) this._visitor.visitSchemaItemSync(schemaItem); if (ECClass.isECClass(schemaItem) && this._visitor.visitClassSync) this._visitor.visitClassSync(schemaItem); switch (schemaItem.schemaItemType) { case SchemaItemType.Constant: if (this._visitor.visitConstantSync) this._visitor.visitConstantSync(schemaItem); break; case SchemaItemType.CustomAttributeClass: if (this._visitor.visitCustomAttributeClassSync) this._visitor.visitCustomAttributeClassSync(schemaItem); break; case SchemaItemType.EntityClass: if (this._visitor.visitEntityClassSync) this._visitor.visitEntityClassSync(schemaItem); break; case SchemaItemType.Enumeration: if (this._visitor.visitEnumerationSync) this._visitor.visitEnumerationSync(schemaItem); break; case SchemaItemType.Format: if (this._visitor.visitFormatSync) this._visitor.visitFormatSync(schemaItem); break; case SchemaItemType.InvertedUnit: if (this._visitor.visitInvertedUnitSync) this._visitor.visitInvertedUnitSync(schemaItem); break; case SchemaItemType.KindOfQuantity: if (this._visitor.visitKindOfQuantitySync) this._visitor.visitKindOfQuantitySync(schemaItem); break; case SchemaItemType.Mixin: if (this._visitor.visitMixinSync) this._visitor.visitMixinSync(schemaItem); break; case SchemaItemType.Phenomenon: if (this._visitor.visitPhenomenonSync) this._visitor.visitPhenomenonSync(schemaItem); break; case SchemaItemType.PropertyCategory: if (this._visitor.visitPropertyCategorySync) this._visitor.visitPropertyCategorySync(schemaItem); break; case SchemaItemType.RelationshipClass: if (this._visitor.visitRelationshipClassSync) this._visitor.visitRelationshipClassSync(schemaItem); break; case SchemaItemType.StructClass: if (this._visitor.visitStructClassSync) this._visitor.visitStructClassSync(schemaItem); break; case SchemaItemType.Unit: if (this._visitor.visitUnitSync) this._visitor.visitUnitSync(schemaItem); break; case SchemaItemType.UnitSystem: if (this._visitor.visitUnitSystemSync) this._visitor.visitUnitSystemSync(schemaItem); break; } } } //# sourceMappingURL=SchemaPartVisitorDelegate.js.map