001    // This file is part of AceWiki.
002    // Copyright 2008-2012, AceWiki developers.
003    // 
004    // AceWiki is free software: you can redistribute it and/or modify it under the terms of the GNU
005    // Lesser General Public License as published by the Free Software Foundation, either version 3 of
006    // the License, or (at your option) any later version.
007    // 
008    // AceWiki is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
009    // even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
010    // Lesser General Public License for more details.
011    // 
012    // You should have received a copy of the GNU Lesser General Public License along with AceWiki. If
013    // not, see http://www.gnu.org/licenses/.
014    
015    package ch.uzh.ifi.attempto.base;
016    
017    import java.util.HashSet;
018    import java.util.Set;
019    
020    /**
021     * This is a simple implementation of NextTokenOptions.
022     * 
023     * @author Tobias Kuhn
024     */
025    public class SimpleNextTokenOptions implements NextTokenOptions {
026    
027            private Set<ConcreteOption> cOptions = new HashSet<ConcreteOption>();
028            private Set<AbstractOption> aOptions = new HashSet<AbstractOption>();
029            private Set<String> tokens = new HashSet<String>();
030            private Set<String> categories = new HashSet<String>();
031            
032            /**
033             * Creates a new object for the given concrete and abstract options.
034             * 
035             * @param cOptions The concrete options.
036             * @param aOptions The abstract options.
037             */
038            public SimpleNextTokenOptions(Set<ConcreteOption> cOptions, Set<AbstractOption> aOptions) {
039                    if (cOptions != null) {
040                            this.cOptions = cOptions;
041                            for (ConcreteOption o : cOptions) {
042                                    tokens.add(o.getWord());
043                            }
044                    }
045                    if (aOptions != null) {
046                            this.aOptions = aOptions;
047                            for (AbstractOption o : aOptions) {
048                                    categories.add(o.getCategoryName());
049                            }
050                    }
051            }
052            
053            /**
054             * Creates a new object for the given concrete, without any abstract options.
055             * 
056             * @param cOptions The concrete options.
057             */
058            public SimpleNextTokenOptions(Set<ConcreteOption> cOptions) {
059                    this(cOptions, null);
060            }
061    
062            public Set<AbstractOption> getAbstractOptions() {
063                    return aOptions;
064            }
065    
066            public Set<ConcreteOption> getConcreteOptions() {
067                    return cOptions;
068            }
069    
070            public boolean containsToken(String token) {
071                    return tokens.contains(token);
072            }
073    
074            public boolean containsCategory(String categoryName) {
075                    return categories.contains(categoryName);
076            }
077    
078    }