UNPKG

@finos/legend-extension-dsl-persistence

Version:
260 lines 12.3 kB
/** * Copyright (c) 2020-present, Goldman Sachs * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import packageJson from '../../../../package.json' with { type: 'json' }; import { Persistence } from '../../../graph/metamodel/pure/model/packageableElements/persistence/DSL_Persistence_Persistence.js'; import { PersistenceContext } from '../../../graph/metamodel/pure/model/packageableElements/persistence/DSL_Persistence_PersistenceContext.js'; import { CronTrigger, ManualTrigger, } from '../../../graph/metamodel/pure/model/packageableElements/persistence/DSL_Persistence_Trigger.js'; import { V1_Persistence } from './v1/model/packageableElements/persistence/V1_DSL_Persistence_Persistence.js'; import { V1_PersistenceContext } from './v1/model/packageableElements/persistence/V1_DSL_Persistence_PersistenceContext.js'; import { V1_CronTrigger, V1_ManualTrigger, } from './v1/model/packageableElements/persistence/V1_DSL_Persistence_Trigger.js'; import { V1_cronTriggerModelSchema, V1_manualTriggerModelSchema, V1_PERSISTENCE_ELEMENT_PROTOCOL_TYPE, V1_persistenceModelSchema, V1_TriggerType, V1_persistenceTestModelSchema, V1_AtomicTestType, } from './v1/transformation/pureProtocol/V1_DSL_Persistence_ProtocolHelper.js'; import { V1_PERSISTENCE_CONTEXT_ELEMENT_PROTOCOL_TYPE, V1_persistenceContextModelSchema, } from './v1/transformation/pureProtocol/V1_DSL_PersistenceContext_ProtocolHelper.js'; import { V1_buildPersistence, V1_buildTestBatch, } from './v1/transformation/pureGraph/to/V1_DSL_Persistence_BuilderHelper.js'; import { V1_buildPersistenceContext } from './v1/transformation/pureGraph/to/V1_DSL_Persistence_ContextBuilder.js'; import { V1_transformPersistence, V1_transformPersistenceTestBatch, } from './v1/transformation/pureGraph/from/V1_DSL_Persistence_TransformerHelper.js'; import { V1_transformPersistenceContext } from './v1/transformation/pureGraph/from/V1_DSL_Persistence_ContextTransformer.js'; import { PureProtocolProcessorPlugin, V1_buildFullPath, V1_ElementBuilder, } from '@finos/legend-graph'; import { assertType } from '@finos/legend-shared'; import { deserialize, serialize } from 'serializr'; import { V1_PersistenceTest } from './v1/model/packageableElements/persistence/V1_DSL_Persistence_PersistenceTest.js'; import { PersistenceTest } from '../../../graph/metamodel/pure/model/packageableElements/persistence/DSL_Persistence_PersistenceTest.js'; export const PERSISTENCE_ELEMENT_CLASSIFIER_PATH = 'meta::pure::persistence::metamodel::Persistence'; export const PERSISTENCE_CONTEXT_ELEMENT_CLASSIFIER_PATH = 'meta::pure::persistence::metamodel::PersistenceContext'; export class DSL_Persistence_PureProtocolProcessorPlugin extends PureProtocolProcessorPlugin { constructor() { super(packageJson.extensions.pureProtocolProcessorPlugin, packageJson.version); } V1_getExtraElementBuilders() { return [ new V1_ElementBuilder({ elementClassName: 'Persistence', _class: V1_Persistence, firstPass: (elementProtocol, context) => { assertType(elementProtocol, V1_Persistence); const element = new Persistence(elementProtocol.name); const path = V1_buildFullPath(elementProtocol.package, elementProtocol.name); context.currentSubGraph.setOwnElementInExtension(path, element, Persistence); return element; }, secondPass: (elementProtocol, context) => { assertType(elementProtocol, V1_Persistence); V1_buildPersistence(elementProtocol, context); }, }), new V1_ElementBuilder({ elementClassName: 'PersistenceContext', _class: V1_PersistenceContext, firstPass: (elementProtocol, context) => { assertType(elementProtocol, V1_PersistenceContext); const element = new PersistenceContext(elementProtocol.name); const path = V1_buildFullPath(elementProtocol.package, elementProtocol.name); context.currentSubGraph.setOwnElementInExtension(path, element, PersistenceContext); return element; }, secondPass: (elementProtocol, context) => { assertType(elementProtocol, V1_PersistenceContext); V1_buildPersistenceContext(elementProtocol, context); }, }), ]; } V1_getExtraElementClassifierPathGetters() { return [ (elementProtocol) => { if (elementProtocol instanceof V1_Persistence) { return PERSISTENCE_ELEMENT_CLASSIFIER_PATH; } else if (elementProtocol instanceof V1_PersistenceContext) { return PERSISTENCE_CONTEXT_ELEMENT_CLASSIFIER_PATH; } return undefined; }, ]; } V1_getExtraElementProtocolSerializers() { return [ (elementProtocol, plugins) => { if (elementProtocol instanceof V1_Persistence) { return serialize(V1_persistenceModelSchema(plugins), elementProtocol); } else if (elementProtocol instanceof V1_PersistenceContext) { return serialize(V1_persistenceContextModelSchema(plugins), elementProtocol); } return undefined; }, ]; } V1_getExtraElementProtocolDeserializers() { return [ (json, plugins) => { if (json._type === V1_PERSISTENCE_ELEMENT_PROTOCOL_TYPE) { return deserialize(V1_persistenceModelSchema(plugins), json); } else if (json._type === V1_PERSISTENCE_CONTEXT_ELEMENT_PROTOCOL_TYPE) { return deserialize(V1_persistenceContextModelSchema(plugins), json); } return undefined; }, ]; } V1_getExtraElementTransformers() { return [ (metamodel, context) => { if (metamodel instanceof Persistence) { return V1_transformPersistence(metamodel, context); } else if (metamodel instanceof PersistenceContext) { return V1_transformPersistenceContext(metamodel, context); } return undefined; }, ]; } V1_getExtraTriggerBuilders() { return [ (protocol, context) => { if (protocol instanceof V1_ManualTrigger) { return new ManualTrigger(); } else if (protocol instanceof V1_CronTrigger) { const trigger = new CronTrigger(); trigger.minutes = protocol.minutes; trigger.hours = protocol.hours; trigger.dayOfMonth = protocol.dayOfMonth; trigger.month = protocol.month; trigger.dayOfWeek = protocol.dayOfWeek; return trigger; } return undefined; }, ]; } V1_getExtraTriggerTransformers() { return [ (metamodel, context) => { if (metamodel instanceof ManualTrigger) { return new V1_ManualTrigger(); } else if (metamodel instanceof CronTrigger) { const protocol = new V1_CronTrigger(); protocol.minutes = metamodel.minutes; protocol.hours = metamodel.hours; protocol.dayOfMonth = metamodel.dayOfMonth; protocol.month = metamodel.month; protocol.dayOfWeek = metamodel.dayOfWeek; return protocol; } return undefined; }, ]; } V1_getExtraAtomicTestBuilders() { return [ (protocol, context) => { if (protocol instanceof V1_PersistenceTest) { const test = new PersistenceTest(); test.graphFetchPath = protocol.graphFetchPath; test.id = protocol.id; test.isTestDataFromServiceOutput = protocol.isTestDataFromServiceOutput; test.testBatches = V1_buildTestBatch(protocol.testBatches, test, context); return test; } return undefined; }, ]; } V1_getExtraAtomicTestTransformers() { return [ (metamodel, context) => { if (metamodel instanceof PersistenceTest) { const persistenceTest = new V1_PersistenceTest(); persistenceTest.graphFetchPath = metamodel.graphFetchPath; persistenceTest.id = metamodel.id; persistenceTest.isTestDataFromServiceOutput = metamodel.isTestDataFromServiceOutput; persistenceTest.testBatches = metamodel.testBatches.map((testBatch) => V1_transformPersistenceTestBatch(testBatch, context)); return persistenceTest; } return undefined; }, ]; } V1_getExtraAtomicTestProtocolSerializers() { return [ (atomicTestProtocol, plugins) => { if (atomicTestProtocol instanceof V1_PersistenceTest) { return serialize(V1_persistenceTestModelSchema(plugins), atomicTestProtocol); } return undefined; }, ]; } V1_getExtraAtomicTestProtocolDeserializers() { return [ (json, plugins) => { if (json._type === V1_AtomicTestType.PERSISTENCE_TEST) { return deserialize(V1_persistenceTestModelSchema(plugins), json); } return undefined; }, ]; } V1_getExtraTriggerProtocolSerializers() { return [ (protocol) => { if (protocol instanceof V1_ManualTrigger) { return serialize(V1_manualTriggerModelSchema, protocol); } else if (protocol instanceof V1_CronTrigger) { return serialize(V1_cronTriggerModelSchema, protocol); } return undefined; }, ]; } V1_getExtraTriggerProtocolDeserializers() { return [ (json) => { switch (json._type) { case V1_TriggerType.MANUAL_TRIGGER: return deserialize(V1_manualTriggerModelSchema, json); case V1_TriggerType.CRON_TRIGGER: return deserialize(V1_cronTriggerModelSchema, json); default: return undefined; } }, ]; } V1_getExtraTestableAssertionBuilders() { return [ (atomicTest, element) => { if (atomicTest instanceof PersistenceTest) { for (const testBatch of atomicTest.testBatches) { for (const assertion of testBatch.assertions) { if (assertion.id === element.id) { return assertion; } } } } return undefined; }, ]; } } //# sourceMappingURL=DSL_Persistence_PureProtocolProcessorPlugin.js.map