1 package org.myoodb.tools.generator; 25 26 import java.io.*; 27 import java.util.*; 28 import java.lang.reflect.*; 29 import java.lang.annotation.*; 30 31 import org.myoodb.core.*; 32 33 public class Helper 34 { 35 private static Map PRIMITIVES; 36 37 static 38 { 39 PRIMITIVES = new HashMap(); 40 PRIMITIVES.put("byte", Byte.TYPE); 41 PRIMITIVES.put("char", Character.TYPE); 42 PRIMITIVES.put("double", Double.TYPE); 43 PRIMITIVES.put("float", Float.TYPE); 44 PRIMITIVES.put("int", Integer.TYPE); 45 PRIMITIVES.put("long", Long.TYPE); 46 PRIMITIVES.put("short", Short.TYPE); 47 PRIMITIVES.put("boolean", Boolean.TYPE); 48 } 49 50 public static ArrayList findInterfaces(Class interfaceClass, Class assignableFromClass) 51 { 52 ArrayList interfaces = new ArrayList(); 53 Class [] interfaceTypes = interfaceClass.getInterfaces(); 54 for (int i = 0; i < interfaceTypes.length; i++) 55 { 56 Class classType = interfaceTypes[i]; 57 if ((assignableFromClass == null) || (assignableFromClass.isAssignableFrom(classType) == true)) 58 { 59 interfaces.add(classType); 60 } 61 } 62 return interfaces; 63 } 64 65 public static void findInterfaces(Class interfaceClass, ArrayList interfaces) 66 { 67 interfaces.add(interfaceClass); 68 Class [] interfaceTypes = interfaceClass.getInterfaces(); 69 for (int i = 0; i < interfaceTypes.length; i++) 70 { 71 findInterfaces(interfaceTypes[i], interfaces); 72 } 73 } 74 75 public static void searchForMethods(String sourcePath, String className, HashMap methodTable) throws IOException, ClassNotFoundException 76 { 77 ArrayList interfaces = new ArrayList(); 78 findInterfaces(Class.forName(className), interfaces); 79 80 Iterator iter = interfaces.iterator(); 81 while (iter.hasNext()) 82 { 83 Class classType = (Class ) iter.next(); 84 System.out.println(" Searching: " + classType); 85 86 Method[] methods = classType.getMethods(); 87 for (int i = 0; i < methods.length; i++) 88 { 89 org.myoodb.MyOodbAccess access = methods[i].getAnnotation(org.myoodb.MyOodbAccess.class); 90 91 if (access != null) 92 { 93 if (access.value().equalsIgnoreCase("Write") == true) 94 { 95 methodTable.put(methods[i].getName(), new Integer (Lock.ACCESS_WRITE)); 96 } 97 else 98 { 99 methodTable.put(methods[i].getName(), new Integer (Lock.ACCESS_READ)); 100 } 101 } 102 else 103 { 104 methodTable.put(methods[i].getName(), new Integer (Lock.ACCESS_READ)); 105 } 106 } 107 } 108 } 109 110 public static String typecodeForPrimitive(char ch) throws Exception 111 { 112 String ret; 113 switch (ch) 114 { 115 case 'B': 116 ret = "byte"; 117 break; 118 case 'C': 119 ret = "char"; 120 break; 121 case 'D': 122 ret = "double"; 123 break; 124 case 'F': 125 ret = "float"; 126 break; 127 case 'I': 128 ret = "int"; 129 break; 130 case 'J': 131 ret = "long"; 132 break; 133 case 'S': 134 ret = "short"; 135 break; 136 case 'Z': 137 ret = "boolean"; 138 break; 139 default: 140 throw new Exception ("Unknown type code '" + ch + "'."); 141 } 142 return ret; 143 } 144 145 public static String wrappercodeForPrimitive(Class classType) 146 { 147 String name = classType.getName(); 148 return wrappercodeForPrimitive(name); 149 } 150 151 public static String wrappercodeForPrimitive(String name) 152 { 153 String ret; 154 if (name.equals("int")) 155 { 156 ret = "Integer"; 157 } 158 else if (name.equals("char")) 159 { 160 ret = "Character"; 161 } 162 else 163 { 164 ret = name.substring(0, 1).toUpperCase() + name.substring(1); 165 } 166 return ret; 167 } 168 169 public static boolean isPrimitive(String typeName) 170 { 171 return PRIMITIVES.keySet().contains(typeName); 172 } 173 174 public static String returncodeForPrimitive(Class classType, String varName) 175 { 176 String name = classType.getName(); 177 return returncodeForPrimitive(name, varName); 178 } 179 180 public static String returncodeForPrimitive(String name, String varName) 181 { 182 String ret; 183 if (name.equals("int")) 184 { 185 ret = "((Integer)" + varName + ").intValue()"; 186 } 187 else if (name.equals("boolean")) 188 { 189 ret = "((Boolean)" + varName + ").booleanValue()"; 190 } 191 else if (name.equals("char")) 192 { 193 ret = "((Character)" + varName + ").charValue()"; 194 } 195 else if (name.equals("long")) 196 { 197 ret = "((Long)" + varName + ").longValue()"; 198 } 199 else if (name.equals("float")) 200 { 201 ret = "((Float)" + varName + ").floatValue()"; 202 } 203 else if (name.equals("double")) 204 { 205 ret = "((Double)" + varName + ").doubleValue()"; 206 } 207 else if (name.equals("byte")) 208 { 209 ret = "((Byte)" + varName + ").byteValue()"; 210 } 211 else if (name.equals("short")) 212 { 213 ret = "((Short)" + varName + ").shortValue()"; 214 } 215 else 216 { 217 throw new IllegalArgumentException ("unknown type: '" + name + "'"); 218 } 219 return ret; 220 } 221 222 public static String packageName(Class classType) 223 { 224 String name = classType.getName(); 225 return Helper.packageName(name); 226 } 227 228 public static String packageName(String name) 229 { 230 int index = name.lastIndexOf('.'); 231 return index != -1 ? name.substring(0, index) : ""; 232 } 233 234 public static String simpleClassName(Class classType) 235 { 236 return simpleClassName(classType.getName()); 237 } 238 239 public static String simpleClassName(String name) 240 { 241 int index = name.lastIndexOf('.'); 242 return index != -1 ? name.substring(index + 1) : name; 243 } 244 245 public static String classToFileName(Class classType) 246 { 247 return classToFileName(classType.getName()); 248 } 249 250 public static String classToFileName(String name) 251 { 252 return classToFileName(name, File.separatorChar); 253 } 254 255 public static String classToFileName(String name, char separator) 256 { 257 return name.replace('.', separator); 258 } 259 260 public static String fileNameToClass(String name) 261 { 262 return fileNameToClass(name, File.separatorChar); 263 } 264 265 public static String fileNameToClass(String name, char separator) 266 { 267 return name.replace(separator, '.'); 268 } 269 270 public static Class classForPrimitive(String type) 271 { 272 return (Class ) PRIMITIVES.get(type); 273 } 274 } 275 | Popular Tags |