Skip to content

Commit 8aadc89

Browse files
committed
Update after merge request feedback
- create an additional method to check connactions and following steps - reduce unnecessary variables - changing the sequence - rename methods in the EqualTest class
1 parent 28eaa67 commit 8aadc89

File tree

3 files changed

+77
-82
lines changed

3 files changed

+77
-82
lines changed

src/Moryx/Workflows/Implementation/Workplan.cs

Lines changed: 64 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33

44
using System.Collections.Generic;
55
using System.Runtime.Serialization;
6-
using System.Linq;
7-
using System.ComponentModel;
6+
using System.Linq;
7+
using System.Runtime.InteropServices.ComTypes;
88

99
namespace Moryx.Workplans
1010
{
@@ -95,85 +95,92 @@ public static Workplan Restore(List<IConnector> connectors, List<IWorkplanStep>
9595
return new Workplan(connectors, steps);
9696
}
9797

98-
/// <summary>
99-
/// Compare two workplans
100-
/// </summary>
101-
/// <param name="obj"></param>
102-
/// <returns></returns>
103-
public override bool Equals(object obj)
98+
public static bool noteSameFollowringSteps(Workplan workplan, Workplan newWorkplan ,IWorkplanStep step, IWorkplanStep newStep, List<IWorkplanStep> needToCheck, List<IWorkplanStep> newNeedToCheck, List<IWorkplanStep> isChecked)
10499
{
105-
106-
if (!(obj is Workplan))
107-
{
108-
return false;
109-
}
110-
Workplan newPlan = (Workplan)obj;
111-
112-
var start = this.Connectors.First(x => x.Name.Equals("Start"));
113-
var end = this.Connectors.First(x => x.Name.Equals("End"));
114-
var failed = this.Connectors.First(x => x.Name.Equals("Failed"));
115-
116-
var newStart = newPlan.Connectors.First(x => x.Name.Equals("Start"));
117-
var newEnd = newPlan.Connectors.First(x => x.Name.Equals("End"));
118-
var newFailed = newPlan.Connectors.First(x => x.Name.Equals("Failed"));
119-
120-
var step = this.Steps.First(x => x.Inputs.Any(y => y.Equals(start)));
121-
var newStep = newPlan.Steps.First(x => x.Inputs.Any(y => y.Equals(newStart)));
122-
123-
List<IWorkplanStep> needToCheck = new List<IWorkplanStep>();
124-
List<IWorkplanStep> newNeedToCheck = new List<IWorkplanStep>();
125-
126-
List<IWorkplanStep> check = new List<IWorkplanStep>();
127-
128-
needToCheck.Add(step);
129-
newNeedToCheck.Add(newStep);
130-
131-
while (needToCheck.Count != 0 && newNeedToCheck.Count != 0)
100+
101+
for (int a = 0; a < step.Outputs.Length; a++)
132102
{
103+
var connector = step.Outputs[a];
104+
var newConnector = newStep.Outputs[a];
133105

134-
135-
for (int a = 0; a < step.Outputs.Length; a++)
106+
if (connector.Id == newConnector.Id)
136107
{
137108

138-
var connector = step.Outputs[a];
139-
var newConnector = newStep.Outputs[a];
140-
141-
bool isNotEndConnector = (connector != end && newConnector != newEnd);
142-
bool isNotFailedConnector = (connector != failed && newConnector != newFailed);
109+
bool isNotEndConnector = !(connector.Classification.Equals(NodeClassification.End)) && !(newConnector.Classification.Equals(NodeClassification.End));
110+
bool isNotFailedConnector = !(connector.Classification.Equals(NodeClassification.Failed)) && !(newConnector.Classification.Equals(NodeClassification.Failed));
143111

144112
if (isNotEndConnector && isNotFailedConnector)
145113
{
146-
var follower = this.Steps.FirstOrDefault(x => x.Inputs.Any(y => y.Equals(connector)));
147-
var newFollower = newPlan.Steps.FirstOrDefault(x => x.Inputs.Any(y => y.Equals(newConnector)));
114+
var follower = workplan.Steps.FirstOrDefault(x => x.Inputs.Any(y => y.Equals(connector)));
115+
var newFollower = newWorkplan.Steps.FirstOrDefault(x => x.Inputs.Any(y => y.Equals(newConnector)));
116+
117+
bool isAlreadyChecked = (isChecked.Contains(follower) || isChecked.Contains(newFollower));
148118

149-
bool isAlreadyChecked = (check.Contains(follower) || check.Contains(newFollower));
150-
151119
if (!(isAlreadyChecked))
152120
{
153121
needToCheck.Add(follower);
154122
newNeedToCheck.Add(newFollower);
155123
}
156124
}
157-
else if (connector.Classification != newConnector.Classification)
158-
{
159-
return false;
160-
}
161125
}
126+
else
127+
{
128+
return false;
129+
}
130+
}
131+
return true;
132+
}
133+
134+
/// <summary>
135+
/// Compare two workplans
136+
/// </summary>
137+
/// <param name="workplan"></param>
138+
/// <param name="newWorkplan"></param>
139+
/// <returns></returns>
140+
public static bool Equals(Workplan workplan, Workplan newWorkplan)
141+
{
142+
143+
//var start = workplan.Connectors.First(x => x.Classification.Equals(NodeClassification.Start));
144+
//var end = workplan.Connectors.First(x => x.Classification.Equals(NodeClassification.End));
145+
//var failed = workplan.Connectors.First(x => x.Classification.Equals(NodeClassification.Failed));
146+
147+
//var newStart = newWorkplan.Connectors.First(x => x.Classification.Equals(NodeClassification.Start));
148+
//var newEnd = newWorkplan.Connectors.First(x => x.Classification.Equals(NodeClassification.End));
149+
//var newFailed = newWorkplan.Connectors.First(x => x.Classification.Equals(NodeClassification.Failed));
162150

151+
var step = workplan.Steps.First(x => x.Inputs.Any(y => y.Classification.Equals(NodeClassification.Start)));
152+
var newStep = newWorkplan.Steps.First(x => x.Inputs.Any(y => y.Classification.Equals(NodeClassification.Start)));
163153

154+
List<IWorkplanStep> needToCheck = new List<IWorkplanStep>() { step };
155+
List<IWorkplanStep> newNeedToCheck = new List<IWorkplanStep>() { newStep };
156+
157+
List<IWorkplanStep> isChecked = new List<IWorkplanStep>();
158+
159+
while (needToCheck.Count != 0 && newNeedToCheck.Count != 0)
160+
{
161+
//noteAllFollowringSteps(workplan, newWorkplan, step, newStep, needToCheck, newNeedToCheck, isChecked);
164162

165163
bool isSameStep = (step.GetType() == newStep.GetType());
166164
if (isSameStep)
167165
{
168-
needToCheck.Remove(step);
169-
newNeedToCheck.Remove(newStep);
170166

171-
check.Add(step);
167+
bool sameConnections = noteSameFollowringSteps(workplan, newWorkplan, step, newStep, needToCheck, newNeedToCheck, isChecked);
168+
if (sameConnections)
169+
{
170+
needToCheck.Remove(step);
171+
newNeedToCheck.Remove(newStep);
172+
173+
isChecked.Add(step);
172174

173-
if (needToCheck.Count != 0 && newNeedToCheck.Count != 0)
175+
if (needToCheck.Count != 0 && newNeedToCheck.Count != 0)
176+
{
177+
step = needToCheck[0];
178+
newStep = newNeedToCheck[0];
179+
}
180+
}
181+
else
174182
{
175-
step = needToCheck[0];
176-
newStep = newNeedToCheck[0];
183+
return false;
177184
}
178185
}
179186
else
@@ -184,8 +191,7 @@ public override bool Equals(object obj)
184191

185192
return true;
186193
}
187-
188-
194+
189195

190196
}
191197
}
Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,11 @@
11
using Moryx.AbstractionLayer;
22
using Moryx.AbstractionLayer.Capabilities;
3-
using System;
4-
using System.Collections.Generic;
5-
using System.Linq;
6-
using System.Text;
7-
using System.Threading.Tasks;
83

94
namespace Moryx.Tests.Workplans.Dummies
105
{
116
[ActivityResults(typeof(DefaultActivityResult))]
127
public class AssemblingActivity : Activity<AssemblingParameters>
138
{
14-
15-
169
public override ProcessRequirement ProcessRequirement => ProcessRequirement.NotRequired;
1710

1811
public override ICapabilities RequiredCapabilities => new AssemblingCapabilities();
@@ -26,9 +19,5 @@ protected override ActivityResult CreateFailureResult()
2619
{
2720
return ActivityResult.Create(DefaultActivityResult.Failed);
2821
}
29-
30-
31-
32-
3322
}
3423
}

src/Tests/Moryx.Tests/Workplans/EqualTest.cs

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public class EqualTest
1616
private Workplan fifthWorkplan;
1717
private Workplan sixthWorkplan;
1818

19-
public Workplan CreateFirstWorkplan()
19+
public Workplan CreateSimpleWorkplan()
2020
{
2121
var plan = new Workplan();
2222

@@ -38,7 +38,7 @@ public Workplan CreateFirstWorkplan()
3838
return plan;
3939
}
4040

41-
public Workplan CreateSecondWorkplan()
41+
public Workplan CreateWorkplanWithLoop()
4242
{
4343
var plan = new Workplan();
4444

@@ -58,7 +58,7 @@ public Workplan CreateSecondWorkplan()
5858
return plan;
5959
}
6060

61-
public Workplan CreateThirdWorkplan()
61+
public Workplan CreateWorkplanWithLoopsAndBranches()
6262
{
6363
var plan = new Workplan();
6464

@@ -85,41 +85,41 @@ public Workplan CreateThirdWorkplan()
8585
[SetUp]
8686
public void SetUp()
8787
{
88-
firstWorkplan = CreateFirstWorkplan();
89-
secondWorkplan = CreateFirstWorkplan();
88+
firstWorkplan = CreateSimpleWorkplan();
89+
secondWorkplan = CreateSimpleWorkplan();
9090

91-
thirdWorkplan = CreateSecondWorkplan();
92-
fourthWorkplan = CreateSecondWorkplan();
91+
thirdWorkplan = CreateWorkplanWithLoop();
92+
fourthWorkplan = CreateWorkplanWithLoop();
9393

94-
fifthWorkplan = CreateThirdWorkplan();
95-
sixthWorkplan = CreateThirdWorkplan();
94+
fifthWorkplan = CreateWorkplanWithLoopsAndBranches();
95+
sixthWorkplan = CreateWorkplanWithLoopsAndBranches();
9696
}
9797

9898
[Test]
9999
public void TestEqualWorkplans()
100100
{
101-
bool result = firstWorkplan.Equals(secondWorkplan);
101+
bool result = Workplan.Equals(firstWorkplan, secondWorkplan);
102102
Assert.That(result, Is.True);
103103
}
104104

105105
[Test]
106106
public void TestEqualWorkplansSimpleLoop()
107107
{
108-
bool result = thirdWorkplan.Equals(fourthWorkplan);
108+
bool result = Workplan.Equals(thirdWorkplan, fourthWorkplan);
109109
Assert.That(result, Is.True);
110110
}
111111

112112
[Test]
113113
public void TestEqualWorkplansDoubleLoop()
114114
{
115-
bool result = fifthWorkplan.Equals(sixthWorkplan);
115+
bool result = Workplan.Equals(fifthWorkplan, sixthWorkplan);
116116
Assert.That(result, Is.True);
117117
}
118118

119119
[Test]
120120
public void TestUnequalWorkplans()
121121
{
122-
bool r = thirdWorkplan.Equals(fifthWorkplan);
122+
bool r = Workplan.Equals(firstWorkplan, sixthWorkplan);
123123
Assert.That(r, Is.False);
124124
}
125125
}

0 commit comments

Comments
 (0)