@finos/legend-extension-dsl-data-quality
Version:
Legend extension for Data Quality
204 lines • 12.7 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 { assertType } from '@finos/legend-shared';
import { V1_DataQualityClassValidationsConfiguration, V1_DataQualityServiceValidationsConfiguration, V1_DataQualityRelationValidationsConfiguration, V1_DataQualityValidationsConfiguration, V1_DataQualityRelationComparisonConfiguration, } from './v1/V1_DataQualityValidationConfiguration.js';
import { DataQualityClassValidationsConfiguration, DataQualityServiceValidationConfiguration, DataQualityRelationValidationConfiguration, DataQualityRelationComparisonConfiguration, } from '../../../graph/metamodel/pure/packageableElements/data-quality/DataQualityValidationConfiguration.js';
import { V1_DATA_QUALITY_PROTOCOL_TYPE, V1_DATA_QUALITY_SERVICE_PROTOCOL_TYPE, V1_DATA_QUALITY_RELATION_PROTOCOL_TYPE, V1_DATA_QUALITY_RELATION_COMPARISON_PROTOCOL_TYPE, V1_deserializeDataQualityClassValidation, V1_deserializeDataQualityServiceValidation, V1_deserializeDataQualityRelationValidation, V1_serializeDataQualityClassValidation, V1_serializeDataQualityServiceValidation, V1_serializeDataQualityRelationValidation, V1_serializeDataQualityRelationComparison, V1_deserializeDataQualityRelationComparison, } from './v1/transformation/pureProtocol/V1_DSL_DataQuality_ProtocolHelper.js';
import { V1_transformDataQualityClassValidationConfiguration, V1_transformDataQualityRelationValidationConfiguration, V1_transformDataQualityRelationComparisonConfiguration, } from './v1/transformation/V1_DSL_DataQuality_ValueSpecificationTransformer.js';
import { V1_buildDataQualityClassValidationConfiguration, V1_buildDataQualityRelationValidationConfiguration, V1_buildDataQualityServiceValidationConfiguration, V1_buildDataQualityRelationComparisonConfiguration, } from './v1/transformation/V1_DSL_DataQuality_ValueSpecificationBuilderHelper.js';
import { V1_DataQualityRootGraphFetchTree } from './v1/model/graphFetch/V1_DataQualityRootGraphFetchTree.js';
import { V1_buildFullPath, V1_ElementBuilder, PureProtocolProcessorPlugin, } from '@finos/legend-graph';
import { V1_DataQualityPropertyGraphFetchTree } from './v1/model/graphFetch/V1_DataQualityPropertyGraphFetchTree.js';
import { deserialize, serialize } from 'serializr';
import { V1_DATA_QUALITY_PROPERTY_GRAPH_FETCH_TREE_TYPE, V1_DATA_QUALTIY_ROOT_GRAPH_FETCH_TREE_TYPE, V1_propertyGraphFetchTreeModelSchema, V1_rootGraphFetchTreeModelSchema, } from './v1/transformation/V1_DSL_DataQuality_ValueSpecificationSerializer.js';
import { V1_buildValidationFunctionExpression } from './v1/V1_DataQualityValidationFunctionExpression.js';
const DATA_QUALITY_CLASSIFIER_PATH = 'meta::external::dataquality::DataQuality';
const DATA_QUALITY_RELATION_VALIDATION_CLASSIFIER_PATH = 'meta::external::dataquality::DataQualityRelationValidation';
const DATA_QUALITY_RELATION_COMPARISON_CLASSIFIER_PATH = 'meta::external::dataquality::DataQualityRelationComparison';
export class DSL_DataQuality_PureProtocolProcessorPlugin extends PureProtocolProcessorPlugin {
constructor() {
super(packageJson.extensions.pureProtocolProcessorPlugin, packageJson.version);
}
V1_getExtraElementBuilders() {
return [
new V1_ElementBuilder({
elementClassName: V1_DATA_QUALITY_PROTOCOL_TYPE,
_class: V1_DataQualityClassValidationsConfiguration,
firstPass: (elementProtocol, context) => {
assertType(elementProtocol, V1_DataQualityClassValidationsConfiguration);
const element = new DataQualityClassValidationsConfiguration(elementProtocol.name);
const path = V1_buildFullPath(elementProtocol.package, elementProtocol.name);
context.currentSubGraph.setOwnElementInExtension(path, element, DataQualityClassValidationsConfiguration);
return element;
},
secondPass: (elementProtocol, context) => {
assertType(elementProtocol, V1_DataQualityClassValidationsConfiguration);
V1_buildDataQualityClassValidationConfiguration(elementProtocol, context);
},
}),
new V1_ElementBuilder({
elementClassName: V1_DATA_QUALITY_RELATION_PROTOCOL_TYPE,
_class: V1_DataQualityRelationValidationsConfiguration,
firstPass: (elementProtocol, context) => {
assertType(elementProtocol, V1_DataQualityRelationValidationsConfiguration);
const element = new DataQualityRelationValidationConfiguration(elementProtocol.name);
const path = V1_buildFullPath(elementProtocol.package, elementProtocol.name);
context.currentSubGraph.setOwnElementInExtension(path, element, DataQualityRelationValidationConfiguration);
return element;
},
secondPass: (elementProtocol, context) => {
assertType(elementProtocol, V1_DataQualityRelationValidationsConfiguration);
V1_buildDataQualityRelationValidationConfiguration(elementProtocol, context);
},
}),
new V1_ElementBuilder({
elementClassName: V1_DATA_QUALITY_SERVICE_PROTOCOL_TYPE,
_class: V1_DataQualityServiceValidationsConfiguration,
firstPass: (elementProtocol, context) => {
assertType(elementProtocol, V1_DataQualityServiceValidationsConfiguration);
const element = new DataQualityServiceValidationConfiguration(elementProtocol.name);
const path = V1_buildFullPath(elementProtocol.package, elementProtocol.name);
context.currentSubGraph.setOwnElementInExtension(path, element, DataQualityServiceValidationConfiguration);
return element;
},
secondPass: (elementProtocol, context) => {
assertType(elementProtocol, V1_DataQualityServiceValidationsConfiguration);
V1_buildDataQualityServiceValidationConfiguration(elementProtocol, context);
},
}),
new V1_ElementBuilder({
elementClassName: V1_DATA_QUALITY_RELATION_COMPARISON_PROTOCOL_TYPE,
_class: V1_DataQualityRelationComparisonConfiguration,
firstPass: (elementProtocol, context) => {
assertType(elementProtocol, V1_DataQualityRelationComparisonConfiguration);
const element = new DataQualityRelationComparisonConfiguration(elementProtocol.name);
const path = V1_buildFullPath(elementProtocol.package, elementProtocol.name);
context.currentSubGraph.setOwnElementInExtension(path, element, DataQualityRelationComparisonConfiguration);
return element;
},
secondPass: (elementProtocol, context) => {
assertType(elementProtocol, V1_DataQualityRelationComparisonConfiguration);
V1_buildDataQualityRelationComparisonConfiguration(elementProtocol, context);
},
}),
];
}
V1_getExtraElementClassifierPathGetters() {
return [
(protocol) => {
if (protocol instanceof V1_DataQualityRelationValidationsConfiguration) {
return DATA_QUALITY_RELATION_VALIDATION_CLASSIFIER_PATH;
}
else if (protocol instanceof V1_DataQualityRelationComparisonConfiguration) {
return DATA_QUALITY_RELATION_COMPARISON_CLASSIFIER_PATH;
}
else if (protocol instanceof V1_DataQualityValidationsConfiguration) {
return DATA_QUALITY_CLASSIFIER_PATH;
}
return undefined;
},
];
}
V1_getExtraElementProtocolSerializers() {
return [
(protocol, plugins) => {
if (protocol instanceof V1_DataQualityClassValidationsConfiguration) {
return V1_serializeDataQualityClassValidation(protocol, plugins);
}
if (protocol instanceof V1_DataQualityServiceValidationsConfiguration) {
return V1_serializeDataQualityServiceValidation(protocol, plugins);
}
if (protocol instanceof V1_DataQualityRelationValidationsConfiguration) {
return V1_serializeDataQualityRelationValidation(protocol, plugins);
}
if (protocol instanceof V1_DataQualityRelationComparisonConfiguration) {
return V1_serializeDataQualityRelationComparison(protocol, plugins);
}
return undefined;
},
];
}
V1_getExtraGraphFetchProtocolSerializers() {
return [
(protocol, plugins) => {
if (protocol instanceof V1_DataQualityPropertyGraphFetchTree) {
return serialize(V1_propertyGraphFetchTreeModelSchema(plugins), protocol);
}
else if (protocol instanceof V1_DataQualityRootGraphFetchTree) {
return serialize(V1_rootGraphFetchTreeModelSchema(plugins), protocol);
}
return undefined;
},
];
}
V1_getExtraGraphFetchProtocolDeserializers() {
return [
(json, plugins) => {
if (json._type === V1_DATA_QUALITY_PROPERTY_GRAPH_FETCH_TREE_TYPE) {
return deserialize(V1_propertyGraphFetchTreeModelSchema(plugins), json);
}
if (json._type === V1_DATA_QUALTIY_ROOT_GRAPH_FETCH_TREE_TYPE) {
return deserialize(V1_rootGraphFetchTreeModelSchema(plugins), json);
}
return undefined;
},
];
}
V1_getExtraElementProtocolDeserializers() {
return [
(json, plugins) => {
if (json._type === V1_DATA_QUALITY_PROTOCOL_TYPE) {
return V1_deserializeDataQualityClassValidation(json, plugins);
}
if (json._type === V1_DATA_QUALITY_SERVICE_PROTOCOL_TYPE) {
return V1_deserializeDataQualityServiceValidation(json, plugins);
}
if (json._type === V1_DATA_QUALITY_RELATION_PROTOCOL_TYPE) {
return V1_deserializeDataQualityRelationValidation(json, plugins);
}
if (json._type === V1_DATA_QUALITY_RELATION_COMPARISON_PROTOCOL_TYPE) {
return V1_deserializeDataQualityRelationComparison(json, plugins);
}
return undefined;
},
];
}
V1_getExtraElementTransformers() {
return [
(metamodel, context) => {
if (metamodel instanceof DataQualityClassValidationsConfiguration) {
return V1_transformDataQualityClassValidationConfiguration(metamodel, context);
}
if (metamodel instanceof DataQualityRelationValidationConfiguration) {
return V1_transformDataQualityRelationValidationConfiguration(metamodel, context);
}
if (metamodel instanceof DataQualityRelationComparisonConfiguration) {
return V1_transformDataQualityRelationComparisonConfiguration(metamodel, context);
}
return undefined;
},
];
}
V1_getExtraFunctionExpressionBuilders() {
return [
(functionName, parameters, openVariables, compileContext, processingContext) => {
return V1_buildValidationFunctionExpression(functionName, parameters, openVariables, compileContext, processingContext);
},
];
}
}
//# sourceMappingURL=DSL_DataQuality_PureProtocolProcessorPlugin.js.map