/// <summary> /// Handles click on the button by displaying a message box. /// </summary> /// <param name="sender">The event sender.</param> /// <param name="e">The event args.</param> private void Save_Button_Click(object sender, RoutedEventArgs e) { var licenseProperties = typeof(LicenseRow).GetProperties(); var reportGeneratorOptions = new ReportGeneratorOptions { Columns = new List <string>() }; foreach (CheckBox c in ReportColumnsGrid.Children.OfType <CheckBox>()) { if (c.IsChecked == true) { reportGeneratorOptions.Columns.Add(c.Tag.ToString()); } } foreach (RadioButton c in ReportColumnsGrid.Children.OfType <RadioButton>()) { if (c.IsChecked == true) { reportGeneratorOptions.FileType = (FileType)Enum.Parse(typeof(FileType), c.Tag.ToString()); break; } } reportGeneratorOptions.IncludePackageDependencies = (bool)this.IncludeDependenciesCheckBox.IsChecked; UpdateConfigurationSettingsStore(reportGeneratorOptions); var window = Window.GetWindow(this); window.Close(); }
private void UpdateConfigurationSettingsStore(ReportGeneratorOptions reportGeneratorOptions) { if (!_userSettingsStore.CollectionExists(ProjectSettings.CollectionName)) { _userSettingsStore.CreateCollection(ProjectSettings.CollectionName); } _userSettingsStore.SetString( ProjectSettings.CollectionName, ProjectSettings.ReportGenerationOptionsDataKey, JsonConvert.SerializeObject(reportGeneratorOptions) ); }
private async Task GenerateReportAsync() { var logtype = __ACTIVITYLOG_ENTRYTYPE.ALE_INFORMATION; var messageType = OLEMSGICON.OLEMSGICON_INFO; string message = ""; string title = "Nuget License Report"; var log = await GetActivityLoggerAsync(); log.LogEntry( (UInt32)__ACTIVITYLOG_ENTRYTYPE.ALE_INFORMATION, this.ToString(), "GenerateReportAsync was invoked" ); try { var settingsManager = await GetSettingsManagerAsync(); var userSettingsStore = settingsManager.GetWritableSettingsStore(SettingsScope.UserSettings); var logger = NullLogger.Instance; var spdxHelper = new SpdxLicenseHelper(logger); var env = await GetEnvAsync(); var licenseCache = await GetLicenseCacheAsync(ProjectSettings.LicenseCacheFileName); var installerServices = await GetIVsPackageInstallerServicesAsync(); ReportGeneratorOptions reportOptions; if (userSettingsStore.CollectionExists(ProjectSettings.CollectionName) && userSettingsStore.PropertyExists(ProjectSettings.CollectionName, ProjectSettings.ReportGenerationOptionsDataKey)) { reportOptions = JsonConvert.DeserializeObject <ReportGeneratorOptions>( userSettingsStore.GetString( ProjectSettings.CollectionName, ProjectSettings.ReportGenerationOptionsDataKey ) ); reportOptions.Path = ProjectSettings.ReportFileName; } else { reportOptions = new ReportGeneratorOptions { Path = ProjectSettings.ReportFileName, Columns = typeof(LicenseRow).GetProperties().Select(p => p.Name).ToList(), FileType = FileType.Csv, IncludePackageDependencies = false }; } var reportGenerator = new ReportGenerator(reportOptions); //Remove old report reportGenerator.RemoveReport(); //Get nuget packages var helper = new NugetHelper(logger); //Todo: add more file types support. var nugetPackages = helper.GetNugetPackages(installerServices, env?.Solution, reportOptions.IncludePackageDependencies); //First check if any NuGet packages are installed. if (nugetPackages != null && nugetPackages.Any()) { //Get spdx licenses SpdxLicenseData spdxLicenseData; var fi = new FileInfo(ProjectSettings.SpdxCacheFileName); if (fi.Exists) { var json = File.ReadAllText(ProjectSettings.SpdxCacheFileName); var cachedSpdxLicenseData = JsonConvert.DeserializeObject <SpdxLicenseData>(json); spdxLicenseData = await spdxHelper.GetLicencesAsync(false); if (cachedSpdxLicenseData.Version < spdxLicenseData.Version) { spdxLicenseData = await spdxHelper.GetLicencesAsync(true); await UpdateSpdxLicenseCacheAsync(spdxLicenseData, ProjectSettings.SpdxCacheFileName); } } else { //Query data. //Todo: this will take a while so do something to alert user. spdxLicenseData = await spdxHelper.GetLicencesAsync(true); await UpdateSpdxLicenseCacheAsync(spdxLicenseData, ProjectSettings.SpdxCacheFileName); } await reportGenerator.GenerateAsync(nugetPackages, licenseCache, spdxLicenseData); await UpdateLicenseCacheAsync(licenseCache, ProjectSettings.LicenseCacheFileName); message = "Nuget Package License Report Generated"; } else { message = "No installed Nuget packages were found report failed to generate."; } } catch (NuGet.Protocol.Core.Types.FatalProtocolException exception) { message = exception.Message + " This may be caused by not doing a restore on your Nuget packages."; logtype = __ACTIVITYLOG_ENTRYTYPE.ALE_ERROR; messageType = OLEMSGICON.OLEMSGICON_WARNING; log.LogEntry( (UInt32)logtype, this.ToString(), string.Concat(exception.StackTrace, " ", message) ); } catch (Exception exception) { message = exception.Message; logtype = __ACTIVITYLOG_ENTRYTYPE.ALE_ERROR; messageType = OLEMSGICON.OLEMSGICON_WARNING; log.LogEntry( (UInt32)logtype, this.ToString(), string.Concat(exception.StackTrace, " ", message) ); } ThreadHelper.ThrowIfNotOnUIThread(); log.LogEntry( (UInt32)logtype, this.ToString(), message ); Debug.WriteLine(message); // Show a message box to prove we were here VsShellUtilities.ShowMessageBox( this._package, message, title, messageType, OLEMSGBUTTON.OLEMSGBUTTON_OK, OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST); }
private void LoadSettings() { var settingsManager = GetSettingsManagerAsync().Result; _userSettingsStore = settingsManager.GetWritableSettingsStore(SettingsScope.UserSettings); var reportGeneratorOptions = new ReportGeneratorOptions(); if (_userSettingsStore.CollectionExists(ProjectSettings.CollectionName) && _userSettingsStore.PropertyExists(ProjectSettings.CollectionName, ProjectSettings.ReportGenerationOptionsDataKey)) { reportGeneratorOptions = JsonConvert.DeserializeObject <ReportGeneratorOptions>( _userSettingsStore.GetString(ProjectSettings.CollectionName, ProjectSettings.ReportGenerationOptionsDataKey) ); } else { reportGeneratorOptions.FileType = FileType.Csv; reportGeneratorOptions.Path = ProjectSettings.ReportFileName; reportGeneratorOptions.Columns = typeof(LicenseRow).GetProperties().Select(p => p.Name).ToList(); reportGeneratorOptions.IncludePackageDependencies = false; } //hack to make this work reportGeneratorOptions.Path = ProjectSettings.ReportFileName; var reportColunms = typeof(LicenseRow).GetProperties().ToList(); int startingRow = 1; foreach (var column in reportColunms) { var checkbox = new CheckBox { Tag = column.Name, Content = column.Name, Name = column.Name + "CheckBox", Margin = new Thickness(10, 0, 0, 0), IsChecked = reportGeneratorOptions?.Columns?.Any(p => p == column.Name) }; Grid.SetColumn(checkbox, 2); Grid.SetRow(checkbox, startingRow); startingRow++; ReportColumnsGrid.Children.Add(checkbox); } switch (reportGeneratorOptions.FileType) { case FileType.Csv: this.CsvRadioButton.IsChecked = true; break; case FileType.Html: throw new NotImplementedException(); case FileType.Pdf: throw new NotImplementedException(); case FileType.Word: throw new NotImplementedException(); default: throw new ArgumentOutOfRangeException(); } this.IncludeDependenciesCheckBox.IsChecked = reportGeneratorOptions.IncludePackageDependencies; }