public void RepairThreat(IPlan plan, ThreatenedLinkFlaw tclf) { var cl = tclf.causallink; var threat = tclf.threatener; if (threat is CompositePlanStep cps) { if (!plan.Orderings.IsPath(cps.InitialStep, cl.Tail)) { var promote = plan.Clone() as IPlan; promote.ID += "pc"; if (cl.Tail.Name.Equals("DummyInit")) { promote.Orderings.Insert(cl.Tail.GoalCndt, cps.InitialStep); } promote.Orderings.Insert(cl.Tail, cps.InitialStep); Insert(promote); } if (!plan.Orderings.IsPath(cl.Head, cps.GoalStep)) { var demote = plan.Clone() as IPlan; demote.ID += "dc"; if (cl.Head.Name.Equals("DummyGoal")) { demote.Orderings.Insert(cps.GoalStep, cl.Head.InitCndt); } demote.Orderings.Insert(cps.GoalStep, cl.Head); Insert(demote); } } else { // Promote if (!plan.Orderings.IsPath(threat, cl.Tail)) { var promote = plan.Clone() as IPlan; promote.ID += "p"; if (cl.Tail.Name.Equals("DummyInit")) { promote.Orderings.Insert(cl.Tail.GoalCndt, threat); } promote.Orderings.Insert(cl.Tail, threat); Insert(promote); } // Demote if (!plan.Orderings.IsPath(cl.Head, threat)) { var demote = plan.Clone() as IPlan; demote.ID += "d"; if (cl.Head.Name.Equals("DummyGoal")) { demote.Orderings.Insert(threat, cl.Head.InitCndt); } demote.Orderings.Insert(threat, cl.Head); Insert(demote); } } }
public void RepairThreat(IPlan plan, ThreatenedLinkFlaw tclf) { var cl = tclf.causallink; var threat = tclf.threatener; // Promote if (!plan.Orderings.IsPath(threat, cl.Tail)) { var promote = plan.Clone() as IPlan; promote.Orderings.Insert(cl.Tail, threat); Insert(promote); } // Demote if (!plan.Orderings.IsPath(cl.Head, threat)) { var demote = plan.Clone() as IPlan; demote.Orderings.Insert(threat, cl.Head); Insert(demote); } }
public new void RepairThreat(IPlan plan, ThreatenedLinkFlaw tclf) { var cl = tclf.causallink; var threat = tclf.threatener; if (threat is CompositeSchedulePlanStep cps) { if (!plan.Orderings.IsPath(cps.InitialStep, cl.Tail)) { var promote = plan.Clone() as IPlan; promote.ID += "p"; if (cl.Tail.Name.Equals("DummyInit")) { promote.Orderings.Insert(cl.Tail.GoalCndt, cps.InitialStep); } promote.Orderings.Insert(cl.Tail, cps.InitialStep); // because no guaranteed ordering between head and tail promote.Orderings.Insert(cl.Head, cps.InitialStep); //promote.ID += string.Format("(^Opc[{0},{1}])", cl.Tail.ID, cps.InitialStep.ID); Insert(promote); } if (!plan.Orderings.IsPath(cl.Head, cps.GoalStep)) { var demote = plan.Clone() as IPlan; demote.ID += "d"; if (cl.Head.Name.Equals("DummyGoal")) { demote.Orderings.Insert(cps.GoalStep, cl.Head.InitCndt); } demote.Orderings.Insert(cps.GoalStep, cl.Head); // because no guaranteed ordering between head and tail demote.Orderings.Insert(cps.GoalStep, cl.Tail); //demote.ID += string.Format("(^Odc[{0},{1}])", cps.GoalStep.ID, cl.Head.ID); Insert(demote); } } else { // Promote if (!plan.Orderings.IsPath(threat, cl.Tail)) { var promote = plan.Clone() as IPlan; promote.ID += "p"; if (cl.Tail.Name.Equals("DummyInit")) { promote.Orderings.Insert(cl.Tail.GoalCndt, threat); } promote.Orderings.Insert(cl.Tail, threat); //promote.ID += string.Format("(^Op[{0},{1}])", cl.Tail.ID, threat.ID); Insert(promote); } // Demote if (!plan.Orderings.IsPath(cl.Head, threat)) { var demote = plan.Clone() as IPlan; demote.ID += "d"; if (cl.Head.Name.Equals("DummyGoal")) { demote.Orderings.Insert(threat, cl.Head.InitCndt); } demote.Orderings.Insert(threat, cl.Head); //demote.Orderings.Insert(threat, cl.Tail); //demote.ID += string.Format("(^Odp[{0},{1}])", threat.ID, cl.Head); Insert(demote); } } }