public void VerifyThatContainedGroupsReturnsExpectedResult() { var topGroup = new RequirementsGroup(); var group_1 = new RequirementsGroup(); var group_2 = new RequirementsGroup(); var group_1_1 = new RequirementsGroup(); var group_1_2 = new RequirementsGroup(); topGroup.Group.Add(group_1); topGroup.Group.Add(group_2); group_1.Group.Add(group_1_1); group_1.Group.Add(group_1_2); var containedGroups = new List <RequirementsGroup>(); containedGroups.Add(group_1); containedGroups.Add(group_2); containedGroups.Add(group_1_1); containedGroups.Add(group_1_2); var actualContainedGroups = topGroup.ContainedGroup().ToList(); CollectionAssert.AreEquivalent(containedGroups, actualContainedGroups); }
/// <summary> /// Performs the drop operation for a <see cref="RequirementsGroup"/> payload /// </summary> /// <param name="requirementGroupPayload"> /// The <see cref="RequirementsGroup"/> that was dropped into this <see cref="RequirementsSpecification"/> /// </param> private async Task OnRequirementGroupDrop(RequirementsGroup requirementGroupPayload) { var context = TransactionContextResolver.ResolveContext(this.Thing); var transaction = new ThingTransaction(context); var previousRequirementSpec = requirementGroupPayload.GetContainerOfType <RequirementsSpecification>(); // Add the RequirementGroup to the RequirementsSpecification represented by this RowViewModel var requirementsSpecificationClone = this.Thing.Clone(false); requirementsSpecificationClone.Group.Add(requirementGroupPayload); transaction.CreateOrUpdate(requirementsSpecificationClone); if (previousRequirementSpec != this.Thing) { // Update the requirements that were inside any of the groups that have been dropped var previousRequirementSpecRow = ((RequirementsBrowserViewModel)this.ContainerViewModel).ReqSpecificationRows.Single(x => x.Thing == previousRequirementSpec); var droppedRequirementGroups = requirementGroupPayload.ContainedGroup().ToList(); droppedRequirementGroups.Add(requirementGroupPayload); foreach (var keyValuePair in previousRequirementSpecRow.requirementContainerGroupCache) { if (!droppedRequirementGroups.Contains(keyValuePair.Value)) { continue; } var requirementClone = keyValuePair.Key.Clone(false); requirementClone.Group = null; transaction.CreateOrUpdate(requirementClone); } } await this.DalWrite(transaction); }
/// <summary> /// Performs the drop operation for a <see cref="RequirementsGroup"/> payload /// </summary> /// <param name="requirementGroupPayload"> /// The <see cref="RequirementsGroup"/> that was dropped into this <see cref="RequirementsSpecification"/> /// </param> private async Task OnRequirementGroupDrop(RequirementsGroup requirementGroupPayload) { var firstRow = this.ContainedRows.OfType <RequirementsGroupRowViewModel>().FirstOrDefault(); if (firstRow == null) { var context = TransactionContextResolver.ResolveContext(this.Thing); var transaction = new ThingTransaction(context); var previousRequirementSpec = requirementGroupPayload.GetContainerOfType <RequirementsSpecification>(); // Add the RequirementGroup to the RequirementsSpecification represented by this RowViewModel var requirementsSpecificationClone = this.Thing.Clone(false); requirementsSpecificationClone.Group.Add(requirementGroupPayload); transaction.CreateOrUpdate(requirementsSpecificationClone); if (previousRequirementSpec != this.Thing) { // Update the requirements that were inside any of the groups that have been dropped var previousRequirementSpecRow = (RequirementsSpecificationRowViewModel)((RequirementsBrowserViewModel)this.ContainerViewModel) .ReqSpecificationRows.Single(x => x.Thing == previousRequirementSpec); var droppedRequirementGroups = requirementGroupPayload.ContainedGroup().ToList(); droppedRequirementGroups.Add(requirementGroupPayload); foreach (var keyValuePair in previousRequirementSpecRow.requirementContainerGroupCache) { if (!droppedRequirementGroups.Contains(keyValuePair.Value)) { continue; } var requirementClone = keyValuePair.Key.Clone(false); requirementClone.Group = null; transaction.CreateOrUpdate(requirementClone); } } await this.DalWrite(transaction); } else { // insert before first var model = (EngineeringModel)this.Thing.TopContainer; var orderPt = OrderHandlerService.GetOrderParameterType(model); if (orderPt == null) { return; } var orderService = new RequirementsGroupOrderHandlerService(this.Session, orderPt); var transaction = orderService.Insert(requirementGroupPayload, firstRow.Thing, InsertKind.InsertBefore); await this.Session.Write(transaction.FinalizeTransaction()); } }