@finos/legend-extension-dsl-data-quality
Version:
Legend extension for Data Quality
217 lines (190 loc) • 6.55 kB
text/typescript
/**
* 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 {
type V1_PackageableElementPointer,
type V1_PackageableElementVisitor,
type V1_RawLambda,
type V1_StereotypePtr,
type V1_TaggedValue,
type V1_RawVariable,
hashRawLambda,
V1_PackageableElement,
} from '@finos/legend-graph';
import { type Hashable, hashArray } from '@finos/legend-shared';
import { DATA_QUALITY_HASH_STRUCTURE } from '../../../../graph/metamodel/DSL_DataQuality_HashUtils.js';
import { type V1_DataQualityRootGraphFetchTree } from './model/graphFetch/V1_DataQualityRootGraphFetchTree.js';
import { type RelationValidationType } from '../../../../graph/metamodel/pure/packageableElements/data-quality/DataQualityValidationConfiguration.js';
export abstract class V1_DataQualityExecutionContext implements Hashable {
abstract get hashCode(): string;
}
export class V1_DataSpaceDataQualityExecutionContext extends V1_DataQualityExecutionContext {
context!: string;
dataSpace!: V1_PackageableElementPointer;
override get hashCode(): string {
return hashArray([
DATA_QUALITY_HASH_STRUCTURE.DATA_QUALTIY_DATASPACE_EXECUTION_CONTEXT,
this.context,
this.dataSpace.path,
]);
}
}
export class V1_MappingAndRuntimeDataQualityExecutionContext extends V1_DataQualityExecutionContext {
mapping!: V1_PackageableElementPointer;
runtime!: V1_PackageableElementPointer;
override get hashCode(): string {
return hashArray([
DATA_QUALITY_HASH_STRUCTURE.DATA_QUALITY_MAPPING_AND_RUNTIME_EXECUTION_CONTEXT,
this.mapping.path,
this.runtime.path,
]);
}
}
export class V1_DataQualityRelationValidation implements Hashable {
name!: string;
description: string | undefined;
assertion!: V1_RawLambda;
type?: RelationValidationType;
get hashCode(): string {
return hashArray([
DATA_QUALITY_HASH_STRUCTURE.DATA_QUALITY_RELATION_VALIDATION,
this.name,
this.type ?? '',
this.description ?? '',
this.assertion,
]);
}
}
export abstract class V1_DataQualityValidationsConfiguration extends V1_PackageableElement {}
export class V1_DataQualityClassValidationsConfiguration
extends V1_DataQualityValidationsConfiguration
implements Hashable
{
context!: V1_DataQualityExecutionContext;
dataQualityRootGraphFetchTree: V1_DataQualityRootGraphFetchTree | undefined;
filter?: V1_RawLambda | undefined;
taggedValues: V1_TaggedValue[] = [];
stereotypes: V1_StereotypePtr[] = [];
override get hashCode(): string {
return hashArray([
DATA_QUALITY_HASH_STRUCTURE.DATA_QUALITY_CONSTRAINTS_CONFIGURATION,
this.context,
this.filter ?? '',
this.dataQualityRootGraphFetchTree ?? '',
]);
}
accept_PackageableElementVisitor<T>(
visitor: V1_PackageableElementVisitor<T>,
): T {
return visitor.visit_PackageableElement(this);
}
}
export class V1_DataQualityServiceValidationsConfiguration
extends V1_DataQualityValidationsConfiguration
implements Hashable
{
contextName?: string | undefined;
serviceName?: string | undefined;
dataQualityRootGraphFetchTree?: V1_DataQualityRootGraphFetchTree | undefined;
override get hashCode(): string {
return hashArray([
DATA_QUALITY_HASH_STRUCTURE.DATA_QUALITY_SERVICE_VALIDATION_CONFIGURATION,
this.contextName ?? '',
this.serviceName ?? '',
this.dataQualityRootGraphFetchTree ?? '',
]);
}
accept_PackageableElementVisitor<T>(
visitor: V1_PackageableElementVisitor<T>,
): T {
return visitor.visit_PackageableElement(this);
}
}
export class V1_DataQualityRelationQueryLambda implements Hashable {
body?: object | undefined;
parameters: V1_RawVariable[] = [];
get hashCode(): string {
return hashArray([
DATA_QUALITY_HASH_STRUCTURE.DATA_QUALITY_RELATION_VALIDATION_QUERY,
hashArray(this.parameters),
hashRawLambda(undefined, this.body),
]);
}
}
export class V1_DataQualityRelationValidationsConfiguration
extends V1_DataQualityValidationsConfiguration
implements Hashable
{
query!: V1_DataQualityRelationQueryLambda;
validations: V1_DataQualityRelationValidation[] = [];
runtime?: V1_PackageableElementPointer | undefined;
taggedValues: V1_TaggedValue[] = [];
stereotypes: V1_StereotypePtr[] = [];
override get hashCode(): string {
return hashArray([
DATA_QUALITY_HASH_STRUCTURE.DATA_QUALITY_RELATION_VALIDATION_CONFIGURATION,
this.query,
hashArray(this.validations),
]);
}
accept_PackageableElementVisitor<T>(
visitor: V1_PackageableElementVisitor<T>,
): T {
return visitor.visit_PackageableElement(this);
}
}
export abstract class V1_ReconStrategy implements Hashable {
abstract get hashCode(): string;
}
export class V1_MD5HashStrategy extends V1_ReconStrategy {
sourceHashColumn?: string | undefined;
targetHashColumn?: string | undefined;
aggregatedHash?: boolean | undefined;
override get hashCode(): string {
return hashArray([
DATA_QUALITY_HASH_STRUCTURE.DATA_QUALITY_MD5_HASH_STRATEGY,
this.sourceHashColumn ?? '',
this.targetHashColumn ?? '',
this.aggregatedHash ?? false,
]);
}
}
export class V1_DataQualityRelationComparisonConfiguration
extends V1_DataQualityValidationsConfiguration
implements Hashable
{
source!: V1_DataQualityRelationQueryLambda;
target!: V1_DataQualityRelationQueryLambda;
keys: string[] = [];
columnsToCompare: string[] = [];
strategy!: V1_ReconStrategy;
expectedMatch?: number | undefined;
override get hashCode(): string {
return hashArray([
DATA_QUALITY_HASH_STRUCTURE.DATA_QUALITY_RELATION_COMPARISON_HASH_STRUCTURE,
this.source,
this.target,
hashArray(this.keys),
hashArray(this.columnsToCompare),
String(this.expectedMatch ?? ''),
this.strategy,
]);
}
accept_PackageableElementVisitor<T>(
visitor: V1_PackageableElementVisitor<T>,
): T {
return visitor.visit_PackageableElement(this);
}
}