@itwin/ecschema-metadata
Version:
ECObjects core concepts in typescript
210 lines • 9.94 kB
JavaScript
/*---------------------------------------------------------------------------------------------
* 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