code: def CollectionItemToAff4Path(item, client_id=None):
    
    if isinstance(item, rdf_flows.GrrMessage):
      client_id = item.source
      item = item.payload
    elif isinstance(item, rdf_flow_objects.FlowResult):
      client_id = item.client_id
      item = item.payload
  
    if not client_id:
      raise ValueError("Could not determine client_id.")
    elif isinstance(client_id, string_types):
      client_id = rdf_client.ClientURN(client_id)
  
    if isinstance(item, rdf_client_fs.StatEntry):
      return item.AFF4Path(client_id)
    elif isinstance(item, rdf_file_finder.FileFinderResult):
      return item.stat_entry.AFF4Path(client_id)
    elif isinstance(item, collectors.ArtifactFilesDownloaderResult):
      if item.HasField("downloaded_file"):
        return item.downloaded_file.AFF4Path(client_id)
  
    raise ItemNotExportableError(item)
docs: Converts given RDFValue to an RDFURN of a file to be downloaded.