Skip to content

Commit

Permalink
make sed extraction asynchronous and safer
Browse files Browse the repository at this point in the history
  • Loading branch information
olaurino committed Dec 20, 2016
1 parent 69cf485 commit bad97bc
Show file tree
Hide file tree
Showing 3 changed files with 54 additions and 28 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,12 @@
package cfa.vo.iris.visualizer.metadata;

import cfa.vo.iris.gui.NarrowOptionPane;

import java.util.concurrent.ExecutionException;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.*;

import org.apache.commons.collections.CollectionUtils;

Expand Down Expand Up @@ -87,41 +86,32 @@ public void addRowToSelection(int starTableIndex, int irow) {
* SedManager through the Iris Workspace.
*
*/
private void extractSelectionToSed() {
private ExtSed extractSelectionToSed() throws Exception {

// Do nothing if no SED is selected
if (CollectionUtils.isEmpty(dataModel.getSelectedSeds())) {
JOptionPane.showMessageDialog(this, "No SEDs in browser. Please load an SED.",
null, JOptionPane.WARNING_MESSAGE);
return;
throw new Exception("No SEDs in browser. Please load an SED.");
}

// Cannot extract from segment tab
IrisStarJTable jtable = getSelectedIrisJTable();
if (jtable == null) {
JOptionPane.showMessageDialog(this, "Select either Data or Point Metadata tab.",
null, JOptionPane.WARNING_MESSAGE);
return;
throw new Exception("Select either Data or Point Metadata tab.");
}

// Do nothing if there are no rows selected
RowSelection selectedRows = jtable.getRowSelection();
if (selectedRows == null || selectedRows.originalRows.length == 0) {
JOptionPane.showMessageDialog(this, "No rows selected to extract. Please select rows.",
null, JOptionPane.WARNING_MESSAGE);
return;
throw new Exception("No rows selected to extract. Please select rows.");
}

try {

logger.info(String.format("Extracting %s points from Sed.", selectedRows.originalRows.length));
ExtSed newSed = preferences.createNewWorkspaceSed(selectedRows);
JOptionPane.showMessageDialog(this, "Added new SED (" + newSed.getId() + ") to workspace.");
return preferences.createNewWorkspaceSed(selectedRows);

} catch (SedInconsistentException | SedNoDataException ex) {
String msg = "Error extracting SED: " + ex.getMessage();
JOptionPane.showMessageDialog(this, msg, null, JOptionPane.ERROR_MESSAGE);
logger.log(Level.SEVERE, msg, ex);
throw new Exception(msg);
}
}

Expand Down Expand Up @@ -585,11 +575,43 @@ private void clearAllButtonActionPerformed(java.awt.event.ActionEvent evt) {//GE
}//GEN-LAST:event_clearAllButtonActionPerformed

private void extractToSedMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_extractToSedMenuItemActionPerformed
extractSelectionToSed();
extractButtonActionPerformed(evt);
}//GEN-LAST:event_extractToSedMenuItemActionPerformed

private void extractButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_extractButtonActionPerformed
extractSelectionToSed();
SwingWorker worker = new SwingWorker<ExtSed, Void>() {

@Override
protected ExtSed doInBackground() throws Exception {
return extractSelectionToSed();
}

@Override
protected void done() {
try {
ExtSed sed = get();
preferences.addSed(sed);
JOptionPane.showMessageDialog(MetadataBrowserMainView.this, "Adding new SED (" + sed.getId() + ") to workspace.");
} catch (InterruptedException ex) {
// noop
} catch (ExecutionException ex) {
Logger.getLogger(MetadataBrowserMainView.class.getName()).log(Level.SEVERE, null, ex);
Throwable cause = ex.getCause();
NarrowOptionPane.showMessageDialog(
MetadataBrowserMainView.this,
cause.getMessage(),
cause.getClass().getSimpleName(),
NarrowOptionPane.ERROR_MESSAGE
);
logger.log(Level.SEVERE, "Error Extracting SED", ex);
} finally {
extractButton.setEnabled(true);
}
}
};

extractButton.setEnabled(false);
worker.execute();
}//GEN-LAST:event_extractButtonActionPerformed

private void selectPointsButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_selectPointsButtonActionPerformed
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ public MouseListenerManager getMouseListenerManager() {
*/
public ExtSed createNewWorkspaceSed(RowSelection selection) throws SedInconsistentException, SedNoDataException {

final ExtSed sed = (ExtSed) ws.getSedManager().newSed("FilterSed");
final ExtSed sed = new ExtSed("FilterSed", false);

// Extract selected rows to new Segments
final SegmentExtractor extractor =
Expand Down Expand Up @@ -250,4 +250,8 @@ public PlotPreferences getPlotPreferences(List<ExtSed> newSeds) {
return prefs;
}
}

public void addSed(ExtSed sed) {
ws.getSedManager().add(sed);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -376,7 +376,7 @@ public Trigger process(Window warning) throws Exception {
// Check warning message
assertEquals("No SEDs in browser. Please load an SED.",
warning.getTextBox("OptionPane.label").getText());
return Trigger.DO_NOTHING;
return warning.getButton("OK").triggerClick();
}
}).run();

Expand Down Expand Up @@ -414,7 +414,7 @@ public Trigger process(Window warning) throws Exception {
// Check warning message
assertEquals(warning.getTextBox("OptionPane.label").getText(),
"No rows selected to extract. Please select rows.");
return Trigger.DO_NOTHING;
return warning.getButton("OK").triggerClick();
}
}).run();

Expand All @@ -427,8 +427,8 @@ public Trigger process(Window warning) throws Exception {
public Trigger process(Window warning) throws Exception {
// Check warning message
assertTrue(StringUtils.contains(warning.getTextBox("OptionPane.label").getText(),
"Added new SED"));
return Trigger.DO_NOTHING;
"Adding new SED"));
return warning.getButton("OK").triggerClick();
}
}).run();

Expand Down Expand Up @@ -470,8 +470,8 @@ public void run() {
public Trigger process(Window warning) throws Exception {
// Check warning message
assertTrue(StringUtils.contains(warning.getTextBox("OptionPane.label").getText(),
"Added new SED"));
return Trigger.DO_NOTHING;
"Adding new SED"));
return warning.getButton("OK").triggerClick();
}
}).run();

Expand Down

0 comments on commit bad97bc

Please sign in to comment.