Should've posted this earlier.
Here's a sterilised version of what I ended up creating. Be warned this sterilised version hasn't been tested - use at own risk.
private void insertBasicPath(string name)
{
var scenario = (Scenario)_selectedUseCase.Scenarios.AddNew(name, "Basic Path");
scenario.Update();
}
private void insertBasicPathStep(Scenario scenario, int position, string text)
{
ScenarioStep step;
if (text.ToUpper().StartsWith("ACTOR"))
{
step =
(ScenarioStep)
scenario.Steps.AddNew(text.Trim(), "1");
}
else
{
step =
(ScenarioStep)
scenario.Steps.AddNew(text.Trim(), "0");
}
step.Pos = position;
step.Update();
scenario.Update();
scenario.Steps.Refresh();
}
private void insertConstraint(string text, string type)
{
var constraint = (EA.Constraint)_selectedUseCase.Constraints.AddNew(text, type);
constraint.Update();
}
private List<Message> insertAlternateCourse(string name, List<string> steps, short varies, short? rejoins)
{
var messages = new List<Message>();
_selectedUseCase.Scenarios.Refresh();
_selectedUseCase.Update();
var scenario = (Scenario) _selectedUseCase.Scenarios.AddNew(name, "Alternate");
scenario.Update();
_selectedUseCase.Scenarios.Refresh();
// create the varies and joins!
Scenario basicPath =
_selectedUseCase.Scenarios.Cast<Scenario>().FirstOrDefault(
thisScenario => thisScenario.Name == "Basic Path");
if (basicPath == null)
{
messages.Add(new WarningMessage("Unable to find basic path"));
return messages;
}
// varies from
short variesStep = varies;
if (variesStep <= basicPath.Steps.Count)
{
var basicPathVariesStep = (ScenarioStep) basicPath.Steps.GetAt(varies);
var extension =
(ScenarioExtension)
basicPathVariesStep.Extensions.AddNew(scenario.Name, scenario.ScenarioGUID);
//rejoins at
if (!rejoins.HasValue)
{
extension.Join = "End";
}
else
{
var basicPathJoinStep = (ScenarioStep) basicPath.Steps.GetAt(rejoins.Value);
extension.Join = basicPathJoinStep.StepGUID;
}
extension.Update();
basicPath.Update();
}
else
{
messages.Add(
new ErrorMessage("Step " + variesStep +
" does not exist in the basic flow. Alternate course not created for '" +
name + "'"));
}
var stepPos = 1;
foreach (var step in steps)
{
var scenarioStep =
(ScenarioStep)
scenario.Steps.AddNew(step, "System");
scenarioStep.Pos = stepPos;
scenarioStep.Update();
stepPos++;
}
scenario.Update();
return messages;
}