JAL-1667 PDBe Search Interface implementation
[jalview.git] / src / jalview / jbgui / GEBIFetchPanel.java
diff --git a/src/jalview/jbgui/GEBIFetchPanel.java b/src/jalview/jbgui/GEBIFetchPanel.java
new file mode 100644 (file)
index 0000000..74091af
--- /dev/null
@@ -0,0 +1,167 @@
+package jalview.jbgui;
+
+import jalview.gui.Desktop;
+import jalview.util.MessageManager;
+import jalview.ws.uimodel.PDBSearchOptionListModel;
+import jalview.ws.uimodel.PDBSummaryListModel;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JFrame;
+import javax.swing.JInternalFrame;
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTextField;
+import javax.swing.ListSelectionModel;
+import javax.swing.event.DocumentEvent;
+import javax.swing.event.DocumentListener;
+
+@SuppressWarnings("serial")
+public abstract class GEBIFetchPanel extends JPanel
+{
+  protected String frameTitle = "PDB Sequence Fetcher";
+
+  protected JInternalFrame mainFrame = new JInternalFrame(frameTitle);
+
+  protected JComboBox<PDBSearchOptionListModel> searchFeild = new JComboBox<PDBSearchOptionListModel>();
+
+  protected JButton ok = new JButton();
+
+  protected JButton back = new JButton();
+  
+  protected JButton cancel = new JButton();
+  
+  protected JTextField search = new JTextField(20);
+  
+  protected JList<PDBSummaryListModel> jListSearchResult = new JList<PDBSummaryListModel>();
+
+  protected JScrollPane searchResultScroller = new JScrollPane(
+          jListSearchResult);
+
+  private JPanel actionPanel = new JPanel();
+
+  private JPanel resultPanel = new JPanel();
+
+  private JPanel inputPanel = new JPanel();
+
+  private BorderLayout mainLayout = new BorderLayout();
+
+
+  public GEBIFetchPanel()
+  {
+    try
+    {
+      jbInit();
+      mainFrame.invalidate();
+      mainFrame.pack();
+    } catch (Exception e)
+    {
+      e.printStackTrace();
+    }
+  }
+
+  private void jbInit() throws Exception
+  {
+    back.setFont(new java.awt.Font("Verdana", 0, 12));
+    back.setText(MessageManager.getString("action.back"));
+    back.addActionListener(new java.awt.event.ActionListener()
+    {
+      public void actionPerformed(ActionEvent e)
+      {
+        backActionPerformed();
+      }
+    });
+    ok.setFont(new java.awt.Font("Verdana", 0, 12));
+    ok.setText(MessageManager.getString("action.ok"));
+    ok.addActionListener(new java.awt.event.ActionListener()
+    {
+      public void actionPerformed(ActionEvent e)
+      {
+        okActionPerformed();
+      }
+    });
+    cancel.setFont(new java.awt.Font("Verdana", 0, 12));
+    cancel.setText(MessageManager.getString("action.cancel"));
+    cancel.addActionListener(new java.awt.event.ActionListener()
+    {
+      public void actionPerformed(ActionEvent e)
+      {
+        cancelActionPerformed();
+      }
+    });
+    actionPanel.add(back);
+    actionPanel.add(ok);
+    actionPanel.add(cancel);
+
+    jListSearchResult
+            .setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
+    jListSearchResult.setLayoutOrientation(JList.VERTICAL);
+    jListSearchResult.setVisibleRowCount(-1);
+    searchResultScroller.setPreferredSize(new Dimension(500, 300));
+    searchResultScroller
+            .setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
+    resultPanel.add(searchResultScroller);
+
+    searchFeild.setFont(new java.awt.Font("Verdana", 0, 12));
+    searchFeild.addActionListener(new ActionListener()
+    {
+      @Override
+      public void actionPerformed(ActionEvent e)
+      {
+        searchStringAction();
+      }
+    });
+
+    PDBSearchOptionListModel.populateCombo(searchFeild);
+
+    search.setFont(new java.awt.Font("Verdana", 0, 12));
+    search.getDocument().addDocumentListener(new DocumentListener()
+    {
+      @Override
+      public void insertUpdate(DocumentEvent e)
+      {
+        searchStringAction();
+      }
+
+      @Override
+      public void removeUpdate(DocumentEvent e)
+      {
+        searchStringAction();
+      }
+
+      @Override
+      public void changedUpdate(DocumentEvent e)
+      {
+        searchStringAction();
+      }
+    });
+
+    inputPanel.add(searchFeild);
+    inputPanel.add(search);
+
+
+    this.setLayout(mainLayout);
+    this.add(inputPanel, java.awt.BorderLayout.NORTH);
+    this.add(resultPanel, java.awt.BorderLayout.CENTER);
+    this.add(actionPanel, java.awt.BorderLayout.SOUTH);
+    mainFrame.setVisible(true);
+    mainFrame.setContentPane(this);
+    mainFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
+    Desktop.addInternalFrame(mainFrame, frameTitle, 800, 400);
+  }
+
+  public abstract void searchStringAction();
+
+  public abstract void okActionPerformed();
+
+  public abstract void backActionPerformed();
+
+  public abstract void cancelActionPerformed();
+
+}