001    package org.maltparser.core.options;
002    
003    import java.util.Collection;
004    import java.util.HashMap;
005    import java.util.TreeSet;
006    
007    import 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    **/
016    public class OptionGroup {
017            private String name;
018            private 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                    setName(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    }