'Each individual collector will call back into here.
Args:
responses: Responses from the collection.
Raises:
artifact_utils.ArtifactDefinitionError: On bad definition.
artifact_utils.ArtifactProcessingError: On failure to process.'

@flow.StateHandler()
def ProcessCollected(self, responses):

    flow_name = self.__class__.__name__
    artifact_name = responses.request_data['artifact_name']
    source = responses.request_data.GetItem('source', None)
    if responses.success:
        self.Log('Artifact    data    collection    %s    completed    successfully    in    flow    %s    with    %d    responses', artifact_name, flow_name, len(responses))
    else:
        self.Log('Artifact    %s    data    collection    failed.    Status:    %s.', artifact_name, responses.status)
        if (not self.CallFallback(artifact_name, responses.request_data)):
            self.state.failed_count += 1
            self.state.artifacts_failed.append(artifact_name)
        return
    output_collection_map = {}
    aff4_output_map = {}
    processors = parsers.Parser.GetClassesByArtifact(artifact_name)
    saved_responses = {}
    for response in responses:
        if (processors and self.args.apply_parsers):
            for processor in processors:
                processor_obj = processor()
                if processor_obj.process_together:
                    saved_responses.setdefault(processor.__name__, []).append(response)
                else:
                    self._ParseResponses(processor_obj, response, responses, artifact_name, source, aff4_output_map, output_collection_map)
        else:
            self._ParseResponses(None, response, responses, artifact_name, source, aff4_output_map, output_collection_map)
    for (processor_name, responses_list) in saved_responses.items():
        processor_obj = parsers.Parser.classes[processor_name]()
        self._ParseResponses(processor_obj, responses_list, responses, artifact_name, source, aff4_output_map, output_collection_map)
    if self.args.split_output_by_artifact:
        self._FinalizeSplitCollection(output_collection_map)
    if self.args.store_results_in_aff4:
        self._FinalizeMappedAFF4Locations(artifact_name, aff4_output_map)
    if self.state.client_anomalies:
        with data_store.DB.GetMutationPool(token=self.token) as mutation_pool:
            collection_urn = aff4_grr.VFSGRRClient.AnomalyCollectionURNForCID(self.client_id)
            for anomaly_value in self.state.client_anomalies:
                grr_collections.AnomalyCollection.StaticAdd(collection_urn, self.token, anomaly_value, mutation_pool=mutation_pool)
