/// <summary> /// Get value from <see cref="IExtendableEntity.ExtensionInfo"/>. /// </summary> /// <typeparam name="T">Value type.</typeparam> /// <param name="entity">Entity.</param> /// <param name="key">Key.</param> /// <returns>Value.</returns> public static T GetValue <T>(this IExtendableEntity entity, string key) { var info = entity.GetExtInfo(false); if (info == null) { return(default);
///// <summary> ///// Cast <see cref="OrderGroupCancelMessage"/> to the <see cref="ExecutionMessage"/>. ///// </summary> ///// <param name="message"><see cref="OrderGroupCancelMessage"/>.</param> ///// <returns><see cref="ExecutionMessage"/>.</returns> //public static ExecutionMessage ToExecutionMessage(this OrderGroupCancelMessage message) //{ // return new ExecutionMessage // { // OriginalTransactionId = message.TransactionId, // ExecutionType = ExecutionTypes.Transaction, // }; //} ///// <summary> ///// Cast <see cref="OrderPairReplaceMessage"/> to the <see cref="ExecutionMessage"/>. ///// </summary> ///// <param name="message"><see cref="OrderPairReplaceMessage"/>.</param> ///// <returns><see cref="ExecutionMessage"/>.</returns> //public static ExecutionMessage ToExecutionMessage(this OrderPairReplaceMessage message) //{ // throw new NotImplementedException(); // //return new ExecutionMessage // //{ // // LocalTime = message.LocalTime, // // OriginalTransactionId = message.TransactionId, // // Action = ExecutionActions.Canceled, // //}; //} ///// <summary> ///// Cast <see cref="OrderCancelMessage"/> to the <see cref="ExecutionMessage"/>. ///// </summary> ///// <param name="message"><see cref="OrderCancelMessage"/>.</param> ///// <returns><see cref="ExecutionMessage"/>.</returns> //public static ExecutionMessage ToExecutionMessage(this OrderCancelMessage message) //{ // return new ExecutionMessage // { // SecurityId = message.SecurityId, // OriginalTransactionId = message.TransactionId, // //OriginalTransactionId = message.OriginalTransactionId, // OrderId = message.OrderId, // OrderType = message.OrderType, // PortfolioName = message.PortfolioName, // ExecutionType = ExecutionTypes.Transaction, // UserOrderId = message.UserOrderId, // HasOrderInfo = true, // }; //} ///// <summary> ///// Cast <see cref="OrderReplaceMessage"/> to the <see cref="ExecutionMessage"/>. ///// </summary> ///// <param name="message"><see cref="OrderReplaceMessage"/>.</param> ///// <returns><see cref="ExecutionMessage"/>.</returns> //public static ExecutionMessage ToExecutionMessage(this OrderReplaceMessage message) //{ // return new ExecutionMessage // { // SecurityId = message.SecurityId, // OriginalTransactionId = message.TransactionId, // OrderType = message.OrderType, // OrderPrice = message.Price, // OrderVolume = message.Volume, // Side = message.Side, // PortfolioName = message.PortfolioName, // ExecutionType = ExecutionTypes.Transaction, // Condition = message.Condition, // UserOrderId = message.UserOrderId, // HasOrderInfo = true, // }; //} ///// <summary> ///// Cast <see cref="OrderRegisterMessage"/> to the <see cref="ExecutionMessage"/>. ///// </summary> ///// <param name="message"><see cref="OrderRegisterMessage"/>.</param> ///// <returns><see cref="ExecutionMessage"/>.</returns> //public static ExecutionMessage ToExecutionMessage(this OrderRegisterMessage message) //{ // return new ExecutionMessage // { // SecurityId = message.SecurityId, // OriginalTransactionId = message.TransactionId, // OrderType = message.OrderType, // OrderPrice = message.Price, // OrderVolume = message.Volume, // Balance = message.Volume, // Side = message.Side, // PortfolioName = message.PortfolioName, // ExecutionType = ExecutionTypes.Transaction, // Condition = message.Condition, // UserOrderId = message.UserOrderId, // HasOrderInfo = true, // }; //} /// <summary> /// Copy extended info. /// </summary> /// <param name="from">The object of which is copied to extended information.</param> /// <param name="to">The object, which is copied to extended information.</param> public static void CopyExtensionInfo(this IExtendableEntity from, IExtendableEntity to) { if (from == null) { throw new ArgumentNullException(nameof(from)); } if (to == null) { throw new ArgumentNullException(nameof(to)); } if (from.ExtensionInfo == null) { return; } if (to.ExtensionInfo == null) { to.ExtensionInfo = new Dictionary <string, object>(); } foreach (var pair in from.ExtensionInfo) { to.ExtensionInfo[pair.Key] = pair.Value; } }
internal void FillNonMandatoryInfo(IExtendableEntity entity, object[] values) { if (entity == null) { throw new ArgumentNullException(nameof(entity)); } if (values == null) { throw new ArgumentNullException(nameof(values)); } if (entity.ExtensionInfo == null) { entity.ExtensionInfo = new Dictionary <object, object>(); } foreach (var column in Columns) { if (!column.IsMandatory) { entity.ExtensionInfo[column] = GetObject(values, column); } } }
public void MergeExtendedData(IExtendableEntity source, IExtendableEntity destination) { // Map all source values into the Destination foreach (var kvp in source.ExtendedData) { // The Extended Field Key(Name) var key = kvp.Key; // The Extended Field Source Value as Raw string data var sourceValueRaw = kvp.Value; // The Extended Field Destination Value as Raw string data string destinationValueRaw; // Indicates a Destination value is already set. var destinationValueSet = destination.ExtendedData.TryGetValue(key, out destinationValueRaw); // If the value was never set, take source. if (!destinationValueSet) { destination.ExtendedData[key] = sourceValueRaw; continue; } // If the incoming value is empty, Destination Wins if (string.IsNullOrEmpty(sourceValueRaw) || sourceValueRaw.Equals(EmptyJsonString)) { continue; } // Source Wins destination.ExtendedData[key] = sourceValueRaw; } }
public static T ReadExtensionValue <T>(this IExtendableEntity entity, string name, JsonSerializer jsonSerializer) { Guard.ArgumentNotNull(entity, nameof(entity)); Guard.ArgumentNotNull(name, nameof(name)); if (entity.ExtensionJson == null) { return(default(T)); } var json = JObject.Parse(entity.ExtensionJson); var prop = json[name]; if (prop == null) { return(default(T)); } if (TypeHelper.IsPrimitiveExtendedIncludingNullable(typeof(T))) { return(prop.Value <T>()); } return((T)prop.ToObject(typeof(T), jsonSerializer ?? JsonSerializer.CreateDefault())); }
public static bool RemoveExtensionValue(this IExtendableEntity entity, string name) { Guard.ArgumentNotNull(entity, nameof(entity)); if (entity.ExtensionJson == null) { return(false); } var json = JObject.Parse(entity.ExtensionJson); var token = json[name]; if (token == null) { return(false); } json.Remove(name); var data = json.ToString(Formatting.None); if (data == "{}") { data = null; } entity.ExtensionJson = data; return(true); }
/// <summary> /// Get value from <see cref="IExtendableEntity.ExtensionInfo"/>. /// </summary> /// <typeparam name="T">Value type.</typeparam> /// <param name="entity">Entity.</param> /// <param name="key">Key.</param> /// <returns>Value.</returns> public static T GetValue <T>(this IExtendableEntity entity, object key) { var info = entity.GetExtInfo(false); if (info == null) { return(default(T)); } return((T)(info.TryGetValue(key) ?? default(T))); }
public static T ReadExtensionValue <T>(this IExtendableEntity entity, string name, bool handleType = false) { return(entity.ReadExtensionValue <T>( name, handleType ? new JsonSerializer { TypeNameHandling = TypeNameHandling.All } : JsonSerializer.CreateDefault() )); }
private static Type GetKey(IExtendableEntity entity) { var order = entity as Order; if (order != null && order.Type == OrderTypes.Conditional) return typeof(DdeStopOrderColumns); var position = entity as Position; if (position != null && (position.Security.Type == SecurityTypes.Future || position.Security.Type == SecurityTypes.Forward || position.Security.Type == SecurityTypes.Option)) return typeof(DdeDerivativePositionColumns); return entity.GetType(); }
public static void SetExtensionValue <T>(this IExtendableEntity entity, string name, T value, bool handleType = false) { entity.SetExtensionValue( name, value, handleType ? new JsonSerializer { TypeNameHandling = TypeNameHandling.All } : JsonSerializer.CreateDefault() ); }
public static void SetExtensionValue <T>(this IExtendableEntity entity, string name, T value, JsonSerializer jsonSerializer) { Guard.ArgumentNotNull(entity, nameof(entity)); Guard.ArgumentNotNull(name, nameof(name)); if (jsonSerializer == null) { jsonSerializer = JsonSerializer.CreateDefault(); } if (entity.ExtensionJson == null) { if (EqualityComparer <T> .Default.Equals(value, default(T))) { return; } entity.ExtensionJson = "{}"; } var json = JObject.Parse(entity.ExtensionJson); if (value == null || EqualityComparer <T> .Default.Equals(value, default(T))) { if (json[name] != null) { json.Remove(name); } } else if (TypeHelper.IsPrimitiveExtendedIncludingNullable(value.GetType())) { json[name] = new JValue(value); } else { json[name] = JToken.FromObject(value, jsonSerializer); } var data = json.ToString(Formatting.None); if (data == "{}") { data = null; } entity.ExtensionJson = data; }
private static IDictionary <object, object> GetExtInfo(this IExtendableEntity entity, bool createIfNotExist) { if (entity == null) { throw new ArgumentNullException(nameof(entity)); } var info = entity.ExtensionInfo; if (info == null && createIfNotExist) { info = new SynchronizedDictionary <object, object>(); entity.ExtensionInfo = info; } return(info); }
private static Type GetKey(IExtendableEntity entity) { var order = entity as Order; if (order != null && order.Type == OrderTypes.Conditional) { return(typeof(DdeStopOrderColumns)); } var position = entity as Position; if (position != null && (position.Security.Type == SecurityTypes.Future || position.Security.Type == SecurityTypes.Forward || position.Security.Type == SecurityTypes.Option)) { return(typeof(DdeDerivativePositionColumns)); } return(entity.GetType()); }
/// <summary> /// Скопировать расширенную информацию. /// </summary> /// <param name="from">Объект, из которого копируется расширенная информация.</param> /// <param name="to">Объект, в который копируется расширенная информация.</param> public static void CopyExtensionInfo(this IExtendableEntity from, IExtendableEntity to) { if (from == null) throw new ArgumentNullException("from"); if (to == null) throw new ArgumentNullException("to"); if (from.ExtensionInfo == null) return; if (to.ExtensionInfo == null) to.ExtensionInfo = new Dictionary<object, object>(); foreach (var pair in from.ExtensionInfo) { to.ExtensionInfo[pair.Key] = pair.Value; } }
/// <summary> /// Add value into <see cref="IExtendableEntity.ExtensionInfo"/>. /// </summary> /// <param name="entity">Entity.</param> /// <param name="key">Key.</param> /// <param name="value">Value.</param> public static void AddValue(this IExtendableEntity entity, object key, object value) { entity.GetExtInfo(true)[key] = value; }