Exemple #1
0
        /// <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);
Exemple #2
0
        ///// <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;
            }
        }
Exemple #3
0
        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;
            }
        }
Exemple #5
0
        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()));
        }
Exemple #6
0
        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)));
        }
Exemple #8
0
 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();
		}
Exemple #10
0
 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()
         );
 }
Exemple #11
0
        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());
        }
Exemple #14
0
		/// <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;
 }