1   /*
2    *  Copyright (c) 1998-2005, The University of Sheffield.
3    *
4    *  This file is part of GATE (see http://gate.ac.uk/), and is free
5    *  software, licenced under the GNU Library General Public License,
6    *  Version 2, June 1991 (in the distribution as file licence.html,
7    *  and also available at http://gate.ac.uk/gate/licence.html).
8    *
9    *  Valentin Tablan, 02/Nov/2001
10   *
11   *  $Id: CorpusFillerComponent.java,v 1.8 2005/01/11 13:51:34 ian Exp $
12   */
13  package gate.gui;
14  
15  import java.awt.*;
16  import java.awt.event.ActionEvent;
17  import java.awt.event.ActionListener;
18  import java.io.IOException;
19  import java.util.ArrayList;
20  import java.util.List;
21  
22  import javax.swing.*;
23  
24  import gate.Gate;
25  
26  /**
27   * A simple component that allows the user to select a directory and a list of
28   * permitted extensions for populating a corpus
29   */
30  
31  public class CorpusFillerComponent extends JPanel {
32  
33    /**
34     * Creates a corpus filler component
35     */
36    public CorpusFillerComponent(){
37      initLocalData();
38      initGUIComponents();
39      initListeners();
40    }
41  
42    /**
43     * Inits local variables to default values
44     */
45    protected void initLocalData(){
46      extensions = new ArrayList();
47    }
48  
49  
50    /**
51     * Creates the UI
52     */
53    protected void initGUIComponents(){
54      setLayout(new GridBagLayout());
55      //first row
56      GridBagConstraints constraints = new GridBagConstraints();
57      constraints.gridx = GridBagConstraints.RELATIVE;
58      constraints.gridy = 0;
59      constraints.gridwidth = 2;
60      constraints.anchor = GridBagConstraints.WEST;
61      constraints.fill = GridBagConstraints.NONE;
62      constraints.insets = new Insets(0, 0, 0, 5);
63      add(new JLabel("Directory URL:"), constraints);
64  
65      constraints = new GridBagConstraints();
66      constraints.gridx = GridBagConstraints.RELATIVE;
67      constraints.gridy = 0;
68      constraints.gridwidth = 5;
69      constraints.fill = GridBagConstraints.HORIZONTAL;
70      constraints.insets = new Insets(0, 0, 0, 10);
71      add(urlTextField = new JTextField(40), constraints);
72  
73      constraints = new GridBagConstraints();
74      constraints.gridx = GridBagConstraints.RELATIVE;
75      constraints.gridy = 0;
76      constraints.gridwidth = 1;
77      constraints.anchor = GridBagConstraints.NORTHWEST;
78      add(filerBtn = new JButton(MainFrame.getIcon("loadFile.gif")), constraints);
79  
80      //second row
81      constraints = new GridBagConstraints();
82      constraints.gridx = GridBagConstraints.RELATIVE;
83      constraints.gridy = 1;
84      constraints.gridwidth = 2;
85      constraints.anchor = GridBagConstraints.WEST;
86      constraints.fill = GridBagConstraints.NONE;
87      constraints.insets = new Insets(0, 0, 0, 5);
88      add(new JLabel("Extensions:"), constraints);
89  
90      constraints = new GridBagConstraints();
91      constraints.gridx = GridBagConstraints.RELATIVE;
92      constraints.gridy = 1;
93      constraints.gridwidth = 5;
94      constraints.fill = GridBagConstraints.HORIZONTAL;
95      constraints.insets = new Insets(0, 0, 0, 10);
96      add(extensionsTextField = new JTextField(40), constraints);
97      extensionsTextField.setEditable(false);
98      extensionsTextField.setText(extensions.toString());
99  
100     constraints = new GridBagConstraints();
101     constraints.gridx = GridBagConstraints.RELATIVE;
102     constraints.gridy = 1;
103     constraints.gridwidth = 1;
104     constraints.anchor = GridBagConstraints.NORTHWEST;
105     add(listEditBtn = new JButton(MainFrame.getIcon("editList.gif")), constraints);
106 
107     //third row
108     constraints = new GridBagConstraints();
109     constraints.gridx = GridBagConstraints.RELATIVE;
110     constraints.gridy = 2;
111     constraints.gridwidth = 2;
112     constraints.anchor = GridBagConstraints.WEST;
113     constraints.fill = GridBagConstraints.NONE;
114     constraints.insets = new Insets(0, 0, 0, 5);
115     add(new JLabel("Encoding:"), constraints);
116 
117 
118     constraints = new GridBagConstraints();
119     constraints.gridx = GridBagConstraints.RELATIVE;
120     constraints.gridy = 2;
121     constraints.gridwidth = 4;
122     constraints.fill = GridBagConstraints.HORIZONTAL;
123     add(encodingTextField = new JTextField(15), constraints);
124 
125     //fourth row
126     recurseCheckBox = new JCheckBox("Recurse directories");
127     recurseCheckBox.setSelected(true);
128     recurseCheckBox.setHorizontalTextPosition(SwingConstants.LEFT);
129     constraints = new GridBagConstraints();
130     constraints.gridx = GridBagConstraints.RELATIVE;
131     constraints.gridy = 3;
132     constraints.gridwidth = 3;
133     constraints.anchor = GridBagConstraints.NORTHWEST;
134     add(recurseCheckBox, constraints);
135 
136   }
137 
138   /**
139    * Adds listeners for UI components
140    */
141   protected void initListeners(){
142     filerBtn.addActionListener(new ActionListener() {
143       public void actionPerformed(ActionEvent e) {
144         JFileChooser filer = MainFrame.getFileChooser();
145         filer.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
146         filer.setDialogTitle("Select a directory");
147 
148         filer.resetChoosableFileFilters();
149         filer.setAcceptAllFileFilterUsed(true);
150         filer.setFileFilter(filer.getAcceptAllFileFilter());
151         int res = filer.showOpenDialog(CorpusFillerComponent.this);
152         if(res == JFileChooser.APPROVE_OPTION){
153           try {
154             urlTextField.setText(filer.getSelectedFile().
155                                  toURL().toExternalForm());
156           } catch(IOException ioe){}
157         }
158       }
159     });
160 
161     listEditBtn.addActionListener(new ActionListener() {
162       public void actionPerformed(ActionEvent e) {
163         ListEditorDialog listEditor = new ListEditorDialog(
164           CorpusFillerComponent.this, extensions, String.class.getName());
165         List answer = listEditor.showDialog();
166         if(answer != null){
167           extensions.clear();
168           extensions.addAll(answer);
169           extensionsTextField.setText(extensions.toString());
170         }
171       }
172     });
173   }
174 
175   /**
176    * Sets the values for the URL string. This value is not cached so the set
177    * will actually the text in the text field itself
178    */
179   public void setUrlString(String urlString) {
180     urlTextField.setText(urlString);
181   }
182 
183   /**
184    * Gets the current text in the URL text field.
185    */
186   public String getUrlString() {
187     return urlTextField.getText();
188   }
189 
190   /**
191    * Gets the encoding selected by the user.
192    */
193   public String getEncoding(){
194     return encodingTextField.getText();
195   }
196 
197   /**
198    * Sets the initila value for the encoding field.
199    */
200   public void setEncoding(String enc){
201     encodingTextField.setText(enc);
202   }
203 
204   /**
205    * Sets the current value for the list of permitted extensions.
206    */
207   public void setExtensions(java.util.List extensions) {
208     this.extensions = extensions;
209     extensionsTextField.setText(extensions.toString());
210   }
211 
212 
213   /**
214    * Gets the current list of permitted extensions
215    */
216   public java.util.List getExtensions() {
217     return extensions;
218   }
219 
220   /**
221    * Test code
222    */
223   static public void main(String[] args){
224     try{
225       UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
226       Gate.init();
227     }catch(Exception e){
228       e.printStackTrace();
229     }
230     JFrame frame = new JFrame("Foo");
231     CorpusFillerComponent comp = new CorpusFillerComponent();
232     frame.getContentPane().add(comp);
233     frame.pack();
234     frame.setResizable(false);
235     frame.setVisible(true);
236   }
237 
238   /**
239    * Should the directory parsed recursively?
240    */
241   public void setRecurseDirectories(boolean recurseDirectories) {
242     recurseCheckBox.setSelected(recurseDirectories);
243   }
244 
245   /**
246    * Should the directory parsed recursively?
247    */
248   public boolean isRecurseDirectories() {
249     return recurseCheckBox.isSelected();
250   }
251 
252   /**
253    * The text field for the directory URL
254    */
255   JTextField urlTextField;
256 
257   /**
258    * The buttons that opens the file chooser
259    */
260   JButton filerBtn;
261 
262   /**
263    * The text field for the permitted extensions
264    */
265   JTextField extensionsTextField;
266 
267   /**
268    * The buton that opens the list editor for the extensions
269    */
270   JButton listEditBtn;
271 
272   /**
273    * The checkbox for recurse directories
274    */
275   JCheckBox recurseCheckBox;
276 
277   /**
278    * The textField for the encoding
279    */
280   JTextField encodingTextField;
281   /**
282    * The list of permitted extensions.
283    */
284   private java.util.List extensions;
285 }