Skip to content

Commit 5290b14

Browse files
committed
Tree view for post analysis web loader. Refs #306
1 parent 1e465bb commit 5290b14

File tree

11 files changed

+326
-119
lines changed

11 files changed

+326
-119
lines changed

EnrichmentMapPlugin/src/main/java/org/baderlab/csplugins/enrichmentmap/model/io/ModelSerializer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ public ImmutableSet<Integer> deserialize(JsonElement json, Type type, JsonDeseri
106106
}
107107
}
108108

109-
private static class PathAdapter implements JsonDeserializer<Path>, JsonSerializer<Path> {
109+
public static class PathAdapter implements JsonDeserializer<Path>, JsonSerializer<Path> {
110110
@Override
111111
public Path deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext context) {
112112
return Paths.get(jsonElement.getAsString());

EnrichmentMapPlugin/src/main/java/org/baderlab/csplugins/enrichmentmap/view/postanalysis/PADialogPage.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
import org.baderlab.csplugins.enrichmentmap.util.NamingUtil;
3535
import org.baderlab.csplugins.enrichmentmap.view.creation.NamePanel;
3636
import org.baderlab.csplugins.enrichmentmap.view.postanalysis.web.DownloadGMTFileTask;
37-
import org.baderlab.csplugins.enrichmentmap.view.postanalysis.web.WebLoadDialogParameters;
37+
import org.baderlab.csplugins.enrichmentmap.view.postanalysis.web.DialogParameters;
3838
import org.baderlab.csplugins.enrichmentmap.view.util.CardDialog;
3939
import org.baderlab.csplugins.enrichmentmap.view.util.CardDialogCallback;
4040
import org.baderlab.csplugins.enrichmentmap.view.util.CardDialogPage;
@@ -282,7 +282,7 @@ private void openSelectFileDialog() {
282282

283283
private void openLoadFromWebDialog() {
284284
JDialog parent = callback.getDialogFrame();
285-
WebLoadDialogParameters params = new WebLoadDialogParameters(this);
285+
DialogParameters params = new DialogParameters(this);
286286
CardDialog dialog = new CardDialog(parent, params);
287287
dialog.open();
288288
}

EnrichmentMapPlugin/src/main/java/org/baderlab/csplugins/enrichmentmap/view/postanalysis/web/BaderlabDialogPage.java

Lines changed: 15 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import java.net.MalformedURLException;
66
import java.net.URL;
77
import java.util.Comparator;
8-
import java.util.List;
8+
import java.util.Optional;
99
import java.util.concurrent.Callable;
1010
import java.util.function.Consumer;
1111

@@ -17,12 +17,8 @@
1717
import javax.swing.JLabel;
1818
import javax.swing.JOptionPane;
1919
import javax.swing.JPanel;
20-
import javax.swing.JScrollPane;
21-
import javax.swing.JTable;
2220
import javax.swing.LayoutStyle;
23-
import javax.swing.ListSelectionModel;
2421
import javax.swing.SwingWorker;
25-
import javax.swing.table.TableColumnModel;
2622

2723
import org.baderlab.csplugins.enrichmentmap.view.postanalysis.PADialogPage;
2824
import org.baderlab.csplugins.enrichmentmap.view.util.CardDialogCallback;
@@ -39,7 +35,7 @@ public class BaderlabDialogPage implements CardDialogPage {
3935
private CardDialogCallback callback;
4036
private JComboBox<ComboItem<DateDir>> dateCombo;
4137
private JLabel spinnerLabel;
42-
private JTable table;
38+
private FileChooserPanel fileChooserPanel;
4339
private ActionListener dateActionListener;
4440
private boolean openCalled = false;
4541

@@ -61,13 +57,13 @@ public String getPageComboText() {
6157
@Override
6258
public void finish() {
6359
String dateFolder = getDateFolder();
64-
String filePath = getGmtFilePath();
65-
if(dateFolder == null || filePath == null) {
60+
Optional<String> filePath = fileChooserPanel.getSelectedFilePath();
61+
if(dateFolder == null || !filePath.isPresent()) {
6662
return;
6763
}
6864

6965
try {
70-
URL url = BaderlabRequests.buildUrl(dateFolder, filePath);
66+
URL url = BaderlabRequests.buildUrl(dateFolder, filePath.get());
7167
parent.runLoadFromUrlTasks(url, callback.getDialog());
7268

7369
} catch (MalformedURLException e) {
@@ -88,14 +84,19 @@ public JPanel createBodyPanel(CardDialogCallback callback) {
8884
this.callback = callback;
8985
callback.setFinishButtonEnabled(false);
9086

87+
fileChooserPanel = new TreeFileChooserPanel();
88+
fileChooserPanel.getPanel().setBorder(BorderFactory.createEmptyBorder(0, 8, 8, 8));
89+
fileChooserPanel.setSelectionListener(s -> callback.setFinishButtonEnabled(s.isPresent()));
90+
9191
JPanel datePanel = createDatePanel();
92-
JPanel listPanel = createTablePanel();
92+
JPanel listPanel = fileChooserPanel.getPanel();
9393

9494
JPanel panel = new JPanel(new BorderLayout());
9595
panel.add(datePanel, BorderLayout.NORTH);
9696
panel.add(listPanel, BorderLayout.CENTER);
9797
return panel;
9898
}
99+
99100

100101
private JPanel createDatePanel() {
101102
JLabel title = new JLabel("Download gene set files from download.baderlab.org");
@@ -149,53 +150,17 @@ private JPanel createDatePanel() {
149150
return panel;
150151
}
151152

152-
private JPanel createTablePanel() {
153-
table = new JTable();
154-
155-
JScrollPane scrollPane = new JScrollPane(table);
156-
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
157-
scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
158-
table.setFillsViewportHeight(true);
159-
table.setCellSelectionEnabled(false);
160-
table.setRowSelectionAllowed(true);
161-
table.setAutoCreateRowSorter(true);
162-
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
163-
164-
table.getSelectionModel().addListSelectionListener(e -> updateFinishButton());
165-
166-
FileSizeCellRenderer fileSizeRenderer = new FileSizeCellRenderer();
167-
fileSizeRenderer.setHorizontalAlignment(JLabel.RIGHT);
168-
table.setDefaultRenderer(Integer.class, fileSizeRenderer);
169-
170-
updateTable(null);
171-
172-
JPanel panel = new JPanel(new BorderLayout());
173-
panel.add(scrollPane, BorderLayout.CENTER);
174-
panel.setBorder(BorderFactory.createEmptyBorder(0, 8, 8, 8));
175-
return panel;
176-
}
153+
177154

178155
private void updateFinishButton() {
179-
callback.setFinishButtonEnabled(table.getSelectionModel().getMinSelectionIndex() >= 0);
156+
callback.setFinishButtonEnabled(fileChooserPanel.getSelectedFilePath().isPresent());
180157
}
181158

182-
private void updateTable(List<GmtFile> gmtFiles) {
183-
GmtFileTableModel tableModel = new GmtFileTableModel(gmtFiles);
184-
table.setModel(tableModel);
185-
186-
TableColumnModel columnModel = table.getColumnModel();
187-
columnModel.getColumn(1).setMaxWidth(150);
188-
}
189159

190160
private String getDateFolder() {
191161
return dateCombo.getItemAt(dateCombo.getSelectedIndex()).getValue().getFolder();
192162
}
193163

194-
private String getGmtFilePath() {
195-
int row = table.getSelectionModel().getMinSelectionIndex();
196-
String gmtFilePath = (String) table.getModel().getValueAt(row, 0);
197-
return gmtFilePath;
198-
}
199164

200165
private <T> void doRequest(Callable<T> doInBackground, Consumer<T> done) {
201166
SwingWorker<T,Void> worker = new SwingWorker<T, Void>() {
@@ -249,12 +214,12 @@ private void requestDates() {
249214
}
250215

251216
private void requestFiles() {
252-
updateTable(null);
217+
fileChooserPanel.setFiles(null);
253218
String dateFolder = getDateFolder();
254219

255220
doRequest(
256221
() -> BaderlabRequests.requestFiles(dateFolder),
257-
this::updateTable
222+
fileChooserPanel::setFiles
258223
);
259224
}
260225

EnrichmentMapPlugin/src/main/java/org/baderlab/csplugins/enrichmentmap/view/postanalysis/web/BaderlabRequests.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,15 @@
1010
import java.net.MalformedURLException;
1111
import java.net.URL;
1212
import java.net.URLEncoder;
13+
import java.nio.file.Path;
1314
import java.util.List;
1415

1516
import javax.ws.rs.core.UriBuilder;
1617

18+
import org.baderlab.csplugins.enrichmentmap.model.io.ModelSerializer;
19+
1720
import com.google.gson.Gson;
21+
import com.google.gson.GsonBuilder;
1822
import com.google.gson.reflect.TypeToken;
1923

2024
public class BaderlabRequests {
@@ -46,9 +50,13 @@ private static <T> T requestAndParse(URL url, Type type) throws IOException {
4650
throw new RuntimeException("Request error, status: " + code);
4751
}
4852

53+
Gson gson = new GsonBuilder()
54+
.registerTypeHierarchyAdapter(Path.class, new ModelSerializer.PathAdapter())
55+
.create();
56+
4957
try(InputStream in = connection.getInputStream()) {
5058
Reader reader = new BufferedReader(new InputStreamReader(in));
51-
T results = new Gson().fromJson(reader, type);
59+
T results = gson.fromJson(reader, type);
5260
return results;
5361
}
5462
}
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,14 @@
88
import org.baderlab.csplugins.enrichmentmap.view.util.CardDialogPage;
99
import org.baderlab.csplugins.enrichmentmap.view.util.CardDialogParameters;
1010

11-
public class WebLoadDialogParameters implements CardDialogParameters {
11+
public class DialogParameters implements CardDialogParameters {
1212

1313
public static final String TITLE = "Signature Gene Sets";
1414

1515
private final PADialogPage parent;
1616

1717

18-
public WebLoadDialogParameters(PADialogPage parent) {
18+
public DialogParameters(PADialogPage parent) {
1919
this.parent = parent;
2020
}
2121

@@ -34,7 +34,7 @@ public List<CardDialogPage> getPages() {
3434

3535
@Override
3636
public Dimension getPreferredSize() {
37-
return new Dimension(800, 500);
37+
return new Dimension(600, 500);
3838
}
3939

4040
@Override
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package org.baderlab.csplugins.enrichmentmap.view.postanalysis.web;
2+
3+
import java.util.List;
4+
import java.util.Optional;
5+
import java.util.function.Consumer;
6+
7+
import javax.swing.JPanel;
8+
9+
public interface FileChooserPanel {
10+
11+
JPanel getPanel();
12+
13+
void setFiles(List<GmtFile> gmtFiles);
14+
15+
Optional<String> getSelectedFilePath();
16+
17+
void setSelectionListener(Consumer<Optional<String>> listener);
18+
19+
}
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import javax.swing.table.DefaultTableCellRenderer;
44

55
@SuppressWarnings("serial")
6-
public class FileSizeCellRenderer extends DefaultTableCellRenderer {
6+
public class FileSizeRenderer extends DefaultTableCellRenderer {
77

88
@Override
99
protected void setValue(Object value) {
@@ -16,7 +16,7 @@ protected void setValue(Object value) {
1616
}
1717
}
1818

19-
private static String humanReadableByteCount(long bytes, boolean si) {
19+
public static String humanReadableByteCount(long bytes, boolean si) {
2020
int unit = si ? 1000 : 1024;
2121
if (bytes < unit)
2222
return bytes + " B";
@@ -25,4 +25,4 @@ private static String humanReadableByteCount(long bytes, boolean si) {
2525
return String.format("%.1f %sB", bytes / Math.pow(unit, exp), pre);
2626
}
2727

28-
}
28+
}
Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,23 @@
11
package org.baderlab.csplugins.enrichmentmap.view.postanalysis.web;
22

3+
import java.nio.file.Path;
4+
35
public class GmtFile {
46

5-
private final String filePath;
7+
private final Path filePath;
68
private final int size;
79

8-
public GmtFile(String filePath, int size) {
10+
public GmtFile(Path filePath, int size) {
911
this.filePath = filePath;
1012
this.size = size;
1113
}
1214

13-
public String getFilePath() {
15+
public Path getPath() {
1416
return filePath;
1517
}
1618

1719
public int getSize() {
1820
return size;
1921
}
20-
22+
2123
}

EnrichmentMapPlugin/src/main/java/org/baderlab/csplugins/enrichmentmap/view/postanalysis/web/GmtFileTableModel.java

Lines changed: 0 additions & 55 deletions
This file was deleted.

0 commit comments

Comments
 (0)