1 package com.daffodilwoods.daffodildb.utils.parser; 2 3 import java.io.ObjectInputStream ; 4 import java.util.HashMap ; 5 import java.net.URL ; 6 import com.daffodilwoods.database.resource.*; 7 import java.io.*; 8 9 public class DaffodilClassLoader extends ClassLoader { 10 HashMap mapping = new HashMap (); 11 HashMap obfuscateMapping = new HashMap (); 12 HashMap qualifiedMapping = new HashMap (); 13 14 private DaffodilClassLoader() throws DException { 15 intialialiseObfuscatedHashMap(); 16 17 18 19 } 20 21 protected Class findClass(String onlyClassName) throws ClassNotFoundException { 22 Object originalFullClassName = mapping.get(onlyClassName); 23 if (originalFullClassName == null) { 24 throw new ClassNotFoundException (onlyClassName + 25 " not found, converted class " + 26 originalFullClassName); 27 } 28 String obfuscatedClassName = (String ) obfuscateMapping.get(originalFullClassName); 29 if (obfuscatedClassName == null) { 30 obfuscatedClassName = (String ) originalFullClassName; 31 } 32 return Class.forName(obfuscatedClassName); 33 } 34 35 private void intialialiseObfuscatedHashMap() throws DException { 36 URL url = getClass().getResource("classes.obj"); 37 if (url == null) { 38 throw new DException("DSE0", new Object [] {"Classes.obj file is missing in classpath."}); 39 } 40 ObjectInputStream inputStream = null; 41 try { 42 inputStream = new ObjectInputStream (new BufferedInputStream(url.openStream())); 43 mapping = (HashMap ) inputStream.readObject(); 44 inputStream.close(); 45 } catch (ClassNotFoundException ex) { 46 throw new DException("DSE0", new Object [] {ex}); 47 } catch (IOException ex) { 48 throw new DException("DSE0", new Object [] {ex}); 49 } 50 url = getClass().getResource("AB.obj"); 51 if (url != null) { 52 try { 53 inputStream = new ObjectInputStream (new BufferedInputStream(url.openStream())); 54 obfuscateMapping = (HashMap ) inputStream.readObject(); 55 inputStream.close(); 56 } catch (ClassNotFoundException ex) { 57 throw new DException("DSE0", new Object [] {ex}); 58 } catch (IOException ex) { 59 throw new DException("DSE0", new Object [] {ex}); 60 } 61 } 62 if (mapping == null) { 63 mapping = new HashMap (); 64 } 65 if (obfuscateMapping == null) { 66 obfuscateMapping = new HashMap (); 67 } 68 initialiseQualifiedMapping(); 69 } 70 71 private void initialiseQualifiedMapping() { 72 Object [] obj = obfuscateMapping.keySet().toArray(); 73 int length = obj.length; 74 for (int i = 0; i < length; i++) { 75 Object temp = obfuscateMapping.get(obj[i]); 76 qualifiedMapping.put(temp, obj[i]); 77 } 78 } 79 80 static DaffodilClassLoader daffodilClassloader; 81 82 public synchronized static DaffodilClassLoader getInstance() throws DException { 83 if (daffodilClassloader == null) 84 daffodilClassloader = new DaffodilClassLoader(); 85 return daffodilClassloader; 86 } 87 88 public String getOfuscatedName(String qualifiedName) { 89 String ste = (String ) obfuscateMapping.get(qualifiedName); 90 return ste == null ? qualifiedName : ste; 91 } 92 93 public String getQualifiedName(String ofuscatedName) { 94 String ste = (String ) qualifiedMapping.get(ofuscatedName); 95 return ste == null ? ofuscatedName : ste; 96 } 97 98 protected Class loadClass(String name, boolean resolve) throws ClassNotFoundException { 99 Class c = findLoadedClass(name); 100 if (c == null) { 101 synchronized (name.intern()) { 102 c = findClass(name); 103 } 104 } 105 if (resolve) { 106 resolveClass(c); 107 } 108 return c; 109 } 110 111 152 } 153 | Popular Tags |