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(0, 0, 0, 5);
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(0, 0, 0, 10);
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(0, 0, 0, 5);
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(0, 0, 0, 10);
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(0, 0, 0, 5);
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(0, 0, 0, 5);
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 }
|