@finos/legend-extension-dsl-persistence
Version:
Legend extension for Persistence DSL
260 lines • 12.3 kB
JavaScript
/**
* 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