public Task <PhysicalResponse> Handle(FormType formType, string formKey, GraphNode <Key, FormNode> node) { var summaryFormNode = node.AssertType <TaskSummaryFormNode>(); var postTaskNode = node.Neighbors.FindByKey(Key.ForPostTaskPage(summaryFormNode.TaskId)); var taskList = postTaskNode.Neighbors.FindByKey(Key.ForTaskList()); var taskRouter = taskList.Neighbors.FindByKey(Key.ForDecisionTaskRouter(summaryFormNode.TaskId)).AssertType <TaskRouterFormNode>(); var taskItemRouter = node.Neighbors.First(GraphNodePredicates.IsTaskItemRouterNode); var taskItemIds = taskRouter.TaskItemIds.OrderBy(x => x).ToList(); var taskItemRouterValue = taskItemRouter.AssertType <TaskItemRouterFormNode>(); var repeatIndex = taskItemIds.IndexOf(taskItemRouterValue.RepeatIndex); var staticSummaryPage = _staticFormProvider.GetPage(formType, StaticKey.ForTaskSummary(summaryFormNode.TaskId)) as SummaryPage; var task = _staticFormProvider.GetTask(formType, StaticKey.ForTaskNode(summaryFormNode.TaskId)); var taskItemGroup = _summaryService.GetTaskItemSummary(taskItemRouter, task); var flattenedTaskGroupings = taskItemGroup.FlattenTaskGroupings(); return(Task.FromResult(new TaskSummaryResponse { Page = staticSummaryPage, NextNodeId = postTaskNode.Key.Value, TaskGroupings = flattenedTaskGroupings, } as PhysicalResponse)); }