1 package net.logAnalyzer.gui.reports;
2
3 import java.awt.BorderLayout;
4 import java.awt.Color;
5 import java.awt.Component;
6 import java.awt.Dimension;
7 import java.awt.Font;
8 import java.awt.event.MouseAdapter;
9 import java.awt.event.MouseEvent;
10 import java.awt.event.MouseListener;
11 import java.util.Hashtable;
12 import java.util.Vector;
13
14 import javax.swing.Box;
15 import javax.swing.BoxLayout;
16 import javax.swing.Icon;
17 import javax.swing.JComponent;
18 import javax.swing.JPanel;
19 import javax.swing.JScrollPane;
20 import javax.swing.JTree;
21 import javax.swing.tree.DefaultMutableTreeNode;
22 import javax.swing.tree.DefaultTreeCellRenderer;
23 import javax.swing.tree.DefaultTreeModel;
24 import javax.swing.tree.TreePath;
25 import javax.swing.tree.TreeSelectionModel;
26
27 import net.logAnalyzer.LogAnalyzerGUI;
28 import net.logAnalyzer.reports.LAReport;
29 import net.logAnalyzer.resources.LAResourceBundle;
30 import net.logAnalyzer.utils.gui.GraphicsAttributes;
31 import net.logAnalyzer.utils.gui.IQuickBarComponent;
32
33 /***
34 * Used to visualize all generated reports in a treview.
35 * @author David Vicente
36 * @version 0.1
37 */
38 public class ReportsTreePanel extends JPanel implements IQuickBarComponent{
39 private static final long serialVersionUID = 1L;
40
41 /***
42 * The treeview.
43 */
44 private JTree configtree = new JTree();
45
46 /***
47 * Root node.
48 */
49 private DefaultMutableTreeNode root;
50
51 /***
52 * default model.
53 */
54 private DefaultTreeModel model;
55
56 /***
57 * Listeners for ReportsTree events.
58 * @see ReportsTreeListener
59 */
60 private Vector reportsTreeListeners = new Vector();
61
62 /***
63 * Reports structure.
64 */
65 private Hashtable reportsTable = new Hashtable();
66
67 /***
68 * Used to construct a new ReportsTreePanel.
69 */
70 public ReportsTreePanel() {
71 super();
72 addComponents();
73 }
74 /***
75 * Used to construct a new ReportsTreePanel with the specified listener.
76 * @param listener The linked listener.
77 */
78 public ReportsTreePanel(ReportsTreeListener listener) {
79 super();
80 addReportsTreeListener(listener);
81 addComponents();
82 }
83
84
85 public Icon getIcon() {
86 return LAResourceBundle.getIcon("ReportsView.icon");
87 }
88
89 public String getTitle() {
90 return LAResourceBundle.getLocalizedString("ReportsView.quickbar.title");
91 }
92
93 /***
94 * Adds components to main panel.
95 */
96 public void addComponents() {
97
98 setLayout(new BorderLayout());
99
100
101 fillTreeModel();
102 configtree = new JTree(model);
103 configtree.setRootVisible(false);
104 configtree.setBackground(GraphicsAttributes.BACKGROUND_COLOR);
105 configtree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
106
107 configtree.setCellRenderer(new ReportsTreeCellRenderer());
108
109
110 MouseListener ml = new MouseAdapter() {
111 public void mousePressed(MouseEvent e) {
112 int selRow = configtree.getRowForLocation(e.getX(), e.getY());
113 if (selRow != -1) {
114 if (e.getClickCount() == 2) {
115 TreePath oSelectedPath = configtree.getPathForLocation(e.getX(), e.getY());
116 if (oSelectedPath != null) {
117
118 configtree.setSelectionPath(oSelectedPath);
119
120 DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) oSelectedPath
121 .getLastPathComponent();
122 if (selectedNode.isLeaf()) {
123 Object item = reportsTable.get(selectedNode);
124 if (item != null) {
125 LAReport report = (LAReport) item;
126 fireDisplayReport(report);
127 }
128 }
129 }
130 }
131 }
132 }
133 };
134
135 configtree.addMouseListener(ml);
136
137 JScrollPane scrollpane = new JScrollPane(configtree,
138 JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
139 scrollpane.setBackground(GraphicsAttributes.BACKGROUND_COLOR);
140 add(Box.createRigidArea(new Dimension(0,10)));
141 this.add(scrollpane,BorderLayout.CENTER);
142
143 }
144 private void fillTreeModel(){
145
146
147 root = new DefaultMutableTreeNode(LAResourceBundle
148 .getLocalizedString("ReportsView.tree.rootnode"));
149 LAReport[] reports = LogAnalyzerGUI.getReports();
150
151 if (reports != null && reports.length > 0) {
152 Hashtable nodes = new Hashtable();
153
154 for (int i = 0; i < reports.length; i++) {
155 LAReport report = reports[i];
156 Class classreport = report.getClass();
157 String typereport = classreport.getName().substring(
158 classreport.getName().lastIndexOf(".") + 1, classreport.getName().length());
159 DefaultMutableTreeNode reporttype = null;
160 if (!nodes.containsKey(typereport)) {
161 reporttype = new DefaultMutableTreeNode(typereport);
162 nodes.put(typereport, reporttype);
163 root.add(reporttype);
164 } else {
165 reporttype = (DefaultMutableTreeNode) nodes.get(typereport);
166 }
167 DefaultMutableTreeNode reportnode = new DefaultMutableTreeNode(report.getName());
168
169 reportsTable.put(reportnode, report);
170 reporttype.add(reportnode);
171 }
172 }
173
174 model = new DefaultTreeModel(root);
175 }
176 /***
177 * {@link javax.swing.tree.DefaultTreeCellRenderer}.
178 * @author David Vicente
179 */
180 class ReportsTreeCellRenderer extends DefaultTreeCellRenderer {
181 private static final long serialVersionUID = 1L;
182
183 public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected,
184 boolean expanded, boolean leaf, int row, boolean hasFocus) {
185 Component comp = super.getTreeCellRendererComponent(tree, value, selected, expanded,
186 leaf, row, hasFocus);
187
188
189 DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
190 Object obj = node.getUserObject();
191 if (obj instanceof String) {
192 String strnode = (String) obj;
193 if (strnode.equalsIgnoreCase(LAResourceBundle
194 .getLocalizedString("ReportsView.tree.rootnode"))) {
195 comp.setFont(getFont().deriveFont(Font.PLAIN));
196 setIcon(LAResourceBundle.getIcon("ReportsView.icon"));
197 } else {
198 Object item = reportsTable.get(node);
199 if (item != null) {
200 comp.setFont(getFont().deriveFont(Font.PLAIN));
201 Class classreport = ((LAReport) item).getClass();
202 String typereport = classreport.getName().substring(
203 classreport.getName().lastIndexOf(".") + 1,
204 classreport.getName().length());
205 setIcon(LAResourceBundle.getIcon("ReportsView.icon." + typereport));
206 } else {
207 comp.setFont(getFont().deriveFont(Font.BOLD));
208 setIcon(LAResourceBundle.getIcon("ReportsView.icon.renderer"));
209 }
210 }
211 }
212 if(selected){
213 comp.setFont(getFont().deriveFont(Font.BOLD));
214 }
215
216 return comp;
217 }
218
219 public Color getTextSelectionColor() {
220 return GraphicsAttributes.TEXTSELECTED_COLOR;
221 }
222
223 public Color getTextNonSelectionColor() {
224 return GraphicsAttributes.TEXTNORMAL_COLOR;
225 }
226
227 public Color getBackgroundNonSelectionColor() {
228 return GraphicsAttributes.BACKGROUND_COLOR;
229 }
230
231 public Color getBackgroundSelectionColor() {
232 return GraphicsAttributes.BACKGROUND_COLOR;
233 }
234 }
235 /***
236 * Adds a listener.
237 * @param listener Lister to add.
238 */
239 public final void addReportsTreeListener(ReportsTreeListener listener) {
240 if (!reportsTreeListeners.contains(listener)) {
241 reportsTreeListeners.add(listener);
242 }
243 }
244
245 /***
246 * Removes a listener.
247 * @param listener Lister to remove.
248 */
249 public final void removeReportsTreeListener(ReportsTreeListener listener) {
250 reportsTreeListeners.remove(listener);
251 }
252
253 /***
254 * Fires a message event.
255 */
256 public final void fireDisplayReport(LAReport report) {
257 for (int i = 0; i < reportsTreeListeners.size(); i++) {
258 ((ReportsTreeListener) reportsTreeListeners.get(i)).displayReport(report);
259 }
260 }
261
262
263
264
265
266 }