protected function initFromArray($data)
    {
        if (! isset($data['id'])) {
            throw new DataSift_Exception_APIError('No playback ID in the response');
        }
        if ($data['id'] != $this->_playback_id) {
            throw new DataSift_Exception_APIError('Incorrect playback ID in the response');
        }

        if (! isset($data['definition_id'])) {
            throw new DataSift_Exception_APIError('No definition hash in the response');
        }
        $this->_hash = $data['definition_id'];

        if (! isset($data['name'])) {
            throw new DataSift_Exception_APIError('No name in the response');
        }
        $this->_name = $data['name'];

        if (! isset($data['start'])) {
            throw new DataSift_Exception_APIError('No start timestamp in the response');
        }
        $this->_start = $data['start'];

        if (! isset($data['end'])) {
            throw new DataSift_Exception_APIError('No end timestamp in the response');
        }
        $this->_end = $data['end'];

        if (! isset($data['created_at'])) {
            throw new DataSift_Exception_APIError('No created at timestamp in the response');
        }
        $this->_created_at = $data['created_at'];

        if (! isset($data['status'])) {
            throw new DataSift_Exception_APIError('No status in the response');
        }
        $this->_status = $data['status'];

        if (! isset($data['progress'])) {
            throw new DataSift_Exception_APIError('No progress in the response');
        }
        $this->_progress = $data['progress'];

        if (! isset($data['sources'])) {
            throw new DataSift_Exception_APIError('No sources in the response');
        }
        $this->_sources = $data['sources'];

        if (! isset($data['sample'])) {
            throw new DataSift_Exception_APIError('No smaple in the response');
        }
        $this->_sample = $data['sample'];

        if (isset($data['estimated_completion'])) {
            $this->_estimated_completion = $data['estimated_completion'];
        }

        if ($this->_status == 'deleted') {
            $this->_deleted = true;
        }
    }