001 package org.maltparser.core.options;
002
003 import java.util.Set;
004 import java.util.SortedMap;
005 import java.util.TreeMap;
006
007 import org.maltparser.core.options.option.Option;
008
009 /**
010 * OptionValues contain a number of option containers, which contains the option values (the instance of
011 * options).
012 *
013 * @author Johan Hall
014 * @since 1.0
015 **/
016 public class OptionValues {
017 private SortedMap<Integer, OptionContainer> optionContainers;
018
019 /**
020 * Creates OptionValues.
021 */
022 public OptionValues() {
023 super();
024 optionContainers = new TreeMap<Integer, OptionContainer>();
025 }
026
027 /**
028 * Returns the option value for an option that is in a specific option container.
029 *
030 * @param containerIndex the index of the option container.
031 * @param option the option object
032 * @return an object that contains the value of the option, <i>null</i> if the option value could not be found.
033 * @throws OptionException
034 */
035 public Object getOptionValue(int containerIndex, Option option) throws OptionException {
036 OptionContainer oc = optionContainers.get(containerIndex);
037 if (oc == null) {
038 throw new OptionException("The option container '"+containerIndex+"' cannot be found. ");
039 }
040 return oc.getOptionValue(option);
041 }
042
043 /**
044 * Returns a string representation of the option value for an option that is in a specific option container.
045 *
046 * @param containerIndex the index of the option container.
047 * @param option an option object
048 * @return a string representation of the option value for an option that is in a specific option container.
049 * @throws OptionException
050 */
051 public String getOptionValueString(int containerIndex, Option option) throws OptionException {
052 OptionContainer oc = optionContainers.get(containerIndex);
053 if (oc == null) {
054 throw new OptionException("The option container '"+containerIndex+"' cannot be found. ");
055 }
056 return oc.getOptionValueString(option);
057 }
058
059 /**
060 * Returns the option value for an option.
061 *
062 * @param option an option object
063 * @return the option value for an option, <i>null</i> if the option value could not be found.
064 * @throws OptionException
065 */
066 public Object getOptionValue(Option option) throws OptionException {
067 if (optionContainers.size() == 0) {
068 return null;
069 }
070 OptionContainer oc = optionContainers.get(optionContainers.firstKey());
071 return oc.getOptionValue(option);
072 }
073
074 /**
075 * Returns the number of option values for a particular option container.
076 *
077 * @param containerIndex The index of the option container.
078 * @return the number of option values for a particular option container.
079 */
080 public int getNumberOfOptionValues(int containerIndex) {
081 if (!optionContainers.containsKey(containerIndex)) {
082 return 0;
083 }
084 return optionContainers.get(containerIndex).getNumberOfOptionValues();
085 }
086
087 /**
088 * Returns a sorted set of container names.
089 *
090 * @return a sorted set of container names.
091 */
092 public Set<Integer> getOptionContainerIndices() {
093 return optionContainers.keySet();
094 }
095
096
097 /**
098 * Adds an option value to an option to one of the internal option container specified by the type.
099 *
100 * @param containerType the type of the option container.
101 * @param containerIndex the index of the option container.
102 * @param option an option to add
103 * @param value an option value to add
104 * @return true if the value is added, false if the value already is in use.
105 * @throws OptionException
106 */
107 public boolean addOptionValue(int containerType, int containerIndex, Option option, Object value) throws OptionException {
108 if (option == null) {
109 throw new OptionException("The option cannot be found. ");
110 }
111 if (value == null) {
112 throw new OptionException("The option value cannot be found. ");
113 }
114
115 if (!optionContainers.containsKey(containerIndex)) {
116 optionContainers.put(containerIndex, new OptionContainer(containerIndex));
117 }
118 OptionContainer oc = optionContainers.get(containerIndex);
119 if (oc == null) {
120 throw new OptionException("The option container index "+containerIndex+" is unknown");
121 }
122 if (!oc.contains(containerType, option)) {
123 oc.addOptionValue(containerType, option, value);
124 return true;
125 }
126 return false;
127 }
128
129
130 /* (non-Javadoc)
131 * @see java.lang.Object#toString()
132 */
133 public String toString() {
134 final StringBuilder sb = new StringBuilder();
135 if (optionContainers.size() == 0) {
136 sb.append("No option values.");
137 } else if (optionContainers.size() == 1) {
138 sb.append(optionContainers.get(optionContainers.firstKey()));
139 } else {
140 for (Integer index : optionContainers.keySet()) {
141 sb.append("Option container : "+index+"\n");
142 sb.append(optionContainers.get(index)+"\n");
143 }
144 }
145 return sb.toString();
146 }
147 }