code cleanup (deprecated calls and optimization):

PMD report is only created once and reused by all renderers


git-svn-id: https://pmd.svn.sourceforge.net/svnroot/pmd/trunk@6514 51baf565-9d33-0410-a72c-fc3788e3496d
This commit is contained in:
Xavier Le Vourch committed 2008-09-26 18:45:19 +00:00
1 parent eabf55cf2e
commit 67c81944b8
2 files changed
+64 -70

No files matched your search

@@ -38,6 +38,10 @@ package net.sourceforge.pmd.runtime.cmd;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.StringWriter;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import name.herlin.command.CommandException;
import net.sourceforge.pmd.Report;
@@ -101,8 +105,11 @@ public class RenderReportCmd extends AbstractDefaultCommand {
private static final Logger log = Logger.getLogger(RenderReportCmd.class);
private IProject project;
private Renderer renderer;
private String reportName;
/**
* Table containing the renderers indexed by the file name.
*/
private HashMap renderers = new HashMap();
/**
* Default Constructor
@@ -116,6 +123,16 @@ public class RenderReportCmd extends AbstractDefaultCommand {
this.setTerminated(false);
}
/**
* Register a renderer and its associated file for processing.
*
* @param renderer the renderer
* @param reportFile the file name where the report will be saved
*/
public void registerRenderer(Renderer renderer, String reportFile) {
renderers.put(reportFile, renderer);
}
/**
* @see name.herlin.command.AbstractProcessableCommand#execute()
*/
@@ -125,25 +142,39 @@ public class RenderReportCmd extends AbstractDefaultCommand {
log.debug(" Create a report object");
final Report report = this.createReport(this.project);
log.debug(" Render the report");
final String reportString = this.renderer.render(report);
log.debug(" Getting the report folder");
final IFolder folder = this.project.getFolder(PMDRuntimeConstants.REPORT_FOLDER);
if (!folder.exists()) {
folder.create(true, true, this.getMonitor());
}
log.debug(" Creating the report file");
final IFile reportFile = folder.getFile(this.reportName);
final InputStream contentsStream = new ByteArrayInputStream(reportString.getBytes());
if (reportFile.exists()) {
reportFile.setContents(contentsStream, true, false, this.getMonitor());
} else {
reportFile.create(contentsStream, true, this.getMonitor());
Iterator i = renderers.entrySet().iterator();
while (i.hasNext()) {
Map.Entry entry = (Map.Entry) i.next();
final String reportName = (String) entry.getKey();
final Renderer renderer = (Renderer) entry.getValue();
log.debug(" Render the report");
final StringWriter w = new StringWriter();
renderer.setWriter(w);
renderer.start();
renderer.renderFileReport(report);
renderer.end();
final String reportString = w.toString();
log.debug(" Creating the report file");
final IFile reportFile = folder.getFile(reportName);
final InputStream contentsStream = new ByteArrayInputStream(reportString.getBytes());
if (reportFile.exists()) {
reportFile.setContents(contentsStream, true, false, this.getMonitor());
} else {
reportFile.create(contentsStream, true, this.getMonitor());
}
reportFile.refreshLocal(IResource.DEPTH_INFINITE, this.getMonitor());
contentsStream.close();
}
reportFile.refreshLocal(IResource.DEPTH_INFINITE, this.getMonitor());
contentsStream.close();
} catch (CoreException e) {
log.debug("Core Exception: " + e.getMessage(), e);
throw new CommandException(e);
@@ -161,7 +192,7 @@ public class RenderReportCmd extends AbstractDefaultCommand {
*/
public void reset() {
this.setProject(null);
this.setRenderer(null);
this.renderers = new HashMap();
this.setTerminated(false);
}
@@ -172,25 +203,11 @@ public class RenderReportCmd extends AbstractDefaultCommand {
this.project = project;
}
/**
* @param renderer The renderer to set.
*/
public void setRenderer(final Renderer renderer) {
this.renderer = renderer;
}
/**
* @param reportName The reportName to set.
*/
public void setReportName(final String reportName) {
this.reportName = reportName;
}
/**
* @see name.herlin.command.Command#isReadyToExecute()
*/
public boolean isReadyToExecute() {
return this.project != null && this.renderer != null && this.reportName != null;
return this.project != null && !this.renderers.isEmpty();
}
/**
@@ -24,10 +24,10 @@ import org.eclipse.ui.IWorkbenchPart;
/**
* Process GenerateReport action menu.
* Generate a HTML report on the current project.
*
*
* @author Philippe Herlin
* @version $Revision$
*
*
* $Log$
* Revision 1.2 2006/10/10 22:31:01 phherlin
* Fix other PMD warnings
@@ -67,40 +67,17 @@ public class GenerateReportAction implements IObjectActionDelegate {
try {
final IProject project = getProject((IStructuredSelection) sel);
if (project != null) {
final RenderReportCmd cmd1 = new RenderReportCmd();
cmd1.setProject(project);
cmd1.setRenderer(new HTMLRenderer());
cmd1.setReportName(PMDUiConstants.HTML_REPORT_NAME);
cmd1.setUserInitiated(true);
cmd1.performExecute();
final RenderReportCmd cmd2 = new RenderReportCmd();
cmd2.setProject(project);
cmd2.setRenderer(new CSVRenderer());
cmd2.setReportName(PMDUiConstants.CSV_REPORT_NAME);
cmd1.setUserInitiated(true);
cmd2.performExecute();
final RenderReportCmd cmd3 = new RenderReportCmd();
cmd3.setProject(project);
cmd3.setRenderer(new XMLRenderer());
cmd3.setReportName(PMDUiConstants.XML_REPORT_NAME);
cmd1.setUserInitiated(true);
cmd3.performExecute();
final RenderReportCmd cmd4 = new RenderReportCmd();
cmd4.setProject(project);
cmd4.setRenderer(new TextRenderer());
cmd4.setReportName(PMDUiConstants.TXT_REPORT_NAME);
cmd1.setUserInitiated(true);
cmd4.performExecute();
final RenderReportCmd cmd5 = new RenderReportCmd();
cmd5.setProject(project);
cmd5.setRenderer(new VBHTMLRenderer());
cmd5.setReportName(PMDUiConstants.VBHTML_REPORT_NAME);
cmd5.setUserInitiated(true);
cmd5.performExecute();
final RenderReportCmd cmd = new RenderReportCmd();
cmd.setProject(project);
cmd.setUserInitiated(true);
cmd.registerRenderer(new HTMLRenderer(), PMDUiConstants.HTML_REPORT_NAME);
cmd.registerRenderer(new CSVRenderer(), PMDUiConstants.CSV_REPORT_NAME);
cmd.registerRenderer(new XMLRenderer(), PMDUiConstants.XML_REPORT_NAME);
cmd.registerRenderer(new TextRenderer(), PMDUiConstants.TXT_REPORT_NAME);
cmd.registerRenderer(new VBHTMLRenderer(), PMDUiConstants.VBHTML_REPORT_NAME);
cmd.performExecute();
}
} catch (CommandException e) {
PMDUiPlugin.getDefault().showError(
@@ -116,7 +93,7 @@ public class GenerateReportAction implements IObjectActionDelegate {
public final void selectionChanged(IAction action, ISelection selection) {
// nothing to do
}
/**
* Get a project from a selection
* @param selection
@@ -125,13 +102,13 @@ public class GenerateReportAction implements IObjectActionDelegate {
private IProject getProject(final IStructuredSelection selection) {
IProject project = null;
final Object object = selection.getFirstElement();
if ((object != null) && (object instanceof IAdaptable)) {
final IResource resource = (IResource) ((IAdaptable) object).getAdapter(IResource.class);
if (object != null && object instanceof IAdaptable) {
final IResource resource = (IResource) ((IAdaptable) object).getAdapter(IResource.class);
if (resource != null) {
project = resource.getProject();
}
}
return project;
}