KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > db4o > reflect > self > SelfReflectionRegistry


1 /* Copyright (C) 2004 - 2006 db4objects Inc. http://www.db4o.com
2
3 This file is part of the db4o open source object database.
4
5 db4o is free software; you can redistribute it and/or modify it under
6 the terms of version 2 of the GNU General Public License as published
7 by the Free Software Foundation and as clarified by db4objects' GPL
8 interpretation policy, available at
9 http://www.db4o.com/about/company/legalpolicies/gplinterpretation/
10 Alternatively you can write to db4objects, Inc., 1900 S Norfolk Street,
11 Suite 350, San Mateo, CA 94403, USA.
12
13 db4o is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16 for more details.
17
18 You should have received a copy of the GNU General Public License along
19 with this program; if not, write to the Free Software Foundation, Inc.,
20 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */

21 package com.db4o.reflect.self;
22
23 /**
24  * Contains the application-specific reflection information (that would
25  * be generated by a bytecode enhancer), as opposed to the 'generic'
26  * functionality contained in SelfReflector.
27  */

28 public abstract class SelfReflectionRegistry {
29
30     private final static Class JavaDoc[] ARRAYTYPES={int[].class,long[].class,short[].class,char[].class,byte[].class,boolean[].class,float[].class,double[].class,String JavaDoc[].class};
31     private final static Class JavaDoc[] PRIMITIVES={Integer JavaDoc.class,Long JavaDoc.class,Short JavaDoc.class,Character JavaDoc.class,Byte JavaDoc.class,Boolean JavaDoc.class,Float JavaDoc.class,Double JavaDoc.class,String JavaDoc.class};
32     
33     public boolean isPrimitive(Class JavaDoc clazz) {
34         for (int idx = 0; idx < PRIMITIVES.length; idx++) {
35             if(PRIMITIVES[idx].equals(clazz)) {
36                 return true;
37             }
38         }
39         return false;
40     }
41     
42     public abstract ClassInfo infoFor(Class JavaDoc clazz);
43
44     public Object JavaDoc arrayFor(Class JavaDoc clazz,int length) {
45         if(Integer JavaDoc.class.isAssignableFrom(clazz)||int.class.isAssignableFrom(clazz)) {
46             return new int[length];
47         }
48         if(Long JavaDoc.class.isAssignableFrom(clazz)||long.class.isAssignableFrom(clazz)) {
49             return new long[length];
50         }
51         if(Short JavaDoc.class.isAssignableFrom(clazz)||short.class.isAssignableFrom(clazz)) {
52             return new short[length];
53         }
54         if(Boolean JavaDoc.class.isAssignableFrom(clazz)||boolean.class.isAssignableFrom(clazz)) {
55             return new boolean[length];
56         }
57         if(Byte JavaDoc.class.isAssignableFrom(clazz)||byte.class.isAssignableFrom(clazz)) {
58             return new byte[length];
59         }
60         if(Character JavaDoc.class.isAssignableFrom(clazz)||char.class.isAssignableFrom(clazz)) {
61             return new char[length];
62         }
63         if(Float JavaDoc.class.isAssignableFrom(clazz)||float.class.isAssignableFrom(clazz)) {
64             return new float[length];
65         }
66         if(Double JavaDoc.class.isAssignableFrom(clazz)||double.class.isAssignableFrom(clazz)) {
67             return new double[length];
68         }
69         if(String JavaDoc.class.isAssignableFrom(clazz)) {
70             return new String JavaDoc[length];
71         }
72         return null;
73     }
74
75     public Class JavaDoc componentType(Class JavaDoc clazz) {
76         for (int i = 0; i < ARRAYTYPES.length; i++) {
77             if(ARRAYTYPES[i].equals(clazz)) {
78                 return PRIMITIVES[i];
79             }
80         }
81         return null;
82     }
83
84     public int arrayLength(Object JavaDoc array) {
85         if(array instanceof boolean[]) {
86             return ((boolean[])array).length;
87         }
88         if(array instanceof byte[]) {
89             return ((byte[])array).length;
90         }
91         if(array instanceof short[]) {
92             return ((short[])array).length;
93         }
94         if(array instanceof char[]) {
95             return ((char[])array).length;
96         }
97         if(array instanceof int[]) {
98             return ((int[])array).length;
99         }
100         if(array instanceof long[]) {
101             return ((long[])array).length;
102         }
103         if(array instanceof float[]) {
104             return ((float[])array).length;
105         }
106         if(array instanceof double[]) {
107             return ((double[])array).length;
108         }
109         return 0;
110     }
111
112     public void setArray(Object JavaDoc array, int index, Object JavaDoc element) {
113         if(array instanceof boolean[]) {
114             ((boolean[])array)[index]=((Boolean JavaDoc)element).booleanValue();
115         }
116         if(array instanceof byte[]) {
117             ((byte[])array)[index]=((Byte JavaDoc)element).byteValue();
118         }
119         if(array instanceof short[]) {
120             ((short[])array)[index]=((Short JavaDoc)element).shortValue();
121         }
122         if(array instanceof char[]) {
123             ((char[])array)[index]=((Character JavaDoc)element).charValue();
124         }
125         if(array instanceof int[]) {
126             ((int[])array)[index]=((Integer JavaDoc)element).intValue();
127         }
128         if(array instanceof long[]) {
129             ((long[])array)[index]=((Long JavaDoc)element).longValue();
130         }
131         if(array instanceof float[]) {
132             ((float[])array)[index]=((Float JavaDoc)element).floatValue();
133         }
134         if(array instanceof double[]) {
135             ((double[])array)[index]=((Double JavaDoc)element).doubleValue();
136         }
137     }
138
139     public Object JavaDoc getArray(Object JavaDoc array, int index) {
140         if(array instanceof boolean[]) {
141             return new Boolean JavaDoc(((boolean[])array)[index]);
142         }
143         if(array instanceof byte[]) {
144             return new Byte JavaDoc(((byte[])array)[index]);
145         }
146         if(array instanceof short[]) {
147             return new Short JavaDoc(((short[])array)[index]);
148         }
149         if(array instanceof char[]) {
150             return new Character JavaDoc(((char[])array)[index]);
151         }
152         if(array instanceof int[]) {
153             return new Integer JavaDoc(((int[])array)[index]);
154         }
155         if(array instanceof long[]) {
156             return new Long JavaDoc(((long[])array)[index]);
157         }
158         if(array instanceof float[]) {
159             return new Float JavaDoc(((float[])array)[index]);
160         }
161         if(array instanceof double[]) {
162             return new Double JavaDoc(((double[])array)[index]);
163         }
164         return null;
165     }
166
167     public int flattenArray(Object JavaDoc array, Object JavaDoc[] a_flat) {
168         if(array instanceof boolean[]) {
169             boolean[] shaped=(boolean[])array;
170             for (int i = 0; i < shaped.length; i++) {
171                 a_flat[i]=new Boolean JavaDoc(shaped[i]);
172             }
173             return shaped.length;
174         }
175         if(array instanceof byte[]) {
176             byte[] shaped=(byte[])array;
177             for (int i = 0; i < shaped.length; i++) {
178                 a_flat[i]=new Byte JavaDoc(shaped[i]);
179             }
180             return shaped.length;
181         }
182         if(array instanceof short[]) {
183             short[] shaped=(short[])array;
184             for (int i = 0; i < shaped.length; i++) {
185                 a_flat[i]=new Short JavaDoc(shaped[i]);
186             }
187             return shaped.length;
188         }
189         if(array instanceof char[]) {
190             char[] shaped=(char[])array;
191             for (int i = 0; i < shaped.length; i++) {
192                 a_flat[i]=new Character JavaDoc(shaped[i]);
193             }
194             return shaped.length;
195         }
196         if(array instanceof int[]) {
197             int[] shaped=(int[])array;
198             for (int i = 0; i < shaped.length; i++) {
199                 a_flat[i]=new Integer JavaDoc(shaped[i]);
200             }
201             return shaped.length;
202         }
203         if(array instanceof long[]) {
204             long[] shaped=(long[])array;
205             for (int i = 0; i < shaped.length; i++) {
206                 a_flat[i]=new Long JavaDoc(shaped[i]);
207             }
208             return shaped.length;
209         }
210         if(array instanceof float[]) {
211             float[] shaped=(float[])array;
212             for (int i = 0; i < shaped.length; i++) {
213                 a_flat[i]=new Float JavaDoc(shaped[i]);
214             }
215             return shaped.length;
216         }
217         if(array instanceof double[]) {
218             double[] shaped=(double[])array;
219             for (int i = 0; i < shaped.length; i++) {
220                 a_flat[i]=new Double JavaDoc(shaped[i]);
221             }
222             return shaped.length;
223         }
224         return 0;
225     }
226
227     public int shapeArray(Object JavaDoc[] a_flat, Object JavaDoc array) {
228         if(array instanceof boolean[]) {
229             boolean[] shaped=(boolean[])array;
230             for (int i = 0; i < shaped.length; i++) {
231                 shaped[i]=((Boolean JavaDoc)a_flat[i]).booleanValue();
232             }
233             return a_flat.length;
234         }
235         if(array instanceof byte[]) {
236             byte[] shaped=(byte[])array;
237             for (int i = 0; i < shaped.length; i++) {
238                 shaped[i]=((Byte JavaDoc)a_flat[i]).byteValue();
239             }
240             return a_flat.length;
241         }
242         if(array instanceof short[]) {
243             short[] shaped=(short[])array;
244             for (int i = 0; i < shaped.length; i++) {
245                 shaped[i]=((Short JavaDoc)a_flat[i]).shortValue();
246             }
247             return a_flat.length;
248         }
249         if(array instanceof char[]) {
250             char[] shaped=(char[])array;
251             for (int i = 0; i < shaped.length; i++) {
252                 shaped[i]=((Character JavaDoc)a_flat[i]).charValue();
253             }
254             return a_flat.length;
255         }
256         if(array instanceof int[]) {
257             int[] shaped=(int[])array;
258             for (int i = 0; i < shaped.length; i++) {
259                 shaped[i]=((Integer JavaDoc)a_flat[i]).intValue();
260             }
261             return a_flat.length;
262         }
263         if(array instanceof long[]) {
264             long[] shaped=(long[])array;
265             for (int i = 0; i < shaped.length; i++) {
266                 shaped[i]=((Long JavaDoc)a_flat[i]).longValue();
267             }
268             return a_flat.length;
269         }
270         if(array instanceof float[]) {
271             float[] shaped=(float[])array;
272             for (int i = 0; i < shaped.length; i++) {
273                 shaped[i]=((Float JavaDoc)a_flat[i]).floatValue();
274             }
275             return a_flat.length;
276         }
277         if(array instanceof double[]) {
278             double[] shaped=(double[])array;
279             for (int i = 0; i < shaped.length; i++) {
280                 shaped[i]=((Double JavaDoc)a_flat[i]).doubleValue();
281             }
282             return a_flat.length;
283         }
284         return 0;
285     }
286 }
287
Popular Tags