PSUnitResult.cs (6213B)
1 // ----------------------------------------------------------------------------- 2 // <copyright file="PSUnitResult.cs" company="Microsoft Corporation"> 3 // Copyright (c) Microsoft Corporation. Licensed under the MIT License. 4 // </copyright> 5 // ----------------------------------------------------------------------------- 6 7 namespace Microsoft.WinGet.Configuration.Engine.PSObjects 8 { 9 using Microsoft.Management.Configuration; 10 using Microsoft.WinGet.Configuration.Engine.Exceptions; 11 using Microsoft.WinGet.Resources; 12 13 /// <summary> 14 /// Unit result. 15 /// </summary> 16 public abstract class PSUnitResult 17 { 18 /// <summary> 19 /// Initializes a new instance of the <see cref="PSUnitResult"/> class. 20 /// </summary> 21 /// <param name="unit">Unit.</param> 22 /// <param name="resultInfo">Result info.</param> 23 internal PSUnitResult(ConfigurationUnit unit, IConfigurationUnitResultInformation resultInfo) 24 { 25 this.Type = unit.Type; 26 this.ResultCode = resultInfo.ResultCode?.HResult ?? ErrorCodes.S_OK; 27 28 if (this.ResultCode != ErrorCodes.S_OK) 29 { 30 this.Message = this.GetUnitMessage(unit, resultInfo); 31 this.Description = resultInfo.Description.Trim(); 32 this.Details = resultInfo.Details; 33 } 34 } 35 36 /// <summary> 37 /// Gets the unit type. 38 /// </summary> 39 public string Type { get; private init; } 40 41 /// <summary> 42 /// Gets the result code. 43 /// </summary> 44 public int ResultCode { get; private init; } 45 46 /// <summary> 47 /// Gets the message. 48 /// </summary> 49 public string? Message { get; private init; } 50 51 /// <summary> 52 /// Gets the short description. 53 /// </summary> 54 public string? Description { get; private init; } 55 56 /// <summary> 57 /// Gets detailed information. 58 /// </summary> 59 public string? Details { get; private init; } 60 61 private string GetUnitMessage(ConfigurationUnit unit, IConfigurationUnitResultInformation resultInfo) 62 { 63 if (resultInfo.ResultCode == null) 64 { 65 if (unit.State == ConfigurationUnitState.Skipped) 66 { 67 return string.Format(Resources.ConfigurationUnitSkipped, "null"); 68 } 69 70 return string.Format(Resources.ConfigurationUnitFailed, "null"); 71 } 72 73 int resultCode = resultInfo.ResultCode.HResult; 74 switch (resultCode) 75 { 76 case ErrorCodes.WingetConfigErrorDuplicateIdentifier: 77 return string.Format(Resources.ConfigurationUnitHasDuplicateIdentifier, unit.Identifier); 78 case ErrorCodes.WingetConfigErrorMissingDependency: 79 return string.Format(Resources.ConfigurationUnitHasMissingDependency, resultInfo.Details); 80 case ErrorCodes.WingetConfigErrorAssertionFailed: 81 return Resources.ConfigurationUnitAssertHadNegativeResult; 82 case ErrorCodes.WinGetConfigUnitNotFound: 83 return Resources.ConfigurationUnitNotFoundInModule; 84 case ErrorCodes.WinGetConfigUnitNotFoundRepository: 85 return Resources.ConfigurationUnitNotFound; 86 case ErrorCodes.WinGetConfigUnitMultipleMatches: 87 return Resources.ConfigurationUnitMultipleMatches; 88 case ErrorCodes.WinGetConfigUnitInvokeGet: 89 return Resources.ConfigurationUnitFailedDuringGet; 90 case ErrorCodes.WinGetConfigUnitInvokeTest: 91 return Resources.ConfigurationUnitFailedDuringTest; 92 case ErrorCodes.WinGetConfigUnitInvokeSet: 93 return Resources.ConfigurationUnitFailedDuringSet; 94 case ErrorCodes.WinGetConfigUnitModuleConflict: 95 return Resources.ConfigurationUnitModuleConflict; 96 case ErrorCodes.WinGetConfigUnitImportModule: 97 return Resources.ConfigurationUnitModuleImportFailed; 98 case ErrorCodes.WinGetConfigUnitInvokeInvalidResult: 99 return Resources.ConfigurationUnitReturnedInvalidResult; 100 case ErrorCodes.WingetConfigErrorManuallySkipped: 101 return Resources.ConfigurationUnitManuallySkipped; 102 case ErrorCodes.WingetConfigErrorDependencyUnsatisfied: 103 return Resources.ConfigurationUnitNotRunDueToDependency; 104 case ErrorCodes.WinGetConfigUnitSettingConfigRoot: 105 return Resources.WinGetConfigUnitSettingConfigRoot; 106 case ErrorCodes.WinGetConfigUnitImportModuleAdmin: 107 return Resources.WinGetConfigUnitImportModuleAdmin; 108 } 109 110 switch (resultInfo.ResultSource) 111 { 112 case ConfigurationUnitResultSource.ConfigurationSet: 113 return string.Format(Resources.ConfigurationUnitFailedConfigSet, resultCode); 114 case ConfigurationUnitResultSource.Internal: 115 return string.Format(Resources.ConfigurationUnitFailedInternal, resultCode); 116 case ConfigurationUnitResultSource.Precondition: 117 return string.Format(Resources.ConfigurationUnitFailedPrecondition, resultCode); 118 case ConfigurationUnitResultSource.SystemState: 119 return string.Format(Resources.ConfigurationUnitFailedSystemState, resultCode); 120 case ConfigurationUnitResultSource.UnitProcessing: 121 return string.Format(Resources.ConfigurationUnitFailedUnitProcessing, resultCode); 122 } 123 124 if (unit.State == ConfigurationUnitState.Skipped) 125 { 126 return string.Format(Resources.ConfigurationUnitSkipped, resultCode); 127 } 128 129 return string.Format(Resources.ConfigurationUnitFailed, resultCode); 130 } 131 } 132 }