package autotest.afe; import java.util.ArrayList; import java.util.List; public class RadioChooser { public static interface Display { public IRadioButton generateRadioButton(String groupName, String choice); } private static int groupNameCounter = 0; private String groupName = getFreshGroupName(); private List radioButtons = new ArrayList(); private IRadioButton defaultButton; private Display display; public void bindDisplay(Display display) { this.display = display; } private static String getFreshGroupName() { groupNameCounter++; return "group" + Integer.toString(groupNameCounter); } public void addChoice(String choice) { IRadioButton button = display.generateRadioButton(groupName, choice); if (radioButtons.isEmpty()) { // first button in this group defaultButton = button; button.setValue(true); } radioButtons.add(button); } public String getSelectedChoice() { for (IRadioButton button : radioButtons) { if (button.getValue()) { return button.getText(); } } throw new RuntimeException("No radio button selected"); } public void reset() { if (defaultButton != null) { defaultButton.setValue(true); } } public void setDefaultChoice(String defaultChoice) { defaultButton = findButtonForChoice(defaultChoice); } public void setSelectedChoice(String choice) { findButtonForChoice(choice).setValue(true); } private IRadioButton findButtonForChoice(String choice) { for (IRadioButton button : radioButtons) { if (button.getText().equals(choice)) { return button; } } throw new RuntimeException("No such choice found: " + choice); } }