Пример #1
0
        /// <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();
        }
Пример #2
0
        private void UpdateConfigurationSettingsStore(ReportGeneratorOptions reportGeneratorOptions)
        {
            if (!_userSettingsStore.CollectionExists(ProjectSettings.CollectionName))
            {
                _userSettingsStore.CreateCollection(ProjectSettings.CollectionName);
            }

            _userSettingsStore.SetString(
                ProjectSettings.CollectionName,
                ProjectSettings.ReportGenerationOptionsDataKey,
                JsonConvert.SerializeObject(reportGeneratorOptions)
                );
        }
Пример #3
0
        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);
        }
Пример #4
0
        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;
        }