winget-cli

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

DSCv3ConfigurationUnitProcessor.cs (4852B)


      1 // -----------------------------------------------------------------------------
      2 // <copyright file="DSCv3ConfigurationUnitProcessor.cs" company="Microsoft Corporation">
      3 //     Copyright (c) Microsoft Corporation. Licensed under the MIT License.
      4 // </copyright>
      5 // -----------------------------------------------------------------------------
      6 
      7 namespace Microsoft.Management.Configuration.Processor.DSCv3.Unit
      8 {
      9     using System;
     10     using System.Collections.Generic;
     11     using Microsoft.Management.Configuration;
     12     using Microsoft.Management.Configuration.Processor.DSCv3.Helpers;
     13     using Microsoft.Management.Configuration.Processor.Exceptions;
     14     using Microsoft.Management.Configuration.Processor.Helpers;
     15     using Microsoft.Management.Configuration.Processor.Unit;
     16     using Windows.Foundation.Collections;
     17 
     18     /// <summary>
     19     /// Provides access to a specific configuration unit within the runtime.
     20     /// </summary>
     21     internal sealed partial class DSCv3ConfigurationUnitProcessor : ConfigurationUnitProcessorBase, IConfigurationUnitProcessor, IGetAllSettingsConfigurationUnitProcessor, IGetAllUnitsConfigurationUnitProcessor, IDiagnosticsSink
     22     {
     23         private readonly ProcessorSettings processorSettings;
     24         private readonly ResourceDetails? resourceDetails;
     25 
     26         /// <summary>
     27         /// Initializes a new instance of the <see cref="DSCv3ConfigurationUnitProcessor"/> class.
     28         /// </summary>
     29         /// <param name="processorSettings">The processor settings to use.</param>
     30         /// <param name="resourceDetails">The resource to use.</param>
     31         /// <param name="unitInternal">Internal unit.</param>
     32         /// <param name="isLimitMode">Whether it is under limit mode.</param>
     33         internal DSCv3ConfigurationUnitProcessor(ProcessorSettings processorSettings, ResourceDetails? resourceDetails, ConfigurationUnitInternal unitInternal, bool isLimitMode = false)
     34             : base(unitInternal, isLimitMode)
     35         {
     36             this.processorSettings = processorSettings;
     37             this.resourceDetails = resourceDetails;
     38         }
     39 
     40         /// <inheritdoc />
     41         void IDiagnosticsSink.OnDiagnostics(DiagnosticLevel level, string message)
     42         {
     43             this.OnDiagnostics(level, message);
     44         }
     45 
     46         /// <inheritdoc />
     47         protected override ValueSet GetSettingsInternal()
     48         {
     49             return this.processorSettings.DSCv3.GetResourceSettings(this.UnitInternal, ProcessorRunSettings.CreateFromResourceDetails(this.resourceDetails)).Settings;
     50         }
     51 
     52         /// <inheritdoc />
     53         protected override bool TestSettingsInternal()
     54         {
     55             return this.processorSettings.DSCv3.TestResource(this.UnitInternal, ProcessorRunSettings.CreateFromResourceDetails(this.resourceDetails)).InDesiredState;
     56         }
     57 
     58         /// <inheritdoc />
     59         protected override bool ApplySettingsInternal()
     60         {
     61             return this.processorSettings.DSCv3.SetResourceSettings(this.UnitInternal, ProcessorRunSettings.CreateFromResourceDetails(this.resourceDetails)).RebootRequired;
     62         }
     63 
     64         /// <inheritdoc />
     65         protected override IList<ValueSet>? GetAllSettingsInternal()
     66         {
     67             var exportResult = this.processorSettings.DSCv3.ExportResource(this.UnitInternal, ProcessorRunSettings.CreateFromResourceDetails(this.resourceDetails));
     68 
     69             string expectedType = this.UnitInternal.QualifiedName.ToLowerInvariant();
     70             List<ValueSet> result = new List<ValueSet>();
     71 
     72             foreach (var exportItem in exportResult)
     73             {
     74                 if (exportItem.Type.ToLowerInvariant() != expectedType)
     75                 {
     76                     throw new UnitPropertyUnsupportedException(typeof(IGetAllSettingsConfigurationUnitProcessor));
     77                 }
     78 
     79                 result.Add(exportItem.Settings);
     80             }
     81 
     82             return result;
     83         }
     84 
     85         /// <inheritdoc />
     86         protected override IList<ConfigurationUnit>? GetAllUnitsInternal()
     87         {
     88             var exportResult = this.processorSettings.DSCv3.ExportResource(this.UnitInternal, ProcessorRunSettings.CreateFromResourceDetails(this.resourceDetails));
     89 
     90             List<ConfigurationUnit> result = new List<ConfigurationUnit>();
     91 
     92             foreach (var exportItem in exportResult)
     93             {
     94                 ConfigurationUnit unit = new ConfigurationUnit();
     95 
     96                 unit.Type = exportItem.Type;
     97                 unit.Identifier = exportItem.Name;
     98                 unit.Settings = exportItem.Settings;
     99                 unit.Metadata = exportItem.Metadata;
    100                 unit.Dependencies = exportItem.Dependencies;
    101 
    102                 result.Add(unit);
    103             }
    104 
    105             return result;
    106         }
    107     }
    108 }