/***********************************************************************
This file is part of KEEL-software, the Data Mining tool for regression,
classification, clustering, pattern mining and so on.
Copyright (C) 2004-2010
F. Herrera (herrera@decsai.ugr.es)
L. S�nchez (luciano@uniovi.es)
J. Alcal�-Fdez (jalcala@decsai.ugr.es)
S. Garc�a (sglopez@ujaen.es)
A. Fern�ndez (alberto.fernandez@ujaen.es)
J. Luengo (julianlm@decsai.ugr.es)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see http://www.gnu.org/licenses/
**********************************************************************/
/**
*
* File: Application1.java
*
* Frame of the application to process the execution of a experiment. Graph version
*
* @author Joaquin Derrac (University of Granada) 15/6/2009
* @version 1.0
* @since JDK1.5
*
*/
package keel.RunKeelGraph;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.util.Vector;
public class Frame1 extends JFrame {
JPanel contentPane;
JButton jButton1 = new JButton();
JScrollPane jScrollPane1 = new JScrollPane();
JTextArea jTextArea1 = new JTextArea();
JProgressBar jProgressBar1 = new JProgressBar();
JButton jButton2 = new JButton();
int paso = 0;
Execute exe;
JButton jButton3 = new JButton();
JScrollPane jScrollPane2 = new JScrollPane();
JTextArea jTextArea2 = new JTextArea();
JLabel jLabel1 = new JLabel();
/**
* Default builder
*/
public Frame1() {
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
try {
jbInit();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Component initialization
* @throws java.lang.Exception
*/
private void jbInit() throws Exception {
this.setFont(new java.awt.Font("Arial", 0, 11));
this.setIconImage(Toolkit.getDefaultToolkit().getImage(Frame1.class.getResource("/ico/logo.gif")));
contentPane = (JPanel) this.getContentPane();
jButton1.setBounds(new Rectangle(259, 16, 132, 30));
jButton1.setFont(new java.awt.Font("Arial", 0, 11));
jButton1.setIcon(new ImageIcon(Frame1.class.getResource("/ico/play.gif")));
jButton1.setText("Run Experiment");
jButton1.addActionListener(new Frame1_jButton1_actionAdapter(this));
contentPane.setLayout(null);
this.setSize(new Dimension(800, 600));
this.setTitle("Run Experiment");
jScrollPane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
jScrollPane1.setFont(new java.awt.Font("Arial", 0, 11));
jScrollPane1.setBounds(new Rectangle(17, 68, 764, 200));
jTextArea1.setFont(new java.awt.Font("Arial", 0, 11));
jTextArea1.setEditable(false);
jProgressBar1.setFont(new java.awt.Font("Arial", 0, 11));
jProgressBar1.setBounds(new Rectangle(17, 538, 764, 14));
jButton2.setBounds(new Rectangle(408, 16, 132, 30));
jButton2.setEnabled(false);
jButton2.setFont(new java.awt.Font("Arial", 0, 11));
jButton2.setIcon(new ImageIcon(Frame1.class.getResource("/ico/stop.gif")));
jButton2.setText("Stop");
jButton2.addActionListener(new Frame1_jButton2_actionAdapter(this));
jButton3.setBounds(new Rectangle(750, 16, 30, 30));
jButton3.setFont(new java.awt.Font("Arial", 0, 1));
jButton3.setToolTipText("Results");
jButton3.setIcon(new ImageIcon(Frame1.class.getResource("/ico/test.gif")));
jButton3.setText("");
jButton3.addActionListener(new Frame1_jButton3_actionAdapter(this));
jScrollPane2.setFont(new java.awt.Font("Arial", 0, 11));
jScrollPane2.setBounds(new Rectangle(17, 312, 764, 200));
jLabel1.setFont(new java.awt.Font("Arial", 0, 11));
jLabel1.setText("Standard output");
jLabel1.setBounds(new Rectangle(17, 289, 118, 21));
contentPane.setFont(new java.awt.Font("Arial", 0, 11));
jTextArea2.setFont(new java.awt.Font("Arial", 0, 11));
contentPane.add(jScrollPane1, null);
jScrollPane1.getViewport().add(jTextArea1, null);
contentPane.add(jButton3, null);
contentPane.add(jButton2, null);
contentPane.add(jButton1, null);
contentPane.add(jLabel1, null);
contentPane.add(jScrollPane2, null);
contentPane.add(jProgressBar1, null);
jScrollPane2.getViewport().add(jTextArea2, null);
this.setResizable(false);
Vector listado = new Vector();
listDirectory("../results", listado);
if (listado.size() == 0) {
jButton3.setEnabled(false);
}
}
/**
* Overridden so we can exit when window is closed
* @param e Event
*/
@Override
protected void processWindowEvent(WindowEvent e) {
super.processWindowEvent(e);
if (e.getID() == WindowEvent.WINDOW_CLOSING) {
System.exit(0);
}
}
void jButton1_actionPerformed(ActionEvent e) {
jButton1.setEnabled(false);
jButton2.setEnabled(true);
// Thread that executes commands
exe = new Execute("Executable", this);
exe.start();
}
void jButton2_actionPerformed(ActionEvent e) {
paso = 0;
jProgressBar1.setValue(0);
jButton1.setEnabled(true);
jButton2.setEnabled(false);
jButton3.setEnabled(true);
exe.pr.destroy();
exe.stop();
jTextArea1.append("\n");
}
class Execute extends Thread {
private Frame1 parent;
Process pr;
/**
* Buider
* @param name
* @param frame
*/
public Execute(String name, Frame1 frame) {
super(name);
parent = frame;
}
/**
* Run method of the thread
*/
@Override
public void run() {
try {
FileInputStream file = new FileInputStream("RunKeel.config");
ObjectInputStream input = new ObjectInputStream(file);
Vector sentencias = (Vector) ((Vector) input.readObject()).elementAt(0);
input.close();
jProgressBar1.setMinimum(0);
jProgressBar1.setMaximum(sentencias.size());
jProgressBar1.setValue(parent.paso);
boolean para = false;
for (int i = parent.paso; i < sentencias.size() && !para; i++) {
parent.paso = i;
String comando = (String) sentencias.elementAt(i);
jTextArea1.append("\nExecuting: " + comando);
pr = Runtime.getRuntime().exec(comando);
BufferedReader error = new BufferedReader(new InputStreamReader(pr.getErrorStream()));
BufferedReader salida = new BufferedReader(new InputStreamReader(pr.getInputStream()));
pr.waitFor();
// Error messages
String line = null;
if (pr.exitValue() != 0) {
while ((line = error.readLine()) != null) {
jTextArea1.append("\n" + line);
}
jTextArea1.append("\nError: exit value not 0");
para = true;
JOptionPane.showMessageDialog(parent, "Error running experiment",
"Run Keel",
JOptionPane.ERROR_MESSAGE);
} else {
jProgressBar1.setValue(i + 1);
}
// Standard output
line = salida.readLine();
if (line != null) {
jTextArea2.append("\n\n--> Output: " + comando);
jTextArea2.append("\n\n" + line);
while ((line = salida.readLine()) != null) {
jTextArea2.append("\n" + line);
}
}
}
if (!para) {
parent.paso = 0;
JOptionPane.showMessageDialog(parent,
"Experiment completed successfully",
"Run Keel",
JOptionPane.INFORMATION_MESSAGE);
}
} catch (Exception ex) {
jTextArea1.append("\n" + ex.toString());
JOptionPane.showMessageDialog(parent, "Error running experiment",
"Run Keel",
JOptionPane.ERROR_MESSAGE);
}
jTextArea1.append("\n");
jButton1.setEnabled(true);
jButton2.setEnabled(false);
jButton3.setEnabled(true);
}
}
void jButton3_actionPerformed(ActionEvent e) {
TestsResults dialogo = new TestsResults(this, "Results", true);
// Center dialog
dialogo.setSize(800, 600);
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = dialogo.getSize();
if (frameSize.height > screenSize.height) {
frameSize.height = screenSize.height;
}
if (frameSize.width > screenSize.width) {
frameSize.width = screenSize.width;
}
dialogo.setLocation((screenSize.width - frameSize.width) / 2,
(screenSize.height - frameSize.height) / 2);
dialogo.setResizable(false);
dialogo.setVisible(true);
}
/**
* List the content of a directory (Not used, only for future use)
* @param directory
* @param result
*/
private void listDirectory(String directory, Vector result) {
File file = new File(directory);
File listado[] = file.listFiles();
if (listado == null) {
return;
}
for (int i = 0; i < listado.length; i++) {
if (listado[i].isFile()) {
result.add(new String(directory + "/" + listado[i].getName()));
} else {
listDirectory(directory + "/" + listado[i].getName(), result);
}
}
}
}
class Frame1_jButton1_actionAdapter
implements java.awt.event.ActionListener {
Frame1 adaptee;
Frame1_jButton1_actionAdapter(Frame1 adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jButton1_actionPerformed(e);
}
}
class Frame1_jButton2_actionAdapter
implements java.awt.event.ActionListener {
Frame1 adaptee;
Frame1_jButton2_actionAdapter(Frame1 adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jButton2_actionPerformed(e);
}
}
class Frame1_jButton3_actionAdapter
implements java.awt.event.ActionListener {
Frame1 adaptee;
Frame1_jButton3_actionAdapter(Frame1 adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jButton3_actionPerformed(e);
}
}