This patch didn't work. Attaching new patch

On Fri, May 14, 2010 at 2:04 PM, James Ren <[email protected]> wrote:

> Add filter on locked_by user on AFE host lists
>
> Signed-off-by: James Ren <[email protected]>
>
> --- autotest/frontend/client/src/autotest/afe/HostTableDecorator.java
> 2010-05-14 14:04:10.000000000 -0700
> +++ autotest/frontend/client/src/autotest/afe/HostTableDecorator.java
> 2010-05-14 14:04:10.000000000 -0700
> @@ -1,5 +1,6 @@
>  package autotest.afe;
>
> +import autotest.common.SimpleCallback;
>  import autotest.common.StaticDataRepository;
>  import autotest.common.Utils;
>  import autotest.common.table.BooleanFilter;
> @@ -10,20 +11,25 @@
>
>  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.json.client.JSONValue;
>
> -class HostTableDecorator extends TableDecorator {
> +import java.util.ArrayList;
> +import java.util.List;
> +
> +class HostTableDecorator extends TableDecorator implements SimpleCallback
> {
>     SearchFilter hostnameFilter;
>     LabelFilter labelFilter;
>     ListFilter statusFilter;
>     BooleanFilter lockedFilter;
> +    ListFilter lockedByFilter;
>     AclAccessibleFilter aclFilter;
>     AtomicGroupFilter excludeAtomicGroupsFilter;
> -
> +
>     static class AclAccessibleFilter extends CheckboxFilter {
>         private JSONValue username;
> -
> +
>         public AclAccessibleFilter() {
>             super("aclgroup__users__login");
>             username = new
> JSONString(StaticDataRepository.getRepository().getCurrentUserLogin());
> @@ -34,7 +40,7 @@
>             return username;
>         }
>     }
> -
> +
>     static class AtomicGroupFilter extends CheckboxFilter {
>         public AtomicGroupFilter() {
>             super("exclude_atomic_group_hosts");
> @@ -45,31 +51,58 @@
>             return JSONBoolean.getInstance(true);
>         }
>     }
> -
> +
>     public HostTableDecorator(HostTable table, int rowsPerPage) {
>         super(table);
>         table.sortOnColumn("hostname");  /* Case sensitive name */
>         table.setRowsPerPage(rowsPerPage);
>         addPaginators();
> -
> +
>         StaticDataRepository staticData =
> StaticDataRepository.getRepository();
>         JSONArray statuses = staticData.getData("host_statuses").isArray();
>         String[] statusStrings = Utils.JSONtoStrings(statuses);
> -
> +
> +        JSONArray users = staticData.getData("users").isArray();
> +        List<String> userStrings = new ArrayList<String>();
> +        for (int i = 0; i < users.size(); i++) {
> +            JSONObject user = users.get(i).isObject();
> +            userStrings.add(Utils.jsonToString(user.get("login")));
> +        }
> +
>         hostnameFilter = new SearchFilter("hostname", true);
>         labelFilter = new LabelFilter();
>         statusFilter = new ListFilter("status");
>         statusFilter.setChoices(statusStrings);
>         lockedFilter = new BooleanFilter("locked");
> +        lockedByFilter = new ListFilter("locked_by__login");
> +        lockedByFilter.setChoices(userStrings.toArray(new
> String[userStrings.size()]));
>         aclFilter = new AclAccessibleFilter();
>         excludeAtomicGroupsFilter = new AtomicGroupFilter();
> -
> +
> +        updateLockedByEnabled();
> +        lockedFilter.addCallback(this);
> +
>         addFilter("Hostname", hostnameFilter);
>         addControl("Platform", labelFilter.getPlatformWidget());
>         addFilter("Label", labelFilter);
>         addFilter("Status", statusFilter);
>         addFilter("Locked", lockedFilter);
> +        addFilter("Locked By", lockedByFilter);
>         addFilter("ACL accessible only", aclFilter);
>         addFilter("Exclude atomic groups", excludeAtomicGroupsFilter);
>     }
> +
> +    @Override
> +    public void doCallback(Object source) {
> +        assert source == lockedFilter;
> +        updateLockedByEnabled();
> +    }
> +
> +    private void updateLockedByEnabled() {
> +        if (lockedFilter.isActive() && lockedFilter.isSelected()) {
> +            lockedByFilter.setEnabled(true);
> +        } else {
> +            lockedByFilter.setEnabled(false);
> +        }
> +    }
>  }
> --- autotest/frontend/client/src/autotest/common/table/BooleanFilter.java
>     2010-05-14 14:04:10.000000000 -0700
> +++ autotest/frontend/client/src/autotest/common/table/BooleanFilter.java
>     2010-05-14 14:04:10.000000000 -0700
> @@ -5,7 +5,7 @@
>
>  public class BooleanFilter extends ListFilter {
>     private static final String[] choices = {"Yes", "No"};
> -
> +
>     public BooleanFilter(String fieldName) {
>         super(fieldName);
>         setChoices(choices);
> @@ -16,4 +16,8 @@
>         String selected = getSelectedText();
>         params.put(fieldName,
> JSONBoolean.getInstance(selected.equals("Yes")));
>     }
> +
> +    public boolean isSelected() {
> +        return getSelectedText().equals("Yes");
> +    }
>  }
> --- autotest/frontend/client/src/autotest/common/table/ListFilter.java
>  2010-05-14 14:04:10.000000000 -0700
> +++ autotest/frontend/client/src/autotest/common/table/ListFilter.java
>  2010-05-14 14:04:10.000000000 -0700
> @@ -10,7 +10,7 @@
>  public class ListFilter extends FieldFilter {
>     protected ListBox select;
>     protected String allValuesText = "All values";
> -
> +
>     public ListFilter(String fieldName) {
>         super(fieldName);
>         select = new ListBox(isMultipleSelect());
> @@ -18,10 +18,10 @@
>         select.addChangeHandler(new ChangeHandler() {
>             public void onChange(ChangeEvent event) {
>                 notifyListeners();
> -            }
> +            }
>         });
>     }
> -
> +
>     /**
>      * Subclasses should override this if they wish to use a multi-select
> listbox
>      * @return true if and only if the listbox should be multiple select
> @@ -29,42 +29,44 @@
>     protected boolean isMultipleSelect() {
>         return false;
>     }
> -
> +
>     /**
>      * Set the text for that option that matches any value for this filter.
>      */
>     public void setMatchAllText(String text) {
>         allValuesText = text;
> -        if (select.getItemCount() > 0)
> +        if (select.getItemCount() > 0) {
>             select.setItemText(0, allValuesText);
> +        }
>     }
> -
> +
>     @Override
>     public void setExactMatch(boolean isExactMatch) {
>         this.isExactMatch = isExactMatch;
>     }
> -
> +
>     protected String getItemText(int index) {
>         return select.getItemText(index);
>     }
> -
> +
>     protected String getSelectedText() {
>         int selected = select.getSelectedIndex();
> -        if (selected == -1)
> +        if (selected == -1) {
>             return "";
> +        }
>         return getItemText(selected);
>     }
>
>     @Override
>     public JSONValue getMatchValue() {
> -        return new JSONString(getSelectedText());
> +        return new JSONString(getSelectedText());
>     }
> -
> +
>     @Override
>     public boolean isActive() {
> -        return !getSelectedText().equals(allValuesText);
> +        return select.isEnabled() &&
> !getSelectedText().equals(allValuesText);
>     }
> -
> +
>     @Override
>     public Widget getWidget() {
>         return select;
> @@ -72,19 +74,21 @@
>
>     public void setChoices(String[] choices) {
>         String selectedValue = null;
> -        if (select.getSelectedIndex() != -1)
> +        if (select.getSelectedIndex() != -1) {
>             selectedValue = getSelectedText();
> -
> +        }
> +
>         select.clear();
>         select.addItem(allValuesText);
> -        for (int i = 0; i < choices.length; i++)
> +        for (int i = 0; i < choices.length; i++) {
>             select.addItem(choices[i]);
> -
> +        }
> +
>         if (selectedValue != null) {
>             setSelectedChoice(selectedValue);
>         }
>     }
> -
> +
>     public void setSelectedChoice(String choice) {
>         for(int i = 0; i < select.getItemCount(); i++) {
>             if(select.getItemText(i).equals(choice)) {
> @@ -92,8 +96,12 @@
>                 return;
>             }
>         }
> -
> +
>         select.addItem(choice);
>         select.setSelectedIndex(select.getItemCount() - 1);
>     }
> +
> +    public void setEnabled(boolean enabled) {
> +        select.setEnabled(enabled);
> +    }
>  }
> \ No newline at end of file
>
Index: autotest/frontend/client/src/autotest/common/table/ListFilter.java
===================================================================
--- autotest/frontend/client/src/autotest/common/table/ListFilter.java	(revision 4497)
+++ autotest/frontend/client/src/autotest/common/table/ListFilter.java	(working copy)
@@ -10,7 +10,7 @@
 public class ListFilter extends FieldFilter {
     protected ListBox select;
     protected String allValuesText = "All values";
-    
+
     public ListFilter(String fieldName) {
         super(fieldName);
         select = new ListBox(isMultipleSelect());
@@ -18,10 +18,10 @@
         select.addChangeHandler(new ChangeHandler() {
             public void onChange(ChangeEvent event) {
                 notifyListeners();
-            } 
+            }
         });
     }
-    
+
     /**
      * Subclasses should override this if they wish to use a multi-select listbox
      * @return true if and only if the listbox should be multiple select
@@ -29,42 +29,44 @@
     protected boolean isMultipleSelect() {
         return false;
     }
-    
+
     /**
      * Set the text for that option that matches any value for this filter.
      */
     public void setMatchAllText(String text) {
         allValuesText = text;
-        if (select.getItemCount() > 0)
+        if (select.getItemCount() > 0) {
             select.setItemText(0, allValuesText);
+        }
     }
-    
+
     @Override
     public void setExactMatch(boolean isExactMatch) {
         this.isExactMatch = isExactMatch;
     }
-    
+
     protected String getItemText(int index) {
         return select.getItemText(index);
     }
-    
+
     protected String getSelectedText() {
         int selected = select.getSelectedIndex();
-        if (selected == -1)
+        if (selected == -1) {
             return "";
+        }
         return getItemText(selected);
     }
 
     @Override
     public JSONValue getMatchValue() {
-        return new JSONString(getSelectedText()); 
+        return new JSONString(getSelectedText());
     }
-    
+
     @Override
     public boolean isActive() {
-        return !getSelectedText().equals(allValuesText);
+        return select.isEnabled() && !getSelectedText().equals(allValuesText);
     }
-    
+
     @Override
     public Widget getWidget() {
         return select;
@@ -72,19 +74,21 @@
 
     public void setChoices(String[] choices) {
         String selectedValue = null;
-        if (select.getSelectedIndex() != -1)
+        if (select.getSelectedIndex() != -1) {
             selectedValue = getSelectedText();
-        
+        }
+
         select.clear();
         select.addItem(allValuesText);
-        for (int i = 0; i < choices.length; i++)
+        for (int i = 0; i < choices.length; i++) {
             select.addItem(choices[i]);
-        
+        }
+
         if (selectedValue != null) {
             setSelectedChoice(selectedValue);
         }
     }
-    
+
     public void setSelectedChoice(String choice) {
         for(int i = 0; i < select.getItemCount(); i++) {
             if(select.getItemText(i).equals(choice)) {
@@ -92,8 +96,12 @@
                 return;
             }
         }
-        
+
         select.addItem(choice);
         select.setSelectedIndex(select.getItemCount() - 1);
     }
+
+    public void setEnabled(boolean enabled) {
+        select.setEnabled(enabled);
+    }
 }
\ No newline at end of file
Index: autotest/frontend/client/src/autotest/common/table/BooleanFilter.java
===================================================================
--- autotest/frontend/client/src/autotest/common/table/BooleanFilter.java	(revision 4497)
+++ autotest/frontend/client/src/autotest/common/table/BooleanFilter.java	(working copy)
@@ -5,7 +5,7 @@
 
 public class BooleanFilter extends ListFilter {
     private static final String[] choices = {"Yes", "No"};
-    
+
     public BooleanFilter(String fieldName) {
         super(fieldName);
         setChoices(choices);
@@ -16,4 +16,8 @@
         String selected = getSelectedText();
         params.put(fieldName, JSONBoolean.getInstance(selected.equals("Yes")));
     }
+
+    public boolean isSelected() {
+        return getSelectedText().equals("Yes");
+    }
 }
Index: autotest/frontend/client/src/autotest/afe/HostTableDecorator.java
===================================================================
--- autotest/frontend/client/src/autotest/afe/HostTableDecorator.java	(revision 4497)
+++ autotest/frontend/client/src/autotest/afe/HostTableDecorator.java	(working copy)
@@ -1,5 +1,6 @@
 package autotest.afe;
 
+import autotest.common.SimpleCallback;
 import autotest.common.StaticDataRepository;
 import autotest.common.Utils;
 import autotest.common.table.BooleanFilter;
@@ -10,20 +11,25 @@
 
 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.json.client.JSONValue;
 
-class HostTableDecorator extends TableDecorator {
+import java.util.ArrayList;
+import java.util.List;
+
+class HostTableDecorator extends TableDecorator implements SimpleCallback {
     SearchFilter hostnameFilter;
     LabelFilter labelFilter;
     ListFilter statusFilter;
     BooleanFilter lockedFilter;
+    ListFilter lockedByFilter;
     AclAccessibleFilter aclFilter;
     AtomicGroupFilter excludeAtomicGroupsFilter;
-    
+
     static class AclAccessibleFilter extends CheckboxFilter {
         private JSONValue username;
-        
+
         public AclAccessibleFilter() {
             super("aclgroup__users__login");
             username = new JSONString(StaticDataRepository.getRepository().getCurrentUserLogin());
@@ -34,7 +40,7 @@
             return username;
         }
     }
-    
+
     static class AtomicGroupFilter extends CheckboxFilter {
         public AtomicGroupFilter() {
             super("exclude_atomic_group_hosts");
@@ -45,31 +51,58 @@
             return JSONBoolean.getInstance(true);
         }
     }
-    
+
     public HostTableDecorator(HostTable table, int rowsPerPage) {
         super(table);
         table.sortOnColumn("hostname");  /* Case sensitive name */
         table.setRowsPerPage(rowsPerPage);
         addPaginators();
-        
+
         StaticDataRepository staticData = StaticDataRepository.getRepository();
         JSONArray statuses = staticData.getData("host_statuses").isArray();
         String[] statusStrings = Utils.JSONtoStrings(statuses);
-        
+
+        JSONArray users = staticData.getData("users").isArray();
+        List<String> userStrings = new ArrayList<String>();
+        for (int i = 0; i < users.size(); i++) {
+            JSONObject user = users.get(i).isObject();
+            userStrings.add(Utils.jsonToString(user.get("login")));
+        }
+
         hostnameFilter = new SearchFilter("hostname", true);
         labelFilter = new LabelFilter();
         statusFilter = new ListFilter("status");
         statusFilter.setChoices(statusStrings);
         lockedFilter = new BooleanFilter("locked");
+        lockedByFilter = new ListFilter("locked_by__login");
+        lockedByFilter.setChoices(userStrings.toArray(new String[userStrings.size()]));
         aclFilter = new AclAccessibleFilter();
         excludeAtomicGroupsFilter = new AtomicGroupFilter();
-        
+
+        updateLockedByEnabled();
+        lockedFilter.addCallback(this);
+
         addFilter("Hostname", hostnameFilter);
         addControl("Platform", labelFilter.getPlatformWidget());
         addFilter("Label", labelFilter);
         addFilter("Status", statusFilter);
         addFilter("Locked", lockedFilter);
+        addFilter("Locked By", lockedByFilter);
         addFilter("ACL accessible only", aclFilter);
         addFilter("Exclude atomic groups", excludeAtomicGroupsFilter);
     }
+
+    @Override
+    public void doCallback(Object source) {
+        assert source == lockedFilter;
+        updateLockedByEnabled();
+    }
+
+    private void updateLockedByEnabled() {
+        if (lockedFilter.isActive() && lockedFilter.isSelected()) {
+            lockedByFilter.setEnabled(true);
+        } else {
+            lockedByFilter.setEnabled(false);
+        }
+    }
 }
_______________________________________________
Autotest mailing list
[email protected]
http://test.kernel.org/cgi-bin/mailman/listinfo/autotest

Reply via email to