package com.yc.database.bean;
import android.database.Cursor;
import java.lang.reflect.Field;
import java.util.Date;
import com.yc.database.manager.FieldTypeManager;
import com.yc.database.utils.DateUtil;
import com.yc.database.utils.ValueUtil;
/**
*
* @author yangchong
* email : yangchong211@163.com
* time : 2017/8/6
* desc : 实体属性字段
* revise:
*
*/
public class Property {
/**
* 字段名,建表时用
*/
private String column;
/**
* 默认值,建表时要设置的字段默认值
*/
private String defaultValue;
/**
* 该字段对应实体信息中的属性字段信息
*/
private Field field;
/**
* 获取指定对象的当前字段的值
* Author: hyl
* Time: 2015-8-16下午10:23:35
* @param entity 获取字段值的对象
* @return
*/
@SuppressWarnings("unchecked")
public T getValue(Object entity) {
if(entity != null) {
try {
field.setAccessible(true);
return (T) field.get(entity);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
return null;
}
/**
* 设置指定对象的当前字段的值
* Author: hyl
* Time: 2015-8-16下午10:24:08
* @param entity 要设置字段值的对象
* @param value 要设置的值
* @throws Exception
*/
public void setValue(Object entity, Object value) throws Exception {
int fieldType = FieldTypeManager.getFieldType(field);
try {
field.setAccessible(true);
switch(fieldType) {
case FieldTypeManager.BASE_TYPE_BOOLEAN:
field.set(entity, Boolean.parseBoolean(value.toString()));
break;
case FieldTypeManager.BASE_TYPE_BYTE_ARRAY:
field.set(entity, (byte[])value);
break;
case FieldTypeManager.BASE_TYPE_CHAR:
field.set(entity, value.toString().charAt(0));
break;
case FieldTypeManager.BASE_TYPE_STRING:
field.set(entity, value.toString());
break;
case FieldTypeManager.BASE_TYPE_DATE:
field.set(entity, DateUtil.formatDatetime((Date) value));
break;
case FieldTypeManager.BASE_TYPE_DOUBLE:
field.set(entity, Double.parseDouble(value.toString()));
break;
case FieldTypeManager.BASE_TYPE_FLOAT:
field.set(entity, Float.parseFloat(value.toString()));
break;
case FieldTypeManager.BASE_TYPE_INT:
field.set(entity, Integer.parseInt(value.toString()));
break;
case FieldTypeManager.BASE_TYPE_LONG:
field.set(entity, Long.parseLong(value.toString()));
break;
case FieldTypeManager.BASE_TYPE_SHORT:
field.set(entity, Short.parseShort(value.toString()));
break;
}
} catch (Exception e) {
throw e;
}
}
/**
* 设置指定实体对象当前属性字段的值
* Author: hyl
* Time: 2015-8-21上午10:20:14
* @param entity 要设置值的实体对象
* @param cursor 数据来源
* @throws Exception
*/
public void setValue(Object entity, Cursor cursor) throws Exception {
int fieldType = FieldTypeManager.getFieldType(field);
try {
int columnIdx = cursor.getColumnIndex(column);
if(columnIdx == -1) {//当前游标中没有该字段的值
return;
}
String columnValue = cursor.getString(columnIdx);
boolean isEmpty = ValueUtil.isEmpty(columnValue);
field.setAccessible(true);
switch(fieldType) {
case FieldTypeManager.BASE_TYPE_BOOLEAN:
field.set(entity, isEmpty ? false : Boolean.parseBoolean(columnValue));
break;
case FieldTypeManager.BASE_TYPE_BYTE_ARRAY:
field.set(entity, cursor.getBlob(columnIdx));
break;
case FieldTypeManager.BASE_TYPE_CHAR:
field.set(entity, isEmpty ? Character.valueOf(' ') : columnValue.charAt(0));
break;
case FieldTypeManager.BASE_TYPE_STRING:
field.set(entity, isEmpty ? "" : columnValue);
break;
case FieldTypeManager.BASE_TYPE_DATE:
field.set(entity, isEmpty ? "" : DateUtil.parseDatetime(columnValue));
break;
case FieldTypeManager.BASE_TYPE_DOUBLE:
field.set(entity, cursor.getDouble(columnIdx));
break;
case FieldTypeManager.BASE_TYPE_FLOAT:
field.set(entity, cursor.getFloat(columnIdx));
break;
case FieldTypeManager.BASE_TYPE_INT:
field.set(entity, cursor.getInt(columnIdx));
break;
case FieldTypeManager.BASE_TYPE_LONG:
field.set(entity, cursor.getLong(columnIdx));
break;
case FieldTypeManager.BASE_TYPE_SHORT:
field.set(entity, cursor.getShort(columnIdx));
break;
}
} catch (Exception e) {
throw e;
}
}
public String getColumn() {
return column;
}
public void setColumn(String column) {
this.column = column;
}
public String getDefaultValue() {
return defaultValue;
}
public void setDefaultValue(String defaultValue) {
this.defaultValue = defaultValue;
}
public Field getField() {
return field;
}
public void setField(Field field) {
this.field = field;
}
}