1 package net.sf.jlayercheck.util.model;
2
3 import java.io.File;
4 import java.io.FileInputStream;
5 import java.io.FileNotFoundException;
6 import java.io.IOException;
7 import java.net.MalformedURLException;
8 import java.net.URL;
9 import java.util.Map;
10 import java.util.TreeMap;
11
12 import org.objectweb.asm.ClassReader;
13 import org.objectweb.asm.ClassVisitor;
14
15 public class FilesystemClassSource implements ClassSource {
16
17
18 protected String bin;
19
20
21 protected String src;
22
23
24 protected String basedir;
25
26 public FilesystemClassSource(String basedir, String bin, String src) {
27 this.basedir = basedir;
28 this.bin = bin;
29 this.src = src;
30 }
31
32 public void call(ClassVisitor v) throws IOException {
33 File f = new File(getBasedir(), getBin());
34
35 checkDirectory(v, f);
36 }
37
38 protected void checkDirectory(ClassVisitor v, File f) throws IOException, FileNotFoundException {
39 File files[] = f.listFiles();
40 if (files != null) {
41 for(File file : files) {
42 if (file.isDirectory()) {
43 checkDirectory(v, file);
44 } else {
45 String name = file.getAbsolutePath();
46 if (name.endsWith(".class")) {
47 new ClassReader(new FileInputStream(file)).accept(v, 0);
48 }
49 }
50 }
51 }
52 }
53
54 public Map<String, URL> getSourceFiles() {
55 Map<String, URL> result = new TreeMap<String, URL>();
56
57 result.putAll(findFiles(getSrc(), "", ".java"));
58
59 return result;
60 }
61
62
63
64
65
66
67
68
69 protected Map<String, URL> findFiles(String base, String src, String extension) {
70 Map<String, URL> result = new TreeMap<String, URL>();
71
72 File searchbase = new File(base, src);
73 File[] files = searchbase.listFiles();
74 if (files != null) {
75 for(File singlefile : files) {
76 if (singlefile.isDirectory()) {
77 result.putAll(findFiles(base, src + File.separator + singlefile.getName(), extension));
78 }
79
80 if (singlefile.isFile()) {
81 if (singlefile.getName().endsWith(extension)) {
82 try {
83 String filename = src + File.separator + singlefile.getName();
84 filename = filename.replaceAll("^/", "");
85 filename = filename.replaceAll(extension+"$", "");
86 result.put(filename, singlefile.toURL());
87 } catch (MalformedURLException e) {
88 e.printStackTrace();
89 }
90 }
91 }
92 }
93 }
94
95 return result;
96 }
97
98 public String getBin() {
99 return bin;
100 }
101
102 public void setBin(String bin) {
103 this.bin = bin;
104 }
105
106 public String getSrc() {
107 return src;
108 }
109
110 public void setSrc(String src) {
111 this.src = src;
112 }
113
114 public String getBasedir() {
115 return basedir;
116 }
117
118 public void setBasedir(String basedir) {
119 this.basedir = basedir;
120 }
121 }