KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > jfun > yan > Utils


1 /*****************************************************************************
2  * Copyright (C) Codehaus.org. All rights reserved. *
3  * ------------------------------------------------------------------------- *
4  * The software in this package is published under the terms of the BSD *
5  * style license a copy of which has been included with this distribution in *
6  * the LICENSE.txt file. *
7  *****************************************************************************/

8 /*
9  * Created on Mar 4, 2005
10  *
11  * Author Ben Yu
12  * ZBS
13  */

14 package jfun.yan;
15
16 import java.util.HashMap JavaDoc;
17 import java.util.LinkedList JavaDoc;
18
19 import jfun.util.Misc;
20 import jfun.yan.function.Signature;
21 import jfun.yan.util.ReflectionUtil;
22
23
24 /**
25  * Codehaus.org.
26  *
27  * @author Ben Yu
28  *
29  */

30 final class Utils {
31   static void checkType(Signature src, Object JavaDoc ckey, int k, Class JavaDoc param_type, Class JavaDoc arg_type){
32     if(arg_type==null) return;
33     if(!ReflectionUtil.isAssignableFrom(param_type, arg_type)){
34       throw new ParameterTypeMismatchException(ckey, src, k, param_type, arg_type);
35     }
36   }
37   static void checkType(Class JavaDoc src, Object JavaDoc ckey, Object JavaDoc k, Class JavaDoc param_type, Class JavaDoc arg_type){
38     if(arg_type==null) return;
39     if(!ReflectionUtil.isAssignableFrom(param_type, arg_type)){
40       throw new PropertyTypeMismatchException(ckey, src, k, param_type, arg_type);
41     }
42   }
43   static void checkArg(Signature src, Object JavaDoc ckey, int k, Class JavaDoc param_type, Object JavaDoc arg){
44     if(/*arg!=Components.default_value() && */!ReflectionUtil.isInstance(param_type, arg)){
45       throw new ParameterTypeMismatchException(ckey, src, k, param_type,
46           getObjType(arg));
47     }
48   }
49   static void checkArg(Class JavaDoc src, Object JavaDoc ckey, Object JavaDoc k, Class JavaDoc param_type, Object JavaDoc arg){
50     if(/*arg!=Components.default_value() && */!ReflectionUtil.isInstance(param_type, arg)){
51       throw new PropertyTypeMismatchException(ckey, src, k, param_type,
52           getObjType(arg));
53     }
54   }
55   /*
56   static Object translateDefault(Object v){
57     if(v==Components.default_value()){
58       return null;
59     }
60     else return v;
61   }*/

62   static String JavaDoc getObjTypeName(Object JavaDoc arg){
63     return jfun.yan.util.Utils.getObjTypeName(arg, null);
64   }
65   static Class JavaDoc getObjType(Object JavaDoc arg){
66     return jfun.yan.util.Utils.getObjType(arg, Object JavaDoc.class);
67   }
68   static boolean eq(Object JavaDoc o1, Object JavaDoc o2){
69     if(o1==null) return o2==null;
70     if(o2==null) return false;
71     return o1.equals(o2);
72   }
73   static java.util.Map JavaDoc hashmap(Object JavaDoc[] keys, Object JavaDoc[] vals){
74     final HashMap JavaDoc ret = new HashMap JavaDoc(keys.length);
75     populateMap(ret, keys, vals);
76     return ret;
77   }
78   private static void checkParent(final LinkedList JavaDoc buf, final Class JavaDoc t){
79     //t is not null.
80
for(java.util.Iterator JavaDoc it=buf.iterator(); it.hasNext();){
81       final Class JavaDoc t0 = (Class JavaDoc)it.next();
82       if(ReflectionUtil.isAssignableFrom(t0, t)){
83         return;
84       }
85       else if(ReflectionUtil.isAssignableFrom(t, t0)){
86         it.remove();
87       }
88     }
89     buf.add(t);
90   }
91   static Class JavaDoc getCommonRootType(Typeful[] arr){
92     final LinkedList JavaDoc buf = new LinkedList JavaDoc();
93     for(int i=0; i<arr.length; i++){
94       final Class JavaDoc t = arr[i].getType();
95       if(t == null) return Object JavaDoc.class;
96       checkParent(buf, t);
97     }
98     if(buf.isEmpty() || buf.size() > 1){
99       return Object JavaDoc.class;
100     }
101     else return (Class JavaDoc)buf.get(0);
102     /*
103     if(arr.length==0) return Object.class;
104     Class r = arr[0].getType();
105     if(r==null) return Object.class;
106     for(int i=1; i<arr.length; i++){
107       final Class type1 = arr[i].getType();
108       if(type1==null){
109         return Object.class;
110       }
111       else if(ReflectionUtil.isAssignableFrom(r, type1)){
112         //subtype
113         continue;
114       }
115       else if(ReflectionUtil.isAssignableFrom(type1, r)){
116         //super type, use type1.
117         r = type1;
118       }
119       else{
120         //incompatible
121       }
122     }
123     return r;*/

124   }
125   static RuntimeException JavaDoc wrapInvocationException(java.lang.reflect.InvocationTargetException JavaDoc e){
126     final Throwable JavaDoc th = e.getTargetException();
127     if(th instanceof Error JavaDoc) throw (Error JavaDoc)th;
128     else return new ComponentInstantiationException(th);
129   }
130   private static void populateMap(java.util.Map JavaDoc m, Object JavaDoc[] keys, Object JavaDoc[] vals){
131     if(keys.length != vals.length){
132       throw new IllegalArgumentException JavaDoc("keys.length=="+keys.length
133           + ", vals.length=="+vals.length);
134     }
135     for(int i=0; i<keys.length; i++){
136       final Object JavaDoc key = keys[i];
137       if(m.containsKey(key)){
138         throw new IllegalArgumentException JavaDoc("duplicate key: "+key);
139       }
140       m.put(key, vals[i]);
141     }
142   }
143   static final Class JavaDoc[] no_params = {};
144   
145   static YanException getThreadLocalException(ThreadLocal JavaDoc tl){
146     final YanException ex = (YanException)tl.get();
147     ex.clearResolutionTrace();
148     return ex;
149   }
150 }
151
Popular Tags