JAL-1668 added filtering and sorting capabilites
[jalview.git] / src / jalview / jbgui / GPDBFetchPanel.java
1 package jalview.jbgui;
2
3 import jalview.gui.Desktop;
4 import jalview.util.MessageManager;
5 import jalview.ws.dbsources.PDBRestClient.PDBDocField;
6 import jalview.ws.uimodel.PDBSearchResponse.PDBResponseSummary;
7
8 import java.awt.BorderLayout;
9 import java.awt.Dimension;
10 import java.awt.event.ActionEvent;
11 import java.awt.event.ActionListener;
12
13 import javax.swing.JButton;
14 import javax.swing.JComboBox;
15 import javax.swing.JFrame;
16 import javax.swing.JInternalFrame;
17 import javax.swing.JList;
18 import javax.swing.JPanel;
19 import javax.swing.JScrollPane;
20 import javax.swing.JTextField;
21 import javax.swing.ListSelectionModel;
22 import javax.swing.event.DocumentEvent;
23 import javax.swing.event.DocumentListener;
24
25 @SuppressWarnings("serial")
26 public abstract class GPDBFetchPanel extends JPanel
27 {
28   protected String frameTitle = "PDB Sequence Fetcher";
29
30   protected JInternalFrame mainFrame = new JInternalFrame(frameTitle);
31
32   protected JComboBox<PDBDocField> searchTargetOptions = new JComboBox<PDBDocField>();
33
34   protected JButton ok = new JButton();
35
36   protected JButton back = new JButton();
37   
38   protected JButton cancel = new JButton();
39   
40   protected JTextField search = new JTextField(20);
41   
42   protected JList<PDBResponseSummary> jListSearchResult = new JList<PDBResponseSummary>();
43
44   protected JScrollPane searchResultScroller = new JScrollPane(
45           jListSearchResult);
46
47   private JPanel actionPanel = new JPanel();
48
49   private JPanel resultPanel = new JPanel();
50
51   private JPanel inputPanel = new JPanel();
52
53   private BorderLayout mainLayout = new BorderLayout();
54
55   public GPDBFetchPanel()
56   {
57     try
58     {
59       jbInit();
60       mainFrame.invalidate();
61       mainFrame.pack();
62     } catch (Exception e)
63     {
64       e.printStackTrace();
65     }
66   }
67
68   private void jbInit() throws Exception
69   {
70     back.setFont(new java.awt.Font("Verdana", 0, 12));
71     back.setText(MessageManager.getString("action.back"));
72     back.addActionListener(new java.awt.event.ActionListener()
73     {
74       public void actionPerformed(ActionEvent e)
75       {
76         backActionPerformed();
77       }
78     });
79     ok.setFont(new java.awt.Font("Verdana", 0, 12));
80     ok.setText(MessageManager.getString("action.ok"));
81     ok.addActionListener(new java.awt.event.ActionListener()
82     {
83       public void actionPerformed(ActionEvent e)
84       {
85         okActionPerformed();
86       }
87     });
88     cancel.setFont(new java.awt.Font("Verdana", 0, 12));
89     cancel.setText(MessageManager.getString("action.cancel"));
90     cancel.addActionListener(new java.awt.event.ActionListener()
91     {
92       public void actionPerformed(ActionEvent e)
93       {
94         cancelActionPerformed();
95       }
96     });
97     actionPanel.add(back);
98     actionPanel.add(ok);
99     actionPanel.add(cancel);
100
101     jListSearchResult
102             .setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
103     jListSearchResult.setLayoutOrientation(JList.VERTICAL);
104     jListSearchResult.setVisibleRowCount(-1);
105     searchResultScroller.setPreferredSize(new Dimension(500, 300));
106     searchResultScroller
107             .setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
108     resultPanel.add(searchResultScroller);
109
110     searchTargetOptions.setFont(new java.awt.Font("Verdana", 0, 12));
111     searchTargetOptions.addActionListener(new ActionListener()
112     {
113       @Override
114       public void actionPerformed(ActionEvent e)
115       {
116         searchStringAction();
117       }
118     });
119
120     populateSearchOptionComboBox();
121
122     search.setFont(new java.awt.Font("Verdana", 0, 12));
123     search.getDocument().addDocumentListener(new DocumentListener()
124     {
125       @Override
126       public void insertUpdate(DocumentEvent e)
127       {
128         searchStringAction();
129       }
130
131       @Override
132       public void removeUpdate(DocumentEvent e)
133       {
134         searchStringAction();
135       }
136
137       @Override
138       public void changedUpdate(DocumentEvent e)
139       {
140         searchStringAction();
141       }
142     });
143
144     inputPanel.add(searchTargetOptions);
145     inputPanel.add(search);
146
147     this.setLayout(mainLayout);
148     this.add(inputPanel, java.awt.BorderLayout.NORTH);
149     this.add(resultPanel, java.awt.BorderLayout.CENTER);
150     this.add(actionPanel, java.awt.BorderLayout.SOUTH);
151     mainFrame.setVisible(true);
152     mainFrame.setContentPane(this);
153     mainFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
154     Desktop.addInternalFrame(mainFrame, frameTitle, 800, 400);
155   }
156
157   public abstract void searchStringAction();
158
159   public abstract void okActionPerformed();
160
161   public abstract void backActionPerformed();
162
163   public abstract void cancelActionPerformed();
164
165   protected abstract void populateSearchOptionComboBox();
166
167 }