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:
David Craine
2002-08-28 15:11:11 +00:00
parent 22a52d8c44
commit 1db5929a81
6 changed files with 53 additions and 47 deletions

View File

@ -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));
}
}
}

View File

@ -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);
}

View File

@ -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());
}
}

View File

@ -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;
}
}
}

View File

@ -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 {
}
}

View File

@ -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();