From 45a7a7319bbae1a2ab5cfc93d7a2507cccd8770e Mon Sep 17 00:00:00 2001 From: Roy Ben Shabat Date: Tue, 1 Dec 2020 07:40:45 +0200 Subject: Implemented action logs for data store. --- .../Tango.DataStore.EF/EFDataStoreHelper.cs | 47 +---------- .../DataStore/Tango.DataStore/DataStoreHelper.cs | 92 ++++++++++++++++++++-- 2 files changed, 89 insertions(+), 50 deletions(-) (limited to 'Software/Visual_Studio/DataStore') diff --git a/Software/Visual_Studio/DataStore/Tango.DataStore.EF/EFDataStoreHelper.cs b/Software/Visual_Studio/DataStore/Tango.DataStore.EF/EFDataStoreHelper.cs index 5e885458b..a702c3465 100644 --- a/Software/Visual_Studio/DataStore/Tango.DataStore.EF/EFDataStoreHelper.cs +++ b/Software/Visual_Studio/DataStore/Tango.DataStore.EF/EFDataStoreHelper.cs @@ -12,55 +12,12 @@ namespace Tango.DataStore.EF { public static byte[] CreateBytes(DataType type, Object obj) { - switch (type) - { - case DataType.Int32: - return BitConverter.GetBytes((int)obj); - case DataType.Float: - return BitConverter.GetBytes((float)obj); - case DataType.Double: - return BitConverter.GetBytes((double)obj); - case DataType.Boolean: - return BitConverter.GetBytes((bool)obj); - case DataType.String: - return Encoding.Default.GetBytes(obj.ToString()); - case DataType.Bytes: - return (byte[])obj; - case DataType.Proto: - if (obj is DataStoreProtoObject protoMessage) - { - return protoMessage.ToBytes(); - } - else - { - throw new NotSupportedException($"Data type is 'Proto' but object is not of type '{nameof(DataStoreProtoObject)}'."); - } - } - - throw new NotSupportedException("The specified type is not supported."); + return DataStoreHelper.CreateBytes(type, obj); } public static Object CreateObject(DataType type, byte[] bytes) { - switch (type) - { - case DataType.Int32: - return BitConverter.ToInt32(bytes, 0); - case DataType.Float: - return BitConverter.ToSingle(bytes, 0); - case DataType.Double: - return BitConverter.ToDouble(bytes, 0); - case DataType.Boolean: - return BitConverter.ToBoolean(bytes, 0); - case DataType.String: - return Encoding.Default.GetString(bytes); - case DataType.Bytes: - return bytes; - case DataType.Proto: - return DataStoreProtoObject.FromBytes(bytes); - } - - throw new NotSupportedException("The specified type is not supported."); + return DataStoreHelper.CreateObject(type, bytes); } public static IDataStoreItem CreateDataStoreItem(DataStoreItem item) diff --git a/Software/Visual_Studio/DataStore/Tango.DataStore/DataStoreHelper.cs b/Software/Visual_Studio/DataStore/Tango.DataStore/DataStoreHelper.cs index 0ceecd81b..0409dbf7a 100644 --- a/Software/Visual_Studio/DataStore/Tango.DataStore/DataStoreHelper.cs +++ b/Software/Visual_Studio/DataStore/Tango.DataStore/DataStoreHelper.cs @@ -83,17 +83,28 @@ namespace Tango.DataStore /// public static String FormatDataStoreItem(IDataStoreItem item) { - if (item.Type == DataType.Bytes) + return FormatDataStoreValue(item.Type, item.Value); + } + + /// + /// Formats the data store value. + /// + /// The type. + /// The object. + /// + public static String FormatDataStoreValue(DataType type, object obj) + { + if (type == DataType.Bytes) { - return Convert.ToBase64String((byte[])item.Value); + return Convert.ToBase64String((byte[])obj); } - else if (item.Type == DataType.Proto) + else if (type == DataType.Proto) { - return (item.Value as DataStoreProtoObject).Message.ToJsonString(); + return (obj as DataStoreProtoObject).Message.ToJsonString(); } else { - return item.Value.ToStringSafe(); + return obj.ToStringSafe(); } } @@ -143,5 +154,76 @@ namespace Tango.DataStore var regexItem = new Regex("^[a-zA-Z0-9_-]*$"); return regexItem.IsMatch(name); } + + /// + /// Creates a data store value from byte array that are stored in database. + /// + /// The type. + /// The bytes. + /// + /// The specified type is not supported. + public static Object CreateObject(DataType type, byte[] bytes) + { + switch (type) + { + case DataType.Int32: + return BitConverter.ToInt32(bytes, 0); + case DataType.Float: + return BitConverter.ToSingle(bytes, 0); + case DataType.Double: + return BitConverter.ToDouble(bytes, 0); + case DataType.Boolean: + return BitConverter.ToBoolean(bytes, 0); + case DataType.String: + return Encoding.Default.GetString(bytes); + case DataType.Bytes: + return bytes; + case DataType.Proto: + return DataStoreProtoObject.FromBytes(bytes); + } + + throw new NotSupportedException("The specified type is not supported."); + } + + /// + /// Creates a byte array that can be stored on database from the specified data store type and value. + /// + /// The type. + /// The object. + /// + /// + /// DataStoreProtoObject + /// or + /// The specified type is not supported. + /// + public static byte[] CreateBytes(DataType type, Object obj) + { + switch (type) + { + case DataType.Int32: + return BitConverter.GetBytes((int)obj); + case DataType.Float: + return BitConverter.GetBytes((float)obj); + case DataType.Double: + return BitConverter.GetBytes((double)obj); + case DataType.Boolean: + return BitConverter.GetBytes((bool)obj); + case DataType.String: + return Encoding.Default.GetBytes(obj.ToString()); + case DataType.Bytes: + return (byte[])obj; + case DataType.Proto: + if (obj is DataStoreProtoObject protoMessage) + { + return protoMessage.ToBytes(); + } + else + { + throw new NotSupportedException($"Data type is 'Proto' but object is not of type '{nameof(DataStoreProtoObject)}'."); + } + } + + throw new NotSupportedException("The specified type is not supported."); + } } } -- cgit v1.3.1