001package org.maltparser.core.options;
002
003import java.util.Collection;
004import java.util.HashMap;
005import java.util.TreeSet;
006
007import org.maltparser.core.options.option.Option;
008
009
010/**
011 * An option group categories a group of options.
012 *
013 * @author Johan Hall
014 * @since 1.0
015**/
016public class OptionGroup {
017        private final String name;
018        private final HashMap<String, Option> options;
019        
020        public static int toStringSetting = 0;
021        public final static int WITHGROUPNAME = 0; 
022        public final static int NOGROUPNAME = 1; 
023        
024        /**
025         * Creates an option group with an option group name.
026         * 
027         * @param name  The name of the option group
028         */
029        public OptionGroup(String name) {
030                this.name = name;
031                options = new HashMap<String, Option>();
032        }
033
034        /**
035         * Returns the name of the option group
036         * 
037         * @return      the name of the option group
038         */
039        public String getName() {
040                return name;
041        }
042
043        /**
044         * Sets the name of the option group
045         * 
046         * @param name  the name of the option group
047         */
048//      public void setName(String name) {
049//              this.name = name.toLowerCase();
050//      }
051        
052        /**
053         * Adds an option to the option group.
054         * 
055         * @param option        an option
056         * @throws OptionException
057         */
058        public void addOption(Option option) throws OptionException {
059                if (option.getName() == null || option.getName().equals("")) {
060                        throw new OptionException("The option name is null or contains the empty string. ");
061                } else if (options.containsKey(option.getName().toLowerCase())) {
062                        throw new OptionException("The option name already exists for that option group. ");
063                } else {
064                        options.put(option.getName().toLowerCase(), option);
065                }
066        }
067        
068        /**
069         * Returns the option according to the option name.
070         * 
071         * @param optionname    an option name
072         * @return      an option, <i>null</i> if the option name can't be found
073         */
074        public Option getOption(String optionname) {
075                return options.get(optionname);
076        }
077        
078        /**
079         * Returns all options for this option group.
080         * 
081         * @return      a list of options
082         */
083        public Collection<Option> getOptionList() {
084                return options.values();
085        }
086        
087        /* (non-Javadoc)
088         * @see java.lang.Object#toString()
089         */
090        public String toString() {
091                final StringBuilder sb = new StringBuilder();
092//              for (String value : new TreeSet<String>(options.keySet())) {
093//                      sb.append("super.put(\""); 
094//                      sb.append("--");
095//                      sb.append(name);
096//                      sb.append("-");
097//                      sb.append(options.get(value).getName());
098//                      sb.append("\", \"");
099//                      sb.append(options.get(value).getDefaultValueString());
100//                      sb.append("\");\n");
101//              }
102
103                if (OptionGroup.toStringSetting == OptionGroup.WITHGROUPNAME) {
104                        sb.append("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
105                        sb.append("+ " + name+"\n");
106                        sb.append("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
107                }
108                
109                for (String value : new TreeSet<String>(options.keySet())) {
110                        sb.append(options.get(value).toString());
111                }
112                return sb.toString();
113        }
114}