1 package net.sourceforge.pmd.swingui;
2
3 import net.sourceforge.pmd.PMD;
4 import net.sourceforge.pmd.PMDException;
5 import net.sourceforge.pmd.Report;
6 import net.sourceforge.pmd.RuleContext;
7 import net.sourceforge.pmd.RuleSet;
8 import net.sourceforge.pmd.swingui.event.HTMLAnalysisResultsEvent;
9 import net.sourceforge.pmd.swingui.event.HTMLAnalysisResultsEventListener;
10 import net.sourceforge.pmd.swingui.event.ListenerList;
11 import net.sourceforge.pmd.swingui.event.StatusBarEvent;
12 import net.sourceforge.pmd.swingui.event.TextAnalysisResultsEvent;
13 import net.sourceforge.pmd.swingui.event.TextAnalysisResultsEventListener;
14
15 import javax.swing.JEditorPane;
16 import javax.swing.JScrollPane;
17 import javax.swing.UIManager;
18 import javax.swing.text.html.HTMLEditorKit;
19 import java.awt.Component;
20 import java.io.File;
21 import java.io.FileInputStream;
22 import java.io.FileNotFoundException;
23
24 /***
25 *
26 * @author Donald A. Leckie
27 * @since August 27, 2002
28 * @version $Revision: 1.30 $, $Date: 2003/05/28 18:08:34 $
29 */
30 abstract class ResultsViewer extends JEditorPane {
31
32 private File[] m_sourceFiles;
33 private String m_htmlText;
34 private PMD m_pmd;
35 private RuleSet m_ruleSet;
36
37 /***
38 ********************************************************************************
39 */
40 protected ResultsViewer() {
41 super();
42
43 setEditorKit(new HTMLEditorKit());
44 setEditable(false);
45 setBackground(UIManager.getColor("pmdGray"));
46
47 m_pmd = new PMD();
48 m_ruleSet = new RuleSet();
49
50 //
51 // Add listeners
52 //
53 ListenerList.addListener((HTMLAnalysisResultsEventListener) new HTMLAnalysisResultsEventHandler());
54 ListenerList.addListener((TextAnalysisResultsEventListener) new TextAnalysisResultsEventHandler());
55 }
56
57 /***
58 ********************************************************************************
59 *
60 */
61 private void scrollToTop() {
62 Component component = getParent();
63
64 while ((component instanceof JScrollPane) == false) {
65 component = component.getParent();
66 }
67
68 if (component != null) {
69 JScrollPane parentScrollPane = (JScrollPane) component;
70
71 parentScrollPane.getHorizontalScrollBar().setValue(0);
72 parentScrollPane.getVerticalScrollBar().setValue(0);
73 parentScrollPane.repaint();
74 }
75 }
76
77 /***
78 ********************************************************************************
79 *
80 * @return
81 */
82 protected String getHTMLText(File file) {
83
84 return m_htmlText;
85 }
86
87 /***
88 ********************************************************************************
89 *
90 * @return
91 */
92 protected String getHTMLText() {
93 return m_htmlText;
94 }
95
96 /***
97 ********************************************************************************
98 *
99 * @return
100 */
101 protected String getPlainText() {
102 String fullText = "";
103
104 if (m_sourceFiles != null) {
105 synchronized (m_sourceFiles) {
106 try {
107 RuleContext ruleContext = new RuleContext();
108 TextRenderer renderer = new TextRenderer();
109 renderer.beginRendering(m_sourceFiles.length == 1);
110
111 for (int n = 0; n < m_sourceFiles.length; n++) {
112 ruleContext.setSourceCodeFilename(m_sourceFiles[n].getPath());
113 ruleContext.setReport(new Report());
114 m_pmd.processFile(new FileInputStream(m_sourceFiles[n]), m_ruleSet, ruleContext);
115
116 String filePath = m_sourceFiles[n].getPath();
117 Report report = ruleContext.getReport();
118 renderer.render(filePath, report);
119 }
120
121 fullText = renderer.endRendering();
122 } catch (FileNotFoundException exception) {
123 MessageDialog.show(PMDViewer.getViewer(), null, exception);
124 } catch (PMDException pmdException) {
125 String message = pmdException.getMessage();
126 Exception exception = pmdException.getReason();
127 MessageDialog.show(PMDViewer.getViewer(), message, exception);
128 }
129 }
130 }
131
132 return fullText;
133 }
134
135 /***
136 ********************************************************************************
137 *
138 */
139 protected void analyze() {
140 if ((m_sourceFiles != null) && (m_ruleSet != null)) {
141 (new AnalyzeThread()).start();
142 }
143 }
144
145 /***
146 ********************************************************************************
147 *
148 */
149 protected void analyze(File[] selectedFile, RuleSet ruleSet) {
150 if ((selectedFile != null) && (ruleSet != null)) {
151 m_sourceFiles = selectedFile;
152 m_ruleSet = ruleSet;
153 (new AnalyzeThread()).start();
154 }
155 }
156
157 /***
158 ********************************************************************************
159 ********************************************************************************
160 ********************************************************************************
161 */
162 private class AnalyzeThread extends Thread {
163 private ResultsViewer m_resultsViewer;
164
165
166 private AnalyzeThread() {
167 super("Analyze");
168
169 m_resultsViewer = ResultsViewer.this;
170 }
171
172 /***
173 ***************************************************************************
174 *
175 */
176 public void run() {
177 setup();
178 process();
179 cleanup();
180 }
181
182 /***
183 ***************************************************************************
184 *
185 */
186 protected void setup() {
187 PMDViewer.getViewer().setEnableViewer(false);
188 StatusBarEvent.notifyStartAnimation(this);
189 }
190
191 /***
192 ***************************************************************************
193 *
194 */
195 protected void process() {
196 if (m_sourceFiles == null) {
197 return;
198 }
199
200 try {
201 StatusBarEvent.notifyShowMessage(this, "Analyzing. Please wait...");
202
203 RuleContext ruleContext;
204 HTMLResultRenderer renderer;
205 boolean reportNoViolations;
206
207 ruleContext = new RuleContext();
208 renderer = new HTMLResultRenderer();
209 reportNoViolations = (m_sourceFiles.length == 1);
210 renderer.beginRendering(reportNoViolations);
211
212 for (int n = 0; n < m_sourceFiles.length; n++) {
213 ruleContext.setSourceCodeFilename(m_sourceFiles[n].getPath());
214 ruleContext.setReport(new Report());
215 m_pmd.processFile(new FileInputStream(m_sourceFiles[n]), m_ruleSet, ruleContext);
216
217 StatusBarEvent.notifyShowMessage(this, "Rendering analysis results into HTML page. Please wait...");
218
219 String filePath;
220 Report report;
221
222 filePath = m_sourceFiles[n].getPath();
223 report = ruleContext.getReport();
224 renderer.render(filePath, report);
225 }
226
227 m_htmlText = renderer.endRendering();
228 StatusBarEvent.notifyShowMessage(this, "Storing HTML page into viewer. Please wait...");
229 setText(m_htmlText);
230 } catch (FileNotFoundException exception) {
231 MessageDialog.show(PMDViewer.getViewer(), null, exception);
232 } catch (PMDException pmdException) {
233 String message = pmdException.getMessage();
234 Exception exception = pmdException.getReason();
235 MessageDialog.show(PMDViewer.getViewer(), message, exception);
236 } catch (OutOfMemoryError error) {
237 MessageDialog.show(PMDViewer.getViewer(), "Out of memory.");
238 } finally {
239 m_resultsViewer.scrollToTop();
240 StatusBarEvent.notifyShowMessage(this, "Finished");
241 }
242 }
243
244 /***
245 ***************************************************************************
246 *
247 */
248 protected void cleanup() {
249 StatusBarEvent.notifyStopAnimation(this);
250 PMDViewer.getViewer().setEnableViewer(true);
251 }
252 }
253
254 /***
255 ***********************************************************************************
256 ***********************************************************************************
257 ***********************************************************************************
258 */
259 private class HTMLAnalysisResultsEventHandler implements HTMLAnalysisResultsEventListener {
260
261 /***
262 ****************************************************************************
263 *
264 * @param event
265 */
266 public void requestHTMLAnalysisResults(HTMLAnalysisResultsEvent event) {
267 if (m_htmlText == null) {
268 m_htmlText = "";
269 }
270
271 HTMLAnalysisResultsEvent.notifyReturnedHTMLText(this, m_htmlText);
272 }
273
274 /***
275 ****************************************************************************
276 *
277 * @param event
278 */
279 public void returnedHTMLAnalysisResults(HTMLAnalysisResultsEvent event) {
280 }
281 }
282
283 /***
284 ***********************************************************************************
285 ***********************************************************************************
286 ***********************************************************************************
287 */
288 private class TextAnalysisResultsEventHandler implements TextAnalysisResultsEventListener {
289
290 /***
291 ****************************************************************************
292 *
293 * @param event
294 */
295 public void requestTextAnalysisResults(TextAnalysisResultsEvent event) {
296 TextAnalysisResultsEvent.notifyReturnedText(this, getPlainText());
297 }
298
299 /***
300 ****************************************************************************
301 *
302 * @param event
303 */
304 public void returnedTextAnalysisResults(TextAnalysisResultsEvent event) {
305 }
306 }
307 }
This page was automatically generated by Maven