Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
69 changes: 41 additions & 28 deletions InteractiveAutomationToolkit/Components/CheckBoxList.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,9 @@
/// </summary>
public class CheckBoxList : CheckBoxListBase, ICheckBoxList
{
private readonly IDictionary<string, bool> options = new Dictionary<string, bool>();
private readonly HashSet<string> options = new HashSet<string>();
private readonly RawValueMapping<string> rawValueMapping = new RawValueMapping<string>();
private readonly Dictionary<string, bool> checkedState = new Dictionary<string, bool>();
private readonly List<ChangedOption> changedOptions = new List<ChangedOption>();

/// <summary>
Expand Down Expand Up @@ -60,7 +62,7 @@ public IEnumerable<string> Checked
{
get
{
return options.Where(option => option.Value).Select(option => option.Key);
return checkedState.Where(kvp => kvp.Value).Select(kvp => kvp.Key);
}
}

Expand All @@ -69,7 +71,7 @@ public virtual IEnumerable<string> Options
{
get
{
return options.Keys;
return options;
}
}

Expand All @@ -78,7 +80,7 @@ public IEnumerable<string> Unchecked
{
get
{
return options.Where(option => !option.Value).Select(option => option.Key);
return checkedState.Where(kvp => !kvp.Value).Select(kvp => kvp.Key);
}
}

Expand All @@ -91,10 +93,12 @@ public void AddOption(string option)
throw new ArgumentNullException("option");
}

if (!options.ContainsKey(option))
if (!options.Contains(option))
{
options.Add(option, false);
BlockDefinition.AddCheckBoxListOption(option);
options.Add(option);
rawValueMapping.Add(option);
checkedState.Add(option, false);
BlockDefinition.AddCheckBoxListOption(rawValueMapping.GetRawValue(option), option);
}
}

Expand All @@ -108,27 +112,27 @@ public void Check(string option)
throw new ArgumentNullException("option");
}

if (!options.ContainsKey(option))
if (!options.Contains(option))
{
throw new ArgumentException("CheckboxList does not have option: " + option, option);
}

if (!options[option])
if (!checkedState[option])
{
options[option] = true;
BlockDefinition.InitialValue = String.Join(";", BlockDefinition.InitialValue, option);
checkedState[option] = true;
BlockDefinition.InitialValue = String.Join(";", Checked.Select(x => rawValueMapping.GetRawValue(x)));
}
}

/// <inheritdoc/>
public override void CheckAll()
{
foreach (string option in options.Keys.ToList())
foreach (string option in options.ToList())
{
options[option] = true;
checkedState[option] = true;
}

BlockDefinition.InitialValue = String.Join(";", options.Keys);
BlockDefinition.InitialValue = String.Join(";", options.Select(x => rawValueMapping.GetRawValue(x)));
}

/// <inheritdoc/>
Expand All @@ -153,11 +157,17 @@ public void RemoveOption(string option)

if (options.Remove(option))
{
rawValueMapping.Remove(option);
checkedState.Remove(option);

RecreateUiBlock();
foreach (string optionsKey in options.Keys)
foreach (string optionToAdd in options)
{
BlockDefinition.AddCheckBoxListOption(optionsKey);
BlockDefinition.AddCheckBoxListOption(rawValueMapping.GetRawValue(optionToAdd), optionToAdd);
}

// Update InitialValue to reflect current checked state
BlockDefinition.InitialValue = String.Join(";", Checked.Select(x => rawValueMapping.GetRawValue(x)));
}
}

Expand All @@ -171,24 +181,24 @@ public void Uncheck(string option)
throw new ArgumentNullException("option");
}

if (!options.ContainsKey(option))
if (!options.Contains(option))
{
throw new ArgumentException("CheckboxList does not have option: " + option, option);
}

if (options[option])
if (checkedState[option])
{
options[option] = false;
BlockDefinition.InitialValue = String.Join(";", Checked);
checkedState[option] = false;
BlockDefinition.InitialValue = String.Join(";", Checked.Select(x => rawValueMapping.GetRawValue(x)));
}
}

/// <inheritdoc/>
public override void UncheckAll()
{
foreach (string option in options.Keys.ToList())
foreach (string option in options.ToList())
{
options[option] = false;
checkedState[option] = false;
}

BlockDefinition.InitialValue = null;
Expand All @@ -207,21 +217,22 @@ protected internal override void LoadResult(IUIResults uiResults, ILogger logger
return;
}

var checkedOptions = new HashSet<string>(results.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries));
foreach (string option in options.Keys.ToList())
var rawCheckedOptions = new HashSet<string>(results.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries));
foreach (string option in options.ToList())
{
bool isChecked = checkedOptions.Contains(option);
bool hasChanged = options[option] != isChecked;
var rawValue = rawValueMapping.GetRawValue(option);
bool isChecked = rawCheckedOptions.Contains(rawValue);
bool hasChanged = checkedState[option] != isChecked;

options[option] = isChecked;
checkedState[option] = isChecked;

if (hasChanged && BlockDefinition.WantsOnChange)
{
changedOptions.Add(new ChangedOption(option, isChecked));
}
}

BlockDefinition.InitialValue = String.Join(";", Checked);
BlockDefinition.InitialValue = String.Join(";", Checked.Select(x => rawValueMapping.GetRawValue(x)));
}

/// <inheritdoc />
Expand All @@ -239,6 +250,8 @@ protected internal override void RaiseResultEvents(ILogger logger = null)
private void ClearOptions()
{
options.Clear();
rawValueMapping.Clear();
checkedState.Clear();
RecreateUiBlock();
BlockDefinition.InitialValue = null;
}
Expand Down
24 changes: 20 additions & 4 deletions InteractiveAutomationToolkit/Components/DropDown.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@
using System;
using System.Collections.Generic;
using System.Linq;

using Microsoft.Extensions.Logging;

using Skyline.DataMiner.Utils.InteractiveAutomationScript.Extensions;

/// <summary>
Expand All @@ -12,6 +14,8 @@
public class DropDown : DropDownBase, IDropDown
{
private readonly HashSet<string> options = new HashSet<string>();
private readonly RawValueMapping<string> rawValueMapping = new RawValueMapping<string>();

private bool changed;
private string previous;

Expand Down Expand Up @@ -101,7 +105,9 @@ public void AddOption(string option)
if (!options.Contains(option))
{
options.Add(option);
BlockDefinition.AddDropDownOption(option);
rawValueMapping.Add(option);

BlockDefinition.AddDropDownOption(rawValueMapping.GetRawValue(option), option);
}
}

Expand Down Expand Up @@ -137,10 +143,13 @@ public void RemoveOption(string option)

if (options.Remove(option))
{
rawValueMapping.Remove(option);

RecreateUiBlock();
foreach (string optionToAdd in options)
{
BlockDefinition.AddDropDownOption(optionToAdd);
BlockDefinition.AddDropDownOption(rawValueMapping.GetRawValue(optionToAdd), optionToAdd);

}

if (Selected == option)
Expand All @@ -153,7 +162,13 @@ public void RemoveOption(string option)
/// <inheritdoc />
protected internal override void LoadResult(IUIResults uiResults, ILogger logger = null)
{
string selectedValue = uiResults.GetString(this);
var rawSelectedValue = uiResults.GetString(this);
logger?.Debug(nameof(DropDown), nameof(LoadResult), $"Raw selected value: {rawSelectedValue}");

if (!rawValueMapping.TryGetByRawValue(rawSelectedValue, out var selectedValue))
{
return;
}

logger?.Debug(nameof(DropDown), nameof(LoadResult), $"Selected value: {selectedValue}");

Expand Down Expand Up @@ -181,6 +196,7 @@ protected internal override void RaiseResultEvents(ILogger logger = null)
private void ClearOptions()
{
options.Clear();
rawValueMapping.Clear();
RecreateUiBlock();
}

Expand Down Expand Up @@ -211,4 +227,4 @@ internal DropDownChangedEventArgs(string selected, string previous)
public string Selected { get; private set; }
}
}
}
}
Loading
Loading