Skip to content
Snippets Groups Projects
Commit bdcd6e09 authored by Tobias's avatar Tobias
Browse files

Outputs are not set in config opmode, but can be set all the time,

DeselectOperationMode does not throw if no opmode is selected
parent 004e3651
No related branches found
No related tags found
No related merge requests found
......@@ -19,7 +19,6 @@ namespace ControlComponents.Core
{
if (AllNeededOutputsArePresent())
{
ConfigureOutputsAtExternalCC();
// By selecting the ConfigOperationMode, simply the same OperationMode is selected on the external cc
externalOperationMode = _externalCC.SelectOperationMode(OpModeName);
_externalCC.ExecutionStateChanged += ExecutionStateChanged;
......@@ -32,37 +31,16 @@ namespace ControlComponents.Core
protected override async Task Deselected()
{
DeconfigureOutputsAtExternalCC();
_externalCC.ExecutionStateChanged -= ExecutionStateChanged;
// No need to call DeselectOperationMode, because all outputs are deselected if this opmode is deselected
await externalOperationMode;
}
private void DeconfigureOutputsAtExternalCC()
{
foreach (var role in _externalCC.Roles)
{
_externalCC.ClearOutput(role);
}
}
private bool AllNeededOutputsArePresent()
{
return _externalCC.Roles.All(role => this.outputs.Keys.Contains(role));
}
private void ConfigureOutputsAtExternalCC()
{
foreach (var role in _externalCC.Roles)
{
// TODO this can be used for READ interfaces to access target component directly
// _externalCC.ChangeOutput(role, this.outputs[role].ComponentName);
_externalCC.ChangeOutput(role, this.execution.ComponentName);
}
}
private void ExecutionStateChanged(object sender, ExecutionStateEventArgs e)
{
base.execution.SetState(e.ExecutionState);
......
......@@ -204,7 +204,7 @@ namespace ControlComponents.Core
{
if (operationMode == null)
{
throw new InvalidOperationException("No operation mode selected");
await Task.CompletedTask;
}
else
{
......@@ -223,12 +223,12 @@ namespace ControlComponents.Core
}
}
public bool ChangeOutput(string role, string id)
public virtual bool ChangeOutput(string role, string id)
{
return orderOutputs[role].ChangeComponent(id);
}
public void ClearOutput(string role)
public virtual void ClearOutput(string role)
{
orderOutputs[role].ClearComponent();
}
......
......@@ -118,9 +118,9 @@ namespace ControlComponents.Core.Tests
}
[Test]
public void Given_Stopped_When_Deselect_Then_Throw()
public void Given_NoOperationModeSelected_When_Deselect_Then_DoNotThrow()
{
Assert.ThrowsAsync<InvalidOperationException>(() => cc.DeselectOperationMode());
Assert.DoesNotThrowAsync(() => cc.DeselectOperationMode());
}
[Test]
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment