my ($self, $source_ids, $dbi, $xref, @source_ids_skip) = @_;
$source_ids = [$source_ids] unless ref $source_ids eq 'ARRAY';
my @matching_source_id_dependents;
my @other_dependents;
for my $dependent_xref (@{$xref->{DEPENDENT_XREFS} || []}){
my $source_id_here = $dependent_xref->{SOURCE_ID};
if(grep {$_ == $source_id_here } @$source_ids
and $self->get_xref($dependent_xref->{ACCESSION}, $dependent_xref->{SOURCE_ID}, $xref->{SPECIES_ID})){
$dependent_xref->{SPECIES_ID} = $xref->{SPECIES_ID};
push @matching_source_id_dependents, $dependent_xref;
} elsif (grep {$_ == $source_id_here} @source_ids_skip){
#skip
} else {
push @other_dependents, $dependent_xref;
}
}
my @result;
for my $matching_source_id_dependent (@matching_source_id_dependents) {
my $source_id = $matching_source_id_dependent->{SOURCE_ID};
my $xref_as_dependent_here = {
%$xref, INFO_TYPE => "DEPENDENT",
LINKAGE_SOURCE_ID => $source_id,
DEPENDENT_XREFS => undef,
};
my @dependents_here = ({
%$xref, INFO_TYPE => "DEPENDENT",
LINKAGE_SOURCE_ID => $source_id,
DEPENDENT_XREFS => undef,
});
for my $d (@other_dependents){
push @dependents_here, {
%$d, INFO_TYPE => "DEPENDENT", LINKAGE_SOURCE_ID => $source_id,
};
}
push @result, {
%$matching_source_id_dependent,
LABEL=>undef, INFO_TYPE => "MISC",
DEPENDENT_XREFS =>\@dependents_here,
};
}
return @result;
}