JAL-1667 PDBe Search Interface implementation
[jalview.git] / src / jalview / jbgui / GEBIFetchPanel.java
1 package jalview.jbgui;
2
3 import jalview.gui.Desktop;
4 import jalview.util.MessageManager;
5 import jalview.ws.uimodel.PDBSearchOptionListModel;
6 import jalview.ws.uimodel.PDBSummaryListModel;
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 GEBIFetchPanel extends JPanel
27 {
28   protected String frameTitle = "PDB Sequence Fetcher";
29
30   protected JInternalFrame mainFrame = new JInternalFrame(frameTitle);
31
32   protected JComboBox<PDBSearchOptionListModel> searchFeild = new JComboBox<PDBSearchOptionListModel>();
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<PDBSummaryListModel> jListSearchResult = new JList<PDBSummaryListModel>();
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
56   public GEBIFetchPanel()
57   {
58     try
59     {
60       jbInit();
61       mainFrame.invalidate();
62       mainFrame.pack();
63     } catch (Exception e)
64     {
65       e.printStackTrace();
66     }
67   }
68
69   private void jbInit() throws Exception
70   {
71     back.setFont(new java.awt.Font("Verdana", 0, 12));
72     back.setText(MessageManager.getString("action.back"));
73     back.addActionListener(new java.awt.event.ActionListener()
74     {
75       public void actionPerformed(ActionEvent e)
76       {
77         backActionPerformed();
78       }
79     });
80     ok.setFont(new java.awt.Font("Verdana", 0, 12));
81     ok.setText(MessageManager.getString("action.ok"));
82     ok.addActionListener(new java.awt.event.ActionListener()
83     {
84       public void actionPerformed(ActionEvent e)
85       {
86         okActionPerformed();
87       }
88     });
89     cancel.setFont(new java.awt.Font("Verdana", 0, 12));
90     cancel.setText(MessageManager.getString("action.cancel"));
91     cancel.addActionListener(new java.awt.event.ActionListener()
92     {
93       public void actionPerformed(ActionEvent e)
94       {
95         cancelActionPerformed();
96       }
97     });
98     actionPanel.add(back);
99     actionPanel.add(ok);
100     actionPanel.add(cancel);
101
102     jListSearchResult
103             .setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
104     jListSearchResult.setLayoutOrientation(JList.VERTICAL);
105     jListSearchResult.setVisibleRowCount(-1);
106     searchResultScroller.setPreferredSize(new Dimension(500, 300));
107     searchResultScroller
108             .setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
109     resultPanel.add(searchResultScroller);
110
111     searchFeild.setFont(new java.awt.Font("Verdana", 0, 12));
112     searchFeild.addActionListener(new ActionListener()
113     {
114       @Override
115       public void actionPerformed(ActionEvent e)
116       {
117         searchStringAction();
118       }
119     });
120
121     PDBSearchOptionListModel.populateCombo(searchFeild);
122
123     search.setFont(new java.awt.Font("Verdana", 0, 12));
124     search.getDocument().addDocumentListener(new DocumentListener()
125     {
126       @Override
127       public void insertUpdate(DocumentEvent e)
128       {
129         searchStringAction();
130       }
131
132       @Override
133       public void removeUpdate(DocumentEvent e)
134       {
135         searchStringAction();
136       }
137
138       @Override
139       public void changedUpdate(DocumentEvent e)
140       {
141         searchStringAction();
142       }
143     });
144
145     inputPanel.add(searchFeild);
146     inputPanel.add(search);
147
148
149     this.setLayout(mainLayout);
150     this.add(inputPanel, java.awt.BorderLayout.NORTH);
151     this.add(resultPanel, java.awt.BorderLayout.CENTER);
152     this.add(actionPanel, java.awt.BorderLayout.SOUTH);
153     mainFrame.setVisible(true);
154     mainFrame.setContentPane(this);
155     mainFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
156     Desktop.addInternalFrame(mainFrame, frameTitle, 800, 400);
157   }
158
159   public abstract void searchStringAction();
160
161   public abstract void okActionPerformed();
162
163   public abstract void backActionPerformed();
164
165   public abstract void cancelActionPerformed();
166
167 }