diff --git a/src/main/engine/net/sf/jailer/datamodel/DataModel.java b/src/main/engine/net/sf/jailer/datamodel/DataModel.java index 198aa1bd0..c5789d87c 100644 --- a/src/main/engine/net/sf/jailer/datamodel/DataModel.java +++ b/src/main/engine/net/sf/jailer/datamodel/DataModel.java @@ -37,11 +37,13 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.Optional; import java.util.Set; import java.util.SortedSet; import java.util.TreeMap; import java.util.TreeSet; +import org.apache.commons.collections4.MapUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -304,6 +306,18 @@ public Collection getTables() { return tables.values(); } + /** + * When starting UI we need to pick a table to get selected at first, in a stable way. + * Alphabetically first table sounds good and deterministic. + */ + public Optional
firstTable() { + if (MapUtils.isEmpty(tables)) { + return Optional.empty(); + } + + return tables.keySet().stream().sorted().findFirst().map(tables::get); + } + /** * Reads in table.csv and association.csv * and builds the relational data model. diff --git a/src/main/engine/net/sf/jailer/extractionmodel/ExtractionModel.java b/src/main/engine/net/sf/jailer/extractionmodel/ExtractionModel.java index c3173ccec..1134e748e 100644 --- a/src/main/engine/net/sf/jailer/extractionmodel/ExtractionModel.java +++ b/src/main/engine/net/sf/jailer/extractionmodel/ExtractionModel.java @@ -198,7 +198,7 @@ public boolean equals(Object obj) { public ExtractionModel(DataModel dataModel, ExecutionContext executionContext) { this.dataModel = dataModel; this.version = null; - subject = dataModel.getTables().iterator().hasNext()? dataModel.getTables().iterator().next() : null; + subject = dataModel.firstTable().orElse(null); condition = ""; dataModel.setRestrictionModel(new RestrictionModel(dataModel, executionContext)); dataModel.deriveFilters();