blob: 163b8bc1a045079eb33f79f526c903c2f012e679 [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.pear.install;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.net.URL;
import java.util.jar.JarFile;
import java.util.prefs.Preferences;
import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JEditorPane;
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.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.ScrollPaneConstants;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.filechooser.FileFilter;
import org.apache.uima.pear.tools.InstallationController;
import org.apache.uima.pear.tools.InstallationDescriptor;
import org.apache.uima.pear.tools.InstallationDescriptorHandler;
import org.apache.uima.pear.tools.PackageBrowser;
import org.apache.uima.pear.util.MessageRouter;
import org.apache.uima.pear.util.UIMAUtil;
import org.apache.uima.tools.cvd.CVD;
import org.apache.uima.tools.cvd.MainFrame;
import org.apache.uima.tools.images.Images;
import org.apache.uima.tools.util.gui.AboutDialog;
/**
* This GUI is used to install a pear file locally in a directory chosen by the user and then run
* the installed AE in CVD. <br />
* The required field is : The pear file must be specified. The User may or may not specify the
* installation directory. If the installation directory is not specified, the current working
* directory is used by default.
*
*/
public class InstallPear extends JFrame {
private static final long serialVersionUID = -450696952085640703L;
/**
* The <code>RunInstallation</code> class implements a thread that is used to run the
* installation.
*/
protected static class RunInstallation implements Runnable {
private File pearFile;
private File installationDir = null;
/**
* Constructor that sets a given input PEAR file and a given installation directory.
*
* @param pearFile
* The given PEAR file.
* @param installationDir
* The given installation directory.
*/
public RunInstallation(File pearFile, File installationDir) {
this.pearFile = pearFile;
this.installationDir = installationDir;
}
/**
* Runs the PEAR installation process. Notifies waiting threads upon completion.
*/
public void run() {
installPear(pearFile, installationDir);
synchronized (this) {
notifyAll();
}
}
}
/**
* The <code>PEARFilter</code> class allows to filter directories, as well as '.tear' and
* '.pear' files.
*/
protected static class PEARFilter extends FileFilter {
static final String TEAR_EXT = "tear";
static final String PEAR_EXT = "pear";
/**
* Returns <code>true</code>, if the given input file is directory or has 'tear' or 'pear'
* extension, <code>false</code> otherwise.
*
* @return <code>true</code>, if the given input file is directory or has 'tear' or 'pear'
* extension, <code>false</code> otherwise.
*/
public boolean accept(File file) {
if (file.isDirectory())
return true;
String extension = getExtension(file);
if (extension.equals(TEAR_EXT) || extension.equals(PEAR_EXT))
return true;
return false;
}
/**
* Returns file name extension in lowercase.
*
* @param f
* The given file.
* @return The file name extension in lowercase.
*/
private String getExtension(File f) {
String s = f.getName();
int i = s.lastIndexOf('.');
if (i > 0 && i < s.length() - 1)
return s.substring(i + 1).toLowerCase();
return "";
}
/**
* Returns the filter description.
*
* @return The filter description.
*/
public String getDescription() {
return "PEAR files";
}
}
// private JPanel aboutMenuItemPanel = null;
private JTextField pearFileTextField = null;
private JButton browseButton = null;
private static JTextField installDirTextField = null;
private JButton browseDirButton = null;
private JButton installButton = null;
private JMenuBar menuBar = null;
private JMenuItem fileMenuItem = null;
private JMenuItem helpMenuItem = null;
private JMenuItem aboutMenuItem = null;
private JMenu fileMenu = null;
private JMenu helpMenu = null;
// private JLabel bannerLabel = null;
private static JButton runButton = null;
private JButton helpButton = null;
private static JTextArea pearConsole = null;
private static JScrollPane jScrollPane = null;
private static File localTearFile = null;
private static File installationDir = null;
private static String mainComponentId;
private static InstallationDescriptor insdObject;
private static String mainComponentRootPath;
private static boolean helpExists = true;
private static String message = null;
private static boolean errorFlag = false;
private static Preferences userPrefs;
private static final String LAST_FILE_NAME_CHOOSEN_KEY = "LAST_FILE_NAME_CHOOSEN";
private static final String LAST_DIRECTORY_CHOOSEN_KEY = "LAST_DIRECTORY_CHOOSEN";
private static final String SET_ENV_FILE = "metadata/setenv.txt";
// protected static final String UIMA_HOME_ENV = "UIMA_HOME";
// protected static final String UIMA_DATAPATH_ENV = "uima.datapath";
/**
* Opens a dialog to select a PEAR file from the local file system.
*
* @return Selected PEAR file path, or <code>null</code>, if nothing was selected.
*/
private String selectPear() {
userPrefs = Preferences.userNodeForPackage(this.getClass());
JFileChooser fileChooser = new JFileChooser();
String selectedFileName = null;
fileChooser.addChoosableFileFilter(new PEARFilter());
String lastFileName = (pearFileTextField.getText().length() > 0) ? pearFileTextField.getText()
: userPrefs.get(LAST_FILE_NAME_CHOOSEN_KEY, "./");
File directory = (lastFileName.length() > 0) ? new File(lastFileName).getParentFile()
: new File("./");
fileChooser.setCurrentDirectory(directory);
fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
int result = fileChooser.showDialog(new JFrame(), "Select");
if (result == JFileChooser.APPROVE_OPTION) {
selectedFileName = fileChooser.getSelectedFile().getAbsolutePath();
pearFileTextField.setText(selectedFileName);
installButton.setEnabled(true);
// save state of the window
try {
userPrefs.put(LAST_FILE_NAME_CHOOSEN_KEY, selectedFileName);
} catch (NullPointerException ex) {
pearConsole.append("NullPointerException" + ex);
}
} else if (result == JFileChooser.CANCEL_OPTION) {
if (pearFileTextField != null)
installButton.setEnabled(false);
pearFileTextField.setText("");
pearConsole.setText("Operation Cancelled! \n");
return null;
}
return selectedFileName;
}
/**
* Opens a dialog to select a directory for PEAR file installation.
*
* @return Selected installation directory path, or current directory path, if nothing was
* selected.
*/
private String selectDir() {
userPrefs = Preferences.userNodeForPackage(this.getClass());
JFileChooser fileChooser = new JFileChooser();
fileChooser.addChoosableFileFilter(new PEARFilter());
String lastDirName = (installDirTextField.getText().length() > 0) ? installDirTextField
.getText() : userPrefs.get(LAST_DIRECTORY_CHOOSEN_KEY, "./");
String selectedDirName = null;
File directory = (lastDirName.length() > 0) ? new File(lastDirName).getParentFile() : new File(
"./");
fileChooser.setCurrentDirectory(directory);
fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
int result = fileChooser.showDialog(new JFrame(), "Select");
// User selects the 'Select Button'
if (result == JFileChooser.APPROVE_OPTION) {
selectedDirName = fileChooser.getSelectedFile().getAbsolutePath();
// saving the state of the window
try {
userPrefs.put(LAST_DIRECTORY_CHOOSEN_KEY, selectedDirName);
} catch (NullPointerException ex) {
pearConsole.append("NullPointerException" + ex);
}
installDirTextField.setText(selectedDirName);
installButton.setEnabled(true);
}
// no selection was made
else {
installButton.setEnabled(true);
}
return selectedDirName;
}
/**
* Method that installs the given PEAR file to the given installation directory.
*
* @param localPearFile
* The given PEAR file path.
* @param installationDir
* The given installation directory.
*/
private static void installPear(File localPearFile, File installationDir) {
InstallationController.setLocalMode(true);
InstallationDescriptorHandler installationDescriptorHandler = new InstallationDescriptorHandler();
pearConsole.setText("");
printInConsole(false, "");
// check input parameters
if (localPearFile != null && !localPearFile.exists()) {
errorFlag = true;
message = localPearFile.getAbsolutePath() + "file not found \n";
printInConsole(errorFlag, message);
} else {
if(localPearFile != null) {
pearConsole.append("PEAR file to install is => " + localPearFile.getAbsolutePath() + "\n");
}
}
/* setting current working directory by default */
if (installationDir == null) {
installationDir = new File("./");
}
pearConsole.append("Installation directory is => " + installationDir.getAbsolutePath() + "\n");
try {
JarFile jarFile = new JarFile(localPearFile);
installationDescriptorHandler.parseInstallationDescriptor(jarFile);
insdObject = installationDescriptorHandler.getInstallationDescriptor();
if (insdObject != null)
mainComponentId = insdObject.getMainComponentId();
else {
pearConsole.setForeground(new Color(0xFF0000));
throw new FileNotFoundException("installation descriptor not found \n");
}
// this version does not support separate delegate components
if (insdObject.getDelegateComponents().size() > 0) {
throw new RuntimeException("separate delegate components not supported \n");
}
} catch (Exception err) {
errorFlag = true;
message = " terminated \n" + err.toString();
printInConsole(errorFlag, message);
return;
}
InstallationController installationController = new InstallationController(mainComponentId,
localPearFile, installationDir);
// adding installation controller message listener
installationController.addMsgListener(new MessageRouter.StdChannelListener() {
public void errMsgPosted(String errMsg) {
printInConsole(true, errMsg);
}
public void outMsgPosted(String outMsg) {
printInConsole(false, outMsg);
}
});
insdObject = installationController.installComponent();
if (insdObject == null) {
runButton.setEnabled(false);
/* installation failed */
errorFlag = true;
message = " \nInstallation of " + mainComponentId + " failed => \n "
+ installationController.getInstallationMsg();
printInConsole(errorFlag, message);
} else {
try {
/* save modified installation descriptor file */
installationController.saveInstallationDescriptorFile();
mainComponentRootPath = insdObject.getMainComponentRoot();
errorFlag = false;
message = " \nInstallation of " + mainComponentId + " completed \n";
printInConsole(errorFlag, message);
message = "The " + mainComponentRootPath + "/" + SET_ENV_FILE
+ " \n file contains required " + "environment variables for this component\n";
printInConsole(errorFlag, message);
/* 2nd step: verification of main component installation */
if (installationController.verifyComponent()) {
// enable 'run' button only for AE
File xmlDescFile = new File(insdObject.getMainComponentDesc());
try {
String uimaCompCtg = UIMAUtil.identifyUimaComponentCategory(xmlDescFile);
if (UIMAUtil.ANALYSIS_ENGINE_CTG.equals(uimaCompCtg))
runButton.setEnabled(true);
} catch (Exception e) {
// Ignore exceptions!
}
errorFlag = false;
message = "Verification of " + mainComponentId + " completed \n";
printInConsole(errorFlag, message);
} else {
runButton.setEnabled(false);
errorFlag = true;
message = "Verification of " + mainComponentId + " failed => \n "
+ installationController.getVerificationMsg();
printInConsole(errorFlag, message);
}
} catch (Exception exc) {
errorFlag = true;
message = "Error in InstallationController.main(): " + exc.toString();
printInConsole(errorFlag, message);
} finally {
installationController.terminate();
}
}
}
/**
* This method runs the installed AE in CVD (Gladis).
*
* @throws IOException
* If any I/O exception occurred.
*/
private void runCVD() {
try {
// create PackageBrowser object
PackageBrowser pkgBrowser = new PackageBrowser(new File(mainComponentRootPath));
// get pear descriptor
String pearDesc = pkgBrowser.getComponentPearDescPath();
// start CVD
MainFrame frame = CVD.createMainFrame();
// Prevent CVD from shutting down JVM after exit
frame.setExitOnClose(false);
// load pear descriptor
frame.loadAEDescriptor(new File(pearDesc));
// run CVD
frame.runAE(true);
} catch (Throwable e) {
pearConsole.append(" Error in runCVD() " + e.toString());
StringWriter strWriter = new StringWriter();
PrintWriter printWriter = new PrintWriter(strWriter, true);
e.printStackTrace(printWriter);
printWriter.flush();
strWriter.flush();
pearConsole.setForeground(new Color(0xFF0000));
pearConsole.append(strWriter.toString());
}
}
/**
* This method initializes the pearFile TextField.
*
* @return The initialized pearFile TextField.
*/
private JTextField getPearFileTextField() {
if (pearFileTextField == null) {
pearFileTextField = new JTextField();
pearFileTextField.setBounds(83, 40, 492, 20);
// hazel's change
pearFileTextField.setLayout(new BorderLayout());
pearFileTextField.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
if (e.getSource() instanceof JTextField) {
pearFileTextField = (JTextField) e.getSource();
installButton.setEnabled(true);
runButton.setEnabled(false);
if (pearFileTextField != null) {
pearConsole.setText("");
printInConsole(false, "");
pearConsole.append(pearFileTextField.getText() + "\n");
}
}
}
});
this.pearFileTextField.getDocument().addDocumentListener(new DocumentListener() {
public void changedUpdate(DocumentEvent e) {
// do nothing
}
public void insertUpdate(DocumentEvent e) {
InstallPear.runButton.setEnabled(false);
String inputPear = InstallPear.this.pearFileTextField.getText();
if (inputPear.length() > 0) {
InstallPear.this.installButton.setEnabled(true);
}
}
public void removeUpdate(DocumentEvent e) {
InstallPear.runButton.setEnabled(false);
String inputPear = InstallPear.this.pearFileTextField.getText();
if (inputPear.length() == 0) {
InstallPear.this.installButton.setEnabled(false);
}
}
});
}
return pearFileTextField;
}
/**
* This method initializes the Browse Button.
*
* @return The initialized Browse Button.
*/
private JButton getbrowseButton() {
if (browseButton == null) {
browseButton = new JButton();
browseButton.setBounds(579, 40, 114, 20);
browseButton.setText("Browse...");
browseButton.setCursor(new Cursor(Cursor.HAND_CURSOR));
browseButton.setMnemonic('b');
browseButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
String pear = null;
if ((e.getActionCommand().equals("Browse..."))) {
runButton.setEnabled(false);
pear = selectPear();
if (pear == null)
return;
}
}
});
}
return browseButton;
}
/**
* This method initializes installDirTextField.
*
* @return The initialized installDirTextField.
*/
private JTextField getInstallDirTextField() {
if (installDirTextField == null) {
installDirTextField = new JTextField();
installDirTextField.setBounds(83, 80, 492, 20);
installDirTextField.isEditable();
// handling text input
installDirTextField.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
if (e.getSource() instanceof JTextField) {
runButton.setEnabled(false);
installDirTextField = (JTextField) e.getSource();
if (installDirTextField != null) {
pearConsole.append(installDirTextField.getText() + "\n");
}
}
}
});
installDirTextField.getDocument().addDocumentListener(new DocumentListener() {
public void changedUpdate(DocumentEvent e) {
// do nothing
}
public void insertUpdate(DocumentEvent e) {
runButton.setEnabled(false);
}
public void removeUpdate(DocumentEvent e) {
runButton.setEnabled(false); }
});
}
return installDirTextField;
}
/**
* This method initializes the browseDir Button.
*
* @return The initialized browseDir Button.
*/
private JButton getBrowseDirButton() {
if (browseDirButton == null) {
browseDirButton = new JButton();
browseDirButton.setBounds(579, 80, 114, 20);
browseDirButton.setText("Browse Dir...");
browseDirButton.setEnabled(false);
browseDirButton.setCursor(new Cursor(Cursor.HAND_CURSOR));
browseDirButton.setMnemonic('d');
browseDirButton.setEnabled(true);
browseDirButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
String dir = null;
File installationDir = null;
runButton.setEnabled(false);
if (e.getActionCommand().equals("Browse Dir...")) {
dir = selectDir();
if (dir == null) {
installationDir = new File("./");
installDirTextField.setText(installationDir.getAbsolutePath());
} else {
installDirTextField.setText(dir);
}
}
}
});
}
return browseDirButton;
}
/**
* This method initializes the Install Button.
*
* @return The initialized Install Button.
*/
private JButton getInstallButton() {
if (installButton == null) {
installButton = new JButton();
installButton.setBounds(100, 120, 108, 24);
installButton.setText("Install");
installButton.setEnabled(false);
installButton.setCursor(new Cursor(Cursor.HAND_CURSOR));
installButton.setMnemonic('i');
installButton.setRolloverEnabled(true);
// Handling mouse click event
installButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
if (e.getActionCommand().equals("Install")) {
localTearFile = new File(pearFileTextField.getText());
installationDir = new File(installDirTextField.getText());
RunInstallation installPear = new RunInstallation(localTearFile, installationDir);
Thread thread = new Thread(installPear);
thread.start();
installButton.setCursor(new Cursor(Cursor.WAIT_CURSOR));
synchronized (installPear) {
try {
installPear.wait(500000);
} catch (InterruptedException ex) {
errorFlag = true;
message = "InterruptedException " + ex;
printInConsole(errorFlag, message);
}
}
installButton.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
}
}
});
}
return installButton;
}
/**
* This method initializes 'Run your AE in CVD' Button.
*
* @return The initialized 'Run your AE in CVD' Button.
*/
private JButton getRunButton() {
if (runButton == null) {
runButton = new JButton();
runButton.setBounds(255, 120, 240, 24);
runButton.setText("Run your AE in the CAS Visual Debugger");
runButton.setEnabled(false);
runButton.setCursor(new Cursor(Cursor.HAND_CURSOR));
runButton.setMnemonic('r');
runButton.setRolloverEnabled(true);
runButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
if (e.getActionCommand().equals("Run your AE in the CAS Visual Debugger")) {
installButton.setEnabled(false);
runCVD();
}
}
});
}
return runButton;
}
/**
* This method initializes pearConsole.
*
* @return The initialized pearConsole.
*/
private JTextArea getPearConsole() {
if (pearConsole == null) {
pearConsole = new JTextArea();
pearConsole.setEditable(false);
pearConsole.setForeground(new Color(0x0066ff));
pearConsole.setLineWrap(true);
pearConsole.setWrapStyleWord(true);
}
return pearConsole;
}
/**
* Prints messages and set foreground color in the console according to a given errorFlag.
*
* @param errorFlag
* The given error flag.
* @param message
* The given message to print.
*/
private static void printInConsole(boolean errorFlag, String message) {
if (errorFlag) {
pearConsole.setForeground(new Color(0xFF0000));
pearConsole.setText(message);
} else {
pearConsole.setForeground(new Color(0x0066ff));
pearConsole.append(message);
}
}
/**
* This method initializes the Scroll Pane.
*
* @return The initialized Scroll Pane.
*/
private JScrollPane getJScrollPane() {
if (jScrollPane == null) {
jScrollPane = new JScrollPane(getPearConsole(),
ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS,
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
jScrollPane.setBounds(10, 150, 708, 352);
jScrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
jScrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
}
return jScrollPane;
}
/**
* This method initializes the help Button.
*
* @return The initialized help Button.
*/
private JButton getHelpButton() {
if (helpButton == null) {
helpButton = new JButton();
helpButton.setBounds(540, 120, 108, 24);
helpButton.setText("Help");
helpButton.setEnabled(helpExists);
helpButton.setCursor(new Cursor(Cursor.HAND_CURSOR));
helpButton.setMnemonic('h');
helpButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
if (e.getActionCommand() == "Help") {
try {
URL helpFileUrl = getClass().getResource("piHelp.html");
if (helpFileUrl == null) {
String msg = "PEAR Installer help file does not exist.";
JOptionPane.showMessageDialog(InstallPear.this, msg, "Error showing help",
JOptionPane.ERROR_MESSAGE);
return;
}
JFrame manFrame = new JFrame("PEAR Installer Help");
JEditorPane editorPane = new JEditorPane();
editorPane.setEditable(false);
editorPane.setPage(helpFileUrl);
JScrollPane scrollPane = new JScrollPane(editorPane);
scrollPane.setPreferredSize(new Dimension(700, 800));
manFrame.setContentPane(scrollPane);
manFrame.pack();
manFrame.setVisible(true);
} catch (Exception ex) {
JOptionPane.showMessageDialog(InstallPear.this, ex.getMessage(),
"Error showing help", JOptionPane.ERROR_MESSAGE);
}
}
}
});
}
return helpButton;
}
/**
* Method to create and display the frame.
*/
private static void createAndShowGUI() {
InstallPear installPear = new InstallPear();
installPear.setDefaultCloseOperation(EXIT_ON_CLOSE);
installPear.setVisible(true);
}
/**
* Starts the GUI application.
*
* @param args
* None.
*/
public static void main(String[] args) {
// try {
// String UIMA_HOME = System.getProperty("uima.home");
// if (UIMA_HOME == null)
// throw new RuntimeException("-Duima.home not defined");
// System.setProperty(UIMA_HOME_ENV, UIMA_HOME);
// // load main properties and replace %UIMA_HOME%
// } catch (Exception exc) {
// System.err.println("Error in InstallPear.main():" + exc.toString());
// exc.printStackTrace(System.err);
// System.exit(0);
// }
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
/**
* This is the default constructor.
*/
public InstallPear() {
super();
initialize();
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception exception) {
System.err.println("Could not set look and feel: " + exception.getMessage());
}
try {
setIconImage(ImageIO.read(getClass().getResource(Images.MICROSCOPE)));
} catch (IOException ioexception) {
System.err.println("Image could not be loaded: " + ioexception.getMessage());
}
menuBar = new JMenuBar();
setJMenuBar(menuBar);
fileMenu = new JMenu("File");
fileMenu.setMnemonic('f');
fileMenuItem = new JMenuItem("Exit");
fileMenuItem.setMnemonic('e');
menuBar.add(fileMenu);
fileMenuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
fileMenu.add(fileMenuItem);
// the help menu and items
helpMenu = new JMenu("Help");
helpMenu.setMnemonic('h');
aboutMenuItem = new JMenuItem("About");
aboutMenuItem.setMnemonic('a');
helpMenuItem = new JMenuItem("Help");
helpMenuItem.setMnemonic('h');
menuBar.add(helpMenu);
helpMenuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand() == "Help") {
try {
URL helpFileUrl = getClass().getResource("piHelp.html");
if (helpFileUrl == null) {
String msg = "PEAR Installer help file does not exist.";
JOptionPane.showMessageDialog(InstallPear.this, msg, "Error showing help",
JOptionPane.ERROR_MESSAGE);
return;
}
JFrame manFrame = new JFrame("PEAR Installer Help");
JEditorPane editorPane = new JEditorPane();
editorPane.setEditable(false);
editorPane.setPage(helpFileUrl);
JScrollPane scrollPane = new JScrollPane(editorPane);
scrollPane.setPreferredSize(new Dimension(700, 800));
manFrame.setContentPane(scrollPane);
manFrame.pack();
manFrame.setVisible(true);
} catch (Exception ex) {
JOptionPane.showMessageDialog(InstallPear.this, ex.getMessage(), "Error showing help",
JOptionPane.ERROR_MESSAGE);
}
}
}
});
aboutMenuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand() == "About") {
AboutDialog dialog = new AboutDialog(InstallPear.this, "About PEAR Installer");
dialog.setVisible(true);
}
}
});
helpMenu.add(helpMenuItem);
helpMenu.add(aboutMenuItem);
/*
* Initialize Main Pane and add the initialized components
*/
JLabel installDirLabel = new JLabel();
JLabel pearFileLabel = new JLabel();
JPanel mainPane = new JPanel();
mainPane.setLayout(null);
pearFileLabel.setBounds(83, 20, 126, 20);
pearFileLabel.setText("PEAR File:");
installDirLabel.setBounds(83, 60, 126, 20);
installDirLabel.setText("Installation Directory:");
mainPane.add(pearFileLabel, null);
mainPane.add(getPearFileTextField(), null);
mainPane.add(getbrowseButton(), null);
mainPane.add(installDirLabel, null);
mainPane.add(getInstallDirTextField(), null);
mainPane.add(getBrowseDirButton(), null);
mainPane.add(getInstallButton(), null);
mainPane.add(getRunButton(), null);
mainPane.add(getHelpButton(), null);
mainPane.add(getPearConsole(), null);
mainPane.add(getJScrollPane(), null);
/*
* Add main pane and UIMA banner to content pane
*/
Container contentPanel = getContentPane();
contentPanel.setBackground(Color.WHITE);
JLabel banner = new JLabel(Images.getImageIcon(Images.BANNER));
contentPanel.add(banner, BorderLayout.NORTH);
contentPanel.add(mainPane, BorderLayout.CENTER);
}
/**
* This method initializes the frame.
*/
private void initialize() {
this.setTitle("Local PEAR Installation, Verification and Testing");
this.setSize(735, 620);
this.setResizable(false);
// center the frame on the screen
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension GUISize = this.getSize();
int centerPosX = (screenSize.width - GUISize.width) / 2;
int centerPosY = (screenSize.width - GUISize.width) / 2;
setLocation(centerPosX, centerPosY);
}
}