1 4 package uk.ac.roe.antigen.textcomponents; 5 6 import java.io.BufferedInputStream ; 7 import java.io.DataInputStream ; 8 import java.io.IOException ; 9 import java.util.ArrayList ; 10 import java.util.Hashtable ; 11 import java.util.Iterator ; 12 import java.util.List ; 13 import java.util.Vector ; 14 import java.util.logging.Logger ; 15 16 import org.apache.tools.ant.Project; 17 import org.apache.tools.ant.Target; 18 19 import sun.rmi.runtime.Log; 20 import uk.ac.roe.antigen.builder.TargetChooser; 21 import uk.ac.roe.antigen.utils.Config; 22 23 28 public class TextTargetChooser implements TargetChooser { 29 32 private static final Logger logger = Logger.getLogger(TextTargetChooser.class.getName()); 33 34 35 38 public static void main(String [] args) { 39 Config.load("/config.properties"); 40 Config.setProperty(ANTIGEN_TARGETS, "foo,bar,not,eek"); 41 Config.setProperty(ANTIGEN_TARGET_ + "foo.selected", "true"); 42 Config.setProperty(ANTIGEN_TARGET_ + "bar.selected", "false"); 43 Config.setProperty(ANTIGEN_TARGET_ + "not.selected", "true"); 44 45 Project project2 = new Project(); 46 Target target = new Target(); 47 target.setName("foo"); 48 target.setDescription("Foos description"); 49 project2.addTarget(target); 50 51 target = new Target(); 52 target.setName("bar"); 53 project2.addTarget(target); 54 target = new Target(); 55 target.setName("eek"); 56 project2.addTarget(target); 57 58 TargetChooser inst = new TextTargetChooser(project2); 59 60 List targets = inst.showAndWaitForResponse(); 61 System.out.println("Selected tasks:"); 62 Iterator it = targets.iterator(); 63 while (it.hasNext()) { 64 String taskName = (String ) it.next(); 65 System.out.println(taskName); 66 } 67 } 68 69 private Project project; 70 71 public TextTargetChooser(Project project) { 72 this.project = project; 73 setUpTasks(); 74 } 75 76 79 private void setUpTasks() { 80 String targetString = Config.getProperty(ANTIGEN_TARGETS); 81 logger.fine("Found targets: " + targetString); 82 if (targetString == null) { 83 return; 84 } 85 Hashtable projectTargets = project.getTargets(); 86 String [] targets = targetString.split(","); 87 logger.fine("Split into " + targets.length); 88 for (int i = 0; i < targets.length; ++i) { 89 String targetName = targets[i]; 90 Target target = (Target) projectTargets.get(targetName); 91 if (target != null) { 92 String description = target.getDescription(); 93 String selectedOpt = Config.getProperty(ANTIGEN_TARGET_ 94 + targetName + ".selected"); 95 boolean selected = true; 96 if ("false".equals(selectedOpt)) { 97 selected = false; 98 } 99 taskDescs.add(new TaskDescription(targetName, description, 100 selected)); 101 logger.fine("Target " + targetName + " found (" + description 102 + "). Is selected initially? " + selected); 103 } else { 104 logger.fine("Target " + targetName 105 + " not found in project, skipping"); 106 } 107 } 108 109 } 110 111 private List taskDescs = new ArrayList (); 112 113 private class TaskDescription { 114 115 private String name; 116 117 private String description; 118 119 private boolean defaultSelected; 120 121 private String label; 122 123 public TaskDescription(String name, String description, boolean selected) { 124 this.name = name; 125 this.description = description; 126 this.defaultSelected = selected; 127 assert name != null; 128 label = description != null ? description : name; 129 } 130 131 public boolean isSelectedByDefault() { 132 return defaultSelected; 133 } 134 135 138 public String getLabel() { 139 return label; 140 } 141 142 145 public String getDescription() { 146 return description; 147 } 148 149 152 public String getName() { 153 return name; 154 } 155 } 156 157 162 public Vector showAndWaitForResponse() { 163 showChoices(); 164 System.out 165 .println("---Enter choices as a comma-separated list, or press return to accept the [defaults]"); 166 167 DataInputStream dataInputStream = new DataInputStream ( 168 new BufferedInputStream (System.in)); 169 boolean unhappy = true; 170 Vector theChosen=null; 171 while (unhappy) { 172 theChosen = new Vector (); 173 String input; 174 try { 175 logger.fine("Waiting for input"); 176 input = dataInputStream.readLine().trim(); 177 } catch (IOException e) { 178 logger.warning(e.getMessage()); 180 break; 181 } 182 logger.fine("Input: |" + input + "|"); 183 if ("".equals(input)) { 184 logger.fine("return pressed - selecting defaults"); 185 Iterator it = taskDescs.iterator(); 186 while (it.hasNext()) { 187 TaskDescription desc = (TaskDescription) it.next(); 188 if (desc.isSelectedByDefault()) theChosen.add(desc.getName()); 189 } 190 unhappy = false; 191 } else { 192 String [] choices = input.split(","); 193 for (int i = 0; i < choices.length; ++i) { 194 unhappy = false; 195 try { 196 int choice = Integer.parseInt(choices[i]); 197 if (choice < 1 || choice > taskDescs.size()) { 198 System.out.println("Choosing "+choice+" is invalid"); 199 unhappy=true; 200 break; 201 } else { 202 TaskDescription taskDescription = (TaskDescription)taskDescs.get(choice-1); 203 theChosen.add(taskDescription.getName()); 204 } 205 } catch (NumberFormatException e1) { 206 System.out 208 .println("Invalid entry - must be a comma-separated list of numbers"); 209 unhappy=true; 210 break; 211 } 212 213 } 214 215 216 } 217 } 218 logger.fine("Choice made"); 219 220 return theChosen; 221 } 222 223 226 private void showChoices() { 227 System.out.println("Please select from the following tasks:"); 228 for (int i = 0; i < taskDescs.size(); ++i) { 229 TaskDescription description = (TaskDescription) taskDescs.get(i); 230 String prompt = description.isSelectedByDefault() ? "[" 231 + Integer.toString(i + 1) + "]" : " " 232 + Integer.toString(i + 1) + " "; 233 System.out.println(prompt + " - " + description.getLabel()); 234 } 235 } 236 237 } | Popular Tags |