public Int32 InsertStep( Step previousStep, String stereotype, UseCase referencedUseCase, DependencyItem.ReferenceType referenceType) { Step step = new Step(); Int32 ret; if(referenceType != DependencyItem.ReferenceType.None) { step.Dependency.Stereotype = stereotype; step.Dependency.PartnerUniqueID = referencedUseCase.UniqueID; step.Dependency.Type = referenceType; step.Description = (step.Dependency.Stereotype != "") ? "<<" + step.Dependency.Stereotype + ">>" : ""; step.Description += " \""; step.Description += referencedUseCase.Name; step.Description += "\""; } if(previousStep.Type == Step.StepType.Default) { step.ID = previousStep.ID; foreach(Step tmpStep in this.steps) { if(tmpStep.ID >= step.ID) { tmpStep.ID += 1; } } } else if(previousStep.Type == Step.StepType.Alternative) { step.Prefix = previousStep.Prefix; if(step.Prefix == String.Empty) { step.Prefix = "A"; } step.ID = previousStep.ID; step.Type = Step.StepType.Alternative; foreach(Step tmpStep in this.steps) { if(tmpStep.ID == step.ID) { if(tmpStep.Prefix != String.Empty && tmpStep.Prefix.CompareTo(step.Prefix) >= 0) { Char nextChar = tmpStep.Prefix[0]; nextChar++; tmpStep.Prefix = new String(nextChar,1); } } } } else if(previousStep.Type == Step.StepType.AlternativeChild) { step.Type = Step.StepType.AlternativeChild; step.ID = previousStep.ID; step.Prefix = previousStep.Prefix; step.ChildID = previousStep.ChildID; foreach(Step tmpStep in this.steps) { if(tmpStep.ID == step.ID && tmpStep.Prefix == step.Prefix) { if(tmpStep.ChildID >= step.ChildID) { tmpStep.ChildID += 1; } } } } int index = this.FindStepIndexByUniqueID(previousStep.UniqueID); this.steps.Insert(index,step); ret = index; return ret; }
public Int32 AddStep( Step previousStep, Step.StepType type, String stereotype, UseCase referencedUseCase, DependencyItem.ReferenceType referenceType) { Step step = new Step(); Int32 index; Int32 ret; if(referenceType != DependencyItem.ReferenceType.None) { step.Dependency.Stereotype = stereotype; step.Dependency.PartnerUniqueID = referencedUseCase.UniqueID; step.Dependency.Type = referenceType; step.Description = (step.Dependency.Stereotype != "") ? "<<" + step.Dependency.Stereotype + ">>" : ""; step.Description += " \""; step.Description += referencedUseCase.Name; step.Description += "\""; } if(previousStep == null) { step.ID = 1; ret = this.steps.Add(step); return ret; } else { switch(type) { case Step.StepType.Default: if(previousStep.Type == Step.StepType.Default) { step.ID = previousStep.ID; index = this.FindStepIndexByUniqueID(previousStep.UniqueID) + 1; while(true) { if(index == this.steps.Count) { previousStep = (Step)this.steps[index - 1]; break; } Step tmpStep = (Step)this.steps[index]; if(tmpStep.ID != step.ID) { previousStep = (Step)this.steps[index - 1]; break; } index += 1; } step.ID = previousStep.ID + 1; foreach(Step tmpStep in this.steps) { if(tmpStep.ID >= step.ID) { tmpStep.ID += 1; } } } else if(previousStep.Type == Step.StepType.Alternative) { step.ID = previousStep.ID; step.Type = Step.StepType.Alternative; index = this.FindStepIndexByUniqueID(previousStep.UniqueID) + 1; while(true) { if(index == this.steps.Count) { previousStep = (Step)this.steps[index - 1]; break; } Step tmpStep = (Step)this.steps[index]; if(tmpStep.ID != step.ID || tmpStep.Prefix == String.Empty) { previousStep = (Step)this.steps[index - 1]; break; } index += 1; } step.Prefix = previousStep.Prefix; if(step.Prefix != String.Empty) { Char nextChar = step.Prefix[0]; nextChar++; step.Prefix = new String(nextChar,1); } else { step.Prefix = "A"; } foreach(Step tmpStep in this.steps) { if(tmpStep.ID == step.ID) { if(tmpStep.Prefix != String.Empty && tmpStep.Prefix.CompareTo(step.Prefix) >= 0) { Char nextChar = tmpStep.Prefix[0]; nextChar++; tmpStep.Prefix = new String(nextChar,1); } } } } else if(previousStep.Type == Step.StepType.AlternativeChild) { step.Type = Step.StepType.AlternativeChild; step.ID = previousStep.ID; step.Prefix = previousStep.Prefix; index = this.FindStepIndexByUniqueID(previousStep.UniqueID) + 1; while(true) { if(index == this.steps.Count) { previousStep = (Step)this.steps[index - 1]; break; } Step tmpStep = (Step)this.steps[index]; if(tmpStep.ID != step.ID || tmpStep.Prefix != step.Prefix) { previousStep = (Step)this.steps[index - 1]; break; } index += 1; } step.Prefix = previousStep.Prefix; step.ChildID = previousStep.ChildID + 1; } break; case Step.StepType.Alternative: if(previousStep.Type == Step.StepType.Default) { step.ID = previousStep.ID; step.Type = Step.StepType.Alternative; index = this.FindStepIndexByUniqueID(previousStep.UniqueID) + 1; while(true) { if(index == this.steps.Count) { previousStep = (Step)this.steps[index - 1]; break; } Step tmpStep = (Step)this.steps[index]; if(tmpStep.ID != step.ID || tmpStep.Prefix == String.Empty) { previousStep = (Step)this.steps[index - 1]; break; } index += 1; } step.Prefix = previousStep.Prefix; if(step.Prefix != String.Empty) { Char nextChar = step.Prefix[0]; nextChar++; step.Prefix = new String(nextChar,1); } else { step.Prefix = "A"; } foreach(Step tmpStep in this.steps) { if(tmpStep.ID == step.ID) { if(tmpStep.Prefix != String.Empty && tmpStep.Prefix.CompareTo(step.Prefix) >= 0) { Char nextChar = tmpStep.Prefix[0]; nextChar++; tmpStep.Prefix = new String(nextChar,1); } } } } else if(previousStep.Type == Step.StepType.Alternative) { step.Type = Step.StepType.AlternativeChild; step.ID = previousStep.ID; step.Prefix = previousStep.Prefix; step.ChildID = 1; } break; } } index = this.FindStepIndexByUniqueID(previousStep.UniqueID) + 1; if(index == this.steps.Count) { ret = this.steps.Add(step); } else { this.steps.Insert(index, step); ret = index; } return ret; }