package me.xhh.hector07; import java.util.Date; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import me.prettyprint.cassandra.serializers.BooleanSerializer; import me.prettyprint.cassandra.serializers.ByteBufferSerializer; import me.prettyprint.cassandra.serializers.DateSerializer; import me.prettyprint.cassandra.serializers.IntegerSerializer; import me.prettyprint.cassandra.serializers.LongSerializer; import me.prettyprint.cassandra.serializers.StringSerializer; import me.prettyprint.cassandra.serializers.UUIDSerializer; import me.prettyprint.hector.api.beans.HColumn; import me.prettyprint.hector.api.beans.HSuperColumn; import org.apache.cassandra.thrift.Column; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Utility for database operations * * @author xhh */ public class DBUtil { public static StringSerializer STRING_SERIALIZER = StringSerializer.get(); public static LongSerializer LONG_SERIALIZER = LongSerializer.get(); public static UUIDSerializer UUID__SERIALIZER = UUIDSerializer.get(); public static IntegerSerializer INT_SERIALIZER = IntegerSerializer.get(); public static BooleanSerializer BOOL_SERIALIZER = BooleanSerializer.get(); public static DateSerializer DATE_SERIALIZER = DateSerializer.get(); public static ByteBufferSerializer BYTE_BUFFER_SERIALIZER = ByteBufferSerializer.get(); private static final Logger log = LoggerFactory.getLogger(DBUtil.class); public static <SN, N, V> HColumn<N, V> getColumn(HSuperColumn<SN, N, V> superCol, N colName) { if (colName == null) { throw new RuntimeException("Column Name can not be null!"); } if (superCol == null) { return null; } List<HColumn<N, V>> columns = superCol.getColumns(); if (columns == null || columns.isEmpty()) { return null; } for (HColumn<N, V> c : columns) { if (colName.equals(c.getName())) { return c; } } return null; } public static <N, V> Map<N, V> columnsToMap(List<HColumn<N, V>> cols) { if (cols == null) { return new LinkedHashMap<N, V>(0); } LinkedHashMap<N, V> map = new LinkedHashMap<N, V>(cols.size()); for (HColumn<N, V> c : cols) { if (c == null) { continue; } map.put(c.getName(), c.getValue()); } return map; } /** * @param colNames * column names to include */ public static <N, V> Map<N, V> columnsToMap(List<HColumn<N, V>> cols, List<N> colNames) { if (colNames == null) { return columnsToMap(cols); } if (cols == null) { return new LinkedHashMap<N, V>(0); } LinkedHashMap<N, V> map = new LinkedHashMap<N, V>(cols.size()); for (HColumn<N, V> c : cols) { if (c == null) { continue; } N colName = c.getName(); for (N each : colNames) { if (colName.equals(each.toString())) { map.put(colName, c.getValue()); break; } } } return columnsToMap(cols); } public static boolean isTrue(String str) { return "1".equals(str) || "true".equalsIgnoreCase(str) || "yes".equalsIgnoreCase(str) || "on".equalsIgnoreCase(str); } public static boolean isFalse(String str) { return "0".equals(str) || "false".equalsIgnoreCase(str) || "no".equalsIgnoreCase(str) || "off".equalsIgnoreCase(str); } public static Boolean toBoolean(String str) { if (isTrue(str)) return true; if (isFalse(str)) return false; return null; } /** * Convert boolean to string. * * @return "0" for false, "1" for "true" */ public static String toString(Boolean b) { if (b == null) return null; else return b.booleanValue() ? "1" : "0"; } public static String nullIfEmpty(String value) { return isValueEmpty(value) ? null : value; } /** * @param date * @return date.getTime(), or null if date is null */ public static Long date2Long(Date date) { return date == null ? null : date.getTime(); } /** * @param date * @return string format of date.getTime() (the milliseconds since January 1, 1970, 00:00:00 GMT).<br/> * Null is returned if date is null. */ public static String date2Str(Date date) { return date == null ? null : String.valueOf(date.getTime()); } /** * @param time * the milliseconds since January 1, 1970, 00:00:00 GMT * @return new Date(time), or null if "time" is null */ public static Date long2Date(Long time) { return time == null ? null : new Date(time); } public static <T extends Enum<T>> T str2Enum(Class<T> enumCls, String item) { if (enumCls == null || item == null) return null; try { return Enum.valueOf(enumCls, item); } catch (IllegalArgumentException e) { log.warn("str2Enum failed! Enum class: {}, item: {}", enumCls.getName(), item); return null; } } /** * @param time * the milliseconds since January 1, 1970, 00:00:00 GMT, in String format * @return null will be returned if "time" is null or an empty string */ public static Date str2Date(String time) { if (isValueEmpty(time)) return null; try { return new Date(Long.parseLong(time)); } catch (NumberFormatException e) { log.error("Bad time string: {} !!", time); return null; } } public static Integer str2Int(String intValue) { if (isValueEmpty(intValue)) return null; try { return Integer.parseInt(intValue); } catch (NumberFormatException e) { log.error("Bad integer string: {} !!", intValue); return null; } } public static Double str2Double(String doubleValue) { if (isValueEmpty(doubleValue)) return null; try { return Double.parseDouble(doubleValue); } catch (NumberFormatException e) { log.error("Bad double string: {} !!", doubleValue); return null; } } public static boolean isValueEmpty(String value) { return value == null || value.length() == 0; } public static boolean isColumnComplete(Column c) { return c.getName() != null && c.getValue() != null; } public static Long str2Long(String longValue) { if (isValueEmpty(longValue)) return null; try { return Long.parseLong(longValue); } catch (NumberFormatException e) { log.error("Bad long string: {} !!", longValue); return null; } } /** * @param value * @return value.toString(), or empty string ("") if value if null */ public static String toStringDefaultEmpty(Object value) { return value == null ? "" : value.toString(); } }