1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.log4j.chainsaw;
18
19 import java.awt.event.ActionEvent;
20 import java.io.File;
21 import java.io.IOException;
22 import java.io.StringReader;
23 import javax.swing.AbstractAction;
24 import javax.swing.JFileChooser;
25 import javax.swing.JFrame;
26 import javax.swing.JOptionPane;
27 import javax.xml.parsers.ParserConfigurationException;
28 import javax.xml.parsers.SAXParserFactory;
29 import org.apache.log4j.Logger;
30 import org.xml.sax.InputSource;
31 import org.xml.sax.SAXException;
32 import org.xml.sax.XMLReader;
33
34
35
36
37
38
39
40 class LoadXMLAction
41 extends AbstractAction
42 {
43
44 private static final Logger LOG = Logger.getLogger(LoadXMLAction.class);
45
46
47 private final JFrame mParent;
48
49
50
51
52
53 private final JFileChooser mChooser = new JFileChooser();
54 {
55 mChooser.setMultiSelectionEnabled(false);
56 mChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
57 }
58
59
60 private final XMLReader mParser;
61
62 private final XMLFileHandler mHandler;
63
64
65
66
67
68
69
70
71
72
73 LoadXMLAction(JFrame aParent, MyTableModel aModel)
74 throws SAXException, ParserConfigurationException
75 {
76 mParent = aParent;
77 mHandler = new XMLFileHandler(aModel);
78 mParser = SAXParserFactory.newInstance().newSAXParser().getXMLReader();
79 mParser.setContentHandler(mHandler);
80 }
81
82
83
84
85
86 public void actionPerformed(ActionEvent aIgnore) {
87 LOG.info("load file called");
88 if (mChooser.showOpenDialog(mParent) == JFileChooser.APPROVE_OPTION) {
89 LOG.info("Need to load a file");
90 final File chosen = mChooser.getSelectedFile();
91 LOG.info("loading the contents of " + chosen.getAbsolutePath());
92 try {
93 final int num = loadFile(chosen.getAbsolutePath());
94 JOptionPane.showMessageDialog(
95 mParent,
96 "Loaded " + num + " events.",
97 "CHAINSAW",
98 JOptionPane.INFORMATION_MESSAGE);
99 } catch (Exception e) {
100 LOG.warn("caught an exception loading the file", e);
101 JOptionPane.showMessageDialog(
102 mParent,
103 "Error parsing file - " + e.getMessage(),
104 "CHAINSAW",
105 JOptionPane.ERROR_MESSAGE);
106 }
107 }
108 }
109
110
111
112
113
114
115
116
117
118 private int loadFile(String aFile)
119 throws SAXException, IOException
120 {
121 synchronized (mParser) {
122
123 final StringBuffer buf = new StringBuffer();
124 buf.append("<?xml version=\"1.0\" standalone=\"yes\"?>\n");
125 buf.append("<!DOCTYPE log4j:eventSet ");
126 buf.append("[<!ENTITY data SYSTEM \"file:///");
127 buf.append(aFile);
128 buf.append("\">]>\n");
129 buf.append("<log4j:eventSet xmlns:log4j=\"Claira\">\n");
130 buf.append("&data;\n");
131 buf.append("</log4j:eventSet>\n");
132
133 final InputSource is =
134 new InputSource(new StringReader(buf.toString()));
135 mParser.parse(is);
136 return mHandler.getNumEvents();
137 }
138 }
139 }