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:
@ -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());
|
||||
|
@ -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);
|
||||
}
|
Reference in New Issue
Block a user