annotate variant_effect_predictor/Bio/EnsEMBL/Funcgen/Storable.pm @ 3:d30fa12e4cc5 default tip

Merge heads 2:a5976b2dce6f and 1:09613ce8151e which were created as a result of a recently fixed bug.
author devteam <devteam@galaxyproject.org>
date Mon, 13 Jan 2014 10:38:30 -0500
parents 1f6dce3d34e0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2 # Ensembl module for Bio::EnsEMBL::Funcgen::Storable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
3 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
4
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
5 =head1 LICENSE
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
6
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
7 Copyright (c) 1999-2011 The European Bioinformatics Institute and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
8 Genome Research Limited. All rights reserved.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
9
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
10 This software is distributed under a modified Apache license.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
11 For license details, please see
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
12
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
13 http://www.ensembl.org/info/about/code_licence.html
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
14
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
15 =head1 CONTACT
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
16
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
17 Please email comments or questions to the public Ensembl
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
18 developers list at <ensembl-dev@ebi.ac.uk>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
19
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
20 Questions may also be sent to the Ensembl help desk at
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
21 <helpdesk@ensembl.org>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
22
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
23 =head1 NAME
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25 Bio::EnsEMBL::Funcgen::Storable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27 =head1 SYNOPSIS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29 my $dbID = $storable_object->dbID();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30 my $adaptor = $storable_object->adaptor();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31 if($storable_object->is_stored($db_adaptor))) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36 This is a simple wrapper class to provide convenience methods for the StorableAdaptor.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37 Only get type methods have been implemented here to avoid obfuscating DB writes which
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38 should only be done by the specific 'Storable'Adaptors.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40 =head1 SEE ALSO
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42 Bio::EnsEMBL::Funcgen::DBSQL::BaseAdaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47 use warnings;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49 package Bio::EnsEMBL::Funcgen::Storable;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52 use Bio::EnsEMBL::Registry;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53 use Bio::EnsEMBL::Utils::Exception qw(throw warning);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54 use Bio::EnsEMBL::Utils::Argument qw(rearrange);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55 use Bio::EnsEMBL::Storable;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57 use vars qw(@ISA);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59 @ISA = qw(Bio::EnsEMBL::Storable);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61 =head2 new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63 Arg [-STATES] : Arrayref of states
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64 Arg [-dbID] : database internal id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65 Example : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66 Caller : internal calls
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67 Description : create a new Storable object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68 Returntype : Bio::EnsEMBL::Storable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69 Exceptions : Adaptor not a Bio::EnsEMBL::Funcgen::DBSQL::BaseAdaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74 sub new {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75 my $caller = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77 my $class = ref($caller) || $caller;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79 my $self = $class->SUPER::new(@_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82 my ($states, $assoc_ftypes) = rearrange(['STATES', 'ASSOCIATED_FEATURE_TYPES'] ,@_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84 if ($self->adaptor() && (! $self->adaptor->isa("Bio::EnsEMBL::Funcgen::DBSQL::BaseAdaptor"))){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85 throw("Adaptor muct be a valid Bio::EnsEMBL::Funcgen::DBSQL::BaseAdaptor");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88 #will these break using _new_fast
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89 #THerefore ResultFeature, Probe and ProbeFeature should not be Funcgen::Storables
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91 @{$self->{'states'}} = @$states if $states;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92 $self->associated_feature_types($assoc_ftypes) if(defined $assoc_ftypes);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95 return $self;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103 =head2 has_status
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105 Arg [1] : string - status e.g. IMPORTED, DISPLAYABLE
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106 Example : if($experimental_chip->has_status('IMPORTED'){ ... skip import ... };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107 Description: Tests whether storable has a given status
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108 Returntype : BOOLEAN
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109 Exceptions : Throws if not status is provided
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111 Status : At risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117 sub has_status{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118 my ($self, $status) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120 throw("Must provide a status to check") if ! $status;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122 my @state = grep(/$status/, @{$self->get_all_states()});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123 my $boolean = scalar(@state);#will be 0 or 1 due to table contraints
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125 return $boolean;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130 #There is a potential to create an obj from scratch which may already exist in the db
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131 #If we add a state to this (obj has not dbID so will not retrieve stored states)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132 # and then try and store it, this will result in adding the state to the previously stored obj.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133 #The behaviour is silent and could cause problems.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135 #To resolve this the adaptor implementations must throw if we find a matching object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136 #We must force the user to generate the obj from the db(use recover) rather than from scratch
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 #to make them aware of the situation. This is useful to protect objects where we do not want to overwrite previous data
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138 #e.g. experiment, experimental_chip, channel
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139 #For objects which are routinely resued, we must make sure we always try the db first(not just when recover is set)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140 #Then warn/throw if there are differing attributes
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142 #This is not possible for set objects, but is not a problem as it will just create another set entry rather than overwriting
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143 #All update/store_states methods should be okay so long as we have a dbID first.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148 =head2 get_all_states
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150 Example : my @ec_states = @{$experimental_chip->get_all_states()};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151 Description: Retrieves all states from DB and merges with current states array
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152 Returntype : LISTREF
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153 Exceptions : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155 Status : At risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161 sub get_all_states{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164 my %states;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166 #This could miss states in the DB for storables which have been created and had states added
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167 #but already exist with states in the DB
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168 #The way to get around this is to throw if we try and store an object without a dbID which matches
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169 #something in the DB.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170 #Remove func in adaptors(ec and channel only?) to automatically use prestored objects, throw instead if no dbID and matches.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171 #force use of recover to retrieve object from DB and then skip to relevant step based on states.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172 #Have states => next method hash in Importer/ArrayDefs?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176 if($self->is_stored($self->adaptor->db()) && ! $self->{'states'}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177 @{$self->{'states'}} = @{$self->adaptor->fetch_all_states($self)};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180 return $self->{'states'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184 =head2 add_status
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186 Example : $ec->add_state('DISPLAYABLE');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187 Description: Adds a state to a new or previously stored Storable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188 Returntype : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189 Exceptions : Throws if no status supplied
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191 Status : At risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197 sub add_status{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198 my ($self, $status) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200 throw("Must pass a status to add e.g. 'DISPLAYABLE'") if ! $status;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204 #this does not resolve the problem!!???
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205 #can add a status to an unstored object which
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207 if($self->adaptor && $self->is_stored($self->adaptor->db()) && ! $self->{'states'}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208 @{$self->{'states'}} = @{$self->adaptor->fetch_all_states($self)};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211 push @{$self->{'states'}}, $status;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216 sub is_displayable{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219 return $self->has_status('DISPLAYABLE');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222 #These DBEntry methods are here to enable xrefs to FeatureType, Probe, ProbeSet & ProbeFeature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223 #They only work as SetFeature has Storable as the second element of @ISA and Bio::EnsEMBL::Feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224 #get_all_DBEntries be incorporated into Bio::EnsEMBL::Storable as generic method
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225 #With the other wrapper methods in the Storables of the non-core APIs?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226 #Or can these be moved to core as a supra core class?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227 #i.e. Is common to all non-core APIs but not relevant for core?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228 #Can we bring these together to stop code propogation?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231 =head2 get_all_Gene_DBEntries
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233 Example : my @gene_dbentries = @{ $storable->get_all_Gene_DBEntries };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234 Description: Retrieves Ensembl Gene DBEntries (xrefs) for this Storable.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235 This does _not_ include the corresponding translations
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236 DBEntries (see get_all_DBLinks).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238 This method will attempt to lazy-load DBEntries from a
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239 database if an adaptor is available and no DBEntries are present
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240 on the transcript (i.e. they have not already been added or
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241 loaded).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242 Returntype : Listref of Bio::EnsEMBL::DBEntry objects
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245 Status : at risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249 #Need to add optional Transcript/Gene param so we can filter
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250 #Filter here or would be better to restrict in sql query ni DBEntryAdaptor?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252 sub get_all_Gene_DBEntries {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256 #We wouldn't need this if we made the xref schema multi species
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257 #my $species = $self->adaptor->db->species;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258 my $species = Bio::EnsEMBL::Registry->get_alias($self->adaptor->db->species);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260 if(!$species){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261 throw('You must specify a DBAdaptor -species to retrieve DBEntries based on the external_db.db_name');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264 #safety in case we get Homo sapiens
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265 ($species = lc($species)) =~ s/ /_/;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269 return $self->get_all_DBEntries($species.'_core_Gene');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272 =head2 get_all_Transcript_DBEntries
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274 Arg[0] : optional - Bio::EnsEMBL::Transcript to filter DBEntries on.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275 Example : my @transc_dbentries = @{ $set_feature->get_all_Transcript_DBEntries };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276 Description: Retrieves ensembl Transcript DBEntries (xrefs) for this Storable.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277 This does _not_ include the corresponding translations
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278 DBEntries (see get_all_DBLinks).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280 This method will attempt to lazy-load DBEntries from a
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281 database if an adaptor is available and no DBEntries are present
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282 on the Storable (i.e. they have not already been added or
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283 loaded).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284 Returntype : Listref of Bio::EnsEMBL::DBEntry objects
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287 Status : at risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291 #change the to ensembl_core when we implement Gene/Transcript/Protein|Translation links on the same external_db
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293 sub get_all_Transcript_DBEntries {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294 my ($self, $transcript) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296 #We wouldn't need this if we made the xref schema multi species
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297 my $species = Bio::EnsEMBL::Registry->get_alias($self->adaptor->db->species);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298 #Need to make sure this is latin name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301 if(!$species){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302 throw('You must specify a DBAdaptor -species to retrieve DBEntries based on the external_db.db_name');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305 #safety in case we get Homo sapiens
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306 #($species = lc($species)) =~ s/ /_/;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308 my $dbes = $self->get_all_DBEntries($species.'_core_Transcript');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310 #This needs to be moved to the DBEntryAdaptor and restrict the query using the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311 #dbprimary_acc
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313 if($transcript){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314 my $sid = $transcript->stable_id;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
315
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
316 #Test for sid here?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
317
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
318 if(ref($transcript) && $transcript->isa('Bio::EnsEMBL::Transcript')){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319 my @dbes;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321 foreach my $dbe(@$dbes){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322 if($dbe->primary_id eq $sid){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323 push @dbes, $dbe;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
324 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
325 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
326 $dbes = \@dbes;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
327 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328 else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329 throw('Transcript argument must be a valid Bio::EnsEMBL::Transcript');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334 return $dbes;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
336
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
337
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
338 =head2 get_all_UnmappedObjects
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
339
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340 Example : my @uos = @{$storable->get_all_UnmappedObjects };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341 Description: Retrieves UnamappedObjects for this Storable.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342 Returntype : arrayref of Bio::EnsEMBL::UnmappedObject objects
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345 Status : At risk - move to Bio::Ensembl::Storable?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
348
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
349 sub get_all_UnmappedObjects{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
350 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
351 #Do we want to add external_db or analysis param here?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
352
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
353 my $class = ref($self);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
354 $class =~ s/.*:://;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
355
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
356 return $self->adaptor->db->get_UnmappedObjectAdaptor->fetch_all_by_object_type_id($class, $self->dbID);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
357 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
358
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
359
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
360 =head2 get_all_DBEntries
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
361
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
362 Arg[1] : string - External DB name e.g. ensembl_core_Gene
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
363 Arg[2] : string - External DB type
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
364 Example : my @dbentries = @{ $set_feature->get_all_DBEntries };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
365 Description: Retrieves DBEntries (xrefs) for this SetFeature.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
366 This does _not_ include the corresponding translations
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
367 DBEntries (see get_all_DBLinks).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
368
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
369 This method will attempt to lazy-load DBEntries from a
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
370 database if an adaptor is available and no DBEntries are present
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
371 on the SetFeature (i.e. they have not already been added or
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
372 loaded).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
373 Returntype : Listref of Bio::EnsEMBL::DBEntry objects
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
374 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
375 Caller : general, get_all_DBLinks
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
376 Status : Stable - at risk move to storable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
377
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
378 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
379
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
380
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
381 #We could add 3rd arg here which would be xref(info_)type e.g. Gene/Transcript etc.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
382 #Move info_type to ox.linkage_type to sit along side linkage_annotated
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
383
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
384
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
385 sub get_all_DBEntries {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
386 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
387 my $ex_db_exp = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
388 my $ex_db_type = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
389
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
390 my $cache_name = "dbentries";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
391
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
392 if(defined($ex_db_exp)){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
393 $cache_name .= $ex_db_exp;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
394 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
395 if(defined($ex_db_type)){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
396 $cache_name .= $ex_db_type;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
397 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
398
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
399 #Need to add tests for valid objects for xrefs
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
400
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
401 # if not cached, retrieve all of the xrefs for this gene
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
402
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
403 #This is not using the caching optimally
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
404 #It seems for naive(ex_db_exp,ex_db_type) queries we create a naive cache
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
405 #This means that further more specific queries will make another query and not use the cache
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
406
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
407
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
408 if( (! defined $self->{$cache_name}) && $self->adaptor() ){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
409
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
410 my @tables = $self->adaptor->_tables;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
411 @tables = split/_/, $tables[0]->[0];#split annotated_feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
412 my $object_type = join('', (map ucfirst($_), @tables));#change to AnnotatedFeature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
413
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
414 $self->{$cache_name} =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
415 $self->adaptor->db->get_DBEntryAdaptor->_fetch_by_object_type($self->dbID(), $object_type, $ex_db_exp, $ex_db_type);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
416 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
417 elsif( ! defined $self->{$cache_name} ){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
418 throw('You must have set and adaptor to be able to get_all_DBEntries');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
419 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
420
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
421
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
422 $self->{$cache_name} ||= [];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
423
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
424 return $self->{$cache_name};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
425 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
426
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
427
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
428 =head2 add_DBEntry
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
429
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
430 Arg [1] : Bio::EnsEMBL::DBEntry $dbe
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
431 The dbEntry to be added
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
432 Example : my $dbe = Bio::EnsEMBL::DBEntry->new(...);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
433 $transcript->add_DBEntry($dbe);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
434 Description: Associates a DBEntry with this object. Note that adding
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
435 DBEntries will prevent future lazy-loading of DBEntries for this
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
436 storable (see get_all_DBEntries).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
437 Returntype : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
438 Exceptions : thrown on incorrect argument type
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
439 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
440 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
441
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
442 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
443
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
444 sub add_DBEntry {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
445 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
446 my $dbe = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
447
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
448 unless($dbe && ref($dbe) && $dbe->isa('Bio::EnsEMBL::DBEntry')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
449 throw('Expected DBEntry argument');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
450 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
451
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
452 $self->{'dbentries'} ||= [];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
453 push @{$self->{'dbentries'}}, $dbe;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
454 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
455
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
456
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
457 =head2 associated_feature_types
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
458
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
459 Example : my @associated_ftypes = @{$feature->associated_feature_types()};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
460 Description: Getter/Setter for other associated FeatureTypes.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
461 Returntype : ARRAYREF of Bio::EnsEMBL::Funcgen:FeatureType objects
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
462 Exceptions : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
463 Caller : General
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
464 Status : At risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
465
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
466 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
467
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
468 sub associated_feature_types{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
469 my ($self, $ftypes) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
470
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
471 #Lazy load as we don't want to have to do a join on all features when most will not have any
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
472
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
473
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
474 if(defined $ftypes){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
475
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
476 if(ref($ftypes) eq 'ARRAY'){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
477
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
478 foreach my $ftype(@$ftypes){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
479
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
480 if( ! $ftype->isa('Bio::EnsEMBL::Funcgen::FeatureType') ){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
481 throw('You must pass and ARRAYREF of stored Bio::EnsEMBL::Funcgen::FeatureType objects');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
482 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
483 #test is stored in adaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
484 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
485
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
486 if(defined $self->{'associated_feature_types'}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
487 warn('You are overwriting associated feature types');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
488 #we could simply add the new ones and make them NR.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
489 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
490
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
491 $self->{'associated_feature_types'} = $ftypes;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
492 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
493 else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
494 throw('You must pass and ARRAYREF of stored Bio::EnsEMBL::Funcgen::FeatureType objects');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
495 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
496 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
497
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
498
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
499 if(! defined $self->{'associated_feature_types'}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
500 #This will fail if we have not stored yet
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
501
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
502 if(defined $self->adaptor){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
503 $self->{'associated_feature_types'} = $self->adaptor->db->get_FeatureTypeAdaptor->fetch_all_by_association($self);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
504 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
505
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
506 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
507
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
508
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
509 #This has the potential to return undef, or an arrayref which may be empty.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
510 return $self->{'associated_feature_types'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
511 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
512
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
513
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
514
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
515
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
516
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
517
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
518
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
519 1;