@finos/legend-extension-dsl-data-quality 1.0.61 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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.61",
3
+ "version": "2.0.1",
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.61",
3
+ "version": "2.0.1",
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.56",
46
+ "@finos/legend-application-studio": "28.18.58",
47
47
  "@finos/legend-art": "7.1.68",
48
- "@finos/legend-code-editor": "2.0.17",
49
- "@finos/legend-extension-dsl-data-space": "10.4.7",
50
- "@finos/legend-graph": "31.10.51",
51
- "@finos/legend-lego": "2.0.19",
52
- "@finos/legend-query-builder": "4.15.16",
48
+ "@finos/legend-code-editor": "2.0.19",
49
+ "@finos/legend-extension-dsl-data-space": "10.4.9",
50
+ "@finos/legend-graph": "31.10.53",
51
+ "@finos/legend-lego": "2.0.21",
52
+ "@finos/legend-query-builder": "4.15.18",
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
+ });