View Javadoc
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