1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package org.synchronoss.cpo.cassandra.meta;
22
23 import com.datastax.driver.core.BoundStatement;
24 import com.datastax.driver.core.Row;
25 import org.slf4j.Logger;
26 import org.slf4j.LoggerFactory;
27 import org.synchronoss.cpo.CpoException;
28 import org.synchronoss.cpo.meta.MethodMapper;
29
30 import java.io.Serializable;
31 import java.lang.reflect.Method;
32 import java.math.BigDecimal;
33 import java.math.BigInteger;
34 import java.net.InetAddress;
35 import java.nio.ByteBuffer;
36 import java.util.UUID;
37
38
39
40
41
42
43 public class CassandraMethodMapper implements Serializable, Cloneable {
44 private static final Logger logger = LoggerFactory.getLogger(CassandraMethodMapper.class);
45
46
47
48
49 private static final long serialVersionUID = 1L;
50 private static final Class<BoundStatement> bsc = BoundStatement.class;
51 private static final Class<Row> rsc = Row.class;
52 private static MethodMapper<CassandraMethodMapEntry<?,?>> methodMapper = initMethodMapper();
53
54
55 private CassandraMethodMapper() {
56 }
57
58 static public CassandraMethodMapEntry<?,?> getDatasourceMethod(Class<?> c) throws CpoException {
59 return (CassandraMethodMapEntry)methodMapper.getDataMethodMapEntry(c);
60 }
61
62 static private MethodMapper<CassandraMethodMapEntry<?,?>> initMethodMapper() throws IllegalArgumentException {
63 MethodMapper<CassandraMethodMapEntry<?,?>> mapper = new MethodMapper<>();
64 mapper.addMethodMapEntry(makeCassandraMethodMapEntry(CassandraMethodMapEntry.METHOD_TYPE_BASIC, boolean.class, boolean.class, "getBool", "setBool"));
65 mapper.addMethodMapEntry(makeCassandraMethodMapEntry(CassandraMethodMapEntry.METHOD_TYPE_BASIC, Boolean.class, boolean.class, "getBool", "setBool"));
66 mapper.addMethodMapEntry(makeCassandraMethodMapEntry(CassandraMethodMapEntry.METHOD_TYPE_BASIC, ByteBuffer.class, ByteBuffer.class, "getBytes", "setBytes"));
67 mapper.addMethodMapEntry(makeCassandraMethodMapEntry(CassandraMethodMapEntry.METHOD_TYPE_BASIC, java.util.Date.class, java.util.Date.class, "getDate", "setDate"));
68 mapper.addMethodMapEntry(makeCassandraMethodMapEntry(CassandraMethodMapEntry.METHOD_TYPE_BASIC, BigDecimal.class, BigDecimal.class, "getDecimal", "setDecimal"));
69 mapper.addMethodMapEntry(makeCassandraMethodMapEntry(CassandraMethodMapEntry.METHOD_TYPE_BASIC, double.class, double.class, "getDouble", "setDouble"));
70 mapper.addMethodMapEntry(makeCassandraMethodMapEntry(CassandraMethodMapEntry.METHOD_TYPE_BASIC, Double.class, double.class, "getDouble", "setDouble"));
71 mapper.addMethodMapEntry(makeCassandraMethodMapEntry(CassandraMethodMapEntry.METHOD_TYPE_BASIC, float.class, float.class, "getFloat", "setFloat"));
72 mapper.addMethodMapEntry(makeCassandraMethodMapEntry(CassandraMethodMapEntry.METHOD_TYPE_BASIC, Float.class, float.class, "getFloat", "setFloat"));
73 mapper.addMethodMapEntry(makeCassandraMethodMapEntry(CassandraMethodMapEntry.METHOD_TYPE_BASIC, InetAddress.class, InetAddress.class, "getInet", "setInet"));
74 mapper.addMethodMapEntry(makeCassandraMethodMapEntry(CassandraMethodMapEntry.METHOD_TYPE_BASIC, int.class, int.class, "getInt", "setInt"));
75 mapper.addMethodMapEntry(makeCassandraMethodMapEntry(CassandraMethodMapEntry.METHOD_TYPE_BASIC, Integer.class, int.class, "getInt", "setInt"));
76
77 mapper.addMethodMapEntry(makeCassandraMethodMapEntry(CassandraMethodMapEntry.METHOD_TYPE_BASIC, long.class, long.class, "getLong", "setLong"));
78 mapper.addMethodMapEntry(makeCassandraMethodMapEntry(CassandraMethodMapEntry.METHOD_TYPE_BASIC, Long.class, long.class, "getLong", "setLong"));
79
80
81 mapper.addMethodMapEntry(makeCassandraMethodMapEntry(CassandraMethodMapEntry.METHOD_TYPE_BASIC, String.class, String.class, "getString", "setString"));
82 mapper.addMethodMapEntry(makeCassandraMethodMapEntry(CassandraMethodMapEntry.METHOD_TYPE_BASIC, UUID.class, UUID.class, "getUUID", "setUUID"));
83 mapper.addMethodMapEntry(makeCassandraMethodMapEntry(CassandraMethodMapEntry.METHOD_TYPE_BASIC, BigInteger.class, BigInteger.class, "getVarint", "setVarint"));
84
85 return mapper;
86 }
87
88 public static MethodMapper getMethodMapper() {
89 return methodMapper;
90 }
91
92 private static <T> CassandraMethodMapEntry makeCassandraMethodMapEntry(int methodType, Class<T> javaClass, Class<T> datasourceMethodClass, String getterName, String setterName) throws IllegalArgumentException {
93 Method rsGetter=loadGetter(methodType, rsc, getterName);
94 Method bsSetter=loadSetter(methodType, bsc, datasourceMethodClass, setterName);
95
96 return new CassandraMethodMapEntry(methodType, javaClass, datasourceMethodClass, rsGetter, bsSetter);
97 }
98
99 private static <M,D> Method loadSetter(int methodType, Class<M> methodClass, Class<D> datasourceClass, String setterName) throws IllegalArgumentException {
100 Method setter;
101 try {
102 setter = methodClass.getMethod(setterName, new Class[]{int.class, datasourceClass});
103 } catch (NoSuchMethodException nsme) {
104 logger.error("Error loading Setter" + setterName, nsme);
105 throw new IllegalArgumentException(nsme);
106 }
107 return setter;
108 }
109
110 public static <M> Method loadGetter(int methodType, Class<M> methodClass, String getterName) throws IllegalArgumentException {
111 Method getter;
112 try {
113 getter = methodClass.getMethod(getterName, new Class[]{int.class});
114 } catch (NoSuchMethodException nsme) {
115 logger.error("Error loading Getter" + getterName, nsme);
116 throw new IllegalArgumentException(nsme);
117 }
118 return getter;
119 }
120
121 }