/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
/*
* ScriptPanel.java
*
* Created on Jan 6, 2010, 9:22:09 AM
*/
package ngmfconsole;
import static ngmfconsole.Main.logger;
import java.awt.Color;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintStream;
import java.io.Writer;
import java.util.Properties;
import java.util.logging.Level;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;
/**
*
* @author od
*/
public class SimPanel extends javax.swing.JPanel {
private static final long serialVersionUID = 7070640351201952343L;
//
Console console;
File file = newFile;
boolean modified;
long lastModified;
Thread task;
//
static final File newFile = new File("NewSim");
static final String INSTALLING = "Runtime installation in progress, wait...";
static final ImageIcon RUNNING = new ImageIcon(SimPanel.class.getResource("/ngmfconsole/resources/running.gif"));
//
// quoting for Win/Linux/Mac
static final String q = File.pathSeparatorChar == ';' ? "\"" : "";
//
OutputStream out = new OutputStream() {
@Override
public void write(int b) throws IOException {
printStdout(String.valueOf((char) b));
}
@Override
public void write(byte[] b, int off, int len) throws IOException {
printStdout(new String(b, off, len));
}
@Override
public void write(byte[] b) throws IOException {
write(b, 0, b.length);
}
};
//
PrintStream sout = new PrintStream(out, true);
SimPanel(Console con) {
this.console = con;
initComponents();
setRunningIndicator(false);
syslogCombo.addItem(Level.OFF);
syslogCombo.addItem(Level.ALL);
syslogCombo.addItem(Level.SEVERE);
syslogCombo.addItem(Level.WARNING);
syslogCombo.addItem(Level.INFO);
syslogCombo.addItem(Level.CONFIG);
syslogCombo.addItem(Level.FINE);
syslogCombo.addItem(Level.FINER);
syslogCombo.addItem(Level.FINEST);
syslogCombo.setSelectedItem(Level.OFF);
script.addKeyListener(new KeyAdapter() {
@Override
public void keyTyped(KeyEvent e) {
if (e.isControlDown() || e.isAltDown() || e.isConsumed()) {
return;
}
if (!modified) {
modified = true;
console.toggleTitle(SimPanel.this);
}
}
@Override
public void keyPressed(KeyEvent e) {
if (!e.isControlDown()) {
return;
}
if (e.getKeyCode() == KeyEvent.VK_S) {
save();
} else if (e.getKeyCode() == KeyEvent.VK_R) {
run();
}
}
});
script.setFont(new java.awt.Font("Monospaced", 0, script.getFont().getSize())); // NOI18N
stdout.setFont(new java.awt.Font("Monospaced", 0, stdout.getFont().getSize())); // NOI18N
stderr.setFont(new java.awt.Font("Monospaced", 0, stderr.getFont().getSize())); // NOI18N
split.setResizeWeight(0.75);
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
split.setDividerLocation(0.65);
}
});
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
split = new javax.swing.JSplitPane();
jScrollPane1 = new javax.swing.JScrollPane();
script = new javax.swing.JTextArea();
jTabbedPane1 = new javax.swing.JTabbedPane();
jScrollPane2 = new javax.swing.JScrollPane();
stdout = new javax.swing.JTextArea();
jScrollPane3 = new javax.swing.JScrollPane();
stderr = new javax.swing.JTextArea();
jPanel1 = new javax.swing.JPanel();
runner = new javax.swing.JLabel();
jToolBar1 = new javax.swing.JToolBar();
saveButton = new javax.swing.JButton();
jSeparator2 = new javax.swing.JToolBar.Separator();
runButton = new javax.swing.JButton();
stopButton = new javax.swing.JButton();
jSeparator1 = new javax.swing.JToolBar.Separator();
editButton = new javax.swing.JButton();
graphButton = new javax.swing.JButton();
docButton = new javax.swing.JButton();
buildButton = new javax.swing.JButton();
outputButton = new javax.swing.JButton();
clearButton = new javax.swing.JButton();
jSeparator3 = new javax.swing.JToolBar.Separator();
jPanel3 = new javax.swing.JPanel();
logLabel = new javax.swing.JLabel();
syslogCombo = new javax.swing.JComboBox();
setName("Form"); // NOI18N
setLayout(new java.awt.BorderLayout());
split.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);
split.setName("split"); // NOI18N
split.setOneTouchExpandable(true);
jScrollPane1.setName("jScrollPane1"); // NOI18N
script.setColumns(20);
script.setRows(5);
script.setName("script"); // NOI18N
jScrollPane1.setViewportView(script);
split.setLeftComponent(jScrollPane1);
jTabbedPane1.setTabPlacement(javax.swing.JTabbedPane.BOTTOM);
jTabbedPane1.setName("jTabbedPane1"); // NOI18N
jScrollPane2.setName("jScrollPane2"); // NOI18N
stdout.setColumns(20);
stdout.setEditable(false);
stdout.setRows(5);
stdout.setName("stdout"); // NOI18N
jScrollPane2.setViewportView(stdout);
jTabbedPane1.addTab("stdout", jScrollPane2);
jScrollPane3.setName("jScrollPane3"); // NOI18N
stderr.setColumns(20);
stderr.setEditable(false);
stderr.setForeground(java.awt.Color.red);
stderr.setRows(5);
stderr.setName("stderr"); // NOI18N
jScrollPane3.setViewportView(stderr);
jTabbedPane1.addTab("stderr/log", jScrollPane3);
split.setRightComponent(jTabbedPane1);
add(split, java.awt.BorderLayout.CENTER);
jPanel1.setName("jPanel1"); // NOI18N
jPanel1.setLayout(new java.awt.BorderLayout());
runner.setIcon(new javax.swing.ImageIcon(getClass().getResource("/ngmfconsole/resources/running.gif"))); // NOI18N
runner.setText(" ");
runner.setName("runner"); // NOI18N
jPanel1.add(runner, java.awt.BorderLayout.EAST);
jToolBar1.setFloatable(false);
jToolBar1.setRollover(true);
jToolBar1.setName("jToolBar1"); // NOI18N
saveButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/ngmfconsole/resources/oxygen/Devices-media-floppy-icon.png"))); // NOI18N
saveButton.setToolTipText("Save (Ctrl+S)");
saveButton.setFocusable(false);
saveButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
saveButton.setName("saveButton"); // NOI18N
saveButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
saveButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
saveButtonActionPerformed(evt);
}
});
jToolBar1.add(saveButton);
jSeparator2.setName("jSeparator2"); // NOI18N
jToolBar1.add(jSeparator2);
runButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/ngmfconsole/resources/oxygen/Actions-go-next-view-icon.png"))); // NOI18N
runButton.setToolTipText("Run (Ctrl+R)");
runButton.setFocusable(false);
runButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
runButton.setName("runButton"); // NOI18N
runButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
runButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
runButtonActionPerformed(evt);
}
});
jToolBar1.add(runButton);
stopButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/ngmfconsole/resources/oxygen/Actions-process-stop-icon.png"))); // NOI18N
stopButton.setToolTipText("Stop");
stopButton.setEnabled(false);
stopButton.setFocusable(false);
stopButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
stopButton.setName("stopButton"); // NOI18N
stopButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
stopButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
stopButtonActionPerformed(evt);
}
});
jToolBar1.add(stopButton);
jSeparator1.setName("jSeparator1"); // NOI18N
jToolBar1.add(jSeparator1);
editButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/ngmfconsole/resources/oxygen/0-Apps-accessories-calculator-icon.png"))); // NOI18N
editButton.setToolTipText("Parameter Editor");
editButton.setFocusable(false);
editButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
editButton.setName("editButton"); // NOI18N
editButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
editButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
editButtonActionPerformed(evt);
}
});
jToolBar1.add(editButton);
graphButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/ngmfconsole/resources/oxygen/Actions-office-chart-bar-icon.png"))); // NOI18N
graphButton.setToolTipText("Analysis");
graphButton.setFocusable(false);
graphButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
graphButton.setName("graphButton"); // NOI18N
graphButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
graphButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
graphButtonActionPerformed(evt);
}
});
jToolBar1.add(graphButton);
docButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/ngmfconsole/resources/oxygen/Apps-preferences-plugin-script-icon.png"))); // NOI18N
docButton.setToolTipText("Generate Docbook5 documentation.");
docButton.setFocusable(false);
docButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
docButton.setName("docButton"); // NOI18N
docButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
docButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
docButtonActionPerformed(evt);
}
});
jToolBar1.add(docButton);
buildButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/ngmfconsole/resources/oxygen/Categories-applications-development-icon.png"))); // NOI18N
buildButton.setFocusable(false);
buildButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
buildButton.setName("buildButton"); // NOI18N
buildButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
buildButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
buildButtonActionPerformed(evt);
}
});
jToolBar1.add(buildButton);
outputButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/ngmfconsole/resources/oxygen/Actions-document-open-recent-icon.png"))); // NOI18N
outputButton.setToolTipText("Last Output Folder");
outputButton.setFocusable(false);
outputButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
outputButton.setName("outputButton"); // NOI18N
outputButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
outputButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
outputButtonActionPerformed(evt);
}
});
jToolBar1.add(outputButton);
clearButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/ngmfconsole/resources/oxygen/Apps-utilities-terminal-icon.png"))); // NOI18N
clearButton.setToolTipText("Clear Console output");
clearButton.setFocusable(false);
clearButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
clearButton.setName("clearButton"); // NOI18N
clearButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
clearButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
clearButtonActionPerformed(evt);
}
});
jToolBar1.add(clearButton);
jSeparator3.setName("jSeparator3"); // NOI18N
jToolBar1.add(jSeparator3);
jPanel3.setName("jPanel3"); // NOI18N
logLabel.setText("Logging:");
logLabel.setToolTipText("Set Logging level");
logLabel.setName("logLabel"); // NOI18N
syslogCombo.setMaximumSize(new java.awt.Dimension(120, 2000));
syslogCombo.setName("syslogCombo"); // NOI18N
syslogCombo.setPreferredSize(new java.awt.Dimension(120, 24));
javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);
jPanel3.setLayout(jPanel3Layout);
jPanel3Layout.setHorizontalGroup(
jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel3Layout.createSequentialGroup()
.addGap(6, 6, 6)
.addComponent(logLabel)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(syslogCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
jPanel3Layout.setVerticalGroup(
jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(logLabel)
.addComponent(syslogCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
);
jToolBar1.add(jPanel3);
jPanel1.add(jToolBar1, java.awt.BorderLayout.CENTER);
add(jPanel1, java.awt.BorderLayout.NORTH);
}// </editor-fold>//GEN-END:initComponents
void setEnableControls(boolean enable) {
runButton.setEnabled(enable);
stopButton.setEnabled(!enable);
saveButton.setEnabled(enable);
if (!isGroovy()) {
buildButton.setEnabled(enable);
logLabel.setEnabled(enable);
syslogCombo.setEnabled(enable);
graphButton.setEnabled(enable);
editButton.setEnabled(enable);
// digestButton.setEnabled(enable);
outputButton.setEnabled(enable);
}
}
void run() {
if (console.isInstalling()) {
sout.println(INSTALLING);
return;
}
if ((script.getText() == null) || (script.getText().isEmpty())) {
return;
}
setEnableControls(false);
setRunningIndicator(true);
save();
task = new Thread() {
@Override
public void run() {
try {
Processes1 p = createProcess("-r");
if (p == null) {
sout.println("\n\nERROR CREATING PROCESS.");
return;
}
sout.println("STARTING: " + file);
int exitValue = p.exec();
if (exitValue == 0) {
sout.println("\n\nDONE.");
}
} catch (Throwable E) {
logger.log(Level.SEVERE, "Error", E);
E.printStackTrace(System.err);
} finally {
setEnableControls(true);
setRunningIndicator(false);
}
}
};
task.start();
}
private void runButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_runButtonActionPerformed
run();
}//GEN-LAST:event_runButtonActionPerformed
private void stopButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_stopButtonActionPerformed
if (task == null || !task.isAlive()) {
return;
}
task.interrupt();
setEnableControls(true);
setRunningIndicator(false);
sout.println("\n\nSTOPPED.");
}//GEN-LAST:event_stopButtonActionPerformed
private void editButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_editButtonActionPerformed
runProcess("-e");
}//GEN-LAST:event_editButtonActionPerformed
private void graphButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_graphButtonActionPerformed
runProcess("-a");
}//GEN-LAST:event_graphButtonActionPerformed
private void docButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_docButtonActionPerformed
runProcess("-d");
}//GEN-LAST:event_docButtonActionPerformed
private void clearButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_clearButtonActionPerformed
// runProcess("-s"); // sign is disabled.
resetOutput();
}//GEN-LAST:event_clearButtonActionPerformed
private void saveButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_saveButtonActionPerformed
save();
}//GEN-LAST:event_saveButtonActionPerformed
private void outputButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_outputButtonActionPerformed
runProcess("-o");
}//GEN-LAST:event_outputButtonActionPerformed
private void buildButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buildButtonActionPerformed
runProcess("-b");
}//GEN-LAST:event_buildButtonActionPerformed
void save() {
save(false);
}
void runProcess(final String flag) {
if (console.isInstalling()) {
sout.println(INSTALLING);
return;
}
if ((script.getText() == null) || (script.getText().isEmpty())) {
return;
}
save();
new Thread() {
@Override
public void run() {
try {
Processes1 p = createProcess(flag);
if (p == null) {
return;
}
p.exec();
} catch (Throwable E) {
logger.log(Level.SEVERE, "Error", E);
E.printStackTrace(System.out);
}
}
}.start();
}
private void setRunningIndicator(boolean show) {
runner.setIcon(show ? RUNNING : null);
}
boolean checkClose() {
if (!modified) {
return true;
} else {
Object[] options = {"Save", "Discard", "Cancel"};
int n = JOptionPane.showOptionDialog(console, "File " + file + " is modified.",
"Warning", JOptionPane.YES_NO_CANCEL_OPTION,
JOptionPane.QUESTION_MESSAGE, null, options, options[2]);
if (n == 0) {
save(false);
return true;
}
if (n == 2) {
return false;
}
}
return true;
}
File getFile() {
return file == newFile ? null : file;
}
boolean isModified() {
return modified;
}
boolean isGroovy() {
return file != null && file.getName().endsWith("groovy");
}
boolean isSim() {
return file != null && (file.getName().endsWith("sim")
|| file.getName().endsWith("luca")
|| file.getName().endsWith("fast")
|| file.getName().endsWith("esp")
|| file.getName().endsWith("dds"));
}
void save(boolean as) {
if (as) {
JFileChooser fc = new JFileChooser(console.getOpenChooser());
fc.setDialogTitle("Save Simulation As");
if (file.isAbsolute()) {
fc.setSelectedFile(file);
}
int result = fc.showSaveDialog(console);
if (result == JFileChooser.APPROVE_OPTION) {
file = fc.getSelectedFile();
} else {
return;
}
}
if (!file.isAbsolute()) {
JFileChooser fc = new JFileChooser(console.getOpenChooser());
int result = fc.showSaveDialog(console);
if (result == JFileChooser.APPROVE_OPTION) {
file = fc.getSelectedFile();
} else {
return;
}
}
try {
BufferedWriter b = new BufferedWriter(new FileWriter(file));
b.write(script.getText());
b.close();
modified = false;
console.toggleTitle(SimPanel.this);
enableForGroovy();
} catch (IOException e) {
logger.log(Level.SEVERE, "Error", e);
e.printStackTrace(System.err);
}
}
void loadFile(File file) {
try {
if (file.isAbsolute() && file.exists()) {
BufferedReader in = new BufferedReader(new FileReader(file));
String str;
StringBuilder b = new StringBuilder();
while ((str = in.readLine()) != null) {
b.append(str).append('\n');
}
in.close();
lastModified = file.lastModified();
this.file = file;
script.setText(b.toString());
script.setCaretPosition(0);
enableForGroovy();
}
} catch (IOException e) {
logger.log(Level.SEVERE, "Error", e);
e.printStackTrace(System.err);
}
}
void enableForGroovy() {
saveButton.setEnabled(true);
runButton.setEnabled(false);
clearButton.setEnabled(false);
editButton.setEnabled(false);
graphButton.setEnabled(false);
docButton.setEnabled(false);
syslogCombo.setEnabled(false);
logLabel.setEnabled(false);
outputButton.setEnabled(false);
buildButton.setEnabled(false);
if (isGroovy()) {
runButton.setEnabled(true);
clearButton.setEnabled(true);
return;
}
if (isSim()) {
buildButton.setEnabled(true);
runButton.setEnabled(true);
editButton.setEnabled(true);
graphButton.setEnabled(true);
docButton.setEnabled(true);
syslogCombo.setEnabled(true);
logLabel.setEnabled(true);
outputButton.setEnabled(true);
clearButton.setEnabled(true);
return;
}
}
String getLogLevel() {
return syslogCombo.getSelectedItem().toString();
}
Processes1 createProcess(String flag) throws Exception {
String[] jvmoptions = {};
String work_dir = console.getWork();
String java_home = Main.java_home();
String oms_version = Utils.getOMSAppVersion();
File conf = new File(console.getWork() + File.separatorChar + Console.OMS_DIR, Console.PROJECT_PROPERTIES);
if (conf.exists()) {
Properties p = new Properties();
FileReader fr = new FileReader(conf);
p.load(fr);
fr.close();
String jvmo = p.getProperty(Console.PREF_JAVA_OPTIONS);
if (jvmo != null) {
jvmoptions = jvmo.trim().split("\\s+");
}
work_dir = p.getProperty(Console.PREF_WORK_DIR, work_dir);
java_home = p.getProperty(Console.PREF_JAVA_HOME, java_home);
oms_version = p.getProperty(Console.PREF_OMS_VERSION, oms_version);
}
// if (oms_version.compareToIgnoreCase(Utils.getOMSAppVersion()) > 0) {
// sout.println("This project requires OMS version: '" + oms_version + "', running " + Utils.getOMSAppVersion());
// return null;
// }
if (!new File(java_home).exists()) {
sout.println("Java home not found: " + java_home);
return null;
}
File oms3Home = Console.getOMSHome(oms_version);
if (!oms3Home.exists()) {
sout.println("OMS3 home not found: " + oms3Home);
return null;
}
if (!new File(work_dir).exists()) {
sout.println("Working directory not found: " + work_dir);
return null;
}
File omsall = new File(oms3Home, Console.jars[0]);
if (!omsall.exists()) {
sout.println("Not found: " + omsall);
return null;
}
if (console.getClearOutput()) {
resetOutput();
}
Processes1 p = new Processes1(new File(java_home + File.separator + "bin" + File.separator + "java"));
p.setWorkingDirectory(new File(work_dir));
p.setArguments(jvmoptions,
q + "-Doms3.work=" + console.getWork() + q,
"-cp", q + Utils.cp_all(oms3Home, console.getWork()) + q,
"oms3.CLI",
"-l", getLogLevel(),
flag, q + file.toString() + q);
p.redirectOutput(new Writer() {
@Override
public void write(char[] cbuf, int off, int len) throws IOException {
printStdout(new String(cbuf, off, len));
}
@Override
public void flush() throws IOException {
}
@Override
public void close() throws IOException {
}
});
p.redirectError(new Writer() {
@Override
public void write(char[] cbuf, int off, int len) throws IOException {
jTabbedPane1.setSelectedIndex(1);
jTabbedPane1.setForegroundAt(1, Color.red);
// jTabbedPane1.setBackgroundAt(1, Color.red);
printStderr(new String(cbuf, off, len));
}
@Override
public void flush() throws IOException {
}
@Override
public void close() throws IOException {
}
});
return p;
}
void resetOutput() {
stdout.setText("");
stderr.setText("");
jTabbedPane1.setSelectedIndex(0);
jTabbedPane1.setForegroundAt(1, Color.BLACK);
Runtime.getRuntime().gc();
}
void printStderr(String text) {
stderr.append(text);
stderr.setCaretPosition(stderr.getDocument().getLength() - (text.length() - 1));
}
void printStdout(String text) {
if (text.lastIndexOf("%r") > 0) {
stdout.replaceRange(text.substring(text.lastIndexOf("%r") + 2),
stdout.getText().lastIndexOf('\n') + 1,
stdout.getText().length());
} else {
stdout.append(text);
stdout.setCaretPosition(stdout.getDocument().getLength() - (text.length() - 1));
}
}
// public static void main(String[] args) {
// System.out.println("3.1rc8".compareToIgnoreCase("3.1rc10"));
// }
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton buildButton;
private javax.swing.JButton clearButton;
private javax.swing.JButton docButton;
private javax.swing.JButton editButton;
private javax.swing.JButton graphButton;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel3;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JScrollPane jScrollPane3;
private javax.swing.JToolBar.Separator jSeparator1;
private javax.swing.JToolBar.Separator jSeparator2;
private javax.swing.JToolBar.Separator jSeparator3;
private javax.swing.JTabbedPane jTabbedPane1;
private javax.swing.JToolBar jToolBar1;
private javax.swing.JLabel logLabel;
private javax.swing.JButton outputButton;
private javax.swing.JButton runButton;
private javax.swing.JLabel runner;
private javax.swing.JButton saveButton;
private javax.swing.JTextArea script;
private javax.swing.JSplitPane split;
private javax.swing.JTextArea stderr;
private javax.swing.JTextArea stdout;
private javax.swing.JButton stopButton;
private javax.swing.JComboBox syslogCombo;
// End of variables declaration//GEN-END:variables
}