refactoring brapi
[sgn.git] / js / solGS / listTypeTrainingPopulation.js
blob4c7d60085680e238bee64a518c21977baaef603d
2 /**
4 reference population upload from lists.
6 Isaak Y Tecle 
7 iyt2@cornell.edu
8 */
10 JSAN.use("CXGN.List");
11 JSAN.use("jquery.blockUI");
14 jQuery(document).ready( function() {
15        
16     var list = new CXGN.List();
17         
18     var listMenu = list.listSelect("list_type_training_pops", ['plots', 'trials']);
19        
20     if (listMenu.match(/option/) != null) {           
21         jQuery("#list_type_training_pops_list").append(listMenu);
22     } else {
23         jQuery("#list_type_training_pops_list").append("<select><option>no lists found</option></select>");
24     }
25                
26 });
29 jQuery(document).ready( function() { 
30                
31     jQuery("<option>", {value: 'select...', selected: true})
32         .prependTo("#list_type_training_pops_list_select");
33         
34     jQuery("#list_type_training_pops_list_select")
35         .change(function() { 
36         
37             var listId = jQuery(this).find("option:selected").val();                             
38             if (listId) {  
39                 var listDetail = getListTypeTrainingPopDetail(listId);
40                 jQuery("#list_type_training_pop_load").click(function() {
41                     
42                     if (listDetail.type.match(/plots/)) {
43                         askJobQueueing(listId);
44                     } else {
45                         var trialsList = listDetail.list;
46                         var trialsNames = listDetail.elementsNames;
47                         
48                         loadTrialListTypeTrainingPop(trialsNames);                  
49                     }
50                 });
51             }
52         });       
53 });
56 function getListElementsNames (list) {
57    
58     var names = [];
59     for (var i = 0; i < list.length; i++) {
60         names.push(list[i][1]);
61     }
63     return names;
68 function getListTypeTrainingPopDetail(listId) {   
69     
70     var list = new CXGN.List();
71     
72     var listData;
73     var listType;
74     var listName;
75     var listElements;
76     var listElementsNames;
78     if (listId) {
79         listData      = list.getListData(listId);
80         listType      = list.getListType(listId);
81         listName      = list.listNameById(listId);
82         listElements  = listData.elements;
84         listElementsNames = getListElementsNames(listElements);
85     }
86   
87     return {'name'          : listName,
88             'list'          : listElements,
89             'type'          : listType,
90             'elementsNames' : listElementsNames,
91            };
95 function loadTrialListTypeTrainingPop (trialsNames) {
96    
97     jQuery.ajax({
98         type: 'POST',
99         url: '/solgs/get/trial/id/',
100         dataType: 'json',
101         data: { 'trials_names': trialsNames},
102         success: function (res) { 
103             getCombinedPopsId(res.trials_ids);
104         },
105         error: function(response) {
106             alert('Error occured querying for trials ids');
107         }                       
108     });
112 function askJobQueueing (listId) {
114     var args = createReqArgs(listId);
115     var modelId = args.population_id;
116     
117     var page = '/solgs/population/' + modelId;
119     solGS.waitPage(page, args);
124 function createReqArgs (listId) {
125     
126     var genoList  = getListTypeTrainingPopDetail(listId);
127     var listName  = genoList.name;
128     var list      = genoList.list;
129     var popId     = getModelId(listId);
131     var popType = 'uploaded_reference';
133     var args = {
134         'list_name'      : listName,
135         'list'           : list,
136         'list_id'        : listId,
137         'analysis_type'  : 'population download',
138         'data_set_type'  : 'single population',
139         'population_id'  : popId,
140         'population_type': popType,
141     };  
143     return args;
148 function loadPlotListTypeTrainingPop(listId) {     
149   
150     var args  = createReqArgs(listId);
151     var len   = args.list.length;
152     var popId = args.population_id;
154     if (window.Prototype) {
155         delete Array.prototype.toJSON;
156     }
157     
158     args = JSON.stringify(args);
160     if (len === 0) {       
161         alert('The list is empty. Please select a list with content.' );
162     }
163     else {  
164         jQuery.blockUI.defaults.applyPlatformOpacityRules = false;
165         jQuery.blockUI({message: 'Please wait..'});
166        
167         jQuery.ajax({
168             type: 'POST',
169             dataType: 'json',
170             data: {'arguments': args},
171             url: '/solgs/load/plots/list/training',                   
172             success: function(response) {
173                    
174                 if (response.status == 'success') {
175     
176                     window.location = '/solgs/population/' + popId;                       
177                     jQuery.unblockUI();                        
178                       
179                 } else {                                    
180                     alert("fail: Error occured while querying for the training data.");
181                     jQuery.unblockUI();   
182                 }                     
183             },
184             error: function(res) {
185                 alert("Error occured while querying for the training data.");
186                 jQuery.unblockUI();   
187             }            
188         });        
189     }
193 jQuery.fn.doesExist = function(){
194         return jQuery(this).length > 0;
195  };
199 function getUserUploadedRefPop (listId) {
200    
201     var genoList       = getListTypeTrainingPopDetail(listId);
202     var listName       = genoList.name;
203     var list           = genoList.list;
204     var modelId        = getModelId(listId);
205   
206     var url         =   '\'/solgs/population/'+ modelId + '\'';
207     var listIdArg   = '\'' + listId +'\'';
208     var listSource  = '\'from_db\'';
209     var popIdName   = {id : modelId, name: listName,};
210     popIdName       = JSON.stringify(popIdName);
211     var hiddenInput =  '<input type="hidden" value=\'' + popIdName + '\'/>';
213     var uploadedSelPop ='<table id="uploaded_reference_pops_table" style="width:100%; text-align:left"><tr>'
214                                 + '<th>List-based training population</th>'
215                                 + '<th>Models</th>'
216                                 +'</tr>'
217                                 + '<tr>'
218                                 + '<td>'
219                                 + '<a href="/solgs/population/' + modelId + '\" onclick="javascript:loadPopulationPage(' + url + ',' 
220                                 + listIdArg + ',' + listSource + ')">' + '<data>'+ hiddenInput + '</data>'
221                                 + listName + '</a>'
222                                 + '</td>'
223                                 + '<td id="list_reference_page_' + modelId +  '">'
224                                 + '<a href="/solgs/population/' + modelId + '\" onclick="javascript:loadPopulationPage(' + url + ',' 
225                                 + listIdArg + ',' + listSource + ')">' 
226                                 + '[ Build model ]'+ '</a>'
227                                 + '</td></tr></table>';
229     return uploadedSelPop;
233 function loadPopulationPage (url, listId, listSource) {   
234     
235     var genoList       = getListTypeTrainingPopDetail(listId);
236     var listName       = genoList.name;
237     var modelId        = getModelId(listId);
238      
239     jQuery.blockUI.defaults.applyPlatformOpacityRules = false;
240     jQuery.blockUI({message: 'Please wait..'});
241    
242     jQuery.ajax({
243             type: 'POST',
244                 url: url,
245                 dataType: 'json',
246                 data: {
247                        'uploaded_reference': 1, 
248                        'model_id': modelId, 
249                        'list_source': listSource,
250                        'list_name'  : listName,
251                       },
252                 success: function (response) {
253                
254                 if (response.status == 'success') {                                 
255                     jQuery.unblockUI();                 
256                 }
257                 else {                
258                     alert('Fail: Error occured calculating GEBVs for the list of selection genotypes.');
259                     jQuery.unblockUI();
260                 }
261             },
262                 error: function(response) {
263                 alert('error: ' + res.responseText);
265             }                       
266         });
267     
271 function getModelId (listId) {
272   
273     var modelId = 'uploaded_' + listId; 
274     return modelId;