blob: 80237c666169ca864b57dc1a587451613a5b06ef [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.uima.tools.jcasgen;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.io.IOException;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import org.apache.uima.tools.images.Images;
import org.apache.uima.tools.util.gui.AboutDialog;
public class GUI extends JFrame {
private static final long serialVersionUID = 1L;
private AboutDialog aboutDialog;
final static String NL = System.getProperties().getProperty("line.separator");
static GUI theGUI;
final Jg jg;
class G extends JPanel implements ActionListener {
private static final long serialVersionUID = 1L;
final GUI gui;
JLabel lbLabel6;
JLabel lbLabel1;
JButton btInputFileBrowse;
JButton btOutDirBrowse;
JButton btGenXmlBrowse;
JLabel lbLabel0;
JLabel lbLabel9;
JTextArea tfInputFileName;
JTextArea tfOutDirName;
JTextArea tfGenXMLname;
JLabel lbLabel11;
JLabel lbLabel12;
JLabel lbLabel13;
JButton btGo;
JTextArea taStatus;
JScrollPane areaScrollPane;
JLabel lbLabel15;
JLabel lbLabel16;
JLabel lbLabel17;
JLabel lbLabel10;
JLabel lbResult;
public G(GUI gui) {
super();
this.gui = gui;
GridBagLayout gbG = new GridBagLayout();
setLayout(gbG);
GridBagConstraints gbcG = new GridBagConstraints();
// global, reused values
gbcG.insets = new Insets(4, 4, 4, 4);
gbcG.gridwidth = 1;
gbcG.gridheight = 1;
gbcG.weightx = 0;
gbcG.weighty = 0;
gbcG.fill = GridBagConstraints.NONE;
gbcG.anchor = GridBagConstraints.CENTER;
// layout:
// 0 1 2
// 0 labels i/o text area buttons
// 1 title old
// 2 inFile txt browse
// 3 out dir txt browse
// 4 gen xml txt
// 5 status
// 6 go-button txt-status result
lbLabel17 = new JLabel("Welcome to the JCasGen tool. You can drag corners to resize.");
lbLabel17.setRequestFocusEnabled(false);
lbLabel17.setToolTipText(null);
lbLabel17.setVerifyInputWhenFocusTarget(false);
gbcG.gridx = 1;
gbcG.gridy = 0;
gbG.setConstraints(lbLabel17, gbcG);
add(lbLabel17);
lbLabel0 = new JLabel("Input File:");
gbcG.gridx = 0;
gbcG.gridy = 2;
gbG.setConstraints(lbLabel0, gbcG);
add(lbLabel0);
lbLabel1 = new JLabel("Output Directory:");
gbcG.gridy = 3;
gbG.setConstraints(lbLabel1, gbcG);
add(lbLabel1);
btInputFileBrowse = new JButton("Browse");
btInputFileBrowse.addActionListener(this);
gbcG.gridx = 3;
gbcG.gridy = 2;
gbcG.anchor = GridBagConstraints.WEST;
gbG.setConstraints(btInputFileBrowse, gbcG);
add(btInputFileBrowse);
btOutDirBrowse = new JButton("Browse");
btOutDirBrowse.addActionListener(this);
gbcG.gridy = 3;
gbG.setConstraints(btOutDirBrowse, gbcG);
add(btOutDirBrowse);
tfInputFileName = new JTextArea();
gbcG.gridx = 1;
gbcG.gridy = 2;
gbcG.fill = GridBagConstraints.BOTH;
gbcG.weightx = 1;
gbcG.weighty = 1;
gbcG.anchor = GridBagConstraints.WEST;
gbG.setConstraints(tfInputFileName, gbcG);
add(tfInputFileName);
tfOutDirName = new JTextArea();
gbcG.gridy = 3;
gbG.setConstraints(tfOutDirName, gbcG);
add(tfOutDirName);
lbLabel16 = new JLabel("Status");
gbcG.gridy = 5;
gbcG.fill = GridBagConstraints.NONE;
gbcG.weightx = 1;
gbcG.weighty = 0;
gbcG.anchor = GridBagConstraints.CENTER;
gbG.setConstraints(lbLabel16, gbcG);
add(lbLabel16);
taStatus = new JTextArea();
gbcG.gridy = 6;
gbcG.weighty = 5; // most weight goes here
gbcG.fill = GridBagConstraints.BOTH;
gbcG.anchor = GridBagConstraints.NORTHWEST;
areaScrollPane = new JScrollPane(taStatus);
areaScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
gbG.setConstraints(areaScrollPane, gbcG);
add(areaScrollPane);
btGo = new JButton("Go");
btGo.addActionListener(this);
gbcG.gridx = 0;
gbcG.gridy = 6;
gbcG.fill = GridBagConstraints.NONE;
gbcG.weightx = 0; // was 1
gbcG.weighty = 0;
gbcG.anchor = GridBagConstraints.CENTER;
gbG.setConstraints(btGo, gbcG);
add(btGo);
lbResult = new JLabel(" ");
gbcG.gridx = 3;
gbcG.gridy = 6;
gbcG.fill = GridBagConstraints.BOTH;
gbcG.anchor = GridBagConstraints.NORTH;
gbG.setConstraints(lbResult, gbcG);
add(lbResult);
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == btInputFileBrowse) {
browseFile(tfInputFileName); // Action for btInputFileBrowse
}
if (e.getSource() == btOutDirBrowse) {
browseDir(tfOutDirName); // Action for btOutDirBrowse
}
if (e.getSource() == btGenXmlBrowse) {
browseFile(tfGenXMLname); // Action for btGenXmlBrowse
}
if (e.getSource() == btGo) {
lbResult.setText("Working");
go(); // Action for btGo
}
}
void browseFile(JTextArea f) {
String startingDir = f.getText();
if (startingDir.length() == 0) {
// default to user.dir
startingDir = System.getProperty("user.dir");
}
JFileChooser c = new JFileChooser(startingDir);
int returnVal = c.showOpenDialog(this);
if (returnVal == JFileChooser.APPROVE_OPTION) {
try {
f.setText(c.getSelectedFile().getCanonicalPath());
Prefs.set(gui);
} catch (Exception e) { // do nothing
}
}
}
void browseDir(JTextArea f) {
String startingDir = f.getText();
if (startingDir.length() == 0) {
// default to user.dir
startingDir = System.getProperty("user.dir");
}
JFileChooser c = new JFileChooser(startingDir);
c.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
int returnVal = c.showOpenDialog(gui);
if (returnVal == JFileChooser.APPROVE_OPTION) {
try {
f.setText(c.getSelectedFile().getCanonicalPath());
Prefs.set(gui);
} catch (Exception e) { // do nothing
}
}
}
void go() {
final String outDirName = tfOutDirName.getText();
final String inFileName = tfInputFileName.getText();
Runnable r = new Runnable() {
public void run() {
jg.main0(new String[] { "-jcasgeninput", inFileName, "-jcasgenoutput", outDirName },
jg.merger, new GuiProgressMonitor(), new GuiErrorImpl());
}
};
new Thread(r).start();
}
String showInStatus(String message) {
taStatus.setText(taStatus.getText() + message + NL);
areaScrollPane.getVerticalScrollBar().setValue(
areaScrollPane.getVerticalScrollBar().getMaximum());
gui.repaint();
return message;
}
}
G pnG;
// for testing only
public static void main(String args[]) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException e) { // do nothing
} catch (InstantiationException e) { // do nothing
} catch (IllegalAccessException e) { // do nothing
} catch (UnsupportedLookAndFeelException e) { // do nothing
}
theGUI = new GUI(null);
}
public GUI(Jg jg) {
super("JCasGen");
theGUI = this;
this.jg = jg;
pnG = new G(this);
setDefaultCloseOperation(EXIT_ON_CLOSE);
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
// I don't think this should ever happen, but if it does just print error and continue
// with defalt look and feel
System.err.println("Could not set look and feel: " + e.getMessage());
}
// Set frame icon image
try {
this.setIconImage(Images.getImage(Images.MICROSCOPE));
} catch (IOException e) {
System.err.println("Image could not be loaded: " + e.getMessage());
}
this.getContentPane().setBackground(Color.WHITE);
this.getContentPane().setLayout(new BorderLayout());
JLabel banner = new JLabel(Images.getImageIcon(Images.BANNER));
this.getContentPane().add(banner, BorderLayout.NORTH);
this.getContentPane().add(pnG, BorderLayout.CENTER);
aboutDialog = new AboutDialog(this, "About JCasGen");
setJMenuBar(createMenuBar());
pack();
// show();
}
private JMenuBar createMenuBar() {
JMenuBar menuBar = new JMenuBar();
JMenu fileMenu = new JMenu("File");
JMenuItem exitMenuItem = new JMenuItem("Exit");
exitMenuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
GUI.this.processWindowEvent(new WindowEvent(GUI.this, WindowEvent.WINDOW_CLOSING));
}
});
fileMenu.add(exitMenuItem);
JMenu helpMenu = new JMenu("Help");
JMenuItem aboutMenuItem = new JMenuItem("About");
aboutMenuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
aboutDialog.setVisible(true);
}
});
helpMenu.add(aboutMenuItem);
menuBar.add(fileMenu);
menuBar.add(helpMenu);
return menuBar;
}
}