/** * @param array $taskListEntryData * @return TaskListEntry */ public static function fromArray(array $taskListEntryData) { Assertion::keyExists($taskListEntryData, 'taskListPosition'); Assertion::keyExists($taskListEntryData, 'taskData'); Assertion::keyExists($taskListEntryData, 'taskClass'); Assertion::keyExists($taskListEntryData, 'status'); Assertion::keyExists($taskListEntryData, 'startedOn'); Assertion::keyExists($taskListEntryData, 'finishedOn'); Assertion::keyExists($taskListEntryData, 'log'); Assertion::inArray($taskListEntryData['status'], [self::STATUS_NOT_STARTED, self::STATUS_IN_PROGRESS, self::STATUS_DONE, self::STATUS_FAILED]); $taskListPosition = TaskListPosition::fromString($taskListEntryData['taskListPosition']); $taskClass = $taskListEntryData['taskClass']; $task = $taskClass::reconstituteFromArray($taskListEntryData['taskData']); $startedOn = is_null($taskListEntryData['startedOn']) ? null : new \DateTime($taskListEntryData['startedOn']); $finishedOn = is_null($taskListEntryData['finishedOn']) ? null : new \DateTime($taskListEntryData['finishedOn']); $instance = new self($taskListPosition, $task); $instance->status = $taskListEntryData['status']; $instance->startedOn = $startedOn; $instance->finishedOn = $finishedOn; $instance->setLogFromArray($taskListEntryData['log']); return $instance; }