@finos/legend-extension-dsl-data-quality 1.0.60 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (178) hide show
  1. package/lib/components/{DSL_DataQuality_ClassElementDriver.d.ts → DSL_DataQuality_ElementDriver.d.ts} +17 -7
  2. package/lib/components/DSL_DataQuality_ElementDriver.d.ts.map +1 -0
  3. package/lib/components/{DSL_DataQuality_ClassElementDriver.js → DSL_DataQuality_ElementDriver.js} +70 -23
  4. package/lib/components/DSL_DataQuality_ElementDriver.js.map +1 -0
  5. package/lib/components/DSL_DataQuality_LegendStudioApplicationPlugin.d.ts.map +1 -1
  6. package/lib/components/DSL_DataQuality_LegendStudioApplicationPlugin.js +20 -39
  7. package/lib/components/DSL_DataQuality_LegendStudioApplicationPlugin.js.map +1 -1
  8. package/lib/components/{DSL_NewDataQualityClassValidationElement.d.ts → DSL_NewDataQualityValidationElement.d.ts} +2 -2
  9. package/lib/components/DSL_NewDataQualityValidationElement.d.ts.map +1 -0
  10. package/lib/components/DSL_NewDataQualityValidationElement.js +80 -0
  11. package/lib/components/DSL_NewDataQualityValidationElement.js.map +1 -0
  12. package/lib/components/DataQualityRelationTrialRuns.d.ts +22 -0
  13. package/lib/components/DataQualityRelationTrialRuns.d.ts.map +1 -0
  14. package/lib/components/DataQualityRelationTrialRuns.js +87 -0
  15. package/lib/components/DataQualityRelationTrialRuns.js.map +1 -0
  16. package/lib/components/{DSL_NewDataQualityServiceValidationElement.d.ts → DataQualityRelationValidationConfigurationEditor.d.ts} +2 -2
  17. package/lib/components/DataQualityRelationValidationConfigurationEditor.d.ts.map +1 -0
  18. package/lib/components/DataQualityRelationValidationConfigurationEditor.js +99 -0
  19. package/lib/components/DataQualityRelationValidationConfigurationEditor.js.map +1 -0
  20. package/lib/components/DataQualityRelationValidationEditor.d.ts +30 -0
  21. package/lib/components/DataQualityRelationValidationEditor.d.ts.map +1 -0
  22. package/lib/components/DataQualityRelationValidationEditor.js +89 -0
  23. package/lib/components/DataQualityRelationValidationEditor.js.map +1 -0
  24. package/lib/components/DataQualityResultPanel.d.ts.map +1 -1
  25. package/lib/components/DataQualityResultPanel.js +1 -1
  26. package/lib/components/DataQualityResultPanel.js.map +1 -1
  27. package/lib/components/DataQualityResultValues.d.ts +0 -2
  28. package/lib/components/DataQualityResultValues.d.ts.map +1 -1
  29. package/lib/components/DataQualityResultValues.js.map +1 -1
  30. package/lib/components/DataQualitySideBar.js +2 -2
  31. package/lib/components/DataQualitySideBar.js.map +1 -1
  32. package/lib/components/DataQualityValidationDetailPanel.d.ts +36 -0
  33. package/lib/components/DataQualityValidationDetailPanel.d.ts.map +1 -0
  34. package/lib/components/DataQualityValidationDetailPanel.js +39 -0
  35. package/lib/components/DataQualityValidationDetailPanel.js.map +1 -0
  36. package/lib/components/DataQualityValidationParametersEditor.d.ts +15 -0
  37. package/lib/components/DataQualityValidationParametersEditor.d.ts.map +1 -0
  38. package/lib/components/DataQualityValidationParametersEditor.js +129 -0
  39. package/lib/components/DataQualityValidationParametersEditor.js.map +1 -0
  40. package/lib/components/states/ConstraintState.d.ts +2 -0
  41. package/lib/components/states/ConstraintState.d.ts.map +1 -1
  42. package/lib/components/states/ConstraintState.js +2 -0
  43. package/lib/components/states/ConstraintState.js.map +1 -1
  44. package/lib/components/states/DataQualityClassValidationState.d.ts +2 -2
  45. package/lib/components/states/DataQualityClassValidationState.d.ts.map +1 -1
  46. package/lib/components/states/DataQualityClassValidationState.js +4 -4
  47. package/lib/components/states/DataQualityClassValidationState.js.map +1 -1
  48. package/lib/components/states/DataQualityRelationResultState.d.ts +46 -0
  49. package/lib/components/states/DataQualityRelationResultState.d.ts.map +1 -0
  50. package/lib/components/states/DataQualityRelationResultState.js +194 -0
  51. package/lib/components/states/DataQualityRelationResultState.js.map +1 -0
  52. package/lib/components/states/DataQualityRelationValidationConfigurationState.d.ts +73 -0
  53. package/lib/components/states/DataQualityRelationValidationConfigurationState.d.ts.map +1 -0
  54. package/lib/components/states/DataQualityRelationValidationConfigurationState.js +255 -0
  55. package/lib/components/states/DataQualityRelationValidationConfigurationState.js.map +1 -0
  56. package/lib/components/states/DataQualityRelationValidationLambdaEditorState.d.ts +32 -0
  57. package/lib/components/states/DataQualityRelationValidationLambdaEditorState.d.ts.map +1 -0
  58. package/lib/components/states/DataQualityRelationValidationLambdaEditorState.js +79 -0
  59. package/lib/components/states/DataQualityRelationValidationLambdaEditorState.js.map +1 -0
  60. package/lib/components/states/DataQualityRelationValidationState.d.ts +38 -0
  61. package/lib/components/states/DataQualityRelationValidationState.d.ts.map +1 -0
  62. package/lib/components/states/DataQualityRelationValidationState.js +119 -0
  63. package/lib/components/states/DataQualityRelationValidationState.js.map +1 -0
  64. package/lib/components/states/DataQualityResultState.d.ts.map +1 -1
  65. package/lib/components/states/DataQualityResultState.js +6 -3
  66. package/lib/components/states/DataQualityResultState.js.map +1 -1
  67. package/lib/components/states/DataQualityState.js +1 -1
  68. package/lib/components/states/DataQualityState.js.map +1 -1
  69. package/lib/graph/metamodel/DSL_DataQuality_HashUtils.d.ts +5 -1
  70. package/lib/graph/metamodel/DSL_DataQuality_HashUtils.d.ts.map +1 -1
  71. package/lib/graph/metamodel/DSL_DataQuality_HashUtils.js +4 -0
  72. package/lib/graph/metamodel/DSL_DataQuality_HashUtils.js.map +1 -1
  73. package/lib/graph/metamodel/DSL_DataQuality_PureGraphPlugin.d.ts.map +1 -1
  74. package/lib/graph/metamodel/DSL_DataQuality_PureGraphPlugin.js +2 -1
  75. package/lib/graph/metamodel/DSL_DataQuality_PureGraphPlugin.js.map +1 -1
  76. package/lib/graph/metamodel/pure/packageableElements/data-quality/DataQualityValidationConfiguration.d.ts +36 -3
  77. package/lib/graph/metamodel/pure/packageableElements/data-quality/DataQualityValidationConfiguration.d.ts.map +1 -1
  78. package/lib/graph/metamodel/pure/packageableElements/data-quality/DataQualityValidationConfiguration.js +58 -4
  79. package/lib/graph/metamodel/pure/packageableElements/data-quality/DataQualityValidationConfiguration.js.map +1 -1
  80. package/lib/graph-manager/DSL_DataQuality_GraphManagerHelper.d.ts +2 -1
  81. package/lib/graph-manager/DSL_DataQuality_GraphManagerHelper.d.ts.map +1 -1
  82. package/lib/graph-manager/DSL_DataQuality_GraphManagerHelper.js +2 -1
  83. package/lib/graph-manager/DSL_DataQuality_GraphManagerHelper.js.map +1 -1
  84. package/lib/graph-manager/DSL_DataQuality_GraphModifierHelper.d.ts +13 -2
  85. package/lib/graph-manager/DSL_DataQuality_GraphModifierHelper.d.ts.map +1 -1
  86. package/lib/graph-manager/DSL_DataQuality_GraphModifierHelper.js +36 -2
  87. package/lib/graph-manager/DSL_DataQuality_GraphModifierHelper.js.map +1 -1
  88. package/lib/graph-manager/DSL_DataQuality_PureGraphManagerPlugin.d.ts.map +1 -1
  89. package/lib/graph-manager/DSL_DataQuality_PureGraphManagerPlugin.js +5 -2
  90. package/lib/graph-manager/DSL_DataQuality_PureGraphManagerPlugin.js.map +1 -1
  91. package/lib/graph-manager/action/changeDetection/DSL_DataQuality_ObserverHelper.d.ts +5 -1
  92. package/lib/graph-manager/action/changeDetection/DSL_DataQuality_ObserverHelper.d.ts.map +1 -1
  93. package/lib/graph-manager/action/changeDetection/DSL_DataQuality_ObserverHelper.js +29 -2
  94. package/lib/graph-manager/action/changeDetection/DSL_DataQuality_ObserverHelper.js.map +1 -1
  95. package/lib/graph-manager/protocol/pure/DSL_DataQuality_PureGraphManagerExtension.d.ts +6 -5
  96. package/lib/graph-manager/protocol/pure/DSL_DataQuality_PureGraphManagerExtension.d.ts.map +1 -1
  97. package/lib/graph-manager/protocol/pure/DSL_DataQuality_PureGraphManagerExtension.js.map +1 -1
  98. package/lib/graph-manager/protocol/pure/DSL_DataQuality_PureProtocolProcessorPlugin.d.ts +1 -1
  99. package/lib/graph-manager/protocol/pure/DSL_DataQuality_PureProtocolProcessorPlugin.d.ts.map +1 -1
  100. package/lib/graph-manager/protocol/pure/DSL_DataQuality_PureProtocolProcessorPlugin.js +34 -40
  101. package/lib/graph-manager/protocol/pure/DSL_DataQuality_PureProtocolProcessorPlugin.js.map +1 -1
  102. package/lib/graph-manager/protocol/pure/v1/V1_DSL_Data_Quality_PureGraphManagerExtension.d.ts +8 -6
  103. package/lib/graph-manager/protocol/pure/v1/V1_DSL_Data_Quality_PureGraphManagerExtension.d.ts.map +1 -1
  104. package/lib/graph-manager/protocol/pure/v1/V1_DSL_Data_Quality_PureGraphManagerExtension.js +19 -12
  105. package/lib/graph-manager/protocol/pure/v1/V1_DSL_Data_Quality_PureGraphManagerExtension.js.map +1 -1
  106. package/lib/graph-manager/protocol/pure/v1/{V1_DataQualityConstraintsConfiguration.d.ts → V1_DataQualityValidationConfiguration.d.ts} +26 -4
  107. package/lib/graph-manager/protocol/pure/v1/V1_DataQualityValidationConfiguration.d.ts.map +1 -0
  108. package/lib/graph-manager/protocol/pure/v1/{V1_DataQualityConstraintsConfiguration.js → V1_DataQualityValidationConfiguration.js} +49 -4
  109. package/lib/graph-manager/protocol/pure/v1/V1_DataQualityValidationConfiguration.js.map +1 -0
  110. package/lib/graph-manager/protocol/pure/v1/transformation/V1_DSL_DataQuality_ValueSpecificationBuilderHelper.d.ts +7 -3
  111. package/lib/graph-manager/protocol/pure/v1/transformation/V1_DSL_DataQuality_ValueSpecificationBuilderHelper.d.ts.map +1 -1
  112. package/lib/graph-manager/protocol/pure/v1/transformation/V1_DSL_DataQuality_ValueSpecificationBuilderHelper.js +43 -3
  113. package/lib/graph-manager/protocol/pure/v1/transformation/V1_DSL_DataQuality_ValueSpecificationBuilderHelper.js.map +1 -1
  114. package/lib/graph-manager/protocol/pure/v1/transformation/V1_DSL_DataQuality_ValueSpecificationTransformer.d.ts +6 -3
  115. package/lib/graph-manager/protocol/pure/v1/transformation/V1_DSL_DataQuality_ValueSpecificationTransformer.d.ts.map +1 -1
  116. package/lib/graph-manager/protocol/pure/v1/transformation/V1_DSL_DataQuality_ValueSpecificationTransformer.js +39 -2
  117. package/lib/graph-manager/protocol/pure/v1/transformation/V1_DSL_DataQuality_ValueSpecificationTransformer.js.map +1 -1
  118. package/lib/graph-manager/protocol/pure/v1/transformation/pureProtocol/V1_DSL_DataQuality_ProtocolHelper.d.ts +5 -2
  119. package/lib/graph-manager/protocol/pure/v1/transformation/pureProtocol/V1_DSL_DataQuality_ProtocolHelper.d.ts.map +1 -1
  120. package/lib/graph-manager/protocol/pure/v1/transformation/pureProtocol/V1_DSL_DataQuality_ProtocolHelper.js +27 -9
  121. package/lib/graph-manager/protocol/pure/v1/transformation/pureProtocol/V1_DSL_DataQuality_ProtocolHelper.js.map +1 -1
  122. package/lib/index.css +2 -2
  123. package/lib/index.css.map +1 -1
  124. package/lib/package.json +1 -1
  125. package/package.json +7 -7
  126. package/src/components/{DSL_DataQuality_ClassElementDriver.tsx → DSL_DataQuality_ElementDriver.tsx} +87 -18
  127. package/src/components/DSL_DataQuality_LegendStudioApplicationPlugin.tsx +33 -48
  128. package/src/components/DSL_NewDataQualityValidationElement.tsx +208 -0
  129. package/src/components/DataQualityRelationTrialRuns.tsx +288 -0
  130. package/src/components/DataQualityRelationValidationConfigurationEditor.tsx +364 -0
  131. package/src/components/DataQualityRelationValidationEditor.tsx +290 -0
  132. package/src/components/DataQualityResultPanel.tsx +1 -4
  133. package/src/components/DataQualityResultValues.tsx +1 -5
  134. package/src/components/DataQualitySideBar.tsx +2 -2
  135. package/src/components/DataQualityValidationDetailPanel.tsx +182 -0
  136. package/src/components/DataQualityValidationParametersEditor.tsx +355 -0
  137. package/src/components/states/ConstraintState.ts +2 -0
  138. package/src/components/states/DataQualityClassValidationState.ts +5 -5
  139. package/src/components/states/DataQualityRelationResultState.ts +274 -0
  140. package/src/components/states/DataQualityRelationValidationConfigurationState.ts +429 -0
  141. package/src/components/states/DataQualityRelationValidationLambdaEditorState.ts +138 -0
  142. package/src/components/states/DataQualityRelationValidationState.ts +180 -0
  143. package/src/components/states/DataQualityResultState.ts +6 -8
  144. package/src/components/states/DataQualityState.ts +1 -1
  145. package/src/graph/metamodel/DSL_DataQuality_HashUtils.ts +4 -0
  146. package/src/graph/metamodel/DSL_DataQuality_PureGraphPlugin.ts +2 -0
  147. package/src/graph/metamodel/pure/packageableElements/data-quality/DataQualityValidationConfiguration.ts +79 -3
  148. package/src/graph-manager/DSL_DataQuality_GraphManagerHelper.ts +13 -0
  149. package/src/graph-manager/DSL_DataQuality_GraphModifierHelper.ts +107 -0
  150. package/src/graph-manager/DSL_DataQuality_PureGraphManagerPlugin.ts +8 -0
  151. package/src/graph-manager/action/changeDetection/DSL_DataQuality_ObserverHelper.ts +54 -1
  152. package/src/graph-manager/protocol/pure/DSL_DataQuality_PureGraphManagerExtension.ts +5 -3
  153. package/src/graph-manager/protocol/pure/DSL_DataQuality_PureProtocolProcessorPlugin.ts +72 -81
  154. package/src/graph-manager/protocol/pure/v1/V1_DSL_Data_Quality_PureGraphManagerExtension.ts +20 -23
  155. package/src/graph-manager/protocol/pure/v1/{V1_DataQualityConstraintsConfiguration.ts → V1_DataQualityValidationConfiguration.ts} +63 -4
  156. package/src/graph-manager/protocol/pure/v1/transformation/V1_DSL_DataQuality_ValueSpecificationBuilderHelper.ts +116 -2
  157. package/src/graph-manager/protocol/pure/v1/transformation/V1_DSL_DataQuality_ValueSpecificationTransformer.ts +78 -1
  158. package/src/graph-manager/protocol/pure/v1/transformation/pureProtocol/V1_DSL_DataQuality_ProtocolHelper.ts +55 -8
  159. package/style/_data-quality-relation-validation-builder.scss +454 -0
  160. package/style/index.scss +6 -0
  161. package/tsconfig.json +13 -6
  162. package/lib/components/DSL_DataQuality_ClassElementDriver.d.ts.map +0 -1
  163. package/lib/components/DSL_DataQuality_ClassElementDriver.js.map +0 -1
  164. package/lib/components/DSL_DataQuality_ServiceElementDriver.d.ts +0 -27
  165. package/lib/components/DSL_DataQuality_ServiceElementDriver.d.ts.map +0 -1
  166. package/lib/components/DSL_DataQuality_ServiceElementDriver.js +0 -41
  167. package/lib/components/DSL_DataQuality_ServiceElementDriver.js.map +0 -1
  168. package/lib/components/DSL_NewDataQualityClassValidationElement.d.ts.map +0 -1
  169. package/lib/components/DSL_NewDataQualityClassValidationElement.js +0 -64
  170. package/lib/components/DSL_NewDataQualityClassValidationElement.js.map +0 -1
  171. package/lib/components/DSL_NewDataQualityServiceValidationElement.d.ts.map +0 -1
  172. package/lib/components/DSL_NewDataQualityServiceValidationElement.js +0 -41
  173. package/lib/components/DSL_NewDataQualityServiceValidationElement.js.map +0 -1
  174. package/lib/graph-manager/protocol/pure/v1/V1_DataQualityConstraintsConfiguration.d.ts.map +0 -1
  175. package/lib/graph-manager/protocol/pure/v1/V1_DataQualityConstraintsConfiguration.js.map +0 -1
  176. package/src/components/DSL_DataQuality_ServiceElementDriver.tsx +0 -57
  177. package/src/components/DSL_NewDataQualityClassValidationElement.tsx +0 -156
  178. package/src/components/DSL_NewDataQualityServiceValidationElement.tsx +0 -74
@@ -17,11 +17,16 @@
17
17
  import {
18
18
  type GraphFetchTree,
19
19
  type V1_GraphFetchTree,
20
+ type V1_GraphTransformerContext,
21
+ type V1_RawVariable,
20
22
  PackageableElementPointerType,
21
23
  V1_PackageableElementPointer,
22
24
  V1_PropertyGraphFetchTree,
23
25
  V1_RootGraphFetchTree,
24
26
  V1_transformGraphFetchTree,
27
+ V1_transformRawLambda,
28
+ V1_initPackageableElement,
29
+ V1_RawValueSpecificationTransformer,
25
30
  } from '@finos/legend-graph';
26
31
  import { V1_DataQualityRootGraphFetchTree } from '../model/graphFetch/V1_DataQualityRootGraphFetchTree.js';
27
32
  import { assertType, UnsupportedOperationError } from '@finos/legend-shared';
@@ -32,14 +37,21 @@ import {
32
37
  } from '../../../../../graph/metamodel/pure/packageableElements/data-quality/DataQualityGraphFetchTree.js';
33
38
  import {
34
39
  type DataQualityExecutionContext,
40
+ type DataQualityRelationValidation,
41
+ type DataQualityRelationValidationConfiguration,
42
+ type DataQualityClassValidationsConfiguration,
35
43
  DataSpaceDataQualityExecutionContext,
36
44
  MappingAndRuntimeDataQualityExecutionContext,
37
45
  } from '../../../../../graph/metamodel/pure/packageableElements/data-quality/DataQualityValidationConfiguration.js';
38
46
  import {
39
47
  type V1_DataQualityExecutionContext,
48
+ V1_DataQualityClassValidationsConfiguration,
49
+ V1_DataQualityRelationValidation,
50
+ V1_DataQualityRelationValidationsConfiguration,
40
51
  V1_DataSpaceDataQualityExecutionContext,
41
52
  V1_MappingAndRuntimeDataQualityExecutionContext,
42
- } from '../V1_DataQualityConstraintsConfiguration.js';
53
+ V1_DataQualityRelationQueryLambda,
54
+ } from '../V1_DataQualityValidationConfiguration.js';
43
55
  import { DATA_SPACE_ELEMENT_POINTER } from '@finos/legend-extension-dsl-data-space/graph';
44
56
 
45
57
  export function V1_transformDataQualityGraphFetchTree(
@@ -137,3 +149,68 @@ export function V1_transformDataQualityExecutionContext(
137
149
  `Can't build data quality execution context '${value.toString()}'`,
138
150
  );
139
151
  }
152
+
153
+ export function V1_transformDataQualityRelationValidation(
154
+ value: DataQualityRelationValidation,
155
+ context: V1_GraphTransformerContext,
156
+ ): V1_DataQualityRelationValidation {
157
+ const relationConstraint = new V1_DataQualityRelationValidation();
158
+ relationConstraint.name = value.name;
159
+ relationConstraint.description = value.description;
160
+ relationConstraint.assertion = V1_transformRawLambda(
161
+ value.assertion,
162
+ context,
163
+ );
164
+ relationConstraint.type = value.type;
165
+ relationConstraint.rowMapFunction = value.rowMapFunction
166
+ ? V1_transformRawLambda(value.rowMapFunction, context)
167
+ : value.rowMapFunction;
168
+ return relationConstraint;
169
+ }
170
+
171
+ export function V1_transformDataQualityClassValidationConfiguration(
172
+ metamodel: DataQualityClassValidationsConfiguration,
173
+ context: V1_GraphTransformerContext,
174
+ ): V1_DataQualityClassValidationsConfiguration {
175
+ const protocol = new V1_DataQualityClassValidationsConfiguration();
176
+ V1_initPackageableElement(protocol, metamodel);
177
+ protocol.name = metamodel.name;
178
+ protocol.package = metamodel.package?.path ?? '';
179
+ protocol.dataQualityRootGraphFetchTree =
180
+ metamodel.dataQualityRootGraphFetchTree
181
+ ? (V1_transformDataQualityGraphFetchTree(
182
+ metamodel.dataQualityRootGraphFetchTree,
183
+ [],
184
+ new Map<string, unknown[]>(),
185
+ false,
186
+ false,
187
+ ) as V1_DataQualityRootGraphFetchTree)
188
+ : undefined;
189
+ protocol.context = V1_transformDataQualityExecutionContext(metamodel.context);
190
+ protocol.filter = metamodel.filter
191
+ ? V1_transformRawLambda(metamodel.filter, context)
192
+ : undefined;
193
+ return protocol;
194
+ }
195
+
196
+ export function V1_transformDataQualityRelationValidationConfiguration(
197
+ metamodel: DataQualityRelationValidationConfiguration,
198
+ context: V1_GraphTransformerContext,
199
+ ): V1_DataQualityRelationValidationsConfiguration {
200
+ const protocol = new V1_DataQualityRelationValidationsConfiguration();
201
+ V1_initPackageableElement(protocol, metamodel);
202
+ protocol.name = metamodel.name;
203
+ protocol.package = metamodel.package?.path ?? '';
204
+ protocol.validations = metamodel.validations.map((validation) =>
205
+ V1_transformDataQualityRelationValidation(validation, context),
206
+ );
207
+ protocol.query = new V1_DataQualityRelationQueryLambda();
208
+ protocol.query.body = metamodel.query.body;
209
+ protocol.query.parameters = metamodel.query.parameters.map(
210
+ (v) =>
211
+ v.accept_RawValueSpecificationVisitor(
212
+ new V1_RawValueSpecificationTransformer(context),
213
+ ) as V1_RawVariable,
214
+ );
215
+ return protocol;
216
+ }
@@ -21,6 +21,9 @@ import {
21
21
  custom,
22
22
  deserialize,
23
23
  serialize,
24
+ list,
25
+ optional,
26
+ raw,
24
27
  } from 'serializr';
25
28
  import {
26
29
  type V1_DataQualityExecutionContext,
@@ -28,7 +31,10 @@ import {
28
31
  V1_DataQualityServiceValidationsConfiguration,
29
32
  V1_DataSpaceDataQualityExecutionContext,
30
33
  V1_MappingAndRuntimeDataQualityExecutionContext,
31
- } from '../../V1_DataQualityConstraintsConfiguration.js';
34
+ V1_DataQualityRelationValidationsConfiguration,
35
+ V1_DataQualityRelationValidation,
36
+ V1_DataQualityRelationQueryLambda,
37
+ } from '../../V1_DataQualityValidationConfiguration.js';
32
38
  import {
33
39
  type PlainObject,
34
40
  optionalCustom,
@@ -45,9 +51,13 @@ import {
45
51
  V1_deserializeGraphFetchTree,
46
52
  V1_stereotypePtrModelSchema,
47
53
  V1_taggedValueModelSchema,
54
+ V1_RawValueSpecificationType,
55
+ V1_rawVariableModelSchema,
48
56
  } from '@finos/legend-graph';
49
57
 
50
58
  export const V1_DATA_QUALITY_PROTOCOL_TYPE = 'dataQualityValidation';
59
+ export const V1_DATA_QUALITY_RELATION_PROTOCOL_TYPE =
60
+ 'dataqualityRelationValidation';
51
61
  export const V1_DATA_QUALITY_SERVICE_PROTOCOL_TYPE =
52
62
  'dataQualityServiceValidations';
53
63
  const V1_DATA_QUALITY_DATASPACE_EXECUTION_CONTEXT =
@@ -125,6 +135,19 @@ export function V1_deserializeDataQualityExecutionContext(
125
135
  }
126
136
  }
127
137
 
138
+ const V1_relationValidationModelSchema = createModelSchema(
139
+ V1_DataQualityRelationValidation,
140
+ {
141
+ _type: usingConstantValueSchema(V1_RawValueSpecificationType.LAMBDA),
142
+ name: primitive(),
143
+ description: primitive(),
144
+ assertion: usingModelSchema(V1_rawLambdaModelSchema),
145
+ rowMapFunction: optional(usingModelSchema(V1_rawLambdaModelSchema)),
146
+ expected: optional(primitive()),
147
+ buffer: optional(primitive()),
148
+ },
149
+ );
150
+
128
151
  const V1_dataQualityClassValidationModelSchema = (
129
152
  plugins: PureProtocolProcessorPlugin[],
130
153
  ): ModelSchema<V1_DataQualityClassValidationsConfiguration> =>
@@ -149,6 +172,26 @@ const V1_dataQualityClassValidationModelSchema = (
149
172
  }),
150
173
  });
151
174
 
175
+ export const V1_rawLambdaModelSchemaParameters = createModelSchema(
176
+ V1_DataQualityRelationQueryLambda,
177
+ {
178
+ _type: usingConstantValueSchema(V1_RawValueSpecificationType.LAMBDA),
179
+ body: raw(),
180
+ parameters: list(usingModelSchema(V1_rawVariableModelSchema)),
181
+ },
182
+ );
183
+
184
+ const V1_dataQualityRelationValidationModelSchema = (
185
+ plugins: PureProtocolProcessorPlugin[],
186
+ ): ModelSchema<V1_DataQualityRelationValidationsConfiguration> =>
187
+ createModelSchema(V1_DataQualityRelationValidationsConfiguration, {
188
+ _type: usingConstantValueSchema(V1_DATA_QUALITY_RELATION_PROTOCOL_TYPE),
189
+ name: primitive(),
190
+ package: primitive(),
191
+ query: usingModelSchema(V1_rawLambdaModelSchemaParameters),
192
+ validations: list(usingModelSchema(V1_relationValidationModelSchema)),
193
+ });
194
+
152
195
  const V1_dataQualityServiceValidationModelSchema = (
153
196
  plugins: PureProtocolProcessorPlugin[],
154
197
  ): ModelSchema<V1_DataQualityServiceValidationsConfiguration> =>
@@ -176,6 +219,12 @@ export const V1_serializeDataQualityServiceValidation = (
176
219
  ): PlainObject<V1_DataQualityServiceValidationsConfiguration> =>
177
220
  serialize(V1_dataQualityServiceValidationModelSchema(plugins), protocol);
178
221
 
222
+ export const V1_serializeDataQualityRelationValidation = (
223
+ protocol: V1_DataQualityRelationValidationsConfiguration,
224
+ plugins: PureProtocolProcessorPlugin[],
225
+ ): PlainObject<V1_DataQualityRelationValidationsConfiguration> =>
226
+ serialize(V1_dataQualityRelationValidationModelSchema(plugins), protocol);
227
+
179
228
  export const V1_deserializeDataQualityClassValidation = (
180
229
  json: PlainObject<V1_DataQualityClassValidationsConfiguration>,
181
230
  plugins: PureProtocolProcessorPlugin[],
@@ -188,10 +237,8 @@ export const V1_deserializeDataQualityServiceValidation = (
188
237
  ): V1_DataQualityServiceValidationsConfiguration =>
189
238
  deserialize(V1_dataQualityServiceValidationModelSchema(plugins), json);
190
239
 
191
- export const V1_dataQualityServiceValidationsConfigurationModelSchema =
192
- createModelSchema(V1_DataQualityServiceValidationsConfiguration, {
193
- _type: usingConstantValueSchema(V1_DATA_QUALITY_SERVICE_PROTOCOL_TYPE),
194
- contextName: primitive(),
195
- serviceName: primitive(),
196
- dataQualityGraphFetchTree: primitive(),
197
- });
240
+ export const V1_deserializeDataQualityRelationValidation = (
241
+ json: PlainObject<V1_DataQualityRelationValidationsConfiguration>,
242
+ plugins: PureProtocolProcessorPlugin[],
243
+ ): V1_DataQualityRelationValidationsConfiguration =>
244
+ deserialize(V1_dataQualityRelationValidationModelSchema(plugins), json);
@@ -0,0 +1,454 @@
1
+ /**
2
+ * Copyright (c) 2020-present, Goldman Sachs
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ @use 'mixins' as *;
18
+
19
+ .uml-element-editor {
20
+ &__row-map {
21
+ padding-bottom: 0.5rem;
22
+ display: flex;
23
+ flex-direction: row;
24
+
25
+ &__label {
26
+ display: flex;
27
+ align-items: center;
28
+ padding-right: 0.5rem;
29
+ padding-left: 0.5rem;
30
+ margin-right: 0.5rem;
31
+ color: var(--color-light-grey-100);
32
+ background: var(--color-dark-grey-300);
33
+ }
34
+ }
35
+ }
36
+
37
+ .relation-config-validations {
38
+ background: var(--color-light-grey-0);
39
+ margin-left: 1rem;
40
+ margin-right: 1rem;
41
+ }
42
+
43
+ .relation-validation-config-editor {
44
+ height: 100%;
45
+ width: 100%;
46
+
47
+ .panel {
48
+ height: 100%;
49
+ width: 100%;
50
+
51
+ &__header {
52
+ padding-left: 0.5rem;
53
+ color: var(--color-light-grey-300);
54
+ font-weight: bold;
55
+ background: var(--color-dark-grey-50);
56
+ border-bottom: 0.1rem solid var(--color-dark-grey-200);
57
+ }
58
+
59
+ &__header__title__label {
60
+ background: var(--color-dark-grey-250);
61
+ }
62
+
63
+ &__header__action {
64
+ color: var(--color-light-grey-400);
65
+ }
66
+
67
+ &__header__action[disabled] svg {
68
+ color: var(--color-dark-grey-300) !important;
69
+ }
70
+
71
+ &__content {
72
+ height: calc(100% - 5.6rem);
73
+ background: var(--color-dark-grey-50);
74
+ }
75
+
76
+ &__content > div:first-child {
77
+ margin-top: 0;
78
+ }
79
+
80
+ &__content__lists {
81
+ height: 100%;
82
+ width: 100%;
83
+ padding: 1rem;
84
+ overflow: overlay;
85
+ }
86
+ }
87
+
88
+ &__content {
89
+ position: relative;
90
+ }
91
+
92
+ &__tabs__header {
93
+ padding-left: 0;
94
+ }
95
+
96
+ &__tabs {
97
+ height: 2.8rem;
98
+ z-index: 1;
99
+ display: flex;
100
+ overflow-x: overlay;
101
+ overflow-y: hidden;
102
+ }
103
+
104
+ &__tab {
105
+ @include flexCenter;
106
+
107
+ display: inline-flex;
108
+ height: 100%;
109
+ color: var(--color-light-grey-400);
110
+ padding: 0 1rem;
111
+ border-right: 0.1rem solid var(--color-dark-grey-80);
112
+ white-space: nowrap;
113
+ cursor: pointer;
114
+ }
115
+
116
+ &__tab--active {
117
+ position: relative;
118
+ }
119
+
120
+ &__tab--active::after {
121
+ content: '';
122
+ height: 0.2rem;
123
+ width: 100%;
124
+ position: absolute;
125
+ bottom: 0;
126
+ background: var(--color-yellow-200);
127
+ }
128
+
129
+ &__tab__hint {
130
+ @include flexCenter;
131
+
132
+ border-radius: 0.2rem;
133
+ margin-left: 1rem;
134
+ color: var(--color-light-grey-300);
135
+
136
+ svg {
137
+ font-size: 1.2rem;
138
+ }
139
+ }
140
+
141
+ &__activator__selector__option {
142
+ display: block;
143
+ height: 7rem;
144
+ padding-bottom: 0.4rem;
145
+ max-width: 45rem;
146
+
147
+ &__name {
148
+ @include flexVCenter;
149
+
150
+ height: 2.8rem;
151
+ padding: 0 0.5rem;
152
+ }
153
+
154
+ &__description {
155
+ display: -webkit-box;
156
+ -webkit-box-orient: vertical;
157
+ -webkit-line-clamp: 2;
158
+ overflow: hidden;
159
+ text-align: left;
160
+ height: calc(100% - 2.8rem);
161
+ padding: 0 0.5rem;
162
+ line-height: 1.8rem;
163
+ font-size: 1.2rem;
164
+ }
165
+ }
166
+
167
+ &__definition {
168
+ height: 100%;
169
+ width: 100%;
170
+ padding: 1rem;
171
+ overflow: overlay;
172
+
173
+ &__item {
174
+ padding-top: 1rem;
175
+
176
+ &__header {
177
+ padding-left: 1rem;
178
+ padding-right: 1rem;
179
+
180
+ @include flexVCenter;
181
+ @include flexHSpaceBetween;
182
+ }
183
+
184
+ &__header__add-btn {
185
+ @include flexCenter;
186
+
187
+ height: 2.8rem;
188
+ width: 2.8rem;
189
+ }
190
+
191
+ &__header__title {
192
+ height: 2.8rem;
193
+
194
+ @include flexVCenter;
195
+
196
+ background: var(--color-dark-grey-200);
197
+ color: var(--color-light-grey-100);
198
+ padding: 0 1rem;
199
+ border-radius: 0.2rem;
200
+ margin: 0;
201
+ font-weight: 500;
202
+ }
203
+
204
+ &__content {
205
+ width: 100%;
206
+ padding: 1rem;
207
+ padding-top: 0.5rem;
208
+ }
209
+
210
+ &__content--empty {
211
+ @include flexCenter;
212
+
213
+ margin-top: 0.5rem;
214
+ height: 4rem;
215
+ width: 100%;
216
+ color: var(--color-dark-grey-300);
217
+ font-weight: 500;
218
+ user-select: none;
219
+ border: 0.2rem dashed var(--color-dark-grey-200);
220
+ }
221
+ }
222
+
223
+ &__lambda-editor {
224
+ height: 28rem !important;
225
+ }
226
+
227
+ &__result-viewer {
228
+ height: 35rem !important;
229
+ border: 0.1rem solid var(--color-dark-grey-280);
230
+ }
231
+ }
232
+
233
+ &__return__type-editor {
234
+ margin-top: 0.5rem;
235
+ display: flex;
236
+ justify-content: flex-end;
237
+ }
238
+
239
+ &__activator-builder {
240
+ height: 100%;
241
+ width: 100%;
242
+ }
243
+ }
244
+
245
+ .relation-validation-dialog-modal {
246
+ padding: 0;
247
+ width: 50vw;
248
+ overflow: hidden;
249
+
250
+ &__root-container {
251
+ margin-top: 0 !important;
252
+ }
253
+
254
+ &__container {
255
+ align-items: center !important;
256
+ }
257
+
258
+ &__content {
259
+ max-width: 100vw !important;
260
+ }
261
+
262
+ &__content--scrollable {
263
+ max-width: 100vw !important;
264
+ }
265
+
266
+ .modal__body {
267
+ height: calc(100% - 8.6rem);
268
+ padding: 1rem;
269
+ }
270
+
271
+ .modal__body.modal__body--footless {
272
+ height: calc(100% - 3.6rem);
273
+ }
274
+
275
+ &__absolute-date {
276
+ padding-bottom: 1rem;
277
+ border-top: 0.1rem solid var(--color-dark-grey-50);
278
+
279
+ &__input {
280
+ height: 2.8rem;
281
+ border: 0.1rem solid var(--color-dark-grey-300);
282
+ color-scheme: dark;
283
+ font-size: 1.2rem;
284
+ }
285
+ }
286
+ }
287
+
288
+ .relation-validation-editor {
289
+ padding: 1rem;
290
+ background: var(--color-light-grey-0);
291
+ border-radius: 0.2rem;
292
+ display: flex;
293
+ flex-direction: column;
294
+
295
+ &__label {
296
+ padding-right: 1rem;
297
+ display: flex;
298
+ align-items: center;
299
+ justify-content: right;
300
+ width: 25%;
301
+ background: var(--color-dark-grey-300);
302
+ margin-right: 0.5rem;
303
+ }
304
+
305
+ &__select {
306
+ width: 100%;
307
+ }
308
+
309
+ &__container {
310
+ margin: 0.5rem 0;
311
+ }
312
+
313
+ &__dnd__placeholder {
314
+ height: 8.1rem;
315
+ padding: 1rem;
316
+ }
317
+
318
+ &__content {
319
+ display: flex;
320
+ margin-bottom: 0.5rem;
321
+
322
+ &__lock {
323
+ height: 2.8rem;
324
+
325
+ @include flexVCenter;
326
+
327
+ flex: 0 0 2.5rem;
328
+ color: var(--color-light-grey-300);
329
+ }
330
+
331
+ &__select {
332
+ @include flexVCenter;
333
+
334
+ flex: auto;
335
+ height: 2.8rem;
336
+ background: var(--color-dark-grey-50);
337
+ color: var(--color-light-grey-100);
338
+ border-radius: 0.2rem;
339
+ }
340
+
341
+ &__name {
342
+ @include flexVCenter;
343
+
344
+ flex: auto;
345
+ height: 2.8rem;
346
+ background: var(--color-dark-grey-50);
347
+ color: var(--color-light-grey-100);
348
+ padding: 0 0.5rem;
349
+ border-radius: 0.2rem;
350
+ }
351
+
352
+ &__name::placeholder {
353
+ color: var(--color-dark-grey-500);
354
+ }
355
+
356
+ &__name--with-lock {
357
+ @include flexVCenter;
358
+
359
+ flex: auto;
360
+ height: 2.8rem;
361
+ background: var(--color-dark-grey-300);
362
+ color: var(--color-light-grey-100);
363
+ padding: 0 1rem;
364
+ border-radius: 0.2rem;
365
+ cursor: default;
366
+ }
367
+
368
+ &__name--with-lock__icon {
369
+ margin-right: 0.5rem;
370
+ width: 1.5rem;
371
+
372
+ svg {
373
+ font-size: 1.2rem;
374
+ }
375
+ }
376
+
377
+ &__name--with-lock__name {
378
+ @include ellipsisTextOverflow;
379
+
380
+ max-width: calc(100% - 1.5rem);
381
+ }
382
+ }
383
+ }
384
+
385
+ .relation-validation {
386
+ padding: 1rem;
387
+ background: var(--color-light-grey-0);
388
+ border-radius: 0.2rem;
389
+
390
+ &__container {
391
+ margin: 0.5rem 0;
392
+ }
393
+
394
+ &__dnd__placeholder {
395
+ height: 8.1rem;
396
+ padding: 1rem;
397
+ }
398
+
399
+ &__content {
400
+ display: flex;
401
+ margin-bottom: 0.5rem;
402
+
403
+ &__lock {
404
+ height: 2.8rem;
405
+
406
+ @include flexVCenter;
407
+
408
+ flex: 0 0 2.5rem;
409
+ color: var(--color-light-grey-300);
410
+ }
411
+
412
+ &__name {
413
+ @include flexVCenter;
414
+
415
+ flex: auto;
416
+ height: 2.8rem;
417
+ background: var(--color-dark-grey-300);
418
+ color: var(--color-light-grey-100);
419
+ padding: 0 1rem;
420
+ border-radius: 0.2rem;
421
+ }
422
+
423
+ &__name::placeholder {
424
+ color: var(--color-dark-grey-500);
425
+ }
426
+
427
+ &__name--with-lock {
428
+ @include flexVCenter;
429
+
430
+ flex: auto;
431
+ height: 2.8rem;
432
+ background: var(--color-dark-grey-300);
433
+ color: var(--color-light-grey-100);
434
+ padding: 0 1rem;
435
+ border-radius: 0.2rem;
436
+ cursor: default;
437
+ }
438
+
439
+ &__name--with-lock__icon {
440
+ margin-right: 0.5rem;
441
+ width: 1.5rem;
442
+
443
+ svg {
444
+ font-size: 1.2rem;
445
+ }
446
+ }
447
+
448
+ &__name--with-lock__name {
449
+ @include ellipsisTextOverflow;
450
+
451
+ max-width: calc(100% - 1.5rem);
452
+ }
453
+ }
454
+ }
package/style/index.scss CHANGED
@@ -16,6 +16,7 @@
16
16
 
17
17
  @use 'mixins' as *;
18
18
  @forward 'data-quality-validation-builder';
19
+ @forward 'data-quality-relation-validation-builder';
19
20
 
20
21
  .data-quality-constraints {
21
22
  display: flex;
@@ -29,6 +30,11 @@
29
30
 
30
31
  .element-creation-basis {
31
32
  width: 50%;
33
+ margin-top: 1rem;
34
+ }
35
+
36
+ .dq-validation-element-type {
37
+ margin-bottom: 1rem;
32
38
  }
33
39
 
34
40
  .data-quality-explorer {