@itwin/imodel-transformer 1.0.1-dev.0 → 1.1.1-dev.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +49 -1
- package/README.md +17 -0
- package/lib/cjs/Algo.d.ts +7 -0
- package/lib/cjs/Algo.d.ts.map +1 -1
- package/lib/cjs/Algo.js +7 -0
- package/lib/cjs/Algo.js.map +1 -1
- package/lib/cjs/BigMap.d.ts +6 -1
- package/lib/cjs/BigMap.d.ts.map +1 -1
- package/lib/cjs/BigMap.js +28 -2
- package/lib/cjs/BigMap.js.map +1 -1
- package/lib/cjs/BranchProvenanceInitializer.d.ts.map +1 -1
- package/lib/cjs/BranchProvenanceInitializer.js +2 -0
- package/lib/cjs/BranchProvenanceInitializer.js.map +1 -1
- package/lib/cjs/DetachedExportElementAspectsStrategy.js.map +1 -1
- package/lib/cjs/ECReferenceTypesCache.d.ts.map +1 -1
- package/lib/cjs/ECReferenceTypesCache.js +8 -0
- package/lib/cjs/ECReferenceTypesCache.js.map +1 -1
- package/lib/cjs/ECSqlReaderAsyncIterableIteratorAdapter.js.map +1 -1
- package/lib/cjs/ElementCascadingDeleter.js.map +1 -1
- package/lib/cjs/EntityUnifier.d.ts.map +1 -1
- package/lib/cjs/EntityUnifier.js.map +1 -1
- package/lib/cjs/ExportElementAspectsStrategy.js.map +1 -1
- package/lib/cjs/ExportElementAspectsWithElementsStrategy.js.map +1 -1
- package/lib/cjs/IModelCloneContext.d.ts +1 -4
- package/lib/cjs/IModelCloneContext.d.ts.map +1 -1
- package/lib/cjs/IModelCloneContext.js +16 -31
- package/lib/cjs/IModelCloneContext.js.map +1 -1
- package/lib/cjs/IModelExporter.d.ts +67 -62
- package/lib/cjs/IModelExporter.d.ts.map +1 -1
- package/lib/cjs/IModelExporter.js +173 -83
- package/lib/cjs/IModelExporter.js.map +1 -1
- package/lib/cjs/IModelImporter.d.ts +31 -47
- package/lib/cjs/IModelImporter.d.ts.map +1 -1
- package/lib/cjs/IModelImporter.js +62 -72
- package/lib/cjs/IModelImporter.js.map +1 -1
- package/lib/cjs/IModelTransformer.d.ts +146 -210
- package/lib/cjs/IModelTransformer.d.ts.map +1 -1
- package/lib/cjs/IModelTransformer.js +515 -657
- package/lib/cjs/IModelTransformer.js.map +1 -1
- package/lib/cjs/{transformer.d.ts → imodel-transformer.d.ts} +1 -1
- package/lib/cjs/imodel-transformer.d.ts.map +1 -0
- package/lib/cjs/{transformer.js → imodel-transformer.js} +13 -3
- package/lib/cjs/imodel-transformer.js.map +1 -0
- package/package.json +22 -20
- package/lib/cjs/PendingReferenceMap.d.ts +0 -37
- package/lib/cjs/PendingReferenceMap.d.ts.map +0 -1
- package/lib/cjs/PendingReferenceMap.js +0 -92
- package/lib/cjs/PendingReferenceMap.js.map +0 -1
- package/lib/cjs/transformer.d.ts.map +0 -1
- package/lib/cjs/transformer.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExportElementAspectsStrategy.js","sourceRoot":"","sources":["../../src/ExportElementAspectsStrategy.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;;;AAQhG,sDAAyD;AACzD,2EAAwE;AAGxE,MAAM,cAAc,GAAG,qDAAyB,CAAC,cAAc,CAAC;AAgBhE;;;;GAIG;AACH,MAAsB,4BAA4B;IAYhD,YAAmB,QAAkB,EAAE,OAA8B;QAXrE,6HAA6H;QACnH,kCAA6B,GAAG,IAAI,GAAG,EAAwB,CAAC;QAC1E,mHAAmH;QACnG,wCAAmC,GAAG,IAAI,GAAG,EAAU,CAAC;QAStE,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAOS,yBAAyB,CAAC,MAAqB;QACvD,KAAK,MAAM,0BAA0B,IAAI,IAAI;aAC1C,6BAA6B,EAAE;
|
|
1
|
+
{"version":3,"file":"ExportElementAspectsStrategy.js","sourceRoot":"","sources":["../../src/ExportElementAspectsStrategy.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;;;AAQhG,sDAAyD;AACzD,2EAAwE;AAGxE,MAAM,cAAc,GAAG,qDAAyB,CAAC,cAAc,CAAC;AAgBhE;;;;GAIG;AACH,MAAsB,4BAA4B;IAYhD,YAAmB,QAAkB,EAAE,OAA8B;QAXrE,6HAA6H;QACnH,kCAA6B,GAAG,IAAI,GAAG,EAAwB,CAAC;QAC1E,mHAAmH;QACnG,wCAAmC,GAAG,IAAI,GAAG,EAAU,CAAC;QAStE,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAOS,yBAAyB,CAAC,MAAqB;QACvD,KAAK,MAAM,0BAA0B,IAAI,IAAI;aAC1C,6BAA6B,EAAE,CAAC;YACjC,IAAI,MAAM,YAAY,0BAA0B,EAAE,CAAC;gBACjD,qBAAM,CAAC,OAAO,CACZ,cAAc,EACd,oCAAoC,MAAM,CAAC,aAAa,EAAE,CAC3D,CAAC;gBACF,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QACD,gGAAgG;QAChG,OAAO,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAC;IACxD,CAAC;IAEM,gBAAgB,CAAC,aAAkC;QACxD,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,CAAC;IAEM,gCAAgC,CACrC,mCAA6C;QAE5C,IAAI,CAAC,mCAA2C,GAAG,IAAI,GAAG,CACzD,mCAAmC,CACpC,CAAC;QACF,IAAI,CAAC,6BAA6B,GAAG,IAAI,GAAG,CAC1C,mCAAmC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAC5C,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAC5B,CACF,CAAC;IACJ,CAAC;IAEM,yBAAyB,CAAC,aAAqB;QACpD,IAAI,CAAC,mCAAmC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,gDAAgD;QAC7G,IAAI,CAAC,6BAA6B,CAAC,GAAG,CACpC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAuB,aAAa,CAAC,CAC9D,CAAC,CAAC,gDAAgD;IACrD,CAAC;CACF;AA5DD,oEA4DC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport {\n ElementAspect,\n ElementMultiAspect,\n ElementUniqueAspect,\n IModelDb,\n} from \"@itwin/core-backend\";\nimport { Id64String, Logger } from \"@itwin/core-bentley\";\nimport { TransformerLoggerCategory } from \"./TransformerLoggerCategory\";\nimport { ChangedInstanceOps } from \"./IModelExporter\";\n\nconst loggerCategory = TransformerLoggerCategory.IModelExporter;\n\n/**\n * Handler for [[ExportElementAspectsStrategy]]\n * @internal\n */\nexport interface ElementAspectsHandler {\n shouldExportElementAspect(aspect: ElementAspect): boolean;\n onExportElementUniqueAspect(\n uniqueAspect: ElementUniqueAspect,\n isUpdate?: boolean | undefined\n ): void;\n onExportElementMultiAspects(multiAspects: ElementMultiAspect[]): void;\n trackProgress: () => Promise<void>;\n}\n\n/**\n * Base ElementAspect export strategy. Base export strategy includes state saving and loading and\n * ElementAspect filtering.\n * @internal\n */\nexport abstract class ExportElementAspectsStrategy {\n /** The set of classes of ElementAspects that will be excluded (polymorphically) from transformation to the target iModel. */\n protected _excludedElementAspectClasses = new Set<typeof ElementAspect>();\n /** The set of classFullNames for ElementAspects that will be excluded from transformation to the target iModel. */\n public readonly excludedElementAspectClassFullNames = new Set<string>();\n\n protected sourceDb: IModelDb;\n\n protected aspectChanges: ChangedInstanceOps | undefined;\n\n protected handler: ElementAspectsHandler;\n\n public constructor(sourceDb: IModelDb, handler: ElementAspectsHandler) {\n this.sourceDb = sourceDb;\n this.handler = handler;\n }\n\n public abstract exportElementAspectsForElement(\n _elementId: Id64String\n ): Promise<void>;\n public abstract exportAllElementAspects(): Promise<void>;\n\n protected shouldExportElementAspect(aspect: ElementAspect): boolean {\n for (const excludedElementAspectClass of this\n ._excludedElementAspectClasses) {\n if (aspect instanceof excludedElementAspectClass) {\n Logger.logInfo(\n loggerCategory,\n `Excluded ElementAspect by class: ${aspect.classFullName}`\n );\n return false;\n }\n }\n // ElementAspect has passed standard exclusion rules, now give handler a chance to accept/reject\n return this.handler.shouldExportElementAspect(aspect);\n }\n\n public setAspectChanges(aspectChanges?: ChangedInstanceOps) {\n this.aspectChanges = aspectChanges;\n }\n\n public loadExcludedElementAspectClasses(\n excludedElementAspectClassFullNames: string[]\n ): void {\n (this.excludedElementAspectClassFullNames as any) = new Set(\n excludedElementAspectClassFullNames\n );\n this._excludedElementAspectClasses = new Set(\n excludedElementAspectClassFullNames.map((c) =>\n this.sourceDb.getJsClass(c)\n )\n );\n }\n\n public excludeElementAspectClass(classFullName: string): void {\n this.excludedElementAspectClassFullNames.add(classFullName); // allows non-polymorphic exclusion before query\n this._excludedElementAspectClasses.add(\n this.sourceDb.getJsClass<typeof ElementAspect>(classFullName)\n ); // allows polymorphic exclusion after query/load\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExportElementAspectsWithElementsStrategy.js","sourceRoot":"","sources":["../../src/ExportElementAspectsWithElementsStrategy.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;;;AAEhG,sDAA8E;AAE9E,iFAA8E;AAE9E;;;;GAIG;AACH,MAAa,wCAAyC,SAAQ,2DAA4B;IACxE,KAAK,CAAC,8BAA8B,CAClD,SAAqB;QAErB,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,GAAG,CACtC,IAAI,CAAC,QAAQ,CAAC,QAAQ;aACnB,aAAa,CACZ,SAAS,EACT,kCAAmB,CAAC,aAAa,EACjC,IAAI,CAAC,mCAAmC,CACzC;aACA,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC;aAChD,GAAG,CAAC,KAAK,EAAE,YAAiC,EAAE,EAAE;YAC/C,MAAM,cAAc,GAClB,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC;YAC9D,MAAM,cAAc,GAClB,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC;YAC9D,MAAM,QAAQ,GACZ,IAAI,CAAC,aAAa,KAAK,SAAS;gBAChC,cAAc;gBACd,cAAc,CAAC;YACjB,IAAI,QAAQ,EAAE;
|
|
1
|
+
{"version":3,"file":"ExportElementAspectsWithElementsStrategy.js","sourceRoot":"","sources":["../../src/ExportElementAspectsWithElementsStrategy.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;;;AAEhG,sDAA8E;AAE9E,iFAA8E;AAE9E;;;;GAIG;AACH,MAAa,wCAAyC,SAAQ,2DAA4B;IACxE,KAAK,CAAC,8BAA8B,CAClD,SAAqB;QAErB,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,GAAG,CACtC,IAAI,CAAC,QAAQ,CAAC,QAAQ;aACnB,aAAa,CACZ,SAAS,EACT,kCAAmB,CAAC,aAAa,EACjC,IAAI,CAAC,mCAAmC,CACzC;aACA,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC;aAChD,GAAG,CAAC,KAAK,EAAE,YAAiC,EAAE,EAAE;YAC/C,MAAM,cAAc,GAClB,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC;YAC9D,MAAM,cAAc,GAClB,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC;YAC9D,MAAM,QAAQ,GACZ,IAAI,CAAC,aAAa,KAAK,SAAS;gBAChC,cAAc;gBACd,cAAc,CAAC;YACjB,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa;oBACtC,CAAC,CAAC,cAAc;oBAChB,CAAC,CAAC,SAAS,CAAC;gBACd,IAAI,CAAC,OAAO,CAAC,2BAA2B,CACtC,YAAY,EACZ,aAAa,CACd,CAAC;gBACF,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;YACrC,CAAC;QACH,CAAC,CAAC,CACL,CAAC;QAEF,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ;aACxC,aAAa,CACZ,SAAS,EACT,iCAAkB,CAAC,aAAa,EAChC,IAAI,CAAC,mCAAmC,CACzC;aACA,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,CAAC;QAEpD,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC,OAAO,CAAC,2BAA2B,CAAC,YAAY,CAAC,CAAC;YACvD,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;QACtC,CAAC;IACH,CAAC;IAEe,KAAK,CAAC,uBAAuB;QAC3C,gGAAgG;IAClG,CAAC;CACF;AAnDD,4FAmDC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport { ElementMultiAspect, ElementUniqueAspect } from \"@itwin/core-backend\";\nimport { Id64String } from \"@itwin/core-bentley\";\nimport { ExportElementAspectsStrategy } from \"./ExportElementAspectsStrategy\";\n\n/**\n * ElementAspect export strategy for [[IModelExporter]].\n * This strategy exports ElementAspects together with their Elements.\n * @internal\n */\nexport class ExportElementAspectsWithElementsStrategy extends ExportElementAspectsStrategy {\n public override async exportElementAspectsForElement(\n elementId: Id64String\n ): Promise<void> {\n const _uniqueAspects = await Promise.all(\n this.sourceDb.elements\n ._queryAspects(\n elementId,\n ElementUniqueAspect.classFullName,\n this.excludedElementAspectClassFullNames\n )\n .filter((a) => this.shouldExportElementAspect(a))\n .map(async (uniqueAspect: ElementUniqueAspect) => {\n const isInsertChange =\n this.aspectChanges?.insertIds.has(uniqueAspect.id) ?? false;\n const isUpdateChange =\n this.aspectChanges?.updateIds.has(uniqueAspect.id) ?? false;\n const doExport =\n this.aspectChanges === undefined ||\n isInsertChange ||\n isUpdateChange;\n if (doExport) {\n const isKnownUpdate = this.aspectChanges\n ? isUpdateChange\n : undefined;\n this.handler.onExportElementUniqueAspect(\n uniqueAspect,\n isKnownUpdate\n );\n await this.handler.trackProgress();\n }\n })\n );\n\n const multiAspects = this.sourceDb.elements\n ._queryAspects(\n elementId,\n ElementMultiAspect.classFullName,\n this.excludedElementAspectClassFullNames\n )\n .filter((a) => this.shouldExportElementAspect(a));\n\n if (multiAspects.length > 0) {\n this.handler.onExportElementMultiAspects(multiAspects);\n return this.handler.trackProgress();\n }\n }\n\n public override async exportAllElementAspects(): Promise<void> {\n // All aspects are exported with their owning elements and don't need to be exported separately.\n }\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Id64String } from "@itwin/core-bentley";
|
|
2
2
|
import { ElementAspectProps, ElementProps, EntityReference } from "@itwin/core-common";
|
|
3
|
-
import { Element, ElementAspect, IModelElementCloneContext, IModelJsNative
|
|
3
|
+
import { Element, ElementAspect, IModelElementCloneContext, IModelJsNative } from "@itwin/core-backend";
|
|
4
4
|
/** The context for transforming a *source* Element to a *target* Element and remapping internal identifiers to the target iModel.
|
|
5
5
|
* @beta
|
|
6
6
|
*/
|
|
@@ -29,8 +29,5 @@ export declare class IModelCloneContext extends IModelElementCloneContext {
|
|
|
29
29
|
* @internal
|
|
30
30
|
*/
|
|
31
31
|
cloneElementAspect(sourceElementAspect: ElementAspect): ElementAspectProps;
|
|
32
|
-
private static aspectRemapTableName;
|
|
33
|
-
saveStateToDb(db: SQLiteDb): void;
|
|
34
|
-
loadStateFromDb(db: SQLiteDb): void;
|
|
35
32
|
}
|
|
36
33
|
//# sourceMappingURL=IModelCloneContext.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IModelCloneContext.d.ts","sourceRoot":"","sources":["../../src/IModelCloneContext.ts"],"names":[],"mappings":"AAQA,OAAO,EAAkB,UAAU,EAAU,MAAM,qBAAqB,CAAC;AACzE,OAAO,EAIL,kBAAkB,EAClB,YAAY,EACZ,eAAe,EAOhB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,
|
|
1
|
+
{"version":3,"file":"IModelCloneContext.d.ts","sourceRoot":"","sources":["../../src/IModelCloneContext.ts"],"names":[],"mappings":"AAQA,OAAO,EAAkB,UAAU,EAAU,MAAM,qBAAqB,CAAC;AACzE,OAAO,EAIL,kBAAkB,EAClB,YAAY,EACZ,eAAe,EAOhB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAEL,OAAO,EACP,aAAa,EAEb,yBAAyB,EACzB,cAAc,EACf,MAAM,qBAAqB,CAAC;AAO7B;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,yBAAyB;IAC/D,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,iBAAiB,CAAqC;IAE9D,0HAA0H;IACpG,UAAU;IAIhC;;OAEG;IACa,YAAY,CAC1B,aAAa,EAAE,OAAO,EACtB,YAAY,CAAC,EAAE,cAAc,CAAC,mBAAmB,GAChD,YAAY;IA+Cf,uGAAuG;IAChG,kBAAkB,CACvB,cAAc,EAAE,UAAU,EAC1B,cAAc,EAAE,UAAU,GACzB,IAAI;IAIP,mEAAmE;IAC5D,mBAAmB,CAAC,cAAc,EAAE,UAAU,GAAG,IAAI;IAI5D;;OAEG;IACI,kBAAkB,CAAC,cAAc,EAAE,UAAU,GAAG,UAAU;IAIjE;;OAEG;IACI,kBAAkB,CAAC,cAAc,EAAE,eAAe,GAAG,eAAe;IAgI3E;;OAEG;IACI,kBAAkB,CACvB,mBAAmB,EAAE,aAAa,GACjC,kBAAkB;CAsCtB"}
|
|
@@ -82,7 +82,22 @@ class IModelCloneContext extends core_backend_1.IModelElementCloneContext {
|
|
|
82
82
|
if (core_bentley_1.Id64.isValid(rawId)) {
|
|
83
83
|
switch (type) {
|
|
84
84
|
case core_common_1.ConcreteEntityTypes.Model: {
|
|
85
|
-
|
|
85
|
+
let targetId;
|
|
86
|
+
/**
|
|
87
|
+
* The repository model is a singleton container which exists in all iModels which has a modelId of 0x1.
|
|
88
|
+
* It is possible to remap the root subject (id 0x1) to some other non root subject, but this is not possible for the repository model.
|
|
89
|
+
* The RepositoryModel only contains bis:Subject elements and bis:InformationpartitionElement instances (https://www.itwinjs.org/bis/domains/biscore.ecschema/#repositorymodel)
|
|
90
|
+
* The system handler for both bis:InformationPartitionElement and bis:Subject will only permit instances to be inserted into the RepositoryModel.
|
|
91
|
+
* https://www.itwinjs.org/bis/domains/biscore.ecschema/#informationpartitionelement
|
|
92
|
+
* https://www.itwinjs.org/bis/domains/biscore.ecschema/#subject
|
|
93
|
+
* Since there is a chance that the root subject is remapped to some other subject which has the same id as the repositoryModel, we need to ignore the remapping for the repository model.
|
|
94
|
+
*/
|
|
95
|
+
if (rawId === core_common_1.IModel.repositoryModelId) {
|
|
96
|
+
targetId = `m${core_common_1.IModel.repositoryModelId}`;
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
targetId = `m${this.findTargetElementId(rawId)}`;
|
|
100
|
+
}
|
|
86
101
|
// Check if the model exists, `findTargetElementId` may have worked because the element exists when the model doesn't.
|
|
87
102
|
// That can occur in the transformer since a submodeled element is imported before its submodel.
|
|
88
103
|
if (EntityUnifier_1.EntityUnifier.exists(this.targetDb, { entityReference: targetId }))
|
|
@@ -200,36 +215,6 @@ class IModelCloneContext extends core_backend_1.IModelElementCloneContext {
|
|
|
200
215
|
});
|
|
201
216
|
return targetElementAspectProps;
|
|
202
217
|
}
|
|
203
|
-
saveStateToDb(db) {
|
|
204
|
-
super.saveStateToDb(db);
|
|
205
|
-
if (core_bentley_1.DbResult.BE_SQLITE_DONE !==
|
|
206
|
-
db.executeSQL(`CREATE TABLE ${IModelCloneContext.aspectRemapTableName} (Source INTEGER, Target INTEGER)`))
|
|
207
|
-
throw Error("Failed to create the aspect remap table in the state database");
|
|
208
|
-
db.saveChanges();
|
|
209
|
-
db.withPreparedSqliteStatement(`INSERT INTO ${IModelCloneContext.aspectRemapTableName} (Source, Target) VALUES (?, ?)`, (stmt) => {
|
|
210
|
-
for (const [source, target] of this._aspectRemapTable) {
|
|
211
|
-
stmt.reset();
|
|
212
|
-
stmt.bindId(1, source);
|
|
213
|
-
stmt.bindId(2, target);
|
|
214
|
-
if (core_bentley_1.DbResult.BE_SQLITE_DONE !== stmt.step())
|
|
215
|
-
throw Error("Failed to insert aspect remapping into the state database");
|
|
216
|
-
}
|
|
217
|
-
});
|
|
218
|
-
}
|
|
219
|
-
loadStateFromDb(db) {
|
|
220
|
-
super.loadStateFromDb(db);
|
|
221
|
-
// FIXME: test this
|
|
222
|
-
db.withSqliteStatement(`SELECT Source, Target FROM ${IModelCloneContext.aspectRemapTableName}`, (stmt) => {
|
|
223
|
-
let status = core_bentley_1.DbResult.BE_SQLITE_ERROR;
|
|
224
|
-
while ((status = stmt.step()) === core_bentley_1.DbResult.BE_SQLITE_ROW) {
|
|
225
|
-
const source = stmt.getValue(0).getId();
|
|
226
|
-
const target = stmt.getValue(1).getId();
|
|
227
|
-
this._aspectRemapTable.set(source, target);
|
|
228
|
-
}
|
|
229
|
-
assert(status === core_bentley_1.DbResult.BE_SQLITE_DONE);
|
|
230
|
-
});
|
|
231
|
-
}
|
|
232
218
|
}
|
|
233
219
|
exports.IModelCloneContext = IModelCloneContext;
|
|
234
|
-
IModelCloneContext.aspectRemapTableName = "AspectIdRemaps";
|
|
235
220
|
//# sourceMappingURL=IModelCloneContext.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IModelCloneContext.js","sourceRoot":"","sources":["../../src/IModelCloneContext.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module iModels\n */\nimport * as assert from \"assert\";\nimport { DbResult, Id64, Id64String, Logger } from \"@itwin/core-bentley\";\nimport {\n Code,\n CodeScopeSpec,\n ConcreteEntityTypes,\n ElementAspectProps,\n ElementProps,\n EntityReference,\n IModel,\n IModelError,\n PrimitiveTypeCode,\n PropertyMetaData,\n RelatedElement,\n RelatedElementProps,\n} from \"@itwin/core-common\";\nimport {\n Element,\n ElementAspect,\n EntityReferences,\n IModelElementCloneContext,\n IModelJsNative,\n SQLiteDb,\n} from \"@itwin/core-backend\";\nimport { ECReferenceTypesCache } from \"./ECReferenceTypesCache\";\nimport { EntityUnifier } from \"./EntityUnifier\";\nimport { TransformerLoggerCategory } from \"./TransformerLoggerCategory\";\n\nconst loggerCategory: string = TransformerLoggerCategory.IModelCloneContext;\n\n/** The context for transforming a *source* Element to a *target* Element and remapping internal identifiers to the target iModel.\n * @beta\n */\nexport class IModelCloneContext extends IModelElementCloneContext {\n private _refTypesCache = new ECReferenceTypesCache();\n private _aspectRemapTable = new Map<Id64String, Id64String>();\n\n /** perform necessary initialization to use a clone context, namely caching the reference types in the source's schemas */\n public override async initialize() {\n await this._refTypesCache.initAllSchemasInIModel(this.sourceDb);\n }\n\n /** Clone the specified source Element into ElementProps for the target iModel.\n * @internal\n */\n public override cloneElement(\n sourceElement: Element,\n cloneOptions?: IModelJsNative.CloneElementOptions\n ): ElementProps {\n const targetElementProps: ElementProps = this[\n \"_nativeContext\"\n ].cloneElement(sourceElement.id, cloneOptions);\n // Ensure that all NavigationProperties in targetElementProps have a defined value so \"clearing\" changes will be part of the JSON used for update\n sourceElement.forEachProperty(\n (propertyName: string, meta: PropertyMetaData) => {\n if (\n meta.isNavigation &&\n undefined === (sourceElement as any)[propertyName]\n ) {\n (targetElementProps as any)[propertyName] = RelatedElement.none;\n }\n },\n false\n ); // exclude custom because C++ has already handled them\n if (this.isBetweenIModels) {\n // The native C++ cloneElement strips off federationGuid, want to put it back if transformation is between iModels\n targetElementProps.federationGuid = sourceElement.federationGuid;\n const targetElementCodeScopeType = this.targetDb.codeSpecs.getById(\n targetElementProps.code.spec\n ).scopeType;\n if (\n CodeScopeSpec.Type.Repository === targetElementCodeScopeType &&\n targetElementProps.code.scope !== IModel.rootSubjectId\n ) {\n Logger.logWarning(\n loggerCategory,\n `Incorrect CodeScope '${targetElementCodeScopeType}' is set for target element ${targetElementProps.id}`\n );\n }\n }\n // unlike other references, code cannot be null. If it is null, use an empty code instead\n // this will be updated back later as the transformer resolves references\n if (\n targetElementProps.code.scope === Id64.invalid ||\n targetElementProps.code.spec === Id64.invalid\n ) {\n targetElementProps.code = Code.createEmpty();\n }\n const jsClass = this.sourceDb.getJsClass<typeof Element>(\n sourceElement.classFullName\n );\n jsClass[\"onCloned\"](this, sourceElement.toJSON(), targetElementProps);\n return targetElementProps;\n }\n\n /** Add a rule that remaps the specified source ElementAspect to the specified target ElementAspect. */\n public remapElementAspect(\n aspectSourceId: Id64String,\n aspectTargetId: Id64String\n ): void {\n this._aspectRemapTable.set(aspectSourceId, aspectTargetId);\n }\n\n /** Remove a rule that remaps the specified source ElementAspect */\n public removeElementAspect(aspectSourceId: Id64String): void {\n this._aspectRemapTable.delete(aspectSourceId);\n }\n\n /** Look up a target AspectId from the source AspectId.\n * @returns the target AspectId or [Id64.invalid]($bentley) if a mapping not found.\n */\n public findTargetAspectId(sourceAspectId: Id64String): Id64String {\n return this._aspectRemapTable.get(sourceAspectId) ?? Id64.invalid;\n }\n\n /** Look up a target [EntityReference]($bentley) from a source [EntityReference]($bentley)\n * @returns the target CodeSpecId or a [EntityReference]($bentley) containing [Id64.invalid]($bentley) if a mapping is not found.\n */\n public findTargetEntityId(sourceEntityId: EntityReference): EntityReference {\n const [type, rawId] = EntityReferences.split(sourceEntityId);\n if (Id64.isValid(rawId)) {\n switch (type) {\n case ConcreteEntityTypes.Model: {\n const targetId = `m${this.findTargetElementId(rawId)}` as const;\n // Check if the model exists, `findTargetElementId` may have worked because the element exists when the model doesn't.\n // That can occur in the transformer since a submodeled element is imported before its submodel.\n if (\n EntityUnifier.exists(this.targetDb, { entityReference: targetId })\n )\n return targetId;\n break;\n }\n case ConcreteEntityTypes.Element:\n return `e${this.findTargetElementId(rawId)}`;\n case ConcreteEntityTypes.ElementAspect:\n return `a${this.findTargetAspectId(rawId)}`;\n case ConcreteEntityTypes.Relationship: {\n const makeGetConcreteEntityTypeSql = (property: string) => `\n CASE\n WHEN [${property}] IS (BisCore.ElementUniqueAspect) OR [${property}] IS (BisCore.ElementMultiAspect)\n THEN 'a'\n WHEN [${property}] IS (BisCore.Element)\n THEN 'e'\n WHEN [${property}] IS (BisCore.Model)\n THEN 'm'\n WHEN [${property}] IS (BisCore.CodeSpec)\n THEN 'c'\n WHEN [${property}] IS (BisCore.ElementRefersToElements) -- TODO: ElementDrivesElement still not handled by the transformer\n THEN 'r'\n ELSE 'error'\n END\n `;\n const relInSource = this.sourceDb.withPreparedStatement(\n `\n SELECT\n SourceECInstanceId,\n TargetECInstanceId,\n (${makeGetConcreteEntityTypeSql(\n \"SourceECClassId\"\n )}) AS SourceType,\n (${makeGetConcreteEntityTypeSql(\"TargetECClassId\")}) AS TargetType\n FROM BisCore:ElementRefersToElements\n WHERE ECInstanceId=?\n `,\n (stmt) => {\n stmt.bindId(1, rawId);\n let status: DbResult;\n while ((status = stmt.step()) === DbResult.BE_SQLITE_ROW) {\n const sourceId = stmt.getValue(0).getId();\n const targetId = stmt.getValue(1).getId();\n const sourceType = stmt.getValue(2).getString() as\n | ConcreteEntityTypes\n | \"error\";\n const targetType = stmt.getValue(3).getString() as\n | ConcreteEntityTypes\n | \"error\";\n if (sourceType === \"error\" || targetType === \"error\")\n throw Error(\"relationship end had unknown root class\");\n return {\n sourceId: `${sourceType}${sourceId}`,\n targetId: `${targetType}${targetId}`,\n } as const;\n }\n if (status !== DbResult.BE_SQLITE_DONE)\n throw new IModelError(status, \"unexpected query failure\");\n return undefined;\n }\n );\n if (relInSource === undefined) break;\n // just in case prevent recursion\n if (\n relInSource.sourceId === sourceEntityId ||\n relInSource.targetId === sourceEntityId\n )\n throw Error(\n \"link table relationship end was resolved to itself. This should be impossible\"\n );\n const relInTarget = {\n sourceId: this.findTargetEntityId(relInSource.sourceId),\n targetId: this.findTargetEntityId(relInSource.targetId),\n };\n // return a null\n if (\n !EntityReferences.isValid(relInTarget.sourceId) ||\n !EntityReferences.isValid(relInTarget.targetId)\n )\n break;\n const relInTargetId = this.targetDb.withPreparedStatement(\n `\n SELECT ECInstanceId\n FROM BisCore:ElementRefersToElements\n WHERE SourceECInstanceId=?\n AND TargetECInstanceId=?\n `,\n (stmt) => {\n stmt.bindId(1, EntityReferences.toId64(relInTarget.sourceId));\n stmt.bindId(2, EntityReferences.toId64(relInTarget.targetId));\n const status: DbResult = stmt.step();\n if (status === DbResult.BE_SQLITE_ROW)\n return stmt.getValue(0).getId();\n if (status !== DbResult.BE_SQLITE_DONE)\n throw new IModelError(status, \"unexpected query failure\");\n return Id64.invalid;\n }\n );\n return `r${relInTargetId}`;\n }\n }\n }\n return `${type}${Id64.invalid}`;\n }\n\n /** Clone the specified source Element into ElementProps for the target iModel.\n * @internal\n */\n public cloneElementAspect(\n sourceElementAspect: ElementAspect\n ): ElementAspectProps {\n const targetElementAspectProps: ElementAspectProps =\n sourceElementAspect.toJSON();\n targetElementAspectProps.id = undefined;\n sourceElementAspect.forEachProperty((propertyName, propertyMetaData) => {\n if (propertyMetaData.isNavigation) {\n const sourceNavProp: RelatedElementProps | undefined =\n sourceElementAspect.asAny[propertyName];\n if (sourceNavProp?.id) {\n const navPropRefType = this._refTypesCache.getNavPropRefType(\n sourceElementAspect.schemaName,\n sourceElementAspect.className,\n propertyName\n );\n assert(\n navPropRefType !== undefined,\n `nav prop ref type for '${propertyName}' was not in the cache, this is a bug.`\n );\n const targetEntityReference = this.findTargetEntityId(\n EntityReferences.fromEntityType(sourceNavProp.id, navPropRefType)\n );\n const targetEntityId = EntityReferences.toId64(targetEntityReference);\n // spread the property in case toJSON did not deep-clone\n (targetElementAspectProps as any)[propertyName] = {\n ...(targetElementAspectProps as any)[propertyName],\n id: targetEntityId,\n };\n }\n } else if (\n PrimitiveTypeCode.Long === propertyMetaData.primitiveType &&\n \"Id\" === propertyMetaData.extendedType\n ) {\n (targetElementAspectProps as any)[propertyName] =\n this.findTargetElementId(sourceElementAspect.asAny[propertyName]);\n }\n });\n return targetElementAspectProps;\n }\n\n private static aspectRemapTableName = \"AspectIdRemaps\";\n\n public override saveStateToDb(db: SQLiteDb): void {\n super.saveStateToDb(db);\n if (\n DbResult.BE_SQLITE_DONE !==\n db.executeSQL(\n `CREATE TABLE ${IModelCloneContext.aspectRemapTableName} (Source INTEGER, Target INTEGER)`\n )\n )\n throw Error(\n \"Failed to create the aspect remap table in the state database\"\n );\n db.saveChanges();\n db.withPreparedSqliteStatement(\n `INSERT INTO ${IModelCloneContext.aspectRemapTableName} (Source, Target) VALUES (?, ?)`,\n (stmt) => {\n for (const [source, target] of this._aspectRemapTable) {\n stmt.reset();\n stmt.bindId(1, source);\n stmt.bindId(2, target);\n if (DbResult.BE_SQLITE_DONE !== stmt.step())\n throw Error(\n \"Failed to insert aspect remapping into the state database\"\n );\n }\n }\n );\n }\n\n public override loadStateFromDb(db: SQLiteDb): void {\n super.loadStateFromDb(db);\n // FIXME: test this\n db.withSqliteStatement(\n `SELECT Source, Target FROM ${IModelCloneContext.aspectRemapTableName}`,\n (stmt) => {\n let status = DbResult.BE_SQLITE_ERROR;\n while ((status = stmt.step()) === DbResult.BE_SQLITE_ROW) {\n const source = stmt.getValue(0).getId();\n const target = stmt.getValue(1).getId();\n this._aspectRemapTable.set(source, target);\n }\n assert(status === DbResult.BE_SQLITE_DONE);\n }\n );\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"IModelCloneContext.js","sourceRoot":"","sources":["../../src/IModelCloneContext.ts"],"names":[],"mappings":";;;AAAA;;;gGAGgG;AAChG;;GAEG;AACH,iCAAiC;AACjC,sDAAyE;AACzE,oDAa4B;AAC5B,sDAO6B;AAC7B,mEAAgE;AAChE,mDAAgD;AAChD,2EAAwE;AAExE,MAAM,cAAc,GAAW,qDAAyB,CAAC,kBAAkB,CAAC;AAE5E;;GAEG;AACH,MAAa,kBAAmB,SAAQ,wCAAyB;IAAjE;;QACU,mBAAc,GAAG,IAAI,6CAAqB,EAAE,CAAC;QAC7C,sBAAiB,GAAG,IAAI,GAAG,EAA0B,CAAC;IA8PhE,CAAC;IA5PC,0HAA0H;IAC1G,KAAK,CAAC,UAAU;QAC9B,MAAM,IAAI,CAAC,cAAc,CAAC,sBAAsB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAClE,CAAC;IAED;;OAEG;IACa,YAAY,CAC1B,aAAsB,EACtB,YAAiD;QAEjD,MAAM,kBAAkB,GAAiB,IAAI,CAC3C,gBAAgB,CACjB,CAAC,YAAY,CAAC,aAAa,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;QAC/C,iJAAiJ;QACjJ,aAAa,CAAC,eAAe,CAC3B,CAAC,YAAoB,EAAE,IAAsB,EAAE,EAAE;YAC/C,IACE,IAAI,CAAC,YAAY;gBACjB,SAAS,KAAM,aAAqB,CAAC,YAAY,CAAC,EAClD,CAAC;gBACA,kBAA0B,CAAC,YAAY,CAAC,GAAG,4BAAc,CAAC,IAAI,CAAC;YAClE,CAAC;QACH,CAAC,EACD,KAAK,CACN,CAAC,CAAC,sDAAsD;QACzD,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,kHAAkH;YAClH,kBAAkB,CAAC,cAAc,GAAG,aAAa,CAAC,cAAc,CAAC;YACjE,MAAM,0BAA0B,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAChE,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAC7B,CAAC,SAAS,CAAC;YACZ,IACE,2BAAa,CAAC,IAAI,CAAC,UAAU,KAAK,0BAA0B;gBAC5D,kBAAkB,CAAC,IAAI,CAAC,KAAK,KAAK,oBAAM,CAAC,aAAa,EACtD,CAAC;gBACD,qBAAM,CAAC,UAAU,CACf,cAAc,EACd,wBAAwB,0BAA0B,+BAA+B,kBAAkB,CAAC,EAAE,EAAE,CACzG,CAAC;YACJ,CAAC;QACH,CAAC;QACD,yFAAyF;QACzF,yEAAyE;QACzE,IACE,kBAAkB,CAAC,IAAI,CAAC,KAAK,KAAK,mBAAI,CAAC,OAAO;YAC9C,kBAAkB,CAAC,IAAI,CAAC,IAAI,KAAK,mBAAI,CAAC,OAAO,EAC7C,CAAC;YACD,kBAAkB,CAAC,IAAI,GAAG,kBAAI,CAAC,WAAW,EAAE,CAAC;QAC/C,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CACtC,aAAa,CAAC,aAAa,CAC5B,CAAC;QACF,OAAO,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,aAAa,CAAC,MAAM,EAAE,EAAE,kBAAkB,CAAC,CAAC;QACtE,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IAED,uGAAuG;IAChG,kBAAkB,CACvB,cAA0B,EAC1B,cAA0B;QAE1B,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;IAC7D,CAAC;IAED,mEAAmE;IAC5D,mBAAmB,CAAC,cAA0B;QACnD,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IAChD,CAAC;IAED;;OAEG;IACI,kBAAkB,CAAC,cAA0B;QAClD,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,mBAAI,CAAC,OAAO,CAAC;IACpE,CAAC;IAED;;OAEG;IACI,kBAAkB,CAAC,cAA+B;QACvD,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,+BAAgB,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAC7D,IAAI,mBAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACxB,QAAQ,IAAI,EAAE,CAAC;gBACb,KAAK,iCAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;oBAC/B,IAAI,QAAQ,CAAC;oBACb;;;;;;;;uBAQG;oBACH,IAAI,KAAK,KAAK,oBAAM,CAAC,iBAAiB,EAAE,CAAC;wBACvC,QAAQ,GAAG,IAAI,oBAAM,CAAC,iBAAiB,EAAW,CAAC;oBACrD,CAAC;yBAAM,CAAC;wBACN,QAAQ,GAAG,IAAI,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAW,CAAC;oBAC5D,CAAC;oBACD,sHAAsH;oBACtH,gGAAgG;oBAChG,IACE,6BAAa,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC;wBAElE,OAAO,QAAQ,CAAC;oBAClB,MAAM;gBACR,CAAC;gBACD,KAAK,iCAAmB,CAAC,OAAO;oBAC9B,OAAO,IAAI,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC/C,KAAK,iCAAmB,CAAC,aAAa;oBACpC,OAAO,IAAI,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC9C,KAAK,iCAAmB,CAAC,YAAY,CAAC,CAAC,CAAC;oBACtC,MAAM,4BAA4B,GAAG,CAAC,QAAgB,EAAE,EAAE,CAAC;;sBAE/C,QAAQ,0CAA0C,QAAQ;;sBAE1D,QAAQ;;sBAER,QAAQ;;sBAER,QAAQ;;sBAER,QAAQ;;;;WAInB,CAAC;oBACF,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CACrD;;;;iBAIK,4BAA4B,CAC7B,iBAAiB,CAClB;iBACE,4BAA4B,CAAC,iBAAiB,CAAC;;;aAGnD,EACD,CAAC,IAAI,EAAE,EAAE;wBACP,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;wBACtB,IAAI,MAAgB,CAAC;wBACrB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,uBAAQ,CAAC,aAAa,EAAE,CAAC;4BACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;4BAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;4BAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,EAElC,CAAC;4BACZ,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,EAElC,CAAC;4BACZ,IAAI,UAAU,KAAK,OAAO,IAAI,UAAU,KAAK,OAAO;gCAClD,MAAM,KAAK,CAAC,yCAAyC,CAAC,CAAC;4BACzD,OAAO;gCACL,QAAQ,EAAE,GAAG,UAAU,GAAG,QAAQ,EAAE;gCACpC,QAAQ,EAAE,GAAG,UAAU,GAAG,QAAQ,EAAE;6BAC5B,CAAC;wBACb,CAAC;wBACD,IAAI,MAAM,KAAK,uBAAQ,CAAC,cAAc;4BACpC,MAAM,IAAI,yBAAW,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAC;wBAC5D,OAAO,SAAS,CAAC;oBACnB,CAAC,CACF,CAAC;oBACF,IAAI,WAAW,KAAK,SAAS;wBAAE,MAAM;oBACrC,iCAAiC;oBACjC,IACE,WAAW,CAAC,QAAQ,KAAK,cAAc;wBACvC,WAAW,CAAC,QAAQ,KAAK,cAAc;wBAEvC,MAAM,KAAK,CACT,+EAA+E,CAChF,CAAC;oBACJ,MAAM,WAAW,GAAG;wBAClB,QAAQ,EAAE,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,QAAQ,CAAC;wBACvD,QAAQ,EAAE,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,QAAQ,CAAC;qBACxD,CAAC;oBACF,gBAAgB;oBAChB,IACE,CAAC,+BAAgB,CAAC,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC;wBAC/C,CAAC,+BAAgB,CAAC,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC;wBAE/C,MAAM;oBACR,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CACvD;;;;;aAKC,EACD,CAAC,IAAI,EAAE,EAAE;wBACP,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,+BAAgB,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;wBAC9D,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,+BAAgB,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;wBAC9D,MAAM,MAAM,GAAa,IAAI,CAAC,IAAI,EAAE,CAAC;wBACrC,IAAI,MAAM,KAAK,uBAAQ,CAAC,aAAa;4BACnC,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;wBAClC,IAAI,MAAM,KAAK,uBAAQ,CAAC,cAAc;4BACpC,MAAM,IAAI,yBAAW,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAC;wBAC5D,OAAO,mBAAI,CAAC,OAAO,CAAC;oBACtB,CAAC,CACF,CAAC;oBACF,OAAO,IAAI,aAAa,EAAE,CAAC;gBAC7B,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,GAAG,IAAI,GAAG,mBAAI,CAAC,OAAO,EAAE,CAAC;IAClC,CAAC;IAED;;OAEG;IACI,kBAAkB,CACvB,mBAAkC;QAElC,MAAM,wBAAwB,GAC5B,mBAAmB,CAAC,MAAM,EAAE,CAAC;QAC/B,wBAAwB,CAAC,EAAE,GAAG,SAAS,CAAC;QACxC,mBAAmB,CAAC,eAAe,CAAC,CAAC,YAAY,EAAE,gBAAgB,EAAE,EAAE;YACrE,IAAI,gBAAgB,CAAC,YAAY,EAAE,CAAC;gBAClC,MAAM,aAAa,GACjB,mBAAmB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;gBAC1C,IAAI,aAAa,EAAE,EAAE,EAAE,CAAC;oBACtB,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAC1D,mBAAmB,CAAC,UAAU,EAC9B,mBAAmB,CAAC,SAAS,EAC7B,YAAY,CACb,CAAC;oBACF,MAAM,CACJ,cAAc,KAAK,SAAS,EAC5B,0BAA0B,YAAY,wCAAwC,CAC/E,CAAC;oBACF,MAAM,qBAAqB,GAAG,IAAI,CAAC,kBAAkB,CACnD,+BAAgB,CAAC,cAAc,CAAC,aAAa,CAAC,EAAE,EAAE,cAAc,CAAC,CAClE,CAAC;oBACF,MAAM,cAAc,GAAG,+BAAgB,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;oBACtE,wDAAwD;oBACvD,wBAAgC,CAAC,YAAY,CAAC,GAAG;wBAChD,GAAI,wBAAgC,CAAC,YAAY,CAAC;wBAClD,EAAE,EAAE,cAAc;qBACnB,CAAC;gBACJ,CAAC;YACH,CAAC;iBAAM,IACL,+BAAiB,CAAC,IAAI,KAAK,gBAAgB,CAAC,aAAa;gBACzD,IAAI,KAAK,gBAAgB,CAAC,YAAY,EACtC,CAAC;gBACA,wBAAgC,CAAC,YAAY,CAAC;oBAC7C,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;YACtE,CAAC;QACH,CAAC,CAAC,CAAC;QACH,OAAO,wBAAwB,CAAC;IAClC,CAAC;CACF;AAhQD,gDAgQC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module iModels\n */\nimport * as assert from \"assert\";\nimport { DbResult, Id64, Id64String, Logger } from \"@itwin/core-bentley\";\nimport {\n Code,\n CodeScopeSpec,\n ConcreteEntityTypes,\n ElementAspectProps,\n ElementProps,\n EntityReference,\n IModel,\n IModelError,\n PrimitiveTypeCode,\n PropertyMetaData,\n RelatedElement,\n RelatedElementProps,\n} from \"@itwin/core-common\";\nimport {\n // eslint-disable-next-line @typescript-eslint/no-redeclare\n Element,\n ElementAspect,\n EntityReferences,\n IModelElementCloneContext,\n IModelJsNative,\n} from \"@itwin/core-backend\";\nimport { ECReferenceTypesCache } from \"./ECReferenceTypesCache\";\nimport { EntityUnifier } from \"./EntityUnifier\";\nimport { TransformerLoggerCategory } from \"./TransformerLoggerCategory\";\n\nconst loggerCategory: string = TransformerLoggerCategory.IModelCloneContext;\n\n/** The context for transforming a *source* Element to a *target* Element and remapping internal identifiers to the target iModel.\n * @beta\n */\nexport class IModelCloneContext extends IModelElementCloneContext {\n private _refTypesCache = new ECReferenceTypesCache();\n private _aspectRemapTable = new Map<Id64String, Id64String>();\n\n /** perform necessary initialization to use a clone context, namely caching the reference types in the source's schemas */\n public override async initialize() {\n await this._refTypesCache.initAllSchemasInIModel(this.sourceDb);\n }\n\n /** Clone the specified source Element into ElementProps for the target iModel.\n * @internal\n */\n public override cloneElement(\n sourceElement: Element,\n cloneOptions?: IModelJsNative.CloneElementOptions\n ): ElementProps {\n const targetElementProps: ElementProps = this[\n \"_nativeContext\"\n ].cloneElement(sourceElement.id, cloneOptions);\n // Ensure that all NavigationProperties in targetElementProps have a defined value so \"clearing\" changes will be part of the JSON used for update\n sourceElement.forEachProperty(\n (propertyName: string, meta: PropertyMetaData) => {\n if (\n meta.isNavigation &&\n undefined === (sourceElement as any)[propertyName]\n ) {\n (targetElementProps as any)[propertyName] = RelatedElement.none;\n }\n },\n false\n ); // exclude custom because C++ has already handled them\n if (this.isBetweenIModels) {\n // The native C++ cloneElement strips off federationGuid, want to put it back if transformation is between iModels\n targetElementProps.federationGuid = sourceElement.federationGuid;\n const targetElementCodeScopeType = this.targetDb.codeSpecs.getById(\n targetElementProps.code.spec\n ).scopeType;\n if (\n CodeScopeSpec.Type.Repository === targetElementCodeScopeType &&\n targetElementProps.code.scope !== IModel.rootSubjectId\n ) {\n Logger.logWarning(\n loggerCategory,\n `Incorrect CodeScope '${targetElementCodeScopeType}' is set for target element ${targetElementProps.id}`\n );\n }\n }\n // unlike other references, code cannot be null. If it is null, use an empty code instead\n // this will be updated back later as the transformer resolves references\n if (\n targetElementProps.code.scope === Id64.invalid ||\n targetElementProps.code.spec === Id64.invalid\n ) {\n targetElementProps.code = Code.createEmpty();\n }\n const jsClass = this.sourceDb.getJsClass<typeof Element>(\n sourceElement.classFullName\n );\n jsClass[\"onCloned\"](this, sourceElement.toJSON(), targetElementProps);\n return targetElementProps;\n }\n\n /** Add a rule that remaps the specified source ElementAspect to the specified target ElementAspect. */\n public remapElementAspect(\n aspectSourceId: Id64String,\n aspectTargetId: Id64String\n ): void {\n this._aspectRemapTable.set(aspectSourceId, aspectTargetId);\n }\n\n /** Remove a rule that remaps the specified source ElementAspect */\n public removeElementAspect(aspectSourceId: Id64String): void {\n this._aspectRemapTable.delete(aspectSourceId);\n }\n\n /** Look up a target AspectId from the source AspectId.\n * @returns the target AspectId or [Id64.invalid]($bentley) if a mapping not found.\n */\n public findTargetAspectId(sourceAspectId: Id64String): Id64String {\n return this._aspectRemapTable.get(sourceAspectId) ?? Id64.invalid;\n }\n\n /** Look up a target [EntityReference]($bentley) from a source [EntityReference]($bentley)\n * @returns the target CodeSpecId or a [EntityReference]($bentley) containing [Id64.invalid]($bentley) if a mapping is not found.\n */\n public findTargetEntityId(sourceEntityId: EntityReference): EntityReference {\n const [type, rawId] = EntityReferences.split(sourceEntityId);\n if (Id64.isValid(rawId)) {\n switch (type) {\n case ConcreteEntityTypes.Model: {\n let targetId;\n /**\n * The repository model is a singleton container which exists in all iModels which has a modelId of 0x1.\n * It is possible to remap the root subject (id 0x1) to some other non root subject, but this is not possible for the repository model.\n * The RepositoryModel only contains bis:Subject elements and bis:InformationpartitionElement instances (https://www.itwinjs.org/bis/domains/biscore.ecschema/#repositorymodel)\n * The system handler for both bis:InformationPartitionElement and bis:Subject will only permit instances to be inserted into the RepositoryModel.\n * https://www.itwinjs.org/bis/domains/biscore.ecschema/#informationpartitionelement\n * https://www.itwinjs.org/bis/domains/biscore.ecschema/#subject\n * Since there is a chance that the root subject is remapped to some other subject which has the same id as the repositoryModel, we need to ignore the remapping for the repository model.\n */\n if (rawId === IModel.repositoryModelId) {\n targetId = `m${IModel.repositoryModelId}` as const;\n } else {\n targetId = `m${this.findTargetElementId(rawId)}` as const;\n }\n // Check if the model exists, `findTargetElementId` may have worked because the element exists when the model doesn't.\n // That can occur in the transformer since a submodeled element is imported before its submodel.\n if (\n EntityUnifier.exists(this.targetDb, { entityReference: targetId })\n )\n return targetId;\n break;\n }\n case ConcreteEntityTypes.Element:\n return `e${this.findTargetElementId(rawId)}`;\n case ConcreteEntityTypes.ElementAspect:\n return `a${this.findTargetAspectId(rawId)}`;\n case ConcreteEntityTypes.Relationship: {\n const makeGetConcreteEntityTypeSql = (property: string) => `\n CASE\n WHEN [${property}] IS (BisCore.ElementUniqueAspect) OR [${property}] IS (BisCore.ElementMultiAspect)\n THEN 'a'\n WHEN [${property}] IS (BisCore.Element)\n THEN 'e'\n WHEN [${property}] IS (BisCore.Model)\n THEN 'm'\n WHEN [${property}] IS (BisCore.CodeSpec)\n THEN 'c'\n WHEN [${property}] IS (BisCore.ElementRefersToElements) -- TODO: ElementDrivesElement still not handled by the transformer\n THEN 'r'\n ELSE 'error'\n END\n `;\n const relInSource = this.sourceDb.withPreparedStatement(\n `\n SELECT\n SourceECInstanceId,\n TargetECInstanceId,\n (${makeGetConcreteEntityTypeSql(\n \"SourceECClassId\"\n )}) AS SourceType,\n (${makeGetConcreteEntityTypeSql(\"TargetECClassId\")}) AS TargetType\n FROM BisCore:ElementRefersToElements\n WHERE ECInstanceId=?\n `,\n (stmt) => {\n stmt.bindId(1, rawId);\n let status: DbResult;\n while ((status = stmt.step()) === DbResult.BE_SQLITE_ROW) {\n const sourceId = stmt.getValue(0).getId();\n const targetId = stmt.getValue(1).getId();\n const sourceType = stmt.getValue(2).getString() as\n | ConcreteEntityTypes\n | \"error\";\n const targetType = stmt.getValue(3).getString() as\n | ConcreteEntityTypes\n | \"error\";\n if (sourceType === \"error\" || targetType === \"error\")\n throw Error(\"relationship end had unknown root class\");\n return {\n sourceId: `${sourceType}${sourceId}`,\n targetId: `${targetType}${targetId}`,\n } as const;\n }\n if (status !== DbResult.BE_SQLITE_DONE)\n throw new IModelError(status, \"unexpected query failure\");\n return undefined;\n }\n );\n if (relInSource === undefined) break;\n // just in case prevent recursion\n if (\n relInSource.sourceId === sourceEntityId ||\n relInSource.targetId === sourceEntityId\n )\n throw Error(\n \"link table relationship end was resolved to itself. This should be impossible\"\n );\n const relInTarget = {\n sourceId: this.findTargetEntityId(relInSource.sourceId),\n targetId: this.findTargetEntityId(relInSource.targetId),\n };\n // return a null\n if (\n !EntityReferences.isValid(relInTarget.sourceId) ||\n !EntityReferences.isValid(relInTarget.targetId)\n )\n break;\n const relInTargetId = this.targetDb.withPreparedStatement(\n `\n SELECT ECInstanceId\n FROM BisCore:ElementRefersToElements\n WHERE SourceECInstanceId=?\n AND TargetECInstanceId=?\n `,\n (stmt) => {\n stmt.bindId(1, EntityReferences.toId64(relInTarget.sourceId));\n stmt.bindId(2, EntityReferences.toId64(relInTarget.targetId));\n const status: DbResult = stmt.step();\n if (status === DbResult.BE_SQLITE_ROW)\n return stmt.getValue(0).getId();\n if (status !== DbResult.BE_SQLITE_DONE)\n throw new IModelError(status, \"unexpected query failure\");\n return Id64.invalid;\n }\n );\n return `r${relInTargetId}`;\n }\n }\n }\n return `${type}${Id64.invalid}`;\n }\n\n /** Clone the specified source Element into ElementProps for the target iModel.\n * @internal\n */\n public cloneElementAspect(\n sourceElementAspect: ElementAspect\n ): ElementAspectProps {\n const targetElementAspectProps: ElementAspectProps =\n sourceElementAspect.toJSON();\n targetElementAspectProps.id = undefined;\n sourceElementAspect.forEachProperty((propertyName, propertyMetaData) => {\n if (propertyMetaData.isNavigation) {\n const sourceNavProp: RelatedElementProps | undefined =\n sourceElementAspect.asAny[propertyName];\n if (sourceNavProp?.id) {\n const navPropRefType = this._refTypesCache.getNavPropRefType(\n sourceElementAspect.schemaName,\n sourceElementAspect.className,\n propertyName\n );\n assert(\n navPropRefType !== undefined,\n `nav prop ref type for '${propertyName}' was not in the cache, this is a bug.`\n );\n const targetEntityReference = this.findTargetEntityId(\n EntityReferences.fromEntityType(sourceNavProp.id, navPropRefType)\n );\n const targetEntityId = EntityReferences.toId64(targetEntityReference);\n // spread the property in case toJSON did not deep-clone\n (targetElementAspectProps as any)[propertyName] = {\n ...(targetElementAspectProps as any)[propertyName],\n id: targetEntityId,\n };\n }\n } else if (\n PrimitiveTypeCode.Long === propertyMetaData.primitiveType &&\n \"Id\" === propertyMetaData.extendedType\n ) {\n (targetElementAspectProps as any)[propertyName] =\n this.findTargetElementId(sourceElementAspect.asAny[propertyName]);\n }\n });\n return targetElementAspectProps;\n }\n}\n"]}
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
/** @packageDocumentation
|
|
2
2
|
* @module iModels
|
|
3
3
|
*/
|
|
4
|
-
import { BriefcaseDb, ChangedECInstance, Element, ElementAspect, ElementMultiAspect, ElementUniqueAspect, IModelDb, IModelJsNative, Model, Relationship } from "@itwin/core-backend";
|
|
5
|
-
import {
|
|
4
|
+
import { BriefcaseDb, ChangedECInstance, Element, ElementAspect, ElementMultiAspect, ElementUniqueAspect, IModelDb, IModelJsNative, Model, Relationship, SqliteChangeOp } from "@itwin/core-backend";
|
|
5
|
+
import { Id64Arg, Id64String } from "@itwin/core-bentley";
|
|
6
6
|
import { ChangesetFileProps, CodeSpec, FontProps } from "@itwin/core-common";
|
|
7
7
|
import { Schema, SchemaKey } from "@itwin/ecschema-metadata";
|
|
8
|
-
import type { InitOptions } from "./IModelTransformer";
|
|
9
8
|
import { ElementAspectsHandler, ExportElementAspectsStrategy } from "./ExportElementAspectsStrategy";
|
|
10
9
|
/**
|
|
11
10
|
* @beta
|
|
@@ -25,12 +24,12 @@ export type ExporterInitOptions = ExportChangesOptions;
|
|
|
25
24
|
* Arguments for [[IModelExporter.exportChanges]]
|
|
26
25
|
* @public
|
|
27
26
|
*/
|
|
28
|
-
export type ExportChangesOptions =
|
|
27
|
+
export type ExportChangesOptions = {
|
|
29
28
|
skipPropagateChangesToRootElements?: boolean;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
29
|
+
} /**
|
|
30
|
+
* an array of ChangesetFileProps which are used to read the changesets and populate the ChangedInstanceIds using [[ChangedInstanceIds.initialize]] in [[IModelExporter.exportChanges]]
|
|
31
|
+
* @note mutually exclusive with @see changesetRanges, @see startChangeset and @see changedInstanceIds, so define one of the four, never more
|
|
32
|
+
*/ & ({
|
|
34
33
|
csFileProps: ChangesetFileProps[];
|
|
35
34
|
}
|
|
36
35
|
/**
|
|
@@ -96,7 +95,9 @@ export declare abstract class IModelExportHandler {
|
|
|
96
95
|
* @note This method can optionally be overridden to exclude an individual Element (and its children and ElementAspects) from the export. The base implementation always returns `true`.
|
|
97
96
|
*/
|
|
98
97
|
shouldExportElement(_element: Element): boolean;
|
|
99
|
-
/** Called when element is skipped instead of exported.
|
|
98
|
+
/** Called when element is skipped instead of exported.
|
|
99
|
+
* @note When an element is skipped, exporter will not export any of its child elements. Because of this, [[onSkipElement]] will not be invoked for any children of a "skipped" element.
|
|
100
|
+
*/
|
|
100
101
|
onSkipElement(_elementId: Id64String): void;
|
|
101
102
|
/** Called when an element should be exported.
|
|
102
103
|
* @param element The element to export
|
|
@@ -197,7 +198,7 @@ export declare class IModelExporter {
|
|
|
197
198
|
private _sourceDbChanges?;
|
|
198
199
|
/**
|
|
199
200
|
* Retrieve the cached entity change information.
|
|
200
|
-
* @note This will only be initialized after [IModelExporter.exportChanges] is invoked.
|
|
201
|
+
* @note This will only be initialized after [IModelExporter.exportChanges] is invoked or [IModelExporter.initialize] is called.
|
|
201
202
|
*/
|
|
202
203
|
get sourceDbChanges(): ChangedInstanceIds | undefined;
|
|
203
204
|
/** The handler called by this IModelExporter. */
|
|
@@ -255,8 +256,6 @@ export declare class IModelExporter {
|
|
|
255
256
|
* for consecutive calls
|
|
256
257
|
*/
|
|
257
258
|
exportChanges(args?: ExportChangesOptions): Promise<void>;
|
|
258
|
-
/** @deprecated in 0.1.x, use a single [[ExportChangesOptions]] object instead */
|
|
259
|
-
exportChanges(accessToken?: AccessToken, startChangesetId?: string, args?: ExportChangesOptions): Promise<void>;
|
|
260
259
|
private _resetChangeDataOnExport;
|
|
261
260
|
/** Export schemas from the source iModel.
|
|
262
261
|
* @note This must be called separately from [[exportAll]] or [[exportChanges]].
|
|
@@ -330,63 +329,16 @@ export declare class IModelExporter {
|
|
|
330
329
|
exportRelationship(relClassFullName: string, relInstanceId: Id64String): Promise<void>;
|
|
331
330
|
/** Tracks incremental progress */
|
|
332
331
|
private trackProgress;
|
|
333
|
-
/**
|
|
334
|
-
* You may override this to store arbitrary json state in a exporter state dump, useful for some resumptions
|
|
335
|
-
* @see [[IModelTransformer.saveStateToFile]]
|
|
336
|
-
*/
|
|
337
|
-
protected getAdditionalStateJson(): any;
|
|
338
|
-
/**
|
|
339
|
-
* You may override this to load arbitrary json state in a transformer state dump, useful for some resumptions
|
|
340
|
-
* @see [[IModelTransformer.loadStateFromFile]]
|
|
341
|
-
*/
|
|
342
|
-
protected loadAdditionalStateJson(_additionalState: any): void;
|
|
343
|
-
/**
|
|
344
|
-
* Reload our state from a JSON object
|
|
345
|
-
* Intended for [[IModelTransformer.resumeTransformation]]
|
|
346
|
-
* @internal
|
|
347
|
-
* You can load custom json from the exporter save state for custom exporters by overriding [[IModelExporter.loadAdditionalStateJson]]
|
|
348
|
-
*/
|
|
349
|
-
loadStateFromJson(state: IModelExporterState): void;
|
|
350
|
-
/**
|
|
351
|
-
* Serialize state to a JSON object
|
|
352
|
-
* Intended for [[IModelTransformer.resumeTransformation]]
|
|
353
|
-
* @internal
|
|
354
|
-
* You can add custom json to the exporter save state for custom exporters by overriding [[IModelExporter.getAdditionalStateJson]]
|
|
355
|
-
*/
|
|
356
|
-
saveStateToJson(): IModelExporterState;
|
|
357
|
-
}
|
|
358
|
-
/**
|
|
359
|
-
* The JSON format of a serialized IModelExporter instance
|
|
360
|
-
* Used for starting an exporter in the middle of an export operation,
|
|
361
|
-
* such as resuming a crashed transformation
|
|
362
|
-
*
|
|
363
|
-
* @note Must be kept synchronized with IModelExporter
|
|
364
|
-
* @internal
|
|
365
|
-
*/
|
|
366
|
-
export interface IModelExporterState {
|
|
367
|
-
exporterClass: string;
|
|
368
|
-
wantGeometry: boolean;
|
|
369
|
-
wantTemplateModels: boolean;
|
|
370
|
-
wantSystemSchemas: boolean;
|
|
371
|
-
visitElements: boolean;
|
|
372
|
-
visitRelationships: boolean;
|
|
373
|
-
excludedCodeSpecNames: string[];
|
|
374
|
-
excludedElementIds: CompressedId64Set;
|
|
375
|
-
excludedElementCategoryIds: CompressedId64Set;
|
|
376
|
-
excludedElementClassNames: string[];
|
|
377
|
-
excludedElementAspectClassFullNames: string[];
|
|
378
|
-
excludedRelationshipClassNames: string[];
|
|
379
|
-
additionalState?: any;
|
|
380
332
|
}
|
|
381
333
|
/**
|
|
382
334
|
* Arguments for [[ChangedInstanceIds.initialize]]
|
|
383
|
-
* @
|
|
335
|
+
* @public
|
|
384
336
|
*/
|
|
385
337
|
export type ChangedInstanceIdsInitOptions = ExportChangesOptions & {
|
|
386
338
|
iModel: BriefcaseDb;
|
|
387
339
|
};
|
|
388
340
|
/** Class for holding change information.
|
|
389
|
-
* @
|
|
341
|
+
* @public
|
|
390
342
|
*/
|
|
391
343
|
export declare class ChangedInstanceOps {
|
|
392
344
|
insertIds: Set<string>;
|
|
@@ -394,10 +346,15 @@ export declare class ChangedInstanceOps {
|
|
|
394
346
|
deleteIds: Set<string>;
|
|
395
347
|
/** Initializes the object from IModelJsNative.ChangedInstanceOpsProps. */
|
|
396
348
|
addFromJson(val: IModelJsNative.ChangedInstanceOpsProps | undefined): void;
|
|
349
|
+
/**
|
|
350
|
+
* Checks if empty.
|
|
351
|
+
* @returns true if there no ids in the ChangedInstanceOps object.
|
|
352
|
+
*/
|
|
353
|
+
get isEmpty(): boolean;
|
|
397
354
|
}
|
|
398
355
|
/**
|
|
399
356
|
* Class for discovering modified elements between 2 versions of an iModel.
|
|
400
|
-
* @
|
|
357
|
+
* @public
|
|
401
358
|
*/
|
|
402
359
|
export declare class ChangedInstanceIds {
|
|
403
360
|
codeSpec: ChangedInstanceOps;
|
|
@@ -411,6 +368,7 @@ export declare class ChangedInstanceIds {
|
|
|
411
368
|
private _elementSubclassIds?;
|
|
412
369
|
private _aspectSubclassIds?;
|
|
413
370
|
private _relationshipSubclassIds?;
|
|
371
|
+
private _relationshipSubclassIdsToSkip?;
|
|
414
372
|
private _db;
|
|
415
373
|
constructor(db: IModelDb);
|
|
416
374
|
private setupECClassIds;
|
|
@@ -420,6 +378,10 @@ export declare class ChangedInstanceIds {
|
|
|
420
378
|
private isAspect;
|
|
421
379
|
private isModel;
|
|
422
380
|
private isElement;
|
|
381
|
+
/** Checks if there are any changes.
|
|
382
|
+
* @returns true if there are any changes in the ChangedInstanceIds object.
|
|
383
|
+
*/
|
|
384
|
+
get hasChanges(): boolean;
|
|
423
385
|
/**
|
|
424
386
|
* Adds the provided [[ChangedECInstance]] to the appropriate set of changes by class type (codeSpec, model, element, aspect, or relationship) maintained by this instance of ChangedInstanceIds.
|
|
425
387
|
* If the same ECInstanceId is seen multiple times, the changedInstanceIds will be modified accordingly, i.e. if an id 'x' was updated but now we see 'x' was deleted, we will remove 'x'
|
|
@@ -427,9 +389,52 @@ export declare class ChangedInstanceIds {
|
|
|
427
389
|
* @param change ChangedECInstance which has the ECInstanceId, changeType (insert, update, delete) and ECClassId of the changed entity
|
|
428
390
|
*/
|
|
429
391
|
addChange(change: ChangedECInstance): Promise<void>;
|
|
392
|
+
/**
|
|
393
|
+
* This method should only be called inside [[IModelTransformer.addCustomChanges]].
|
|
394
|
+
* It adds the provided change to the element changes maintained by this instance of ChangedInstanceIds.
|
|
395
|
+
* If the same ECInstanceId is seen multiple times, the changedInstanceIds will be modified accordingly, i.e. if an id 'x' was updated but now we see 'x' was deleted, we will remove 'x'
|
|
396
|
+
* from the set of updatedIds and add it to the set of deletedIds for the appropriate class type.
|
|
397
|
+
* @note Custom element 'Insert' and 'Update' will mark element's parent model hierarchy and their modeled elements as 'Updated' in [[ChangedInstanceIds.model]] and [[ChangedInstanceIds.element]]. Parent models have to be marked as 'Updated' to make sure that added change is not skipped by transformer. Transformer starts processing elements from RepositoryModel and then visits all child models. Modeled elements hierarchy is marked as updated to trigger their inserts in case a new model (or its parent) needs to be inserted.
|
|
398
|
+
* @note Custom element 'Insert' will also mark element aspects and all element relationships as inserted.
|
|
399
|
+
* @note It is the responsibility of the caller to ensure that the provided id is, in fact an element.
|
|
400
|
+
* @note In most cases, this method does not need to be called. Its only for consumers to mimic changes as if they were found in a changeset, which should only be useful in certain cases such as the changing of filter criteria for a preexisting master branch relationship.
|
|
401
|
+
* @note In data processing with filter criteria scenarios it is important to consistently filter out models and their modeled elements that were previously removed from target via [[addCustomModelChange]] or [[shouldExportElement]] apis.
|
|
402
|
+
* @beta
|
|
403
|
+
*/
|
|
404
|
+
addCustomElementChange(changeType: SqliteChangeOp, ids: Id64Arg): Promise<void>;
|
|
405
|
+
/**
|
|
406
|
+
* This method should only be called inside [IModelTransformer.addCustomChanges].
|
|
407
|
+
* Adds the provided change to the model changes maintained by this instance of ChangedInstanceIds.
|
|
408
|
+
* If the same ECInstanceId is seen multiple times, the changedInstanceIds will be modified accordingly, i.e. if an id 'x' was updated but now we see 'x' was deleted, we will remove 'x'
|
|
409
|
+
* from the set of updatedIds and add it to the set of deletedIds for the appropriate class type.
|
|
410
|
+
* Will add same change to the model's modeledElement by calling [[ChangedInstanceIds.addCustomElementChange]] which will register more needed changes. This is to ensure the changes from the model and its modeledElement get exported together.
|
|
411
|
+
* @note It is the responsibility of the caller to ensure that the provided id is, in fact a model.
|
|
412
|
+
* @note In most cases, this method does not need to be called. Its only for consumers to mimic changes as if they were found in a changeset, which should only be useful in certain cases such as the changing of filter criteria for a preexisting master branch relationship.
|
|
413
|
+
* @note In data processing with filter criteria scenarios it is important to consistently filter out models and their modeled elements that were previously removed from target via [[addCustomModelChange]] or [[shouldExportElement]] apis.
|
|
414
|
+
* @beta
|
|
415
|
+
*/
|
|
416
|
+
addCustomModelChange(changeType: SqliteChangeOp, ids: Id64Arg): Promise<void>;
|
|
417
|
+
/**
|
|
418
|
+
* This method should only be called inside [IModelTransformer.addCustomChanges].
|
|
419
|
+
* Adds the provided change to the aspect changes maintained by this instance of ChangedInstanceIds
|
|
420
|
+
* If the same ECInstanceId is seen multiple times, the changedInstanceIds will be modified accordingly, i.e. if an id 'x' was updated but now we see 'x' was deleted, we will remove 'x'
|
|
421
|
+
* from the set of updatedIds and add it to the set of deletedIds for the appropriate class type.
|
|
422
|
+
* @note It is the responsibility of the caller to ensure that the provided id is, in fact an aspect.
|
|
423
|
+
* @note In most cases, this method does not need to be called. Its only for consumers to mimic changes as if they were found in a changeset, which should only be useful in certain cases such as the changing of filter criteria for a preexisting master branch relationship.
|
|
424
|
+
* @beta
|
|
425
|
+
*/
|
|
426
|
+
addCustomAspectChange(changeType: SqliteChangeOp, ids: Id64Arg): void;
|
|
427
|
+
/**
|
|
428
|
+
* There is an optimization in [IModelExporter.exportModelContents] which doesn't try to export elements within a model unless the model itself is marked as `Updated` or 'Inserted' in sourceDbChanges. This method is used in [[addCustomElementChange]] and [[addCustomModelChange]] to add the parent model hierarchy to the 'updatedIds' so that the custom element changes are exported.
|
|
429
|
+
* Transformer will insert 'Updated' model to target if it does not exist there already. To handle such case, modeled elements of parent models are also marked as updated. This is done, because model can not be inserted without it's modeled element.
|
|
430
|
+
*/
|
|
431
|
+
private markParentModelsAsUpdated;
|
|
432
|
+
private markElementRelationshipsAsInserted;
|
|
433
|
+
private markElementAspectsAsInserted;
|
|
430
434
|
private handleChange;
|
|
431
435
|
/**
|
|
432
436
|
* Initializes a new ChangedInstanceIds object with information taken from a range of changesets.
|
|
437
|
+
* @public
|
|
433
438
|
*/
|
|
434
439
|
static initialize(opts: ChangedInstanceIdsInitOptions): Promise<ChangedInstanceIds | undefined>;
|
|
435
440
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IModelExporter.d.ts","sourceRoot":"","sources":["../../src/IModelExporter.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EACL,WAAW,EAEX,iBAAiB,
|
|
1
|
+
{"version":3,"file":"IModelExporter.d.ts","sourceRoot":"","sources":["../../src/IModelExporter.ts"],"names":[],"mappings":"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"}
|