refactoring, cleanup - no functional changes

git-svn-id: https://pmd.svn.sourceforge.net/svnroot/pmd/trunk@7273 51baf565-9d33-0410-a72c-fc3788e3496d
This commit is contained in:
Brian Remedios
2011-09-17 15:21:51 +00:00
parent 28360da680
commit 6f2cce7b71
2 changed files with 87 additions and 60 deletions

View File

@ -54,6 +54,7 @@ import net.sourceforge.pmd.eclipse.runtime.PMDRuntimeConstants;
import net.sourceforge.pmd.eclipse.runtime.properties.IProjectProperties;
import net.sourceforge.pmd.eclipse.runtime.properties.PropertiesException;
import net.sourceforge.pmd.eclipse.util.IOUtil;
import net.sourceforge.pmd.util.StringUtil;
import org.apache.log4j.Logger;
import org.eclipse.core.resources.IFile;
@ -71,10 +72,6 @@ import org.eclipse.ui.IPropertyListener;
*/
public class DetectCutAndPasteCmd extends AbstractProjectCommand {
private static final long serialVersionUID = 1L;
private static final Logger log = Logger.getLogger(DetectCutAndPasteCmd.class);
private Language language;
private int minTileSize;
private Renderer renderer;
@ -82,28 +79,41 @@ public class DetectCutAndPasteCmd extends AbstractProjectCommand {
private boolean createReport;
private List<IPropertyListener> listeners;
private static final long serialVersionUID = 1L;
private static final Logger log = Logger.getLogger(DetectCutAndPasteCmd.class);
/**
* Default Constructor
*/
public DetectCutAndPasteCmd() {
super("DetectCutAndPaste", "Detect Cut & paste for a project");
this.setOutputProperties(true);
this.setReadOnly(false);
this.setTerminated(false);
this.listeners = new ArrayList<IPropertyListener>();
setOutputProperties(true);
setReadOnly(false);
setTerminated(false);
listeners = new ArrayList<IPropertyListener>();
}
private void notifyListeners(final CPD cpd) {
// trigger event propertyChanged for all listeners
Display.getDefault().asyncExec(new Runnable() {
public void run() {
for (IPropertyListener listener : listeners) {
listener.propertyChanged(cpd.getMatches(), PMDRuntimeConstants.PROPERTY_CPD);
}
}
});
}
/**
* @see name.herlin.command.AbstractProcessableCommand#execute()
*/
@Override
public void execute() throws CommandException {
try {
// find the files
List<File> files = findFiles();
List<File> files = findCandidateFiles();
if (files.size() == 0) {
if (files.isEmpty()) {
logInfo("No files found for specified language.");
} else {
logInfo("Found " + files.size() + " files for the specified language. Performing CPD.");
@ -112,24 +122,13 @@ public class DetectCutAndPasteCmd extends AbstractProjectCommand {
beginTask("Finding suspect Cut And Paste", getStepCount()*2);
if (!isCanceled()) {
// detect cut and paste
final CPD cpd = detectCutAndPaste(files);
if (!isCanceled()) {
// if the command was not canceled
if (createReport) {
// create the report optionally
this.renderReport(cpd.getMatches());
renderReport(cpd.getMatches());
}
// trigger event propertyChanged for all listeners
Display.getDefault().asyncExec(new Runnable() {
public void run() {
for (IPropertyListener listener : listeners) {
listener.propertyChanged(cpd.getMatches(), PMDRuntimeConstants.PROPERTY_CPD);
}
}
});
notifyListeners(cpd);
}
}
} catch (CoreException e) {
@ -171,7 +170,7 @@ public class DetectCutAndPasteCmd extends AbstractProjectCommand {
* @param tilesize The tilesize to set.
*/
public void setMinTileSize(final int tilesize) {
this.minTileSize = tilesize;
minTileSize = tilesize;
}
/**
@ -203,6 +202,10 @@ public class DetectCutAndPasteCmd extends AbstractProjectCommand {
listeners.add(listener);
}
private boolean canRenderReport() {
return renderer != null && StringUtil.isNotEmpty(reportName);
}
/**
* @see name.herlin.command.Command#isReadyToExecute()
*/
@ -211,7 +214,7 @@ public class DetectCutAndPasteCmd extends AbstractProjectCommand {
return super.isReadyToExecute()
&& language != null
&& (!createReport // need a renderer and reportName if a report should be created
|| renderer != null && reportName != null);
|| canRenderReport());
}
/**
@ -221,7 +224,7 @@ public class DetectCutAndPasteCmd extends AbstractProjectCommand {
* @throws PropertiesException
* @throws CoreException
*/
private List<File> findFiles() throws PropertiesException, CoreException {
private List<File> findCandidateFiles() throws PropertiesException, CoreException {
final IProjectProperties properties = projectProperties();
final CPDVisitor visitor = new CPDVisitor();
visitor.setWorkingSet(properties.getProjectWorkingSet());
@ -291,10 +294,10 @@ public class DetectCutAndPasteCmd extends AbstractProjectCommand {
final IFile reportFile = folder.getFile(reportName);
contentsStream = new ByteArrayInputStream(reportString.getBytes());
if (reportFile.exists()) {
log.debug(" Overwritting the report file");
log.debug(" Overwriting report file");
reportFile.setContents(contentsStream, true, false, getMonitor());
} else {
log.debug(" Creating the report file");
log.debug(" Creating report file");
reportFile.create(contentsStream, true, getMonitor());
}
reportFile.refreshLocal(IResource.DEPTH_INFINITE, getMonitor());

View File

@ -51,6 +51,7 @@ import net.sourceforge.pmd.eclipse.runtime.PMDRuntimeConstants;
import net.sourceforge.pmd.eclipse.runtime.builder.MarkerUtil;
import net.sourceforge.pmd.eclipse.util.IOUtil;
import net.sourceforge.pmd.renderers.Renderer;
import net.sourceforge.pmd.util.StringUtil;
import org.apache.log4j.Logger;
import org.eclipse.core.resources.IFile;
@ -70,11 +71,11 @@ import org.eclipse.jdt.core.JavaCore;
* @author Philippe Herlin
*
*/
public class RenderReportCmd extends AbstractProjectCommand {
public class RenderReportsCmd extends AbstractProjectCommand {
private static final long serialVersionUID = 1L;
private static final Logger log = Logger.getLogger(RenderReportCmd.class);
private static final Logger log = Logger.getLogger(RenderReportsCmd.class);
/**
* Table containing the renderers indexed by the file name.
@ -84,12 +85,12 @@ public class RenderReportCmd extends AbstractProjectCommand {
/**
* Default Constructor
*/
public RenderReportCmd() {
super("RenderReport", "Produce a HTML report for a project");
public RenderReportsCmd() {
super("RenderReport", "Produce reports for a project");
this.setOutputProperties(false);
this.setReadOnly(false);
this.setTerminated(false);
setOutputProperties(false);
setReadOnly(false);
setTerminated(false);
}
/**
@ -102,12 +103,54 @@ public class RenderReportCmd extends AbstractProjectCommand {
renderers.put(reportFile, renderer);
}
/**
*
* @param report
* @param folder
* @param reportName
* @param renderer
* @throws IOException
* @throws CoreException
*/
private void render(Report report, IFolder folder, String reportName, Renderer renderer) throws IOException, CoreException {
StringWriter writer = new StringWriter();
String reportString = null;
try {
renderer.setWriter(writer);
renderer.start();
renderer.renderFileReport(report);
renderer.end();
reportString = writer.toString();
} finally {
IOUtil.closeQuietly(writer);
}
if (StringUtil.isEmpty(reportString)) {
log.debug("Missing content for report: " + reportName);
return;
}
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, getMonitor());
} else {
reportFile.create(contentsStream, true, getMonitor());
}
reportFile.refreshLocal(IResource.DEPTH_INFINITE, getMonitor());
contentsStream.close();
}
/**
* @see name.herlin.command.AbstractProcessableCommand#execute()
*/
@Override
public void execute() throws CommandException {
StringWriter writer = null;
try {
log.debug("Starting RenderReport command");
log.debug(" Create a report object");
@ -120,28 +163,10 @@ public class RenderReportCmd extends AbstractProjectCommand {
}
for (Map.Entry<String, Renderer> entry: renderers.entrySet()) {
final String reportName = entry.getKey();
final Renderer renderer = entry.getValue();
String reportName = entry.getKey();
Renderer renderer = entry.getValue();
log.debug(" Render the report");
writer = new StringWriter();
renderer.setWriter(writer);
renderer.start();
renderer.renderFileReport(report);
renderer.end();
String reportString = writer.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, getMonitor());
} else {
reportFile.create(contentsStream, true, getMonitor());
}
reportFile.refreshLocal(IResource.DEPTH_INFINITE, getMonitor());
contentsStream.close();
render(report, folder, reportName, renderer);
}
} catch (CoreException e) {
log.debug("Core Exception: " + e.getMessage(), e);
@ -149,8 +174,7 @@ public class RenderReportCmd extends AbstractProjectCommand {
} catch (IOException e) {
log.debug("Core Exception: " + e.getMessage(), e);
throw new CommandException(e);
} finally {
IOUtil.closeQuietly(writer);
} finally {
log.debug("End of RenderReport command");
setTerminated(true);
}