import { DiagramModel } from "../Model/Model"; import { Shape } from "../Model/Shapes/Shape"; import { Connector } from "../Model/Connectors/Connector"; import { DiagramItem } from "../Model/DiagramItem"; import { TextStyle, Style } from "../Model/Style"; import { ShapeDescriptionManager } from "../Model/Shapes/Descriptions/ShapeDescriptionManager"; export abstract class ImporterBase { constructor(protected shapeDescriptionManager: ShapeDescriptionManager) { } import(): DiagramModel { const model = new DiagramModel(); const obj = this.getObject(); this.importPageSettings(model, this.getPageObject(obj)); const shapes = this.importShapes(this.getShapeObjects(obj)); for(let i = 0; i < shapes.length; i++) { const shape = shapes[i]; if(model.findItem(shape.key)) throw Error("Item key is duplicated"); model.pushItem(shape); } const connectors = this.importConnectors(this.getConnectorObjects(obj)); for(let i = 0; i < connectors.length; i++) { const connector = connectors[i]; connector.endItem = model.findItem(connector["endItemKey"]) || undefined; delete connector["endItemKey"]; connector.beginItem = model.findItem(connector["beginItemKey"]) || undefined; delete connector["beginItemKey"]; if(model.findItem(connector.key)) throw Error("Item key is duplicated"); model.pushItem(connector); this.updateConnections(connector); } this.updateChildren(model.items, key => model.findItem(key)); return model; } importItems(model: DiagramModel): DiagramItem[] { const result: DiagramItem[] = []; const obj = this.getObject(); const itemHash: { [key: string]: DiagramItem } = {}; const shapes = this.importShapes(this.getShapeObjects(obj)); let key; for(let i = 0; i < shapes.length; i++) { const shape = shapes[i]; const oldKey = shape.key; key = model.getNextKey(); shape.key = key; itemHash[oldKey] = shape; if(shape.dataKey !== undefined) shape.dataKey = undefined; result.push(shape); } const connectors = this.importConnectors(this.getConnectorObjects(obj)); for(let i = 0; i < connectors.length; i++) { const connector = connectors[i]; const oldKey = connector.key; key = model.getNextKey(); connector.key = key; itemHash[oldKey] = connector; if(connector.dataKey !== undefined) connector.dataKey = undefined; const endItemKey = connector["endItemKey"]; connector.endItem = itemHash[endItemKey]; delete connector["endItemKey"]; const beginItemKey = connector["beginItemKey"]; connector.beginItem = itemHash[beginItemKey]; delete connector["beginItemKey"]; result.push(connector); this.updateConnections(connector); } this.updateChildren(result, key => itemHash[key]); return result; } importItemsData(model: DiagramModel) { const obj = this.getObject(); const shapes = this.importShapes(this.getShapeObjects(obj)); const shapeDataKeys = {}; for(let i = 0; i < shapes.length; i++) { const srcShape = shapes[i]; let destShape: Shape; if(srcShape.dataKey !== undefined) destShape = model.findShapeByDataKey(srcShape.dataKey); if(destShape) { destShape.dataKey = srcShape.dataKey; shapeDataKeys[srcShape.key] = srcShape.dataKey; destShape.locked = srcShape.locked; destShape.position = srcShape.position.clone(); destShape.expanded = srcShape.expanded; if(srcShape.expandedSize) destShape.expandedSize = srcShape.expandedSize.clone(); destShape.size = srcShape.size.clone(); destShape.parameters = srcShape.parameters.clone(); destShape.style =