aboutsummaryrefslogtreecommitdiffstats
path: root/netx/net/sourceforge/jnlp/util/logging/ConsoleOutputPane.java
diff options
context:
space:
mode:
authorJiri Vanek <[email protected]>2013-12-20 15:23:08 +0100
committerJiri Vanek <[email protected]>2013-12-20 15:23:08 +0100
commitb498f0bd16cb77a6082e2bb797d8f4daec07c345 (patch)
tree466eb30b20e7a5a685bb535c95723ae8726e0eac /netx/net/sourceforge/jnlp/util/logging/ConsoleOutputPane.java
parentb616acb51f3bb0217cd24f6018650504dbc40727 (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.java887
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;
+}