[title] Function merge "Update list" and "Update status".
authordibs <dibs@samsung.com>
Wed, 16 Jan 2013 11:59:58 +0000 (20:59 +0900)
committerdibs <dibs@samsung.com>
Wed, 16 Jan 2013 11:59:58 +0000 (20:59 +0900)
dibs-web/app/controllers/jobs_controller.rb
dibs-web/config/routes.rb
dibs-web/public/javascripts/dibs-api.js
dibs-web/public/javascripts/jobs.js

index ea5cc82e2514bcec385dd9cb0ab7c1aa060ee247..f12642a9b5421071b65db22055fc381cbde05016 100644 (file)
@@ -36,77 +36,120 @@ class JobsController < ApplicationController
        end
 
        def listAll
-               listQuery("QUERY", params[:distribution], params[:status], params[:lastID], "", "")
-       end
-
-       def listSearchId
-               listQuery("QUERY", "%", "%", "%", "%", "%")
+               #generate to XML
+               doc = Builder::XmlMarkup.new( :target => out_string = "", :indent => 2 )
+               doc.Response {
+                       generate_xml_header(doc)
+                       doc.Data {
+                               listQuery(doc, "QUERY", params[:distribution], params[:status], params[:lastID], "", "")
+                       }
+               }
+               render :text => out_string, :content_type => "text/xml"
        end
 
        def listSearchUser
-               listQuery("QUERY", params[:distribution], params[:status], params[:lastID], params[:user], "")
+               #generate to XML
+               doc = Builder::XmlMarkup.new( :target => out_string = "", :indent => 2 )
+               doc.Response {
+                       generate_xml_header(doc)
+                       doc.Data {
+                               listQuery(doc, "QUERY", params[:distribution], params[:status], params[:lastID], params[:user], "")
+                       }
+               }
+               render :text => out_string, :content_type => "text/xml"
        end
 
        def listSearchGroup
-               listQueryGroup("QUERY", params[:distribution], params[:status], params[:lastID], params[:group])
+               #generate to XML
+               doc = Builder::XmlMarkup.new( :target => out_string = "", :indent => 2 )
+               doc.Response {
+                       generate_xml_header(doc)
+                       doc.Data {
+                               listQueryGroup(doc, "QUERY", params[:distribution], params[:status], params[:lastID], params[:group])
+                       }
+               }
+               render :text => out_string, :content_type => "text/xml"
        end
 
        def listSearchProject
-               listQueryProject("QUERY", params[:distribution], params[:status], params[:lastID], params[:project])
+               #generate to XML
+               doc = Builder::XmlMarkup.new( :target => out_string = "", :indent => 2 )
+               doc.Response {
+                       generate_xml_header(doc)
+                       doc.Data {
+                               listQueryProject(doc, "QUERY", params[:distribution], params[:status], params[:lastID], params[:project])
+                       }
+               }
+               render :text => out_string, :content_type => "text/xml"
        end
 
        def listSearchDate
-               listQuery("QUERY", params[:distribution], params[:status], params[:lastID], "", params[:date])
-       end
-
-       def updateListAll
-               listQuery("UPDATE", params[:distribution], params[:status], params[:lastID], "", "")
-       end
-
-       def updateListSearchUser
-               listQuery("UPDATE", params[:distribution], params[:status], params[:lastID], params[:user], "")
-       end
-
-       def updateListSearchGroup
-               listQueryGroup("UPDATE", params[:distribution], params[:status], params[:lastID], params[:group])
-       end
-
-       def updateListSearchProject
-               listQueryProject("UPDATE", params[:distribution], params[:status], params[:lastID], params[:project])
-       end
-
-       def updateListSearchDate
-               listQuery("UPDATE", params[:distribution], params[:status], params[:lastID], "", params[:date])
+               #generate to XML
+               doc = Builder::XmlMarkup.new( :target => out_string = "", :indent => 2 )
+               doc.Response {
+                       generate_xml_header(doc)
+                       doc.Data {
+                               listQuery(doc, "QUERY", params[:distribution], params[:status], params[:lastID], "", params[:date])
+                       }
+               }
+               render :text => out_string, :content_type => "text/xml"
        end
 
-       def jobInfo
-               job_id = params[:id]
-
-               job = get_job_info(job_id)
+       def updateList
+               condition = params[:Condition]
+               param = params[:Param]
+               distribution = params[:Distribution]
+               status = params[:Status]
+               latest_id = params[:LatestId]
+               working_job_list = params[:WorkingJobId]
 
                #generate to XML
                doc = Builder::XmlMarkup.new( :target => out_string = "", :indent => 2 )
                doc.Response {
                        generate_xml_header(doc)
                        doc.Data {
-                               doc.Id(job.job_id)
-                               doc.Distribution(job.distribution_name)
-                               doc.ProjectName(job.project_name)
-                               doc.JobType(job.job_type)
-                               doc.Os(job.supported_os_name)
-                               doc.Status(job.status)
-                               doc.UserName(job.user_name)
-                               doc.StartTime(job.start_time)
-                               doc.EndTime(job.end_time)
+                               #new job list
+                               case condition
+                                       when "all"
+                                               listQuery(doc, "UPDATE", distribution, status, latest_id, "", "")
+                                       when "user"
+                                               listQuery(doc, "UPDATE", distribution, status, latest_id, param, "")
+                                       when "group"
+                                               listQueryGroup(doc, "UPDATE", distribution, status, latest_id, param)
+                                       when "project"
+                                               listQueryProject(doc, "UPDATE", distribution, status, latest_id, param)
+                                       when "date"
+                                               listQuery(doc, "UPDATE", distribution, status, latest_id, "", param)
+                                       else
+                               end
+
+                               # working job list for update
+                               doc.WorkingJobList {
+                                       if not working_job_list.nil?
+                                               working_job_list.each do |job_id|
+                                                       job = get_job_info(job_id)
+                                                       doc.Job {
+                                                               doc.Id(job.job_id)
+                                                               doc.Distribution(job.distribution_name)
+                                                               doc.ProjectName(job.project_name)
+                                                               doc.JobType(job.job_type)
+                                                               doc.Os(job.supported_os_name)
+                                                               doc.Status(job.status)
+                                                               doc.UserName(job.user_name)
+                                                               doc.StartTime(job.start_time)
+                                                               doc.EndTime(job.end_time)
+                                                       }
+                                               end
+                                       end
+                               }
                        }
                }
 
                render :text => out_string, :content_type => "text/xml"
-               return
-       end
 
+       end
 
-       def listQuery(query_type, distribution, status, last_id, user, date)
+       def listQuery(doc, query_type, distribution, status, last_id, user, date)
                condition = ""
 
                if(distribution == "ALL")
@@ -167,54 +210,45 @@ class JobsController < ApplicationController
                                                          LIMIT #{QUERY_CNT}")
 
                #generate to XML
-               doc = Builder::XmlMarkup.new( :target => out_string = "", :indent => 2 )
-               doc.Response {
-                       generate_xml_header(doc)
-                       doc.Data {
-                               doc.JobList {
-                                       jobs.each {|job_list|
-                                               job = get_job_info(job_list.id)
+               doc.JobList {
+                       jobs.each {|job_list|
+                               job = get_job_info(job_list.id)
+
+                               doc.Job {
+                                       doc.Id(job.job_id)
+                                       doc.Distribution(job.distribution_name)
+                                       doc.ProjectName(job.project_name)
+                                       doc.JobType(job.job_type)
+                                       doc.JobAttribute(job_list.job_attribute)
+                                       doc.Os(job.supported_os_name)
+                                       doc.Status(job.status)
+                                       doc.UserName(job.user_name)
+                                       doc.StartTime(job.start_time)
+                                       doc.EndTime(job.end_time)
+                               }
 
+                               if job_list.job_attribute == "MULTI"
+                                       child_jobs = get_child_job_info(job.job_id)
+                                       child_jobs.each {|job|
                                                doc.Job {
                                                        doc.Id(job.job_id)
                                                        doc.Distribution(job.distribution_name)
                                                        doc.ProjectName(job.project_name)
                                                        doc.JobType(job.job_type)
-                                                       doc.JobAttribute(job_list.job_attribute)
+                                                       doc.JobAttribute("CHILD")
                                                        doc.Os(job.supported_os_name)
                                                        doc.Status(job.status)
                                                        doc.UserName(job.user_name)
                                                        doc.StartTime(job.start_time)
                                                        doc.EndTime(job.end_time)
                                                }
-
-                                               if job_list.job_attribute == "MULTI"
-                                                       child_jobs = get_child_job_info(job.job_id)
-                                                       child_jobs.each {|job|
-                                                               doc.Job {
-                                                                       doc.Id(job.job_id)
-                                                                       doc.Distribution(job.distribution_name)
-                                                                       doc.ProjectName(job.project_name)
-                                                                       doc.JobType(job.job_type)
-                                                                       doc.JobAttribute("CHILD")
-                                                                       doc.Os(job.supported_os_name)
-                                                                       doc.Status(job.status)
-                                                                       doc.UserName(job.user_name)
-                                                                       doc.StartTime(job.start_time)
-                                                                       doc.EndTime(job.end_time)
-                                                               }
-                                                       }
-                                               end
                                        }
-                               }
+                               end
                        }
                }
-       
-               render :text => out_string, :content_type => "text/xml"
-               return
        end
 
-       def listQueryGroup(query_type, distribution, status, last_id, group)
+       def listQueryGroup(doc, query_type, distribution, status, last_id, group)
 
                if(distribution == "ALL")
                        distribution = "%"
@@ -264,54 +298,47 @@ class JobsController < ApplicationController
                                                                  LIMIT #{QUERY_CNT}")
 
                #generate to XML
-               doc = Builder::XmlMarkup.new( :target => out_string = "", :indent => 2 )
-               doc.Response {
-                       generate_xml_header(doc)
-                       doc.Data {
-                               doc.JobList {
-                                       jobs.each {|job_list|
-                                               job = get_job_info(job_list.id)
-
-                                               doc.Job {
-                                                       doc.Id(job.job_id)
-                                                       doc.Distribution(job.distribution_name)
-                                                       doc.ProjectName(job.project_name)
-                                                       doc.JobType(job.job_type)
-                                                       doc.JobAttribute(job_list.job_attribute)
-                                                       doc.Os(job.supported_os_name)
-                                                       doc.Status(job.status)
-                                                       doc.UserName(job.user_name)
-                                                       doc.StartTime(job.start_time)
-                                                       doc.EndTime(job.end_time)
-                                               }
+               doc.Data {
+                       doc.JobList {
+                               jobs.each {|job_list|
+                                       job = get_job_info(job_list.id)
+
+                                       doc.Job {
+                                               doc.Id(job.job_id)
+                                               doc.Distribution(job.distribution_name)
+                                               doc.ProjectName(job.project_name)
+                                               doc.JobType(job.job_type)
+                                               doc.JobAttribute(job_list.job_attribute)
+                                               doc.Os(job.supported_os_name)
+                                               doc.Status(job.status)
+                                               doc.UserName(job.user_name)
+                                               doc.StartTime(job.start_time)
+                                               doc.EndTime(job.end_time)
+                                       }
 
-                                               if job_list.job_attribute == "MULTI"
-                                                       child_jobs = get_child_job_info(job.job_id)
-                                                       child_jobs.each {|job|
-                                                               doc.Job {
-                                                                       doc.Id(job.job_id)
-                                                                       doc.Distribution(job.distribution_name)
-                                                                       doc.ProjectName(job.project_name)
-                                                                       doc.JobType(job.job_type)
-                                                                       doc.JobAttribute("CHILD")
-                                                                       doc.Os(job.supported_os_name)
-                                                                       doc.Status(job.status)
-                                                                       doc.UserName(job.user_name)
-                                                                       doc.StartTime(job.start_time)
-                                                                       doc.EndTime(job.end_time)
-                                                               }
+                                       if job_list.job_attribute == "MULTI"
+                                               child_jobs = get_child_job_info(job.job_id)
+                                               child_jobs.each {|job|
+                                                       doc.Job {
+                                                               doc.Id(job.job_id)
+                                                               doc.Distribution(job.distribution_name)
+                                                               doc.ProjectName(job.project_name)
+                                                               doc.JobType(job.job_type)
+                                                               doc.JobAttribute("CHILD")
+                                                               doc.Os(job.supported_os_name)
+                                                               doc.Status(job.status)
+                                                               doc.UserName(job.user_name)
+                                                               doc.StartTime(job.start_time)
+                                                               doc.EndTime(job.end_time)
                                                        }
-                                               end
-                                       }
+                                               }
+                                       end
                                }
                        }
                }
-       
-               render :text => out_string, :content_type => "text/xml"
-               return
        end
 
-       def listQueryProject(query_type, distribution, status, last_id, project)
+       def listQueryProject(doc, query_type, distribution, status, last_id, project)
                if(distribution == "ALL")
                        distribution = "%"
                end
@@ -365,33 +392,26 @@ class JobsController < ApplicationController
                                                          LIMIT #{QUERY_CNT}")
 
                #generate to XML
-               doc = Builder::XmlMarkup.new( :target => out_string = "", :indent => 2 )
-               doc.Response {
-                       generate_xml_header(doc)
-                       doc.Data {
-                               doc.JobList {
-                                       jobs.each {|job_list|
-                                               job = get_job_info(job_list.id)
-
-                                               doc.Job {
-                                                       doc.Id(job.job_id)
-                                                       doc.Distribution(job.distribution_name)
-                                                       doc.ProjectName(job.project_name)
-                                                       doc.JobType(job.job_type)
-                                                       doc.JobAttribute(job_list.job_attribute)
-                                                       doc.Os(job.supported_os_name)
-                                                       doc.Status(job.status)
-                                                       doc.UserName(job.user_name)
-                                                       doc.StartTime(job.start_time)
-                                                       doc.EndTime(job.end_time)
-                                               }
+               doc.Data {
+                       doc.JobList {
+                               jobs.each {|job_list|
+                                       job = get_job_info(job_list.id)
+
+                                       doc.Job {
+                                               doc.Id(job.job_id)
+                                               doc.Distribution(job.distribution_name)
+                                               doc.ProjectName(job.project_name)
+                                               doc.JobType(job.job_type)
+                                               doc.JobAttribute(job_list.job_attribute)
+                                               doc.Os(job.supported_os_name)
+                                               doc.Status(job.status)
+                                               doc.UserName(job.user_name)
+                                               doc.StartTime(job.start_time)
+                                               doc.EndTime(job.end_time)
                                        }
                                }
                        }
                }
-       
-               render :text => out_string, :content_type => "text/xml"
-               return
        end
 
        def get_job_info(job_id)
@@ -467,11 +487,6 @@ class JobsController < ApplicationController
                return job
        end
 
-       def log
-               @id = params[:id]
-       puts @id
-       end
-
        def log_more
                @cursor = nil
                @file = nil
index a4e0f36a014f79ef8b316251b5e909b4ed6d7ef6..5d2eec8728144174d74f3f102cb94e05ef41e0eb 100644 (file)
@@ -58,13 +58,7 @@ Dibs::Application.routes.draw do
     get "jobs/list/project/:project/:distribution/:status/:lastID" => "jobs#listSearchProject" , :constraints => { :project => /[0-9A-Za-z\-\.]+/ }
     get "jobs/list/date/:date/:distribution/:status/:lastID" => "jobs#listSearchDate", :constraints => { :distribution => /[0-9A-Za-z\-\.\_]+/ }
 
-    get "jobs/updateList/all/:distribution/:status/:lastID" => "jobs#updateListAll", :constraints => { :distribution => /[0-9A-Za-z\-\.\_]+/ }
-    get "jobs/updateList/user/:user/:distribution/:status/:lastID" => "jobs#updateListSearchUser", :constraints => { :distribution => /[0-9A-Za-z\-\.\_]+/ }
-    get "jobs/updateList/group/:group/:distribution/:status/:lastID" => "jobs#updateListSearchGroup", :constraints => { :distribution => /[0-9A-Za-z\-\.\_]+/ }
-    get "jobs/updateList/project/:project/:distribution/:status/:lastID" => "jobs#updateListSearchProject" , :constraints => { :project => /[0-9A-Za-z\-\.]+/ }
-    get "jobs/updateList/date/:date/:distribution/:status/:lastID" => "jobs#updateListSearchDate", :constraints => { :distribution => /[0-9A-Za-z\-\.\_]+/ }
-
-       match "jobs/jobInfo/:id" => "jobs#jobInfo"
+       match "jobs/update" => "jobs#updateList", :format => "json"
        match "jobs/log/:id" => "jobs#log"
        match "jobs/log/:id/:line" => "jobs#log_more"
        match "jobs/cancel/:id" => "jobs#cancelJob"
index 25e0fad4e7c729d52be9b0bbff7560b9707c3098..9802a7190c2a6d3a3345748c7b25a7a6414b4c93 100644 (file)
@@ -87,11 +87,10 @@ function queryProjectsInfoInDistribution(distName, successFunction) {
 function queryJobsList(url, successFunction) {
        return getInfoFromServer(url, successFunction);
 }
-function updateJobsList(url, successFunction) {
-       return getInfoFromServerNoPreProcess(url, successFunction);
-}
-function updateJobsListStatus(url, successFunction) {
-       return getInfoFromServerNoPreProcess(url, successFunction);
+function updateList(data, successFunction) {
+       var url = "jobs/update";
+       var param = $.param(data);
+       return getInfoFromServerData(url, param, successFunction);
 }
 function queryJobsLog(job_id, next_line, successFunction) {
        var url = "jobs/log/"+ job_id + "/" + next_line;
@@ -317,6 +316,24 @@ function getInfoFromServerNoPreProcess(url, successFunction) {
        });
 }
 
+function getInfoFromServerData(url, data, successFunction) {
+       return $.ajax({
+               url: baseUrl+url,
+               type: 'GET',
+               dataType: 'xml',
+               text: 'JSONP',
+               data: data,
+               timeout: 10000,
+               success: function(xml) {
+                       setSessionInfo(xml);
+                       successFunction(xml);
+               },
+               error: function(jqXHR) {
+                       errorProcess(jqXHR);
+               }
+       });
+}
+
 function postForServer(url, changeInfoList, successFunction) {
        $.ajax({
                url: baseUrl+url,
index 8406cff261db6b4e8a5d3fe13eb2e641eb623541..18bff2eca1335e35bbb93a91f12f158feef50918 100644 (file)
@@ -31,39 +31,6 @@ var update_ajax;
 var request_list = new Array();
 var request_idx = 0;
 
-function classAjax() {
-       var polling = false;
-       var ajaxObj = undefined;
-}
-
-function addRequestList(ajaxObj) {
-       var class_ajax = new classAjax();
-       class_ajax.polling = true;
-       class_ajax.ajaxObj = ajaxObj;
-       
-       return request_list.push(class_ajax) - 1;
-}
-
-function clearRequestList() {
-       while(request_list.length > 0) {
-               var last_request = request_list[request_list.length - 1];
-               if(last_request.polling == true && last_request.ajaxObj != undefined) {
-                       last_request.ajaxObj.abort();
-               }
-               request_list.pop();
-       }
-       console.log("Clear all update.");
-}
-
-function isPolling(idx) {
-       if(request_list[idx] != undefined) {
-               return request_list[idx].polling;
-       }
-       else {
-               return false;
-       }
-}
-
 $(function() {
        $('#jobSearchSelect input[type="radio"]').checkboxradio().click(function() {
                jobsSearchSelected();
@@ -270,38 +237,38 @@ function clearJobList() {
 }
 
 function queryJobListAll(distribution) {
-       queryJobListByButton("all", distribution, "LATEST");
+       queryJobListByButton("all", "", distribution, "LATEST");
 }
 
 function queryJobListJobId(distribution, jobId) {
-       queryJobListByButton("all", distribution, eval(parseInt(jobId) + 1));
+       queryJobListByButton("all", "", distribution, eval(parseInt(jobId) + 1));
 }
 function queryJobListUserName(distribution, name) {
        var encodingName = encodeURIComponent(name);
-       queryJobListByButton("user/"+encodingName, distribution, "LATEST");
+       queryJobListByButton("user", encodingName, distribution, "LATEST");
 }
 
 function queryJobListUserGroup(distribution, group) {
-       queryJobListByButton("group/"+group, distribution, "LATEST");
+       queryJobListByButton("group", group, distribution, "LATEST");
 }
 
 function queryJobListProject(distribution, project) {
-       queryJobListByButton("project/"+project, distribution, "LATEST");
+       queryJobListByButton("project", project, distribution, "LATEST");
 }
 
 function queryJobListDate(distribution, date) {
-       queryJobListByButton("date/"+date, distribution, "LATEST");
+       queryJobListByButton("date", date, distribution, "LATEST");
 }
 
-function queryJobListByButton(condition, distribution, jobId) {
+function queryJobListByButton(condition, param, distribution, jobId) {
        clearJobList();
        clearRequestList();
        var selectedStatus= $('#jobStatusSelect').find("input[type='radio']:checked").val();
-       var request = queryJobList("jobs/list", condition, distribution, selectedStatus, jobId);
+       var request = queryJobList("jobs/list", condition, param, distribution, selectedStatus, jobId);
        if(request != undefined) {
                request.done(function() {
                        console.log("Start update");
-                       updateJobList(condition, distribution, selectedStatus);
+                       jobUpdateList(condition, param, distribution, selectedStatus);
                });
        }
 }
@@ -330,9 +297,15 @@ function jobQueryDistribution() {
        }
 }
 
-function queryJobList(requestUrl, condition, queryDistribution, selectedStatus, jobId) {
-       var url = requestUrl+"/"+condition+"/"+queryDistribution+"/"+selectedStatus+"/"+jobId;
-       console.log(url);
+function queryJobList(requestUrl, condition, param, queryDistribution, selectedStatus, jobId) {
+       var url = "";
+       if(condition == "all") {
+               url = requestUrl+"/"+condition+"/"+queryDistribution+"/"+selectedStatus+"/"+jobId;
+       }
+       else {
+               url = requestUrl+"/"+condition+"/"+param+"/"+queryDistribution+"/"+selectedStatus+"/"+jobId;
+       }
+       console.log("url :"+url);
        return queryJobsList(url, function(xml) {
                var lastJobId = 0;
                $(xml).find("JobList").find("Job").each(function(){
@@ -343,9 +316,11 @@ function queryJobList(requestUrl, condition, queryDistribution, selectedStatus,
                        $("#jobList").append(li).listview('refresh');
                });
 
+               console.log("last job id :"+lastJobId);
                if(lastJobId > 0)
                {
-                       var moreJobListUrl = 'queryJobList("'+requestUrl+'", "'+condition+'","'+queryDistribution+'", "'+selectedStatus+'", "'+lastJobId+'")';
+                       var moreJobListUrl = 'queryJobList("'+requestUrl+'", "'+condition+'", "'+param+'", "'+queryDistribution+'", "'+selectedStatus+'", "'+lastJobId+'")';
+                       console.log(moreJobListUrl);
                        $('#moreJobList').attr("onClick", moreJobListUrl);
                        $('#moreJobList').removeClass('ui-disabled');
                }
@@ -359,33 +334,15 @@ function queryJobList(requestUrl, condition, queryDistribution, selectedStatus,
        }, errorProcess); 
 }
 
-function updateJobList(condition, distribution, selectedStatus) {
+function jobUpdateList(condition, param, distribution, selectedStatus) {
        var latest_job_id= $("#jobList li").first().attr("title");
        if(latest_job_id == undefined) {
                latest_job_id = 0;
        }
-       update_ajax = queryUpdateJobList("jobs/updateList", condition, distribution, selectedStatus, latest_job_id);
+       var working_job_list = searchWorkingList();
+       item = {"Condition":condition, "Param":param, "Distribution":distribution, "Status":selectedStatus, "LatestId":latest_job_id, "WorkingJobId":working_job_list};
 
-       var idx = addRequestList(update_ajax);
-
-       console.log("Update done. Next request in 2sec.");
-       update_ajax.done(function() {
-               setTimeout(function(){
-                       if(isPolling(idx) && $.mobile.activePage.attr('id') == "jobs" && idx < 900) {
-                               console.log("Update request.");
-                               request_list[idx].polling = false;
-                               updateJobList(condition, distribution, selectedStatus);
-                       }
-                       else {
-                               console.log("Stop update.");
-                       }
-               }, 2000);
-       });
-}
-
-function queryUpdateJobList(requestUrl, condition, queryDistribution, selectedStatus, latest_job_id) {
-       var url = requestUrl+"/"+condition+"/"+queryDistribution+"/"+selectedStatus+"/"+latest_job_id;
-       return updateJobsList(url, function(xml) {
+       var update_ajax = updateList(item, function(xml) {
                var firstLi= $("#jobList li").first();
 
                $(xml).find("JobList").find("Job").each(function(){
@@ -394,58 +351,53 @@ function queryUpdateJobList(requestUrl, condition, queryDistribution, selectedSt
 
                        $(li).insertBefore(firstLi);
                        $("#jobList").listview('refresh');
+                       console.log("ADD List :"+id);
                });
-       });
-}
-
-function updateJobListStatus(jobId, id) {
-       update_ajax = queryUpdateJobListStatus(jobId, id);
-       var idx = addRequestList(update_ajax);
 
-       update_ajax.success(function(xml) {
-               var jobStatus = $(xml).find("Data").find("Status").text();
-               var font_color = "black";
-               var update = false;
+               $(xml).find("WorkingJobList").find("Job").each(function(){
+                       console.log($(this).text());
+                       var job_id = $(this).find("Id").text();
+                       var job_status = $(this).find("Status").text();
+                       var font_color = "black";
 
-               switch(jobStatus)
-               {
-                       case "ERROR" :
-                       case "CANCELED" :
-                               font_color = "red";
-                               update = false;
-                               break;
-                       case "INITIALIZING" :
-                       case "JUST_CREATED" :
-                       case "PENDING" :
-                       case "WORKING" :
-                       case "REMOTE_WORKING" :
-                               font_color = "blue";
-                               update = true;
-                               break;
-                       case "WAITING" :
-                               font_color = "green";
-                               update = true;
-                               break;
-                       case "FINISHED" :
-                               font_color = "black";
-                               update = false;
-                               break;
-                       default:
-                               console.error(job_status+" status is not define.");
-                               font_color = "black";
-                               update = false;
-                               break;
-               }
-               html = '<strong><font color="'+font_color+'">'+jobStatus+'</strong>';
-               $("#"+id).html(html);
+                       switch(job_status)
+                       {
+                               case "ERROR" :
+                               case "CANCELED" :
+                                       font_color = "red";
+                                       break;
+                               case "INITIALIZING" :
+                               case "JUST_CREATED" :
+                               case "PENDING" :
+                               case "WORKING" :
+                               case "REMOTE_WORKING" :
+                                       font_color = "blue";
+                                       break;
+                               case "WAITING" :
+                                       font_color = "green";
+                                       break;
+                               case "FINISHED" :
+                                       font_color = "black";
+                                       break;
+                               default:
+                                       console.error(job_status+" status is not define.");
+                                       font_color = "black";
+                                       break;
+                       }
+                       html = '<strong><font color="'+font_color+'">'+job_status+'</strong>';
+                       $("#jobs-li-"+job_id).html(html);
+                       console.log("UPDATE List :"+job_id);
+               });
+       });
 
+       var idx = addRequestList(update_ajax);
+       update_ajax.done(function() {
+               console.log("update complete. retry in 2 sec.");
                setTimeout(function(){
-                       var jobStatus = $(xml).find("Data").find("Status").text();
-                       console.log(jobStatus);
-                       if(update && isPolling(idx) && $.mobile.activePage.attr('id') == "jobs" && idx < 900) {
+                       if(isPolling(idx) && $.mobile.activePage.attr('id') == "jobs" && idx < 900) {
                                console.log("Update request.");
                                request_list[idx].polling = false;
-                               updateJobListStatus(jobId, id);
+                               jobUpdateList(condition, param, distribution, selectedStatus);
                        }
                        else {
                                console.log("Stop update.");
@@ -454,12 +406,6 @@ function updateJobListStatus(jobId, id) {
        });
 }
 
-function queryUpdateJobListStatus(jobId, id) {
-       var url = "jobs/jobInfo/"+jobId;
-       console.log("update url: "+url);
-       return updateJobsListStatus(url, function(xml) { });
-}
-
 function clearSuggestJobSearchList() {
        $("#jobSearchList").empty();
 }
@@ -562,14 +508,12 @@ function generateHtmlJobList(xml) {
        var endTime = xml.find("EndTime").text();
        var li = "";
        var font_color = "black";
-       var update = false;
 
        switch(jobStatus)
        {
                case "ERROR" :
                case "CANCELED" :
                        font_color = "red";
-                       update = false;
                        break;
                case "INITIALIZING" :
                case "JUST_CREATED" :
@@ -577,20 +521,16 @@ function generateHtmlJobList(xml) {
                case "WORKING" :
                case "REMOTE_WORKING" :
                        font_color = "blue";
-                       update = true;
                        break;
                case "WAITING" :
                        font_color = "green";
-                       update = true;
                        break;
                case "FINISHED" :
                        font_color = "black";
-                       update = false;
                        break;
                default:
                        console.error(job_status+" status is not define.");
                        font_color = "black";
-                       update = false;
                        break;
        }
 
@@ -609,7 +549,7 @@ function generateHtmlJobList(xml) {
                         li = li + '<p>DISTRIBUTION: <strong>' +distribution+ '</strong></p>';
                        }
                         
-                       li = li + '<p id="jobs-li-'+id+'" class="ui-li-aside"><strong><font color="'+font_color+'">'+jobStatus+'</strong></p>';
+                       li = li + '<p id="jobs-li-'+id+'" class="ui-li-aside jobs-list-status" title="'+id+'"><strong><font color="'+font_color+'">'+jobStatus+'</strong></p>';
                        li = li + '</a></li>';
        }
        else if(jobAttribute == "MULTI")
@@ -622,7 +562,7 @@ function generateHtmlJobList(xml) {
                         li = li + '<p>DISTRIBUTION: <strong>' +distribution+ '</strong></p>';
                        }
                        
-                       li = li + '<p id="jobs-li-'+id+'" class="ui-li-aside"><strong><font color="'+font_color+'">'+jobStatus+'</strong></p>';
+                       li = li + '<p id="jobs-li-'+id+'" class="ui-li-aside jobs-list-status" title="'+id+'"><strong><font color="'+font_color+'">'+jobStatus+'</strong></p>';
                        li = li + '</a></li>';
        }
        else if(jobAttribute == "CHILD")
@@ -634,14 +574,66 @@ function generateHtmlJobList(xml) {
                        + '<p>OS : <strong>' +os+ '</strong></p>'
                        + '<p>TIME: <strong>' +startTime+ ' ~ '+endTime+ '</strong></p>';
                        
-                       li = li + '<p id="jobs-li-'+id+'" class="ui-li-aside"><strong><font color="'+font_color+'">'+jobStatus+'</strong></p>';
+                       li = li + '<p id="jobs-li-'+id+'" class="ui-li-aside jobs-list-status" title="'+id+'"><strong><font color="'+font_color+'">'+jobStatus+'</strong></p>';
                        li = li + '</a></li>';
        }
 
-       if(update) {
-               updateJobListStatus(id, "jobs-li-"+id);
+       return li;
+}
+
+function searchWorkingList() {
+       working_job_array = new Array();
+       $("#jobList .jobs-list-status").each(function(index) {
+               var job_status = $(this).text();
+               var job_id = $(this).attr("title");
+               switch(job_status)
+               {
+                       case "INITIALIZING" :
+                       case "JUST_CREATED" :
+                       case "PENDING" :
+                       case "WORKING" :
+                       case "REMOTE_WORKING" :
+                       case "WAITING" :
+                               working_job_array.push(job_id);
+                               break;
+                       default:
+                               break;
+               }
+       });
+       return working_job_array;
+}
+
+/* For background update AJAX */
+function classAjax() {
+       var polling = false;
+       var ajaxObj = undefined;
+}
+
+function addRequestList(ajaxObj) {
+       var class_ajax = new classAjax();
+       class_ajax.polling = true;
+       class_ajax.ajaxObj = ajaxObj;
+       
+       return request_list.push(class_ajax) - 1;
+}
+
+function clearRequestList() {
+       while(request_list.length > 0) {
+               var last_request = request_list[request_list.length - 1];
+               if(last_request.polling == true && last_request.ajaxObj != undefined) {
+                       last_request.ajaxObj.abort();
+               }
+               request_list.pop();
        }
+       console.log("Clear all update.");
+}
 
-       return li;
+function isPolling(idx) {
+       if(request_list[idx] != undefined) {
+               return request_list[idx].polling;
+       }
+       else {
+               return false;
+       }
 }