001/*
002 * IzPack - Copyright 2001-2005 Julien Ponge, All Rights Reserved.
003 * 
004 * http://www.izforge.com/izpack/
005 * http://developer.berlios.de/projects/izpack/
006 * 
007 * Copyright 2003 Tino Schwarze
008 * 
009 * Licensed under the Apache License, Version 2.0 (the "License");
010 * you may not use this file except in compliance with the License.
011 * You may obtain a copy of the License at
012 * 
013 *     http://www.apache.org/licenses/LICENSE-2.0
014 *     
015 * Unless required by applicable law or agreed to in writing, software
016 * distributed under the License is distributed on an "AS IS" BASIS,
017 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
018 * See the License for the specific language governing permissions and
019 * limitations under the License.
020 */
021package com.izforge.izpack.panels;
022
023import java.awt.Dimension;
024import java.awt.Font;
025import java.awt.GridBagConstraints;
026import java.awt.GridBagLayout;
027import java.awt.Insets;
028import java.awt.event.ActionEvent;
029import java.awt.event.ActionListener;
030import java.io.File;
031import java.io.IOException;
032import java.util.Iterator;
033
034import javax.swing.BoxLayout;
035import javax.swing.JButton;
036import javax.swing.JComboBox;
037import javax.swing.JDialog;
038import javax.swing.JFileChooser;
039import javax.swing.JLabel;
040import javax.swing.JPanel;
041import javax.swing.JProgressBar;
042import javax.swing.JScrollPane;
043import javax.swing.JTabbedPane;
044import javax.swing.JTextArea;
045import javax.swing.SwingConstants;
046
047import net.n3.nanoxml.XMLElement;
048
049import com.izforge.izpack.gui.ButtonFactory;
050import com.izforge.izpack.gui.LabelFactory;
051import com.izforge.izpack.installer.CompileHandler;
052import com.izforge.izpack.installer.CompileResult;
053import com.izforge.izpack.installer.CompileWorker;
054import com.izforge.izpack.installer.InstallData;
055import com.izforge.izpack.installer.InstallerFrame;
056import com.izforge.izpack.installer.IzPanel;
057
058/**
059 * The compile panel class.
060 * 
061 * This class allows .java files to be compiled after installation.
062 * 
063 * Parts of the code have been taken from InstallPanel.java and modified a lot.
064 * 
065 * @author Tino Schwarze
066 * @author Julien Ponge
067 */
068public class CompilePanel extends IzPanel implements ActionListener, CompileHandler
069{
070
071    /**
072     * 
073     */
074    private static final long serialVersionUID = 3258408430669674552L;
075
076    /** The combobox for compiler selection. */
077    protected JComboBox compilerComboBox;
078
079    /** The combobox for compiler argument selection. */
080    protected JComboBox argumentsComboBox;
081
082    /** The start button. */
083    protected JButton startButton;
084
085    /** The browse button. */
086    protected JButton browseButton;
087
088    /** The tip label. */
089    protected JLabel tipLabel;
090
091    /** The operation label . */
092    protected JLabel opLabel;
093
094    /** The pack progress bar. */
095    protected JProgressBar packProgressBar;
096
097    /** The operation label . */
098    protected JLabel overallLabel;
099
100    /** The overall progress bar. */
101    protected JProgressBar overallProgressBar;
102
103    /** True if the compilation has been done. */
104    private boolean validated = false;
105
106    /** The compilation worker. Does all the work. */
107    private CompileWorker worker;
108
109    /** Number of jobs to compile. Used for progress indication. */
110    private int noOfJobs;
111
112    /**
113     * The constructor.
114     * 
115     * @param parent The parent window.
116     * @param idata The installation data.
117     */
118    public CompilePanel(InstallerFrame parent, InstallData idata) throws IOException
119    {
120        super(parent, idata);
121
122        this.worker = new CompileWorker(idata, this);
123
124        GridBagConstraints gridBagConstraints;
125
126        JLabel heading = new JLabel();
127        // put everything but the heading into it's own panel
128        // (to center it vertically)
129        JPanel subpanel = new JPanel();
130        JLabel compilerLabel = new JLabel();
131        compilerComboBox = new JComboBox();
132        this.browseButton = ButtonFactory.createButton(parent.langpack
133                .getString("CompilePanel.browse"), idata.buttonsHColor);
134        JLabel argumentsLabel = new JLabel();
135        this.argumentsComboBox = new JComboBox();
136        this.startButton = ButtonFactory.createButton(parent.langpack
137                .getString("CompilePanel.start"), idata.buttonsHColor);
138        this.tipLabel = LabelFactory.create(parent.langpack.getString("CompilePanel.tip"),
139                parent.icons.getImageIcon("tip"), SwingConstants.TRAILING);
140        this.opLabel = new JLabel();
141        packProgressBar = new JProgressBar();
142        this.overallLabel = new JLabel();
143        this.overallProgressBar = new JProgressBar();
144
145        setLayout(new GridBagLayout());
146
147        Font font = heading.getFont();
148        font = font.deriveFont(Font.BOLD, font.getSize() * 2.0f);
149        heading.setFont(font);
150        heading.setHorizontalAlignment(SwingConstants.CENTER);
151        heading.setText(parent.langpack.getString("CompilePanel.heading"));
152        heading.setVerticalAlignment(SwingConstants.TOP);
153        gridBagConstraints = new GridBagConstraints();
154        gridBagConstraints.gridy = 0;
155        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
156        gridBagConstraints.anchor = GridBagConstraints.NORTH;
157        gridBagConstraints.weightx = 1.0;
158        gridBagConstraints.weighty = 0.1;
159        add(heading, gridBagConstraints);
160
161        gridBagConstraints = new GridBagConstraints();
162        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
163        gridBagConstraints.anchor = GridBagConstraints.CENTER;
164        gridBagConstraints.gridy = 1;
165        gridBagConstraints.weightx = 1.0;
166        gridBagConstraints.weighty = 0.9;
167        add(subpanel, gridBagConstraints);
168
169        subpanel.setLayout(new GridBagLayout());
170
171        int row = 0;
172
173        compilerLabel.setHorizontalAlignment(SwingConstants.LEFT);
174        compilerLabel.setLabelFor(compilerComboBox);
175        compilerLabel.setText(parent.langpack.getString("CompilePanel.choose_compiler"));
176        gridBagConstraints = new GridBagConstraints();
177        gridBagConstraints.gridy = row;
178        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
179        // gridBagConstraints.weighty = 0.1;
180        subpanel.add(compilerLabel, gridBagConstraints);
181
182        compilerComboBox.setEditable(true);
183        gridBagConstraints = new GridBagConstraints();
184        gridBagConstraints.gridy = row++;
185        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
186        // gridBagConstraints.weighty = 0.1;
187
188        Iterator it = this.worker.getAvailableCompilers().iterator();
189
190        while (it.hasNext())
191            compilerComboBox.addItem((String) it.next());
192
193        subpanel.add(compilerComboBox, gridBagConstraints);
194
195        gridBagConstraints = new GridBagConstraints();
196        gridBagConstraints.gridy = row++;
197        gridBagConstraints.gridx = 1;
198        gridBagConstraints.anchor = GridBagConstraints.EAST;
199        browseButton.addActionListener(this);
200        subpanel.add(browseButton, gridBagConstraints);
201
202        argumentsLabel.setHorizontalAlignment(SwingConstants.LEFT);
203        argumentsLabel.setLabelFor(argumentsComboBox);
204        argumentsLabel.setText(parent.langpack.getString("CompilePanel.additional_arguments"));
205        // argumentsLabel.setToolTipText("");
206        gridBagConstraints = new GridBagConstraints();
207        gridBagConstraints.gridy = row;
208        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
209        gridBagConstraints.weightx = 0.5;
210        // gridBagConstraints.weighty = 0.1;
211        subpanel.add(argumentsLabel, gridBagConstraints);
212
213        argumentsComboBox.setEditable(true);
214        gridBagConstraints = new GridBagConstraints();
215        gridBagConstraints.gridy = row++;
216        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
217        gridBagConstraints.weightx = 0.5;
218        // gridBagConstraints.weighty = 0.1;
219
220        it = this.worker.getAvailableArguments().iterator();
221
222        while (it.hasNext())
223            argumentsComboBox.addItem((String) it.next());
224
225        subpanel.add(argumentsComboBox, gridBagConstraints);
226
227        // leave some space above the label
228        gridBagConstraints.insets = new Insets(10, 0, 0, 0);
229        gridBagConstraints = new GridBagConstraints();
230        gridBagConstraints.gridy = row++;
231        gridBagConstraints.gridwidth = 2;
232        gridBagConstraints.fill = GridBagConstraints.NONE;
233        gridBagConstraints.anchor = GridBagConstraints.NORTHWEST;
234        subpanel.add(tipLabel, gridBagConstraints);
235
236        opLabel.setText(" ");
237        gridBagConstraints = new GridBagConstraints();
238        gridBagConstraints.gridy = row++;
239        gridBagConstraints.gridwidth = 2;
240        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
241        subpanel.add(opLabel, gridBagConstraints);
242
243        packProgressBar.setValue(0);
244        packProgressBar.setString(parent.langpack.getString("CompilePanel.progress.initial"));
245        packProgressBar.setStringPainted(true);
246        gridBagConstraints = new GridBagConstraints();
247        gridBagConstraints.gridy = row++;
248        gridBagConstraints.gridwidth = 2;
249        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
250        gridBagConstraints.anchor = GridBagConstraints.SOUTH;
251        subpanel.add(packProgressBar, gridBagConstraints);
252
253        overallLabel.setText(parent.langpack.getString("CompilePanel.progress.overall"));
254        gridBagConstraints = new GridBagConstraints();
255        gridBagConstraints.gridy = row++;
256        gridBagConstraints.gridwidth = 2;
257        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
258        subpanel.add(overallLabel, gridBagConstraints);
259
260        overallProgressBar.setValue(0);
261        overallProgressBar.setString("");
262        overallProgressBar.setStringPainted(true);
263        gridBagConstraints = new GridBagConstraints();
264        gridBagConstraints.gridy = row++;
265        gridBagConstraints.gridwidth = 2;
266        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
267        gridBagConstraints.anchor = GridBagConstraints.SOUTH;
268        subpanel.add(overallProgressBar, gridBagConstraints);
269
270        startButton.setText(parent.langpack.getString("CompilePanel.start"));
271        startButton.addActionListener(this);
272        gridBagConstraints = new GridBagConstraints();
273        gridBagConstraints.gridx = 0;
274        gridBagConstraints.gridwidth = 2;
275        gridBagConstraints.gridy = row++;
276        gridBagConstraints.fill = GridBagConstraints.NONE;
277        // leave some space above the button
278        gridBagConstraints.insets = new Insets(5, 0, 0, 0);
279        subpanel.add(startButton, gridBagConstraints);
280    }
281
282    /**
283     * Indicates wether the panel has been validated or not.
284     * 
285     * @return The validation state.
286     */
287    public boolean isValidated()
288    {
289        return validated;
290    }
291
292    /**
293     * Action function, called when the start button is pressed.
294     */
295    public void actionPerformed(ActionEvent e)
296    {
297        if (e.getSource() == this.startButton)
298        {
299            this.worker.setCompiler((String) this.compilerComboBox.getSelectedItem());
300
301            this.worker.setCompilerArguments((String) this.argumentsComboBox.getSelectedItem());
302
303            this.blockGUI();
304            this.worker.startThread();
305        }
306        else if (e.getSource() == this.browseButton)
307        {
308            this.parent.blockGUI();
309            JFileChooser chooser = new JFileChooser();
310            chooser.setCurrentDirectory(new File((String) this.compilerComboBox.getSelectedItem())
311                    .getParentFile());
312            int result = chooser.showDialog(this.parent, this.parent.langpack
313                    .getString("CompilePanel.browse.approve"));
314            if (result == JFileChooser.APPROVE_OPTION)
315            {
316                File file_chosen = chooser.getSelectedFile();
317
318                if (file_chosen.isFile())
319                {
320                    this.compilerComboBox.setSelectedItem(file_chosen.getAbsolutePath());
321                }
322
323            }
324
325            this.parent.releaseGUI();
326        }
327
328    }
329
330    /**
331     * Block the GUI - disalow input.
332     */
333    protected void blockGUI()
334    {
335        // disable all controls
336        this.startButton.setEnabled(false);
337        this.browseButton.setEnabled(false);
338        this.compilerComboBox.setEnabled(false);
339        this.argumentsComboBox.setEnabled(false);
340
341        this.parent.blockGUI();
342    }
343
344    /**
345     * Release the GUI - allow input.
346     * 
347     * @param allowconfig allow the user to enter new configuration
348     */
349    protected void releaseGUI(boolean allowconfig)
350    {
351        // disable all controls
352        if (allowconfig)
353        {
354            this.startButton.setEnabled(true);
355            this.browseButton.setEnabled(true);
356            this.compilerComboBox.setEnabled(true);
357            this.argumentsComboBox.setEnabled(true);
358        }
359
360        this.parent.releaseGUI();
361    }
362
363    /**
364     * An error was encountered.
365     * 
366     * @param error The error information.
367     * @see com.izforge.izpack.installer.CompileHandler
368     */
369    public void handleCompileError(CompileResult error)
370    {
371        String message = error.getMessage();
372        opLabel.setText(message);
373        CompilerErrorDialog dialog = new CompilerErrorDialog(parent, message, idata.buttonsHColor);
374        dialog.show(error);
375
376        if (dialog.getResult() == CompilerErrorDialog.RESULT_IGNORE)
377        {
378            error.setAction(CompileResult.ACTION_CONTINUE);
379        }
380        else if (dialog.getResult() == CompilerErrorDialog.RESULT_RECONFIGURE)
381        {
382            error.setAction(CompileResult.ACTION_RECONFIGURE);
383        }
384        else
385        // default case: abort
386        {
387            error.setAction(CompileResult.ACTION_ABORT);
388        }
389
390    }
391
392    /** The compiler starts. */
393    public void startAction(String name, int noOfJobs)
394    {
395        this.noOfJobs = noOfJobs;
396        overallProgressBar.setMaximum(noOfJobs);
397        parent.lockPrevButton();
398    }
399
400    /** The compiler stops. */
401    public void stopAction()
402    {
403        CompileResult result = this.worker.getResult();
404
405        this.releaseGUI(result.isReconfigure());
406
407        if (result.isContinue())
408        {
409            parent.lockPrevButton();
410
411            packProgressBar.setString(parent.langpack.getString("CompilePanel.progress.finished"));
412            packProgressBar.setEnabled(false);
413            packProgressBar.setValue(packProgressBar.getMaximum());
414
415            overallProgressBar.setValue(this.noOfJobs);
416            String no_of_jobs = Integer.toString(this.noOfJobs);
417            overallProgressBar.setString(no_of_jobs + " / " + no_of_jobs);
418            overallProgressBar.setEnabled(false);
419
420            opLabel.setText(" ");
421            opLabel.setEnabled(false);
422
423            validated = true;
424            idata.installSuccess = true;
425            if (idata.panels.indexOf(this) != (idata.panels.size() - 1)) parent.unlockNextButton();
426        }
427        else
428        {
429            idata.installSuccess = false;
430        }
431
432    }
433
434    /**
435     * Normal progress indicator.
436     * 
437     * @param val The progression value.
438     * @param msg The progression message.
439     */
440    public void progress(int val, String msg)
441    {
442        // Debug.trace ("progress: " + val + " " + msg);
443        packProgressBar.setValue(val + 1);
444        opLabel.setText(msg);
445    }
446
447    /**
448     * Job changing.
449     * 
450     * @param jobName The job name.
451     * @param max The new maximum progress.
452     * @param jobNo The job number.
453     */
454    public void nextStep(String jobName, int max, int jobNo)
455    {
456        packProgressBar.setValue(0);
457        packProgressBar.setMaximum(max);
458        packProgressBar.setString(jobName);
459
460        opLabel.setText("");
461
462        overallProgressBar.setValue(jobNo);
463        overallProgressBar.setString(Integer.toString(jobNo) + " / "
464                + Integer.toString(this.noOfJobs));
465    }
466
467    /** Called when the panel becomes active. */
468    public void panelActivate()
469    {
470        // get compilers again (because they might contain variables from former
471        // panels)
472        Iterator it = this.worker.getAvailableCompilers().iterator();
473
474        compilerComboBox.removeAllItems();
475
476        while (it.hasNext())
477            compilerComboBox.addItem((String) it.next());
478
479        // We clip the panel
480        Dimension dim = parent.getPanelsContainerSize();
481        dim.width = dim.width - (dim.width / 4);
482        dim.height = 150;
483        setMinimumSize(dim);
484        setMaximumSize(dim);
485        setPreferredSize(dim);
486
487        parent.lockNextButton();
488    }
489
490    /** Create XML data for automated installation. */
491    public void makeXMLData(XMLElement panelRoot)
492    {
493        // just save the compiler chosen and the arguments
494        XMLElement compiler = new XMLElement("compiler");
495        compiler.setContent(this.worker.getCompiler());
496        panelRoot.addChild(compiler);
497
498        XMLElement args = new XMLElement("arguments");
499        args.setContent(this.worker.getCompilerArguments());
500        panelRoot.addChild(args);
501    }
502
503    /**
504     * Show a special dialog for compiler errors.
505     * 
506     * This dialog is neccessary because we have lots of information if compilation failed. We'd
507     * also like the user to chose whether to ignore the error or not.
508     */
509    protected class CompilerErrorDialog extends JDialog implements ActionListener
510    {
511
512        private static final long serialVersionUID = 3762537797721995317L;
513
514        /** user closed the dialog without pressing "Ignore" or "Abort" */
515        public static final int RESULT_NONE = 0;
516
517        /** user pressed "Ignore" button */
518        public static final int RESULT_IGNORE = 23;
519
520        /** user pressed "Abort" button */
521        public static final int RESULT_ABORT = 42;
522
523        /** user pressed "Reconfigure" button */
524        public static final int RESULT_RECONFIGURE = 47;
525
526        /** visual goodie: button hightlight color */
527        private java.awt.Color buttonHColor = null;
528
529        /** Creates new form compilerErrorDialog */
530        public CompilerErrorDialog(java.awt.Frame parent, String title, java.awt.Color buttonHColor)
531        {
532            super(parent, title, true);
533            this.buttonHColor = buttonHColor;
534            initComponents();
535        }
536
537        /**
538         * This method is called from within the constructor to initialize the form.
539         * 
540         * Generated with help from NetBeans IDE.
541         */
542        private void initComponents()
543        {
544            JPanel errorMessagePane = new JPanel();
545            errorMessageText = new JTextArea();
546            JTextArea seeBelowText = new JTextArea();
547            JTabbedPane errorDisplayPane = new JTabbedPane();
548            JScrollPane commandScrollPane = new JScrollPane();
549            commandText = new JTextArea();
550            JScrollPane stdOutScrollPane = new JScrollPane();
551            stdOutText = new JTextArea();
552            JScrollPane stdErrScrollPane = new JScrollPane();
553            stdErrText = new JTextArea();
554            JPanel buttonsPanel = new JPanel();
555            reconfigButton = ButtonFactory.createButton(parent.langpack
556                    .getString("CompilePanel.error.reconfigure"), this.buttonHColor);
557            ignoreButton = ButtonFactory.createButton(parent.langpack
558                    .getString("CompilePanel.error.ignore"), this.buttonHColor);
559            abortButton = ButtonFactory.createButton(parent.langpack
560                    .getString("CompilePanel.error.abort"), this.buttonHColor);
561
562            addWindowListener(new java.awt.event.WindowAdapter() {
563
564                public void windowClosing(java.awt.event.WindowEvent evt)
565                {
566                    closeDialog(evt);
567                }
568            });
569
570            errorMessagePane.setLayout(new BoxLayout(errorMessagePane, BoxLayout.Y_AXIS));
571            errorMessageText.setBackground(super.getBackground());
572            errorMessageText.setEditable(false);
573            errorMessageText.setLineWrap(true);
574            // errorMessageText.setText("The compiler does not seem to work. See
575            // below for the command we tried to execute and the results.");
576            // errorMessageText.setToolTipText("null");
577            errorMessageText.setWrapStyleWord(true);
578            errorMessagePane.add(errorMessageText);
579
580            seeBelowText.setBackground(super.getBackground());
581            seeBelowText.setEditable(false);
582            seeBelowText.setLineWrap(true);
583            seeBelowText.setWrapStyleWord(true);
584            seeBelowText.setText(parent.langpack.getString("CompilePanel.error.seebelow"));
585            errorMessagePane.add(seeBelowText);
586
587            getContentPane().add(errorMessagePane, java.awt.BorderLayout.NORTH);
588
589            // use 12pt monospace font for compiler output etc.
590            Font output_font = new Font("Monospaced", Font.PLAIN, 12);
591
592            // errorDisplayPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
593            // errorDisplayPane.setName("null");
594            commandText.setFont(output_font);
595            commandText.setEditable(false);
596            commandText.setRows(10);
597            commandText.setColumns(82);
598            commandText.setWrapStyleWord(true);
599            commandText.setLineWrap(true);
600            // commandText.setText("akjfkajfeafjakefjakfkaejfja");
601            commandScrollPane.setViewportView(commandText);
602
603            errorDisplayPane.addTab("Command", commandScrollPane);
604
605            stdOutText.setFont(output_font);
606            stdOutText.setEditable(false);
607            stdOutText.setWrapStyleWord(true);
608            stdOutText.setLineWrap(true);
609            stdOutScrollPane.setViewportView(stdOutText);
610
611            errorDisplayPane.addTab("Standard Output", null, stdOutScrollPane);
612
613            stdErrText.setFont(output_font);
614            stdErrText.setEditable(false);
615            stdErrText.setWrapStyleWord(true);
616            stdErrText.setLineWrap(true);
617            stdErrScrollPane.setViewportView(stdErrText);
618
619            errorDisplayPane.addTab("Standard Error", null, stdErrScrollPane);
620
621            getContentPane().add(errorDisplayPane, java.awt.BorderLayout.CENTER);
622
623            buttonsPanel.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.RIGHT));
624
625            reconfigButton.addActionListener(this);
626            buttonsPanel.add(reconfigButton);
627
628            ignoreButton.addActionListener(this);
629            buttonsPanel.add(ignoreButton);
630
631            abortButton.addActionListener(this);
632            buttonsPanel.add(abortButton);
633
634            getContentPane().add(buttonsPanel, java.awt.BorderLayout.SOUTH);
635
636            pack();
637        }
638
639        /** Closes the dialog */
640        protected void closeDialog(java.awt.event.WindowEvent evt)
641        {
642            setVisible(false);
643            dispose();
644        }
645
646        public void show(CompileResult error)
647        {
648            this.errorMessageText.setText(error.getMessage());
649            this.commandText.setText(error.getCmdline());
650            this.stdOutText.setText(error.getStdout());
651            this.stdErrText.setText(error.getStderr());
652            super.setVisible(true);
653        }
654
655        public int getResult()
656        {
657            return this.result;
658        }
659
660        public void actionPerformed(ActionEvent e)
661        {
662            boolean closenow = false;
663
664            if (e.getSource() == this.ignoreButton)
665            {
666                this.result = RESULT_IGNORE;
667                closenow = true;
668            }
669            else if (e.getSource() == this.abortButton)
670            {
671                this.result = RESULT_ABORT;
672                closenow = true;
673            }
674            else if (e.getSource() == this.reconfigButton)
675            {
676                this.result = RESULT_RECONFIGURE;
677                closenow = true;
678            }
679
680            if (closenow)
681            {
682                this.setVisible(false);
683                this.dispose();
684            }
685
686        }
687
688        // Variables declaration - do not modify//GEN-BEGIN:variables
689        private JTextArea commandText;
690
691        // private JScrollPane stdOutScrollPane;
692        private JTextArea stdErrText;
693
694        // private JPanel buttonsPanel;
695        // private JScrollPane commandScrollPane;
696        private JTextArea errorMessageText;
697
698        // private JScrollPane stdErrScrollPane;
699        private JButton ignoreButton;
700
701        private JTextArea stdOutText;
702
703        private JButton abortButton;
704
705        private JButton reconfigButton;
706
707        // private JTabbedPane errorDisplayPane;
708        // End of variables declaration//GEN-END:variables
709
710        private int result = RESULT_NONE;
711    }
712}