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.acewiki.core; 016 017 import java.util.ArrayList; 018 import java.util.HashMap; 019 import java.util.List; 020 import java.util.Map; 021 022 /** 023 * This class controls the behavior and content of the predictive editor. 024 * 025 * @author Tobias Kuhn 026 */ 027 public class EditorController { 028 029 private List<String> menuGroups = new ArrayList<String>(); 030 private List<String> extensibleCategories = new ArrayList<String>(); 031 private Map<String, String> wordTypesForCat = new HashMap<String, String>(); 032 private Map<String, Integer> wordNumbersForCat = new HashMap<String, Integer>(); 033 private Map<String, String> menuGroupsForCat = new HashMap<String, String>(); 034 private Map<String, Integer> colorShifts = new HashMap<String, Integer>(); 035 private String[] autocompleteTokens = new String[] {}; 036 private String defaultMenuGroup = "word"; 037 038 /** 039 * Adds a menu group. The order of the method-calls define the order in which the menu groups 040 * will appear in the editor. Color shifts can be set to give the menu groups different colors. 041 * 042 * @param menuGroup The name of the menu group to be added. 043 * @param colorShift The color shift. 044 */ 045 public void addMenuGroup(String menuGroup, int colorShift) { 046 menuGroups.add(menuGroup); 047 colorShifts.put(menuGroup, colorShift); 048 } 049 050 /** 051 * Sets the menu group for all words that have no menu group assigned otherwise. 052 * 053 * @param defaultMenuGroup The name of the default menu group. 054 */ 055 public void setDefaultMenuGroup(String defaultMenuGroup) { 056 this.defaultMenuGroup = defaultMenuGroup; 057 } 058 059 /** 060 * Returns all menu groups in the order they appear in the editor. 061 * 062 * @return All menu groups. 063 */ 064 public List<String> getMenuGroups() { 065 return menuGroups; 066 } 067 068 /** 069 * Returns a list of all extensible categories. 070 * 071 * @return All extensible categories. 072 */ 073 public List<String> getExtensibleCategories() { 074 return extensibleCategories; 075 } 076 077 /** 078 * Returns the color shift for the given menu group. 079 * 080 * @param menuBlockName The name of the menu group. 081 * @return The color shift. 082 */ 083 public int getColorShift(String menuBlockName) { 084 if (colorShifts.containsKey(menuBlockName)) { 085 return colorShifts.get(menuBlockName); 086 } else { 087 return 0; 088 } 089 } 090 091 /** 092 * Adds a grammatical category that is extensible. Extensible means that users can define 093 * new words in this category. 094 * 095 * @param category The extensible category name. 096 * @param menuGroup The menu group for the category. 097 * @param type The type of the respective ontology elements. 098 * @param wordNumber The word number. 099 */ 100 public void addExtensibleCategory(String category, String menuGroup, String type, 101 int wordNumber) { 102 extensibleCategories.add(category); 103 menuGroupsForCat.put(category, menuGroup); 104 wordTypesForCat.put(category, type); 105 wordNumbersForCat.put(category, wordNumber); 106 } 107 108 /** 109 * Adds a grammatical category that is not extensible. 110 * 111 * @param category The category name. 112 * @param menuGroup The menu group for the category. 113 */ 114 public void addPlainCategory(String category, String menuGroup) { 115 menuGroupsForCat.put(category, menuGroup); 116 } 117 118 /** 119 * Returns the menu group for the given category. 120 * 121 * @param category The category name. 122 * @return The name of the menu group. 123 */ 124 public String getMenuGroup(String category) { 125 String mg = menuGroupsForCat.get(category); 126 if (mg != null) { 127 return mg; 128 } else { 129 return defaultMenuGroup; 130 } 131 } 132 133 /** 134 * Returns the word type for the given extensible category, or null if the category is not 135 * extensible. 136 * 137 * @param category The category name. 138 * @return The word type. 139 */ 140 public String getWordType(String category) { 141 return wordTypesForCat.get(category); 142 } 143 144 /** 145 * Returns the word number for the given extensible category, or null if the category is not 146 * extensible. 147 * 148 * @param category The category name. 149 * @return The word number. 150 */ 151 public int getWordNumber(String category) { 152 return wordNumbersForCat.get(category); 153 } 154 155 /** 156 * Sets the tokens that normally form the end of a sentence and that should be used to 157 * automatically complete sentences. These tokens are usually punctuation symbols like a dot or 158 * a question mark. 159 * 160 * @param autocompleteTokens 161 */ 162 public void setAutocompleteTokens(String... autocompleteTokens) { 163 this.autocompleteTokens = autocompleteTokens; 164 } 165 166 /** 167 * Returns the tokens used for autocompletion of sentences. 168 * 169 * @return The autocompletion tokens. 170 */ 171 public String[] getAutocompleteTokens() { 172 return autocompleteTokens; 173 } 174 175 }