using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Intel.Management.Wsman;
namespace Intel.Management.PSModule
{
///
/// Container for a collection of settings
///
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);
}
}
///
/// A String Setting in a SettingsContainer
///
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
///
/// A Boolean Setting in a SettingsContainer
///
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
///
/// A UIn32 Setting in a SettingsContainer
///
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,
}
///
/// A Timespan Setting in a SettingsContainer
///
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
///
/// A ValueMap Setting in a SettingsContainer
///
class ValueMapSetting : SettingsItem
{
public ValueMapSetting(string name, IDictionary 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
///
/// An array of ValueMapSettings in a SettingsContainer
///
class ValueMapsSetting : SettingsItem
{
IDictionary _valuemap;
public ValueMapsSetting(string name, IDictionary valuemap, SettingsContainer container)
: base(name, container)
{
SettingsContainer settings = _parent as SettingsContainer;
List list = new List();
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 list = new List();
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
///
/// A String array Setting in a SettingsContainer
///
class StringsSetting : DriveItem
{
public StringsSetting(string name, SettingsContainer container)
: base(name, container)
{
}
public override object Value
{
get
{
SettingsContainer settings = _parent as SettingsContainer;
List list = new List();
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
///
/// An Optional String Setting
///
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