-
Florian Lugou authoredFlorian Lugou authored
JDialogTextProcess.java 7.25 KiB
/* Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Ludovic Apvrille
*
* ludovic.apvrille AT enst.fr
*
* This software is a computer program whose purpose is to allow the
* edition of TURTLE analysis, design and deployment diagrams, to
* allow the generation of RT-LOTOS or Java code from this diagram,
* and at last to allow the analysis of formal validation traces
* obtained from external tools, e.g. RTL from LAAS-CNRS and CADP
* from INRIA Rhone-Alpes.
*
* This software is governed by the CeCILL license under French law and
* abiding by the rules of distribution of free software. You can use,
* modify and/ or redistribute the software under the terms of the CeCILL
* license as circulated by CEA, CNRS and INRIA at the following URL
* "http://www.cecill.info".
*
* As a counterpart to the access to the source code and rights to copy,
* modify and redistribute granted by the license, users are provided only
* with a limited warranty and the software's author, the holder of the
* economic rights, and the successive licensors have only limited
* liability.
*
* In this respect, the user's attention is drawn to the risks associated
* with loading, using, modifying and/or developing or reproducing the
* software by the user in light of its specific status of free software,
* that may mean that it is complicated to manipulate, and that also
* therefore means that it is reserved for developers and experienced
* professionals having in-depth computer knowledge. Users are therefore
* encouraged to load and test the software's suitability as regards their
* requirements in conditions enabling the security of their systems and/or
* data to be ensured and, more generally, to use and operate it in the
* same conditions as regards security.
*
* The fact that you are presently reading this means that you have had
* knowledge of the CeCILL license and that you accept its terms.
*/
package ui.window;
import launcher.LauncherException;
import launcher.RshClient;
import myutil.Conversion;
import myutil.FileUtils;
import ui.util.IconManager;
import ui.JTextAreaWriter;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
* Class JDialogTextProcess
* Dialog for managing remote processes call
* Creation: 16/12/2003
* @version 1.0 16/12/2003
* @author Ludovic APVRILLE
*/
public class JDialogTextProcess extends javax.swing.JDialog implements ActionListener, Runnable {
protected String cmd;
protected String fileName;
protected String spec;
protected String host;
protected int mode;
protected RshClient rshc;
protected Thread t;
protected final static int NOT_STARTED = 0;
protected final static int STARTED = 1;
protected final static int STOPPED = 2;
//components
protected JTextArea jta;
private JTextAreaWriter textAreaWriter;
protected JButton start;
protected JButton stop;
protected JButton close;
/** Creates new form */
public JDialogTextProcess(Frame f, String title, String _cmd, String _fileName, String _spec, String _host) {
super(f, title, true);
cmd = _cmd;
fileName = _fileName;
spec = _spec;
host = _host;
initComponents ();
myInitComponents();
pack();
}
protected void myInitComponents() {
mode = NOT_STARTED;
setButtons();
}
protected void initComponents () {
Container c = getContentPane();
setFont(new Font("Helvetica", Font.PLAIN, 14));
c.setLayout(new BorderLayout());
//setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
jta = new JTextArea();
jta.setEditable(false);
jta.setMargin(new Insets(10, 10, 10, 10));
jta.setTabSize(3);
jta.append("Click on 'start' to launch process\n");
Font f = new Font("Courrier", Font.BOLD, 12);
jta.setFont(f);
JScrollPane jsp = new JScrollPane(jta, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
textAreaWriter = new JTextAreaWriter( jta );
c.add(jsp, BorderLayout.CENTER);
start = new JButton("Start", IconManager.imgic53);
stop = new JButton("Stop", IconManager.imgic55);
close = new JButton("Close", IconManager.imgic27);
start.setPreferredSize(new Dimension(100, 30));
stop.setPreferredSize(new Dimension(100, 30));
close.setPreferredSize(new Dimension(100, 30));
start.addActionListener(this);
stop.addActionListener(this);
close.addActionListener(this);
JPanel jp = new JPanel();
jp.add(start);
jp.add(stop);
jp.add(close);
c.add(jp, BorderLayout.SOUTH);
}
public void actionPerformed(ActionEvent evt) {
String command = evt.getActionCommand();
// Compare the action command to the known actions.
if (command.equals("Start")) {
startProcess();
} else if (command.equals("Stop")) {
stopProcess();
} else if (command.equals("Close")) {
closeDialog();
}
}
public void closeDialog() {
dispose();
}
public void stopProcess() {
try {
rshc.stopCommand();
} catch (LauncherException le) {
}
rshc = null;
mode = STOPPED;
setButtons();
}
public void startProcess() {
t = new Thread(this);
mode = STARTED;
setButtons();
t.start();
}
public void run() {
rshc = new RshClient(cmd, host);
RshClient rshctmp = rshc;
int id = 0;
try {
id = rshc.getId();
fileName = FileUtils.addBeforeFileExtension(fileName, "_" + id);
jta.append("Sending file data\n");
rshc.sendFileData(fileName, spec);
jta.append("Sending process request\n");
rshc.setCmd(Conversion.replaceAllString(cmd, "__FILENAME", fileName));
rshc.sendExecuteCommandRequest();
} catch (LauncherException le) {
jta.append(le.getMessage() + "\n");
mode = STOPPED;
setButtons();
return;
} catch (Exception e) {
mode = STOPPED;
setButtons();
return;
}
try {
jta.append("\nRTL Process:\n------------------\n");
rshc.writeCommandMessages( textAreaWriter );
rshc.deleteFile(fileName);
rshc.deleteFile(fileName+".sim");
rshc.freeId(id);
} catch (LauncherException le) {
jta.append(le.getMessage()+ "\n");
mode = STOPPED;
setButtons();
try{
if (rshctmp != null) {
rshctmp.freeId(id);
}
} catch (LauncherException leb) {}
return;
} catch (Exception e) {
mode = STOPPED;
setButtons();
try{
if (rshctmp != null) {
rshctmp.freeId(id);
}
} catch (LauncherException leb) {}
return;
}
mode = STOPPED;
setButtons();
jta.append("\n------------------\nRTL process stopped\n");
}
protected void setButtons() {
switch(mode) {
case NOT_STARTED:
start.setEnabled(true);
stop.setEnabled(false);
close.setEnabled(true);
break;
case STARTED:
start.setEnabled(false);
stop.setEnabled(true);
close.setEnabled(true);
break;
case STOPPED:
default:
start.setEnabled(false);
stop.setEnabled(false);
close.setEnabled(true);
break;
}
}
}