diff --git a/src/main/gui/net/sf/jailer/ui/ClosureView.java b/src/main/gui/net/sf/jailer/ui/ClosureView.java index d08bf90fd..eb567319c 100644 --- a/src/main/gui/net/sf/jailer/ui/ClosureView.java +++ b/src/main/gui/net/sf/jailer/ui/ClosureView.java @@ -43,6 +43,7 @@ import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; +import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Set; @@ -622,8 +623,15 @@ public abstract class ClosureView extends javax.swing.JDialog { } extractionModelEditor.incCaptureLevel(); try { - while (!toSelect.isEmpty()) { - ClosureView.this.extractionModelEditor.select(toSelect.pop()); + if (!toSelect.isEmpty()) { + Table source = toSelect.pop(); + while (!toSelect.isEmpty()) { + Table dest = toSelect.pop(); + if (!ClosureView.this.extractionModelEditor.graphView.isTableVisible(dest)) { + ClosureView.this.extractionModelEditor.graphView.showTable(source, dest); + } + source = dest; + } } } finally { extractionModelEditor.decCaptureLevel(); @@ -688,7 +696,7 @@ public abstract class ClosureView extends javax.swing.JDialog { // } // table model - refreshTableModel(null); + refreshTableModel(null, null); refreshing = false; } @@ -698,7 +706,7 @@ public abstract class ClosureView extends javax.swing.JDialog { */ public void refresh() { String prevSelection = selectedTable; - refreshTableModel(null); + refreshTableModel(null, null); if (cellInfo.containsKey(prevSelection)) { selectedTable = prevSelection; } else { @@ -711,8 +719,9 @@ public abstract class ClosureView extends javax.swing.JDialog { /** * Refreshes the table model. * @param excludedTables + * @param path */ - private void refreshTableModel(Set excludedTables) { + private void refreshTableModel(Set
excludedTables, List
path) { cellInfo.clear(); dependencies.clear(); if (excludedTables == null) { @@ -756,7 +765,14 @@ public abstract class ClosureView extends javax.swing.JDialog { TreeSet nonIsolated = new TreeSet(); + List
stations = new LinkedList
(); + if (path != null) { + stations.addAll(path); + } + stations.removeAll(excludedTables); + while (!currentLine.isEmpty()) { + // add current line to table model if (distance == OMEGA || isolated) { Object[] lineAsObjects = new Object[tablesPerLine + 1]; @@ -800,7 +816,21 @@ public abstract class ClosureView extends javax.swing.JDialog { // get next line List nextLine = new ArrayList(); - for (String t: currentLine) { + String nextStat = null; + if (!stations.isEmpty()) { + Table nextStatT = stations.get(0); + if (nextStatT != null) { + nextStat = getDataModel().getDisplayName(nextStatT); + } + } + + List cl = currentLine; + if (nextStat != null && currentLine.contains(nextStat)) { + cl = new ArrayList(); + cl.add(nextStat); + stations.remove(0); + } + for (String t: cl) { Table table = getDataModel().getTableByDisplayName(t); if (table != null && !excludedTables.contains(table)) { CellInfo cellInfoT = this.cellInfo.get(t); @@ -1613,12 +1643,12 @@ public abstract class ClosureView extends javax.swing.JDialog { } Result result = new PathFinder().find(source, destination, getDataModel(), false, parent); if (result != null) { - refreshTableModel(result.excludedTables); + refreshTableModel(result.excludedTables, result.path); List
path = result.path; Table table = null; for (int i = 0; i < path.size(); i++) { table = path.get(i); - ClosureView.this.extractionModelEditor.select(table); +// ClosureView.this.extractionModelEditor.select(table); } if (table != null) { CellInfo ci = cellInfo.get(getDataModel().getDisplayName(table)); diff --git a/src/main/gui/net/sf/jailer/ui/graphical_view/GraphicalDataModelView.java b/src/main/gui/net/sf/jailer/ui/graphical_view/GraphicalDataModelView.java index 08474b073..4e63cdd3c 100644 --- a/src/main/gui/net/sf/jailer/ui/graphical_view/GraphicalDataModelView.java +++ b/src/main/gui/net/sf/jailer/ui/graphical_view/GraphicalDataModelView.java @@ -115,7 +115,7 @@ public class GraphicalDataModelView extends JPanel { /** * Maximum number of tables to make visible during expansion ("expand single table"). */ - public static final int EXPAND_SINGLE_TABLE_LIMIT = 10; + public static final int EXPAND_SINGLE_TABLE_LIMIT = 4; /** * The selected association.