JAL-3032 part2 local file reading by JFileChooser
[jalview.git] / src / jalview / io / JalviewFileChooser.java
index c49e34f..ae6c9eb 100755 (executable)
@@ -32,6 +32,8 @@ import java.awt.EventQueue;
 import java.awt.HeadlessException;
 import java.awt.event.MouseAdapter;
 import java.awt.event.MouseEvent;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
 import java.io.File;
 import java.util.ArrayList;
 import java.util.List;
@@ -56,6 +58,7 @@ import javax.swing.plaf.basic.BasicFileChooserUI;
  *
  */
 public class JalviewFileChooser extends JFileChooser
+        implements PropertyChangeListener
 {
   /**
    * Factory method to return a file chooser that offers readable alignment file
@@ -68,8 +71,8 @@ public class JalviewFileChooser extends JFileChooser
   public static JalviewFileChooser forRead(String directory,
           String selected)
   {
-    List<String> extensions = new ArrayList<String>();
-    List<String> descs = new ArrayList<String>();
+    List<String> extensions = new ArrayList<>();
+    List<String> descs = new ArrayList<>();
     for (FileFormatI format : FileFormats.getInstance().getFormats())
     {
       if (format.isReadable())
@@ -96,8 +99,8 @@ public class JalviewFileChooser extends JFileChooser
   {
     // TODO in Java 8, forRead and forWrite can be a single method
     // with a lambda expression parameter for isReadable/isWritable
-    List<String> extensions = new ArrayList<String>();
-    List<String> descs = new ArrayList<String>();
+    List<String> extensions = new ArrayList<>();
+    List<String> descs = new ArrayList<>();
     for (FileFormatI format : FileFormats.getInstance().getFormats())
     {
       if (format.isWritable())
@@ -142,7 +145,7 @@ public class JalviewFileChooser extends JFileChooser
     super(safePath(dir));
     if (extensions.length == descs.length)
     {
-      List<String[]> formats = new ArrayList<String[]>();
+      List<String[]> formats = new ArrayList<>();
       for (int i = 0; i < extensions.length; i++)
       {
         formats.add(new String[] { extensions[i], descs[i] });
@@ -156,6 +159,29 @@ public class JalviewFileChooser extends JFileChooser
     }
   }
 
+  private Runnable theCallback;
+
+  public void setCallback(Runnable callback)
+  {
+    this.theCallback = callback;
+  }
+
+  public Runnable getCallback()
+  {
+    return theCallback;
+  }
+
+  @Override
+  public void propertyChange(PropertyChangeEvent evt)
+  {
+    switch (evt.getPropertyName())
+    {
+    case "SelectedFile": 
+      theCallback.run();
+      break;
+    }
+  }
+
   private static File safePath(String dir)
   {
     if (dir == null)
@@ -287,6 +313,7 @@ public class JalviewFileChooser extends JFileChooser
 
     int ret = showDialog(parent, MessageManager.getString("action.save"));
 
+
     if (getFileFilter() instanceof JalviewFileFilter)
     {
       JalviewFileFilter jvf = (JalviewFileFilter) getFileFilter();
@@ -408,4 +435,5 @@ public class JalviewFileChooser extends JFileChooser
     }
 
   }
+
 }