CorpusFillerComponent.java
001 /*
002  *  Copyright (c) 1995-2012, The University of Sheffield. See the file
003  *  COPYRIGHT.txt in the software or at http://gate.ac.uk/gate/COPYRIGHT.txt
004  *
005  *  This file is part of GATE (see http://gate.ac.uk/), and is free
006  *  software, licenced under the GNU Library General Public License,
007  *  Version 2, June 1991 (in the distribution as file licence.html,
008  *  and also available at http://gate.ac.uk/gate/licence.html).
009  *
010  *  Valentin Tablan, 02/Nov/2001
011  *
012  *  $Id: CorpusFillerComponent.java 17606 2014-03-09 12:12:49Z markagreenwood $
013  */
014 package gate.gui;
015 
016 import gate.Gate;
017 
018 import java.awt.GridBagConstraints;
019 import java.awt.GridBagLayout;
020 import java.awt.Insets;
021 import java.awt.event.ActionEvent;
022 import java.awt.event.ActionListener;
023 import java.io.IOException;
024 import java.util.ArrayList;
025 import java.util.List;
026 
027 import javax.swing.JButton;
028 import javax.swing.JCheckBox;
029 import javax.swing.JFileChooser;
030 import javax.swing.JFrame;
031 import javax.swing.JLabel;
032 import javax.swing.JPanel;
033 import javax.swing.JTextField;
034 import javax.swing.SwingConstants;
035 import javax.swing.UIManager;
036 
037 /**
038  * A simple component that allows the user to select a directory and a list of
039  * permitted extensions for populating a corpus
040  */
041 
042 @SuppressWarnings("serial")
043 public class CorpusFillerComponent extends JPanel {
044 
045   /**
046    * Creates a corpus filler component
047    */
048   public CorpusFillerComponent(){
049     initLocalData();
050     initGUIComponents();
051     initListeners();
052   }
053 
054   /**
055    * Inits local variables to default values
056    */
057   protected void initLocalData(){
058     extensions = new ArrayList<String>();
059   }
060 
061 
062   /**
063    * Creates the UI
064    */
065   protected void initGUIComponents(){
066     setLayout(new GridBagLayout());
067     //first row
068     GridBagConstraints constraints = new GridBagConstraints();
069     constraints.gridx = GridBagConstraints.RELATIVE;
070     constraints.gridy = 0;
071     constraints.gridwidth = 2;
072     constraints.anchor = GridBagConstraints.WEST;
073     constraints.fill = GridBagConstraints.NONE;
074     constraints.insets = new Insets(0005);
075     add(new JLabel("Directory URL:"), constraints);
076 
077     constraints = new GridBagConstraints();
078     constraints.gridx = GridBagConstraints.RELATIVE;
079     constraints.gridy = 0;
080     constraints.gridwidth = 5;
081     constraints.fill = GridBagConstraints.HORIZONTAL;
082     constraints.insets = new Insets(00010);
083     add(urlTextField = new JTextField(40), constraints);
084 
085     constraints = new GridBagConstraints();
086     constraints.gridx = GridBagConstraints.RELATIVE;
087     constraints.gridy = 0;
088     constraints.gridwidth = 1;
089     constraints.anchor = GridBagConstraints.NORTHWEST;
090     add(filerBtn = new JButton(MainFrame.getIcon("open-file")), constraints);
091 
092     //second row
093     constraints = new GridBagConstraints();
094     constraints.gridx = GridBagConstraints.RELATIVE;
095     constraints.gridy = 1;
096     constraints.gridwidth = 2;
097     constraints.anchor = GridBagConstraints.WEST;
098     constraints.fill = GridBagConstraints.NONE;
099     constraints.insets = new Insets(0005);
100     add(new JLabel("Extensions:"), constraints);
101 
102     constraints = new GridBagConstraints();
103     constraints.gridx = GridBagConstraints.RELATIVE;
104     constraints.gridy = 1;
105     constraints.gridwidth = 5;
106     constraints.fill = GridBagConstraints.HORIZONTAL;
107     constraints.insets = new Insets(00010);
108     add(extensionsTextField = new JTextField(40), constraints);
109     extensionsTextField.setEditable(false);
110     extensionsTextField.setText(extensions.toString());
111 
112     constraints = new GridBagConstraints();
113     constraints.gridx = GridBagConstraints.RELATIVE;
114     constraints.gridy = 1;
115     constraints.gridwidth = 1;
116     constraints.anchor = GridBagConstraints.NORTHWEST;
117     add(listEditBtn = new JButton(MainFrame.getIcon("edit-list")), constraints);
118 
119     //third row
120     constraints = new GridBagConstraints();
121     constraints.gridx = GridBagConstraints.RELATIVE;
122     constraints.gridy = 2;
123     constraints.gridwidth = 2;
124     constraints.anchor = GridBagConstraints.WEST;
125     constraints.fill = GridBagConstraints.NONE;
126     constraints.insets = new Insets(0005);
127     add(new JLabel("Encoding:"), constraints);
128 
129 
130     constraints = new GridBagConstraints();
131     constraints.gridx = GridBagConstraints.RELATIVE;
132     constraints.gridy = 2;
133     constraints.gridwidth = 4;
134     constraints.fill = GridBagConstraints.HORIZONTAL;
135     add(encodingTextField = new JTextField(15), constraints);
136 
137     //fourth row
138     constraints = new GridBagConstraints();
139     constraints.gridx = GridBagConstraints.RELATIVE;
140     constraints.gridy = 3;
141     constraints.gridwidth = 2;
142     constraints.anchor = GridBagConstraints.WEST;
143     constraints.fill = GridBagConstraints.NONE;
144     constraints.insets = new Insets(0005);
145     add(new JLabel("Mime Type:"), constraints);
146 
147 
148     constraints = new GridBagConstraints();
149     constraints.gridx = GridBagConstraints.RELATIVE;
150     constraints.gridy = 3;
151     constraints.gridwidth = 4;
152     constraints.fill = GridBagConstraints.HORIZONTAL;
153     add(mimeTypeTextField = new JTextField(15), constraints);
154 
155     
156     //fifth row
157     recurseCheckBox = new JCheckBox("Recurse directories");
158     recurseCheckBox.setSelected(true);
159     recurseCheckBox.setHorizontalTextPosition(SwingConstants.LEFT);
160     constraints = new GridBagConstraints();
161     constraints.gridx = GridBagConstraints.RELATIVE;
162     constraints.gridy = 4;
163     constraints.gridwidth = 3;
164     constraints.anchor = GridBagConstraints.NORTHWEST;
165     add(recurseCheckBox, constraints);
166 
167   }
168 
169   /**
170    * Adds listeners for UI components
171    */
172   protected void initListeners(){
173     filerBtn.addActionListener(new ActionListener() {
174       @Override
175       public void actionPerformed(ActionEvent e) {
176         JFileChooser filer = MainFrame.getFileChooser();
177         filer.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
178         filer.setDialogTitle("Select a directory");
179 
180         filer.resetChoosableFileFilters();
181         filer.setAcceptAllFileFilterUsed(true);
182         filer.setFileFilter(filer.getAcceptAllFileFilter());
183         int res = filer.showOpenDialog(CorpusFillerComponent.this);
184         if(res == JFileChooser.APPROVE_OPTION){
185           try {
186             urlTextField.setText(filer.getSelectedFile().
187                                  toURI().toURL().toExternalForm());
188           catch(IOException ioe){}
189         }
190       }
191     });
192 
193     listEditBtn.addActionListener(new ActionListener() {
194       @Override
195       public void actionPerformed(ActionEvent e) {
196         ListEditorDialog listEditor = new ListEditorDialog(
197           CorpusFillerComponent.this, extensions, String.class.getName());
198         @SuppressWarnings("unchecked")
199         List<String> answer = listEditor.showDialog();
200         if(answer != null){
201           extensions.clear();
202           extensions.addAll(answer);
203           extensionsTextField.setText(extensions.toString());
204         }
205       }
206     });
207   }
208 
209   /**
210    * Sets the values for the URL string. This value is not cached so the set
211    * will actually the text in the text field itself
212    */
213   public void setUrlString(String urlString) {
214     urlTextField.setText(urlString);
215   }
216 
217   /**
218    * Gets the current text in the URL text field.
219    */
220   public String getUrlString() {
221     return urlTextField.getText();
222   }
223 
224   /**
225    * Gets the encoding selected by the user.
226    */
227   public String getEncoding(){
228     return encodingTextField.getText();
229   }
230 
231   /**
232    * Sets the initila value for the encoding field.
233    */
234   public void setEncoding(String enc){
235     encodingTextField.setText(enc);
236   }
237 
238   /**
239    * Gets the mime type selected by the user.
240    */
241   public String getMimeType(){
242     return mimeTypeTextField.getText();
243   }
244 
245   /**
246    * Sets the initial value for the mime type field.
247    */
248   public void setMimeType(String mimeType){
249     mimeTypeTextField.setText(mimeType);
250   }
251   /**
252    * Sets the current value for the list of permitted extensions.
253    */
254   public void setExtensions(List<String> extensions) {
255     this.extensions = extensions;
256     extensionsTextField.setText(extensions.toString());
257   }
258 
259 
260   /**
261    * Gets the current list of permitted extensions
262    */
263   public List<String> getExtensions() {
264     return extensions;
265   }
266 
267   /**
268    * Test code
269    */
270   static public void main(String[] args){
271     try{
272       UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
273       Gate.init();
274     }catch(Exception e){
275       e.printStackTrace();
276     }
277     JFrame frame = new JFrame("Foo");
278     CorpusFillerComponent comp = new CorpusFillerComponent();
279     frame.getContentPane().add(comp);
280     frame.pack();
281     frame.setResizable(false);
282     frame.setVisible(true);
283   }
284 
285   /**
286    * Should the directory parsed recursively?
287    */
288   public void setRecurseDirectories(boolean recurseDirectories) {
289     recurseCheckBox.setSelected(recurseDirectories);
290   }
291 
292   /**
293    * Should the directory parsed recursively?
294    */
295   public boolean isRecurseDirectories() {
296     return recurseCheckBox.isSelected();
297   }
298 
299   /**
300    * The text field for the directory URL
301    */
302   JTextField urlTextField;
303 
304   /**
305    * The buttons that opens the file chooser
306    */
307   JButton filerBtn;
308 
309   /**
310    * The text field for the permitted extensions
311    */
312   JTextField extensionsTextField;
313 
314   /**
315    * The buton that opens the list editor for the extensions
316    */
317   JButton listEditBtn;
318 
319   /**
320    * The checkbox for recurse directories
321    */
322   JCheckBox recurseCheckBox;
323 
324   /**
325    * The textField for the encoding
326    */
327   JTextField encodingTextField;
328   
329   /**
330    * The textField for the encoding
331    */
332   JTextField mimeTypeTextField;
333   
334   /**
335    * The list of permitted extensions.
336    */
337   private List<String> extensions;
338 }