package me.pbox.option; import java.util.*; /** * @author Mike Mirzayanov (mirzayanovmr@gmail.com) */ public class Opts { private Map<String, String> map = new HashMap<>(); private Opts parentOpts; public Opts(Opts parentOpts) { this.parentOpts = parentOpts; } public Opts() { this.parentOpts = null; } public void put(String key, String value) { map.put(key, value); } public boolean has(String... names) { if (parentOpts != null && parentOpts.has(names)) { return true; } for (String name : names) { if (map.containsKey(name)) { return true; } } return false; } public String get(String... names) { if (parentOpts != null && parentOpts.has(names)) { return parentOpts.get(names); } for (String name : names) { if (map.containsKey(name)) { return map.get(name); } } return null; } public boolean has(Option option) { if (parentOpts != null && parentOpts.has(option)) { return true; } for (String name : option.getNames()) { if (map.containsKey(name)) { return true; } } return false; } public String get(Option option) { if (parentOpts != null && parentOpts.has(option)) { return parentOpts.get(option); } for (String name : option.getNames()) { if (map.containsKey(name)) { return map.get(name); } } return parentOpts == null ? null : parentOpts.get(option); } public Set<String> getKeys() { Set<String> keys = new TreeSet<>(map.keySet()); if (parentOpts != null) { keys.addAll(parentOpts.getKeys()); } return Collections.unmodifiableSet(keys); } @Override public String toString() { StringBuilder result = new StringBuilder("opts:\n"); for (String key : getKeys()) { result.append(key).append('=').append(get(key)).append('\n'); } return result.toString(); } }