| @@ -1,7 +1,7 @@ | |||||
| package com.jd.blockchain.binaryproto; | package com.jd.blockchain.binaryproto; | ||||
| /** | /** | ||||
| * 基础类型; | |||||
| * 基础类型标志; | |||||
| * | * | ||||
| * @author huanghaiquan | * @author huanghaiquan | ||||
| * | * | ||||
| @@ -19,9 +19,29 @@ public interface BaseType { | |||||
| public static final byte BOOLEAN = (byte) 0x01; | public static final byte BOOLEAN = (byte) 0x01; | ||||
| /** | /** | ||||
| * 数值; | |||||
| * 整数; | |||||
| */ | */ | ||||
| public static final byte NUMERIC = (byte) 0x10; | |||||
| public static final byte INTEGER = (byte) 0x10; | |||||
| /** | |||||
| * 8位整数; | |||||
| */ | |||||
| public static final byte INT8 = (byte) (INTEGER | 0x01); | |||||
| /** | |||||
| * 16位整数; | |||||
| */ | |||||
| public static final byte INT16 = (byte) (INTEGER | 0x02); | |||||
| /** | |||||
| * 32位整数; | |||||
| */ | |||||
| public static final byte INT32 = (byte) (INTEGER | 0x03); | |||||
| /** | |||||
| * 64位整数; | |||||
| */ | |||||
| public static final byte INT64 = (byte) (INTEGER | 0x04); | |||||
| /** | /** | ||||
| * 文本 | * 文本 | ||||
| @@ -19,80 +19,34 @@ public enum PrimitiveType { | |||||
| BOOLEAN(BaseType.BOOLEAN), | BOOLEAN(BaseType.BOOLEAN), | ||||
| /** | /** | ||||
| * 数值型: | |||||
| * 8位的整数: | |||||
| */ | */ | ||||
| INT8((byte) (BaseType.NUMERIC | 0x01)), | |||||
| INT16((byte) (BaseType.NUMERIC | 0x02)), | |||||
| INT32((byte) (BaseType.NUMERIC | 0x03)), | |||||
| INT64((byte) (BaseType.NUMERIC | 0x04)), | |||||
| INT8(BaseType.INT8), | |||||
| /** | /** | ||||
| * 时间戳; | |||||
| * 16位整数; | |||||
| */ | */ | ||||
| TIMESTAMP((byte) (BaseType.NUMERIC | 0x08)), | |||||
| INT16(BaseType.INT16), | |||||
| /** | /** | ||||
| * 文本数据; | |||||
| * 32位整数; | |||||
| */ | */ | ||||
| TEXT(BaseType.TEXT), | |||||
| INT32(BaseType.INT32), | |||||
| /** | /** | ||||
| * 文本数据; | |||||
| * 64位整数; | |||||
| */ | */ | ||||
| JSON((byte) (BaseType.TEXT | 0x01)), | |||||
| INT64(BaseType.INT64), | |||||
| /** | /** | ||||
| * 文本数据; | |||||
| * 文本; | |||||
| */ | */ | ||||
| XML((byte) (BaseType.TEXT | 0x02)), | |||||
| TEXT(BaseType.TEXT), | |||||
| /** | /** | ||||
| * 二进制数据; | * 二进制数据; | ||||
| */ | */ | ||||
| BYTES(BaseType.BYTES), | |||||
| /** | |||||
| * 大整数; | |||||
| */ | |||||
| BIG_INT((byte) (BaseType.BYTES | 0x01)), | |||||
| /** | |||||
| * 图片; | |||||
| */ | |||||
| IMG((byte) (BaseType.BYTES | 0x02)), | |||||
| /** | |||||
| * 视频; | |||||
| */ | |||||
| VIDEO((byte) (BaseType.BYTES | 0x03)), | |||||
| /** | |||||
| * 位置坐标; | |||||
| */ | |||||
| LOCATION((byte) (BaseType.BYTES | 0x04)), | |||||
| /** | |||||
| * 公钥; | |||||
| */ | |||||
| PUB_KEY((byte) (BaseType.BYTES | 0x05)), | |||||
| /** | |||||
| * 签名摘要; | |||||
| */ | |||||
| SIGNATURE_DIGEST((byte) (BaseType.BYTES | 0x06)), | |||||
| /** | |||||
| * 哈希摘要; | |||||
| */ | |||||
| HASH_DIGEST((byte) (BaseType.BYTES | 0x07)), | |||||
| /** | |||||
| * 加密数据; | |||||
| */ | |||||
| ENCRYPTED_DATA((byte) (BaseType.BYTES | 0x08)); | |||||
| BYTES(BaseType.BYTES); | |||||
| public final byte CODE; | public final byte CODE; | ||||
| @@ -18,7 +18,7 @@ import com.jd.blockchain.crypto.service.classic.ClassicCryptoService; | |||||
| import com.jd.blockchain.crypto.service.sm.SMCryptoService; | import com.jd.blockchain.crypto.service.sm.SMCryptoService; | ||||
| import com.jd.blockchain.ledger.BlockchainKeypair; | import com.jd.blockchain.ledger.BlockchainKeypair; | ||||
| import com.jd.blockchain.ledger.BytesValue; | import com.jd.blockchain.ledger.BytesValue; | ||||
| import com.jd.blockchain.ledger.BytesValueType; | |||||
| import com.jd.blockchain.ledger.DataType; | |||||
| import com.jd.blockchain.ledger.LedgerBlock; | import com.jd.blockchain.ledger.LedgerBlock; | ||||
| import com.jd.blockchain.ledger.LedgerInitSetting; | import com.jd.blockchain.ledger.LedgerInitSetting; | ||||
| import com.jd.blockchain.ledger.LedgerTransaction; | import com.jd.blockchain.ledger.LedgerTransaction; | ||||
| @@ -109,7 +109,7 @@ public class LedgerEditerTest { | |||||
| // 验证数据读写的一致性; | // 验证数据读写的一致性; | ||||
| BytesValue bytes = dataAccount.getBytes("A"); | BytesValue bytes = dataAccount.getBytes("A"); | ||||
| assertEquals(BytesValueType.TEXT, bytes.getType()); | |||||
| assertEquals(DataType.TEXT, bytes.getType()); | |||||
| String textValue = bytes.getValue().toUTF8String(); | String textValue = bytes.getValue().toUTF8String(); | ||||
| assertEquals("abc", textValue); | assertEquals("abc", textValue); | ||||
| } | } | ||||
| @@ -21,7 +21,7 @@ public interface BytesValue { | |||||
| * @return | * @return | ||||
| */ | */ | ||||
| @DataField(order = 0, refEnum = true) | @DataField(order = 0, refEnum = true) | ||||
| BytesValueType getType(); | |||||
| DataType getType(); | |||||
| /** | /** | ||||
| * 数据值的二进制序列; | * 数据值的二进制序列; | ||||
| @@ -9,37 +9,37 @@ import com.jd.blockchain.utils.io.BytesUtils; | |||||
| * | * | ||||
| */ | */ | ||||
| public class BytesValueEntry implements BytesValue { | public class BytesValueEntry implements BytesValue { | ||||
| BytesValueType type; | |||||
| DataType type; | |||||
| Bytes value; | Bytes value; | ||||
| private BytesValueEntry(BytesValueType type, byte[] bytes) { | |||||
| private BytesValueEntry(DataType type, byte[] bytes) { | |||||
| this.type = type; | this.type = type; | ||||
| this.value = new Bytes(bytes); | this.value = new Bytes(bytes); | ||||
| } | } | ||||
| private BytesValueEntry(BytesValueType type, Bytes bytes) { | |||||
| private BytesValueEntry(DataType type, Bytes bytes) { | |||||
| this.type = type; | this.type = type; | ||||
| this.value = bytes; | this.value = bytes; | ||||
| } | } | ||||
| public static BytesValue fromType(BytesValueType type, byte[] value) { | |||||
| public static BytesValue fromType(DataType type, byte[] value) { | |||||
| return new BytesValueEntry(type, value); | return new BytesValueEntry(type, value); | ||||
| } | } | ||||
| public static BytesValue fromBytes(byte[] value) { | public static BytesValue fromBytes(byte[] value) { | ||||
| return new BytesValueEntry(BytesValueType.BYTES, value); | |||||
| return new BytesValueEntry(DataType.BYTES, value); | |||||
| } | } | ||||
| public static BytesValue fromBytes(Bytes value) { | public static BytesValue fromBytes(Bytes value) { | ||||
| return new BytesValueEntry(BytesValueType.BYTES, value); | |||||
| return new BytesValueEntry(DataType.BYTES, value); | |||||
| } | } | ||||
| public static BytesValue fromImage(byte[] value) { | public static BytesValue fromImage(byte[] value) { | ||||
| return new BytesValueEntry(BytesValueType.IMG, value); | |||||
| return new BytesValueEntry(DataType.IMG, value); | |||||
| } | } | ||||
| public static BytesValue fromImage(Bytes value) { | public static BytesValue fromImage(Bytes value) { | ||||
| return new BytesValueEntry(BytesValueType.IMG, value); | |||||
| return new BytesValueEntry(DataType.IMG, value); | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -49,7 +49,7 @@ public class BytesValueEntry implements BytesValue { | |||||
| * @return | * @return | ||||
| */ | */ | ||||
| public static BytesValue fromText(String value) { | public static BytesValue fromText(String value) { | ||||
| return new BytesValueEntry(BytesValueType.TEXT, BytesUtils.toBytes(value)); | |||||
| return new BytesValueEntry(DataType.TEXT, BytesUtils.toBytes(value)); | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -62,51 +62,51 @@ public class BytesValueEntry implements BytesValue { | |||||
| if (bytesValue == null) { | if (bytesValue == null) { | ||||
| return null; | return null; | ||||
| } | } | ||||
| if (bytesValue.getType() != BytesValueType.TEXT) { | |||||
| throw new ValueTypeCastException("The expected value type is " + BytesValueType.TEXT.toString() | |||||
| if (bytesValue.getType() != DataType.TEXT) { | |||||
| throw new ValueTypeCastException("The expected value type is " + DataType.TEXT.toString() | |||||
| + ", but it is actually " + bytesValue.getType().toString() + "!"); | + ", but it is actually " + bytesValue.getType().toString() + "!"); | ||||
| } | } | ||||
| return bytesValue.getValue().toUTF8String(); | return bytesValue.getValue().toUTF8String(); | ||||
| } | } | ||||
| public static BytesValue fromJSON(String value) { | public static BytesValue fromJSON(String value) { | ||||
| return new BytesValueEntry(BytesValueType.JSON, BytesUtils.toBytes(value)); | |||||
| return new BytesValueEntry(DataType.JSON, BytesUtils.toBytes(value)); | |||||
| } | } | ||||
| public static BytesValue fromXML(String value) { | public static BytesValue fromXML(String value) { | ||||
| return new BytesValueEntry(BytesValueType.XML, BytesUtils.toBytes(value)); | |||||
| return new BytesValueEntry(DataType.XML, BytesUtils.toBytes(value)); | |||||
| } | } | ||||
| public static BytesValue fromInt32(int value) { | public static BytesValue fromInt32(int value) { | ||||
| return new BytesValueEntry(BytesValueType.INT32, BytesUtils.toBytes(value)); | |||||
| return new BytesValueEntry(DataType.INT32, BytesUtils.toBytes(value)); | |||||
| } | } | ||||
| public static BytesValue fromInt64(long value) { | public static BytesValue fromInt64(long value) { | ||||
| return new BytesValueEntry(BytesValueType.INT64, BytesUtils.toBytes(value)); | |||||
| return new BytesValueEntry(DataType.INT64, BytesUtils.toBytes(value)); | |||||
| } | } | ||||
| public static BytesValue fromInt16(short value) { | public static BytesValue fromInt16(short value) { | ||||
| return new BytesValueEntry(BytesValueType.INT16, BytesUtils.toBytes(value)); | |||||
| return new BytesValueEntry(DataType.INT16, BytesUtils.toBytes(value)); | |||||
| } | } | ||||
| public static BytesValue fromInt8(byte value) { | public static BytesValue fromInt8(byte value) { | ||||
| return new BytesValueEntry(BytesValueType.INT8, BytesUtils.toBytes(value)); | |||||
| return new BytesValueEntry(DataType.INT8, BytesUtils.toBytes(value)); | |||||
| } | } | ||||
| public static BytesValue fromTimestamp(long value) { | public static BytesValue fromTimestamp(long value) { | ||||
| return new BytesValueEntry(BytesValueType.TIMESTAMP, BytesUtils.toBytes(value)); | |||||
| return new BytesValueEntry(DataType.TIMESTAMP, BytesUtils.toBytes(value)); | |||||
| } | } | ||||
| public static BytesValue fromBoolean(boolean value) { | public static BytesValue fromBoolean(boolean value) { | ||||
| return new BytesValueEntry(BytesValueType.BOOLEAN, BytesUtils.toBytes(value)); | |||||
| return new BytesValueEntry(DataType.BOOLEAN, BytesUtils.toBytes(value)); | |||||
| } | } | ||||
| @Override | @Override | ||||
| public BytesValueType getType() { | |||||
| public DataType getType() { | |||||
| return this.type; | return this.type; | ||||
| } | } | ||||
| public void setType(BytesValueType type) { | |||||
| public void setType(DataType type) { | |||||
| this.type = type; | this.type = type; | ||||
| } | } | ||||
| @@ -1,8 +1,9 @@ | |||||
| package com.jd.blockchain.ledger; | package com.jd.blockchain.ledger; | ||||
| import com.jd.blockchain.binaryproto.PrimitiveType; | |||||
| import com.jd.blockchain.binaryproto.BaseType; | |||||
| import com.jd.blockchain.binaryproto.EnumContract; | import com.jd.blockchain.binaryproto.EnumContract; | ||||
| import com.jd.blockchain.binaryproto.EnumField; | import com.jd.blockchain.binaryproto.EnumField; | ||||
| import com.jd.blockchain.binaryproto.PrimitiveType; | |||||
| import com.jd.blockchain.consts.DataCodes; | import com.jd.blockchain.consts.DataCodes; | ||||
| /** | /** | ||||
| @@ -11,8 +12,8 @@ import com.jd.blockchain.consts.DataCodes; | |||||
| * @author huanghaiquan | * @author huanghaiquan | ||||
| * | * | ||||
| */ | */ | ||||
| @EnumContract(code = DataCodes.ENUM_TYPE_BYTES_VALUE_TYPE, name = "BytesValueType", decription = "") | |||||
| public enum BytesValueType { | |||||
| @EnumContract(code = DataCodes.ENUM_TYPE_BYTES_VALUE_TYPE) | |||||
| public enum DataType { | |||||
| /** | /** | ||||
| * 空; | * 空; | ||||
| @@ -35,61 +36,88 @@ public enum BytesValueType { | |||||
| INT32(PrimitiveType.INT32.CODE), | INT32(PrimitiveType.INT32.CODE), | ||||
| INT64(PrimitiveType.INT64.CODE), | INT64(PrimitiveType.INT64.CODE), | ||||
| /** | |||||
| * 时间戳; | |||||
| */ | |||||
| TIMESTAMP(PrimitiveType.TIMESTAMP.CODE), | |||||
| /** | /** | ||||
| * 文本数据; | * 文本数据; | ||||
| */ | */ | ||||
| TEXT(PrimitiveType.TEXT.CODE), | TEXT(PrimitiveType.TEXT.CODE), | ||||
| /** | /** | ||||
| * 文本数据; | |||||
| * 二进制数据; | |||||
| */ | */ | ||||
| JSON(PrimitiveType.JSON.CODE), | |||||
| BYTES(PrimitiveType.BYTES.CODE), | |||||
| /** | |||||
| * 时间戳; | |||||
| */ | |||||
| TIMESTAMP((byte) (BaseType.INTEGER | 0x08)), | |||||
| /** | /** | ||||
| * 文本数据; | * 文本数据; | ||||
| */ | */ | ||||
| XML(PrimitiveType.XML.CODE), | |||||
| JSON((byte) (BaseType.TEXT | 0x01)), | |||||
| /** | /** | ||||
| * 二进制数据; | |||||
| * 文本数据; | |||||
| */ | */ | ||||
| BYTES(PrimitiveType.BYTES.CODE), | |||||
| XML((byte) (BaseType.TEXT | 0x02)), | |||||
| /** | /** | ||||
| * 大整数; | * 大整数; | ||||
| */ | */ | ||||
| BIG_INT(PrimitiveType.BIG_INT.CODE), | |||||
| BIG_INT((byte) (BaseType.BYTES | 0x01)), | |||||
| /** | /** | ||||
| * 图片; | * 图片; | ||||
| */ | */ | ||||
| IMG(PrimitiveType.IMG.CODE), | |||||
| IMG((byte) (BaseType.BYTES | 0x02)), | |||||
| /** | /** | ||||
| * 视频; | * 视频; | ||||
| */ | */ | ||||
| VIDEO(PrimitiveType.VIDEO.CODE), | |||||
| VIDEO((byte) (BaseType.BYTES | 0x03)), | |||||
| /** | /** | ||||
| * 位置; | |||||
| * 位置坐标; | |||||
| */ | */ | ||||
| LOCATION(PrimitiveType.LOCATION.CODE); | |||||
| LOCATION((byte) (BaseType.BYTES | 0x04)), | |||||
| /** | |||||
| * 公钥; | |||||
| */ | |||||
| PUB_KEY((byte) (BaseType.BYTES | 0x05)), | |||||
| /** | |||||
| * 签名摘要; | |||||
| */ | |||||
| SIGNATURE_DIGEST((byte) (BaseType.BYTES | 0x06)), | |||||
| /** | |||||
| * 哈希摘要; | |||||
| */ | |||||
| HASH_DIGEST((byte) (BaseType.BYTES | 0x07)), | |||||
| /** | |||||
| * 加密数据; | |||||
| */ | |||||
| ENCRYPTED_DATA((byte) (BaseType.BYTES | 0x08)); | |||||
| @EnumField(type = PrimitiveType.INT8) | @EnumField(type = PrimitiveType.INT8) | ||||
| public final byte CODE; | public final byte CODE; | ||||
| private BytesValueType(byte code) { | |||||
| private DataType(byte code) { | |||||
| this.CODE = code; | this.CODE = code; | ||||
| } | } | ||||
| public static BytesValueType valueOf(byte code) { | |||||
| for (BytesValueType dataType : BytesValueType.values()) { | |||||
| public static DataType valueOf(byte code) { | |||||
| for (DataType dataType : DataType.values()) { | |||||
| if (dataType.CODE == code) { | if (dataType.CODE == code) { | ||||
| return dataType; | return dataType; | ||||
| } | } | ||||
| @@ -25,7 +25,7 @@ public interface KVDataEntry { | |||||
| * | * | ||||
| * @return | * @return | ||||
| */ | */ | ||||
| BytesValueType getType(); | |||||
| DataType getType(); | |||||
| /** | /** | ||||
| * 值; | * 值; | ||||
| @@ -58,8 +58,8 @@ public class KVDataObject implements KVDataEntry { | |||||
| * @see com.jd.blockchain.ledger.KVDataEntry#getType() | * @see com.jd.blockchain.ledger.KVDataEntry#getType() | ||||
| */ | */ | ||||
| @Override | @Override | ||||
| public BytesValueType getType() { | |||||
| return bytesValue == null ? BytesValueType.NIL : bytesValue.getType(); | |||||
| public DataType getType() { | |||||
| return bytesValue == null ? DataType.NIL : bytesValue.getType(); | |||||
| } | } | ||||
| @Override | @Override | ||||
| @@ -95,7 +95,7 @@ public class KVDataObject implements KVDataEntry { | |||||
| * @return | * @return | ||||
| */ | */ | ||||
| public boolean isNil() { | public boolean isNil() { | ||||
| return bytesValue == null || BytesValueType.NIL == bytesValue.getType(); | |||||
| return bytesValue == null || DataType.NIL == bytesValue.getType(); | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -119,10 +119,10 @@ public class KVDataObject implements KVDataEntry { | |||||
| * @return | * @return | ||||
| */ | */ | ||||
| public byte tinyValue() { | public byte tinyValue() { | ||||
| if (BytesValueType.INT8 == getType()) { | |||||
| if (DataType.INT8 == getType()) { | |||||
| return bytesValue.getValue().toBytes()[0]; | return bytesValue.getValue().toBytes()[0]; | ||||
| } | } | ||||
| throw new IllegalStateException(String.format("Expected type [%s], but [%s]", BytesValueType.INT8, getType())); | |||||
| throw new IllegalStateException(String.format("Expected type [%s], but [%s]", DataType.INT8, getType())); | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -137,10 +137,10 @@ public class KVDataObject implements KVDataEntry { | |||||
| * @return | * @return | ||||
| */ | */ | ||||
| public short shortValue() { | public short shortValue() { | ||||
| if (BytesValueType.INT16 == getType()) { | |||||
| if (DataType.INT16 == getType()) { | |||||
| return BytesUtils.toShort(bytesValue.getValue().toBytes(), 0); | return BytesUtils.toShort(bytesValue.getValue().toBytes(), 0); | ||||
| } | } | ||||
| throw new IllegalStateException(String.format("Expected type [%s], but [%s]", BytesValueType.INT16, getType())); | |||||
| throw new IllegalStateException(String.format("Expected type [%s], but [%s]", DataType.INT16, getType())); | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -155,10 +155,10 @@ public class KVDataObject implements KVDataEntry { | |||||
| * @return | * @return | ||||
| */ | */ | ||||
| public int intValue() { | public int intValue() { | ||||
| if (BytesValueType.INT32 == getType()) { | |||||
| if (DataType.INT32 == getType()) { | |||||
| return BytesUtils.toInt(bytesValue.getValue().toBytes(), 0); | return BytesUtils.toInt(bytesValue.getValue().toBytes(), 0); | ||||
| } | } | ||||
| throw new IllegalStateException(String.format("Expected type [%s], but [%s]", BytesValueType.INT32, getType())); | |||||
| throw new IllegalStateException(String.format("Expected type [%s], but [%s]", DataType.INT32, getType())); | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -173,10 +173,10 @@ public class KVDataObject implements KVDataEntry { | |||||
| * @return | * @return | ||||
| */ | */ | ||||
| public long longValue() { | public long longValue() { | ||||
| if (BytesValueType.INT64 == getType()) { | |||||
| if (DataType.INT64 == getType()) { | |||||
| return BytesUtils.toLong(bytesValue.getValue().toBytes(), 0); | return BytesUtils.toLong(bytesValue.getValue().toBytes(), 0); | ||||
| } | } | ||||
| throw new IllegalStateException(String.format("Expected type [%s], but [%s]", BytesValueType.INT64, getType())); | |||||
| throw new IllegalStateException(String.format("Expected type [%s], but [%s]", DataType.INT64, getType())); | |||||
| } | } | ||||
| @@ -192,11 +192,11 @@ public class KVDataObject implements KVDataEntry { | |||||
| * @return | * @return | ||||
| */ | */ | ||||
| public BigInteger bigIntValue() { | public BigInteger bigIntValue() { | ||||
| if (BytesValueType.BIG_INT == getType()) { | |||||
| if (DataType.BIG_INT == getType()) { | |||||
| return new BigInteger(bytesValue.getValue().toBytes()); | return new BigInteger(bytesValue.getValue().toBytes()); | ||||
| } | } | ||||
| throw new IllegalStateException( | throw new IllegalStateException( | ||||
| String.format("Expected type [%s], but [%s]", BytesValueType.BIG_INT, getType())); | |||||
| String.format("Expected type [%s], but [%s]", DataType.BIG_INT, getType())); | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -211,11 +211,11 @@ public class KVDataObject implements KVDataEntry { | |||||
| * @return | * @return | ||||
| */ | */ | ||||
| public boolean boolValue() { | public boolean boolValue() { | ||||
| if (BytesValueType.BOOLEAN == getType()) { | |||||
| if (DataType.BOOLEAN == getType()) { | |||||
| return BytesUtils.toBoolean(bytesValue.getValue().toBytes()[0]); | return BytesUtils.toBoolean(bytesValue.getValue().toBytes()[0]); | ||||
| } | } | ||||
| throw new IllegalStateException( | throw new IllegalStateException( | ||||
| String.format("Expected type [%s], but [%s]", BytesValueType.BOOLEAN, getType())); | |||||
| String.format("Expected type [%s], but [%s]", DataType.BOOLEAN, getType())); | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -230,12 +230,12 @@ public class KVDataObject implements KVDataEntry { | |||||
| * @return | * @return | ||||
| */ | */ | ||||
| public Date datetimeValue() { | public Date datetimeValue() { | ||||
| if (BytesValueType.TIMESTAMP == getType()) { | |||||
| if (DataType.TIMESTAMP == getType()) { | |||||
| long ts = BytesUtils.toLong(bytesValue.getValue().toBytes()); | long ts = BytesUtils.toLong(bytesValue.getValue().toBytes()); | ||||
| return new Date(ts); | return new Date(ts); | ||||
| } | } | ||||
| throw new IllegalStateException( | throw new IllegalStateException( | ||||
| String.format("Expected type [%s], but [%s]", BytesValueType.TIMESTAMP, getType())); | |||||
| String.format("Expected type [%s], but [%s]", DataType.TIMESTAMP, getType())); | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -251,12 +251,12 @@ public class KVDataObject implements KVDataEntry { | |||||
| * @return | * @return | ||||
| */ | */ | ||||
| public String stringValue() { | public String stringValue() { | ||||
| BytesValueType type = getType(); | |||||
| if (BytesValueType.TEXT == type || BytesValueType.JSON == type || BytesValueType.XML == type) { | |||||
| DataType type = getType(); | |||||
| if (DataType.TEXT == type || DataType.JSON == type || DataType.XML == type) { | |||||
| return bytesValue.getValue().toUTF8String(); | return bytesValue.getValue().toUTF8String(); | ||||
| } | } | ||||
| throw new IllegalStateException(String.format("Expected type [%s] or [%s] or [%s] , but [%s]", | throw new IllegalStateException(String.format("Expected type [%s] or [%s] or [%s] , but [%s]", | ||||
| PrimitiveType.TEXT, BytesValueType.JSON, BytesValueType.XML, type)); | |||||
| PrimitiveType.TEXT, DataType.JSON, DataType.XML, type)); | |||||
| } | } | ||||
| // // ---------------- | // // ---------------- | ||||