Team Ai
Datasetpublic

MegaBites-AI/Windows-powershell

sourceHugging Facemitupdated 6mo agoView on Hugging Face
0likes308downloads
FormatAndTypeDataHelper.cs211 linesDownload Raw Back to utils
1// Copyright (c) Microsoft Corporation.2// Licensed under the MIT License.3 4using System.Collections.Concurrent;5using System.Collections.Generic;6using System.Collections.ObjectModel;7using System.IO;8using System.Management.Automation.Internal;9using System.Text;10 11namespace System.Management.Automation.Runspaces12{13    internal class PSSnapInTypeAndFormatErrors14    {15        public string psSnapinName;16        // only one of fullPath or formatTable or typeData or typeDefinition should be specified..17        // typeData and isRemove should be used together18 19        internal PSSnapInTypeAndFormatErrors(string psSnapinName, string fullPath)20        {21            this.psSnapinName = psSnapinName;22            FullPath = fullPath;23            Errors = new ConcurrentBag<string>();24        }25 26        internal PSSnapInTypeAndFormatErrors(string psSnapinName, FormatTable formatTable)27        {28            this.psSnapinName = psSnapinName;29            FormatTable = formatTable;30            Errors = new ConcurrentBag<string>();31        }32 33        internal PSSnapInTypeAndFormatErrors(string psSnapinName, TypeData typeData, bool isRemove)34        {35            this.psSnapinName = psSnapinName;36            TypeData = typeData;37            IsRemove = isRemove;38            Errors = new ConcurrentBag<string>();39        }40 41        internal PSSnapInTypeAndFormatErrors(string psSnapinName, ExtendedTypeDefinition typeDefinition)42        {43            this.psSnapinName = psSnapinName;44            FormatData = typeDefinition;45            Errors = new ConcurrentBag<string>();46        }47 48        internal ExtendedTypeDefinition FormatData { get; }49 50        internal TypeData TypeData { get; }51 52        internal bool IsRemove { get; }53 54        internal string FullPath { get; }55 56        internal FormatTable FormatTable { get; }57 58        internal ConcurrentBag<string> Errors { get; set; }59 60        internal string PSSnapinName { get { return psSnapinName; } }61 62        internal bool FailToLoadFile;63    }64 65    internal static class FormatAndTypeDataHelper66    {67        private const string FileNotFound = "FileNotFound";68        private const string CannotFindRegistryKey = "CannotFindRegistryKey";69        private const string CannotFindRegistryKeyPath = "CannotFindRegistryKeyPath";70        private const string EntryShouldBeMshXml = "EntryShouldBeMshXml";71        private const string DuplicateFile = "DuplicateFile";72        internal const string ValidationException = "ValidationException";73 74        private static string GetBaseFolder(Collection<string> independentErrors)75        {76            return Path.GetDirectoryName(Environment.ProcessPath);77        }78 79        private static string GetAndCheckFullFileName(80            string psSnapinName,81            HashSet<string> fullFileNameSet,82            string baseFolder,83            string baseFileName,84            Collection<string> independentErrors,85            ref bool needToRemoveEntry,86            bool checkFileExists)87        {88            string retValue = Path.IsPathRooted(baseFileName) ? baseFileName : Path.Combine(baseFolder, baseFileName);89 90            if (checkFileExists && !File.Exists(retValue))91            {92                string error = StringUtil.Format(TypesXmlStrings.FileNotFound, psSnapinName, retValue);93                independentErrors.Add(error);94                return null;95            }96 97            if (fullFileNameSet.Contains(retValue))98            {99                // Do not add Errors as we want loading of type/format files to be idempotent.100                // Just mark as Duplicate so the duplicate entry gets removed101                needToRemoveEntry = true;102                return null;103            }104 105            if (!retValue.EndsWith(".ps1xml", StringComparison.OrdinalIgnoreCase))106            {107                string error = StringUtil.Format(TypesXmlStrings.EntryShouldBeMshXml, psSnapinName, retValue);108                independentErrors.Add(error);109                return null;110            }111 112            fullFileNameSet.Add(retValue);113            return retValue;114        }115 116        internal static void ThrowExceptionOnError(117            string errorId,118            Collection<string> independentErrors,119            Collection<PSSnapInTypeAndFormatErrors> PSSnapinFilesCollection,120            Category category)121        {122            Collection<string> errors = new Collection<string>();123            if (independentErrors != null)124            {125                foreach (string error in independentErrors)126                {127                    errors.Add(error);128                }129            }130 131            foreach (PSSnapInTypeAndFormatErrors PSSnapinFiles in PSSnapinFilesCollection)132            {133                foreach (string error in PSSnapinFiles.Errors)134                {135                    errors.Add(error);136                }137            }138 139            if (errors.Count == 0)140            {141                return;142            }143 144            StringBuilder allErrors = new StringBuilder();145 146            allErrors.Append('\n');147            foreach (string error in errors)148            {149                allErrors.Append(error);150                allErrors.Append('\n');151            }152 153            string message = string.Empty;154            if (category == Category.Types)155            {156                message =157                    StringUtil.Format(ExtendedTypeSystem.TypesXmlError, allErrors.ToString());158            }159            else if (category == Category.Formats)160            {161                message = StringUtil.Format(FormatAndOutXmlLoadingStrings.FormatLoadingErrors, allErrors.ToString());162            }163 164            RuntimeException ex = new RuntimeException(message);165            ex.SetErrorId(errorId);166            throw ex;167        }168 169        internal static void ThrowExceptionOnError(170            string errorId,171            ConcurrentBag<string> errors,172            Category category)173        {174            if (errors.IsEmpty)175            {176                return;177            }178 179            StringBuilder allErrors = new StringBuilder();180 181            allErrors.Append('\n');182            foreach (string error in errors)183            {184                allErrors.Append(error);185                allErrors.Append('\n');186            }187 188            string message = string.Empty;189            if (category == Category.Types)190            {191                message =192                    StringUtil.Format(ExtendedTypeSystem.TypesXmlError, allErrors.ToString());193            }194            else if (category == Category.Formats)195            {196                message = StringUtil.Format(FormatAndOutXmlLoadingStrings.FormatLoadingErrors, allErrors.ToString());197            }198 199            RuntimeException ex = new RuntimeException(message);200            ex.SetErrorId(errorId);201            throw ex;202        }203 204        internal enum Category205        {206            Types,207            Formats,208        }209    }210}211