package frame.object.data;
|
|
import java.math.BigDecimal;
|
import java.util.Arrays;
|
import java.util.Date;
|
import java.util.List;
|
|
import chat.server.call.IJSONWriter;
|
import chat.server.call.IJsonProvider;
|
import frame.object.meta.EntityMeta;
|
import frame.util.Util;
|
import frame.variant.IVariantsConsumer;
|
import frame.variant.IVariantsProvider;
|
import frame.variant.ValueType;
|
import frame.variant.VariantLink;
|
import frame.variant.translator.ITranslator;
|
import frame.variant.translator.StringTranslator;
|
import frame.variant.translator.Translator;
|
|
|
public class Entity implements IVariantsConsumer, IVariantsProvider, IJsonProvider {
|
|
private boolean deleted = false;
|
private EntityMeta entityMeta;
|
private Object[] dataArray;
|
|
|
public Entity(EntityMeta tableMeta) {
|
this.entityMeta = tableMeta;
|
dataArray = new Object[tableMeta.getFieldCount()];
|
}
|
|
public void set(int i, Object object) {
|
dataArray[i] = object;
|
}
|
|
public Entity set(String name, Object value) throws Exception {
|
Integer idx = entityMeta.getIndex(name);
|
|
if (idx == null) {
|
return this;
|
}
|
|
if (value == null) {
|
dataArray[idx] = null;
|
}
|
else {
|
ITranslator translator = entityMeta.getTranslator(idx);
|
Object obj = Translator.toTranslatorTypeValue(value, translator.getDataClass());
|
dataArray[idx] = obj;
|
}
|
|
return this;
|
}
|
|
public ID getID() {
|
return new ID(getVarinatValue("id"));
|
}
|
|
public void setID(ID id) throws Exception {
|
set("id", id.getValue());
|
}
|
|
public Object getVarinatValue(String field) {
|
int idx = entityMeta.getIndex(field);
|
return dataArray[idx];
|
}
|
|
public ValueType getValueType(int idx) {
|
return entityMeta.getValueType(idx);
|
}
|
|
public Object getValue(int idx) {
|
return dataArray[idx];
|
}
|
|
public Object getValue(String fieldName) {
|
Integer idx = entityMeta.getIndex(fieldName);
|
|
if (idx == null) {
|
return null;
|
}
|
|
return dataArray[idx];
|
}
|
|
public String getString(String fieldName) {
|
Integer idx = entityMeta.getIndex(fieldName);
|
|
if (idx == null) {
|
return null;
|
}
|
|
return getString(idx, null);
|
}
|
|
public String getString(String fieldName, String defaultValue) {
|
int idx = entityMeta.getIndex(fieldName);
|
return getString(idx, defaultValue);
|
}
|
|
public String getString(int idx, String defaultValue) {
|
try {
|
Object value = dataArray[idx];
|
ITranslator translator = entityMeta.getTranslator(idx);
|
return translator.toString(value);
|
}
|
catch (Exception e) {
|
return "error";
|
}
|
}
|
|
public String getQuotedString(String fieldName) {
|
int idx = entityMeta.getIndex(fieldName);
|
return getQuotedString(idx, null);
|
}
|
|
public String getQuotedString(String fieldName, String defaultValue) {
|
int idx = entityMeta.getIndex(fieldName);
|
return getQuotedString(idx, defaultValue);
|
}
|
|
public String getQuotedString(int idx, String defaultValue) {
|
String result = getString(idx, defaultValue);
|
return Util.quotedStr(result);
|
}
|
|
public String getJSONString(String fieldName) throws Exception {
|
int idx = entityMeta.getIndex(fieldName);
|
return getJSONString(idx);
|
}
|
|
public String getJSONString(String fieldName, String defaultValue) {
|
int idx = entityMeta.getIndex(fieldName);
|
return getJSONString(idx, defaultValue);
|
}
|
|
public String getJSONString(int idx, String defaultValue) {
|
try {
|
return getJSONString(idx);
|
}
|
catch (Exception e) {
|
e.printStackTrace();
|
return "\"error\"";
|
}
|
}
|
|
public String getJSONString(int idx) throws Exception {
|
Object value = dataArray[idx];
|
ITranslator translator = entityMeta.getTranslator(idx);
|
if (translator == null) {
|
translator = new StringTranslator();
|
}
|
return translator.toJSONString(value);
|
}
|
|
public String getSQLString(String fieldName) throws Exception {
|
int idx = entityMeta.getIndex(fieldName);
|
return getSQLString(idx);
|
}
|
|
public String getSQLString(int idx) throws Exception {
|
Object value = dataArray[idx];
|
ITranslator translator = entityMeta.getTranslator(idx);
|
return translator.toSqlString(value);
|
}
|
|
public String getSQLString(int idx, String defaultValue) {
|
try {
|
String result = getSQLString(idx);
|
return result;
|
}
|
catch(Exception e) {
|
return defaultValue;
|
}
|
}
|
|
public String getSchemaString(String fieldName) throws Exception {
|
int idx = entityMeta.getIndex(fieldName);
|
return getSchemaString(idx);
|
}
|
|
public String getSchemaString(int idx) throws Exception {
|
Object value = dataArray[idx];
|
ITranslator translator = entityMeta.getTranslator(idx);
|
return translator.toSchemaString(value);
|
}
|
|
public boolean getBoolean(String fieldName) throws Exception {
|
int idx = entityMeta.getIndex(fieldName);
|
return getBoolean(idx, false);
|
}
|
|
public boolean getBoolean(String fieldName, boolean defaultValue) {
|
Integer idx = entityMeta.getIndex(fieldName);
|
|
if (idx == null) {
|
return defaultValue;
|
}
|
|
return getBoolean(idx, defaultValue);
|
}
|
|
public boolean getBoolean(int idx, boolean defaultValue) {
|
Object value = dataArray[idx];
|
ITranslator translator = entityMeta.getTranslator(idx);
|
return translator.toBoolean(value, defaultValue);
|
}
|
|
public Date getDate(String fieldName) throws Exception {
|
int idx = entityMeta.getIndex(fieldName);
|
return getDate(idx, null);
|
}
|
|
public Date getDate(String fieldName, Date defaultValue) {
|
Integer idx = entityMeta.getIndex(fieldName);
|
|
if (idx == null) {
|
return defaultValue;
|
}
|
|
try {
|
return getDate(idx, defaultValue);
|
}
|
catch (Exception e) {
|
return defaultValue;
|
}
|
}
|
|
public Date getDate(int idx, Date defaultValue) throws Exception {
|
Object value = dataArray[idx];
|
ITranslator translator = entityMeta.getTranslator(idx);
|
return translator.toDate(value, defaultValue);
|
}
|
|
public Integer getInteger(String fieldName) throws Exception {
|
int idx = entityMeta.getIndex(fieldName);
|
return getInteger(idx, 0);
|
}
|
|
public Integer getInteger(String fieldName, int defaultValue) {
|
int idx = entityMeta.getIndex(fieldName);
|
return getInteger(idx, defaultValue);
|
}
|
|
public Integer getInteger(int idx, int defaultValue) {
|
Object value = dataArray[idx];
|
ITranslator translator = entityMeta.getTranslator(idx);
|
return translator.toInteger(value, defaultValue);
|
}
|
|
public BigDecimal getBigDecimal(String fieldName) throws Exception {
|
int idx = entityMeta.getIndex(fieldName);
|
return getBigDecimal(idx, BigDecimal.ZERO);
|
}
|
|
public BigDecimal getBigDecimal(String fieldName, BigDecimal defaultValue) {
|
int idx = entityMeta.getIndex(fieldName);
|
return getBigDecimal(idx, defaultValue);
|
}
|
|
public BigDecimal getBigDecimal(int idx, BigDecimal defaultValue) {
|
Object value = dataArray[idx];
|
ITranslator translator = entityMeta.getTranslator(idx);
|
return translator.toBigDecimal(value, defaultValue);
|
}
|
|
public double getDouble(String fieldName) throws Exception {
|
int idx = entityMeta.getIndex(fieldName);
|
return getDouble(idx, 0);
|
}
|
|
public double getDouble(String fieldName, double defaultValue) {
|
int idx = entityMeta.getIndex(fieldName);
|
return getDouble(idx, defaultValue);
|
}
|
|
public double getDouble(int idx, double defaultValue) {
|
Object value = dataArray[idx];
|
ITranslator translator = entityMeta.getTranslator(idx);
|
return translator.toDouble(value, defaultValue);
|
}
|
|
public String getSQLTypeCode(String typeField, String lengthField) {
|
Object type = getValue(typeField);
|
Object length = getValue(lengthField);
|
|
return Translator.toSQLTypeCode(type, length);
|
}
|
|
public String getSQLNullCode(String fieldName) {
|
Object nullable = getValue(fieldName);
|
return Translator.toSQLNullCode(nullable);
|
}
|
|
public int getFieldCount() {
|
return entityMeta.getFieldCount();
|
}
|
|
public String[] getLowerNames() {
|
return entityMeta.getLowerNames();
|
}
|
|
public EntityMeta getEntityMeta() {
|
return entityMeta;
|
}
|
|
public boolean isEmptyValue(String fieldName) {
|
Integer idx = entityMeta.getIndex(fieldName);
|
|
if (idx == null) {
|
return true;
|
}
|
|
return isEmptyValue(idx);
|
}
|
|
public boolean isEmptyValue(int idx) {
|
return dataArray[idx] == null;
|
}
|
|
@Override
|
public List<String> getVariantNameList() {
|
String[] lowerNames = entityMeta.getLowerNames();
|
return Arrays.asList(lowerNames);
|
}
|
|
@Override
|
public boolean containsVariant(String name) {
|
return entityMeta.contains(name);
|
}
|
|
public void setVariant(String name, Object value) throws Exception {
|
set(name, value);
|
}
|
|
public boolean valueEquals(String field, Object anotherValue) {
|
Object value = getVarinatValue(field);
|
|
if (value == null) {
|
if (anotherValue == null) {
|
return true;
|
}
|
|
return false;
|
}
|
|
if (anotherValue == null) {
|
return false;
|
}
|
|
if (value.getClass().equals(anotherValue.getClass())) {
|
return value.equals(anotherValue);
|
}
|
|
String valueStr = Translator.toString(value, "");
|
String anotherStr = Translator.toString(anotherValue, "");
|
return valueStr.equals(anotherStr);
|
}
|
|
public boolean isEmpty() {
|
for (int i = 0; i < dataArray.length; i++) {
|
if (dataArray[i] != null) {
|
return false;
|
}
|
}
|
|
return true;
|
}
|
|
public void setDeleted() {
|
deleted = true;
|
}
|
|
public boolean isDeleted() {
|
return deleted;
|
}
|
|
public String getTableName() {
|
return entityMeta.getTableName();
|
}
|
|
@Override
|
public void writeJSONObject(IJSONWriter writer) {
|
writer.beginObject();
|
writeJSONData(writer);
|
writer.endObject();
|
}
|
|
@Override
|
public void writeJSONData(IJSONWriter writer) {
|
String[] propertyNames = entityMeta.getLowerNames();
|
int cnt = propertyNames.length;
|
|
for (int i = 0; i < cnt; i++) {
|
writer.writeJSON(propertyNames[i], getJSONString(i, "\"error\""));
|
}
|
}
|
|
@Override
|
public void setVariants(IVariantsProvider... providers) throws Exception {
|
VariantLink.moveOnConsumer(this, providers);
|
}
|
|
@Override
|
public Object getVariantValue(String name) {
|
return getValue(name);
|
}
|
|
@Override
|
public boolean isVariantNull(String name) {
|
return isEmptyValue(name);
|
}
|
|
public boolean fieldExists(String fieldName) {
|
return entityMeta.contains(fieldName);
|
}
|
|
}
|