1
15
16 package gate.util;
17
18 import java.io.File;
19 import java.net.JarURLConnection;
20 import java.net.URL;
21 import java.util.*;
22 import java.util.jar.JarFile;
23 import java.util.zip.ZipEntry;
24
25 import gate.Gate;
26
27 public class Tools {
28
29
30 private static final boolean DEBUG = false;
31
32 public Tools() {
33 }
34 static long sym=0;
35
36
40 static public synchronized Long gensym(){
41 return new Long(sym++);
42 }
43
44 static public synchronized Long genTime(){
45
46 return new Long(new Date().getTime());
47 }
48
49
50
51 static public void setUnicodeEnabled(boolean value){
52 unicodeEnabled = value;
53 }
54
55
56 static public boolean isUnicodeEnabled(){
57 return unicodeEnabled;
58 }
59
60
61 static private boolean unicodeEnabled = false;
62
63
64
70 static public List findSubclasses(Class parentClass){
71 Package[] packages = Package.getPackages();
72 List result = new ArrayList();
73 for(int i = 0; i < packages.length; i++){
74 String packageDir = packages[i].getName();
75 if(!packageDir.startsWith("/")) packageDir = "/" + packageDir;
77 packageDir.replace('.', Strings.getPathSep().charAt(0));
78 URL packageURL = Gate.getClassLoader().getResource(packageDir);
79 if(packageURL != null){
80 File directory = new File(packageURL.getFile());
81 if(directory.exists()){
82 String [] files = directory.list();
83 for (int j=0; j < files.length; j++){
84 if(files[j].endsWith(".class")){
86 String classname = files[j].substring(0, files[j].length() - 6);
88 try {
89 Class aClass = Class.forName(packages[i] + "." + classname,
91 true, Gate.getClassLoader());
92 if(parentClass.isAssignableFrom(aClass)) result.add(aClass);
93 }catch(ClassNotFoundException cnfex){}
94 }
95 }
96 }else{
97 try{
99 JarURLConnection conn = (JarURLConnection)packageURL.openConnection();
100 String starts = conn.getEntryName();
101 JarFile jFile = conn.getJarFile();
102 Enumeration e = jFile.entries();
103 while (e.hasMoreElements()){
104 String entryname = ((ZipEntry)e.nextElement()).getName();
105 if (entryname.startsWith(starts) &&
106 (entryname.lastIndexOf('/')<=starts.length()) &&
108 entryname.endsWith(".class")){
109 String classname = entryname.substring(0, entryname.length() - 6);
110 if (classname.startsWith("/")) classname = classname.substring(1);
111 classname = classname.replace('/','.');
112 try {
113 Class aClass = Class.forName(packages[i] + "." + classname,
115 true, Gate.getClassLoader());
116 if(parentClass.isAssignableFrom(aClass)) result.add(aClass);
117 }catch(ClassNotFoundException cnfex){}
118 }
119 }
120 }catch(java.io.IOException ioe){}
121 }
122 }
123 }
124 return result;
125 }
126 }