1 package autotest.afe; 2 3 import autotest.common.StaticDataRepository; 4 import autotest.common.Utils; 5 import autotest.common.table.FieldFilter; 6 import autotest.common.ui.ExtendedListBox; 7 8 import com.google.gwt.event.dom.client.ChangeEvent; 9 import com.google.gwt.event.dom.client.ChangeHandler; 10 import com.google.gwt.event.logical.shared.ValueChangeEvent; 11 import com.google.gwt.event.logical.shared.ValueChangeHandler; 12 import com.google.gwt.json.client.JSONArray; 13 import com.google.gwt.json.client.JSONString; 14 import com.google.gwt.json.client.JSONValue; 15 import com.google.gwt.user.client.ui.HorizontalPanel; 16 import com.google.gwt.user.client.ui.Panel; 17 import com.google.gwt.user.client.ui.RadioButton; 18 import com.google.gwt.user.client.ui.VerticalPanel; 19 import com.google.gwt.user.client.ui.Widget; 20 21 22 public class JobOwnerFilter extends FieldFilter 23 implements ValueChangeHandler<Boolean>, ChangeHandler { 24 private static int nameCounter = 0; 25 26 private ExtendedListBox userList = new ExtendedListBox(); 27 private RadioButton allUsersRadio, selectUserRadio; 28 private Panel parentPanel; 29 JobOwnerFilter(String field)30 public JobOwnerFilter(String field) { 31 super(field); 32 String radioGroupName = getFreshName(); 33 allUsersRadio = new RadioButton(radioGroupName, "All users"); 34 selectUserRadio = new RadioButton(radioGroupName); 35 allUsersRadio.addValueChangeHandler(this); 36 selectUserRadio.addValueChangeHandler(this); 37 38 populateUserList(); 39 userList.addChangeHandler(this); 40 41 Panel selectUserPanel = new HorizontalPanel(); 42 selectUserPanel.add(selectUserRadio); 43 selectUserPanel.add(userList); 44 parentPanel = new VerticalPanel(); 45 parentPanel.add(allUsersRadio); 46 parentPanel.add(selectUserPanel); 47 48 selectUserRadio.setValue(true); 49 } 50 51 @Override 52 // radio button selection changes onValueChange(ValueChangeEvent<Boolean> event)53 public void onValueChange(ValueChangeEvent<Boolean> event) { 54 userList.setEnabled(event.getSource() == selectUserRadio); 55 notifyListeners(); 56 } 57 58 @Override 59 // user list changes onChange(ChangeEvent event)60 public void onChange(ChangeEvent event) { 61 notifyListeners(); 62 } 63 getFreshName()64 private static String getFreshName() { 65 nameCounter++; 66 return "JobOwnerFilter" + Integer.toString(nameCounter); 67 } 68 populateUserList()69 private void populateUserList() { 70 StaticDataRepository staticData = StaticDataRepository.getRepository(); 71 JSONArray userArray = staticData.getData("users").isArray(); 72 for (String user : Utils.JSONObjectsToStrings(userArray, "login")) { 73 userList.addItem(user); 74 } 75 String currentUser = staticData.getCurrentUserLogin(); 76 userList.selectByName(currentUser); 77 } 78 79 @Override getMatchValue()80 public JSONValue getMatchValue() { 81 assert selectUserRadio.getValue(); 82 return new JSONString(userList.getSelectedName()); 83 } 84 85 @Override getWidget()86 public Widget getWidget() { 87 return parentPanel; 88 } 89 90 @Override isActive()91 public boolean isActive() { 92 return selectUserRadio.getValue(); 93 } 94 } 95