group plots by a single field

This commit is contained in:
2016-12-30 18:45:01 +01:00
parent 62437f384f
commit c283568757
8 changed files with 125 additions and 24 deletions

View File

@@ -11,6 +11,7 @@ import org.lucares.pdb.api.Tags;
public class Grouping {
public static final String NO_GROUPING = null;
public static final String DEFAULT_GROUP = "<default>";
private final List<Group> groups = new ArrayList<>();
private Grouping(final Group group) {
@@ -25,7 +26,7 @@ public class Grouping {
final Grouping result;
if (groupByField == NO_GROUPING) {
final Group group = new Group(null, pdbReaders);
final Group group = new Group(Tags.EMPTY, pdbReaders);
result = new Grouping(group);
} else {
@@ -35,10 +36,10 @@ public class Grouping {
final Tags tags = pdbReader.getPdbFile().getTags();
final String value = tags.getValue(groupByField);
if (value != null) {
addIfNotExists(grouping, groupByField, value);
grouping.get(value).addReader(pdbReader);
}
final String groupName = value != null ? value : DEFAULT_GROUP;
addIfNotExists(grouping, groupByField, groupName);
grouping.get(groupName).addReader(pdbReader);
}
result = new Grouping(grouping.values());
}

View File

@@ -15,6 +15,7 @@ import java.util.logging.Logger;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;
import org.lucares.ludb.Field;
import org.lucares.ludb.H2DB;
import org.lucares.ludb.Proposal;
import org.lucares.pdb.api.Entry;
@@ -22,7 +23,7 @@ import org.lucares.pdb.api.GroupResult;
import org.lucares.pdb.api.Result;
import org.lucares.pdb.api.Tags;
public class PerformanceDb implements AutoCloseable {
public class PerformanceDb implements AutoCloseable, CollectionUtils {
private static final Logger LOGGER = Logger.getLogger(PerformanceDb.class.getCanonicalName());
private final TagsToFile tagsToFile;
@@ -178,4 +179,10 @@ public class PerformanceDb implements AutoCloseable {
public List<Proposal> autocomplete(final String query, final int caretIndex) {
return db.proposeTagForQuery(query, caretIndex);
}
public List<String> getFields() {
final List<Field> fields = db.getAvailableFields("");
return map(fields, Field::getName);
}
}