You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by gr...@apache.org on 2012/06/02 17:36:26 UTC
svn commit: r1345524 [14/17] - in /logging/log4j/branches/log4j12-bz53299:
./ contribs/ contribs/CekiGulcu/ contribs/EirikLygre/ contribs/JamesHouse/
contribs/Jamie Tsao/ contribs/JimMoore/ contribs/KevinSteppe/
contribs/KitchingSimon/ contribs/LeosLit...
Added: logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/LogFactor5ErrorDialog.java
URL: http://svn.apache.org/viewvc/logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/LogFactor5ErrorDialog.java?rev=1345524&view=auto
==============================================================================
--- logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/LogFactor5ErrorDialog.java (added)
+++ logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/LogFactor5ErrorDialog.java Sat Jun 2 15:35:46 2012
@@ -0,0 +1,92 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.log4j.lf5.viewer;
+
+import java.awt.BorderLayout;
+import java.awt.FlowLayout;
+import java.awt.GridBagLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.JButton;
+import javax.swing.JFrame;
+import javax.swing.JPanel;
+
+/**
+ * LogFactor5ErrorDialog
+ *
+ * @author Richard Hurst
+ * @author Brad Marlborough
+ */
+
+// Contributed by ThoughtWorks Inc.
+
+public class LogFactor5ErrorDialog extends LogFactor5Dialog {
+ //--------------------------------------------------------------------------
+ // Constants:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Protected Variables:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Private Variables:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Constructors:
+ //--------------------------------------------------------------------------
+ public LogFactor5ErrorDialog(JFrame jframe, String message) {
+ super(jframe, "Error", true);
+
+ JButton ok = new JButton("Ok");
+ ok.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ hide();
+ }
+ });
+
+ JPanel bottom = new JPanel();
+ bottom.setLayout(new FlowLayout());
+ bottom.add(ok);
+
+ JPanel main = new JPanel();
+ main.setLayout(new GridBagLayout());
+ wrapStringOnPanel(message, main);
+
+ getContentPane().add(main, BorderLayout.CENTER);
+ getContentPane().add(bottom, BorderLayout.SOUTH);
+ show();
+
+ }
+ //--------------------------------------------------------------------------
+ // Public Methods:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Protected Methods:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Private Methods:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Nested Top-Level Classes or Interfaces
+ //--------------------------------------------------------------------------
+}
\ No newline at end of file
Propchange: logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/LogFactor5ErrorDialog.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/LogFactor5InputDialog.java
URL: http://svn.apache.org/viewvc/logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/LogFactor5InputDialog.java?rev=1345524&view=auto
==============================================================================
--- logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/LogFactor5InputDialog.java (added)
+++ logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/LogFactor5InputDialog.java Sat Jun 2 15:35:46 2012
@@ -0,0 +1,145 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.log4j.lf5.viewer;
+
+import javax.swing.*;
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.KeyAdapter;
+import java.awt.event.KeyEvent;
+
+/**
+ * LogFactor5InputDialog
+ *
+ * Creates a popup input dialog box so that users can enter
+ * a URL to open a log file from.
+ *
+ * @author Richard Hurst
+ * @author Brad Marlborough
+ */
+
+// Contributed by ThoughtWorks Inc.
+
+public class LogFactor5InputDialog extends LogFactor5Dialog {
+ //--------------------------------------------------------------------------
+ // Constants:
+ //--------------------------------------------------------------------------
+ public static final int SIZE = 30;
+ //--------------------------------------------------------------------------
+ // Protected Variables:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Private Variables:
+ //--------------------------------------------------------------------------
+ private JTextField _textField;
+ //--------------------------------------------------------------------------
+ // Constructors:
+ //--------------------------------------------------------------------------
+
+ /**
+ * Configures an input dialog box using a defualt size for the text field.
+ * param jframe the frame where the dialog will be loaded from.
+ * param title the title of the dialog box.
+ * param label the label to be put in the dialog box.
+ */
+ public LogFactor5InputDialog(JFrame jframe, String title, String label) {
+ this(jframe, title, label, SIZE);
+ }
+
+ /**
+ * Configures an input dialog box.
+ * param jframe the frame where the dialog will be loaded from.
+ * param title the title of the dialog box.
+ * param label the label to be put in the dialog box.
+ * param size the size of the text field.
+ */
+ public LogFactor5InputDialog(JFrame jframe, String title, String label,
+ int size) {
+ super(jframe, title, true);
+
+ JPanel bottom = new JPanel();
+ bottom.setLayout(new FlowLayout());
+
+ JPanel main = new JPanel();
+ main.setLayout(new FlowLayout());
+ main.add(new JLabel(label));
+ _textField = new JTextField(size);
+ main.add(_textField);
+
+ addKeyListener(new KeyAdapter() {
+ public void keyPressed(KeyEvent e) {
+ if (e.getKeyCode() == KeyEvent.VK_ENTER) {
+ hide();
+ }
+ }
+ });
+
+ JButton ok = new JButton("Ok");
+ ok.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ hide();
+ }
+ });
+
+ JButton cancel = new JButton("Cancel");
+ cancel.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ hide();
+ // set the text field to blank just in case
+ // a file was selected before the Cancel
+ // button was pressed.
+ _textField.setText("");
+ }
+ });
+
+ bottom.add(ok);
+ bottom.add(cancel);
+ getContentPane().add(main, BorderLayout.CENTER);
+ getContentPane().add(bottom, BorderLayout.SOUTH);
+ pack();
+ centerWindow(this);
+ show();
+ }
+
+ //--------------------------------------------------------------------------
+ // Public Methods:
+ //--------------------------------------------------------------------------
+ public String getText() {
+ String s = _textField.getText();
+
+ if (s != null && s.trim().length() == 0) {
+ return null;
+ }
+
+ return s;
+
+ }
+
+ //--------------------------------------------------------------------------
+ // Protected Methods:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Private Methods:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Nested Top-Level Classes or Interfaces
+ //--------------------------------------------------------------------------
+}
\ No newline at end of file
Propchange: logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/LogFactor5InputDialog.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/LogFactor5LoadingDialog.java
URL: http://svn.apache.org/viewvc/logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/LogFactor5LoadingDialog.java?rev=1345524&view=auto
==============================================================================
--- logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/LogFactor5LoadingDialog.java (added)
+++ logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/LogFactor5LoadingDialog.java Sat Jun 2 15:35:46 2012
@@ -0,0 +1,82 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.log4j.lf5.viewer;
+
+import java.awt.BorderLayout;
+import java.awt.FlowLayout;
+import java.awt.GridBagLayout;
+
+import javax.swing.JFrame;
+import javax.swing.JPanel;
+
+/**
+ * LogFactor5LoadingDialog
+ *
+ * @author Richard Hurst
+ * @author Brad Marlborough
+ */
+
+// Contributed by ThoughtWorks Inc.
+
+public class LogFactor5LoadingDialog extends LogFactor5Dialog {
+ //--------------------------------------------------------------------------
+ // Constants:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Protected Variables:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Private Variables:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Constructors:
+ //--------------------------------------------------------------------------
+
+ public LogFactor5LoadingDialog(JFrame jframe, String message) {
+ super(jframe, "LogFactor5", false);
+
+ JPanel bottom = new JPanel();
+ bottom.setLayout(new FlowLayout());
+
+ JPanel main = new JPanel();
+ main.setLayout(new GridBagLayout());
+ wrapStringOnPanel(message, main);
+
+ getContentPane().add(main, BorderLayout.CENTER);
+ getContentPane().add(bottom, BorderLayout.SOUTH);
+ show();
+
+ }
+ //--------------------------------------------------------------------------
+ // Public Methods:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Protected Methods:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Private Methods:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Nested Top-Level Classes or Interfaces
+ //--------------------------------------------------------------------------
+}
\ No newline at end of file
Propchange: logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/LogFactor5LoadingDialog.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/LogTable.java
URL: http://svn.apache.org/viewvc/logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/LogTable.java?rev=1345524&view=auto
==============================================================================
--- logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/LogTable.java (added)
+++ logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/LogTable.java Sat Jun 2 15:35:46 2012
@@ -0,0 +1,277 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.log4j.lf5.viewer;
+
+import java.awt.Font;
+import java.awt.FontMetrics;
+import java.awt.Graphics;
+import java.util.Enumeration;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Vector;
+
+import javax.swing.JTable;
+import javax.swing.JTextArea;
+import javax.swing.ListSelectionModel;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+import javax.swing.table.TableColumn;
+import javax.swing.table.TableColumnModel;
+
+import org.apache.log4j.lf5.util.DateFormatManager;
+
+/**
+ * LogTable.
+ *
+ * @author Michael J. Sikorsky
+ * @author Robert Shaw
+ * @author Brad Marlborough
+ * @author Brent Sprecher
+ */
+
+// Contributed by ThoughtWorks Inc.
+
+public class LogTable extends JTable {
+ private static final long serialVersionUID = 4867085140195148458L;
+ //--------------------------------------------------------------------------
+ // Constants:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Protected Variables:
+ //--------------------------------------------------------------------------
+ protected int _rowHeight = 30;
+ protected JTextArea _detailTextArea;
+
+ // For the columns:
+ protected int _numCols = 9;
+ protected TableColumn[] _tableColumns = new TableColumn[_numCols];
+ protected int[] _colWidths = {40, 40, 40, 70, 70, 360, 440, 200, 60};
+ protected LogTableColumn[] _colNames = LogTableColumn.getLogTableColumnArray();
+ protected int _colDate = 0;
+ protected int _colThread = 1;
+ protected int _colMessageNum = 2;
+ protected int _colLevel = 3;
+ protected int _colNDC = 4;
+ protected int _colCategory = 5;
+ protected int _colMessage = 6;
+ protected int _colLocation = 7;
+ protected int _colThrown = 8;
+
+ protected DateFormatManager _dateFormatManager = null;
+
+ //--------------------------------------------------------------------------
+ // Private Variables:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Constructors:
+ //--------------------------------------------------------------------------
+
+ public LogTable(JTextArea detailTextArea) {
+ super();
+
+ init();
+
+ _detailTextArea = detailTextArea;
+
+ setModel(new FilteredLogTableModel());
+
+ Enumeration columns = getColumnModel().getColumns();
+ int i = 0;
+ while (columns.hasMoreElements()) {
+ TableColumn col = (TableColumn) columns.nextElement();
+ col.setCellRenderer(new LogTableRowRenderer());
+ col.setPreferredWidth(_colWidths[i]);
+
+ _tableColumns[i] = col;
+ i++;
+ }
+
+ ListSelectionModel rowSM = getSelectionModel();
+ rowSM.addListSelectionListener(new LogTableListSelectionListener(this));
+
+ //setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
+ }
+
+ //--------------------------------------------------------------------------
+ // Public Methods:
+ //--------------------------------------------------------------------------
+
+ /**
+ * Get the DateFormatManager for formatting dates.
+ */
+ public DateFormatManager getDateFormatManager() {
+ return _dateFormatManager;
+ }
+
+ /**
+ * Set the date format manager for formatting dates.
+ */
+ public void setDateFormatManager(DateFormatManager dfm) {
+ _dateFormatManager = dfm;
+ }
+
+ public synchronized void clearLogRecords() {
+ //For JDK1.3
+ //((DefaultTableModel)getModel()).setRowCount(0);
+
+ // For JDK1.2.x
+ getFilteredLogTableModel().clear();
+ }
+
+ public FilteredLogTableModel getFilteredLogTableModel() {
+ return (FilteredLogTableModel) getModel();
+ }
+
+ // default view if a view is not set and saved
+ public void setDetailedView() {
+ //TODO: Defineable Views.
+ TableColumnModel model = getColumnModel();
+ // Remove all the columns:
+ for (int f = 0; f < _numCols; f++) {
+ model.removeColumn(_tableColumns[f]);
+ }
+ // Add them back in the correct order:
+ for (int i = 0; i < _numCols; i++) {
+ model.addColumn(_tableColumns[i]);
+ }
+ //SWING BUG:
+ sizeColumnsToFit(-1);
+ }
+
+ public void setView(List columns) {
+ TableColumnModel model = getColumnModel();
+
+ // Remove all the columns:
+ for (int f = 0; f < _numCols; f++) {
+ model.removeColumn(_tableColumns[f]);
+ }
+ Iterator selectedColumns = columns.iterator();
+ Vector columnNameAndNumber = getColumnNameAndNumber();
+ while (selectedColumns.hasNext()) {
+ // add the column to the view
+ model.addColumn(_tableColumns[columnNameAndNumber.indexOf(selectedColumns.next())]);
+ }
+
+ //SWING BUG:
+ sizeColumnsToFit(-1);
+ }
+
+ public void setFont(Font font) {
+ super.setFont(font);
+ Graphics g = this.getGraphics();
+ if (g != null) {
+ FontMetrics fm = g.getFontMetrics(font);
+ int height = fm.getHeight();
+ _rowHeight = height + height / 3;
+ setRowHeight(_rowHeight);
+ }
+
+
+ }
+
+
+ //--------------------------------------------------------------------------
+ // Protected Methods:
+ //--------------------------------------------------------------------------
+
+ protected void init() {
+ setRowHeight(_rowHeight);
+ setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+ }
+
+ // assign a column number to a column name
+ protected Vector getColumnNameAndNumber() {
+ Vector columnNameAndNumber = new Vector();
+ for (int i = 0; i < _colNames.length; i++) {
+ columnNameAndNumber.add(i, _colNames[i]);
+ }
+ return columnNameAndNumber;
+ }
+
+ //--------------------------------------------------------------------------
+ // Private Methods:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Nested Top-Level Classes or Interfaces:
+ //--------------------------------------------------------------------------
+
+ class LogTableListSelectionListener implements ListSelectionListener {
+ protected JTable _table;
+
+ public LogTableListSelectionListener(JTable table) {
+ _table = table;
+ }
+
+ public void valueChanged(ListSelectionEvent e) {
+ //Ignore extra messages.
+ if (e.getValueIsAdjusting()) {
+ return;
+ }
+
+ ListSelectionModel lsm = (ListSelectionModel) e.getSource();
+ if (lsm.isSelectionEmpty()) {
+ //no rows are selected
+ } else {
+ StringBuffer buf = new StringBuffer();
+ int selectedRow = lsm.getMinSelectionIndex();
+
+ for (int i = 0; i < _numCols - 1; i++) {
+ String value = "";
+ Object obj = _table.getModel().getValueAt(selectedRow, i);
+ if (obj != null) {
+ value = obj.toString();
+ }
+
+ buf.append(_colNames[i] + ":");
+ buf.append("\t");
+
+ if (i == _colThread || i == _colMessage || i == _colLevel) {
+ buf.append("\t"); // pad out the date.
+ }
+
+ if (i == _colDate || i == _colNDC) {
+ buf.append("\t\t"); // pad out the date.
+ }
+
+// if( i == _colSequence)
+// {
+// buf.append("\t\t\t"); // pad out the Sequnce.
+// }
+
+ buf.append(value);
+ buf.append("\n");
+ }
+ buf.append(_colNames[_numCols - 1] + ":\n");
+ Object obj = _table.getModel().getValueAt(selectedRow, _numCols - 1);
+ if (obj != null) {
+ buf.append(obj.toString());
+ }
+
+ _detailTextArea.setText(buf.toString());
+ }
+ }
+ }
+}
+
+
+
+
+
+
Propchange: logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/LogTable.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/LogTableColumn.java
URL: http://svn.apache.org/viewvc/logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/LogTableColumn.java?rev=1345524&view=auto
==============================================================================
--- logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/LogTableColumn.java (added)
+++ logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/LogTableColumn.java Sat Jun 2 15:35:46 2012
@@ -0,0 +1,166 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.log4j.lf5.viewer;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * LogTableColumn
+ *
+ * @author Michael J. Sikorsky
+ * @author Brad Marlborough
+ */
+
+// Contributed by ThoughtWorks Inc.
+
+public class LogTableColumn implements java.io.Serializable {
+ private static final long serialVersionUID = -4275827753626456547L;
+
+ // log4j table columns.
+ public final static LogTableColumn DATE = new LogTableColumn("Date");
+ public final static LogTableColumn THREAD = new LogTableColumn("Thread");
+ public final static LogTableColumn MESSAGE_NUM = new LogTableColumn("Message #");
+ public final static LogTableColumn LEVEL = new LogTableColumn("Level");
+ public final static LogTableColumn NDC = new LogTableColumn("NDC");
+ public final static LogTableColumn CATEGORY = new LogTableColumn("Category");
+ public final static LogTableColumn MESSAGE = new LogTableColumn("Message");
+ public final static LogTableColumn LOCATION = new LogTableColumn("Location");
+ public final static LogTableColumn THROWN = new LogTableColumn("Thrown");
+
+
+ //--------------------------------------------------------------------------
+ // Protected Variables:
+ //--------------------------------------------------------------------------
+ protected String _label;
+
+ //--------------------------------------------------------------------------
+ // Private Variables:
+ //--------------------------------------------------------------------------
+ private static LogTableColumn[] _log4JColumns;
+ private static Map _logTableColumnMap;
+
+ //--------------------------------------------------------------------------
+ // Constructors:
+ //--------------------------------------------------------------------------
+ static {
+ _log4JColumns = new LogTableColumn[]{DATE, THREAD, MESSAGE_NUM, LEVEL, NDC, CATEGORY,
+ MESSAGE, LOCATION, THROWN};
+
+ _logTableColumnMap = new HashMap();
+
+ for (int i = 0; i < _log4JColumns.length; i++) {
+ _logTableColumnMap.put(_log4JColumns[i].getLabel(), _log4JColumns[i]);
+ }
+ }
+
+
+ public LogTableColumn(String label) {
+ _label = label;
+ }
+
+ //--------------------------------------------------------------------------
+ // Public Methods:
+ //--------------------------------------------------------------------------
+
+ /**
+ * Return the Label of the LogLevel.
+ */
+ public String getLabel() {
+ return _label;
+ }
+
+ /**
+ * Convert a column label into a LogTableColumn object.
+ *
+ * @param column The label of a level to be converted into a LogTableColumn.
+ * @return LogTableColumn The LogTableColumn with a label equal to column.
+ * @throws LogTableColumnFormatException Is thrown when the column can not be
+ * converted into a LogTableColumn.
+ */
+ public static LogTableColumn valueOf(String column)
+ throws LogTableColumnFormatException {
+ LogTableColumn tableColumn = null;
+ if (column != null) {
+ column = column.trim();
+ tableColumn = (LogTableColumn) _logTableColumnMap.get(column);
+ }
+
+ if (tableColumn == null) {
+ StringBuffer buf = new StringBuffer();
+ buf.append("Error while trying to parse (" + column + ") into");
+ buf.append(" a LogTableColumn.");
+ throw new LogTableColumnFormatException(buf.toString());
+ }
+ return tableColumn;
+ }
+
+
+ public boolean equals(Object o) {
+ boolean equals = false;
+
+ if (o instanceof LogTableColumn) {
+ if (this.getLabel() ==
+ ((LogTableColumn) o).getLabel()) {
+ equals = true;
+ }
+ }
+
+ return equals;
+ }
+
+ public int hashCode() {
+ return _label.hashCode();
+ }
+
+ public String toString() {
+ return _label;
+ }
+
+ /**
+ * @return A <code>List</code> of <code>LogTableColumn/code> objects that map
+ * to log4j <code>Column</code> objects.
+ */
+ public static List getLogTableColumns() {
+ return Arrays.asList(_log4JColumns);
+ }
+
+ public static LogTableColumn[] getLogTableColumnArray() {
+ return _log4JColumns;
+ }
+
+ //--------------------------------------------------------------------------
+ // Protected Methods:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Private Methods:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Nested Top-Level Classes or Interfaces:
+ //--------------------------------------------------------------------------
+
+}
+
+
+
+
+
+
Propchange: logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/LogTableColumn.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/LogTableColumnFormatException.java
URL: http://svn.apache.org/viewvc/logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/LogTableColumnFormatException.java?rev=1345524&view=auto
==============================================================================
--- logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/LogTableColumnFormatException.java (added)
+++ logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/LogTableColumnFormatException.java Sat Jun 2 15:35:46 2012
@@ -0,0 +1,74 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.log4j.lf5.viewer;
+
+/**
+ * Thrown to indicate that the client has attempted to convert a string
+ * to one the LogLevel types, but the string does not have the appropriate
+ * format.
+ *
+ * @author Michael J. Sikorsky
+ */
+
+// Contributed by ThoughtWorks Inc.
+
+public class LogTableColumnFormatException extends Exception {
+ private static final long serialVersionUID = 6529165785030431653L;
+
+ //--------------------------------------------------------------------------
+ // Constants:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Protected Variables:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Private Variables:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Constructors:
+ //--------------------------------------------------------------------------
+
+ public LogTableColumnFormatException(String message) {
+ super(message);
+ }
+
+ //--------------------------------------------------------------------------
+ // Public Methods:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Protected Methods:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Private Methods:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Nested Top-Level Classes or Interfaces:
+ //--------------------------------------------------------------------------
+
+}
+
+
+
+
+
+
Propchange: logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/LogTableColumnFormatException.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/LogTableModel.java
URL: http://svn.apache.org/viewvc/logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/LogTableModel.java?rev=1345524&view=auto
==============================================================================
--- logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/LogTableModel.java (added)
+++ logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/LogTableModel.java Sat Jun 2 15:35:46 2012
@@ -0,0 +1,77 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.log4j.lf5.viewer;
+
+import javax.swing.table.DefaultTableModel;
+
+/**
+ * LogTableModel
+ *
+ * @author Michael J. Sikorsky
+ * @author Robert Shaw
+ */
+
+// Contributed by ThoughtWorks Inc.
+
+public class LogTableModel extends DefaultTableModel {
+ private static final long serialVersionUID = 3593300685868700894L;
+ //--------------------------------------------------------------------------
+ // Constants:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Protected Variables:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Private Variables:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Constructors:
+ //--------------------------------------------------------------------------
+
+ public LogTableModel(Object[] colNames, int numRows) {
+ super(colNames, numRows);
+ }
+
+ //--------------------------------------------------------------------------
+ // Public Methods:
+ //--------------------------------------------------------------------------
+
+ public boolean isCellEditable(int row, int column) {
+ return (false);
+ }
+ //--------------------------------------------------------------------------
+ // Protected Methods:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Private Methods:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Nested Top-Level Classes or Interfaces:
+ //--------------------------------------------------------------------------
+
+}
+
+
+
+
+
+
Propchange: logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/LogTableModel.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/LogTableRowRenderer.java
URL: http://svn.apache.org/viewvc/logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/LogTableRowRenderer.java?rev=1345524&view=auto
==============================================================================
--- logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/LogTableRowRenderer.java (added)
+++ logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/LogTableRowRenderer.java Sat Jun 2 15:35:46 2012
@@ -0,0 +1,109 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.log4j.lf5.viewer;
+
+import java.awt.Color;
+import java.awt.Component;
+
+import javax.swing.JTable;
+import javax.swing.table.DefaultTableCellRenderer;
+
+import org.apache.log4j.lf5.LogLevel;
+import org.apache.log4j.lf5.LogRecord;
+
+/**
+ * LogTableRowRenderer
+ *
+ * @author Michael J. Sikorsky
+ * @author Robert Shaw
+ * @author Brad Marlborough
+ */
+
+// Contributed by ThoughtWorks Inc.
+
+public class LogTableRowRenderer extends DefaultTableCellRenderer {
+ private static final long serialVersionUID = -3951639953706443213L;
+ //--------------------------------------------------------------------------
+ // Constants:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Protected Variables:
+ //--------------------------------------------------------------------------
+ protected boolean _highlightFatal = true;
+ protected Color _color = new Color(230, 230, 230);
+
+ //--------------------------------------------------------------------------
+ // Private Variables:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Constructors:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Public Methods:
+ //--------------------------------------------------------------------------
+
+ public Component getTableCellRendererComponent(JTable table,
+ Object value,
+ boolean isSelected,
+ boolean hasFocus,
+ int row,
+ int col) {
+
+ if ((row % 2) == 0) {
+ setBackground(_color);
+ } else {
+ setBackground(Color.white);
+ }
+
+ FilteredLogTableModel model = (FilteredLogTableModel) table.getModel();
+ LogRecord record = model.getFilteredRecord(row);
+
+ setForeground(getLogLevelColor(record.getLevel()));
+
+ return (super.getTableCellRendererComponent(table,
+ value,
+ isSelected,
+ hasFocus,
+ row, col));
+ }
+
+
+ //--------------------------------------------------------------------------
+ // Protected Methods:
+ //--------------------------------------------------------------------------
+ protected Color getLogLevelColor(LogLevel level) {
+ return (Color) LogLevel.getLogLevelColorMap().get(level);
+ }
+
+ //--------------------------------------------------------------------------
+ // Private Methods:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Nested Top-Level Classes or Interfaces:
+ //--------------------------------------------------------------------------
+
+}
+
+
+
+
+
+
Propchange: logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/LogTableRowRenderer.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/TrackingAdjustmentListener.java
URL: http://svn.apache.org/viewvc/logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/TrackingAdjustmentListener.java?rev=1345524&view=auto
==============================================================================
--- logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/TrackingAdjustmentListener.java (added)
+++ logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/TrackingAdjustmentListener.java Sat Jun 2 15:35:46 2012
@@ -0,0 +1,86 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.log4j.lf5.viewer;
+
+import java.awt.Adjustable;
+import java.awt.event.AdjustmentEvent;
+import java.awt.event.AdjustmentListener;
+
+/**
+ * An AdjustmentListener which ensures that an Adjustable (e.g. a Scrollbar)
+ * will "track" when the Adjustable expands.
+ * For example, when a vertical scroll bar is at its bottom anchor,
+ * the scrollbar will remain at the bottom. When the vertical scroll bar
+ * is at any other location, then no tracking will happen.
+ * An instance of this class should only listen to one Adjustable as
+ * it retains state information about the Adjustable it listens to.
+ *
+ * @author Richard Wan
+ */
+
+// Contributed by ThoughtWorks Inc.
+
+public class TrackingAdjustmentListener implements AdjustmentListener {
+ //--------------------------------------------------------------------------
+ // Constants:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Protected Variables:
+ //--------------------------------------------------------------------------
+
+ protected int _lastMaximum = -1;
+
+ //--------------------------------------------------------------------------
+ // Private Variables:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Constructors:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Public Methods:
+ //--------------------------------------------------------------------------
+
+ public void adjustmentValueChanged(AdjustmentEvent e) {
+ Adjustable bar = e.getAdjustable();
+ int currentMaximum = bar.getMaximum();
+ if (bar.getMaximum() == _lastMaximum) {
+ return; // nothing to do, the adjustable has not expanded
+ }
+ int bottom = bar.getValue() + bar.getVisibleAmount();
+
+ if (bottom + bar.getUnitIncrement() >= _lastMaximum) {
+ bar.setValue(bar.getMaximum()); // use the most recent maximum
+ }
+ _lastMaximum = currentMaximum;
+ }
+
+ //--------------------------------------------------------------------------
+ // Protected Methods:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Private Methods:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Nested Top-Level Classes or Interfaces
+ //--------------------------------------------------------------------------
+}
+
Propchange: logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/TrackingAdjustmentListener.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/categoryexplorer/CategoryAbstractCellEditor.java
URL: http://svn.apache.org/viewvc/logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/categoryexplorer/CategoryAbstractCellEditor.java?rev=1345524&view=auto
==============================================================================
--- logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/categoryexplorer/CategoryAbstractCellEditor.java (added)
+++ logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/categoryexplorer/CategoryAbstractCellEditor.java Sat Jun 2 15:35:46 2012
@@ -0,0 +1,172 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.log4j.lf5.viewer.categoryexplorer;
+
+import java.awt.Component;
+import java.awt.event.MouseEvent;
+import java.util.EventObject;
+
+import javax.swing.JTable;
+import javax.swing.JTree;
+import javax.swing.event.CellEditorListener;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.EventListenerList;
+import javax.swing.table.TableCellEditor;
+import javax.swing.tree.TreeCellEditor;
+
+/**
+ * CategoryAbstractCellEditor. Base class to handle the some common
+ * details of cell editing.
+ *
+ * @author Michael J. Sikorsky
+ * @author Robert Shaw
+ */
+
+// Contributed by ThoughtWorks Inc.
+
+public class CategoryAbstractCellEditor implements TableCellEditor, TreeCellEditor {
+ //--------------------------------------------------------------------------
+ // Constants:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Protected Variables:
+ //--------------------------------------------------------------------------
+ protected EventListenerList _listenerList = new EventListenerList();
+ protected Object _value;
+ protected ChangeEvent _changeEvent = null;
+ protected int _clickCountToStart = 1;
+
+ //--------------------------------------------------------------------------
+ // Private Variables:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Constructors:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Public Methods:
+ //--------------------------------------------------------------------------
+
+ public Object getCellEditorValue() {
+ return _value;
+ }
+
+ public void setCellEditorValue(Object value) {
+ _value = value;
+ }
+
+ public void setClickCountToStart(int count) {
+ _clickCountToStart = count;
+ }
+
+ public int getClickCountToStart() {
+ return _clickCountToStart;
+ }
+
+ public boolean isCellEditable(EventObject anEvent) {
+ if (anEvent instanceof MouseEvent) {
+ if (((MouseEvent) anEvent).getClickCount() < _clickCountToStart) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ public boolean shouldSelectCell(EventObject anEvent) {
+ if (this.isCellEditable(anEvent)) {
+ if (anEvent == null ||
+ ((MouseEvent) anEvent).getClickCount() >= _clickCountToStart) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public boolean stopCellEditing() {
+ fireEditingStopped();
+ return true;
+ }
+
+ public void cancelCellEditing() {
+ fireEditingCanceled();
+ }
+
+ public void addCellEditorListener(CellEditorListener l) {
+ _listenerList.add(CellEditorListener.class, l);
+ }
+
+ public void removeCellEditorListener(CellEditorListener l) {
+ _listenerList.remove(CellEditorListener.class, l);
+ }
+
+ public Component getTreeCellEditorComponent(
+ JTree tree, Object value,
+ boolean isSelected,
+ boolean expanded,
+ boolean leaf, int row) {
+ return null;
+ }
+
+ public Component getTableCellEditorComponent(
+ JTable table, Object value,
+ boolean isSelected,
+ int row, int column) {
+ return null;
+ }
+
+ //--------------------------------------------------------------------------
+ // Protected Methods:
+ //--------------------------------------------------------------------------
+ protected void fireEditingStopped() {
+ Object[] listeners = _listenerList.getListenerList();
+
+ for (int i = listeners.length - 2; i >= 0; i -= 2) {
+ if (listeners[i] == CellEditorListener.class) {
+ if (_changeEvent == null) {
+ _changeEvent = new ChangeEvent(this);
+ }
+
+ ((CellEditorListener) listeners[i + 1]).editingStopped(_changeEvent);
+ }
+ }
+ }
+
+ protected void fireEditingCanceled() {
+ Object[] listeners = _listenerList.getListenerList();
+
+ for (int i = listeners.length - 2; i >= 0; i -= 2) {
+ if (listeners[i] == CellEditorListener.class) {
+ if (_changeEvent == null) {
+ _changeEvent = new ChangeEvent(this);
+ }
+
+ ((CellEditorListener) listeners[i + 1]).editingCanceled(_changeEvent);
+ }
+ }
+ }
+
+ //--------------------------------------------------------------------------
+ // Private Methods:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Nested Top-Level Classes or Interfaces:
+ //--------------------------------------------------------------------------
+
+}
Propchange: logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/categoryexplorer/CategoryAbstractCellEditor.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/categoryexplorer/CategoryElement.java
URL: http://svn.apache.org/viewvc/logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/categoryexplorer/CategoryElement.java?rev=1345524&view=auto
==============================================================================
--- logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/categoryexplorer/CategoryElement.java (added)
+++ logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/categoryexplorer/CategoryElement.java Sat Jun 2 15:35:46 2012
@@ -0,0 +1,84 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.log4j.lf5.viewer.categoryexplorer;
+
+/**
+ * CategoryElement represents a single element or part of a Category.
+ *
+ * @author Michael J. Sikorsky
+ * @author Robert Shaw
+ */
+
+// Contributed by ThoughtWorks Inc.
+
+public class CategoryElement {
+ //--------------------------------------------------------------------------
+ // Constants:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Protected Variables:
+ //--------------------------------------------------------------------------
+ protected String _categoryTitle;
+
+ //--------------------------------------------------------------------------
+ // Private Variables:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Constructors:
+ //--------------------------------------------------------------------------
+
+ public CategoryElement() {
+ super();
+ }
+
+ public CategoryElement(String title) {
+ _categoryTitle = title;
+ }
+
+ //--------------------------------------------------------------------------
+ // Public Methods:
+ //--------------------------------------------------------------------------
+
+ public String getTitle() {
+ return (_categoryTitle);
+ }
+
+ public void setTitle(String title) {
+ _categoryTitle = title;
+ }
+
+ //--------------------------------------------------------------------------
+ // Protected Methods:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Private Methods:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Nested Top-Level Classes or Interfaces:
+ //--------------------------------------------------------------------------
+
+}
+
+
+
+
+
+
Propchange: logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/categoryexplorer/CategoryElement.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/categoryexplorer/CategoryExplorerLogRecordFilter.java
URL: http://svn.apache.org/viewvc/logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/categoryexplorer/CategoryExplorerLogRecordFilter.java?rev=1345524&view=auto
==============================================================================
--- logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/categoryexplorer/CategoryExplorerLogRecordFilter.java (added)
+++ logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/categoryexplorer/CategoryExplorerLogRecordFilter.java Sat Jun 2 15:35:46 2012
@@ -0,0 +1,98 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.log4j.lf5.viewer.categoryexplorer;
+
+import org.apache.log4j.lf5.LogRecord;
+import org.apache.log4j.lf5.LogRecordFilter;
+
+import java.util.Enumeration;
+
+/**
+ * An implementation of LogRecordFilter based on a CategoryExplorerModel
+ *
+ * @author Richard Wan
+ */
+
+// Contributed by ThoughtWorks Inc.
+
+public class CategoryExplorerLogRecordFilter implements LogRecordFilter {
+ //--------------------------------------------------------------------------
+ // Constants:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Protected Variables:
+ //--------------------------------------------------------------------------
+
+ protected CategoryExplorerModel _model;
+
+ //--------------------------------------------------------------------------
+ // Private Variables:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Constructors:
+ //--------------------------------------------------------------------------
+
+ public CategoryExplorerLogRecordFilter(CategoryExplorerModel model) {
+ _model = model;
+ }
+
+ //--------------------------------------------------------------------------
+ // Public Methods:
+ //--------------------------------------------------------------------------
+
+ /**
+ * @return true if the CategoryExplorer model specified at construction
+ * is accepting the category of the specified LogRecord. Has a side-effect
+ * of adding the CategoryPath of the LogRecord to the explorer model
+ * if the CategoryPath is new.
+ */
+ public boolean passes(LogRecord record) {
+ CategoryPath path = new CategoryPath(record.getCategory());
+ return _model.isCategoryPathActive(path);
+ }
+
+ /**
+ * Resets the counters for the contained CategoryNodes to zero.
+ */
+ public void reset() {
+ resetAllNodes();
+ }
+
+ //--------------------------------------------------------------------------
+ // Protected Methods:
+ //--------------------------------------------------------------------------
+
+ protected void resetAllNodes() {
+ Enumeration nodes = _model.getRootCategoryNode().depthFirstEnumeration();
+ CategoryNode current;
+ while (nodes.hasMoreElements()) {
+ current = (CategoryNode) nodes.nextElement();
+ current.resetNumberOfContainedRecords();
+ _model.nodeChanged(current);
+ }
+ }
+ //--------------------------------------------------------------------------
+ // Private Methods:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Nested Top-Level Classes or Interfaces
+ //--------------------------------------------------------------------------
+}
+
Propchange: logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/categoryexplorer/CategoryExplorerLogRecordFilter.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/categoryexplorer/CategoryExplorerModel.java
URL: http://svn.apache.org/viewvc/logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/categoryexplorer/CategoryExplorerModel.java?rev=1345524&view=auto
==============================================================================
--- logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/categoryexplorer/CategoryExplorerModel.java (added)
+++ logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/categoryexplorer/CategoryExplorerModel.java Sat Jun 2 15:35:46 2012
@@ -0,0 +1,347 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.log4j.lf5.viewer.categoryexplorer;
+
+import java.awt.AWTEventMulticaster;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.Enumeration;
+
+import javax.swing.SwingUtilities;
+import javax.swing.tree.DefaultTreeModel;
+import javax.swing.tree.TreeNode;
+import javax.swing.tree.TreePath;
+
+import org.apache.log4j.lf5.LogRecord;
+
+/**
+ * CategoryExplorerModel
+ *
+ * @author Michael J. Sikorsky
+ * @author Robert Shaw
+ * @author Brent Sprecher
+ * @author Richard Hurst
+ */
+
+// Contributed by ThoughtWorks Inc.
+
+public class CategoryExplorerModel extends DefaultTreeModel {
+ private static final long serialVersionUID = -3413887384316015901L;
+
+ //--------------------------------------------------------------------------
+ // Constants:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Protected Variables:
+ //--------------------------------------------------------------------------
+
+ protected boolean _renderFatal = true;
+ protected ActionListener _listener = null;
+ protected ActionEvent _event = new ActionEvent(this,
+ ActionEvent.ACTION_PERFORMED,
+ "Nodes Selection changed");
+
+ //--------------------------------------------------------------------------
+ // Private Variables:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Constructors:
+ //--------------------------------------------------------------------------
+
+ public CategoryExplorerModel(CategoryNode node) {
+ super(node);
+ }
+ //--------------------------------------------------------------------------
+ // Public Methods:
+ //--------------------------------------------------------------------------
+
+ public void addLogRecord(LogRecord lr) {
+ CategoryPath path = new CategoryPath(lr.getCategory());
+ addCategory(path); // create category path if it is new
+ CategoryNode node = getCategoryNode(path);
+ node.addRecord(); // update category node
+ if (_renderFatal && lr.isFatal()) {
+ TreeNode[] nodes = getPathToRoot(node);
+ int len = nodes.length;
+ CategoryNode parent;
+
+ // i = 0 gives root node
+ // skip node and root, loop through "parents" in between
+ for (int i = 1; i < len - 1; i++) {
+ parent = (CategoryNode) nodes[i];
+ parent.setHasFatalChildren(true);
+ nodeChanged(parent);
+ }
+ node.setHasFatalRecords(true);
+ nodeChanged(node);
+ }
+ }
+
+ public CategoryNode getRootCategoryNode() {
+ return (CategoryNode) getRoot();
+ }
+
+ public CategoryNode getCategoryNode(String category) {
+ CategoryPath path = new CategoryPath(category);
+ return (getCategoryNode(path));
+ }
+
+ /**
+ * returns null if no CategoryNode exists.
+ */
+ public CategoryNode getCategoryNode(CategoryPath path) {
+ CategoryNode root = (CategoryNode) getRoot();
+ CategoryNode parent = root; // Start condition.
+
+ for (int i = 0; i < path.size(); i++) {
+ CategoryElement element = path.categoryElementAt(i);
+
+ // If the two nodes have matching titles they are considered equal.
+ Enumeration children = parent.children();
+
+ boolean categoryAlreadyExists = false;
+ while (children.hasMoreElements()) {
+ CategoryNode node = (CategoryNode) children.nextElement();
+ String title = node.getTitle().toLowerCase();
+
+ String pathLC = element.getTitle().toLowerCase();
+ if (title.equals(pathLC)) {
+ categoryAlreadyExists = true;
+ // This is now the new parent node.
+ parent = node;
+ break; // out of the while, and back to the for().
+ }
+ }
+
+ if (categoryAlreadyExists == false) {
+ return null; // Didn't find the Node.
+ }
+ }
+
+ return (parent);
+ }
+
+ /**
+ * @return true if all the nodes in the specified CategoryPath are
+ * selected.
+ */
+ public boolean isCategoryPathActive(CategoryPath path) {
+ CategoryNode root = (CategoryNode) getRoot();
+ CategoryNode parent = root; // Start condition.
+ boolean active = false;
+
+ for (int i = 0; i < path.size(); i++) {
+ CategoryElement element = path.categoryElementAt(i);
+
+ // If the two nodes have matching titles they are considered equal.
+ Enumeration children = parent.children();
+
+ boolean categoryAlreadyExists = false;
+ active = false;
+
+ while (children.hasMoreElements()) {
+ CategoryNode node = (CategoryNode) children.nextElement();
+ String title = node.getTitle().toLowerCase();
+
+ String pathLC = element.getTitle().toLowerCase();
+ if (title.equals(pathLC)) {
+ categoryAlreadyExists = true;
+ // This is now the new parent node.
+ parent = node;
+
+ if (parent.isSelected()) {
+ active = true;
+ }
+
+ break; // out of the while, and back to the for().
+ }
+ }
+
+ if (active == false || categoryAlreadyExists == false) {
+ return false;
+ }
+ }
+
+ return (active);
+ }
+
+
+ /**
+ * <p>Method altered by Richard Hurst such that it returns the CategoryNode
+ * corresponding to the CategoryPath</p>
+ *
+ * @param path category path.
+ * @return CategoryNode
+ */
+ public CategoryNode addCategory(CategoryPath path) {
+ CategoryNode root = (CategoryNode) getRoot();
+ CategoryNode parent = root; // Start condition.
+
+ for (int i = 0; i < path.size(); i++) {
+ CategoryElement element = path.categoryElementAt(i);
+
+ // If the two nodes have matching titles they are considered equal.
+ Enumeration children = parent.children();
+
+ boolean categoryAlreadyExists = false;
+ while (children.hasMoreElements()) {
+ CategoryNode node = (CategoryNode) children.nextElement();
+ String title = node.getTitle().toLowerCase();
+
+ String pathLC = element.getTitle().toLowerCase();
+ if (title.equals(pathLC)) {
+ categoryAlreadyExists = true;
+ // This is now the new parent node.
+ parent = node;
+ break;
+ }
+ }
+
+ if (categoryAlreadyExists == false) {
+ // We need to add the node.
+ CategoryNode newNode = new CategoryNode(element.getTitle());
+
+ //This method of adding a new node cause parent roots to be
+ // collapsed.
+ //parent.add( newNode );
+ //reload(parent);
+
+ // This doesn't force the nodes to collapse.
+ insertNodeInto(newNode, parent, parent.getChildCount());
+ refresh(newNode);
+
+ // The newly added node is now the parent.
+ parent = newNode;
+
+ }
+ }
+
+ return parent;
+ }
+
+ public void update(CategoryNode node, boolean selected) {
+ if (node.isSelected() == selected) {
+ return; // nothing was changed, nothing to do
+ }
+ // select parents or deselect children
+ if (selected) {
+ setParentSelection(node, true);
+ } else {
+ setDescendantSelection(node, false);
+ }
+ }
+
+ public void setDescendantSelection(CategoryNode node, boolean selected) {
+ Enumeration descendants = node.depthFirstEnumeration();
+ CategoryNode current;
+ while (descendants.hasMoreElements()) {
+ current = (CategoryNode) descendants.nextElement();
+ // does the current node need to be changed?
+ if (current.isSelected() != selected) {
+ current.setSelected(selected);
+ nodeChanged(current);
+ }
+ }
+ notifyActionListeners();
+ }
+
+ public void setParentSelection(CategoryNode node, boolean selected) {
+ TreeNode[] nodes = getPathToRoot(node);
+ int len = nodes.length;
+ CategoryNode parent;
+
+ // i = 0 gives root node, i=len-1 gives this node
+ // skip the root node
+ for (int i = 1; i < len; i++) {
+ parent = (CategoryNode) nodes[i];
+ if (parent.isSelected() != selected) {
+ parent.setSelected(selected);
+ nodeChanged(parent);
+ }
+ }
+ notifyActionListeners();
+ }
+
+
+ public synchronized void addActionListener(ActionListener l) {
+ _listener = AWTEventMulticaster.add(_listener, l);
+ }
+
+ public synchronized void removeActionListener(ActionListener l) {
+ _listener = AWTEventMulticaster.remove(_listener, l);
+ }
+
+ public void resetAllNodeCounts() {
+ Enumeration nodes = getRootCategoryNode().depthFirstEnumeration();
+ CategoryNode current;
+ while (nodes.hasMoreElements()) {
+ current = (CategoryNode) nodes.nextElement();
+ current.resetNumberOfContainedRecords();
+ nodeChanged(current);
+ }
+ }
+
+ /**
+ * <p>Returns the CategoryPath to the specified CategoryNode</p>
+ *
+ * @param node The target CategoryNode
+ * @return CategoryPath
+ */
+ public TreePath getTreePathToRoot(CategoryNode node) {
+ if (node == null) {
+ return null;
+ }
+ return (new TreePath(getPathToRoot(node)));
+ }
+
+ //--------------------------------------------------------------------------
+ // Protected Methods:
+ //--------------------------------------------------------------------------
+ protected void notifyActionListeners() {
+ if (_listener != null) {
+ _listener.actionPerformed(_event);
+ }
+ }
+
+ /**
+ * Fires a nodechanged event on the SwingThread.
+ */
+ protected void refresh(final CategoryNode node) {
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ nodeChanged(node); // remind the tree to render the new node
+ }
+ });
+ }
+
+ //--------------------------------------------------------------------------
+ // Private Methods:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Nested Top-Level Classes or Interfaces:
+ //--------------------------------------------------------------------------
+
+}
+
+
+
+
+
+
Propchange: logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/categoryexplorer/CategoryExplorerModel.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/categoryexplorer/CategoryExplorerTree.java
URL: http://svn.apache.org/viewvc/logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/categoryexplorer/CategoryExplorerTree.java?rev=1345524&view=auto
==============================================================================
--- logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/categoryexplorer/CategoryExplorerTree.java (added)
+++ logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/categoryexplorer/CategoryExplorerTree.java Sat Jun 2 15:35:46 2012
@@ -0,0 +1,157 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.log4j.lf5.viewer.categoryexplorer;
+
+import java.awt.event.MouseEvent;
+
+import javax.swing.JTree;
+import javax.swing.event.TreeModelEvent;
+import javax.swing.tree.TreePath;
+
+/**
+ * CategoryExplorerTree
+ *
+ * @author Michael J. Sikorsky
+ * @author Robert Shaw
+ * @author Brent Sprecher
+ * @author Brad Marlborough
+ */
+
+// Contributed by ThoughtWorks Inc.
+
+public class CategoryExplorerTree extends JTree {
+ private static final long serialVersionUID = 8066257446951323576L;
+ //--------------------------------------------------------------------------
+ // Constants:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Protected Variables:
+ //--------------------------------------------------------------------------
+ protected CategoryExplorerModel _model;
+ protected boolean _rootAlreadyExpanded = false;
+
+ //--------------------------------------------------------------------------
+ // Private Variables:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Constructors:
+ //--------------------------------------------------------------------------
+
+ /**
+ * Construct a CategoryExplorerTree with a specific model.
+ */
+ public CategoryExplorerTree(CategoryExplorerModel model) {
+ super(model);
+
+ _model = model;
+ init();
+ }
+
+ /**
+ * Construct a CategoryExplorerTree and create a default CategoryExplorerModel.
+ */
+ public CategoryExplorerTree() {
+ super();
+
+ CategoryNode rootNode = new CategoryNode("Categories");
+
+ _model = new CategoryExplorerModel(rootNode);
+
+ setModel(_model);
+
+ init();
+ }
+
+ //--------------------------------------------------------------------------
+ // Public Methods:
+ //--------------------------------------------------------------------------
+
+ public CategoryExplorerModel getExplorerModel() {
+ return (_model);
+ }
+
+ public String getToolTipText(MouseEvent e) {
+
+ try {
+ return super.getToolTipText(e);
+ } catch (Exception ex) {
+ return "";
+ }
+
+ }
+
+ //--------------------------------------------------------------------------
+ // Protected Methods:
+ //--------------------------------------------------------------------------
+
+ protected void init() {
+ // Put visible lines on the JTree.
+ putClientProperty("JTree.lineStyle", "Angled");
+
+ // Configure the Tree with the appropriate Renderers and Editors.
+
+ CategoryNodeRenderer renderer = new CategoryNodeRenderer();
+ setEditable(true);
+ setCellRenderer(renderer);
+
+ CategoryNodeEditor editor = new CategoryNodeEditor(_model);
+
+ setCellEditor(new CategoryImmediateEditor(this,
+ new CategoryNodeRenderer(),
+ editor));
+ setShowsRootHandles(true);
+
+ setToolTipText("");
+
+ ensureRootExpansion();
+
+ }
+
+ protected void expandRootNode() {
+ if (_rootAlreadyExpanded) {
+ return;
+ }
+ _rootAlreadyExpanded = true;
+ TreePath path = new TreePath(_model.getRootCategoryNode().getPath());
+ expandPath(path);
+ }
+
+ protected void ensureRootExpansion() {
+ _model.addTreeModelListener(new TreeModelAdapter() {
+ public void treeNodesInserted(TreeModelEvent e) {
+ expandRootNode();
+ }
+ });
+ }
+
+ //--------------------------------------------------------------------------
+ // Private Methods:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Nested Top-Level Classes or Interfaces:
+ //--------------------------------------------------------------------------
+
+}
+
+
+
+
+
+
Propchange: logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/categoryexplorer/CategoryExplorerTree.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/categoryexplorer/CategoryImmediateEditor.java
URL: http://svn.apache.org/viewvc/logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/categoryexplorer/CategoryImmediateEditor.java?rev=1345524&view=auto
==============================================================================
--- logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/categoryexplorer/CategoryImmediateEditor.java (added)
+++ logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/categoryexplorer/CategoryImmediateEditor.java Sat Jun 2 15:35:46 2012
@@ -0,0 +1,148 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.log4j.lf5.viewer.categoryexplorer;
+
+import java.awt.Dimension;
+import java.awt.Rectangle;
+import java.awt.event.MouseEvent;
+import java.util.EventObject;
+
+import javax.swing.Icon;
+import javax.swing.JTree;
+import javax.swing.tree.DefaultTreeCellEditor;
+import javax.swing.tree.TreePath;
+
+/**
+ * CategoryImmediateEditor
+ *
+ * @author Michael J. Sikorsky
+ * @author Robert Shaw
+ */
+
+// Contributed by ThoughtWorks Inc.
+
+public class CategoryImmediateEditor extends DefaultTreeCellEditor {
+ //--------------------------------------------------------------------------
+ // Constants:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Protected Variables:
+ //--------------------------------------------------------------------------
+ private CategoryNodeRenderer renderer;
+ protected Icon editingIcon = null;
+
+ //--------------------------------------------------------------------------
+ // Private Variables:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Constructors:
+ //--------------------------------------------------------------------------
+ public CategoryImmediateEditor(JTree tree,
+ CategoryNodeRenderer renderer,
+ CategoryNodeEditor editor) {
+ super(tree, renderer, editor);
+ this.renderer = renderer;
+ renderer.setIcon(null);
+ renderer.setLeafIcon(null);
+ renderer.setOpenIcon(null);
+ renderer.setClosedIcon(null);
+
+ super.editingIcon = null;
+ }
+
+ //--------------------------------------------------------------------------
+ // Public Methods:
+ //--------------------------------------------------------------------------
+ public boolean shouldSelectCell(EventObject e) {
+ boolean rv = false; // only mouse events
+
+ if (e instanceof MouseEvent) {
+ MouseEvent me = (MouseEvent) e;
+ TreePath path = tree.getPathForLocation(me.getX(),
+ me.getY());
+ CategoryNode node = (CategoryNode)
+ path.getLastPathComponent();
+
+ rv = node.isLeaf() /*|| !inCheckBoxHitRegion(me)*/;
+ }
+ return rv;
+ }
+
+ public boolean inCheckBoxHitRegion(MouseEvent e) {
+ TreePath path = tree.getPathForLocation(e.getX(),
+ e.getY());
+ if (path == null) {
+ return false;
+ }
+ CategoryNode node = (CategoryNode) path.getLastPathComponent();
+ boolean rv = false;
+
+ if (true) {
+ // offset and lastRow DefaultTreeCellEditor
+ // protected members
+
+ Rectangle bounds = tree.getRowBounds(lastRow);
+ Dimension checkBoxOffset =
+ renderer.getCheckBoxOffset();
+
+ bounds.translate(offset + checkBoxOffset.width,
+ checkBoxOffset.height);
+
+ rv = bounds.contains(e.getPoint());
+ }
+ return true;
+ }
+
+ //--------------------------------------------------------------------------
+ // Protected Methods:
+ //--------------------------------------------------------------------------
+
+ protected boolean canEditImmediately(EventObject e) {
+ boolean rv = false;
+
+ if (e instanceof MouseEvent) {
+ MouseEvent me = (MouseEvent) e;
+ rv = inCheckBoxHitRegion(me);
+ }
+
+ return rv;
+ }
+
+ protected void determineOffset(JTree tree, Object value,
+ boolean isSelected, boolean expanded,
+ boolean leaf, int row) {
+ // Very important: means that the tree won't jump around.
+ offset = 0;
+ }
+
+ //--------------------------------------------------------------------------
+ // Private Methods:
+ //--------------------------------------------------------------------------
+
+ //--------------------------------------------------------------------------
+ // Nested Top-Level Classes or Interfaces:
+ //--------------------------------------------------------------------------
+
+}
+
+
+
+
+
+
Propchange: logging/log4j/branches/log4j12-bz53299/modules/lf5/src/main/java/org/apache/log4j/lf5/viewer/categoryexplorer/CategoryImmediateEditor.java
------------------------------------------------------------------------------
svn:eol-style = native