Ejemplo n.º 1
0
        /// <summary>
        /// Initialize setting. Only call after Repository is known.
        /// <para/>- Tag (
        /// <para/>- Model
        /// <para/>- Settings
        /// updated
        /// </summary>
        /// <returns></returns>
        bool InitializeSettings()
        {
            // default
            _addinType    = AddinType.Sql;
            _addinTabName = TabulatorSql;
            if ((string)Tag != TabulatorSql)
            {
                _addinType    = AddinType.Script;
                _addinTabName = TabulatorScript;
            }
            // set title
            lblTitle.Text = _addinTabName;

            // Tab Pages for *.sql queries update
            // Make sure the Container is initialized
            if (components == null)
            {
                components = new System.ComponentModel.Container();
            }
            // the sql tabulators might already be available
            if (_sqlTabCntrls == null)
            {
                _sqlTabCntrls = new SqlTabPagesCntrl(Model, AddinSettings, components, tabControlSql, txtSearchTerm,
                                                     _newTabFromRecentToolStripMenuItem,
                                                     _loadTabFromRecentToolStripMenuItem, _addinTabName);
            }

            if (tabControlSql.TabPages.Count == 0)
            {
                // first tab with Element Template
                _sqlTabCntrls.AddTab(SqlTemplates.GetTemplateText(SqlTemplates.SqlTemplateId.ElementTemplate));
            }


            // run for SQL / Query
            if (_addinType == AddinType.Sql)
            {
                // don't show Script container
                splitContainer.Panel2Collapsed = true;
                // don't show Menu item LoadScripts
                //loadStandardScriptsToolStripMenuItem.Visible = false;
            }
            else // run for Script (includes SQL / Query)
            {
                float distance = splitContainer.Height * (float)0.5;
                try
                {
                    splitContainer.SplitterDistance = (int)distance;
                }
                catch // suppress any error, use default SplitterDistance
                { }
                // available script updates
                ReloadScripts();
            }

            return(true);
        }
 private static DataDestination GetMarkdownDestinationForType(AddinType type)
 {
     if (type == AddinType.Addin)
     {
         return(DataDestination.MarkdownForAddins);
     }
     else if (type == AddinType.Recipe)
     {
         return(DataDestination.MarkdownForRecipes);
     }
     else
     {
         throw new ArgumentException($"Unable to determine the DataDestination for type {type}");
     }
 }
Ejemplo n.º 3
0
        private int Install(AddinType type)
        {
            switch (type)
            {
            case AddinType.Excel16:
                return(VSTOInstall("https://dm-clickonce.prod.cu.edu/Excel2016/ExcelAddin2016DMOPRD.vsto"));

            case AddinType.Outlook16:
                return(VSTOInstall("https://dm-clickonce.prod.cu.edu/Outlook2016/OutlookIntegration2016DMOPRD.vsto"));

            case AddinType.Word16:
                return(VSTOInstall("https://dm-clickonce.prod.cu.edu/Word2016/WordAddin2016DMOPRD.vsto"));
            }

            return(991);
        }
Ejemplo n.º 4
0
        private int Uninstall(AddinType type)
        {
            switch (type)
            {
            // I can always have the addin names as a static class down the road if i don't want them direct like this
            case AddinType.Excel16:
                return(VSTOUninstall(UninstallString("Hyland Excel")));

            case AddinType.Outlook16:
                return(VSTOUninstall(UninstallString("OutlookIntegration")));

            case AddinType.Word16:
                return(VSTOUninstall(UninstallString("ExcelAddin")));
            }

            return(991);
        }
        private IconAnalysisResult AnalyzeEmbeddedIcon(byte[] embeddedIcon, AddinType addinType, byte[] recommendedIcon, IEnumerable <KeyValuePair <AddinType, byte[]> > fancyIcons)
        {
            // Check if the icon matches the recommended Cake-Contrib icon
            if (Misc.ByteArrayCompare(embeddedIcon, recommendedIcon))
            {
                return(IconAnalysisResult.EmbeddedCakeContrib);
            }

            // Check if the icon matches one of the "fancy" icons of the appropriate type
            foreach (var fancyIcon in fancyIcons)
            {
                if (fancyIcon.Key.IsFlagSet(addinType) && Misc.ByteArrayCompare(embeddedIcon, fancyIcon.Value))
                {
                    return(IconAnalysisResult.EmbeddedFancyCakeContrib);
                }
            }

            // The icon doesn't match any of the recommended icons
            return(IconAnalysisResult.EmbeddedCustom);
        }
        private void GenerateExcelWorksheet(IEnumerable <AddinMetadata> addins, CakeVersion cakeVersion, AddinType type, string caption, ExcelPackage excel)
        {
            var filteredAddins = addins
                                 .Where(addin => addin.Type.IsFlagSet(type))
                                 .ToArray();

            var reportColumns = Constants.REPORT_COLUMNS
                                .Where(column => column.Destination.HasFlag(DataDestination.Excel))
                                .Where(column => column.ApplicableTo.HasFlag(type))
                                .Select((data, index) => new { Index = index, Data = data })
                                .ToArray();

            // Create the worksheet
            var worksheet = excel.Workbook.Worksheets.Add(caption);

            // Header row
            foreach (var column in reportColumns)
            {
                worksheet.Cells[1, column.Index + 1].Value = column.Data.Header;
            }

            // One row per addin
            var row = 1;

            foreach (var addin in filteredAddins.OrderBy(a => a.Name))
            {
                row++;

                foreach (var column in reportColumns)
                {
                    if (column.Data.ApplicableTo.HasFlag(addin.Type))
                    {
                        var cell = worksheet.Cells[row, column.Index + 1];
                        cell.Value = column.Data.GetContent(addin);

                        var color = column.Data.GetCellColor(addin, cakeVersion);
                        if (color != Color.Empty)
                        {
                            cell.Style.Fill.PatternType = ExcelFillStyle.Solid;
                            cell.Style.Fill.BackgroundColor.SetColor(color);
                        }

                        var hyperlink = column.Data.GetHyperLink(addin);
                        if (hyperlink != null)
                        {
                            cell.Hyperlink = hyperlink;
                            cell.StyleName = "HyperLink";
                        }
                    }
                }
            }

            // Freeze the top row and first column
            worksheet.View.FreezePanes(2, 2);

            // Setup auto-filter
            worksheet.Cells[1, 1, 1, reportColumns.Length].AutoFilter = true;

            // Format the worksheet
            worksheet.Row(1).Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
            if (filteredAddins.Any())
            {
                foreach (var column in reportColumns)
                {
                    worksheet.Cells[2, column.Index + 1, row, column.Index + 1].Style.HorizontalAlignment = column.Data.Align;
                }
            }

            // Resize columns
            worksheet.Cells[1, 1, row, reportColumns.Length].AutoFitColumns();

            // Make columns a little bit wider to account for the filter "drop-down arrow" button
            foreach (var column in reportColumns)
            {
                worksheet.Column(column.Index + 1).Width += 2.14;
            }
        }
        private string GenerateMarkdown(DiscoveryContext context, IEnumerable <AddinMetadata> addins, CakeVersion cakeVersion, AddinType type)
        {
            var filteredAddins = addins
                                 .Where(addin => string.IsNullOrEmpty(addin.AnalysisResult.Notes))
                                 .Where(addin => addin.Type == type)
                                 .ToArray();

            var reportColumns = Constants.REPORT_COLUMNS
                                .Where(column => column.Destination.HasFlag(GetMarkdownDestinationForType(type)))
                                .Where(column => column.ApplicableTo.HasFlag(type))
                                .Select((data, index) => new { Index = index, Data = data })
                                .ToArray();

            var now      = DateTime.UtcNow;
            var markdown = new StringBuilder();

            if (cakeVersion != null)
            {
                markdown.AppendLine($"# Audit Report for Cake {cakeVersion.Version}");
            }
            else
            {
                markdown.AppendLine("# Audit Report");
            }

            markdown.AppendLine();
            markdown.AppendLine($"This report was generated by Cake.AddinDiscoverer {context.Version} on {now.ToLongDateString()} at {now.ToLongTimeString()} GMT");
            markdown.AppendLine();

            if (type == AddinType.Addin)
            {
                markdown.AppendLine("- The `Cake Core Version` and `Cake Common Version` columns  show the version referenced by a given addin");
                markdown.AppendLine($"- The `Cake Core IsPrivate` and `Cake Common IsPrivate` columns indicate whether the references are marked as private. In other words, we are looking for references with the `PrivateAssets=All` attribute like in this example: `<PackageReference Include=\"Cake.Common\" Version=\"{cakeVersion.Version}\" PrivateAssets=\"All\" />`");
                markdown.AppendLine($"- The `Framework` column shows the .NET framework(s) targeted by a given addin. Addins should target {cakeVersion.RequiredFramework} at a minimum, and they can also optionally multi-target {string.Concat(" or ", cakeVersion.OptionalFrameworks)}");
            }

            markdown.AppendLine();

            if (type == AddinType.Addin)
            {
                markdown.AppendLine("## Statistics");
                markdown.AppendLine();

                var addinsReferencingCakeCore = filteredAddins.Where(addin => addin.Type == AddinType.Addin & addin.AnalysisResult.CakeCoreVersion != null);
                markdown.AppendLine($"- Of the {addinsReferencingCakeCore.Count()} audited addins that reference Cake.Core:");
                markdown.AppendLine($"  - {addinsReferencingCakeCore.Count(addin => addin.AnalysisResult.CakeCoreVersion.IsUpToDate(cakeVersion.Version))} are targeting the desired version of Cake.Core");
                markdown.AppendLine($"  - {addinsReferencingCakeCore.Count(addin => addin.AnalysisResult.CakeCoreIsPrivate)} have marked the reference to Cake.Core as private");
                markdown.AppendLine();

                var addinsReferencingCakeCommon = filteredAddins.Where(addin => addin.Type == AddinType.Addin & addin.AnalysisResult.CakeCommonVersion != null);
                markdown.AppendLine($"- Of the {addinsReferencingCakeCommon.Count()} audited addins that reference Cake.Common:");
                markdown.AppendLine($"  - {addinsReferencingCakeCommon.Count(addin => addin.AnalysisResult.CakeCommonVersion.IsUpToDate(cakeVersion.Version))} are targeting the desired version of Cake.Common");
                markdown.AppendLine($"  - {addinsReferencingCakeCommon.Count(addin => addin.AnalysisResult.CakeCommonIsPrivate)} have marked the reference to Cake.Common as private");
                markdown.AppendLine();
            }

            // Title
            markdown.AppendLine("## Addins");
            markdown.AppendLine();

            // Header row 1
            foreach (var column in reportColumns)
            {
                markdown.Append($"| {column.Data.Header} ");
            }

            markdown.AppendLine("|");

            // Header row 2
            foreach (var column in reportColumns)
            {
                markdown.Append("| ");
                if (column.Data.Align == ExcelHorizontalAlignment.Center)
                {
                    markdown.Append(":");
                }
                markdown.Append("---");
                if (column.Data.Align == ExcelHorizontalAlignment.Right || column.Data.Align == ExcelHorizontalAlignment.Center)
                {
                    markdown.Append(":");
                }
                markdown.Append(" ");
            }

            markdown.AppendLine("|");

            // One row per addin
            foreach (var addin in filteredAddins.OrderBy(addin => addin.Name))
            {
                foreach (var column in reportColumns)
                {
                    if (column.Data.ApplicableTo.HasFlag(addin.Type))
                    {
                        var content   = column.Data.GetContent(addin);
                        var hyperlink = column.Data.GetHyperLink(addin);
                        var color     = column.Data.GetCellColor(addin, cakeVersion);

                        var emoji = string.Empty;
                        if (color == Color.LightGreen)
                        {
                            emoji = Constants.GREEN_EMOJI;
                        }
                        else if (color == Color.Red)
                        {
                            emoji = Constants.RED_EMOJI;
                        }
                        else if (color == Color.Gold)
                        {
                            emoji = Constants.YELLOW_EMOJI;
                        }

                        if (hyperlink == null)
                        {
                            markdown.Append($"| {content} {emoji}");
                        }
                        else
                        {
                            markdown.Append($"| [{content}]({hyperlink.AbsoluteUri}) {emoji}");
                        }
                    }
                    else
                    {
                        markdown.Append($"| ");
                    }
                }

                markdown.AppendLine("|");
            }

            return(markdown.ToString());
        }
Ejemplo n.º 8
0
        public ArrayList GetInstalledAddins(string domain, AddinType type)
        {
            if (type == AddinType.All) {
                if (allSetupInfos != null)
                    return allSetupInfos;
            }
            else if (type == AddinType.Addin) {
                if (addinSetupInfos != null)
                    return addinSetupInfos;
            }
            else {
                if (rootSetupInfos != null)
                    return rootSetupInfos;
            }

            InternalCheck (domain);

            using (fileDatabase.LockRead ()) {
                return InternalGetInstalledAddins (domain, null, type);
            }
        }
Ejemplo n.º 9
0
        ArrayList InternalGetInstalledAddins(string domain, string idFilter, AddinType type)
        {
            if (allSetupInfos == null) {
                ArrayList alist = new ArrayList ();

                // Global add-ins are valid for any private domain
                if (domain != AddinDatabase.GlobalDomain)
                    FindInstalledAddins (alist, AddinDatabase.GlobalDomain, idFilter);

                FindInstalledAddins (alist, domain, idFilter);
                if (idFilter != null)
                    return alist;
                allSetupInfos = alist;
            }
            if (type == AddinType.All)
                return FilterById (allSetupInfos, idFilter);

            if (type == AddinType.Addin) {
                if (addinSetupInfos == null) {
                    addinSetupInfos = new ArrayList ();
                    foreach (Addin adn in allSetupInfos)
                        if (!adn.Description.IsRoot)
                            addinSetupInfos.Add (adn);
                }
                return FilterById (addinSetupInfos, idFilter);
            }
            else {
                if (rootSetupInfos == null) {
                    rootSetupInfos = new ArrayList ();
                    foreach (Addin adn in allSetupInfos)
                        if (adn.Description.IsRoot)
                            rootSetupInfos.Add (adn);
                }
                return FilterById (rootSetupInfos, idFilter);
            }
        }
Ejemplo n.º 10
0
 ArrayList InternalGetInstalledAddins(string domain, AddinType type)
 {
     return InternalGetInstalledAddins (domain, null, type);
 }
        /// <summary>
        /// Initialize setting. Only call after
        /// <para/>- Tag (
        /// <para/>- Model
        /// <para/>- Settings
        /// updated
        /// </summary>
        /// <returns></returns>
        bool InitializeSettings()
        {
            // default 
            _addinType = AddinType.Sql;
            _addinTabName = TabulatorSql;
            if ((string) Tag != TabulatorSql)
            {
                _addinType = AddinType.Script;
                _addinTabName = TabulatorScript;
            }
            // set title
            lblTitle.Text = _addinTabName;

            // Tab Pages for *.sql queries update
            // Make sure the Container is initialized
            if (components == null)
            {
                components = new System.ComponentModel.Container();
            }
            // the sql tabulators might already be available
            if (_sqlTabCntrls == null)
            {
                _sqlTabCntrls = new SqlTabPagesCntrl(Model, AddinSettings, components, tabControlSql, txtSearchTerm,
                    _newTabFromRecentToolStripMenuItem,
                    _loadTabFromRecentToolStripMenuItem, _addinTabName);
            }

            if (tabControlSql.TabPages.Count == 0)
            {
                // first tab with Element Template
                _sqlTabCntrls.AddTab(SqlTemplates.GetTemplateText(SqlTemplates.SqlTemplateId.ElementTemplate));
            }


            // run for SQL / Query
            if (_addinType == AddinType.Sql)
            {
                // don't show Script container
                splitContainer.Panel2Collapsed = true;
                // don't show Menu item LoadScripts
                //loadStandardScriptsToolStripMenuItem.Visible = false;
            }
            else // run for Script (includes SQL / Query)
            {
                splitContainer.SplitterDistance = 330;
                // available script updates
                ReloadScripts();
            }

            return true;
        }