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