1 package net.logAnalyzer.reports;
2
3 import java.awt.Font;
4 import java.awt.image.BufferedImage;
5 import java.io.FileWriter;
6 import java.io.IOException;
7
8 import javax.swing.JComponent;
9 import javax.swing.JScrollPane;
10 import javax.swing.JTable;
11
12 import net.logAnalyzer.utils.gui.GraphicsAttributes;
13 import net.logAnalyzer.utils.gui.ResizableTableHeader;
14 import net.logAnalyzer.utils.gui.TXTReportTableModel;
15
16 /***
17 * This class is a wrapper used to encapsulate a {@link String} in a
18 * {@link net.logAnalyzer.reports.LAReport} object.
19 *
20 * @author Karim REFEYTON
21 * @version 0.1
22 */
23 public class TXTReport implements LAReport {
24 /***
25 * Report name.
26 */
27 private String name = null;
28
29 /***
30 * Wrapped string report.
31 */
32 private String report = null;
33
34 /***
35 * Wrap the specified document in a new wrapper instance.
36 *
37 * @param name
38 * Name of the report.
39 * @param report
40 * String to wrap as a report.
41 */
42 public TXTReport(String name, String report) {
43 this.name = name;
44 this.report = report;
45 }
46
47 /***
48 * Return the file extension of the report : <tt>txt</tt>.
49 *
50 * @return Report file name extension.
51 * @see LAReport#getFileExtension()
52 */
53 public String getFileExtension() {
54 return "txt";
55 }
56
57 /***
58 * Return the name of the report.
59 *
60 * @return Report name.
61 * @see net.logAnalyzer.reports.LAReport#getName()
62 */
63 public String getName() {
64 return this.name;
65 }
66
67 /***
68 * Set the name of the report.
69 *
70 * @param name
71 * Report name.
72 * @see net.logAnalyzer.reports.LAReport#setName(String)
73 */
74 public void setName(String name) {
75 this.name = name;
76 }
77
78 /***
79 * Return the mime type of the report.
80 *
81 * @return Mime type of the report.
82 * @see net.logAnalyzer.reports.LAReport#getMimeType()
83 */
84 public String getMimeType() {
85 return "txt/plain";
86 }
87
88 /***
89 * Save the report with the specified filename. The filename can contain a
90 * relative or absolute path.
91 * <p>
92 * If the file exists, it is overwritten.
93 * </p>
94 *
95 * @param filename
96 * Name of the output file.
97 * @throws IOException
98 * If an I/O exception occurs.
99 * @see net.logAnalyzer.reports.LAReport#saveToFile(java.lang.String)
100 */
101 public void saveToFile(String filename) throws IOException {
102 FileWriter writer = new FileWriter(filename);
103 writer.write(this.report.toString());
104 writer.close();
105 }
106
107 /***
108 * Create an image from the report as a {@link BufferedImage}.
109 * <p>
110 * This implementation returns always <tt>null</tt>.
111 * </p>
112 *
113 * @param width
114 * Image width.
115 * @param height
116 * Image height.
117 * @return Image from the report; <tt>null</tt> if unsupported feature.
118 */
119 public BufferedImage createBufferedImage(int width, int height) {
120 return null;
121 }
122
123 /***
124 * Create the GUI displaying the report as a {@link javax.swing.JLabel}
125 * component.
126 *
127 * @return GUI showing the report.
128 * @see net.logAnalyzer.reports.LAReport#createGUI()
129 */
130 public JComponent createGUI() {
131
132 JTable area = new JTable(new TXTReportTableModel(this.report.toString()));
133 ResizableTableHeader header = new ResizableTableHeader(area.getColumnModel());
134 header.setIncludeHeaderWidth(true);
135 header.setBackground(GraphicsAttributes.BACKGROUND_COLOR);
136 header.setForeground(GraphicsAttributes.QUICKTITLE_FOREGROUND_COLOR);
137 header.setFont(header.getFont().deriveFont(Font.BOLD));
138 area.setTableHeader(header);
139 JScrollPane scrollPane = new JScrollPane(area);
140 scrollPane
141 .setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
142 scrollPane
143 .setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
144 scrollPane.setName(getName());
145
146 return scrollPane;
147 }
148
149 /***
150 * Return the string representation of the report.
151 *
152 * @return String report.
153 * @see net.logAnalyzer.reports.LAReport#toString()
154 */
155 public String toString() {
156 return this.report.toString();
157 }
158 }