1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package org.apache.hadoop.hbase.util;
22
23 import org.apache.hadoop.conf.Configuration;
24 import org.apache.hadoop.hbase.HBaseConfiguration;
25 import org.apache.hadoop.hbase.filter.Filter;
26 import org.apache.hadoop.io.WritableFactories;
27
28
29
30
31 public class Classes {
32
33
34
35
36 private final static ClassLoader CLASS_LOADER;
37
38 static {
39 ClassLoader parent = Classes.class.getClassLoader();
40 Configuration conf = HBaseConfiguration.create();
41 CLASS_LOADER = new DynamicClassLoader(conf, parent);
42 }
43
44
45
46
47
48
49
50
51
52
53
54
55 public static Class<?> extendedForName(String className)
56 throws ClassNotFoundException {
57 Class<?> valueType;
58 if (className.equals("boolean")) {
59 valueType = boolean.class;
60 } else if (className.equals("byte")) {
61 valueType = byte.class;
62 } else if (className.equals("short")) {
63 valueType = short.class;
64 } else if (className.equals("int")) {
65 valueType = int.class;
66 } else if (className.equals("long")) {
67 valueType = long.class;
68 } else if (className.equals("float")) {
69 valueType = float.class;
70 } else if (className.equals("double")) {
71 valueType = double.class;
72 } else if (className.equals("char")) {
73 valueType = char.class;
74 } else {
75 valueType = Class.forName(className);
76 }
77 return valueType;
78 }
79
80 @SuppressWarnings("rawtypes")
81 public static String stringify(Class[] classes) {
82 StringBuilder buf = new StringBuilder();
83 if (classes != null) {
84 for (Class c : classes) {
85 if (buf.length() > 0) {
86 buf.append(",");
87 }
88 buf.append(c.getName());
89 }
90 } else {
91 buf.append("NULL");
92 }
93 return buf.toString();
94 }
95
96
97
98
99
100
101
102
103 @SuppressWarnings("unchecked")
104 public static Filter createWritableForName(String className) {
105 try {
106 Class<? extends Filter> clazz =
107 (Class<? extends Filter>) Class.forName(className, true, CLASS_LOADER);
108 return (Filter)WritableFactories.newInstance(clazz, new Configuration());
109 } catch (ClassNotFoundException e) {
110 throw new RuntimeException("Can't find class " + className);
111 }
112 }
113
114
115
116
117
118
119
120
121 @SuppressWarnings("unchecked")
122 public static Filter createForName(String className) {
123 try {
124 Class<? extends Filter> clazz =
125 (Class<? extends Filter>)Class.forName(className, true, CLASS_LOADER);
126 return (Filter)clazz.newInstance();
127 } catch (ClassNotFoundException e) {
128 throw new RuntimeException("Can't find class " + className);
129 } catch (InstantiationException e) {
130 throw new RuntimeException("Couldn't instantiate " + className, e);
131 } catch (IllegalAccessException e) {
132 throw new RuntimeException("No access to " + className, e);
133 }
134 }
135 }