/// <summary> /// Tries to find the issue repository connector identified by yhe <paramref name="name"/>. /// </summary> /// <returns>true if the connector exists, false otherwise</returns> public bool TryGetConnector(string name, out IssueRepositoryConnector connector) { connector = null; if (_nameConnectorMap != null && _nameConnectorMap.Count > 0) { return _nameConnectorMap.TryGetValue(name, out connector); } return false; }
private IssueRepositoryConfigurationPage GetConfigurationPageFor(IssueRepositoryConnector connector, ref bool needsCurrentSettings) { if (connector == null) { return null; } if (_connectorPageMap == null) { _connectorPageMap = new Dictionary<string, IssueRepositoryConfigurationPage>(); } IssueRepositoryConfigurationPage configPage = null; if (_connectorPageMap.ContainsKey(connector.Name)) { configPage = _connectorPageMap[connector.Name]; } else { Exception exception = null; try { // triggers connector package initialization configPage = connector.ConfigurationPage; } catch (Exception exc) { exception = exc; } if (configPage == null) { // use a dummy configuration page in case where connector does not provide a configuration page or // if an exception is thrown while initializing the connector. configPage = exception == null ? new DummyIssueRepositoryConfigurationPage(string.Format("'{0}' does not provide a configuration page.", connector.Name)) : new DummyIssueRepositoryConfigurationPage(exception); } _connectorPageMap.Add(connector.Name, configPage); needsCurrentSettings = true; } return configPage; }
private void UpdatePageFor(IssueRepositoryConnector connector) { configPagePanel.Controls.Clear(); bool needsCurrentSettings = false; _configPage = GetConfigurationPageFor(connector, ref needsCurrentSettings); if (_connectorPageControlMap == null) { _connectorPageControlMap = new Dictionary<string, Control>(); } Control newControl = null; if (!_connectorPageControlMap.TryGetValue(connector.Name, out newControl)) { newControl = GetControlFor(_configPage); newControl.Dock = DockStyle.Fill; _connectorPageControlMap.Add(connector.Name, newControl); } // setup config page if (_configPage != null) { _configPage.OnPageEvent += new EventHandler<ConfigPageEventArgs>(_configPage_OnPageEvent); } configPagePanel.Controls.Add(newControl); if (_configPage != null && needsCurrentSettings) { BeginInvoke((DoSomething)delegate() { IssueRepositorySettings currentSettings = CurrentSolutionSettings; if (currentSettings != null && string.Equals(currentSettings.ConnectorName, connector.Name)) { _configPage.Settings = currentSettings; } }); } }
private void connectorComboBox_SelectedIndexChanged(object sender, EventArgs e) { connectorComboBox.Enabled = false; try { if (_configPage != null) { // remove the page event handler from the current page _configPage.OnPageEvent -= new EventHandler<ConfigPageEventArgs>(_configPage_OnPageEvent); } _connector = connectorComboBox.SelectedItem as IssueRepositoryConnector; // if the dummy connector is selected and current settings are not null // enable ok button to enable removing existing settings // otherwise, disable ok button. it will be enabled when the selected connector page raises "page complete" event okButton.Enabled = CurrentSolutionSettings != null && _connector is DummyConnector; UpdatePageFor(_connector); } finally { connectorComboBox.Enabled = true; } }