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 if(parentClass.isAssignableFrom(aClass)) result.add(aClass);
92 }catch(ClassNotFoundException cnfex){}
93 }
94 }
95 }else{
96 try{
98 JarURLConnection conn = (JarURLConnection)packageURL.openConnection();
99 String starts = conn.getEntryName();
100 JarFile jFile = conn.getJarFile();
101 Enumeration e = jFile.entries();
102 while (e.hasMoreElements()){
103 String entryname = ((ZipEntry)e.nextElement()).getName();
104 if (entryname.startsWith(starts) &&
105 (entryname.lastIndexOf('/')<=starts.length()) &&
107 entryname.endsWith(".class")){
108 String classname = entryname.substring(0, entryname.length() - 6);
109 if (classname.startsWith("/")) classname = classname.substring(1);
110 classname = classname.replace('/','.');
111 try {
112 Class aClass = Class.forName(packages[i] + "." + classname);
114 if(parentClass.isAssignableFrom(aClass)) result.add(aClass);
115 }catch(ClassNotFoundException cnfex){}
116 }
117 }
118 }catch(java.io.IOException ioe){}
119 }
120 }
121 }
122 return result;
123 }
124 }