diff options
author | Jiri Vanek <[email protected]> | 2013-12-20 15:23:08 +0100 |
---|---|---|
committer | Jiri Vanek <[email protected]> | 2013-12-20 15:23:08 +0100 |
commit | b498f0bd16cb77a6082e2bb797d8f4daec07c345 (patch) | |
tree | 466eb30b20e7a5a685bb535c95723ae8726e0eac /netx/net/sourceforge/jnlp/util/logging/ConsoleOutputPane.java | |
parent | b616acb51f3bb0217cd24f6018650504dbc40727 (diff) |
Rewritten java console
Diffstat (limited to 'netx/net/sourceforge/jnlp/util/logging/ConsoleOutputPane.java')
-rw-r--r-- | netx/net/sourceforge/jnlp/util/logging/ConsoleOutputPane.java | 887 |
1 files changed, 887 insertions, 0 deletions
diff --git a/netx/net/sourceforge/jnlp/util/logging/ConsoleOutputPane.java b/netx/net/sourceforge/jnlp/util/logging/ConsoleOutputPane.java new file mode 100644 index 0000000..fe55d8e --- /dev/null +++ b/netx/net/sourceforge/jnlp/util/logging/ConsoleOutputPane.java @@ -0,0 +1,887 @@ +package net.sourceforge.jnlp.util.logging; + +import java.awt.Color; +import java.awt.Toolkit; +import java.awt.datatransfer.Clipboard; +import java.awt.datatransfer.StringSelection; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.io.IOException; +import java.util.Observable; +import java.util.Observer; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.regex.Pattern; +import javax.swing.ButtonGroup; +import javax.swing.JFrame; +import javax.swing.JMenuItem; +import javax.swing.JPopupMenu; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; +import javax.swing.text.BadLocationException; +import javax.swing.text.DefaultHighlighter; +import javax.swing.text.Document; +import javax.swing.text.PlainDocument; +import javax.swing.text.html.HTMLDocument; +import net.sourceforge.jnlp.runtime.JNLPRuntime; +import net.sourceforge.jnlp.util.logging.headers.ObservableMessagesProvider; + +public class ConsoleOutputPane extends javax.swing.JPanel implements Observer { + + @Override + public synchronized void update(Observable o, Object arg) { + if (!autorefresh.isSelected()) { + statistics.setText(model.createStatisticHint()); + return; + } + boolean passed = model.shouldUpdate(); + + if (!passed) { + statistics.setText(model.createStatisticHint()); + return; + } + if (sortBy.getSelectedIndex() == 0) { + //no sort, we can just update + updatePane(false); + } else { + refreshPane(); + } + + } + private ConsoleOutputPaneModel model; + private int lastPostion; //index of search + private DefaultHighlighter.DefaultHighlightPainter searchHighligh = new DefaultHighlighter.DefaultHighlightPainter(Color.blue); + private Object lastSearchTag; + + public ConsoleOutputPane(ObservableMessagesProvider dataProvider) { + model = new ConsoleOutputPaneModel(dataProvider); + initComponents(); + regExFilter.setText(ConsoleOutputPaneModel.defaultPattern.pattern()); + if (!LogConfig.getLogConfig().isEnableHeaders()) { + showHeaders.setSelected(false); + } + if (JNLPRuntime.isWebstartApplication()) { + showPlugin.setSelected(false); + showPreInit.setSelected(false); + showPostInit.setSelected(false); + showIncomplete.setSelected(false); + showComplete.setSelected(false); + + showPlugin.setEnabled(false); + showPreInit.setEnabled(false); + showPostInit.setEnabled(false); + showIncomplete.setEnabled(false); + showComplete.setEnabled(false); + } + regExFilter.getDocument().addDocumentListener(new DocumentListener() { + + @Override + public void insertUpdate(DocumentEvent e) { + colorize(); + } + + @Override + public void removeUpdate(DocumentEvent e) { + colorize(); + } + + @Override + public void changedUpdate(DocumentEvent e) { + colorize(); + } + + private void colorize() { + try { + String s = regExFilter.getText(); + Pattern p = Pattern.compile(s); + model.lastValidPattern = p; + regExLabel.setForeground(Color.green); + } catch (Exception ex) { + regExLabel.setForeground(Color.red); + } + } + }); + regExFilter.addMouseListener(new MouseAdapter() { + + @Override + public void mouseClicked(final MouseEvent e) { + java.awt.EventQueue.invokeLater(new Runnable() { + + @Override + public void run() { + try { + if (e.getButton() != MouseEvent.BUTTON3) { + insertChars.setVisible(false); + return; + } + insertChars.setLocation(e.getXOnScreen(), e.getYOnScreen()); + insertChars.setVisible(!insertChars.isVisible()); + } catch (Exception ex) { + OutputController.getLogger().log(ex); + } + } + }); + } + }); + regExFilter.addKeyListener(new KeyAdapter() { + + @Override + public void keyPressed(final KeyEvent e) { + if (e.getKeyCode() != KeyEvent.VK_CONTEXT_MENU) { + return; + } + java.awt.EventQueue.invokeLater(new Runnable() { + + @Override + public void run() { + try{ + insertChars.setLocation(regExFilter.getLocationOnScreen()); + insertChars.setVisible(!insertChars.isVisible()); + } catch (Exception ex) { + OutputController.getLogger().log(ex); + } + } + }); + } + }); + + ButtonGroup matches = new ButtonGroup(); + matches.add(match); + matches.add(notMatch); + showHideActionPerformed(null); + updateModel(); + refreshPane(); + + } + + private ActionListener createDefaultAction() { + return new ActionListener() { + + @Override + public void actionPerformed(java.awt.event.ActionEvent evt) { + refreshAction(evt); + } + }; + } + ActionListener defaultActionSingleton = createDefaultAction(); + + private ActionListener getDefaultActionSingleton() { + return defaultActionSingleton; + } + + private synchronized void refreshPane() { + if (highLight.isSelected()) { + jEditorPane1.setContentType("text/html"); + } else { + jEditorPane1.setContentType("text/plain"); + } + model.lastUpdateIndex = 0; + updatePane(true); + } + /** + * when various threads update (and it can be)underlying jeditorpane + * simultanouskly, then it can lead to unpredictible issues synchroisation + * is doen in invoe later + */ + private AtomicBoolean done = new AtomicBoolean(true); + + private synchronized void updatePane(final boolean reset) { + if (!done.get()) { + return; + } + done.set(false); + java.awt.EventQueue.invokeLater(new Runnable() { + + @Override + public void run() { + try { + refreshPaneBody(reset); + } catch (Exception ex) { + OutputController.getLogger().log(ex); + } finally { + done.set(true); + } + } + }); + } + + private synchronized void refreshPaneBody(final boolean reset) throws BadLocationException, IOException { + if (reset) { + jEditorPane1.setText(model.importList(0)); + } else { + String s = model.importList(); + if (highLight.isSelected()) { + HTMLDocument orig = (HTMLDocument) jEditorPane1.getDocument(); + if (revertSort.isSelected()) { + orig.insertAfterEnd(orig.getRootElements()[0].getElement(0)/*body*/, s); + } else { + orig.insertBeforeEnd(orig.getRootElements()[0], s); + } + } else { + if (revertSort.isSelected()) { + jEditorPane1.setText(s + jEditorPane1.getText()); + } else { + jEditorPane1.setText(jEditorPane1.getText() + s); + } + } + } + jEditorPane1.setCaretPosition(0); + //jEditorPane1.repaint(); + if (mark.isSelected()) { + markActionPerformed(null); + } + statistics.setText(model.createStatisticHint()); + } + + @SuppressWarnings("unchecked") + private void initComponents() { + + jPanel2 = new javax.swing.JPanel(); + showHeaders = new javax.swing.JCheckBox(); + showUser = new javax.swing.JCheckBox(); + showOrigin = new javax.swing.JCheckBox(); + showLevel = new javax.swing.JCheckBox(); + showDate = new javax.swing.JCheckBox(); + showThread1 = new javax.swing.JCheckBox(); + showThread2 = new javax.swing.JCheckBox(); + showMessage = new javax.swing.JCheckBox(); + showOut = new javax.swing.JCheckBox(); + showErr = new javax.swing.JCheckBox(); + showJava = new javax.swing.JCheckBox(); + showPlugin = new javax.swing.JCheckBox(); + showPreInit = new javax.swing.JCheckBox(); + sortByLabel = new javax.swing.JLabel(); + regExLabel = new javax.swing.JCheckBox(); + sortBy = new javax.swing.JComboBox(); + searchLabel = new javax.swing.JLabel(); + autorefresh = new javax.swing.JCheckBox(); + refresh = new javax.swing.JButton(); + apply = new javax.swing.JButton(); + regExFilter = new javax.swing.JTextField(); + //this is crucial, otherwie PalinDocument implementatin is repalcing all \n by space + ((PlainDocument) regExFilter.getDocument()).getDocumentProperties().remove("filterNewlines"); + copyPlain = new javax.swing.JButton(); + copyRich = new javax.swing.JButton(); + next = new javax.swing.JButton(); + previous = new javax.swing.JButton(); + search = new javax.swing.JTextField(); + caseSensitive = new javax.swing.JCheckBox(); + showIncomplete = new javax.swing.JCheckBox(); + highLight = new javax.swing.JCheckBox(); + wordWrap = new javax.swing.JCheckBox(); + showDebug = new javax.swing.JCheckBox(); + showInfo = new javax.swing.JCheckBox(); + showCode = new javax.swing.JCheckBox(); + statistics = new javax.swing.JLabel(); + showPostInit = new javax.swing.JCheckBox(); + showComplete = new javax.swing.JCheckBox(); + match = new javax.swing.JRadioButton(); + notMatch = new javax.swing.JRadioButton(); + revertSort = new javax.swing.JCheckBox(); + mark = new javax.swing.JCheckBox(); + jScrollPane1 = new javax.swing.JScrollPane(); + jEditorPane1 = new javax.swing.JTextPane(); + showHide = new javax.swing.JButton(); + + showHeaders.setSelected(true); + showHeaders.setText("Show headers:"); + showHeaders.addActionListener(getDefaultActionSingleton()); + + showUser.setSelected(true); + showUser.setText("user"); + showUser.addActionListener(getDefaultActionSingleton()); + + showOrigin.setSelected(true); + showOrigin.setText("origin"); + showOrigin.addActionListener(getDefaultActionSingleton()); + + showLevel.setSelected(true); + showLevel.setText("level"); + showLevel.addActionListener(getDefaultActionSingleton()); + + showDate.setSelected(true); + showDate.setText("date"); + showDate.addActionListener(getDefaultActionSingleton()); + + showThread1.setSelected(true); + showThread1.setText("thread 1"); + showThread1.addActionListener(getDefaultActionSingleton()); + + showThread2.setSelected(true); + showThread2.setText("thread 2"); + showThread2.addActionListener(getDefaultActionSingleton()); + + showMessage.setSelected(true); + showMessage.setText("Show messages"); + showMessage.addActionListener(getDefaultActionSingleton()); + + showOut.setSelected(true); + showOut.setText("std. Out"); + showOut.addActionListener(getDefaultActionSingleton()); + + showErr.setSelected(true); + showErr.setText("std. Err"); + showErr.addActionListener(getDefaultActionSingleton()); + + showJava.setSelected(true); + showJava.setText("java"); + showJava.addActionListener(getDefaultActionSingleton()); + + showPlugin.setSelected(true); + showPlugin.setText("plugin"); + showPlugin.addActionListener(getDefaultActionSingleton()); + + showPreInit.setSelected(true); + showPreInit.setText("pre-init"); + showPreInit.setToolTipText("plugin only"); + showPreInit.addActionListener(getDefaultActionSingleton()); + + sortByLabel.setText("Sort by:"); + + regExLabel.setText("Regular expression filter:"); + regExLabel.addActionListener(getDefaultActionSingleton()); + + sortBy.setModel(new javax.swing.DefaultComboBoxModel(new String[]{"As arrived (no sort)", "user", "origin", "level", "date", "code", "thread1", "thread2", "message"})); + sortBy.addActionListener(getDefaultActionSingleton()); + + searchLabel.setText("Search:"); + + autorefresh.setSelected(true); + autorefresh.setText("auto refresh"); + + refresh.setText("refresh"); + refresh.addActionListener(getDefaultActionSingleton()); + + apply.setText("Apply"); + apply.addActionListener(new java.awt.event.ActionListener() { + + @Override + public void actionPerformed(java.awt.event.ActionEvent evt) { + model.usedPattern = model.lastValidPattern; + refreshAction(evt); + } + }); + + regExFilter.setText(".*"); + + copyPlain.setText("Copy all (plain)"); + copyPlain.addActionListener(new java.awt.event.ActionListener() { + + @Override + public void actionPerformed(java.awt.event.ActionEvent evt) { + copyPlainActionPerformed(evt); + } + }); + + copyRich.setText("Copy all (rich)"); + copyRich.addActionListener(new java.awt.event.ActionListener() { + + @Override + public void actionPerformed(java.awt.event.ActionEvent evt) { + copyRichActionPerformed(evt); + } + }); + + next.setText("next>>>"); + next.addActionListener(new java.awt.event.ActionListener() { + + @Override + public void actionPerformed(java.awt.event.ActionEvent evt) { + nextActionPerformed(evt); + } + }); + + previous.setText("<<<previous"); + previous.addActionListener(new java.awt.event.ActionListener() { + + @Override + public void actionPerformed(java.awt.event.ActionEvent evt) { + previousActionPerformed(evt); + } + }); + + caseSensitive.setText("case sensitive"); + + showIncomplete.setSelected(true); + showIncomplete.setText("incomplete"); + showIncomplete.setToolTipText("plugin only"); + showIncomplete.addActionListener(getDefaultActionSingleton()); + + highLight.setSelected(true); + highLight.setText("highlight"); + highLight.addActionListener(getDefaultActionSingleton()); + + wordWrap.setText("word wrap"); + wordWrap.addActionListener(getDefaultActionSingleton()); + + showDebug.setSelected(true); + showDebug.setText("debug"); + showDebug.addActionListener(getDefaultActionSingleton()); + + showInfo.setSelected(true); + showInfo.setText("info"); + showInfo.addActionListener(getDefaultActionSingleton()); + + showCode.setSelected(true); + showCode.setText("code"); + showCode.addActionListener(getDefaultActionSingleton()); + + statistics.setText("x/y"); + + showPostInit.setSelected(true); + showPostInit.setText("post-init"); + showPostInit.setToolTipText("plugin only"); + showPostInit.addActionListener(getDefaultActionSingleton()); + + showComplete.setSelected(true); + showComplete.setText("complete"); + showComplete.setToolTipText("plugin only"); + showComplete.addActionListener(getDefaultActionSingleton()); + + match.setSelected(true); + match.setText("match"); + match.addActionListener(getDefaultActionSingleton()); + + notMatch.setText("not"); + notMatch.addActionListener(getDefaultActionSingleton()); + + revertSort.setSelected(true); + revertSort.setText("revert"); + revertSort.addActionListener(getDefaultActionSingleton()); + + mark.setText("mark"); + mark.addActionListener(new java.awt.event.ActionListener() { + + @Override + public void actionPerformed(java.awt.event.ActionEvent evt) { + markActionPerformed(evt); + } + }); + + javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2); + jPanel2.setLayout(jPanel2Layout); + jPanel2Layout.setHorizontalGroup( + jPanel2Layout.createParallelGroup( + javax.swing.GroupLayout.Alignment.LEADING). + addGroup( + jPanel2Layout.createSequentialGroup().addContainerGap().addGroup( + jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING). + addGroup( + jPanel2Layout.createSequentialGroup(). + addComponent(showHeaders).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED). + addComponent(showUser).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED). + addComponent(showOrigin).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED). + addComponent(showLevel).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED). + addComponent(showDate).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED). + addComponent(showCode).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED). + addComponent(showThread1).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(showThread2)). + addGroup(jPanel2Layout.createSequentialGroup().addGroup( + jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING).addGroup( + javax.swing.GroupLayout.Alignment.LEADING, jPanel2Layout.createSequentialGroup() + .addComponent(previous).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED). + addComponent(mark).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED). + addComponent(next).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 15, Short.MAX_VALUE). + addComponent(wordWrap).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED). + addComponent(highLight).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED). + addComponent(copyRich).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED). + addComponent(copyPlain)).addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanel2Layout.createSequentialGroup(). + addComponent(searchLabel).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED). + addComponent(search, javax.swing.GroupLayout.DEFAULT_SIZE, 438, Short.MAX_VALUE).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED). + addComponent(caseSensitive)).addGroup( + javax.swing.GroupLayout.Alignment.LEADING, jPanel2Layout.createSequentialGroup(). + addComponent(showMessage).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED). + addComponent(showOut).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(showErr).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED). + addComponent(showJava).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED). + addComponent(showPlugin).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(showDebug).addGap(6, 6, 6). + addComponent(showInfo))).addGap(2, 2, 2). + addComponent(statistics)).addGroup( + javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup(). + addComponent(showPreInit).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED). + addComponent(showPostInit).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED). + addComponent(showIncomplete).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED). + addComponent(showComplete)). + addGroup(jPanel2Layout.createSequentialGroup(). + addComponent(autorefresh).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED). + addComponent(refresh).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED). + addComponent(sortByLabel).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED). + addComponent(revertSort).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED). + addComponent(sortBy, 0, 327, Short.MAX_VALUE)). + addGroup(jPanel2Layout.createSequentialGroup(). + addComponent(regExLabel).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED). + addComponent(match).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED). + addComponent(notMatch).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED). + addComponent(regExFilter, javax.swing.GroupLayout.DEFAULT_SIZE, 237, Short.MAX_VALUE).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED). + addComponent(apply, javax.swing.GroupLayout.PREFERRED_SIZE, 106, javax.swing.GroupLayout.PREFERRED_SIZE))).addContainerGap())); + jPanel2Layout.setVerticalGroup( + jPanel2Layout.createParallelGroup( + javax.swing.GroupLayout.Alignment.LEADING). + addGroup( + jPanel2Layout.createSequentialGroup().addContainerGap().addGroup( + jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE). + addComponent(showHeaders). + addComponent(showUser). + addComponent(showLevel). + addComponent(showDate). + addComponent(showOrigin). + addComponent(showCode). + addComponent(showThread1). + addComponent(showThread2)).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED).addGroup( + jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE). + addComponent(showMessage). + addComponent(showOut). + addComponent(showErr). + addComponent(showJava). + addComponent(showPlugin). + addComponent(showDebug). + addComponent(showInfo). + addComponent(statistics)).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED).addGroup( + jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE). + addComponent(showPreInit). + addComponent(showIncomplete). + addComponent(showPostInit). + addComponent(showComplete)).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED).addGroup( + jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING). + addGroup( + jPanel2Layout.createSequentialGroup().addGap(32, 32, 32).addGroup( + jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE). + addComponent(regExLabel).addComponent(regExFilter, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE). + addComponent(apply). + addComponent(match). + addComponent(notMatch))). + addGroup( + jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE). + addComponent(autorefresh). + addComponent(refresh). + addComponent(sortByLabel).addComponent(sortBy, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE). + addComponent(revertSort))).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED).addGroup( + jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING). + addGroup( + jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE). + addComponent(searchLabel).addComponent(search, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)). + addComponent(caseSensitive)).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED).addGroup( + jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING). + addComponent(previous). + addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE). + addComponent(copyPlain). + addComponent(copyRich). + addComponent(highLight). + addComponent(wordWrap)). + addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE). + addComponent(mark). + addComponent(next))).addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))); + + jEditorPane1.setEditable(false); + jScrollPane1.setViewportView(jEditorPane1); + + showHide.setText("Hide"); + showHide.addActionListener(new java.awt.event.ActionListener() { + + @Override + public void actionPerformed(java.awt.event.ActionEvent evt) { + showHideActionPerformed(evt); + } + }); + + javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(this); + this.setLayout(jPanel1Layout); + jPanel1Layout.setHorizontalGroup( + jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING). + addGroup(jPanel1Layout.createSequentialGroup().addContainerGap(). + addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING). + addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 684, Short.MAX_VALUE). + addGroup(jPanel1Layout.createSequentialGroup().addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING). + addComponent(showHide, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 672, Short.MAX_VALUE). + addComponent(jPanel2, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)).addContainerGap())))); + jPanel1Layout.setVerticalGroup( + jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING). + addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup().addContainerGap(). + addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 329, Short.MAX_VALUE).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED). + addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED). + addComponent(showHide).addContainerGap())); + + insertChars = new JPopupMenu(); + JMenuItem tab = new JMenuItem("insert \\t"); + tab.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + java.awt.EventQueue.invokeLater(new Runnable() { + + @Override + public void run() { + try{ + int i = regExFilter.getCaretPosition(); + StringBuilder s = new StringBuilder(regExFilter.getText()); + s.insert(i, "\t"); + regExFilter.setText(s.toString()); + regExFilter.setCaretPosition(i + 1); + insertChars.setVisible(false); + } catch (Exception ex) { + OutputController.getLogger().log(ex); + } + } + }); + } + }); + JMenuItem newLine = new JMenuItem("insert \\n"); + newLine.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + java.awt.EventQueue.invokeLater(new Runnable() { + + @Override + public void run() { + try{ + int i = regExFilter.getCaretPosition(); + StringBuilder s = new StringBuilder(regExFilter.getText()); + s.insert(i, "\n"); + regExFilter.setText(s.toString()); + regExFilter.setCaretPosition(i + 1); + insertChars.setVisible(false); + } catch (Exception ex) { + OutputController.getLogger().log(ex); + } + } + }); + } + }); + + JMenuItem resetRegex = new JMenuItem("reset default"); + resetRegex.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + java.awt.EventQueue.invokeLater(new Runnable() { + + @Override + public void run() { + try{ + regExFilter.setText(ConsoleOutputPaneModel.defaultPattern.pattern()); + model.lastValidPattern = ConsoleOutputPaneModel.defaultPattern; + model.usedPattern = model.lastValidPattern; + insertChars.setVisible(false); + } catch (Exception ex) { + OutputController.getLogger().log(ex); + } + } + }); + } + }); + + insertChars.add(newLine); + insertChars.add(tab); + insertChars.add(resetRegex); + + + validate(); + } + + private void refreshAction(java.awt.event.ActionEvent evt) { + updateModel(); + refreshPane(); + } + + private void markActionPerformed(java.awt.event.ActionEvent evt) { + int matches = 0; + if (!mark.isSelected()) { + jEditorPane1.getHighlighter().removeAllHighlights(); + return; + } + try { + Document document = jEditorPane1.getDocument(); + String find = search.getText(); + if (find.length() == 0) { + jEditorPane1.getHighlighter().removeAllHighlights(); + return; + } + for (int index = 0; index + find.length() < document.getLength(); index++) { + String subMatch = document.getText(index, find.length()); + if ((caseSensitive.isSelected() && find.equals(subMatch)) || (!caseSensitive.isSelected() && find.equalsIgnoreCase(subMatch))) { + matches++; + javax.swing.text.DefaultHighlighter.DefaultHighlightPainter highlightPainter = + new javax.swing.text.DefaultHighlighter.DefaultHighlightPainter(Color.orange); + jEditorPane1.getHighlighter().addHighlight(index, index + find.length(), + highlightPainter); + } + } + mark.setText("mark (" + matches + ")"); + } catch (BadLocationException ex) { + OutputController.getLogger().log(ex); + } + } + + private void previousActionPerformed(java.awt.event.ActionEvent evt) { + try { + Document document = jEditorPane1.getDocument(); + String find = search.getText(); + if (find.length() == 0) { + lastPostion = document.getLength() - find.length() - 1; + return; + } + for (int index = lastPostion; index >= 0; index--) { + String subMatch = document.getText(index, find.length()); + if ((caseSensitive.isSelected() && find.equals(subMatch)) || (!caseSensitive.isSelected() && find.equalsIgnoreCase(subMatch))) { + if (lastSearchTag != null) { + jEditorPane1.getHighlighter().removeHighlight(lastSearchTag); + } + lastSearchTag = jEditorPane1.getHighlighter().addHighlight(index, index + find.length(), searchHighligh); + jEditorPane1.setCaretPosition(index); + + lastPostion = index - find.length() - 1; + return; + } + } + lastPostion = document.getLength() - find.length() - 1; + } catch (BadLocationException ex) { + OutputController.getLogger().log(ex); + } + } + + private void nextActionPerformed(java.awt.event.ActionEvent evt) { + try { + Document document = jEditorPane1.getDocument(); + String find = search.getText(); + if (find.length() == 0) { + lastPostion = 0; + return; + } + for (int index = lastPostion; index + find.length() < document.getLength(); index++) { + String subMatch = document.getText(index, find.length()); + if ((caseSensitive.isSelected() && find.equals(subMatch)) || (!caseSensitive.isSelected() && find.equalsIgnoreCase(subMatch))) { + if (lastSearchTag != null) { + jEditorPane1.getHighlighter().removeHighlight(lastSearchTag); + } + lastSearchTag = jEditorPane1.getHighlighter().addHighlight(index, index + find.length(), searchHighligh); + jEditorPane1.setCaretPosition(index); + + lastPostion = index + 1; + return; + } + } + lastPostion = 0; + } catch (BadLocationException ex) { + OutputController.getLogger().log(ex); + } + } + + private void showHideActionPerformed(java.awt.event.ActionEvent evt) { + if (jPanel2.isVisible()) { + jPanel2.setVisible(false); + showHide.setText("Show controls"); + } else { + jPanel2.setVisible(true); + showHide.setText("Hide"); + } + } + + private void copyPlainActionPerformed(java.awt.event.ActionEvent evt) { + StringSelection stringSelection = new StringSelection(model.importList(false, 0)); + Clipboard clpbrd = Toolkit.getDefaultToolkit().getSystemClipboard(); + clpbrd.setContents(stringSelection, null); + } + + private void copyRichActionPerformed(java.awt.event.ActionEvent evt) { + StringSelection stringSelection = new StringSelection(model.importList(true, 0)); + Clipboard clpbrd = Toolkit.getDefaultToolkit().getSystemClipboard(); + clpbrd.setContents(stringSelection, null); + } + + public static void main(String args[]) { + java.awt.EventQueue.invokeLater(new Runnable() { + + @Override + public void run() { + JFrame dialog = new JFrame(); + dialog.setSize(800, 600); + dialog.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + ObservableMessagesProvider producer = new ConsoleOutputPaneModel.TestMessagesProvider(); + ConsoleOutputPane jPanel1 = new ConsoleOutputPane(producer); + producer.getObservable().addObserver(jPanel1); + dialog.getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER); + dialog.pack(); + dialog.setVisible(true); + } + }); + } + + private void updateModel() { + model.highLight = highLight.isSelected(); + model.matchPattern = match.isSelected(); + model.regExLabel = regExLabel.isSelected(); + model.revertSort = revertSort.isSelected(); + model.showCode = showCode.isSelected(); + model.showComplete = showComplete.isSelected(); + model.showDate = showDate.isSelected(); + model.showDebug = showDebug.isSelected(); + model.showErr = showErr.isSelected(); + model.showHeaders = showHeaders.isSelected(); + model.showIncomplete = showIncomplete.isSelected(); + model.showInfo = showInfo.isSelected(); + model.showJava = showJava.isSelected(); + model.showLevel = showLevel.isSelected(); + model.showMessage = showMessage.isSelected(); + model.showOrigin = showOrigin.isSelected(); + model.showOut = showOut.isSelected(); + model.showPlugin = showPlugin.isSelected(); + model.showPostInit = showPostInit.isSelected(); + model.showPreInit = showPreInit.isSelected(); + model.showThread1 = showThread1.isSelected(); + model.showThread2 = showThread2.isSelected(); + model.showUser = showUser.isSelected(); + model.sortBy = sortBy.getSelectedIndex(); + model.wordWrap = wordWrap.isSelected(); + + } + private javax.swing.JButton apply; + private javax.swing.JCheckBox autorefresh; + private javax.swing.JCheckBox caseSensitive; + private javax.swing.JButton copyPlain; + private javax.swing.JButton copyRich; + private javax.swing.JCheckBox highLight; + private javax.swing.JEditorPane jEditorPane1; + private javax.swing.JPanel jPanel2; + private javax.swing.JScrollPane jScrollPane1; + private javax.swing.JCheckBox mark; + private javax.swing.JRadioButton match; + private javax.swing.JButton next; + private javax.swing.JRadioButton notMatch; + private javax.swing.JButton previous; + private javax.swing.JButton refresh; + private javax.swing.JTextField regExFilter; + private javax.swing.JCheckBox regExLabel; + private javax.swing.JCheckBox revertSort; + private javax.swing.JTextField search; + private javax.swing.JLabel searchLabel; + private javax.swing.JCheckBox showCode; + private javax.swing.JCheckBox showComplete; + private javax.swing.JCheckBox showDate; + private javax.swing.JCheckBox showDebug; + private javax.swing.JCheckBox showErr; + private javax.swing.JCheckBox showHeaders; + private javax.swing.JButton showHide; + private javax.swing.JCheckBox showIncomplete; + private javax.swing.JCheckBox showInfo; + private javax.swing.JCheckBox showJava; + private javax.swing.JCheckBox showLevel; + private javax.swing.JCheckBox showMessage; + private javax.swing.JCheckBox showOrigin; + private javax.swing.JCheckBox showOut; + private javax.swing.JCheckBox showPlugin; + private javax.swing.JCheckBox showPostInit; + private javax.swing.JCheckBox showPreInit; + private javax.swing.JCheckBox showThread1; + private javax.swing.JCheckBox showThread2; + private javax.swing.JCheckBox showUser; + private javax.swing.JComboBox sortBy; + private javax.swing.JLabel sortByLabel; + private javax.swing.JLabel statistics; + private javax.swing.JCheckBox wordWrap; + private javax.swing.JPopupMenu insertChars; +} |