UNPKG

@finos/legend-extension-dsl-data-quality

Version:
123 lines 6.18 kB
/** * Copyright (c) 2026-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 { DataQualityValidationLogicalGroupFunction, } from '../utils/DataQualityValidationFunction.js'; import { observe_DataQualityValidationLogicalGroupFunction } from './DataQualityValidationFunctionObserver.js'; import { DataQualityValidationFilterFunctionsCloningVisitor } from './DataQualityValidationFunctionCloningVisitor.js'; import { action } from 'mobx'; export const dataQualityValidationFilterFunction_addLogicalOperation = action((target, currentCondition, operator, factory, observerContext, isCurrentColOptional) => { const visitor = new DataQualityValidationFilterFunctionsCloningVisitor(currentCondition.name, factory, observerContext, isCurrentColOptional); const newCondition = currentCondition.accept(visitor); const logicalGroup = factory.createLogicalFunction(operator); logicalGroup.parameters.left = currentCondition; logicalGroup.parameters.right = newCondition; observe_DataQualityValidationLogicalGroupFunction(logicalGroup); target.parameters.lambda.body = logicalGroup; }); export const dataQualityValidationFilterFunction_transformConditionToLogicalGroup = action((target, conditionToTransform, operator, factory, observerContext, isCurrentColOptional) => { const createGroup = () => { const visitor = new DataQualityValidationFilterFunctionsCloningVisitor(conditionToTransform.name, factory, observerContext, isCurrentColOptional); const newCondition = conditionToTransform.accept(visitor); const logicalGroup = factory.createLogicalFunction(operator); logicalGroup.parameters.left = conditionToTransform; logicalGroup.parameters.right = newCondition; observe_DataQualityValidationLogicalGroupFunction(logicalGroup); return logicalGroup; }; const replaceConditionInTree = (node) => { if (node === conditionToTransform) { target.parameters.lambda.body = createGroup(); return true; } // If this is a logical group, check its branches if (node instanceof DataQualityValidationLogicalGroupFunction) { if (node.parameters.left === conditionToTransform) { node.parameters.left = createGroup(); return true; } // Check right branch if (node.parameters.right === conditionToTransform) { node.parameters.right = createGroup(); return true; } // Recursively search in child branches return (replaceConditionInTree(node.parameters.left) || replaceConditionInTree(node.parameters.right)); } return false; }; replaceConditionInTree(target.parameters.lambda.body); }); export const dataQualityValidationFilterFunction_deleteCondition = action((target, conditionToDelete) => { const deleteFromTree = (node, parent, isLeftChild) => { if (node instanceof DataQualityValidationLogicalGroupFunction) { if (node.parameters.left === conditionToDelete) { // Replace this logical group with the right child (keep the sibling) if (parent) { if (isLeftChild) { parent.parameters.left = node.parameters.right; } else { parent.parameters.right = node.parameters.right; } } else { target.parameters.lambda.body = node.parameters.right; } return true; } if (node.parameters.right === conditionToDelete) { // Replace this logical group with the left child (keep the sibling) if (parent) { if (isLeftChild) { parent.parameters.left = node.parameters.left; } else { parent.parameters.right = node.parameters.left; } } else { // This is the root logical group target.parameters.lambda.body = node.parameters.left; } return true; } // Recursively search in child branches return (deleteFromTree(node.parameters.left, node, true) || deleteFromTree(node.parameters.right, node, false)); } return false; }; deleteFromTree(target.parameters.lambda.body); }); export const dataQualityValidationLogicalGroupFunction_changeGroupFunction = action((logicalGroup, newFunctionName, childToChange, factory, observerContext, isCurrentColOptional) => { const currentChild = childToChange === 'left' ? logicalGroup.parameters.left : logicalGroup.parameters.right; const visitor = new DataQualityValidationFilterFunctionsCloningVisitor(newFunctionName, factory, observerContext, isCurrentColOptional); if (childToChange === 'left') { logicalGroup.parameters.left = currentChild.accept(visitor); } else { logicalGroup.parameters.right = currentChild.accept(visitor); } }); export const dataQualityValidationLogicalGroupFunction_setPropertyGuaranteeFunction = action((target, property) => { target.property = property; }); export const dataQualityValidationLogicalGroupFunction_setParametersValues = action((target, parametersValues) => { target.parametersValues = parametersValues; }); //# sourceMappingURL=DataQualityValidationFunctionModifier.js.map