func NewTasksResponse(state *dockerstate.DockerTaskEngineState) *TasksResponse {
	allTasks := state.AllTasks()
	taskResponses := make([]*TaskResponse, len(allTasks))
	for ndx, task := range allTasks {
		containerMap, _ := state.ContainerMapByArn(task.Arn)
		taskResponses[ndx] = NewTaskResponse(task, containerMap)
	}

	return &TasksResponse{Tasks: taskResponses}
}
func stateSetupHelper(state *dockerstate.DockerTaskEngineState, tasks []*api.Task) {
	for _, task := range tasks {
		state.AddTask(task)
		for _, container := range task.Containers {
			state.AddContainer(&api.DockerContainer{
				Container:  container,
				DockerId:   "dockerid-" + task.Arn + "-" + container.Name,
				DockerName: "dockername-" + task.Arn + "-" + container.Name,
			}, task)
		}
	}
}
// Creates JSON response and sets the http status code for the task queried.
func createTaskJSONResponse(task *api.Task, found bool, resourceId string, state *dockerstate.DockerTaskEngineState) ([]byte, int) {
	var responseJSON []byte
	status := statusOK
	if found {
		containerMap, _ := state.ContainerMapByArn(task.Arn)
		responseJSON, _ = json.Marshal(NewTaskResponse(task, containerMap))
	} else {
		log.Warn("Could not find requsted resource: " + resourceId)
		responseJSON, _ = json.Marshal(&TaskResponse{})
		status = statusBadRequest
	}
	return responseJSON, status
}
// DockerStatesEqual determines if the two given dockerstates are equal, for
// equal meaning they have the same tasks and their tasks are equal
func DockerStatesEqual(lhs, rhs *dockerstate.DockerTaskEngineState) bool {
	// Simple equality check; just verify that all tasks are equal
	lhsTasks := lhs.AllTasks()
	rhsTasks := rhs.AllTasks()
	if len(lhsTasks) != len(rhsTasks) {
		return false
	}

	for _, left := range lhsTasks {
		right, ok := rhs.TaskByArn(left.Arn)
		if !ok {
			return false
		}
		if !api_testutils.TasksEqual(left, right) {
			return false
		}
	}
	return true
}