ConfigurationUnit.cpp (6308B)
1 // Copyright (c) Microsoft Corporation. 2 // Licensed under the MIT License. 3 #include "pch.h" 4 #include "ConfigurationUnit.h" 5 #include "ConfigurationUnit.g.cpp" 6 #include "ConfigurationSetParser.h" 7 #include "ConfigurationStatus.h" 8 9 namespace winrt::Microsoft::Management::Configuration::implementation 10 { 11 namespace 12 { 13 using ValueSet = Windows::Foundation::Collections::ValueSet; 14 15 ValueSet Clone(const ValueSet& source) 16 { 17 ValueSet result; 18 19 for (const auto& entry : source) 20 { 21 ValueSet child = entry.Value().try_as<ValueSet>(); 22 23 if (child) 24 { 25 result.Insert(entry.Key(), Clone(child)); 26 } 27 else 28 { 29 result.Insert(entry.Key(), entry.Value()); 30 } 31 } 32 33 return result; 34 } 35 36 Windows::Foundation::Collections::IVector<hstring> Clone(const Windows::Foundation::Collections::IVector<hstring>& value) 37 { 38 std::vector<hstring> temp{ value.Size() }; 39 value.GetMany(0, temp); 40 return winrt::multi_threaded_vector<hstring>(std::move(temp)); 41 } 42 } 43 44 ConfigurationUnit::ConfigurationUnit() 45 { 46 GUID instanceIdentifier; 47 THROW_IF_FAILED(CoCreateGuid(&instanceIdentifier)); 48 m_instanceIdentifier = instanceIdentifier; 49 } 50 51 ConfigurationUnit::ConfigurationUnit(const guid& instanceIdentifier) : 52 m_instanceIdentifier(instanceIdentifier) 53 { 54 } 55 56 hstring ConfigurationUnit::Type() 57 { 58 return m_type; 59 } 60 61 void ConfigurationUnit::Type(const hstring& value) 62 { 63 m_type = value; 64 } 65 66 guid ConfigurationUnit::InstanceIdentifier() 67 { 68 return m_instanceIdentifier; 69 } 70 71 hstring ConfigurationUnit::Identifier() 72 { 73 return m_identifier; 74 } 75 76 void ConfigurationUnit::Identifier(const hstring& value) 77 { 78 m_identifier = value; 79 } 80 81 ConfigurationUnitIntent ConfigurationUnit::Intent() 82 { 83 return m_intent; 84 } 85 86 void ConfigurationUnit::Intent(ConfigurationUnitIntent value) 87 { 88 m_intent = value; 89 } 90 91 Windows::Foundation::Collections::IVector<hstring> ConfigurationUnit::Dependencies() 92 { 93 return m_dependencies; 94 } 95 96 void ConfigurationUnit::Dependencies(const Windows::Foundation::Collections::IVector<hstring>& value) 97 { 98 THROW_HR_IF(E_POINTER, !value); 99 m_dependencies = value; 100 } 101 102 void ConfigurationUnit::Dependencies(std::vector<hstring>&& value) 103 { 104 m_dependencies = winrt::multi_threaded_vector<hstring>(std::move(value)); 105 } 106 107 Windows::Foundation::Collections::ValueSet ConfigurationUnit::Metadata() 108 { 109 return m_metadata; 110 } 111 112 void ConfigurationUnit::Metadata(const Windows::Foundation::Collections::ValueSet& value) 113 { 114 THROW_HR_IF(E_POINTER, !value); 115 m_metadata = value; 116 } 117 118 Windows::Foundation::Collections::ValueSet ConfigurationUnit::Settings() 119 { 120 return m_settings; 121 } 122 123 void ConfigurationUnit::Settings(const Windows::Foundation::Collections::ValueSet& value) 124 { 125 THROW_HR_IF(E_POINTER, !value); 126 m_settings = value; 127 } 128 129 IConfigurationUnitProcessorDetails ConfigurationUnit::Details() 130 { 131 return m_details; 132 } 133 134 void ConfigurationUnit::Details(IConfigurationUnitProcessorDetails details) 135 { 136 m_details = std::move(details); 137 } 138 139 ConfigurationUnitState ConfigurationUnit::State() 140 { 141 auto status = ConfigurationStatus::Instance(); 142 return status->GetUnitState(m_instanceIdentifier); 143 } 144 145 IConfigurationUnitResultInformation ConfigurationUnit::ResultInformation() 146 { 147 auto status = ConfigurationStatus::Instance(); 148 return status->GetUnitResultInformation(m_instanceIdentifier); 149 } 150 151 bool ConfigurationUnit::IsActive() 152 { 153 return m_isActive; 154 } 155 156 void ConfigurationUnit::IsActive(bool value) 157 { 158 m_isActive = value; 159 } 160 161 Configuration::ConfigurationUnit ConfigurationUnit::Copy() 162 { 163 auto result = make_self<ConfigurationUnit>(); 164 165 result->m_type = m_type; 166 result->m_intent = m_intent; 167 result->m_dependencies = Clone(m_dependencies); 168 result->m_metadata = Clone(m_metadata); 169 result->m_settings = Clone(m_settings); 170 result->m_details = m_details; 171 result->m_environment = make_self<implementation::ConfigurationEnvironment>(*m_environment); 172 173 return *result; 174 } 175 176 bool ConfigurationUnit::IsGroup() 177 { 178 return m_isGroup; 179 } 180 181 void ConfigurationUnit::IsGroup(bool value) 182 { 183 m_isGroup = value; 184 185 if (value) 186 { 187 if (!m_units) 188 { 189 m_units = winrt::multi_threaded_vector<Configuration::ConfigurationUnit>(); 190 } 191 } 192 } 193 194 Windows::Foundation::Collections::IVector<Configuration::ConfigurationUnit> ConfigurationUnit::Units() 195 { 196 return m_units; 197 } 198 199 void ConfigurationUnit::Units(const Windows::Foundation::Collections::IVector<Configuration::ConfigurationUnit>& value) 200 { 201 if (m_isGroup) 202 { 203 THROW_HR_IF(E_POINTER, !value); 204 } 205 else if (value) 206 { 207 m_isGroup = true; 208 } 209 210 m_units = value; 211 } 212 213 void ConfigurationUnit::Units(std::vector<Configuration::ConfigurationUnit>&& value) 214 { 215 m_units = winrt::multi_threaded_vector<Configuration::ConfigurationUnit>(std::move(value)); 216 } 217 218 Configuration::ConfigurationEnvironment ConfigurationUnit::Environment() 219 { 220 return *m_environment; 221 } 222 223 implementation::ConfigurationEnvironment& ConfigurationUnit::EnvironmentInternal() 224 { 225 return *m_environment; 226 } 227 228 HRESULT STDMETHODCALLTYPE ConfigurationUnit::SetLifetimeWatcher(IUnknown* watcher) 229 { 230 return AppInstaller::WinRT::LifetimeWatcherBase::SetLifetimeWatcher(watcher); 231 } 232 }