diff --git a/data-store/src/main/java/org/lucares/pdb/datastore/internal/DataStore.java b/data-store/src/main/java/org/lucares/pdb/datastore/internal/DataStore.java index 787bb1c..5eb705a 100644 --- a/data-store/src/main/java/org/lucares/pdb/datastore/internal/DataStore.java +++ b/data-store/src/main/java/org/lucares/pdb/datastore/internal/DataStore.java @@ -10,8 +10,6 @@ import java.util.List; import java.util.Objects; import java.util.Optional; import java.util.Set; -import java.util.SortedSet; -import java.util.TreeSet; import java.util.concurrent.atomic.AtomicLong; import java.util.function.Consumer; @@ -229,28 +227,6 @@ public class DataStore implements AutoCloseable { } - public SortedSet getAvailableValuesForKey(final Query query, final String key) { - - final SortedSet result = new TreeSet<>(); - if (query.getQuery().isEmpty()) { - final PartitionIdSource partitionIdSource = new DatePartitioner(query.getDateRange()); - tagToDocsId.visitValues(partitionIdSource, new Tag(key, ""), - (tag, __) -> result.add(tag.getValueAsString())); - } else { - final List docs = search(query); - for (final Doc doc : docs) { - final String valueForKey = doc.getTags().getValue(key); - - if (valueForKey != null) { - result.add(valueForKey); - } - } - } - - return result; - - } - private PartitionLongList executeQuery(final Query query) { final long start = System.nanoTime(); synchronized (docIdToDoc) { diff --git a/pdb-ui/src/main/java/org/lucares/pdbui/PdbController.java b/pdb-ui/src/main/java/org/lucares/pdbui/PdbController.java index 6a91020..0b74896 100644 --- a/pdb-ui/src/main/java/org/lucares/pdbui/PdbController.java +++ b/pdb-ui/src/main/java/org/lucares/pdbui/PdbController.java @@ -11,12 +11,12 @@ import java.util.List; import java.util.Locale; import java.util.Map; import java.util.SortedSet; +import java.util.TreeSet; import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.ReentrantLock; import org.apache.commons.lang3.StringUtils; import org.lucares.pdb.api.DateTimeRange; -import org.lucares.pdb.api.Query; import org.lucares.pdb.api.QueryWithCaretMarker; import org.lucares.pdb.datastore.Proposal; import org.lucares.pdb.plot.api.AxisScale; @@ -252,9 +252,14 @@ public class PdbController implements HardcodedValues, PropertyKeys { SortedSet fields(@PathVariable(name = "fieldName") final String fieldName, @RequestParam(name = "query") final String query) { - final DateTimeRange dateRange = DateTimeRange.max(); - final Query q = new Query(query, dateRange); - final SortedSet fields = db.getFieldsValues(q, fieldName); + final String q = String.format("(%s) and %s=", query, fieldName); + final int caretIndex = q.length() + 1; // the autocomplete methods needs a 1-based index + + final AutocompleteResponse autocompleteResponse = this.autocomplete(q, caretIndex); + final List proposals = autocompleteResponse.getProposals(); + + final SortedSet fields = CollectionUtils.map(proposals, new TreeSet<>(), + AutocompleteProposal::getValue); return fields; } diff --git a/pdb-utils/src/main/java/org/lucares/utils/CollectionUtils.java b/pdb-utils/src/main/java/org/lucares/utils/CollectionUtils.java index e3beff9..19e3644 100644 --- a/pdb-utils/src/main/java/org/lucares/utils/CollectionUtils.java +++ b/pdb-utils/src/main/java/org/lucares/utils/CollectionUtils.java @@ -34,6 +34,17 @@ public class CollectionUtils { return Stream.of(input).map(mapper).collect(Collectors.toList()); } + public static , T, R> O map(final Collection input, final O result, + final Function mapper) { + + for (final T t : input) { + final R e = mapper.apply(t); + result.add(e); + } + + return result; + } + public static Map createMapFromValues(final Iterable iterable, final Function keyMapper) { final Map result = new HashMap<>(); diff --git a/performanceDb/src/main/java/org/lucares/performance/db/PerformanceDb.java b/performanceDb/src/main/java/org/lucares/performance/db/PerformanceDb.java index 9f16cf1..26f5776 100644 --- a/performanceDb/src/main/java/org/lucares/performance/db/PerformanceDb.java +++ b/performanceDb/src/main/java/org/lucares/performance/db/PerformanceDb.java @@ -8,7 +8,6 @@ import java.util.Arrays; import java.util.Iterator; import java.util.List; import java.util.Optional; -import java.util.SortedSet; import java.util.stream.Stream; import org.lucares.collections.LongList; @@ -24,8 +23,8 @@ import org.lucares.pdb.datastore.InvalidValueException; import org.lucares.pdb.datastore.PdbFile; import org.lucares.pdb.datastore.Proposal; import org.lucares.pdb.datastore.WriteException; -import org.lucares.pdb.datastore.internal.PartitionDiskStore; import org.lucares.pdb.datastore.internal.DataStore; +import org.lucares.pdb.datastore.internal.PartitionDiskStore; import org.lucares.pdb.datastore.lang.SyntaxException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -181,10 +180,6 @@ public class PerformanceDb implements AutoCloseable { return fields; } - public SortedSet getFieldsValues(final Query query, final String fieldName) { - return dataStore.getAvailableValuesForKey(query, fieldName); - } - public PartitionDiskStore getDataStore() { return dataStore.getDiskStorage(); }