149 } 150 151 public Option<String> addStringOption(String name, String defaultValue, String description) { 152 return addStringOption(null, name, defaultValue, description); 153 } 154 155 public Option<Boolean> addBooleanOption(String name, String description) { 156 return addBooleanOption(null, name, false, description); 157 } 158 159 private void register(Option<?> option) { 160 if (options.put("--" + option.longName, option) != null) { 161 throw new RuntimeException("Option is already registered for key " + option.longName); 162 } 163 if (option.shortName != null && options.put("-" + option.shortName, option) != null) { 164 throw new RuntimeException("Option is already registered for key " + option.shortName); 165 } 166 } 167 168 public abstract class Option<T> { 169 170 Character shortName; 171 String longName; 172 protected T defaultValue; 173 protected String description; 174 175 public Option(Character shortName, String longName, T defaultValue, String description) { 176 this.shortName = shortName; 177 this.longName = longName; 178 this.defaultValue = defaultValue; 179 this.description = description; 180 } 181 182 public Character getShortName() { 183 return shortName; 184 } 185 186 public String getLongName() { 187 return longName; 188 } 189 190 public T getDefaultValue() { 191 return defaultValue; 192 } 193 194 public String getDescription() { 195 return description; 196 } 197 198 @SuppressWarnings("unchecked") 199 public T value() { 200 return (T) values.getOrDefault(this, defaultValue); 201 } 202 203 public boolean isFlag() { 204 return false; 205 } 206 207 public abstract T parseFromString(String arg); 208 } 209 210 private class StringOption extends Option<String> { 211 212 StringOption(Character s, String l, String v, String d) { 213 super(s, l, v, d); 214 } 215 216 @Override 217 public String parseFromString(String arg) { 218 return arg; 219 } 220 } | 149 } 150 151 public Option<String> addStringOption(String name, String defaultValue, String description) { 152 return addStringOption(null, name, defaultValue, description); 153 } 154 155 public Option<Boolean> addBooleanOption(String name, String description) { 156 return addBooleanOption(null, name, false, description); 157 } 158 159 private void register(Option<?> option) { 160 if (options.put("--" + option.longName, option) != null) { 161 throw new RuntimeException("Option is already registered for key " + option.longName); 162 } 163 if (option.shortName != null && options.put("-" + option.shortName, option) != null) { 164 throw new RuntimeException("Option is already registered for key " + option.shortName); 165 } 166 } 167 168 public abstract class Option<T> { 169 protected final Character shortName; 170 protected final String longName; 171 protected final T defaultValue; 172 protected final String description; 173 174 public Option(Character shortName, String longName, T defaultValue, String description) { 175 this.shortName = shortName; 176 this.longName = longName; 177 this.defaultValue = defaultValue; 178 this.description = description; 179 } 180 181 public Character getShortName() { 182 return shortName; 183 } 184 185 public String getLongName() { 186 return longName; 187 } 188 189 public T getDefaultValue() { 190 return defaultValue; 191 } 192 193 public String getDescription() { 194 return description; 195 } 196 197 @SuppressWarnings("unchecked") 198 public T value() { 199 return (T) values.getOrDefault(this, defaultValue); 200 } 201 202 public boolean isSet() { 203 return values.containsKey(this); 204 } 205 206 public boolean isFlag() { 207 return false; 208 } 209 210 public abstract T parseFromString(String arg); 211 } 212 213 private class StringOption extends Option<String> { 214 215 StringOption(Character s, String l, String v, String d) { 216 super(s, l, v, d); 217 } 218 219 @Override 220 public String parseFromString(String arg) { 221 return arg; 222 } 223 } |