1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.log4j.chainsaw;
19
20 import java.awt.Toolkit;
21 import java.awt.event.ActionEvent;
22 import java.awt.event.KeyEvent;
23 import java.io.BufferedOutputStream;
24 import java.io.BufferedWriter;
25 import java.io.File;
26 import java.io.FileOutputStream;
27 import java.io.FileWriter;
28 import java.io.IOException;
29 import java.io.OutputStreamWriter;
30 import java.io.Writer;
31 import java.util.Iterator;
32 import java.util.List;
33 import java.util.Locale;
34 import java.util.zip.ZipEntry;
35 import java.util.zip.ZipOutputStream;
36
37 import javax.swing.AbstractAction;
38 import javax.swing.Action;
39 import javax.swing.ImageIcon;
40 import javax.swing.JFileChooser;
41 import javax.swing.KeyStroke;
42
43 import org.apache.log4j.chainsaw.icons.ChainsawIcons;
44 import org.apache.log4j.helpers.LogLog;
45 import org.apache.log4j.xml.XMLLayout;
46
47
48
49
50
51
52
53
54
55
56 class FileSaveAction extends AbstractAction {
57 private LogUI parent;
58 private JFileChooser chooser = null;
59
60
61
62
63
64
65 public FileSaveAction(LogUI parent) {
66 super("Save displayed events as...");
67
68 putValue(
69 Action.ACCELERATOR_KEY,
70 KeyStroke.getKeyStroke(KeyEvent.VK_S, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
71 putValue(Action.MNEMONIC_KEY, new Integer(KeyEvent.VK_S));
72 putValue(
73 Action.SHORT_DESCRIPTION, "Saves displayed events for the current tab");
74 putValue(Action.SMALL_ICON, new ImageIcon(ChainsawIcons.FILE_SAVE_AS));
75 this.parent = parent;
76 }
77
78
79
80
81
82
83
84
85 public void actionPerformed(ActionEvent e) {
86
87 if( chooser == null ){
88 chooser = new JFileChooser();
89 }
90
91 chooser.setAcceptAllFileFilterUsed(true);
92 chooser.setDialogTitle("Save displayed events (XML or .zipped XML)...");
93 chooser.showSaveDialog(parent);
94
95 File selectedFile = chooser.getSelectedFile();
96
97 if (selectedFile != null) {
98 List v = parent.getCurrentLogPanel().getFilteredEvents();
99
100 if (((v != null) && (v.size() == 0)) || (v == null)) {
101
102 return;
103 }
104
105 XMLLayout layout = new XMLLayout();
106 layout.setProperties(true);
107 boolean saveAsZip = selectedFile.getName().toLowerCase(Locale.ENGLISH).endsWith(".zip");
108 Writer writer = null;
109 try {
110 if (saveAsZip) {
111 ZipOutputStream zipOutput = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(selectedFile)));
112 ZipEntry entry = new ZipEntry(selectedFile.getName().substring(0, selectedFile.getName().length() - ".zip".length()) + ".xml");
113 zipOutput.putNextEntry(entry);
114 writer = new OutputStreamWriter(zipOutput);
115 } else {
116 writer = new BufferedWriter(new FileWriter(selectedFile));
117 }
118 Iterator iter = v.iterator();
119 while (iter.hasNext()) {
120 LoggingEventWrapper loggingEventWrapper = (LoggingEventWrapper) iter.next();
121 layout.setLocationInfo(loggingEventWrapper.getLoggingEvent().getThrowableInformation() != null);
122 writer.write(layout.format(loggingEventWrapper.getLoggingEvent()));
123 }
124 } catch (IOException ioe) {
125 LogLog.warn("Unable to save file", ioe);
126 } finally {
127 if (writer != null) {
128 try {
129 writer.flush();
130 writer.close();
131 }
132 catch (IOException e1) {
133
134 }
135 }
136 }
137 }
138 }
139 }