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