1 package autotest.afe; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 public class RadioChooser { 7 public static interface Display { generateRadioButton(String groupName, String choice)8 public IRadioButton generateRadioButton(String groupName, String choice); 9 } 10 11 private static int groupNameCounter = 0; 12 private String groupName = getFreshGroupName(); 13 private List<IRadioButton> radioButtons = new ArrayList<IRadioButton>(); 14 private IRadioButton defaultButton; 15 16 private Display display; 17 bindDisplay(Display display)18 public void bindDisplay(Display display) { 19 this.display = display; 20 } 21 getFreshGroupName()22 private static String getFreshGroupName() { 23 groupNameCounter++; 24 return "group" + Integer.toString(groupNameCounter); 25 } 26 addChoice(String choice)27 public void addChoice(String choice) { 28 IRadioButton button = display.generateRadioButton(groupName, choice); 29 if (radioButtons.isEmpty()) { 30 // first button in this group 31 defaultButton = button; 32 button.setValue(true); 33 } 34 radioButtons.add(button); 35 } 36 getSelectedChoice()37 public String getSelectedChoice() { 38 for (IRadioButton button : radioButtons) { 39 if (button.getValue()) { 40 return button.getText(); 41 } 42 } 43 throw new RuntimeException("No radio button selected"); 44 } 45 reset()46 public void reset() { 47 if (defaultButton != null) { 48 defaultButton.setValue(true); 49 } 50 } 51 setDefaultChoice(String defaultChoice)52 public void setDefaultChoice(String defaultChoice) { 53 defaultButton = findButtonForChoice(defaultChoice); 54 } 55 setSelectedChoice(String choice)56 public void setSelectedChoice(String choice) { 57 findButtonForChoice(choice).setValue(true); 58 } 59 findButtonForChoice(String choice)60 private IRadioButton findButtonForChoice(String choice) { 61 for (IRadioButton button : radioButtons) { 62 if (button.getText().equals(choice)) { 63 return button; 64 } 65 } 66 throw new RuntimeException("No such choice found: " + choice); 67 } 68 } 69