public function add($source, $fileName, $parent)
    {
        if (! \tao_helpers_File::securityCheck($fileName, true)) {
            throw new \common_Exception('Unsecured filename "'.$fileName.'"');
        }

        if (($resource = fopen($source, 'r')) === false) {
            throw new \common_Exception('Unable to read content of file ("' . $source . '")');
        }

        $file = $this->getItemDirectory()->getDirectory($parent)->getFile($fileName);
        $writeSuccess = $file->put($resource);
        fclose($resource);

        if (! $writeSuccess) {
            throw new \common_Exception('Unable to write file ("' . $fileName . '")');
        }

        return $this->getInfoFromFile($file);
    }