@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
package/lib/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@finos/legend-extension-dsl-data-quality",
3
- "version": "1.0.60",
3
+ "version": "2.0.0",
4
4
  "description": "Legend extension for Data Quality",
5
5
  "keywords": [
6
6
  "legend",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@finos/legend-extension-dsl-data-quality",
3
- "version": "1.0.60",
3
+ "version": "2.0.0",
4
4
  "description": "Legend extension for Data Quality",
5
5
  "keywords": [
6
6
  "legend",
@@ -43,13 +43,13 @@
43
43
  },
44
44
  "dependencies": {
45
45
  "@finos/legend-application": "16.0.10",
46
- "@finos/legend-application-studio": "28.18.55",
46
+ "@finos/legend-application-studio": "28.18.57",
47
47
  "@finos/legend-art": "7.1.68",
48
- "@finos/legend-code-editor": "2.0.16",
49
- "@finos/legend-extension-dsl-data-space": "10.4.6",
50
- "@finos/legend-graph": "31.10.50",
51
- "@finos/legend-lego": "2.0.18",
52
- "@finos/legend-query-builder": "4.15.15",
48
+ "@finos/legend-code-editor": "2.0.18",
49
+ "@finos/legend-extension-dsl-data-space": "10.4.8",
50
+ "@finos/legend-graph": "31.10.52",
51
+ "@finos/legend-lego": "2.0.20",
52
+ "@finos/legend-query-builder": "4.15.17",
53
53
  "@finos/legend-shared": "10.0.61",
54
54
  "@finos/legend-storage": "3.0.112",
55
55
  "@types/react": "18.3.12",
@@ -19,9 +19,13 @@ import {
19
19
  NewElementDriver,
20
20
  } from '@finos/legend-application-studio';
21
21
  import {
22
+ type DataQualityValidationConfiguration,
22
23
  DataQualityClassValidationsConfiguration,
24
+ DataQualityServiceValidationConfiguration,
25
+ DataQualityRelationValidationConfiguration,
23
26
  DataSpaceDataQualityExecutionContext,
24
27
  MappingAndRuntimeDataQualityExecutionContext,
28
+ DataQualityRelationQueryLambda,
25
29
  } from '../graph/metamodel/pure/packageableElements/data-quality/DataQualityValidationConfiguration.js';
26
30
  import { action, computed, makeObservable, observable } from 'mobx';
27
31
  import {
@@ -53,13 +57,20 @@ export type RuntimeOption = {
53
57
  value: PackageableRuntime | undefined;
54
58
  };
55
59
 
56
- export enum ELEMENT_CREATION_BASIS {
60
+ export enum CLASS_ELEMENT_CREATION_BASIS {
57
61
  MAPPING_RUNTIME_BASED = 'Mapping/Runtime',
58
62
  DATASPACE_BASED = 'DataSpace',
59
63
  }
60
64
 
61
- export class DataQuality_ClassElementDriver extends NewElementDriver<DataQualityClassValidationsConfiguration> {
62
- dqElementCreationBasis: ELEMENT_CREATION_BASIS;
65
+ export enum DQ_VALIDATION_ELEMENT_TYPE {
66
+ CLASS_VALIDATION = 'ClassValidation',
67
+ SERVICE_VALIDATION = 'ServiceValidation',
68
+ RELATION_VALIDATION = 'RelationValidation',
69
+ }
70
+
71
+ export class DataQuality_ElementDriver extends NewElementDriver<DataQualityValidationConfiguration> {
72
+ dqValidationElementType: DQ_VALIDATION_ELEMENT_TYPE;
73
+ dqClassElementCreationBasis: CLASS_ELEMENT_CREATION_BASIS;
63
74
  dataSpaceSelected: PackageableElementOption<DataSpace> | undefined;
64
75
  mappingSelected: PackageableElementOption<Mapping> | undefined;
65
76
  runtimeSelected: RuntimeOption | undefined;
@@ -71,14 +82,18 @@ export class DataQuality_ClassElementDriver extends NewElementDriver<DataQuality
71
82
  dataSpaceSelected: observable,
72
83
  mappingSelected: observable,
73
84
  runtimeSelected: observable,
74
- dqElementCreationBasis: observable,
85
+ dqValidationElementType: observable,
86
+ dqClassElementCreationBasis: observable,
75
87
  setDataSpaceSelected: action,
76
88
  setMappingSelected: action,
77
89
  setRuntimeSelected: action,
78
- setDqElementCreationBasis: action,
90
+ setDqClassElementCreationBasis: action,
91
+ setDqValidationElementType: action,
79
92
  runtimeOptions: computed,
80
93
  });
81
- this.dqElementCreationBasis = ELEMENT_CREATION_BASIS.DATASPACE_BASED;
94
+ this.dqValidationElementType = DQ_VALIDATION_ELEMENT_TYPE.CLASS_VALIDATION;
95
+ this.dqClassElementCreationBasis =
96
+ CLASS_ELEMENT_CREATION_BASIS.DATASPACE_BASED;
82
97
  this.dataSpaceSelected = getNullableFirstEntry(this.dataSpaceOptions);
83
98
  this.mappingSelected = getNullableFirstEntry(this.mappingOptions);
84
99
  this.runtimeSelected = getNullableFirstEntry(this.runtimeOptions);
@@ -127,27 +142,64 @@ export class DataQuality_ClassElementDriver extends NewElementDriver<DataQuality
127
142
  this.runtimeSelected = runtimeSelected;
128
143
  }
129
144
 
130
- setDqElementCreationBasis(
131
- dqElementCreationBasis: ELEMENT_CREATION_BASIS,
145
+ setDqClassElementCreationBasis(
146
+ dqClassElementCreationBasis: CLASS_ELEMENT_CREATION_BASIS,
147
+ ): void {
148
+ this.dqClassElementCreationBasis = dqClassElementCreationBasis;
149
+ }
150
+
151
+ setDqValidationElementType(
152
+ dqValidationElementType: DQ_VALIDATION_ELEMENT_TYPE,
132
153
  ): void {
133
- this.dqElementCreationBasis = dqElementCreationBasis;
154
+ this.dqValidationElementType = dqValidationElementType;
134
155
  }
135
156
 
136
157
  get isValid(): boolean {
137
158
  if (
138
- this.dqElementCreationBasis === ELEMENT_CREATION_BASIS.DATASPACE_BASED
159
+ this.dqValidationElementType ===
160
+ DQ_VALIDATION_ELEMENT_TYPE.RELATION_VALIDATION ||
161
+ this.dqValidationElementType ===
162
+ DQ_VALIDATION_ELEMENT_TYPE.SERVICE_VALIDATION
163
+ ) {
164
+ return true;
165
+ }
166
+ if (
167
+ this.dqClassElementCreationBasis ===
168
+ CLASS_ELEMENT_CREATION_BASIS.DATASPACE_BASED
139
169
  ) {
140
170
  return Boolean(this.dataSpaceSelected);
141
171
  }
142
172
  return Boolean(this.mappingSelected && this.runtimeSelected);
143
173
  }
144
174
 
145
- createElement(name: string): DataQualityClassValidationsConfiguration {
175
+ createRelationValidationElement(
176
+ name: string,
177
+ ): DataQualityValidationConfiguration {
178
+ const relationValidationConfiguration =
179
+ new DataQualityRelationValidationConfiguration(name);
180
+ relationValidationConfiguration.query =
181
+ new DataQualityRelationQueryLambda();
182
+ relationValidationConfiguration.query.body =
183
+ this.editorStore.graphManagerState.graphManager.createDefaultBasicRawLambda().body;
184
+ this.editorStore.graphManagerState.graphManager.createDefaultBasicRawLambda();
185
+ return relationValidationConfiguration;
186
+ }
187
+
188
+ createServiceValidationElement(
189
+ name: string,
190
+ ): DataQualityValidationConfiguration {
191
+ return new DataQualityServiceValidationConfiguration(name);
192
+ }
193
+
194
+ createClassValidationElement(
195
+ name: string,
196
+ ): DataQualityValidationConfiguration {
146
197
  let usableClasses: Class[] = [];
147
- const dataQualityConstraintsConfiguration =
198
+ const dataQualityClassConstraintsConfiguration =
148
199
  new DataQualityClassValidationsConfiguration(name);
149
200
  if (
150
- this.dqElementCreationBasis === ELEMENT_CREATION_BASIS.DATASPACE_BASED
201
+ this.dqClassElementCreationBasis ===
202
+ CLASS_ELEMENT_CREATION_BASIS.DATASPACE_BASED
151
203
  ) {
152
204
  const dataSpaceToSet = PackageableElementExplicitReference.create(
153
205
  this.dataSpaceSelected!.value,
@@ -157,8 +209,9 @@ export class DataQuality_ClassElementDriver extends NewElementDriver<DataQuality
157
209
  dataSpaceExecutionContext.context =
158
210
  dataSpaceToSet.value.defaultExecutionContext.name;
159
211
  dataSpaceExecutionContext.dataSpace = dataSpaceToSet;
160
- dataQualityConstraintsConfiguration.context = dataSpaceExecutionContext;
161
- dataQualityConstraintsConfiguration.dataQualityRootGraphFetchTree =
212
+ dataQualityClassConstraintsConfiguration.context =
213
+ dataSpaceExecutionContext;
214
+ dataQualityClassConstraintsConfiguration.dataQualityRootGraphFetchTree =
162
215
  undefined;
163
216
  usableClasses = resolveUsableDataSpaceClasses(
164
217
  dataSpaceToSet.value,
@@ -177,7 +230,7 @@ export class DataQuality_ClassElementDriver extends NewElementDriver<DataQuality
177
230
  new MappingAndRuntimeDataQualityExecutionContext();
178
231
  mappingAndRuntimeExecutionContext.mapping = mapping;
179
232
  mappingAndRuntimeExecutionContext.runtime = runtimeValue;
180
- dataQualityConstraintsConfiguration.context =
233
+ dataQualityClassConstraintsConfiguration.context =
181
234
  mappingAndRuntimeExecutionContext;
182
235
  usableClasses = getMappingCompatibleClasses(
183
236
  mapping.value,
@@ -190,8 +243,24 @@ export class DataQuality_ClassElementDriver extends NewElementDriver<DataQuality
190
243
  'Must have at least one usable class with given mapping',
191
244
  );
192
245
  }
193
- dataQualityConstraintsConfiguration.dataQualityRootGraphFetchTree =
246
+ dataQualityClassConstraintsConfiguration.dataQualityRootGraphFetchTree =
194
247
  buildDefaultDataQualityRootGraphFetchTree(usableClasses[0]!);
195
- return dataQualityConstraintsConfiguration;
248
+ return dataQualityClassConstraintsConfiguration;
249
+ }
250
+
251
+ createElement(name: string): DataQualityValidationConfiguration {
252
+ switch (this.dqValidationElementType) {
253
+ case DQ_VALIDATION_ELEMENT_TYPE.RELATION_VALIDATION:
254
+ return this.createRelationValidationElement(name);
255
+ case DQ_VALIDATION_ELEMENT_TYPE.SERVICE_VALIDATION:
256
+ return this.createServiceValidationElement(name);
257
+ case DQ_VALIDATION_ELEMENT_TYPE.CLASS_VALIDATION:
258
+ return this.createClassValidationElement(name);
259
+
260
+ default:
261
+ throw new UnsupportedOperationError(
262
+ `Can't create data quality validation configuration of type '${this.dqValidationElementType}'`,
263
+ );
264
+ }
196
265
  }
197
266
  }
@@ -17,44 +17,41 @@
17
17
  import packageJson from '../../package.json';
18
18
  import {
19
19
  type DSL_LegendStudioApplicationPlugin_Extension,
20
+ type EditorStore,
20
21
  type ElementClassifier,
21
22
  type ElementEditorRenderer,
23
+ type ElementEditorState,
22
24
  type ElementEditorStateCreator,
23
25
  type ElementIconGetter,
24
26
  type ElementTypeLabelGetter,
27
+ type NewElementDriver,
25
28
  type NewElementDriverCreator,
26
29
  type NewElementDriverEditorRenderer,
27
30
  type NewElementFromStateCreator,
28
- type ElementEditorState,
29
- type NewElementDriver,
30
- type EditorStore,
31
31
  type NewElementState,
32
32
  LegendStudioApplicationPlugin,
33
33
  PACKAGEABLE_ELEMENT_GROUP_BY_CATEGORY,
34
34
  } from '@finos/legend-application-studio';
35
35
  import type { PackageableElement } from '@finos/legend-graph';
36
+ import { type ReactNode } from 'react';
36
37
  import {
37
38
  DataQualityClassValidationsConfiguration,
38
39
  DataQualityServiceValidationConfiguration,
40
+ DataQualityRelationValidationConfiguration,
41
+ DataQualityValidationConfiguration,
39
42
  } from '../graph/metamodel/pure/packageableElements/data-quality/DataQualityValidationConfiguration.js';
40
43
  import { EyeIcon } from '@finos/legend-art';
41
44
  import { DataQualityClassValidationEditor } from './DataQualityClassValidationEditor.js';
42
- import { DataQuality_ClassElementDriver } from './DSL_DataQuality_ClassElementDriver.js';
43
- import { NewDataQualityServiceValidationElementEditor } from './DSL_NewDataQualityServiceValidationElement.js';
44
- import { DataQuality_ServiceElementDriver } from './DSL_DataQuality_ServiceElementDriver.js';
45
+ import { DataQuality_ElementDriver } from './DSL_DataQuality_ElementDriver.js';
45
46
  import { DataQualityServiceValidationEditor } from './DataQualityServiceValidationEditor.js';
46
47
  import { DataQualityClassValidationState } from './states/DataQualityClassValidationState.js';
47
- import { NewDataQualityClassValidationElementEditor } from './DSL_NewDataQualityClassValidationElement.js';
48
- import { type ReactNode } from 'react';
48
+ import { NewDataQualityValidationElementEditor } from './DSL_NewDataQualityValidationElement.js';
49
49
  import { DataQualityServiceValidationState } from './states/DataQualityServiceValidationState.js';
50
+ import { DataQualityRelationValidationConfigurationState } from './states/DataQualityRelationValidationConfigurationState.js';
51
+ import { DataQualityRelationValidationConfigurationEditor } from './DataQualityRelationValidationConfigurationEditor.js';
50
52
 
51
- const DATA_QUALITY_ELEMENT_TYPE = 'DATAQUALITY';
52
- const DATA_QUALITY_SERVICE_VALIDATION_ELEMENT_TYPE =
53
- 'DATAQUALITYSERVICEVALIDATION';
54
-
55
- const DATA_QUALITY_ELEMENT_TYPE_LABEL = 'Data Quality Class Validation';
56
- const DATA_QUALITY_SERVICE_VALIDATION_TYPE_LABEL =
57
- 'Data Quality Service Validation';
53
+ const DATA_QUALITY_ELEMENT_TYPE = 'DATAQUALITYVALIDATION';
54
+ const DATA_QUALITY_ELEMENT_TYPE_LABEL = 'Data Quality Validation';
58
55
 
59
56
  export class DSL_DataQuality_LegendStudioApplicationPlugin
60
57
  extends LegendStudioApplicationPlugin
@@ -65,17 +62,13 @@ export class DSL_DataQuality_LegendStudioApplicationPlugin
65
62
  }
66
63
 
67
64
  getExtraSupportedElementTypes(): string[] {
68
- return [
69
- DATA_QUALITY_ELEMENT_TYPE,
70
- DATA_QUALITY_SERVICE_VALIDATION_ELEMENT_TYPE,
71
- ];
65
+ return [DATA_QUALITY_ELEMENT_TYPE];
72
66
  }
73
67
 
74
68
  getExtraSupportedElementTypesWithCategory(): Map<string, string[]> {
75
69
  const elementTypeswithCategory = new Map<string, string[]>();
76
70
  elementTypeswithCategory.set(PACKAGEABLE_ELEMENT_GROUP_BY_CATEGORY.OTHER, [
77
71
  DATA_QUALITY_ELEMENT_TYPE,
78
- // DATA_QUALITY_SERVICE_VALIDATION_ELEMENT_TYPE,
79
72
  ]);
80
73
  return elementTypeswithCategory;
81
74
  }
@@ -83,12 +76,9 @@ export class DSL_DataQuality_LegendStudioApplicationPlugin
83
76
  getExtraElementClassifiers(): ElementClassifier[] {
84
77
  return [
85
78
  (element: PackageableElement): string | undefined => {
86
- if (element instanceof DataQualityClassValidationsConfiguration) {
79
+ if (element instanceof DataQualityValidationConfiguration) {
87
80
  return DATA_QUALITY_ELEMENT_TYPE;
88
81
  }
89
- if (element instanceof DataQualityServiceValidationConfiguration) {
90
- return DATA_QUALITY_SERVICE_VALIDATION_ELEMENT_TYPE;
91
- }
92
82
  return undefined;
93
83
  },
94
84
  ];
@@ -104,13 +94,6 @@ export class DSL_DataQuality_LegendStudioApplicationPlugin
104
94
  </div>
105
95
  );
106
96
  }
107
- if (type === DATA_QUALITY_SERVICE_VALIDATION_ELEMENT_TYPE) {
108
- return (
109
- <div className="icon icon--dataQuality">
110
- <EyeIcon />
111
- </div>
112
- );
113
- }
114
97
  return undefined;
115
98
  },
116
99
  ];
@@ -122,9 +105,6 @@ export class DSL_DataQuality_LegendStudioApplicationPlugin
122
105
  if (type === DATA_QUALITY_ELEMENT_TYPE) {
123
106
  return DATA_QUALITY_ELEMENT_TYPE_LABEL;
124
107
  }
125
- if (type === DATA_QUALITY_SERVICE_VALIDATION_ELEMENT_TYPE) {
126
- return DATA_QUALITY_SERVICE_VALIDATION_TYPE_LABEL;
127
- }
128
108
  return undefined;
129
109
  },
130
110
  ];
@@ -139,12 +119,7 @@ export class DSL_DataQuality_LegendStudioApplicationPlugin
139
119
  ): PackageableElement | undefined => {
140
120
  if (type === DATA_QUALITY_ELEMENT_TYPE) {
141
121
  return state
142
- .getNewElementDriver(DataQuality_ClassElementDriver)
143
- .createElement(name);
144
- }
145
- if (type === DATA_QUALITY_SERVICE_VALIDATION_ELEMENT_TYPE) {
146
- return state
147
- .getNewElementDriver(DataQuality_ServiceElementDriver)
122
+ .getNewElementDriver(DataQuality_ElementDriver)
148
123
  .createElement(name);
149
124
  }
150
125
  return undefined;
@@ -165,6 +140,16 @@ export class DSL_DataQuality_LegendStudioApplicationPlugin
165
140
  <DataQualityClassValidationEditor key={elementEditorState.uuid} />
166
141
  );
167
142
  }
143
+ if (
144
+ elementEditorState instanceof
145
+ DataQualityRelationValidationConfigurationState
146
+ ) {
147
+ return (
148
+ <DataQualityRelationValidationConfigurationEditor
149
+ key={elementEditorState.uuid}
150
+ />
151
+ );
152
+ }
168
153
  return undefined;
169
154
  },
170
155
  ];
@@ -182,6 +167,12 @@ export class DSL_DataQuality_LegendStudioApplicationPlugin
182
167
  if (element instanceof DataQualityServiceValidationConfiguration) {
183
168
  return new DataQualityServiceValidationState(editorStore, element);
184
169
  }
170
+ if (element instanceof DataQualityRelationValidationConfiguration) {
171
+ return new DataQualityRelationValidationConfigurationState(
172
+ editorStore,
173
+ element,
174
+ );
175
+ }
185
176
  return undefined;
186
177
  },
187
178
  ];
@@ -191,10 +182,7 @@ export class DSL_DataQuality_LegendStudioApplicationPlugin
191
182
  return [
192
183
  (type: string): ReactNode | undefined => {
193
184
  if (type === DATA_QUALITY_ELEMENT_TYPE) {
194
- return <NewDataQualityClassValidationElementEditor />;
195
- }
196
- if (type === DATA_QUALITY_SERVICE_VALIDATION_ELEMENT_TYPE) {
197
- return <NewDataQualityServiceValidationElementEditor />;
185
+ return <NewDataQualityValidationElementEditor />;
198
186
  }
199
187
  return undefined;
200
188
  },
@@ -208,10 +196,7 @@ export class DSL_DataQuality_LegendStudioApplicationPlugin
208
196
  type: string,
209
197
  ): NewElementDriver<PackageableElement> | undefined => {
210
198
  if (type === DATA_QUALITY_ELEMENT_TYPE) {
211
- return new DataQuality_ClassElementDriver(editorStore);
212
- }
213
- if (type === DATA_QUALITY_SERVICE_VALIDATION_ELEMENT_TYPE) {
214
- return new DataQuality_ServiceElementDriver(editorStore);
199
+ return new DataQuality_ElementDriver(editorStore);
215
200
  }
216
201
  return undefined;
217
202
  },
@@ -0,0 +1,208 @@
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
+ import { observer } from 'mobx-react-lite';
18
+ import { useEditorStore } from '@finos/legend-application-studio';
19
+ import { BaseRadioGroup, CustomSelectorInput } from '@finos/legend-art';
20
+ import type { Mapping } from '@finos/legend-graph';
21
+ import {
22
+ type PackageableElementOption,
23
+ buildElementOption,
24
+ } from '@finos/legend-lego/graph-editor';
25
+ import {
26
+ type RuntimeOption,
27
+ DataQuality_ElementDriver,
28
+ CLASS_ELEMENT_CREATION_BASIS,
29
+ DQ_VALIDATION_ELEMENT_TYPE,
30
+ } from './DSL_DataQuality_ElementDriver.js';
31
+ import type { DataSpace } from '@finos/legend-extension-dsl-data-space/graph';
32
+ import { prettyCONSTName } from '@finos/legend-shared';
33
+
34
+ export const NewDataQualityValidationElementEditor = observer(() => {
35
+ const editorStore = useEditorStore();
36
+ const applicationStore = editorStore.applicationStore;
37
+
38
+ const dataQualityValidationDriver =
39
+ editorStore.newElementState.getNewElementDriver(DataQuality_ElementDriver);
40
+ const dqValidationElementType =
41
+ dataQualityValidationDriver.dqValidationElementType;
42
+ const dqElementCreationBasis =
43
+ dataQualityValidationDriver.dqClassElementCreationBasis;
44
+ const dataSpacesOptions = dataQualityValidationDriver.dataSpaceOptions;
45
+ const mappingOptions = dataQualityValidationDriver.mappingOptions;
46
+ const runtimeOptions =
47
+ dataQualityValidationDriver.compatibleMappingRuntimes.map(
48
+ buildElementOption,
49
+ );
50
+ const dqValidationElementTypeOptions = Object.values(
51
+ DQ_VALIDATION_ELEMENT_TYPE,
52
+ )
53
+ .filter(
54
+ (validation) =>
55
+ validation !== DQ_VALIDATION_ELEMENT_TYPE.SERVICE_VALIDATION,
56
+ )
57
+ .map((validationType) => ({
58
+ label: prettyCONSTName(validationType),
59
+ value: validationType,
60
+ }));
61
+
62
+ const onDataSpaceChange = (
63
+ val: PackageableElementOption<DataSpace> | null,
64
+ ): void => {
65
+ if (val) {
66
+ dataQualityValidationDriver.setDataSpaceSelected(val);
67
+ }
68
+ };
69
+
70
+ const onMappingChange = (
71
+ val: PackageableElementOption<Mapping> | null,
72
+ ): void => {
73
+ if (val) {
74
+ dataQualityValidationDriver.setMappingSelected(val);
75
+ } else {
76
+ dataQualityValidationDriver.setMappingSelected(undefined);
77
+ }
78
+ dataQualityValidationDriver.setRuntimeSelected(
79
+ dataQualityValidationDriver.runtimeOptions.length > 0
80
+ ? dataQualityValidationDriver.runtimeOptions[0]
81
+ : undefined,
82
+ );
83
+ };
84
+
85
+ const onRuntimeChange = (val: RuntimeOption | null): void => {
86
+ if (val) {
87
+ dataQualityValidationDriver.setRuntimeSelected(val);
88
+ }
89
+ };
90
+
91
+ const handleDQClassElementCreationBasisChange = (
92
+ event: React.ChangeEvent<HTMLInputElement>,
93
+ ): void => {
94
+ const classValidationElementCreationBasis = (
95
+ event.target as HTMLInputElement
96
+ ).value as CLASS_ELEMENT_CREATION_BASIS;
97
+ dataQualityValidationDriver.setDqClassElementCreationBasis(
98
+ classValidationElementCreationBasis,
99
+ );
100
+ };
101
+
102
+ const handleDQValidationElementTypeChange = (val: {
103
+ label: string;
104
+ value: DQ_VALIDATION_ELEMENT_TYPE;
105
+ }): void => {
106
+ dataQualityValidationDriver.setDqValidationElementType(val.value);
107
+ };
108
+
109
+ const selectedDqValidationElementType = {
110
+ label: prettyCONSTName(dataQualityValidationDriver.dqValidationElementType),
111
+ value: dataQualityValidationDriver.dqValidationElementType,
112
+ };
113
+
114
+ return (
115
+ <div>
116
+ <div className="panel__content__form__section__header__label">
117
+ Validation Type
118
+ </div>
119
+ <div className="panel__content__form__section__header__prompt">
120
+ Type of Data Quality Validation to be configured
121
+ </div>
122
+ <CustomSelectorInput
123
+ options={dqValidationElementTypeOptions}
124
+ onChange={handleDQValidationElementTypeChange}
125
+ value={selectedDqValidationElementType}
126
+ darkMode={
127
+ !applicationStore.layoutService.TEMPORARY__isLightColorThemeEnabled
128
+ }
129
+ placeholder="Choose a data quality validation type"
130
+ isClearable={false}
131
+ className={'dq-validation-element-type'}
132
+ />
133
+ {dqValidationElementType ===
134
+ DQ_VALIDATION_ELEMENT_TYPE.CLASS_VALIDATION && (
135
+ <div>
136
+ <div className="element-creation-basis">
137
+ <div className="panel__content__form__section__header__label">
138
+ Basis of Data Quality Class Validation
139
+ </div>
140
+ <BaseRadioGroup
141
+ value={dqElementCreationBasis}
142
+ onChange={handleDQClassElementCreationBasisChange}
143
+ row={false}
144
+ options={[
145
+ CLASS_ELEMENT_CREATION_BASIS.DATASPACE_BASED,
146
+ CLASS_ELEMENT_CREATION_BASIS.MAPPING_RUNTIME_BASED,
147
+ ]}
148
+ size={2}
149
+ />
150
+ </div>
151
+ {dqElementCreationBasis ===
152
+ CLASS_ELEMENT_CREATION_BASIS.DATASPACE_BASED ? (
153
+ <div>
154
+ <div className="panel__content__form__section__header__label">
155
+ DataSpace
156
+ </div>
157
+ <div className="data-quality-explorer__new-element-modal__driver">
158
+ <CustomSelectorInput
159
+ className="data-quality-explorer__new-element-modal__driver__dropdown"
160
+ options={dataSpacesOptions}
161
+ onChange={onDataSpaceChange}
162
+ value={dataQualityValidationDriver.dataSpaceSelected}
163
+ darkMode={
164
+ !applicationStore.layoutService
165
+ .TEMPORARY__isLightColorThemeEnabled
166
+ }
167
+ />
168
+ </div>
169
+ </div>
170
+ ) : (
171
+ <div>
172
+ <div className="panel__content__form__section__header__label">
173
+ Mapping
174
+ </div>
175
+ <div className="data-quality-explorer__new-element-modal__driver">
176
+ <CustomSelectorInput
177
+ className="data-quality-explorer__new-element-modal__driver__dropdown"
178
+ options={mappingOptions}
179
+ onChange={onMappingChange}
180
+ value={dataQualityValidationDriver.mappingSelected}
181
+ darkMode={
182
+ !applicationStore.layoutService
183
+ .TEMPORARY__isLightColorThemeEnabled
184
+ }
185
+ />
186
+ </div>
187
+ <div className="panel__content__form__section__header__label">
188
+ Runtime
189
+ </div>
190
+ <div className="data-quality-explorer__new-element-modal__driver">
191
+ <CustomSelectorInput
192
+ className="data-quality-explorer__new-element-modal__driver__dropdown"
193
+ options={runtimeOptions}
194
+ onChange={onRuntimeChange}
195
+ value={dataQualityValidationDriver.runtimeSelected}
196
+ darkMode={
197
+ !applicationStore.layoutService
198
+ .TEMPORARY__isLightColorThemeEnabled
199
+ }
200
+ />
201
+ </div>
202
+ </div>
203
+ )}
204
+ </div>
205
+ )}
206
+ </div>
207
+ );
208
+ });