1 package net.sourceforge.pmd.cpd;
2
3 import java.io.File;
4 import java.io.FileReader;
5 import java.io.IOException;
6 import java.util.HashMap;
7 import java.util.Iterator;
8 import java.util.List;
9 import java.util.Map;
10
11 public class CPD {
12
13 private Map source = new HashMap();
14 private CPDListener listener = new CPDNullListener();
15 private Tokens tokens = new Tokens();
16 private int minimumTileSize;
17 private MatchAlgorithm matchAlgorithm;
18 private Language language;
19
20 public CPD(int minimumTileSize, Language language) {
21 this.minimumTileSize = minimumTileSize;
22 this.language = language;
23 }
24
25 public void setCpdListener(CPDListener cpdListener) {
26 this.listener = cpdListener;
27 }
28
29 public void go() {
30 matchAlgorithm = new MatchAlgorithm(source, tokens);
31 matchAlgorithm.setListener(listener);
32 matchAlgorithm.findMatches(minimumTileSize);
33 }
34
35 public Iterator getMatches() {
36 return matchAlgorithm.matches();
37 }
38
39 public void add(File file) throws IOException {
40 add(1, file);
41 }
42
43 public void addAllInDirectory(String dir) throws IOException {
44 addDirectory(dir, false);
45 }
46
47 public void addRecursively(String dir) throws IOException {
48 addDirectory(dir, true);
49 }
50
51 public void add(List files) throws IOException {
52 for (Iterator i = files.iterator(); i.hasNext();) {
53 add(files.size(), (File) i.next());
54 }
55 }
56
57 private void addDirectory(String dir, boolean recurse) throws IOException {
58 FileFinder finder = new FileFinder();
59 add(finder.findFilesFrom(dir, language.getFileFilter(), recurse));
60 }
61
62 private void add(int fileCount, File file) throws IOException {
63 listener.addedFile(fileCount, file);
64 SourceCode sourceCode = new SourceCode(file.getAbsolutePath());
65 FileReader reader = new FileReader(file);
66 language.getTokenizer().tokenize(sourceCode, tokens, reader);
67 reader.close();
68 source.put(sourceCode.getFileName(), sourceCode);
69 }
70
71 public static void main(String[] args) {
72 if (args.length >3 || args.length < 2) {
73 usage();
74 System.exit(1);
75 }
76
77 try {
78 String lang = LanguageFactory.JAVA_KEY;
79 if (args.length == 3) {
80 lang = args[2];
81 }
82 LanguageFactory f = new LanguageFactory();
83 Language language = f.createLanguage(lang);
84 CPD cpd = new CPD(Integer.parseInt(args[0]), language);
85 cpd.addRecursively(args[1]);
86 long start = System.currentTimeMillis();
87 cpd.go();
88 long total = System.currentTimeMillis() - start;
89 System.out.println(new SimpleRenderer().render(cpd.getMatches()));
90 System.out.println("That took " + total + " milliseconds");
91 } catch (Exception e) {
92 e.printStackTrace();
93 }
94 }
95
96 private static void usage() {
97 System.out.println("Usage:");
98 System.out.println(" java net.sourceforge.pmd.cpd.CPD <tile size> <directory> [<language>]");
99 System.out.println("i.e: ");
100 System.out.println(" java net.sourceforge.pmd.cpd.CPD 100 c://jdk14//src//java ");
101 System.out.println("or: ");
102 System.out.println(" java net.sourceforge.pmd.cpd.CPD 100 c://apache//src// cpp");
103 }
104
105 }
This page was automatically generated by Maven