ui: Add a job creation date filter to job list

We regularly get hammered by queries for jobs matching a certain name.
Almost no one wants to look at all jobs since the start of time. So, add
a job created filter that defaults to the last week.

BUG=chromium:685424
TEST=manual testing on local afe; verified that the resulting db queries
limit the job list search within the bounds given.

Change-Id: I5f2229b81e7511fb717409a7657d44f887b58fa2
Reviewed-on: https://chromium-review.googlesource.com/462120
Commit-Ready: Prathmesh Prabhu <pprabhu@chromium.org>
Tested-by: Prathmesh Prabhu <pprabhu@chromium.org>
Reviewed-by: Xixuan Wu <xixuan@chromium.org>
diff --git a/frontend/client/src/autotest/afe/JobListView.java b/frontend/client/src/autotest/afe/JobListView.java
index 1d416d7..d658228 100644
--- a/frontend/client/src/autotest/afe/JobListView.java
+++ b/frontend/client/src/autotest/afe/JobListView.java
@@ -2,6 +2,7 @@
 
 import autotest.common.SimpleCallback;
 import autotest.common.CustomHistory.HistoryToken;
+import autotest.common.table.DatetimeSegmentFilter;
 import autotest.common.table.Filter;
 import autotest.common.table.RadioButtonSetFilter;
 import autotest.common.table.SearchFilter;
@@ -17,6 +18,7 @@
 import com.google.gwt.json.client.JSONArray;
 import com.google.gwt.json.client.JSONBoolean;
 import com.google.gwt.json.client.JSONObject;
+import com.google.gwt.json.client.JSONString;
 import com.google.gwt.user.client.Command;
 import com.google.gwt.user.client.ui.HorizontalPanel;
 import com.google.gwt.user.client.ui.HTMLPanel;
@@ -54,6 +56,7 @@
     private JobTypeFilter jobTypeFilter;
     private Filter ownerFilter;
     private SearchFilter nameFilter;
+    private JobStartingDatetimeFilter startingDatetimeFilter;
     private SelectionManager selectionManager;
 
     interface JobSelectListener {
@@ -94,6 +97,26 @@
         }
     }
 
+    static class JobStartingDatetimeFilter extends DatetimeSegmentFilter {
+        @Override
+        public void addParams(JSONObject params) {
+            String start_time = startDatetimeBox.getText();
+            if (start_time == "") {
+                setStartTimeToPlaceHolderValue();
+                start_time = startDatetimeBox.getText();
+            }
+            params.put("created_on__gt", new JSONString(start_time));
+
+            String end_time = endDatetimeBox.getText();
+            if (start_time == "") {
+                setEndTimeToPlaceHolderValue();
+                end_time = endDatetimeBox.getText();
+            }
+            params.put("created_on__lt", new JSONString(end_time));
+        }
+
+    }
+
     public void abortSelectedJobs() {
         Set<JSONObject> selectedSet = selectionManager.getSelectedObjects();
         if (selectedSet.isEmpty()) {
@@ -114,7 +137,7 @@
             }
         });
     }
-    
+
     @Override
     public String getElementId() {
         return "job_list";
@@ -129,7 +152,7 @@
     public JobListView(JobSelectListener listener) {
         selectListener = listener;
     }
-    
+
     @Override
     public void initialize() {
         super.initialize();
@@ -144,22 +167,22 @@
 
             public void onTableRefreshed() {}
         });
-        
+
         tableDecorator = new TableDecorator(jobTable);
         tableDecorator.addPaginators();
         selectionManager = tableDecorator.addSelectionManager(false);
         jobTable.setWidgetFactory(selectionManager);
         tableDecorator.addTableActionsPanel(this, true);
         addWidget(tableDecorator, "job_table");
-        
+
         ownerFilter = new JobOwnerFilter("owner");
         jobTable.addFilter(ownerFilter);
         addWidget(ownerFilter.getWidget(), "user_list");
-        
+
         nameFilter = new SearchFilter("name", "Filter", false);
         jobTable.addFilter(nameFilter);
         addWidget(nameFilter.getWidget(), "jl_name_search");
-        
+
         jobStateFilter = new JobStateFilter();
         for (int i = 0; i < STATUS_RADIO_BUTTON_COUNT; i++)
             jobStateFilter.addRadioButon(statusRadioButtonLabels[i]);
@@ -188,6 +211,10 @@
                                    "Sub jobs: jobs with a parent jobs. "),
                   "job_type_tooltip");
         addWidget(jobTypeFilter.getWidget(), "job_type_controls");
+
+        startingDatetimeFilter = new JobStartingDatetimeFilter();
+        jobTable.addFilter(startingDatetimeFilter);
+        addWidget(startingDatetimeFilter.getWidget(), "job_starting_datetime_controls");
     }
 
     @Override
@@ -199,7 +226,7 @@
                       typeHistoryTokens[jobTypeFilter.getSelectedButtonIndex()]);
         return arguments;
     }
-    
+
     @Override
     public void handleHistoryArguments(Map<String, String> arguments) {
         String stateFilter = arguments.get("state_filter");
diff --git a/frontend/client/src/autotest/public/AfeClient.html b/frontend/client/src/autotest/public/AfeClient.html
index c94e5e3..ab1b1ea 100644
--- a/frontend/client/src/autotest/public/AfeClient.html
+++ b/frontend/client/src/autotest/public/AfeClient.html
@@ -52,6 +52,9 @@
           <tr>
             <td>Name:</td><td id="jl_name_search"></td>
           </tr>
+          <tr>
+            <td>Job starting time:</td><td id="job_starting_datetime_controls"></td>
+          </tr>
         </table>
         <div id="job_table"></div>
       </div>