edu.rice.cs.drjava.ui
Class ExternalProcessPanel

java.lang.Object
  extended by java.awt.Component
      extended by java.awt.Container
          extended by javax.swing.JComponent
              extended by javax.swing.JPanel
                  extended by edu.rice.cs.drjava.ui.TabbedPanel
                      extended by edu.rice.cs.drjava.ui.AbortablePanel
                          extended by edu.rice.cs.drjava.ui.ExternalProcessPanel
All Implemented Interfaces:
DropTargetListener, ImageObserver, MenuContainer, Serializable, EventListener, Accessible

public class ExternalProcessPanel
extends AbortablePanel

Panel for displaying some component with buttons, one of which is an "Abort" button. This should be used to display the output of an external process. This class is a swing class that should only be accessed from the event thread.

Version:
$Id$
See Also:
Serialized Form

Nested Class Summary
 
Nested classes/interfaces inherited from class javax.swing.JPanel
JPanel.AccessibleJPanel
 
Nested classes/interfaces inherited from class javax.swing.JComponent
JComponent.AccessibleJComponent
 
Nested classes/interfaces inherited from class java.awt.Container
Container.AccessibleAWTContainer
 
Nested classes/interfaces inherited from class java.awt.Component
Component.AccessibleAWTComponent, Component.BaselineResizeBehavior, Component.BltBufferStrategy, Component.FlipBufferStrategy
 
Field Summary
protected  CompletionMonitor _abortMonitor
           
protected  int _changeCount
           
protected  Thread _deathThread
           
protected  InputStreamReader _erris
           
protected  InputStreamReader _is
           
protected  Process _p
           
protected  ProcessCreator _pc
           
protected  Thread _readThread
           
protected  JButton _runAgainButton
           
protected  StringBuilder _sb
           
protected  JTextArea _textArea
           
protected  JButton _updateNowButton
           
protected  Thread _updateThread
           
 int BUFFER_READS_PER_TIMER
          Number of buffer reads before the event thread is allowed to do something else.
 int BUFFER_SIZE
          Size of the buffer read at once.
 
Fields inherited from class edu.rice.cs.drjava.ui.AbortablePanel
_abortButton, _buttonPanel, _frame, _leftPane, _model, _scrollPane, _title
 
Fields inherited from class edu.rice.cs.drjava.ui.TabbedPanel
_closeButton, _closePanel, _displayed, _mainPanel
 
Fields inherited from class javax.swing.JComponent
accessibleContext, listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW
 
Fields inherited from class java.awt.Component
BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
 
Fields inherited from interface java.awt.image.ImageObserver
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH
 
Constructor Summary
ExternalProcessPanel(MainFrame frame, String title, ProcessCreator pc)
          Constructs a new "process" panel to watch process output.
 
Method Summary
protected  void abortActionPerformed(ActionEvent e)
          Abort action was performed.
 void doubleClicked(MouseEvent e)
          Gets called when the user double-clicks on the text pane.
protected  void initThread(ProcessCreator pc)
           
protected  JComponent[] makeButtons()
          Creates the buttons for controlling the regions.
protected  Component makeLeftPanel()
          Setup left panel.
protected  void readText(boolean finish)
          Read new text from the stream.
protected  void runAgainActionPerformed(ActionEvent e)
          Run Again action was performed
protected  void updateButtons()
          Update button state and text.
protected  void updateText()
          Update the text area with the text that was read.
 
Methods inherited from class edu.rice.cs.drjava.ui.AbortablePanel
_close, _setColors
 
Methods inherited from class edu.rice.cs.drjava.ui.TabbedPanel
addCloseListener, dragEnter, dragExit, dragOver, drop, dropActionChanged, getName, isDisplayed, requestFocusInWindow, setDisplayed, setVisible
 
Methods inherited from class javax.swing.JPanel
getAccessibleContext, getUI, getUIClassID, paramString, setUI, updateUI
 
Methods inherited from class javax.swing.JComponent
addAncestorListener, addNotify, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, firePropertyChange, fireVetoableChange, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAncestorListeners, getAutoscrolls, getBaseline, getBaselineResizeBehavior, getBorder, getBounds, getClientProperty, getComponentGraphics, getComponentPopupMenu, getConditionForKeyStroke, getDebugGraphicsOptions, getDefaultLocale, getFontMetrics, getGraphics, getHeight, getInheritsPopupMenu, getInputMap, getInputMap, getInputVerifier, getInsets, getInsets, getListeners, getLocation, getMaximumSize, getMinimumSize, getNextFocusableComponent, getPopupLocation, getPreferredSize, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getToolTipText, getTopLevelAncestor, getTransferHandler, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingForPrint, isPaintingTile, isRequestFocusEnabled, isValidateRoot, paint, paintBorder, paintChildren, paintComponent, paintImmediately, paintImmediately, print, printAll, printBorder, printChildren, printComponent, processComponentKeyEvent, processKeyBinding, processKeyEvent, processMouseEvent, processMouseMotionEvent, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeNotify, removeVetoableChangeListener, repaint, repaint, requestDefaultFocus, requestFocus, requestFocus, requestFocusInWindow, resetKeyboardActions, reshape, revalidate, scrollRectToVisible, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBackground, setBorder, setComponentPopupMenu, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, setEnabled, setFocusTraversalKeys, setFont, setForeground, setInheritsPopupMenu, setInputMap, setInputVerifier, setMaximumSize, setMinimumSize, setNextFocusableComponent, setOpaque, setPreferredSize, setRequestFocusEnabled, setToolTipText, setTransferHandler, setUI, setVerifyInputWhenFocusTarget, unregisterKeyboardAction, update
 
Methods inherited from class java.awt.Container
add, add, add, add, add, addContainerListener, addImpl, addPropertyChangeListener, addPropertyChangeListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalKeys, getFocusTraversalPolicy, getLayout, getMousePosition, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, printComponents, processContainerEvent, processEvent, remove, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusCycleRoot, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setLayout, transferFocusBackward, transferFocusDownCycle, validate, validateTree
 
Methods inherited from class java.awt.Component
action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, createImage, createImage, createVolatileImage, createVolatileImage, disableEvents, dispatchEvent, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBackground, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getForeground, getGraphicsConfiguration, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocale, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getParent, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, hide, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isPreferredSizeSet, isShowing, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, postEvent, prepareImage, prepareImage, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, resize, resize, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setName, setSize, setSize, show, show, size, toString, transferFocus, transferFocusUpCycle
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

BUFFER_SIZE

public final int BUFFER_SIZE
Size of the buffer read at once.

See Also:
Constant Field Values

BUFFER_READS_PER_TIMER

public final int BUFFER_READS_PER_TIMER
Number of buffer reads before the event thread is allowed to do something else.

See Also:
Constant Field Values

_textArea

protected JTextArea _textArea

_pc

protected ProcessCreator _pc

_p

protected Process _p

_is

protected InputStreamReader _is

_erris

protected InputStreamReader _erris

_updateNowButton

protected JButton _updateNowButton

_runAgainButton

protected JButton _runAgainButton

_updateThread

protected Thread _updateThread

_readThread

protected Thread _readThread

_deathThread

protected Thread _deathThread

_sb

protected StringBuilder _sb

_changeCount

protected volatile int _changeCount

_abortMonitor

protected CompletionMonitor _abortMonitor
Constructor Detail

ExternalProcessPanel

public ExternalProcessPanel(MainFrame frame,
                            String title,
                            ProcessCreator pc)
Constructs a new "process" panel to watch process output. This is swing view class and hence should only be accessed from the event thread.

Parameters:
frame - the MainFrame
title - title of the pane
pc - the process creator to use
Method Detail

initThread

protected void initThread(ProcessCreator pc)

makeLeftPanel

protected Component makeLeftPanel()
Setup left panel. Must be overridden to return the component on the left side.

Specified by:
makeLeftPanel in class AbortablePanel

abortActionPerformed

protected void abortActionPerformed(ActionEvent e)
Abort action was performed.

Specified by:
abortActionPerformed in class AbortablePanel
Parameters:
e - action event performed by user, or null if aborted due to problem

runAgainActionPerformed

protected void runAgainActionPerformed(ActionEvent e)
Run Again action was performed

Parameters:
e - action event performed by user, or null if initiated programmatically

doubleClicked

public void doubleClicked(MouseEvent e)
Gets called when the user double-clicks on the text pane.


updateButtons

protected void updateButtons()
Update button state and text. Should be overridden if additional buttons are added besides "Go To", "Remove" and "Remove All".

Overrides:
updateButtons in class AbortablePanel

makeButtons

protected JComponent[] makeButtons()
Creates the buttons for controlling the regions. Should be overridden.

Overrides:
makeButtons in class AbortablePanel

readText

protected void readText(boolean finish)
Read new text from the stream.

Parameters:
finish - whether to read the entire rest

updateText

protected void updateText()
Update the text area with the text that was read.