From 078a89d7cd84d08f35e797f00799dad0e227eadc Mon Sep 17 00:00:00 2001
From: awildturtok <1553491+awildturtok@users.noreply.github.com>
Date: Wed, 30 Aug 2023 12:54:25 +0200
Subject: [PATCH] adds config option to always allow custom input in
SELECT-style Filters
---
.../query/concept/filter/FilterValue.java | 2 +-
.../models/config/FrontendConfig.java | 5 +++
.../concepts/FrontEndConceptBuilder.java | 35 ++++++++++---------
.../datasets/concepts/filters/Filter.java | 25 ++++++-------
.../filters/specific/CountFilter.java | 3 +-
.../filters/specific/CountQuartersFilter.java | 3 +-
.../filters/specific/DateDistanceFilter.java | 3 +-
.../filters/specific/DurationSumFilter.java | 3 +-
.../concepts/filters/specific/FlagFilter.java | 3 +-
.../filters/specific/NumberFilter.java | 3 +-
.../filters/specific/PrefixTextFilter.java | 3 +-
.../specific/QuartersInYearFilter.java | 3 +-
.../filters/specific/SelectFilter.java | 5 +--
.../concepts/filters/specific/SumFilter.java | 3 +-
.../resources/api/ConceptsProcessor.java | 7 ++--
.../integration/json/filter/FilterTest.java | 2 +-
.../concepts/filters/TestGroupFilter.java | 3 +-
.../frontend/FilterSearchItemTest.java | 3 +-
18 files changed, 69 insertions(+), 45 deletions(-)
diff --git a/backend/src/main/java/com/bakdata/conquery/apiv1/query/concept/filter/FilterValue.java b/backend/src/main/java/com/bakdata/conquery/apiv1/query/concept/filter/FilterValue.java
index f3d2a1de35..11bd78c789 100644
--- a/backend/src/main/java/com/bakdata/conquery/apiv1/query/concept/filter/FilterValue.java
+++ b/backend/src/main/java/com/bakdata/conquery/apiv1/query/concept/filter/FilterValue.java
@@ -191,7 +191,7 @@ public void resolve(QueryResolveContext context) {
* Values of group filters can have an arbitrary format which is set by the filter itself.
* Hence, we treat the value for the filter as Object.class.
*
- * The resolved filter instructs the frontend on how to render and serialize the filter value using the {@link Filter#createFrontendConfig()} method. The filter must implement {@link GroupFilter} and provide the type information of the value to correctly deserialize the received object.
+ * The resolved filter instructs the frontend on how to render and serialize the filter value using the {@link Filter#createFrontendConfig(com.bakdata.conquery.models.config.ConqueryConfig)} method. The filter must implement {@link GroupFilter} and provide the type information of the value to correctly deserialize the received object.
*/
public static class GroupFilterDeserializer extends StdDeserializer {
private final NsIdReferenceDeserializer> nsIdDeserializer = new NsIdReferenceDeserializer<>(Filter.class, null, FilterId.class);
diff --git a/backend/src/main/java/com/bakdata/conquery/models/config/FrontendConfig.java b/backend/src/main/java/com/bakdata/conquery/models/config/FrontendConfig.java
index 1bbfcddd56..e2883326f2 100644
--- a/backend/src/main/java/com/bakdata/conquery/models/config/FrontendConfig.java
+++ b/backend/src/main/java/com/bakdata/conquery/models/config/FrontendConfig.java
@@ -60,6 +60,11 @@ public class FrontendConfig {
@Email
private String contactEmail;
+ /**
+ * If true, users are always allowed to add custom values into SelectFilter input fields.
+ */
+ private boolean alwaysAllowCreateValue = false;
+
@Data
public static class CurrencyConfig {
diff --git a/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/FrontEndConceptBuilder.java b/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/FrontEndConceptBuilder.java
index fee4d75bda..d89c285838 100644
--- a/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/FrontEndConceptBuilder.java
+++ b/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/FrontEndConceptBuilder.java
@@ -23,6 +23,7 @@
import com.bakdata.conquery.io.storage.NamespaceStorage;
import com.bakdata.conquery.models.auth.entities.Subject;
import com.bakdata.conquery.models.auth.permissions.Ability;
+import com.bakdata.conquery.models.config.ConqueryConfig;
import com.bakdata.conquery.models.datasets.Column;
import com.bakdata.conquery.models.datasets.concepts.filters.Filter;
import com.bakdata.conquery.models.datasets.concepts.select.Select;
@@ -35,17 +36,19 @@
import com.bakdata.conquery.models.identifiable.ids.specific.ConceptId;
import com.bakdata.conquery.models.identifiable.ids.specific.ConceptTreeChildId;
import com.bakdata.conquery.models.identifiable.ids.specific.StructureNodeId;
-import lombok.AllArgsConstructor;
+import lombok.Data;
import lombok.extern.slf4j.Slf4j;
/**
* This class constructs the concept tree as it is presented to the front end.
*/
-@AllArgsConstructor
+@Data
@Slf4j
public class FrontEndConceptBuilder {
- public static FrontendRoot createRoot(NamespaceStorage storage, Subject subject) {
+ private final ConqueryConfig conqueryConfig;
+
+ public FrontendRoot createRoot(NamespaceStorage storage, Subject subject) {
final FrontendRoot root = new FrontendRoot();
final Map, FrontendNode> roots = root.getConcepts();
@@ -95,7 +98,7 @@ public static FrontendRoot createRoot(NamespaceStorage storage, Subject subject)
return root;
}
- private static FrontendNode createConceptRoot(Concept> concept, StructureNode[] structureNodes) {
+ private FrontendNode createConceptRoot(Concept> concept, StructureNode[] structureNodes) {
final MatchingStats matchingStats = concept.getMatchingStats();
@@ -121,8 +124,8 @@ private static FrontendNode createConceptRoot(Concept> concept, StructureNode[
.flatMap(Collection::stream)
.findAny()
.isEmpty())
- .selects(concept.getSelects().stream().map(FrontEndConceptBuilder::createSelect).collect(Collectors.toList()))
- .tables(concept.getConnectors().stream().map(FrontEndConceptBuilder::createTable).collect(Collectors.toList()))
+ .selects(concept.getSelects().stream().map(this::createSelect).collect(Collectors.toList()))
+ .tables(concept.getConnectors().stream().map(this::createTable).collect(Collectors.toList()))
.build();
if (concept instanceof ConceptTreeNode> tree && tree.getChildren() != null) {
@@ -132,7 +135,7 @@ private static FrontendNode createConceptRoot(Concept> concept, StructureNode[
}
@Nullable
- private static FrontendNode createStructureNode(StructureNode structureNode, Map, FrontendNode> roots) {
+ private FrontendNode createStructureNode(StructureNode structureNode, Map, FrontendNode> roots) {
final List unstructured = new ArrayList<>();
for (ConceptId id : structureNode.getContainedRoots()) {
if (!roots.containsKey(id)) {
@@ -158,7 +161,7 @@ private static FrontendNode createStructureNode(StructureNode structureNode, Map
.build();
}
- public static FrontendSelect createSelect(Select select) {
+ public FrontendSelect createSelect(Select select) {
return FrontendSelect.builder()
.id(select.getId())
.label(select.getLabel())
@@ -168,7 +171,7 @@ public static FrontendSelect createSelect(Select select) {
.build();
}
- public static FrontendTable createTable(Connector con) {
+ public FrontendTable createTable(Connector con) {
final FrontendTable
result =
FrontendTable.builder()
@@ -176,8 +179,8 @@ public static FrontendTable createTable(Connector con) {
.connectorId(con.getId())
.label(con.getLabel())
.isDefault(con.isDefault())
- .filters(con.collectAllFilters().stream().map(FrontEndConceptBuilder::createFilter).collect(Collectors.toList()))
- .selects(con.getSelects().stream().map(FrontEndConceptBuilder::createSelect).collect(Collectors.toList()))
+ .filters(con.collectAllFilters().stream().map(this::createFilter).collect(Collectors.toList()))
+ .selects(con.getSelects().stream().map(this::createSelect).collect(Collectors.toList()))
.supportedSecondaryIds(Arrays.stream(con.getTable().getColumns())
.map(Column::getSecondaryId)
.filter(Objects::nonNull)
@@ -199,16 +202,16 @@ public static FrontendTable createTable(Connector con) {
return result;
}
- public static FrontendFilterConfiguration.Top createFilter(Filter> filter) {
+ public FrontendFilterConfiguration.Top createFilter(Filter> filter) {
try {
- return filter.createFrontendConfig();
+ return filter.createFrontendConfig(conqueryConfig);
}
catch (ConceptConfigurationException e) {
throw new IllegalStateException(e);
}
}
- private static FrontendNode createCTNode(ConceptElement> ce) {
+ private FrontendNode createCTNode(ConceptElement> ce) {
final MatchingStats matchingStats = ce.getMatchingStats();
FrontendNode.FrontendNodeBuilder nodeBuilder = FrontendNode.builder()
.active(null)
@@ -248,13 +251,13 @@ private static FrontendNode createCTNode(ConceptElement> ce) {
return n;
}
- public static FrontendList createTreeMap(Concept> concept) {
+ public FrontendList createTreeMap(Concept> concept) {
final FrontendList map = new FrontendList();
fillTreeMap(concept, map);
return map;
}
- private static void fillTreeMap(ConceptElement> ce, FrontendList map) {
+ private void fillTreeMap(ConceptElement> ce, FrontendList map) {
map.add(ce.getId(), createCTNode(ce));
if (ce instanceof ConceptTreeNode && ((ConceptTreeNode>) ce).getChildren() != null) {
for (ConceptTreeChild c : ((ConceptTreeNode>) ce).getChildren()) {
diff --git a/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/filters/Filter.java b/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/filters/Filter.java
index 4447e29f9f..c9949d085e 100644
--- a/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/filters/Filter.java
+++ b/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/filters/Filter.java
@@ -4,6 +4,7 @@
import com.bakdata.conquery.apiv1.frontend.FrontendFilterConfiguration;
import com.bakdata.conquery.io.cps.CPSBase;
+import com.bakdata.conquery.models.config.ConqueryConfig;
import com.bakdata.conquery.models.datasets.Column;
import com.bakdata.conquery.models.datasets.Dataset;
import com.bakdata.conquery.models.datasets.concepts.Connector;
@@ -52,21 +53,21 @@ public Dataset getDataset() {
return getConnector().getDataset();
}
- public FrontendFilterConfiguration.Top createFrontendConfig() throws ConceptConfigurationException {
- FrontendFilterConfiguration.Top f = FrontendFilterConfiguration.Top.builder()
- .id(getId())
- .label(getLabel())
- .tooltip(getTooltip())
- .unit(getUnit())
- .allowDropFile(getAllowDropFile())
- .pattern(getPattern())
- .defaultValue(getDefaultValue())
- .build();
- configureFrontend(f);
+ public FrontendFilterConfiguration.Top createFrontendConfig(ConqueryConfig conqueryConfig) throws ConceptConfigurationException {
+ final FrontendFilterConfiguration.Top f = FrontendFilterConfiguration.Top.builder()
+ .id(getId())
+ .label(getLabel())
+ .tooltip(getTooltip())
+ .unit(getUnit())
+ .allowDropFile(getAllowDropFile())
+ .pattern(getPattern())
+ .defaultValue(getDefaultValue())
+ .build();
+ configureFrontend(f, conqueryConfig);
return f;
}
- protected abstract void configureFrontend(FrontendFilterConfiguration.Top f) throws ConceptConfigurationException;
+ protected abstract void configureFrontend(FrontendFilterConfiguration.Top f, ConqueryConfig conqueryConfig) throws ConceptConfigurationException;
@JsonIgnore
public abstract List getRequiredColumns();
diff --git a/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/filters/specific/CountFilter.java b/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/filters/specific/CountFilter.java
index 845648ad90..e45f0d7c9b 100644
--- a/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/filters/specific/CountFilter.java
+++ b/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/filters/specific/CountFilter.java
@@ -12,6 +12,7 @@
import com.bakdata.conquery.io.jackson.serializer.NsIdRef;
import com.bakdata.conquery.io.jackson.serializer.NsIdRefCollection;
import com.bakdata.conquery.models.common.Range;
+import com.bakdata.conquery.models.config.ConqueryConfig;
import com.bakdata.conquery.models.datasets.Column;
import com.bakdata.conquery.models.datasets.concepts.filters.Filter;
import com.bakdata.conquery.models.query.filter.RangeFilterNode;
@@ -36,7 +37,7 @@ public class CountFilter extends Filter {
private boolean distinct;
@Override
- public void configureFrontend(FrontendFilterConfiguration.Top f) {
+ public void configureFrontend(FrontendFilterConfiguration.Top f, ConqueryConfig conqueryConfig) {
f.setType(FrontendFilterType.Fields.INTEGER_RANGE);
f.setMin(1);
}
diff --git a/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/filters/specific/CountQuartersFilter.java b/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/filters/specific/CountQuartersFilter.java
index b0997ffc3c..41d42f9ae3 100644
--- a/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/filters/specific/CountQuartersFilter.java
+++ b/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/filters/specific/CountQuartersFilter.java
@@ -6,6 +6,7 @@
import com.bakdata.conquery.apiv1.frontend.FrontendFilterType;
import com.bakdata.conquery.io.cps.CPSType;
import com.bakdata.conquery.models.common.Range;
+import com.bakdata.conquery.models.config.ConqueryConfig;
import com.bakdata.conquery.models.datasets.concepts.filters.Filter;
import com.bakdata.conquery.models.datasets.concepts.filters.SingleColumnFilter;
import com.bakdata.conquery.models.events.MajorTypeId;
@@ -26,7 +27,7 @@ public EnumSet getAcceptedColumnTypes() {
}
@Override
- public void configureFrontend(FrontendFilterConfiguration.Top f) {
+ public void configureFrontend(FrontendFilterConfiguration.Top f, ConqueryConfig conqueryConfig) {
f.setType(FrontendFilterType.Fields.INTEGER_RANGE);
f.setMin(1);
}
diff --git a/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/filters/specific/DateDistanceFilter.java b/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/filters/specific/DateDistanceFilter.java
index c811b797af..ecad117745 100644
--- a/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/filters/specific/DateDistanceFilter.java
+++ b/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/filters/specific/DateDistanceFilter.java
@@ -9,6 +9,7 @@
import com.bakdata.conquery.apiv1.frontend.FrontendFilterType;
import com.bakdata.conquery.io.cps.CPSType;
import com.bakdata.conquery.models.common.Range;
+import com.bakdata.conquery.models.config.ConqueryConfig;
import com.bakdata.conquery.models.datasets.concepts.filters.Filter;
import com.bakdata.conquery.models.datasets.concepts.filters.SingleColumnFilter;
import com.bakdata.conquery.models.events.MajorTypeId;
@@ -35,7 +36,7 @@ public EnumSet getAcceptedColumnTypes() {
}
@Override
- public void configureFrontend(FrontendFilterConfiguration.Top f) throws ConceptConfigurationException {
+ public void configureFrontend(FrontendFilterConfiguration.Top f, ConqueryConfig conqueryConfig) throws ConceptConfigurationException {
if (getColumn().getType() != MajorTypeId.DATE) {
throw new ConceptConfigurationException(getConnector(), "DATE_DISTANCE filter is incompatible with columns of type " + getColumn().getType());
}
diff --git a/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/filters/specific/DurationSumFilter.java b/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/filters/specific/DurationSumFilter.java
index 09087ee70d..cfc180d3ff 100644
--- a/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/filters/specific/DurationSumFilter.java
+++ b/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/filters/specific/DurationSumFilter.java
@@ -6,6 +6,7 @@
import com.bakdata.conquery.apiv1.frontend.FrontendFilterType;
import com.bakdata.conquery.io.cps.CPSType;
import com.bakdata.conquery.models.common.Range;
+import com.bakdata.conquery.models.config.ConqueryConfig;
import com.bakdata.conquery.models.datasets.concepts.filters.Filter;
import com.bakdata.conquery.models.datasets.concepts.filters.SingleColumnFilter;
import com.bakdata.conquery.models.events.MajorTypeId;
@@ -29,7 +30,7 @@ public EnumSet getAcceptedColumnTypes() {
}
@Override
- public void configureFrontend(FrontendFilterConfiguration.Top f) throws ConceptConfigurationException {
+ public void configureFrontend(FrontendFilterConfiguration.Top f, ConqueryConfig conqueryConfig) throws ConceptConfigurationException {
if (getColumn().getType() != MajorTypeId.DATE_RANGE) {
throw new ConceptConfigurationException(getConnector(), "DURATION_SUM filter is incompatible with columns of type "
+ getColumn().getType());
diff --git a/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/filters/specific/FlagFilter.java b/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/filters/specific/FlagFilter.java
index 324ecc22da..0a5c2598ba 100644
--- a/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/filters/specific/FlagFilter.java
+++ b/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/filters/specific/FlagFilter.java
@@ -11,6 +11,7 @@
import com.bakdata.conquery.apiv1.frontend.FrontendValue;
import com.bakdata.conquery.io.cps.CPSType;
import com.bakdata.conquery.io.jackson.serializer.NsIdRefCollection;
+import com.bakdata.conquery.models.config.ConqueryConfig;
import com.bakdata.conquery.models.datasets.Column;
import com.bakdata.conquery.models.datasets.concepts.filters.Filter;
import com.bakdata.conquery.models.error.ConqueryError;
@@ -39,7 +40,7 @@ public class FlagFilter extends Filter {
private final Map flags;
@Override
- protected void configureFrontend(FrontendFilterConfiguration.Top f) throws ConceptConfigurationException {
+ protected void configureFrontend(FrontendFilterConfiguration.Top f, ConqueryConfig conqueryConfig) throws ConceptConfigurationException {
f.setType(FrontendFilterType.Fields.MULTI_SELECT);
f.setOptions(flags.keySet().stream().map(key -> new FrontendValue(key, key)).toList());
diff --git a/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/filters/specific/NumberFilter.java b/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/filters/specific/NumberFilter.java
index 0040baab68..1894783631 100644
--- a/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/filters/specific/NumberFilter.java
+++ b/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/filters/specific/NumberFilter.java
@@ -7,6 +7,7 @@
import com.bakdata.conquery.io.cps.CPSType;
import com.bakdata.conquery.models.common.IRange;
import com.bakdata.conquery.models.common.Range;
+import com.bakdata.conquery.models.config.ConqueryConfig;
import com.bakdata.conquery.models.datasets.concepts.filters.Filter;
import com.bakdata.conquery.models.datasets.concepts.filters.SingleColumnFilter;
import com.bakdata.conquery.models.exceptions.ConceptConfigurationException;
@@ -29,7 +30,7 @@
public class NumberFilter> extends SingleColumnFilter {
@Override
- public void configureFrontend(FrontendFilterConfiguration.Top f) throws ConceptConfigurationException {
+ public void configureFrontend(FrontendFilterConfiguration.Top f, ConqueryConfig conqueryConfig) throws ConceptConfigurationException {
final String type = switch (getColumn().getType()) {
case MONEY -> FrontendFilterType.Fields.MONEY_RANGE;
case INTEGER -> FrontendFilterType.Fields.INTEGER_RANGE;
diff --git a/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/filters/specific/PrefixTextFilter.java b/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/filters/specific/PrefixTextFilter.java
index bd5e83db3e..02480ea143 100644
--- a/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/filters/specific/PrefixTextFilter.java
+++ b/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/filters/specific/PrefixTextFilter.java
@@ -5,6 +5,7 @@
import com.bakdata.conquery.apiv1.frontend.FrontendFilterConfiguration;
import com.bakdata.conquery.apiv1.frontend.FrontendFilterType;
import com.bakdata.conquery.io.cps.CPSType;
+import com.bakdata.conquery.models.config.ConqueryConfig;
import com.bakdata.conquery.models.datasets.concepts.filters.Filter;
import com.bakdata.conquery.models.datasets.concepts.filters.SingleColumnFilter;
import com.bakdata.conquery.models.events.MajorTypeId;
@@ -20,7 +21,7 @@ public class PrefixTextFilter extends SingleColumnFilter {
@Override
- public void configureFrontend(FrontendFilterConfiguration.Top f) {
+ public void configureFrontend(FrontendFilterConfiguration.Top f, ConqueryConfig conqueryConfig) {
f.setType(FrontendFilterType.Fields.STRING);
}
diff --git a/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/filters/specific/QuartersInYearFilter.java b/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/filters/specific/QuartersInYearFilter.java
index 11bc8c36fa..1dac22cb0a 100644
--- a/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/filters/specific/QuartersInYearFilter.java
+++ b/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/filters/specific/QuartersInYearFilter.java
@@ -6,6 +6,7 @@
import com.bakdata.conquery.apiv1.frontend.FrontendFilterType;
import com.bakdata.conquery.io.cps.CPSType;
import com.bakdata.conquery.models.common.Range;
+import com.bakdata.conquery.models.config.ConqueryConfig;
import com.bakdata.conquery.models.datasets.concepts.filters.Filter;
import com.bakdata.conquery.models.datasets.concepts.filters.SingleColumnFilter;
import com.bakdata.conquery.models.events.MajorTypeId;
@@ -24,7 +25,7 @@ public EnumSet getAcceptedColumnTypes() {
}
@Override
- public void configureFrontend(FrontendFilterConfiguration.Top f) {
+ public void configureFrontend(FrontendFilterConfiguration.Top f, ConqueryConfig conqueryConfig) {
f.setType(FrontendFilterType.Fields.INTEGER_RANGE);
f.setMin(1);
f.setMax(4);
diff --git a/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/filters/specific/SelectFilter.java b/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/filters/specific/SelectFilter.java
index 8a547e5308..947edb2fcd 100644
--- a/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/filters/specific/SelectFilter.java
+++ b/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/filters/specific/SelectFilter.java
@@ -12,6 +12,7 @@
import com.bakdata.conquery.io.jackson.View;
import com.bakdata.conquery.io.jackson.serializer.NsIdRef;
import com.bakdata.conquery.io.storage.NamespaceStorage;
+import com.bakdata.conquery.models.config.ConqueryConfig;
import com.bakdata.conquery.models.config.IndexConfig;
import com.bakdata.conquery.models.datasets.concepts.Searchable;
import com.bakdata.conquery.models.datasets.concepts.filters.SingleColumnFilter;
@@ -56,12 +57,12 @@ public EnumSet getAcceptedColumnTypes() {
}
@Override
- public void configureFrontend(FrontendFilterConfiguration.Top f) throws ConceptConfigurationException {
+ public void configureFrontend(FrontendFilterConfiguration.Top f, ConqueryConfig conqueryConfig) throws ConceptConfigurationException {
f.setTemplate(getTemplate());
f.setType(getFilterType());
// If either not searches are available or all are disabled, we allow users to supply their own values
- f.setCreatable(getSearchReferences().stream().noneMatch(Predicate.not(Searchable::isSearchDisabled)));
+ f.setCreatable(conqueryConfig.getFrontend().isAlwaysAllowCreateValue() || getSearchReferences().stream().noneMatch(Predicate.not(Searchable::isSearchDisabled)));
f.setOptions(collectLabels());
}
diff --git a/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/filters/specific/SumFilter.java b/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/filters/specific/SumFilter.java
index c89db064ba..643e8e8807 100644
--- a/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/filters/specific/SumFilter.java
+++ b/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/filters/specific/SumFilter.java
@@ -14,6 +14,7 @@
import com.bakdata.conquery.io.jackson.serializer.NsIdRefCollection;
import com.bakdata.conquery.models.common.IRange;
import com.bakdata.conquery.models.common.Range;
+import com.bakdata.conquery.models.config.ConqueryConfig;
import com.bakdata.conquery.models.datasets.Column;
import com.bakdata.conquery.models.datasets.concepts.filters.Filter;
import com.bakdata.conquery.models.events.MajorTypeId;
@@ -57,7 +58,7 @@ public class SumFilter> extends Filter
private List distinctByColumn = Collections.emptyList();
@Override
- public void configureFrontend(FrontendFilterConfiguration.Top f) throws ConceptConfigurationException {
+ public void configureFrontend(FrontendFilterConfiguration.Top f, ConqueryConfig conqueryConfig) throws ConceptConfigurationException {
final String type = switch (getColumn().getType()) {
case MONEY -> FrontendFilterType.Fields.MONEY_RANGE;
case INTEGER -> FrontendFilterType.Fields.INTEGER_RANGE;
diff --git a/backend/src/main/java/com/bakdata/conquery/resources/api/ConceptsProcessor.java b/backend/src/main/java/com/bakdata/conquery/resources/api/ConceptsProcessor.java
index ab877f9b41..d2c1ebac6b 100644
--- a/backend/src/main/java/com/bakdata/conquery/resources/api/ConceptsProcessor.java
+++ b/backend/src/main/java/com/bakdata/conquery/resources/api/ConceptsProcessor.java
@@ -65,11 +65,14 @@ public class ConceptsProcessor {
private final ConqueryConfig config;
+ @Getter(lazy = true)
+ private final FrontEndConceptBuilder frontEndConceptBuilder = new FrontEndConceptBuilder(getConfig());
+
private final LoadingCache, FrontendList> nodeCache =
CacheBuilder.newBuilder().softValues().expireAfterWrite(10, TimeUnit.MINUTES).build(new CacheLoader<>() {
@Override
public FrontendList load(Concept> concept) {
- return FrontEndConceptBuilder.createTreeMap(concept);
+ return getFrontEndConceptBuilder().createTreeMap(concept);
}
});
@@ -106,7 +109,7 @@ public CursorAndLength load(Searchable> searchable) {
public FrontendRoot getRoot(NamespaceStorage storage, Subject subject) {
- final FrontendRoot root = FrontEndConceptBuilder.createRoot(storage, subject);
+ final FrontendRoot root = getFrontEndConceptBuilder().createRoot(storage, subject);
// Report Violation
ValidatorHelper.createViolationsString(validator.validate(root), log.isTraceEnabled()).ifPresent(log::warn);
diff --git a/backend/src/test/java/com/bakdata/conquery/integration/json/filter/FilterTest.java b/backend/src/test/java/com/bakdata/conquery/integration/json/filter/FilterTest.java
index 063f4f3e81..2bdfbb7708 100644
--- a/backend/src/test/java/com/bakdata/conquery/integration/json/filter/FilterTest.java
+++ b/backend/src/test/java/com/bakdata/conquery/integration/json/filter/FilterTest.java
@@ -172,7 +172,7 @@ public Query getQuery() {
@Override
public void executeTest(StandaloneSupport standaloneSupport) throws IOException {
try {
- final FrontendFilterConfiguration.Top actual = connector.getFilters().iterator().next().createFrontendConfig();
+ final FrontendFilterConfiguration.Top actual = connector.getFilters().iterator().next().createFrontendConfig(standaloneSupport.getConfig());
if (expectedFrontendConfig != null) {
log.info("Checking actual FrontendConfig: {}", actual);
diff --git a/backend/src/test/java/com/bakdata/conquery/models/datasets/concepts/filters/TestGroupFilter.java b/backend/src/test/java/com/bakdata/conquery/models/datasets/concepts/filters/TestGroupFilter.java
index ddccaf3428..bcdd7a33e6 100644
--- a/backend/src/test/java/com/bakdata/conquery/models/datasets/concepts/filters/TestGroupFilter.java
+++ b/backend/src/test/java/com/bakdata/conquery/models/datasets/concepts/filters/TestGroupFilter.java
@@ -12,6 +12,7 @@
import com.bakdata.conquery.apiv1.frontend.FrontendFilterType;
import com.bakdata.conquery.io.cps.CPSType;
import com.bakdata.conquery.io.jackson.View;
+import com.bakdata.conquery.models.config.ConqueryConfig;
import com.bakdata.conquery.models.datasets.concepts.filters.specific.QueryContextResolvable;
import com.bakdata.conquery.models.query.QueryResolveContext;
import com.bakdata.conquery.models.query.filter.event.MultiSelectFilterNode;
@@ -27,7 +28,7 @@
public class TestGroupFilter extends SingleColumnFilter implements GroupFilter {
@Override
- public void configureFrontend(FrontendFilterConfiguration.Top f) {
+ public void configureFrontend(FrontendFilterConfiguration.Top f, ConqueryConfig conqueryConfig) {
f.setType(FrontendFilterType.Fields.GROUP);
f.setFilters(getFEFilter());
}
diff --git a/backend/src/test/java/com/bakdata/conquery/models/datasets/concepts/frontend/FilterSearchItemTest.java b/backend/src/test/java/com/bakdata/conquery/models/datasets/concepts/frontend/FilterSearchItemTest.java
index 76d7fe7b25..d6b263ec37 100644
--- a/backend/src/test/java/com/bakdata/conquery/models/datasets/concepts/frontend/FilterSearchItemTest.java
+++ b/backend/src/test/java/com/bakdata/conquery/models/datasets/concepts/frontend/FilterSearchItemTest.java
@@ -6,6 +6,7 @@
import com.bakdata.conquery.apiv1.frontend.FrontendTable;
import com.bakdata.conquery.apiv1.frontend.FrontendValue;
+import com.bakdata.conquery.models.config.ConqueryConfig;
import com.bakdata.conquery.models.datasets.Column;
import com.bakdata.conquery.models.datasets.Dataset;
import com.bakdata.conquery.models.datasets.Table;
@@ -67,7 +68,7 @@ public void sortedValidityDates() {
connector.setColumn(column);
connector.setConcept(concept);
connector.setValidityDates(validityDates);
- FrontendTable feTable = FrontEndConceptBuilder.createTable(connector);
+ FrontendTable feTable = new FrontEndConceptBuilder(new ConqueryConfig()).createTable(connector);
assertThat(feTable.getDateColumn().getOptions()).containsExactly(
new FrontendValue(val0.getId().toString(), "val0"),