From 1db5929a814d8a0f2e1b027b5d4d9aa78ec06c12 Mon Sep 17 00:00:00 2001 From: David Craine Date: Wed, 28 Aug 2002 15:11:11 +0000 Subject: [PATCH] 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 --- pmd/src/net/sourceforge/pmd/cpd/CPD.java | 14 +++--- .../net/sourceforge/pmd/cpd/CPDListener.java | 8 ++-- .../sourceforge/pmd/cpd/CPDListenerImpl.java | 25 ++++++----- pmd/src/net/sourceforge/pmd/cpd/GST.java | 8 ++-- pmd/src/net/sourceforge/pmd/cpd/GUI.java | 43 ++++++++++--------- .../net/sourceforge/pmd/cpd/Occurrences.java | 2 +- 6 files changed, 53 insertions(+), 47 deletions(-) diff --git a/pmd/src/net/sourceforge/pmd/cpd/CPD.java b/pmd/src/net/sourceforge/pmd/cpd/CPD.java index 336b610ccc..c5a3031e57 100644 --- a/pmd/src/net/sourceforge/pmd/cpd/CPD.java +++ b/pmd/src/net/sourceforge/pmd/cpd/CPD.java @@ -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)); } -} +} \ No newline at end of file diff --git a/pmd/src/net/sourceforge/pmd/cpd/CPDListener.java b/pmd/src/net/sourceforge/pmd/cpd/CPDListener.java index 60124142c2..0ca4ff38e3 100644 --- a/pmd/src/net/sourceforge/pmd/cpd/CPDListener.java +++ b/pmd/src/net/sourceforge/pmd/cpd/CPDListener.java @@ -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); } diff --git a/pmd/src/net/sourceforge/pmd/cpd/CPDListenerImpl.java b/pmd/src/net/sourceforge/pmd/cpd/CPDListenerImpl.java index 6be2b4dd05..8a7307ba04 100644 --- a/pmd/src/net/sourceforge/pmd/cpd/CPDListenerImpl.java +++ b/pmd/src/net/sourceforge/pmd/cpd/CPDListenerImpl.java @@ -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()); - } - } - diff --git a/pmd/src/net/sourceforge/pmd/cpd/GST.java b/pmd/src/net/sourceforge/pmd/cpd/GST.java index 1f053bd539..ebebfda76e 100644 --- a/pmd/src/net/sourceforge/pmd/cpd/GST.java +++ b/pmd/src/net/sourceforge/pmd/cpd/GST.java @@ -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; } } } diff --git a/pmd/src/net/sourceforge/pmd/cpd/GUI.java b/pmd/src/net/sourceforge/pmd/cpd/GUI.java index 389dec8b54..b08ca9a4e7 100644 --- a/pmd/src/net/sourceforge/pmd/cpd/GUI.java +++ b/pmd/src/net/sourceforge/pmd/cpd/GUI.java @@ -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 { } } - diff --git a/pmd/src/net/sourceforge/pmd/cpd/Occurrences.java b/pmd/src/net/sourceforge/pmd/cpd/Occurrences.java index 5fd4ca54d7..20ed561e91 100644 --- a/pmd/src/net/sourceforge/pmd/cpd/Occurrences.java +++ b/pmd/src/net/sourceforge/pmd/cpd/Occurrences.java @@ -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();