SingleConcatenatedFileInputDialog.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  *  Niraj Aswani, 14/Feb/2008
011  *
012  *  $Id: SingleConcatenatedFileInputDialog.java $
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 
025 import javax.swing.JButton;
026 import javax.swing.JCheckBox;
027 import javax.swing.JFileChooser;
028 import javax.swing.JFrame;
029 import javax.swing.JLabel;
030 import javax.swing.JPanel;
031 import javax.swing.JTextField;
032 import javax.swing.UIManager;
033 
034 /**
035  * A simple component that allows the user to select a trec web file and
036  * encoding
037  */
038 @SuppressWarnings("serial")
039 public class SingleConcatenatedFileInputDialog extends JPanel {
040 
041   public SingleConcatenatedFileInputDialog() {
042     initGUIComponents();
043     initListeners();
044   }
045 
046   /**
047    * Creates the UI
048    */
049   protected void initGUIComponents() {
050     setLayout(new GridBagLayout());
051     // first row
052     GridBagConstraints constraints = new GridBagConstraints();
053     constraints.gridx = GridBagConstraints.RELATIVE;
054     constraints.gridy = 0;
055     constraints.gridwidth = 2;
056     constraints.anchor = GridBagConstraints.WEST;
057     constraints.fill = GridBagConstraints.NONE;
058     constraints.insets = new Insets(0005);
059     add(new JLabel("File URL:"), constraints);
060 
061     constraints = new GridBagConstraints();
062     constraints.gridx = GridBagConstraints.RELATIVE;
063     constraints.gridy = 0;
064     constraints.gridwidth = 5;
065     constraints.fill = GridBagConstraints.HORIZONTAL;
066     constraints.insets = new Insets(00010);
067     add(urlTextField = new JTextField(40), constraints);
068 
069     constraints = new GridBagConstraints();
070     constraints.gridx = GridBagConstraints.RELATIVE;
071     constraints.gridy = 0;
072     constraints.gridwidth = 1;
073     constraints.anchor = GridBagConstraints.NORTHWEST;
074     add(filerBtn = new JButton(MainFrame.getIcon("open-file")), constraints);
075 
076     // second row
077     constraints = new GridBagConstraints();
078     constraints.gridx = GridBagConstraints.RELATIVE;
079     constraints.gridy = 1;
080     constraints.gridwidth = 2;
081     constraints.anchor = GridBagConstraints.WEST;
082     constraints.fill = GridBagConstraints.NONE;
083     constraints.insets = new Insets(0005);
084     add(new JLabel("Encoding:"), constraints);
085 
086     constraints = new GridBagConstraints();
087     constraints.gridx = GridBagConstraints.RELATIVE;
088     constraints.gridy = 1;
089     constraints.gridwidth = 4;
090     constraints.fill = GridBagConstraints.HORIZONTAL;
091     add(encodingTextField = new JTextField(40), constraints);
092 
093     // third row
094     constraints = new GridBagConstraints();
095     constraints.gridx = GridBagConstraints.RELATIVE;
096     constraints.gridy = 2;
097     constraints.gridwidth = 2;
098     constraints.anchor = GridBagConstraints.WEST;
099     constraints.fill = GridBagConstraints.NONE;
100     constraints.insets = new Insets(0005);
101     add(new JLabel("Root Element:"), constraints);
102 
103     constraints = new GridBagConstraints();
104     constraints.gridx = GridBagConstraints.RELATIVE;
105     constraints.gridy = 2;
106     constraints.gridwidth = 4;
107     constraints.fill = GridBagConstraints.HORIZONTAL;
108     add(documentRootElementTextField = new JTextField("DOC"40), constraints);
109 
110     // fifth row
111     constraints = new GridBagConstraints();
112     constraints.gridx = GridBagConstraints.RELATIVE;
113     constraints.gridy = 3;
114     constraints.gridwidth = 2;
115     constraints.anchor = GridBagConstraints.WEST;
116     constraints.fill = GridBagConstraints.NONE;
117     constraints.insets = new Insets(0005);
118     add(new JLabel("Include Root Element:"), constraints);
119 
120     constraints = new GridBagConstraints();
121     constraints.gridx = GridBagConstraints.RELATIVE;
122     constraints.gridy = 3;
123     constraints.gridwidth = 4;
124     constraints.fill = GridBagConstraints.HORIZONTAL;
125     add(chkIncludeRoot = new JCheckBox(), constraints);
126     chkIncludeRoot.setSelected(true);
127     
128     // fourth row
129     constraints = new GridBagConstraints();
130     constraints.gridx = GridBagConstraints.RELATIVE;
131     constraints.gridy = 4;
132     constraints.gridwidth = 2;
133     constraints.anchor = GridBagConstraints.WEST;
134     constraints.fill = GridBagConstraints.NONE;
135     constraints.insets = new Insets(0005);
136     add(new JLabel("Document Mime Type:"), constraints);
137 
138     constraints = new GridBagConstraints();
139     constraints.gridx = GridBagConstraints.RELATIVE;
140     constraints.gridy = 4;
141     constraints.gridwidth = 4;
142     constraints.fill = GridBagConstraints.HORIZONTAL;
143     add(documentMimeTypeTextField = new JTextField("text/html"40), constraints);
144     
145     // fifth row
146     constraints = new GridBagConstraints();
147     constraints.gridx = GridBagConstraints.RELATIVE;
148     constraints.gridy = 5;
149     constraints.gridwidth = 2;
150     constraints.anchor = GridBagConstraints.WEST;
151     constraints.fill = GridBagConstraints.NONE;
152     constraints.insets = new Insets(0005);
153     add(new JLabel("No. of Docs:"), constraints);
154 
155     constraints = new GridBagConstraints();
156     constraints.gridx = GridBagConstraints.RELATIVE;
157     constraints.gridy = 5;
158     constraints.gridwidth = 4;
159     constraints.fill = GridBagConstraints.HORIZONTAL;
160     add(numOfDocumentsToFetchTextField = new JTextField("-1"40), constraints);
161 
162     // sixth row
163     constraints = new GridBagConstraints();
164     constraints.gridx = GridBagConstraints.RELATIVE;
165     constraints.gridy = 6;
166     constraints.gridwidth = 2;
167     constraints.anchor = GridBagConstraints.WEST;
168     constraints.fill = GridBagConstraints.NONE;
169     constraints.insets = new Insets(0005);
170     add(new JLabel("Prefix for documents:"), constraints);
171 
172     constraints = new GridBagConstraints();
173     constraints.gridx = GridBagConstraints.RELATIVE;
174     constraints.gridy = 6;
175     constraints.gridwidth = 4;
176     constraints.fill = GridBagConstraints.HORIZONTAL;
177     add(documentNamePrefixTextField = new JTextField("Document"40),
178             constraints);
179   }
180 
181   /**
182    * Adds listeners for UI components
183    */
184   protected void initListeners() {
185     filerBtn.addActionListener(new ActionListener() {
186       @Override
187       public void actionPerformed(ActionEvent e) {
188         JFileChooser filer = MainFrame.getFileChooser();
189         filer.setFileSelectionMode(JFileChooser.FILES_ONLY);
190         filer.setDialogTitle("Select a file");
191 
192         filer.resetChoosableFileFilters();
193         filer.setAcceptAllFileFilterUsed(true);
194         filer.setFileFilter(filer.getAcceptAllFileFilter());
195         int res = filer.showOpenDialog(SingleConcatenatedFileInputDialog.this);
196         if(res == JFileChooser.APPROVE_OPTION) {
197           try {
198             urlTextField.setText(filer.getSelectedFile().toURI().toURL()
199                     .toExternalForm());
200           }
201           catch(IOException ioe) {
202           }
203         }
204       }
205     });
206   }
207 
208   /**
209    * Sets the values for the URL string. This value is not cached so the
210    * set will actually the text in the text field itself
211    */
212   public void setUrlString(String urlString) {
213     urlTextField.setText(urlString);
214   }
215 
216   /**
217    * Gets the current text in the URL text field.
218    */
219   public String getUrlString() {
220     return urlTextField.getText();
221   }
222 
223   /**
224    * Gets the encoding selected by the user.
225    */
226   public String getEncoding() {
227     return encodingTextField.getText();
228   }
229 
230   /**
231    * Sets the initila value for the encoding field.
232    */
233   public void setEncoding(String enc) {
234     encodingTextField.setText(enc);
235   }
236 
237   /**
238    * Gets the document root element set by user
239    */
240   public String getDocumentRootElement() {
241     return documentRootElementTextField.getText();
242   }
243 
244   /**
245    * Sets the value for documentRootElement field
246    */
247   public void setDocumentRootElement(String documentRootElement) {
248     this.documentRootElementTextField.setText(documentRootElement);
249   }
250 
251   /**
252    * Gets the document name prefix set by user
253    */
254   public String getDocumentNamePrefix() {
255     return documentNamePrefixTextField.getText();
256   }
257 
258   /**
259    * Sets the value for document name prefix
260    */
261   public void setDocumentNamePrefix(String documentNamePrefix) {
262     this.documentNamePrefixTextField.setText(documentNamePrefix);
263   }
264 
265   /**
266    * Gets the selected document type.
267    */
268   public String getDocumentMimeType() {
269     return this.documentMimeTypeTextField.getText();
270   }
271 
272   /**
273    * Sets the document type
274    */
275   public void setDocumentMimeType(String mimeType) {
276     this.documentMimeTypeTextField.setText(mimeType);
277   }
278   
279   public boolean includeRootElement() {
280     return chkIncludeRoot.isSelected();
281   }
282 
283   /**
284    * Returns the number of documents to fetch
285    */
286   public int getNumOfDocumentsToFetch() {
287     if(this.numOfDocumentsToFetchTextField.getText().trim().length() == 0) {
288       return -1;
289     }
290     else {
291       // if error in parsing the text as integer, lets obtain all the documents
292       try {
293         return Integer.parseInt(this.numOfDocumentsToFetchTextField.getText()
294                 .trim());
295       }
296       catch(NumberFormatException nfe) {
297         return -1;
298       }
299     }
300   }
301 
302   /**
303    * Sets the number of documents to fetch
304    */
305   public void setNumOfDocumentsToFetch(int numOfDocumentsToFetch) {
306     this.numOfDocumentsToFetchTextField.setText("" + numOfDocumentsToFetch);
307   }
308   
309   public void reset() {
310     setEncoding("");
311   }
312 
313   /**
314    * Test code
315    */
316   static public void main(String[] args) {
317     try {
318       UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
319       Gate.init();
320     }
321     catch(Exception e) {
322       e.printStackTrace();
323     }
324     JFrame frame = new JFrame("Foo");
325     SingleConcatenatedFileInputDialog comp = new SingleConcatenatedFileInputDialog();
326     frame.getContentPane().add(comp);
327     frame.pack();
328     frame.setResizable(false);
329     frame.setVisible(true);
330   }
331 
332   /**
333    * The text field for the directory URL
334    */
335   JTextField urlTextField;
336 
337   /**
338    * The buttons that opens the file chooser
339    */
340   JButton filerBtn;
341 
342   /**
343    * The textField for the encoding
344    */
345   JTextField encodingTextField;
346 
347   /**
348    * The textField for the document root element
349    */
350   JTextField documentRootElementTextField;
351 
352   /**
353    * The textField for the document name prefix
354    */
355   JTextField documentNamePrefixTextField;
356 
357   /**
358    * Dropdown box with available document types
359    */
360   JTextField documentMimeTypeTextField;
361 
362   /**
363    * Number of documents to extract from the big document
364    */
365   JTextField numOfDocumentsToFetchTextField;
366   
367   JCheckBox chkIncludeRoot;
368 
369 }