2020-05-16 04:02:52 +08:00

103 lines
2.8 KiB
TypeScript

import { cloneDeep, find } from 'lodash';
import {
BaseManager,
connectGeneralManager,
connectGeneralManagerList,
IManagerController,
ISchemaController,
} from './base';
import VisualManager from './visualManager';
export default class SchemaManager extends BaseManager implements IManagerController, ISchemaController {
private schemaData: object = {};
private visualManagerList: VisualManager[] = [];
private schemaManagerList: SchemaManager[] = [];
getManager(): VisualManager {
return this.visualManagerList[0];
}
getManagerByName(name?: string): VisualManager[] {
return this.visualManagerList.filter((m) => m.getName() === name);
}
getManagerById(id?: string): VisualManager {
return find(this.visualManagerList, (m) => m.getId() === id) as VisualManager;
}
getManagerList(): VisualManager[] {
return this.visualManagerList;
}
getSchemaManager(): SchemaManager {
return this.schemaManagerList[0];
}
getSchemaManagerById(id?: string): SchemaManager {
return find(this.schemaManagerList, (m) => m.getId() === id) as SchemaManager;
}
getSchemaManagerByName(name?: string): SchemaManager[] {
return this.schemaManagerList.filter((m) => m.getName() === name);
}
getSchemaManagerList() {
return this.schemaManagerList;
}
connectManager(manager: any) {
connectGeneralManager.call(this, manager, this.visualManagerList as any);
return this;
}
connectSchemaManager(manager: SchemaManager): this {
connectGeneralManager.call(this, manager, this.schemaManagerList);
return this;
}
connectManagerList(managerList: VisualManager[]): this {
this.visualManagerList = connectGeneralManagerList.call(this, managerList as any, this.visualManagerList as any);
return this;
}
connectSchemaManagerList(managerList: SchemaManager[]): this {
this.schemaManagerList = connectGeneralManagerList.call(this, managerList, this.schemaManagerList);
return this;
}
notifyAllManagers(eventName: string | symbol, ...eventData: any[]): boolean {
return this.visualManagerList.map((m) => m.emit(eventName, eventData)).every((r) => r);
}
notifyAllSchemaManagers(eventName: string | symbol, ...eventData: any[]): boolean {
return this.schemaManagerList.map((m) => m.emit(eventName, eventData)).every((r) => r);
}
exportSchema(): string {
try {
return JSON.stringify(this.schemaData);
} catch (e) {
throw new Error(e.message);
}
}
exportSchemaObject(): object {
return cloneDeep(this.schemaData);
}
importSchema(schemaString: string): this {
try {
this.schemaData = JSON.parse(schemaString);
return this;
} catch (e) {
throw new Error(e.message);
}
}
importSchemaObject(schema: object): this {
this.schemaData = schema;
return this;
}
}