Added eval; site now shows clean dataset missing message instead of server error...
[sgn.git] / lib / SGN / Controller / solGS / Path.pm
blob384e6b81ac15ef4c2dc63da9ddd62fe20f81244e
1 package SGN::Controller::solGS::Path;
3 use Moose;
4 use namespace::autoclean;
6 use JSON;
8 BEGIN { extends 'Catalyst::Controller' }
10 sub check_page_type : Path('/solgs/check/page/type') Args(0) {
11 my ( $self, $c ) = @_;
13 my $page_type = $self->page_type( $c, $c->req->param('page') );
15 my $ret = { 'page_type' => $page_type };
16 $ret = to_json($ret);
18 $c->res->content_type('application/json');
19 $c->res->body($ret);
23 sub model_page_url {
24 my ( $self, $args ) = @_;
26 my $trait_id = $args->{trait_id};
27 my $pop_id = $args->{training_pop_id};
28 my $protocol_id = $args->{genotyping_protocol_id};
30 my $path;
31 if ( $args->{data_set_type} =~ /combined/ ) {
32 $path =
33 "/solgs/model/combined/trials/$pop_id/trait/$trait_id/gp/$protocol_id";
35 else {
36 $path = "/solgs/trait/$trait_id/population/$pop_id/gp/$protocol_id";
39 return $path;
43 sub training_page_url {
44 my ( $self, $args ) = @_;
46 my $pop_id = $args->{training_pop_id};
47 my $protocol_id = $args->{genotyping_protocol_id};
49 my $path;
50 if ( $args->{data_set_type} =~ /combined/ ) {
51 $path = "/solgs/populations/combined/$pop_id/gp/$protocol_id";
53 else {
54 $path = "/solgs/population/$pop_id/gp/$protocol_id";
57 return $path;
60 sub multi_models_page_url {
61 my ( $self, $args ) = @_;
63 my $training_pop_id = $args->{training_pop_id};
64 my $protocol_id = $args->{genotyping_protocol_id};
65 my $traits_code = $args->{traits_selection_id};
67 my $path;
68 if ( $args->{data_set_type} =~ /combined/ ) {
69 $path =
70 "/solgs/models/combined/trials/"
71 . $training_pop_id
72 . '/traits/'
73 . $traits_code . '/gp/'
74 . $protocol_id;
76 else {
77 $path =
78 "/solgs/traits/all/population/"
79 . $training_pop_id
80 . '/traits/'
81 . $traits_code . '/gp/'
82 . $protocol_id;
86 return $path;
90 sub trial_page_url {
91 my ( $self, $trial_id ) = @_;
93 return "/breeders/trial/$trial_id";
97 sub selection_page_url {
98 my ( $self, $args ) = @_;
100 my $tr_pop_id = $args->{training_pop_id};
101 my $sel_pop_id = $args->{selection_pop_id};
102 my $trait_id = $args->{trait_id};
103 my $protocol_id = $args->{genotyping_protocol_id};
105 my $path;
106 if ( $args->{data_set_type} =~ /combined_populations/ ) {
107 $path =
108 "/solgs/combined/model/$tr_pop_id/selection/$sel_pop_id/trait/$trait_id/gp/$protocol_id";
110 else {
111 $path =
112 "/solgs/selection/$sel_pop_id/model/$tr_pop_id/trait/$trait_id/gp/$protocol_id";
115 return $path;
119 sub create_hyperlink {
120 my ( $self, $url, $text ) = @_;
122 my $link = qq | <a href="$url">$text</a> |;
124 return $link;
128 sub page_type {
129 my ( $self, $c, $url ) = @_;
131 $url = $c->req->path if !$url;
133 my $model_pages =
134 'solgs/trait'
135 . '|solgs/traits/all/'
136 . '|solgs/model/combined/trials/'
137 . '|solgs/models/combined/trials/';
139 my $selection_pop_pages = 'solgs/selection' . '|solgs/combined/model/';
141 my $training_pop_pages =
142 'solgs/population/' . '|solgs/populations/combined/';
144 my $type;
145 if ( $url =~ $model_pages ) {
146 $type = 'training_model';
148 elsif ( $url =~ $selection_pop_pages ) {
149 $type = 'selection_prediction';
151 elsif ( $url =~ $training_pop_pages ) {
152 $type = 'training_population';
155 return $type;
159 sub parse_ids {
160 my ( $self, $c ) = @_;
162 my $page_type = $self->page_type($c);
163 my $path = $c->req->path;
165 my $ids = {};
166 if ( $page_type =~ /selection/ ) {
167 my @parts = split( /\//, $path );
168 my @num = grep( /\d+/, @parts );
170 if ( $path =~ /combined/ ) {
171 $ids = {
172 'training_pop_id' => $num[0],
173 'selection_pop_id' => $num[1],
174 'trait_id' => $num[2],
175 'genotyping_protocol_id' => $num[3]
178 else {
179 $ids = {
180 'training_pop_id' => $num[1],
181 'selection_pop_id' => $num[0],
182 'trait_id' => $num[2],
183 'genotyping_protocol_id' => $num[3]
189 return $ids;
192 sub clean_base_name {
193 my ( $self, $c ) = @_;
195 my $base = $c->req->base;
196 $base =~ s/:\d+//;
197 $base =~ s/(\/)$//;
199 return $base;
202 ####
204 ####