001 package org.crsh.cmdline.spi;
002
003 import java.util.Iterator;
004 import java.util.LinkedHashMap;
005 import java.util.Map;
006 import java.util.Set;
007
008 /**
009 * A completion result.
010 *
011 * @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a>
012 */
013 public final class ValueCompletion implements Iterable<Map.Entry<String, Boolean>> {
014
015 public static ValueCompletion create() {
016 return new ValueCompletion();
017 }
018
019 public static ValueCompletion create(String prefix) {
020 return new ValueCompletion(prefix);
021 }
022
023 public static ValueCompletion create(String prefix, String suffix, boolean value) {
024 ValueCompletion result = new ValueCompletion(prefix);
025 result.put(suffix, value);
026 return result;
027 }
028
029 public static ValueCompletion create(String suffix, boolean value) {
030 ValueCompletion result = new ValueCompletion();
031 result.put(suffix, value);
032 return result;
033 }
034
035 /** . */
036 private final String prefix;
037
038 /** . */
039 private final Map<String, Boolean> entries;
040
041 public ValueCompletion() {
042 this("");
043 }
044
045 public ValueCompletion(String prefix) {
046 this(prefix, new LinkedHashMap<String, Boolean>());
047 }
048
049 public ValueCompletion(String prefix, Map<String, Boolean> entries) {
050 if (prefix == null) {
051 throw new NullPointerException("No null prefix allowed");
052 }
053 if (entries == null) {
054 throw new NullPointerException("No null values allowed");
055 }
056
057 //
058 this.prefix = prefix;
059 this.entries = entries;
060 }
061
062 public Iterator<Map.Entry<String, Boolean>> iterator() {
063 return entries.entrySet().iterator();
064 }
065
066 public Set<String> getSuffixes() {
067 return entries.keySet();
068 }
069
070 public boolean isEmpty() {
071 return entries.isEmpty();
072 }
073
074 public Object get(String key) {
075 return entries.get(key);
076 }
077
078 public int getSize() {
079 return entries.size();
080 }
081
082 public ValueCompletion put(String key, boolean value) {
083 entries.put(key, value);
084 return this;
085 }
086
087 public String getPrefix() {
088 return prefix;
089 }
090
091 @Override
092 public int hashCode() {
093 return prefix.hashCode() ^ entries.hashCode();
094 }
095
096 @Override
097 public boolean equals(Object obj) {
098 if (obj == this) {
099 return true;
100 }
101 if (obj instanceof ValueCompletion) {
102 ValueCompletion that = (ValueCompletion)obj;
103 return prefix.equals(that.prefix) && entries.equals(that.entries);
104 }
105 return false;
106 }
107
108 @Override
109 public String toString() {
110 return "Completion[prefix=" + prefix + ",entries=" + entries + "]";
111 }
112 }