|
ClassChecker |
|
package ij.plugin;
import ij.*;
import ij.util.*;
import java.io.*;
import java.util.*;
/** Checks for duplicate class files in the plugins directory and deletes older duplicates. */
public class ClassChecker implements PlugIn {
char separatorChar = Prefs.separator.charAt(0);
public void run(String arg) {
deleteDuplicates();
}
void deleteDuplicates() {
String[] paths = getClassFiles();
if (paths==null)
return;
String name;
File file1, file2;
long date1, date2;
for (int i=0; i<paths.length; i++) {
name = getName(paths[i]);
if (name.endsWith("classx"))
continue;
for (int j=i+1; j<paths.length; j++) {
if (paths[j].endsWith(name)) {
file1 = new File(paths[i]);
file2 = new File(paths[j]);
if (file1==null || file2==null)
continue;
date1 = file1.lastModified();
date2 = file2.lastModified();
if (date1<date2) {
write(paths[i]);
file1.delete();
break;
} else if (date2<date1) {
write(paths[j]);
paths[j] += "x";
file2.delete();
} else {
if (paths[i].endsWith("plugins"+name)) {
write(paths[i]);
file1.delete();
break;
} else if (paths[j].endsWith("plugins"+name)) {
write(paths[j]);
paths[j] += "x";
file2.delete();
}
}
}
}
}
}
void write(String path) {
IJ.log("Deleting duplicate class: "+path);
}
public String getName(String path) {
int index = path.lastIndexOf(separatorChar);
return (index < 0) ? path : path.substring(index);
}
/** Returns a list of all the class files in the plugins
folder and subfolders of the plugins folder. */
String[] getClassFiles() {
String path = Menus.getPlugInsPath();
if (path==null)
return null;
File f = new File(path);
String[] list = f.list();
if (list==null) return null;
Vector v = new Vector();
for (int i=0; i<list.length; i++) {
String name = list[i];
boolean isClassFile = name.endsWith(".class");
if (isClassFile) {
//className = className.substring(0, className.length()-6);
v.addElement(path+name);
} else {
if (!isClassFile)
getSubdirectoryClassFiles(path, name, v);
}
}
list = new String[v.size()];
v.copyInto((String[])list);
return list;
}
/** Looks for class files in a subfolders of the plugins folder. */
void getSubdirectoryClassFiles(String path, String dir, Vector v) {
//IJ.write("getSubdirectoryClassFiles: "+path+dir);
if (dir.endsWith(".java"))
return;
File f = new File(path, dir);
if (!f.isDirectory())
return;
String[] list = f.list();
if (list==null)
return;
dir += Prefs.separator;
for (int i=0; i<list.length; i++) {
String name = list[i];
if (name.endsWith(".class")) {
//name = name.substring(0, name.length()-6); // remove ".class"
v.addElement(path+dir+name);
//IJ.write("File: "+f+"/"+name);
}
}
}
}
|
ClassChecker |
|