return correct image_id in process_image.
[cxgn-corelibs.git] / lib / CXGN / LinkageGroup.pm
blob7df0144aecb328108223ad3b0195696cf1b1992f
2 =head1 NAME
4 CXGN::LinkageGroup - a class that deals with the
5 sgn.linkage_group table.
7 =head1 DESCRIPTION
9 This class does basic things such as
10 accessing forlinkage_group_ids and their names
11 and storing linkage_group names
12 and map_version_id to the sgn.linkage_group table.
14 =head1 AUTHORS
16 Isaak Y Tecle (iyt2@cornell.edu)
19 =head1 FUNCTIONS
22 =cut
24 use strict;
25 use CXGN::DB::Connection;
26 package CXGN::LinkageGroup;
28 =head2 new
30 Usage: my $map = CXGN::LinkageGroup->new($dbh, $map_version_id, $lg)
31 Desc: creates a new CXGN::Map object
32 Ret:
33 Args: - a database handle, if possible using
34 CXGN::DB::Connection object
35 - map_version_id
36 -an array ref of linkage groups to store linkage groups.
37 Not needed if the goal is to access the linkage_groups
38 Side Effects:
39 Example:
41 =cut
43 sub new {
44 my $class = shift;
45 my($dbh, $map_version_id, $linkage_groups) = @_;
46 my $self = bless {}, $class;
48 unless ($map_version_id) {die "You must provide a map_version_id\n";}
50 my $valid_map_version_id;
51 if($map_version_id) {
52 #think of better check, here.
53 my $sth = $dbh->prepare("SELECT map_version_id
54 FROM sgn.map_version
55 WHERE map_version_id = ?");
56 $sth->execute($map_version_id);
57 $valid_map_version_id = $sth->fetchrow_array();
60 unless ($valid_map_version_id) { die "No such map version id: $map_version_id exists\n"};
62 my (@linkage_groups, @lg_ids, $lg_ids);
63 if ($linkage_groups) {
64 if (@{$linkage_groups}) {
65 for my $lg_name(@{$linkage_groups}) {
66 # one digit, optionally followed by another, optionally followed
67 # by a lowercase letter--modify this regex if needed
69 print STDERR "Linkage group: $lg_name\n";
70 unless ($lg_name=~/^\d\d?[a-z]?$/) {
71 die "'$lg_name' is not a valid linkage group name";
75 else {
77 my $sth = $dbh->prepare("SELECT lg_id, lg_name
78 FROM sgn.linkage_groups
79 WHERE sgn.map_version_id = ?
80 AND current_version = 't'"
82 $sth->execute($valid_map_version_id);
84 while (my ($lg_id, $lg_name) = $sth->fetchrow_array()) {
85 push @lg_ids, $lg_id;
86 push @linkage_groups, $lg_name;
88 $lg_ids = \@lg_ids;
89 $linkage_groups = \@linkage_groups;
92 unless (@lg_ids) { die "(1) You have not provided the linkage_group names
93 for the new map version or \n
94 (2) for the map_version_id you provided there
95 are no existing linkage groups associated with it\n";
100 $self->set_linkage_group_ids($lg_ids);
101 $self->set_linkage_groups($linkage_groups);
102 $self->set_map_version_id($valid_map_version_id);
103 $self->set_dbh($dbh);
105 return $self;
111 sub store {
112 my $self = shift;
114 my $map_version_id = $self->get_map_version_id();
116 die "Valid map_version_id is required!\n" unless ($map_version_id);
118 my $i = 1;
119 foreach my $lg (@{$self->get_linkage_groups()}) {
121 my $sth = $self->get_dbh()->prepare("INSERT INTO sgn.linkage_group
122 (map_version_id, lg_order, lg_name)
123 VALUES (?, ?, ?)"
125 $sth->execute(
126 $map_version_id,
131 print STDERR "INSERTING LINKAGE_GROUP $lg
132 of MAP_VERSION_ID: $map_version_id\n";
133 $i++;
138 if ($@) {
139 print $@;
140 print STDERR "Failed storing linkage groups\n";
141 return 0;
143 else {
144 return 1;
148 =head2 accessors set_dbh, get_dbh
150 Property:
151 Setter Args:
152 Getter Args:
153 Getter Ret:
154 Side Effects:
155 Description:
157 =cut
159 sub get_dbh {
160 my $self=shift;
161 return $self->{dbh};
164 sub set_dbh {
165 my $self=shift;
166 $self->{dbh}=shift;
169 =head2 accessors set_map_version_id, get_map_version_id
171 Property:
172 Setter Args:
173 Getter Args:
174 Getter Ret:
175 Side Effects:
176 Description:
178 =cut
180 sub get_map_version_id {
181 my $self=shift;
182 return $self->{map_version_id};
185 sub set_map_version_id {
186 my $self=shift;
187 $self->{map_version_id}=shift;
195 =head2 accessors set_linkage_groups, get_linkage_groups
197 Property:
198 Setter Args:
199 Getter Args:
200 Getter Ret:
201 Side Effects:
202 Description:
204 =cut
206 sub get_linkage_groups {
207 my $self=shift;
208 return $self->{linkage_groups};
211 sub set_linkage_groups {
212 my $self=shift;
213 $self->{linkage_groups}=shift;
216 =head2 accessors set_linkage_group_ids, get_linkage_group_ids
218 Property:
219 Setter Args:
220 Getter Args:
221 Getter Ret:
222 Side Effects:
223 Description:
225 =cut
227 sub get_linkage_group_ids {
228 my $self=shift;
229 return $self->{linkage_group_ids};
232 sub set_linkage_group_ids {
233 my $self=shift;
234 $self->{linkage_group_ids}=shift;
237 =head2 get_lg_id
239 Property:
240 Setter Args:
241 Getter Args:
242 Getter Ret:
243 Side Effects:
244 Description:
246 =cut
248 sub get_lg_id {
249 my $self = shift;
250 my $lg = shift;
251 # my $map_version_id = shift;
252 my $sth = $self->get_dbh()->prepare("SELECT lg_id
253 FROM sgn.linkage_group
254 WHERE lg_name = ?
255 AND map_version_id = ?"
258 $sth->execute($lg, $self->get_map_version_id());
259 my $lg_id = $sth->fetchrow_array();
261 if ($lg_id) {
262 return $lg_id;
263 } else {
264 return undef;
271 return 1;