KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > myoodb > tools > generator > Helper


1 ///////////////////////////////////////////////////////////////////////////////
2
//
3
// Copyright (C) 2003-@year@ by Thomas M. Hazel, MyOODB (www.myoodb.org)
4
//
5
// All Rights Reserved
6
//
7
// This program is free software; you can redistribute it and/or modify
8
// it under the terms of the GNU General Public License and GNU Library
9
// General Public License as published by the Free Software Foundation;
10
// either version 2, or (at your option) any later version.
11
//
12
// This program is distributed in the hope that it will be useful,
13
// but WITHOUT ANY WARRANTY; without even the implied warranty of
14
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
// GNU General Public License and GNU Library General Public License
16
// for more details.
17
//
18
// You should have received a copy of the GNU General Public License
19
// and GNU Library General Public License along with this program; if
20
// not, write to the Free Software Foundation, 675 Mass Ave, Cambridge,
21
// MA 02139, USA.
22
//
23
///////////////////////////////////////////////////////////////////////////////
24
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 JavaDoc interfaceClass, Class JavaDoc assignableFromClass)
51     {
52         ArrayList interfaces = new ArrayList();
53         Class JavaDoc[] interfaceTypes = interfaceClass.getInterfaces();
54         for (int i = 0; i < interfaceTypes.length; i++)
55         {
56             Class JavaDoc 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 JavaDoc interfaceClass, ArrayList interfaces)
66     {
67         interfaces.add(interfaceClass);
68         Class JavaDoc[] 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 JavaDoc sourcePath, String JavaDoc className, HashMap methodTable) throws IOException, ClassNotFoundException JavaDoc
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 JavaDoc classType = (Class JavaDoc) 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 JavaDoc(Lock.ACCESS_WRITE));
96                     }
97                     else
98                     {
99                         methodTable.put(methods[i].getName(), new Integer JavaDoc(Lock.ACCESS_READ));
100                     }
101                 }
102                 else
103                 {
104                     methodTable.put(methods[i].getName(), new Integer JavaDoc(Lock.ACCESS_READ));
105                 }
106             }
107         }
108     }
109
110     public static String JavaDoc typecodeForPrimitive(char ch) throws Exception JavaDoc
111     {
112         String JavaDoc 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 JavaDoc("Unknown type code '" + ch + "'.");
141         }
142         return ret;
143     }
144
145     public static String JavaDoc wrappercodeForPrimitive(Class JavaDoc classType)
146     {
147         String JavaDoc name = classType.getName();
148         return wrappercodeForPrimitive(name);
149     }
150
151     public static String JavaDoc wrappercodeForPrimitive(String JavaDoc name)
152     {
153         String JavaDoc 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 JavaDoc typeName)
170     {
171         return PRIMITIVES.keySet().contains(typeName);
172     }
173
174     public static String JavaDoc returncodeForPrimitive(Class JavaDoc classType, String JavaDoc varName)
175     {
176         String JavaDoc name = classType.getName();
177         return returncodeForPrimitive(name, varName);
178     }
179
180     public static String JavaDoc returncodeForPrimitive(String JavaDoc name, String JavaDoc varName)
181     {
182         String JavaDoc 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 JavaDoc("unknown type: '" + name + "'");
218         }
219         return ret;
220     }
221
222     public static String JavaDoc packageName(Class JavaDoc classType)
223     {
224         String JavaDoc name = classType.getName();
225         return Helper.packageName(name);
226     }
227
228     public static String JavaDoc packageName(String JavaDoc name)
229     {
230         int index = name.lastIndexOf('.');
231         return index != -1 ? name.substring(0, index) : "";
232     }
233
234     public static String JavaDoc simpleClassName(Class JavaDoc classType)
235     {
236         return simpleClassName(classType.getName());
237     }
238
239     public static String JavaDoc simpleClassName(String JavaDoc name)
240     {
241         int index = name.lastIndexOf('.');
242         return index != -1 ? name.substring(index + 1) : name;
243     }
244
245     public static String JavaDoc classToFileName(Class JavaDoc classType)
246     {
247         return classToFileName(classType.getName());
248     }
249
250     public static String JavaDoc classToFileName(String JavaDoc name)
251     {
252         return classToFileName(name, File.separatorChar);
253     }
254
255     public static String JavaDoc classToFileName(String JavaDoc name, char separator)
256     {
257         return name.replace('.', separator);
258     }
259
260     public static String JavaDoc fileNameToClass(String JavaDoc name)
261     {
262         return fileNameToClass(name, File.separatorChar);
263     }
264
265     public static String JavaDoc fileNameToClass(String JavaDoc name, char separator)
266     {
267         return name.replace(separator, '.');
268     }
269
270     public static Class JavaDoc classForPrimitive(String JavaDoc type)
271     {
272         return (Class JavaDoc) PRIMITIVES.get(type);
273     }
274 }
275
Popular Tags