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 Class<? extends Filter> getFilterClassByName(
105 String className) throws ClassNotFoundException {
106 return (Class<? extends Filter>) Class.forName(className, true, CLASS_LOADER);
107 }
108
109
110
111
112
113
114
115
116 public static Filter createWritableForName(String className) {
117 try {
118 Class<? extends Filter> clazz = getFilterClassByName(className);
119 return (Filter)WritableFactories.newInstance(clazz, new Configuration());
120 } catch (ClassNotFoundException e) {
121 throw new RuntimeException("Can't find class " + className);
122 }
123 }
124
125
126
127
128
129
130
131
132 public static Filter createForName(String className) {
133 try {
134 Class<? extends Filter> clazz = getFilterClassByName(className);
135 return (Filter)clazz.newInstance();
136 } catch (ClassNotFoundException e) {
137 throw new RuntimeException("Can't find class " + className);
138 } catch (InstantiationException e) {
139 throw new RuntimeException("Couldn't instantiate " + className, e);
140 } catch (IllegalAccessException e) {
141 throw new RuntimeException("No access to " + className, e);
142 }
143 }
144 }