Added ability to cancel a CPD run while in process by adding a return code to the listener methods
git-svn-id: https://pmd.svn.sourceforge.net/svnroot/pmd/trunk@804 51baf565-9d33-0410-a72c-fc3788e3496d
This commit is contained in:
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* User: tom
|
||||
* Date: Jul 30, 2002
|
||||
* Time: 9:53:14 AM
|
||||
* User: tom
|
||||
* Date: Jul 30, 2002
|
||||
* Time: 9:53:14 AM
|
||||
*/
|
||||
package net.sourceforge.pmd.cpd;
|
||||
|
||||
@ -70,7 +70,7 @@ public class CPD {
|
||||
|
||||
|
||||
public void go() {
|
||||
listener.update("Starting to process " + tokenSets.size() + " files");
|
||||
if (!listener.update("Starting to process " + tokenSets.size() + " files")) return;
|
||||
GST gst = new GST(tokenSets, minimumTileSize);
|
||||
results = gst.crunch(listener);
|
||||
}
|
||||
@ -90,8 +90,8 @@ public class CPD {
|
||||
TokenList tl = tokenSets.getTokenList(firstToken);
|
||||
int endLine = firstToken.getBeginLine()+ results.getTileLineCount(tile, tokenSets);
|
||||
return tl.getSlice(firstToken.getBeginLine()-1, endLine-1);
|
||||
} catch (Exception ex) {ex.printStackTrace(); }
|
||||
return "";
|
||||
} catch (Exception ex) {ex.printStackTrace(); }
|
||||
return "";
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
@ -111,4 +111,4 @@ public class CPD {
|
||||
System.out.println(renderer.render(cpd));
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -8,8 +8,8 @@ package net.sourceforge.pmd.cpd;
|
||||
import java.io.File;
|
||||
|
||||
public interface CPDListener {
|
||||
public void update(String msg);
|
||||
public void addedFile(int fileCount, File file);
|
||||
public void addingTokens(int tokenSetCount, int doneSoFar, String tokenSrcID);
|
||||
public void addedNewTile(Tile tile, int tilesSoFar, int totalTiles);
|
||||
public boolean update(String msg);
|
||||
public boolean addedFile(int fileCount, File file);
|
||||
public boolean addingTokens(int tokenSetCount, int doneSoFar, String tokenSrcID);
|
||||
public boolean addedNewTile(Tile tile, int tilesSoFar, int totalTiles);
|
||||
}
|
||||
|
@ -1,30 +1,33 @@
|
||||
/*
|
||||
* User: tom
|
||||
* Date: Aug 6, 2002
|
||||
* Time: 2:41:22 PM
|
||||
* User: tom
|
||||
* Date: Aug 6, 2002
|
||||
* Time: 2:41:22 PM
|
||||
*/
|
||||
package net.sourceforge.pmd.cpd;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
public class CPDListenerImpl implements CPDListener{
|
||||
public void update(String msg) {
|
||||
public boolean update(String msg) {
|
||||
System.out.println(msg);
|
||||
return true;
|
||||
}
|
||||
|
||||
public void addedFile(int fileCount, File file) {
|
||||
public boolean addedFile(int fileCount, File file) {
|
||||
update("Added file " + file.getAbsolutePath());
|
||||
return true;
|
||||
}
|
||||
|
||||
public void addingTokens(int tokenSetCount, int doneSoFar, String tokenSrcID) {
|
||||
public boolean addingTokens(int tokenSetCount, int doneSoFar, String tokenSrcID) {
|
||||
update("Adding token set " + tokenSrcID);
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean addedNewTile(Tile tile, int tilesSoFar, int totalTiles) {
|
||||
update("Added new tile " + tile.getImage());
|
||||
return true;
|
||||
}
|
||||
|
||||
public void addedNewTile(Tile tile, int tilesSoFar, int totalTiles) {
|
||||
update("Added new tile " + tile.getImage());
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
@ -19,16 +19,16 @@ public class GST {
|
||||
this.minimumTileSize = minimumTileSize;
|
||||
this.tokenSets = tokenSets;
|
||||
}
|
||||
|
||||
|
||||
public Results crunch(CPDListener listener) {
|
||||
Results results = new Results();
|
||||
Occurrences occ =new Occurrences(tokenSets, listener);
|
||||
|
||||
while (!occ.isEmpty()) {
|
||||
listener.update("Tiles left to be crunched " + occ.size());
|
||||
if (!listener.update("Tiles left to be crunched " + occ.size())) return null;
|
||||
|
||||
// add any tiles over the minimum size to the results
|
||||
listener.update("Adding large tiles to results");
|
||||
if (!listener.update("Adding large tiles to results")) return null;
|
||||
for (Iterator i = occ.getTiles(); i.hasNext();) {
|
||||
Tile tile = (Tile)i.next();
|
||||
if (tile.getTokenCount() >= minimumTileSize) {
|
||||
@ -68,7 +68,7 @@ public class GST {
|
||||
Tile newTile = tile.copy();
|
||||
newTile.add(token);
|
||||
newOcc.addTile(newTile, tok);
|
||||
listener.addedNewTile(newTile, tilesSoFar, totalTiles);
|
||||
if (!listener.addedNewTile(newTile, tilesSoFar, totalTiles)) break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* User: tom
|
||||
* Date: Aug 6, 2002
|
||||
* Time: 2:45:54 PM
|
||||
* User: tom
|
||||
* Date: Aug 6, 2002
|
||||
* Time: 2:45:54 PM
|
||||
*/
|
||||
package net.sourceforge.pmd.cpd;
|
||||
|
||||
@ -34,7 +34,7 @@ public class GUI implements CPDListener {
|
||||
resultsTextArea.setText("");
|
||||
go();
|
||||
}
|
||||
}).start();
|
||||
}).start();
|
||||
}
|
||||
}
|
||||
|
||||
@ -57,7 +57,7 @@ public class GUI implements CPDListener {
|
||||
|
||||
private JTextField rootDirectoryField = new JTextField(System.getProperty("user.home"));
|
||||
private JTextField minimumLengthField= new JTextField("75");
|
||||
private JTextField timeField = new JTextField(6);
|
||||
private JTextField timeField = new JTextField(6);
|
||||
|
||||
private JProgressBar tokenizingFilesBar = new JProgressBar();
|
||||
private JProgressBar addingTokensBar = new JProgressBar();
|
||||
@ -166,10 +166,10 @@ public class GUI implements CPDListener {
|
||||
CPD cpd = new CPD();
|
||||
cpd.setListener(this);
|
||||
cpd.setMinimumTileSize(Integer.parseInt(minimumLengthField.getText()));
|
||||
tilesOnThisPassBar.setMinimum(0);
|
||||
tilesOnThisPassBar.setMinimum(0);
|
||||
tilesOnThisPassBar.setStringPainted(true);
|
||||
addingTokensBar.setMinimum(0);
|
||||
tokenizingFilesBar.setMinimum(0);
|
||||
addingTokensBar.setMinimum(0);
|
||||
tokenizingFilesBar.setMinimum(0);
|
||||
addingTokensBar.setStringPainted(true);
|
||||
if (rootDirectoryField.getText().endsWith(".java")) {
|
||||
cpd.add(new File(rootDirectoryField.getText()));
|
||||
@ -180,8 +180,8 @@ public class GUI implements CPDListener {
|
||||
cpd.addAllInDirectory(rootDirectoryField.getText());
|
||||
}
|
||||
}
|
||||
final long start = System.currentTimeMillis();
|
||||
javax.swing.Timer t = new javax.swing.Timer(1000, new ActionListener() {
|
||||
final long start = System.currentTimeMillis();
|
||||
javax.swing.Timer t = new javax.swing.Timer(1000, new ActionListener() {
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
long now = System.currentTimeMillis();
|
||||
long elapsedMillis = now-start;
|
||||
@ -192,11 +192,11 @@ public class GUI implements CPDListener {
|
||||
timeField.setText("" + hours + ":" + minutes + ":" + seconds);
|
||||
}
|
||||
});
|
||||
t.start();
|
||||
t.start();
|
||||
|
||||
cpd.go();
|
||||
t.stop();
|
||||
currentTileField.setText("");
|
||||
t.stop();
|
||||
currentTileField.setText("");
|
||||
CPDRenderer renderer = new TextRenderer();
|
||||
String report = renderer.render(cpd);
|
||||
if (report.length() == 0) {
|
||||
@ -210,16 +210,18 @@ public class GUI implements CPDListener {
|
||||
}
|
||||
}
|
||||
|
||||
public void update(String msg) {
|
||||
public boolean update(String msg) {
|
||||
//System.out.println(msg);
|
||||
return true;
|
||||
}
|
||||
|
||||
public void addedFile(int fileCount, File file) {
|
||||
public boolean addedFile(int fileCount, File file) {
|
||||
tokenizingFilesBar.setMaximum(fileCount);
|
||||
tokenizingFilesBar.setValue(tokenizingFilesBar.getValue()+1);
|
||||
return true;
|
||||
}
|
||||
|
||||
public void addingTokens(int tokenSetCount, int doneSoFar, String tokenSrcID) {
|
||||
public boolean addingTokens(int tokenSetCount, int doneSoFar, String tokenSrcID) {
|
||||
addingTokensBar.setMaximum(tokenSetCount);
|
||||
if (tokenSrcID.indexOf("/") != -1) {
|
||||
addingTokensBar.setString(findName(tokenSrcID, "/"));
|
||||
@ -231,9 +233,10 @@ public class GUI implements CPDListener {
|
||||
addingTokensBar.setString(tokenSrcID);
|
||||
}
|
||||
addingTokensBar.setValue(doneSoFar);
|
||||
return true;
|
||||
}
|
||||
|
||||
public void addedNewTile(Tile tile, int tilesSoFar, int totalTiles) {
|
||||
public boolean addedNewTile(Tile tile, int tilesSoFar, int totalTiles) {
|
||||
addingTokensBar.setValue(addingTokensBar.getMaximum());
|
||||
addingTokensBar.setString("");
|
||||
if (tile.getImage().length() <= 20) {
|
||||
@ -243,8 +246,9 @@ public class GUI implements CPDListener {
|
||||
}
|
||||
tilesOnThisPassBar.setMaximum(totalTiles);
|
||||
tilesOnThisPassBar.setValue(tilesSoFar);
|
||||
tilesOnThisPassBar.setString(tilesSoFar + "/" + totalTiles);
|
||||
}
|
||||
tilesOnThisPassBar.setString(tilesSoFar + "/" + totalTiles);
|
||||
return true;
|
||||
}
|
||||
|
||||
private String findName(String name, String slash) {
|
||||
int lastSlash = name.lastIndexOf(slash)+1;
|
||||
@ -252,4 +256,3 @@ public class GUI implements CPDListener {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
@ -26,7 +26,7 @@ public class Occurrences extends TileOccurrences implements Serializable {
|
||||
int totalCount = tss.tokenCount();
|
||||
for (Iterator j = tss.iterator();j.hasNext();) {
|
||||
TokenList ts = (TokenList)j.next();
|
||||
listener.addingTokens(totalCount, doneSoFar, ts.getID());
|
||||
if (!listener.addingTokens(totalCount, doneSoFar, ts.getID())) break;
|
||||
doneSoFar += ts.size();
|
||||
for (Iterator i = ts.iterator(); i.hasNext();) {
|
||||
TokenEntry tok = (TokenEntry)i.next();
|
||||
|
Reference in New Issue
Block a user