/// <summary>
        /// Template selector for market data provider and order execution provider credentials
        /// </summary>
        public override DataTemplate SelectTemplate(object item, DependencyObject container)
        {
            FrameworkElement element = container as FrameworkElement;

            if (item != null)
            {
                ProviderCredential credential = (ProviderCredential)item;

                if (credential.CredentialName.Equals("Username"))
                {
                    return((DataTemplate)element.FindResource("UsernameDataTemplate"));
                }
                else if (credential.CredentialName.Equals("Password"))
                {
                    return((DataTemplate)element.FindResource("PasswordDataTemplate"));
                }
                else if (credential.CredentialName.Equals("IP address"))
                {
                    return((DataTemplate)element.FindResource("IpAddressDataTemplate"));
                }
                else if (credential.CredentialName.Equals("Port"))
                {
                    return((DataTemplate)element.FindResource("PortDataTemplate"));
                }
                else
                {
                    return((DataTemplate)element.FindResource("GenericDataTemplate"));
                }
            }

            return(base.SelectTemplate(item, container));
        }
        public void EditMarketDataProviderCredentials()
        {
            // Request Controller for infomation
            Task <IList <MarketDataProvider> > availableProviders = _providersController.GetAvailableMarketDataProviders();

            Assert.IsTrue(availableProviders.Result.Count.Equals(4));

            Provider interactiveBroker =
                availableProviders.Result.FirstOrDefault(
                    provider => provider.ProviderName.Equals("InteractiveBrokers"));

            // Will hold orignal values
            List <ProviderCredential> orignalCredentials = new List <ProviderCredential>();

            // Set dummy values
            foreach (ProviderCredential credential in interactiveBroker.ProviderCredentials)
            {
                // Save Orignal Values
                ProviderCredential providerCredential = new ProviderCredential();
                providerCredential.CredentialName  = credential.CredentialName;
                providerCredential.CredentialValue = credential.CredentialValue;
                orignalCredentials.Add(providerCredential);

                credential.CredentialValue = "TestValue";
            }

            // Update values
            _providersController.EditProviderCredentials(interactiveBroker);

            Provider tempInteractiveBroker =
                availableProviders.Result.FirstOrDefault(
                    provider => provider.ProviderName.Equals("InteractiveBrokers"));

            Assert.IsTrue(tempInteractiveBroker.ProviderCredentials[0].CredentialValue.Equals("TestValue"));

            // Set Orignal Values
            tempInteractiveBroker.ProviderCredentials = orignalCredentials;

            // Update values
            _providersController.EditProviderCredentials(tempInteractiveBroker);
        }
        public void EditOrderExecutionProviderCredentials()
        {
            // Request Controller for infomation
            Task <List <OrderExecutionProvider> > availableProviders = _providersController.GetAvailableOrderExecutionProviders();

            Assert.IsTrue(availableProviders.Result.Count.Equals(3));

            Provider blackwood =
                availableProviders.Result.FirstOrDefault(
                    provider => provider.ProviderName.Equals("Blackwood"));

            // Will hold orignal values
            List <ProviderCredential> orignalCredentials = new List <ProviderCredential>();

            // Set dummy values
            foreach (ProviderCredential credential in blackwood.ProviderCredentials)
            {
                // Save Orignal Values
                ProviderCredential providerCredential = new ProviderCredential();
                providerCredential.CredentialName  = credential.CredentialName;
                providerCredential.CredentialValue = credential.CredentialValue;
                orignalCredentials.Add(providerCredential);

                credential.CredentialValue = "TestValue";
            }

            // Update values
            _providersController.EditProviderCredentials(blackwood);

            Provider tempBlackwood =
                availableProviders.Result.FirstOrDefault(
                    provider => provider.ProviderName.Equals("Blackwood"));

            Assert.IsTrue(tempBlackwood.ProviderCredentials[0].CredentialValue.Equals("TestValue"));

            // Set Orignal Values
            tempBlackwood.ProviderCredentials = orignalCredentials;

            // Update values
            _providersController.EditProviderCredentials(tempBlackwood);
        }
        /// <summary>
        /// Returns a list of available market data providers
        /// </summary>
        /// <returns></returns>
        public IDictionary <string, List <ProviderCredential> > GetAvailableProviders()
        {
            // File Saftey Check
            if (!File.Exists(_orderExecutionProvidersConfigFolderPath + _orderExecutionProvidersFileName))
            {
                return(null);
            }

            // Will hold credential information against each availale provider
            IDictionary <string, List <ProviderCredential> > availableProviders = new Dictionary <string, List <ProviderCredential> >();

            // XML Document to read file
            var availableProvidersDocument = new XmlDocument();

            // Read file to get available provider's names.
            availableProvidersDocument.Load(_orderExecutionProvidersConfigFolderPath + _orderExecutionProvidersFileName);

            // Read the all Node value
            XmlNodeList providersInfo = availableProvidersDocument.SelectNodes(xpath: "Providers/*");

            if (providersInfo != null)
            {
                // Extract individual attribute value
                foreach (XmlNode node in providersInfo)
                {
                    // Create file name from which to read Provider Credentials
                    string credentialsFileName = node.Name + @"OrderParams.xml";

                    // XML Document to read provider specific xml file
                    var availableCredentialsDoc = new XmlDocument();

                    // Holds extracted credentials from the xml file
                    var providerCredentialList = new List <ProviderCredential>();

                    if (File.Exists(_orderExecutionProvidersConfigFolderPath + credentialsFileName))
                    {
                        // Read configuration file
                        availableCredentialsDoc.Load(_orderExecutionProvidersConfigFolderPath + credentialsFileName);

                        // Read all the parametes defined in the configuration file
                        XmlNodeList configNodes = availableCredentialsDoc.SelectNodes(xpath: node.Name + "/*");
                        if (configNodes != null)
                        {
                            // Extract individual attribute value
                            foreach (XmlNode innerNode in configNodes)
                            {
                                ProviderCredential providerCredential = new ProviderCredential();

                                providerCredential.CredentialName  = innerNode.Name;
                                providerCredential.CredentialValue = innerNode.InnerText;

                                // Add to Credentials list
                                providerCredentialList.Add(providerCredential);
                            }
                        }
                    }
                    // Add all details to providers info map
                    availableProviders.Add(node.Name, providerCredentialList);
                }
            }

            return(availableProviders);
        }