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));
        }