From f35e2f55047df77e61c653a333f77d842d07d1b1 Mon Sep 17 00:00:00 2001 From: Max Thonagel <12283268+thoniTUB@users.noreply.github.com> Date: Tue, 22 Nov 2022 15:38:30 +0100 Subject: [PATCH] adds predefined resolution sets for export form --- .../apiv1/forms/export_form/ExportForm.java | 25 ++-- .../forms/util/ResolutionShortNames.java | 69 +++++++++++ .../forms/export_form.frontend_conf.json | 24 ++++ .../ABS_EXPORT_FORM_SECONDARY_ID.test.json | 1 + .../ABSOLUT/SIMPLE/ABS_EXPORT_FORM.test.json | 1 + .../ABS_EXPORT_FORM_WITH_SELECT.test.json | 1 + .../LOGICAL/ABS_EXPORT_FORM.test.json | 1 + .../ABS_EXPORT_FORM.test.json | 1 + .../SECONDARY_ID/SECONDARY_ID.test.json | 1 + .../SIMPLE/ABS_EXPORT_FORM.test.json | 1 + .../ABS_EXPORT_FORM_WITH_SELECT.test.json | 1 + .../REL_EXPORT_FORM.test.json | 15 +-- .../REL_EXPORT_FORM.test.json | 117 +++++++++--------- .../SECONDARY_ID/SECONDARY_ID.test.json | 7 +- .../RELATIVE/SIMPLE/REL_EXPORT_FORM.test.json | 15 +-- 15 files changed, 196 insertions(+), 84 deletions(-) create mode 100644 backend/src/main/java/com/bakdata/conquery/models/forms/util/ResolutionShortNames.java diff --git a/backend/src/main/java/com/bakdata/conquery/apiv1/forms/export_form/ExportForm.java b/backend/src/main/java/com/bakdata/conquery/apiv1/forms/export_form/ExportForm.java index b4b8ed5181..8ed8979606 100644 --- a/backend/src/main/java/com/bakdata/conquery/apiv1/forms/export_form/ExportForm.java +++ b/backend/src/main/java/com/bakdata/conquery/apiv1/forms/export_form/ExportForm.java @@ -27,6 +27,7 @@ import com.bakdata.conquery.models.forms.managed.ManagedInternalForm; import com.bakdata.conquery.models.forms.util.Alignment; import com.bakdata.conquery.models.forms.util.Resolution; +import com.bakdata.conquery.models.forms.util.ResolutionShortNames; import com.bakdata.conquery.models.i18n.I18n; import com.bakdata.conquery.models.identifiable.ids.specific.ManagedExecutionId; import com.bakdata.conquery.models.query.ManagedQuery; @@ -55,11 +56,12 @@ public class ExportForm extends Form { @NotNull @Valid @JsonManagedReference private Mode timeMode; - - @NotNull @NotEmpty - private List resolution = List.of(Resolution.COMPLETE); - - private boolean alsoCreateCoarserSubdivisions = true; + + @NotNull + @NotEmpty + private List resolution = List.of(ResolutionShortNames.COMPLETE); + + private boolean alsoCreateCoarserSubdivisions = false; @JsonIgnore private Query prerequisite; @@ -94,15 +96,20 @@ public void resolve(QueryResolveContext context) { timeMode.resolve(context); prerequisite = queryGroup.getQuery(); + List resolutionsFlat = resolution.stream() + .flatMap(ResolutionShortNames::correspondingResolutions) + .distinct() + .toList(); + - if(isAlsoCreateCoarserSubdivisions()) { - if(getResolution().size() != 1) { + if (isAlsoCreateCoarserSubdivisions()) { + if (resolutionsFlat.size() != 1) { throw new IllegalStateException("Abort Form creation, because coarser subdivision are requested and multiple resolutions are given. With 'alsoCreateCoarserSubdivisions' set to true, provide only one resolution."); } - resolvedResolutions = getResolution().get(0).getThisAndCoarserSubdivisions(); + resolvedResolutions = resolutionsFlat.get(0).getThisAndCoarserSubdivisions(); } else { - resolvedResolutions = getResolution(); + resolvedResolutions = resolutionsFlat; } } diff --git a/backend/src/main/java/com/bakdata/conquery/models/forms/util/ResolutionShortNames.java b/backend/src/main/java/com/bakdata/conquery/models/forms/util/ResolutionShortNames.java new file mode 100644 index 0000000000..f7afe67e54 --- /dev/null +++ b/backend/src/main/java/com/bakdata/conquery/models/forms/util/ResolutionShortNames.java @@ -0,0 +1,69 @@ +package com.bakdata.conquery.models.forms.util; + +import java.util.stream.Stream; + +/** + * This enum exists for compatibility reasons with the stratification + * dropdown menu in the frontend. This way the actual Resolution/Alignment logic does not need to be touched. + *

+ * Because of uniformity and accessibility there are options like + * {@link ResolutionShortNames#COMPLETE_YEARS_QUARTERS}, for which the frontend could send a list of resolutions ("value": ["COMPLETE","YEARS", "QUARTERS"]). + *
+ * However, setting this list as the default option does not work (see export_form.frontend_conf.json). + * Only a string applies, hence "value": "COMPLETE_YEARS_QUARTERS". + */ +public enum ResolutionShortNames { + + // SINGLE RESOLUTIONS (map directly to Resolution) + COMPLETE { + @Override + public Stream correspondingResolutions() { + return Stream.of(Resolution.COMPLETE); + } + }, + YEARS { + @Override + public Stream correspondingResolutions() { + return Stream.of(Resolution.YEARS); + } + }, + QUARTERS { + @Override + public Stream correspondingResolutions() { + return Stream.of(Resolution.QUARTERS); + } + }, + DAYS { + @Override + public Stream correspondingResolutions() { + return Stream.of(Resolution.DAYS); + } + }, + // SPECIAL RESOLUTION SETS + YEARS_QUARTERS { + @Override + public Stream correspondingResolutions() { + return Stream.of(Resolution.YEARS, Resolution.QUARTERS); + } + }, + COMPLETE_YEARS { + @Override + public Stream correspondingResolutions() { + return Stream.of(Resolution.COMPLETE, Resolution.YEARS); + } + }, + COMPLETE_QUARTERS { + @Override + public Stream correspondingResolutions() { + return Stream.of(Resolution.COMPLETE, Resolution.QUARTERS); + } + }, + COMPLETE_YEARS_QUARTERS { + @Override + public Stream correspondingResolutions() { + return Stream.of(Resolution.COMPLETE, Resolution.YEARS, Resolution.QUARTERS); + } + }; + + public abstract Stream correspondingResolutions(); +} diff --git a/backend/src/main/resources/com/bakdata/conquery/frontend/forms/export_form.frontend_conf.json b/backend/src/main/resources/com/bakdata/conquery/frontend/forms/export_form.frontend_conf.json index 62dfbb00c9..bb2d881288 100644 --- a/backend/src/main/resources/com/bakdata/conquery/frontend/forms/export_form.frontend_conf.json +++ b/backend/src/main/resources/com/bakdata/conquery/frontend/forms/export_form.frontend_conf.json @@ -49,6 +49,30 @@ "de": "Quartale" }, "value": "QUARTERS" + }, + { + "label": { + "de": "Jahre und Quartale" + }, + "value": "YEARS_QUARTERS" + }, + { + "label": { + "de": "Gesamter Zeitraum und Jahre" + }, + "value": "COMPLETE_YEARS" + }, + { + "label": { + "de": "Gesamter Zeitraum und Quartale" + }, + "value": "COMPLETE_QUARTERS" + }, + { + "label": { + "de": "Gesamter Zeitraum, Jahre und Quartale" + }, + "value": "COMPLETE_YEARS_QUARTERS" } ], "validations": [ diff --git a/backend/src/test/resources/tests/form/EXPORT_FORM/ABSOLUT/SECONDARY_ID/ABS_EXPORT_FORM_SECONDARY_ID.test.json b/backend/src/test/resources/tests/form/EXPORT_FORM/ABSOLUT/SECONDARY_ID/ABS_EXPORT_FORM_SECONDARY_ID.test.json index 425b20ce21..b6baea79d1 100644 --- a/backend/src/test/resources/tests/form/EXPORT_FORM/ABSOLUT/SECONDARY_ID/ABS_EXPORT_FORM_SECONDARY_ID.test.json +++ b/backend/src/test/resources/tests/form/EXPORT_FORM/ABSOLUT/SECONDARY_ID/ABS_EXPORT_FORM_SECONDARY_ID.test.json @@ -8,6 +8,7 @@ "type": "EXPORT_FORM", "queryGroup": "00000000-0000-0000-0000-000000000001", "resolution": "QUARTERS", + "alsoCreateCoarserSubdivisions": true, "timeMode": { "value": "ABSOLUTE", "features": [ diff --git a/backend/src/test/resources/tests/form/EXPORT_FORM/ABSOLUT/SIMPLE/ABS_EXPORT_FORM.test.json b/backend/src/test/resources/tests/form/EXPORT_FORM/ABSOLUT/SIMPLE/ABS_EXPORT_FORM.test.json index 977830f37d..6bc89c4bfb 100644 --- a/backend/src/test/resources/tests/form/EXPORT_FORM/ABSOLUT/SIMPLE/ABS_EXPORT_FORM.test.json +++ b/backend/src/test/resources/tests/form/EXPORT_FORM/ABSOLUT/SIMPLE/ABS_EXPORT_FORM.test.json @@ -8,6 +8,7 @@ "type": "EXPORT_FORM", "queryGroup": "00000000-0000-0000-0000-000000000001", "resolution": "QUARTERS", + "alsoCreateCoarserSubdivisions": true, "timeMode": { "value": "ABSOLUTE", "features": [ diff --git a/backend/src/test/resources/tests/form/EXPORT_FORM/ABSOLUT/SIMPLE/ABS_EXPORT_FORM_WITH_SELECT.test.json b/backend/src/test/resources/tests/form/EXPORT_FORM/ABSOLUT/SIMPLE/ABS_EXPORT_FORM_WITH_SELECT.test.json index c5ad357ef2..bbd4752969 100644 --- a/backend/src/test/resources/tests/form/EXPORT_FORM/ABSOLUT/SIMPLE/ABS_EXPORT_FORM_WITH_SELECT.test.json +++ b/backend/src/test/resources/tests/form/EXPORT_FORM/ABSOLUT/SIMPLE/ABS_EXPORT_FORM_WITH_SELECT.test.json @@ -8,6 +8,7 @@ "type": "EXPORT_FORM", "queryGroup": "00000000-0000-0000-0000-000000000001", "resolution": "QUARTERS", + "alsoCreateCoarserSubdivisions": true, "timeMode": { "value": "ABSOLUTE", "features": [ diff --git a/backend/src/test/resources/tests/form/EXPORT_FORM/ENTITY_DATE/LOGICAL/ABS_EXPORT_FORM.test.json b/backend/src/test/resources/tests/form/EXPORT_FORM/ENTITY_DATE/LOGICAL/ABS_EXPORT_FORM.test.json index 135a0163e9..51cdecda62 100644 --- a/backend/src/test/resources/tests/form/EXPORT_FORM/ENTITY_DATE/LOGICAL/ABS_EXPORT_FORM.test.json +++ b/backend/src/test/resources/tests/form/EXPORT_FORM/ENTITY_DATE/LOGICAL/ABS_EXPORT_FORM.test.json @@ -8,6 +8,7 @@ "type": "EXPORT_FORM", "queryGroup": "00000000-0000-0000-0000-000000000001", "resolution": "QUARTERS", + "alsoCreateCoarserSubdivisions": true, "timeMode": { "value": "ENTITY_DATE", "dateAggregationMode": "LOGICAL", diff --git a/backend/src/test/resources/tests/form/EXPORT_FORM/ENTITY_DATE/LOGICAL_WITH_EXCLUDE/ABS_EXPORT_FORM.test.json b/backend/src/test/resources/tests/form/EXPORT_FORM/ENTITY_DATE/LOGICAL_WITH_EXCLUDE/ABS_EXPORT_FORM.test.json index b75d92cbce..1fef393b5a 100644 --- a/backend/src/test/resources/tests/form/EXPORT_FORM/ENTITY_DATE/LOGICAL_WITH_EXCLUDE/ABS_EXPORT_FORM.test.json +++ b/backend/src/test/resources/tests/form/EXPORT_FORM/ENTITY_DATE/LOGICAL_WITH_EXCLUDE/ABS_EXPORT_FORM.test.json @@ -8,6 +8,7 @@ "type": "EXPORT_FORM", "queryGroup": "00000000-0000-0000-0000-000000000001", "resolution": "QUARTERS", + "alsoCreateCoarserSubdivisions": true, "timeMode": { "value": "ENTITY_DATE", "dateAggregationMode": "LOGICAL", diff --git a/backend/src/test/resources/tests/form/EXPORT_FORM/ENTITY_DATE/SECONDARY_ID/SECONDARY_ID.test.json b/backend/src/test/resources/tests/form/EXPORT_FORM/ENTITY_DATE/SECONDARY_ID/SECONDARY_ID.test.json index 3b2ef80853..4b7e737be1 100644 --- a/backend/src/test/resources/tests/form/EXPORT_FORM/ENTITY_DATE/SECONDARY_ID/SECONDARY_ID.test.json +++ b/backend/src/test/resources/tests/form/EXPORT_FORM/ENTITY_DATE/SECONDARY_ID/SECONDARY_ID.test.json @@ -8,6 +8,7 @@ "type": "EXPORT_FORM", "queryGroup": "00000000-0000-0000-0000-000000000001", "resolution": "QUARTERS", + "alsoCreateCoarserSubdivisions": true, "timeMode": { "value": "ENTITY_DATE", "features": [ diff --git a/backend/src/test/resources/tests/form/EXPORT_FORM/ENTITY_DATE/SIMPLE/ABS_EXPORT_FORM.test.json b/backend/src/test/resources/tests/form/EXPORT_FORM/ENTITY_DATE/SIMPLE/ABS_EXPORT_FORM.test.json index dcff3427e4..dd89786813 100644 --- a/backend/src/test/resources/tests/form/EXPORT_FORM/ENTITY_DATE/SIMPLE/ABS_EXPORT_FORM.test.json +++ b/backend/src/test/resources/tests/form/EXPORT_FORM/ENTITY_DATE/SIMPLE/ABS_EXPORT_FORM.test.json @@ -8,6 +8,7 @@ "type": "EXPORT_FORM", "queryGroup": "00000000-0000-0000-0000-000000000001", "resolution": "QUARTERS", + "alsoCreateCoarserSubdivisions": true, "timeMode": { "value": "ENTITY_DATE", "features": [ diff --git a/backend/src/test/resources/tests/form/EXPORT_FORM/ENTITY_DATE/SIMPLE/ABS_EXPORT_FORM_WITH_SELECT.test.json b/backend/src/test/resources/tests/form/EXPORT_FORM/ENTITY_DATE/SIMPLE/ABS_EXPORT_FORM_WITH_SELECT.test.json index 4b6aa47e48..24e1fb35d0 100644 --- a/backend/src/test/resources/tests/form/EXPORT_FORM/ENTITY_DATE/SIMPLE/ABS_EXPORT_FORM_WITH_SELECT.test.json +++ b/backend/src/test/resources/tests/form/EXPORT_FORM/ENTITY_DATE/SIMPLE/ABS_EXPORT_FORM_WITH_SELECT.test.json @@ -8,6 +8,7 @@ "type": "EXPORT_FORM", "queryGroup": "00000000-0000-0000-0000-000000000001", "resolution": "QUARTERS", + "alsoCreateCoarserSubdivisions": true, "timeMode": { "value": "ENTITY_DATE", "features": [ diff --git a/backend/src/test/resources/tests/form/EXPORT_FORM/RELATIVE/RELATIVE_ONLY_FEATURE/REL_EXPORT_FORM.test.json b/backend/src/test/resources/tests/form/EXPORT_FORM/RELATIVE/RELATIVE_ONLY_FEATURE/REL_EXPORT_FORM.test.json index 49dc3ef08f..2276a88278 100644 --- a/backend/src/test/resources/tests/form/EXPORT_FORM/RELATIVE/RELATIVE_ONLY_FEATURE/REL_EXPORT_FORM.test.json +++ b/backend/src/test/resources/tests/form/EXPORT_FORM/RELATIVE/RELATIVE_ONLY_FEATURE/REL_EXPORT_FORM.test.json @@ -8,16 +8,17 @@ "type": "EXPORT_FORM", "queryGroup": "00000000-0000-0000-0000-000000000001", "resolution": "QUARTERS", - "timeMode":{ + "alsoCreateCoarserSubdivisions": true, + "timeMode": { "value": "RELATIVE", "indexSelector": "EARLIEST", - "timeUnit" : "QUARTERS", + "timeUnit": "QUARTERS", "features": [ - { - "ids": [ - "alter" - ], - "type": "CONCEPT", + { + "ids": [ + "alter" + ], + "type": "CONCEPT", "tables": [ { "id": "alter.alter", diff --git a/backend/src/test/resources/tests/form/EXPORT_FORM/RELATIVE/RELATIVE_ONLY_OUTCOME/REL_EXPORT_FORM.test.json b/backend/src/test/resources/tests/form/EXPORT_FORM/RELATIVE/RELATIVE_ONLY_OUTCOME/REL_EXPORT_FORM.test.json index a014984c60..067c285a38 100644 --- a/backend/src/test/resources/tests/form/EXPORT_FORM/RELATIVE/RELATIVE_ONLY_OUTCOME/REL_EXPORT_FORM.test.json +++ b/backend/src/test/resources/tests/form/EXPORT_FORM/RELATIVE/RELATIVE_ONLY_OUTCOME/REL_EXPORT_FORM.test.json @@ -1,64 +1,65 @@ { - "type": "FORM_TEST", - "label": "REL-EXPORT-FORM Test", - "expectedCsv": { - "results": "tests/form/EXPORT_FORM/RELATIVE/RELATIVE_ONLY_OUTCOME/expected.csv" - }, - "form": { - "type": "EXPORT_FORM", - "queryGroup": "00000000-0000-0000-0000-000000000001", - "resolution": "QUARTERS", - "timeMode": { - "value": "RELATIVE", - "indexSelector": "EARLIEST", - "timeUnit": "QUARTERS", - "features": [ - { - "type": "OR", - "children": [ - { - "ids": [ - "alter" - ], - "type": "CONCEPT", - "tables": [ + "type": "FORM_TEST", + "label": "REL-EXPORT-FORM Test", + "expectedCsv": { + "results": "tests/form/EXPORT_FORM/RELATIVE/RELATIVE_ONLY_OUTCOME/expected.csv" + }, + "form": { + "type": "EXPORT_FORM", + "queryGroup": "00000000-0000-0000-0000-000000000001", + "resolution": "QUARTERS", + "alsoCreateCoarserSubdivisions": true, + "timeMode": { + "value": "RELATIVE", + "indexSelector": "EARLIEST", + "timeUnit": "QUARTERS", + "features": [ { - "id": "alter.alter", - "filters": [] + "type": "OR", + "children": [ + { + "ids": [ + "alter" + ], + "type": "CONCEPT", + "tables": [ + { + "id": "alter.alter", + "filters": [] + } + ] + } + ] + }, + { + "ids": [ + "alter" + ], + "type": "CONCEPT", + "tables": [ + { + "id": "alter.alter", + "filters": [] + } + ] } - ] - } - ] - }, - { - "ids": [ - "alter" - ], - "type": "CONCEPT", - "tables": [ - { - "id": "alter.alter", - "filters": [] - } - ] + ], + "timeCountAfter": 4, + "indexPlacement": "BEFORE" } - ], - "timeCountAfter": 4, - "indexPlacement": "BEFORE" - } - }, - "concepts": [ - "/tests/form/shared/alter.concept.json", - "/tests/form/shared/geschlecht.concept.json", - "/tests/form/shared/versichertentage.concept.json" - ], - "content": { - "tables": [ - "/tests/form/shared/vers_stamm.table.json", - "/tests/form/shared/vers_tage_range.table.json" + }, + "concepts": [ + "/tests/form/shared/alter.concept.json", + "/tests/form/shared/geschlecht.concept.json", + "/tests/form/shared/versichertentage.concept.json" ], - "previousQueryResults": [ - "tests/form/EXPORT_FORM/RELATIVE/RELATIVE_ONLY_OUTCOME/query_results_1.csv" - ] - } + "content": { + "tables": [ + "/tests/form/shared/vers_stamm.table.json", + "/tests/form/shared/vers_tage_range.table.json" + ], + "previousQueryResults": [ + "tests/form/EXPORT_FORM/RELATIVE/RELATIVE_ONLY_OUTCOME/query_results_1.csv" + ] + } } \ No newline at end of file diff --git a/backend/src/test/resources/tests/form/EXPORT_FORM/RELATIVE/SECONDARY_ID/SECONDARY_ID.test.json b/backend/src/test/resources/tests/form/EXPORT_FORM/RELATIVE/SECONDARY_ID/SECONDARY_ID.test.json index 4eba5776ce..f4e72209ea 100644 --- a/backend/src/test/resources/tests/form/EXPORT_FORM/RELATIVE/SECONDARY_ID/SECONDARY_ID.test.json +++ b/backend/src/test/resources/tests/form/EXPORT_FORM/RELATIVE/SECONDARY_ID/SECONDARY_ID.test.json @@ -8,12 +8,13 @@ "type": "EXPORT_FORM", "queryGroup": "00000000-0000-0000-0000-000000000001", "resolution": "QUARTERS", + "alsoCreateCoarserSubdivisions": true, "timeMode": { "value": "RELATIVE", "indexSelector": "EARLIEST", - "timeUnit" : "QUARTERS", - "indexPlacement" : "BEFORE", - "timeCountBefore" : 4, + "timeUnit": "QUARTERS", + "indexPlacement": "BEFORE", + "timeCountBefore": 4, "features": [ { "ids": [ diff --git a/backend/src/test/resources/tests/form/EXPORT_FORM/RELATIVE/SIMPLE/REL_EXPORT_FORM.test.json b/backend/src/test/resources/tests/form/EXPORT_FORM/RELATIVE/SIMPLE/REL_EXPORT_FORM.test.json index 6a646fdc08..0e14e1c98d 100644 --- a/backend/src/test/resources/tests/form/EXPORT_FORM/RELATIVE/SIMPLE/REL_EXPORT_FORM.test.json +++ b/backend/src/test/resources/tests/form/EXPORT_FORM/RELATIVE/SIMPLE/REL_EXPORT_FORM.test.json @@ -8,16 +8,17 @@ "type": "EXPORT_FORM", "queryGroup": "00000000-0000-0000-0000-000000000001", "resolution": "QUARTERS", - "timeMode":{ + "alsoCreateCoarserSubdivisions": true, + "timeMode": { "value": "RELATIVE", "indexSelector": "EARLIEST", - "timeUnit" : "QUARTERS", + "timeUnit": "QUARTERS", "features": [ - { - "ids": [ - "alter" - ], - "type": "CONCEPT", + { + "ids": [ + "alter" + ], + "type": "CONCEPT", "tables": [ { "id": "alter.alter"