528 lines
14 KiB
C#
528 lines
14 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using Intel.Management.Wsman;
|
|
|
|
namespace Intel.Management.PSModule
|
|
{
|
|
/// <summary>
|
|
/// Container for a collection of settings
|
|
/// </summary>
|
|
class SettingsContainer : DriveContainer
|
|
{
|
|
protected IManagedReference _refToSettings;
|
|
protected IManagedInstance _settingsObj;
|
|
|
|
public SettingsContainer(string name, DriveItem parent)
|
|
: base(name, parent)
|
|
{
|
|
_refToSettings = null; // inheritior will set this
|
|
}
|
|
|
|
public override void GetChildItems(ChildWriter writer)
|
|
{
|
|
if (_settingsObj == null || writer.Force)
|
|
_settingsObj=_refToSettings.Get();
|
|
}
|
|
|
|
public virtual void Update()
|
|
{
|
|
IManagedInstance copyRef= _refToSettings.Put(_settingsObj);
|
|
}
|
|
|
|
public string GetSetting(string name)
|
|
{
|
|
return _settingsObj.GetProperty(name).ToString();
|
|
}
|
|
|
|
|
|
public void SetSetting(string name,string value)
|
|
{
|
|
_settingsObj.SetProperty(name, value);
|
|
Update();
|
|
|
|
}
|
|
|
|
public bool HasSetting(string name)
|
|
{
|
|
return !_settingsObj.GetProperty(name).IsNull;
|
|
}
|
|
|
|
public IWsmanItem GetSettingItem(string name)
|
|
{
|
|
return _settingsObj.GetProperty(name);
|
|
|
|
}
|
|
|
|
public void RemoveSetting(string name)
|
|
{
|
|
_settingsObj.RemoveProperty(name);
|
|
}
|
|
|
|
public void ChangeSetting(string name, object value)
|
|
{
|
|
_settingsObj.SetProperty(name, value.ToString());
|
|
}
|
|
|
|
public void ChangeSetting(string name, IManagedReference refToValue)
|
|
{
|
|
_settingsObj.SetProperty(name, refToValue);
|
|
}
|
|
|
|
public void SetSetting(string name, object[] values)
|
|
{
|
|
_settingsObj.RemoveProperty(name);
|
|
foreach (object value in values)
|
|
{
|
|
_settingsObj.AddProperty(name, value.ToString());
|
|
}
|
|
|
|
|
|
_refToSettings.Put(_settingsObj);
|
|
}
|
|
|
|
public IManagedReference GetReference()
|
|
{
|
|
return _refToSettings;
|
|
}
|
|
|
|
|
|
|
|
}// end SettingsContainer class
|
|
|
|
class SettingsItem : DriveItem
|
|
{
|
|
public SettingsItem(string name, SettingsContainer container)
|
|
: base(name, container)
|
|
{
|
|
}
|
|
|
|
public override void RemoveItem(DriveProvider provider)
|
|
{
|
|
SettingsContainer settings = _parent as SettingsContainer;
|
|
settings.RemoveSetting(_name);
|
|
_parent.RemoveChildItem(this);
|
|
}
|
|
|
|
public override object GetReturnObject()
|
|
{
|
|
return new NameValuePairItem(Name, Value);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// A String Setting in a SettingsContainer
|
|
/// </summary>
|
|
class StringSetting : SettingsItem
|
|
{
|
|
public StringSetting(string name, SettingsContainer container)
|
|
: base(name, container)
|
|
{
|
|
}
|
|
|
|
public override object Value
|
|
{
|
|
get
|
|
{
|
|
SettingsContainer settings = _parent as SettingsContainer;
|
|
return settings.GetSetting(_name);
|
|
}
|
|
}
|
|
|
|
|
|
public override void SetItem(object values, DriveProvider provider)
|
|
{
|
|
SettingsContainer settings = _parent as SettingsContainer;
|
|
settings.SetSetting(_name, values.ToString());
|
|
}
|
|
|
|
|
|
}// end StringStting
|
|
|
|
|
|
/// <summary>
|
|
/// A Boolean Setting in a SettingsContainer
|
|
/// </summary>
|
|
class BooleanSetting : SettingsItem
|
|
{
|
|
public BooleanSetting(string name, SettingsContainer container)
|
|
: base(name, container)
|
|
{
|
|
}
|
|
|
|
public override object Value
|
|
{
|
|
get
|
|
{
|
|
SettingsContainer settings = _parent as SettingsContainer;
|
|
return bool.Parse(settings.GetSetting(_name));
|
|
}
|
|
}
|
|
|
|
public override void RemoveItem(DriveProvider provider)
|
|
{
|
|
SettingsContainer settings = _parent as SettingsContainer;
|
|
settings.RemoveSetting(_name);
|
|
}
|
|
|
|
public override void SetItem(object values, DriveProvider provider)
|
|
{
|
|
SettingsContainer settings = _parent as SettingsContainer;
|
|
settings.SetSetting(_name, values.ToString().ToLower());
|
|
}
|
|
|
|
public override object GetReturnObject()
|
|
{
|
|
return new NameValuePairItem(Name, Value);
|
|
}
|
|
}// end boolean class
|
|
|
|
/// <summary>
|
|
/// A UIn32 Setting in a SettingsContainer
|
|
/// </summary>
|
|
class UIntSetting : SettingsItem
|
|
{
|
|
public UIntSetting(string name, SettingsContainer container)
|
|
: base(name, container)
|
|
{
|
|
}
|
|
|
|
public override void RemoveItem(DriveProvider provider)
|
|
{
|
|
SettingsContainer settings = _parent as SettingsContainer;
|
|
settings.RemoveSetting(_name);
|
|
}
|
|
|
|
public override object Value
|
|
{
|
|
get
|
|
{
|
|
SettingsContainer settings = _parent as SettingsContainer;
|
|
return uint.Parse(settings.GetSetting(_name));
|
|
}
|
|
}
|
|
|
|
public override void SetItem(object values, DriveProvider provider)
|
|
{
|
|
SettingsContainer settings = _parent as SettingsContainer;
|
|
settings.SetSetting(_name, values.ToString().ToLower());
|
|
}
|
|
|
|
public override object GetReturnObject()
|
|
{
|
|
return new NameValuePairItem(Name, Value);
|
|
}
|
|
}// end UnIntSetting class
|
|
|
|
enum TimespanUnits
|
|
{
|
|
Seconds,
|
|
minutes,
|
|
}
|
|
|
|
/// <summary>
|
|
/// A Timespan Setting in a SettingsContainer
|
|
/// </summary>
|
|
class TimespanSetting : SettingsItem
|
|
{
|
|
TimespanUnits _units;
|
|
|
|
public TimespanSetting(string name, TimespanUnits units, SettingsContainer container)
|
|
: base(name, container)
|
|
{
|
|
_units = units;
|
|
_value = null;
|
|
}
|
|
|
|
public override void RemoveItem(DriveProvider provider)
|
|
{
|
|
SettingsContainer settings = _parent as SettingsContainer;
|
|
settings.RemoveSetting(_name);
|
|
}
|
|
|
|
public override object Value
|
|
{
|
|
get
|
|
{
|
|
SettingsContainer settings = _parent as SettingsContainer;
|
|
if (_value == null)
|
|
{
|
|
int unit = int.Parse(settings.GetSetting(_name));
|
|
if (_units==TimespanUnits.Seconds)
|
|
_value = new TimeSpan(0, 0, unit);
|
|
else
|
|
_value = new TimeSpan(0, unit, 0);
|
|
}
|
|
return _value;
|
|
}
|
|
}
|
|
|
|
public override void SetItem(object values, DriveProvider provider)
|
|
{
|
|
SettingsContainer settings = _parent as SettingsContainer;
|
|
|
|
TimeSpan span = TimeSpan.Parse(values.ToString());
|
|
|
|
if (_units == TimespanUnits.Seconds)
|
|
{
|
|
settings.SetSetting(_name, span.TotalSeconds.ToString());
|
|
}
|
|
else
|
|
{
|
|
settings.SetSetting(_name, span.TotalMinutes.ToString());
|
|
}
|
|
|
|
_value = span;
|
|
|
|
|
|
}
|
|
|
|
public override object GetReturnObject()
|
|
{
|
|
return new NameValuePairItem(Name, Value);
|
|
}
|
|
}// end TimespanSetting class
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// A ValueMap Setting in a SettingsContainer
|
|
/// </summary>
|
|
class ValueMapSetting : SettingsItem
|
|
{
|
|
public ValueMapSetting(string name, IDictionary<string, string> valuemap, SettingsContainer container)
|
|
: base(name, container)
|
|
{
|
|
|
|
string mapValue = container.GetSetting(_name);
|
|
_value = ValueMap.Create(mapValue, valuemap);
|
|
}
|
|
|
|
public ValueMapSetting(string name,ValueMap value, SettingsContainer container)
|
|
: base(name, container)
|
|
{
|
|
|
|
string mapValue = container.GetSetting(_name);
|
|
_value = value;
|
|
}
|
|
|
|
public override void RemoveItem(DriveProvider provider)
|
|
{
|
|
SettingsContainer settings = _parent as SettingsContainer;
|
|
settings.RemoveSetting(_name);
|
|
}
|
|
|
|
|
|
|
|
public override void SetItem(object values, DriveProvider provider)
|
|
{
|
|
|
|
SettingsContainer settings = _parent as SettingsContainer;
|
|
ValueMap map = _value as ValueMap;
|
|
|
|
|
|
if (values is string)
|
|
{
|
|
|
|
string mappedValue = map.GetValueFromString(values.ToString());
|
|
if (mappedValue.Equals(string.Empty))
|
|
throw new System.Management.Automation.PSArgumentException();
|
|
|
|
settings.SetSetting(_name, mappedValue);
|
|
map.Value = mappedValue;
|
|
}
|
|
|
|
else if (values is ValueMap)
|
|
{
|
|
settings.SetSetting(_name, ((ValueMap)values).Value.ToString());
|
|
_value = values;
|
|
}
|
|
else
|
|
{
|
|
settings.SetSetting(_name, values.ToString());
|
|
map.Value = values.ToString();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
public override object GetReturnObject()
|
|
{
|
|
return new NameValuePairItem(Name, Value);
|
|
}
|
|
}// end UnIntSetting class
|
|
|
|
/// <summary>
|
|
/// An array of ValueMapSettings in a SettingsContainer
|
|
/// </summary>
|
|
class ValueMapsSetting : SettingsItem
|
|
{
|
|
IDictionary<string, string> _valuemap;
|
|
public ValueMapsSetting(string name, IDictionary<string,string> valuemap, SettingsContainer container)
|
|
: base(name, container)
|
|
{
|
|
|
|
SettingsContainer settings = _parent as SettingsContainer;
|
|
List<ValueMap> list = new List<ValueMap>();
|
|
|
|
foreach (IWsmanItem item in settings.GetSettingItem(_name))
|
|
{
|
|
list.Add(ValueMap.Create(item.ToString(),valuemap));
|
|
}
|
|
_value= list.ToArray();
|
|
_valuemap = valuemap;
|
|
}
|
|
|
|
public override void RemoveItem(DriveProvider provider)
|
|
{
|
|
SettingsContainer settings = _parent as SettingsContainer;
|
|
settings.RemoveSetting(_name);
|
|
}
|
|
|
|
|
|
|
|
public override void SetItem(object values, DriveProvider provider)
|
|
{
|
|
|
|
SettingsContainer settings = _parent as SettingsContainer;
|
|
|
|
List<ValueMap> list = new List<ValueMap>();
|
|
|
|
|
|
|
|
object[] objArray = new object[0];
|
|
|
|
if (values is string)
|
|
{
|
|
objArray = new string[1];
|
|
ValueMap map = ValueMap.CreateFromStringValue(values.ToString(), _valuemap);
|
|
list.Add(map);
|
|
objArray[0] = map.Value;
|
|
|
|
}
|
|
else if (values is object[])
|
|
{
|
|
objArray = new string[((object[])values).Length];
|
|
for (int i = 0; i < objArray.Length; i++)
|
|
{
|
|
ValueMap map = ValueMap.CreateFromStringValue(((object[])values)[i].ToString(), _valuemap);
|
|
list.Add(map);
|
|
objArray[i] = map.Value;
|
|
}
|
|
}
|
|
|
|
settings.SetSetting(_name, objArray);
|
|
|
|
_value=list.ToArray();
|
|
|
|
}
|
|
|
|
public override object GetReturnObject()
|
|
{
|
|
return new NameValuePairItem(Name, Value);
|
|
}
|
|
}// end UnIntSetting class
|
|
|
|
|
|
/// <summary>
|
|
/// A String array Setting in a SettingsContainer
|
|
/// </summary>
|
|
class StringsSetting : DriveItem
|
|
{
|
|
public StringsSetting(string name, SettingsContainer container)
|
|
: base(name, container)
|
|
{
|
|
}
|
|
|
|
public override object Value
|
|
{
|
|
get
|
|
{
|
|
SettingsContainer settings = _parent as SettingsContainer;
|
|
List<string> list = new List<string>();
|
|
|
|
foreach (IWsmanItem item in settings.GetSettingItem(_name))
|
|
{
|
|
list.Add(item.ToString());
|
|
}
|
|
return list.ToArray();
|
|
}
|
|
}
|
|
|
|
public override void RemoveItem(DriveProvider provider)
|
|
{
|
|
SettingsContainer settings = _parent as SettingsContainer;
|
|
settings.RemoveSetting(_name);
|
|
}
|
|
|
|
public override void SetItem(object values, DriveProvider provider)
|
|
{
|
|
SettingsContainer settings = _parent as SettingsContainer;
|
|
|
|
object[] objArray = null;
|
|
if (values is string)
|
|
{
|
|
objArray = new string[1];
|
|
objArray[0] = values.ToString();
|
|
}
|
|
else if (values is string[])
|
|
{
|
|
objArray = values as object[];
|
|
}
|
|
|
|
settings.SetSetting(_name, objArray);
|
|
}
|
|
|
|
public override object GetReturnObject()
|
|
{
|
|
return new NameValuePairItem(Name, Value);
|
|
}
|
|
|
|
} // StringSettings class
|
|
|
|
|
|
/// <summary>
|
|
/// An Optional String Setting
|
|
/// </summary>
|
|
class OptionalStringSetting : StringSetting
|
|
{
|
|
public OptionalStringSetting(string name, SettingsContainer container)
|
|
: base(name, container)
|
|
{
|
|
}
|
|
|
|
public override object Value
|
|
{
|
|
get
|
|
{
|
|
SettingsContainer settings = _parent as SettingsContainer;
|
|
|
|
if (settings.HasSetting(_name))
|
|
return settings.GetSetting(_name);
|
|
|
|
return string.Empty;
|
|
}
|
|
}
|
|
|
|
|
|
public override void SetItem(object values, DriveProvider provider)
|
|
{
|
|
SettingsContainer settings = _parent as SettingsContainer;
|
|
|
|
string value = null;
|
|
if (values != null)
|
|
value = values.ToString();
|
|
|
|
if (string.IsNullOrEmpty(value))
|
|
{
|
|
value = null;
|
|
settings.SetSetting(_name, value);
|
|
}
|
|
else
|
|
settings.SetSetting(_name, values.ToString());
|
|
}
|
|
}//end OptionalStringSetting
|
|
|
|
}//end namespace
|