private List <IExchangeCurrency> CloneAvailableExchangeExcludePotential(IExchangeCurrency potential) { var availableExchangeExcludePotential = new List <IExchangeCurrency>(AvailableExchangeCurrency); availableExchangeExcludePotential.Remove(potential); return(availableExchangeExcludePotential); }
/// <summary> /// Create a new instance of ThroughExchange /// </summary> /// <param name="initialCurrency">Initial currency to change</param> /// <param name="targetCurrency">Target currency to expected</param> /// <param name="throughExchange"></param> /// <param name="availableExchangeExcludeCurrent">All avalaible exchange currency to chain with current</param> /// <returns>Return new Direct Exchange</returns> public static IExchangeChain Create(IExchangeCurrency throughExchange, string initialCurrency, string targetCurrency, IList <IExchangeCurrency> availableExchangeExcludeCurrent) { string changeTo; if (!throughExchange.CanChangeFrom(initialCurrency, out changeTo)) { return(null); } var factory = new ExchangeChainFactory(availableExchangeExcludeCurrent); var nextExchange = factory.Create(changeTo, targetCurrency); if (nextExchange == null) { return(null); } return(new ThroughExchange { _initialCurrency = initialCurrency, _intermediateCurrency = changeTo, _throughExchange = throughExchange, _nextExchange = nextExchange }); }
/// <summary> /// Add a exchange currency on available exchange currency pool /// </summary> /// <param name="exchangeCurrency">New exchange currency</param> public void AddExchangeRate(IExchangeCurrency exchangeCurrency) { if (_availableExchangeCurrencyList.Contains(exchangeCurrency)) { return; } _availableExchangeCurrencyList.Add(exchangeCurrency); }
/// <summary> /// Create a new instance of DirectExchange /// </summary> /// <param name="initialCurrency">Initial currency to change</param> /// <param name="targetCurrency">Target currency to expected</param> /// <param name="directExchangeCurrency"></param> /// <returns>Return new Direct Exchange</returns> public static IExchangeChain Create(IExchangeCurrency directExchangeCurrency, string initialCurrency, string targetCurrency) { if (directExchangeCurrency == null) { throw new ArgumentNullException("directExchangeCurrency"); } return(new DirectExchange { _initialCurrency = initialCurrency, _targetCurrency = targetCurrency, _directExchangeCurrency = directExchangeCurrency }); }
private IExchangeChain CreateNewChain(string initialCurrency, string targetCurrency, IExchangeCurrency potentialThroughExchange) { var availableExchangeExcludeCurrent = CloneAvailableExchangeExcludePotential(potentialThroughExchange); return(ThroughExchange.Create(potentialThroughExchange, initialCurrency, targetCurrency, availableExchangeExcludeCurrent)); }