Squiz Matrix  4.12.2
 All Data Structures Namespaces Functions Variables Pages
ClassChecker.java
1 package ij.plugin;
2 import ij.*;
3 import ij.util.*;
4 import java.io.*;
5 import java.util.*;
6 
8 public class ClassChecker implements PlugIn {
9 
10  char separatorChar = Prefs.separator.charAt(0);
11 
12  public void run(String arg) {
13  deleteDuplicates();
14  }
15 
16  void deleteDuplicates() {
17  String[] paths = getClassFiles();
18  String name;
19  File file1, file2;
20  long date1, date2;
21  for (int i=0; i<paths.length; i++) {
22  name = getName(paths[i]);
23  if (name.endsWith("classx"))
24  continue;
25  for (int j=i+1; j<paths.length; j++) {
26  if (paths[j].endsWith(name)) {
27  file1 = new File(paths[i]);
28  file2 = new File(paths[j]);
29  if (file1==null || file2==null)
30  continue;
31  date1 = file1.lastModified();
32  date2 = file2.lastModified();
33  if (date1<date2) {
34  write(paths[i]);
35  file1.delete();
36  break;
37  } else if (date2<date1) {
38  write(paths[j]);
39  paths[j] += "x";
40  file2.delete();
41  } else {
42  if (paths[i].endsWith("plugins"+name)) {
43  write(paths[i]);
44  file1.delete();
45  break;
46  } else if (paths[j].endsWith("plugins"+name)) {
47  write(paths[j]);
48  paths[j] += "x";
49  file2.delete();
50  }
51  }
52  }
53  }
54  }
55  }
56 
57  void write(String path) {
58  IJ.log("Deleting duplicate class: "+path);
59  }
60 
61  public String getName(String path) {
62  int index = path.lastIndexOf(separatorChar);
63  return (index < 0) ? path : path.substring(index);
64  }
65 
68  String[] getClassFiles() {
69  String path = Menus.getPlugInsPath();
70  if (path==null)
71  return null;
72  File f = new File(path);
73  String[] list = f.list();
74  if (list==null) return null;
75  Vector v = new Vector();
76  for (int i=0; i<list.length; i++) {
77  String name = list[i];
78  boolean isClassFile = name.endsWith(".class");
79  if (isClassFile) {
80  //className = className.substring(0, className.length()-6);
81  v.addElement(path+name);
82  } else {
83  if (!isClassFile)
84  getSubdirectoryClassFiles(path, name, v);
85  }
86  }
87  list = new String[v.size()];
88  v.copyInto((String[])list);
89  return list;
90  }
91 
93  void getSubdirectoryClassFiles(String path, String dir, Vector v) {
94  //IJ.write("getSubdirectoryClassFiles: "+path+dir);
95  if (dir.endsWith(".java"))
96  return;
97  File f = new File(path, dir);
98  if (!f.isDirectory())
99  return;
100  String[] list = f.list();
101  if (list==null)
102  return;
103  dir += Prefs.separator;
104  for (int i=0; i<list.length; i++) {
105  String name = list[i];
106  if (name.endsWith(".class")) {
107  //name = name.substring(0, name.length()-6); // remove ".class"
108  v.addElement(path+dir+name);
109  //IJ.write("File: "+f+"/"+name);
110  }
111  }
112  }
113 
114 }
115