package semanticMarkup.know.lib;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;
import semanticMarkup.know.IGlossary;
public class InMemoryGlossary implements IGlossary {
/* private Set<String> structures = new HashSet<String>();
private Set<String> characterCategories = new HashSet<String>();
private Map<String, Set<String>> characterCategoryStatesMap = new HashMap<String, Set<String>>();
private Map<String, Set<String>> characterStateCategoriesMap = new HashMap<String, Set<String>>();
private Set<String> characterStates = new HashSet<String>();
@Override
public void addStructure(String structure) {
structure = structure.toLowerCase().trim();
this.structures.add(structure);
}
@Override
public void addCharacterCategory(String category) {
category = category.toLowerCase().trim();
this.characterCategories.add(category);
}
@Override
public void addCharacterState(String state, String category) {
state = state.toLowerCase().trim();
category = category.toLowerCase().trim();
if(!this.characterCategoryStatesMap.containsKey(category))
this.characterCategoryStatesMap.put(category, new HashSet<String>());
if(!this.characterStateCategoriesMap.containsKey(state))
this.characterStateCategoriesMap.put(state, new HashSet<String>());
this.characterCategoryStatesMap.get(category).add(state);
this.characterStateCategoriesMap.get(state).add(category);
this.characterCategories.add(category);
this.characterStates.add(state);
}
@Override
public boolean isStructure(String structure) {
structure = structure.toLowerCase().trim();
return this.structures.contains(structure.toLowerCase().trim());
}
@Override
public boolean isCharacterCategory(String category) {
category = category.toLowerCase().trim();
return this.characterCategories.contains(category);
}
@Override
public boolean isCharacterState(String state) {
state = state.toLowerCase().trim();
return this.characterStates.contains(state);
}
@Override
public boolean isCharacterStateCategoryPair(String state, String category) {
state = state.toLowerCase().trim();
category = category.toLowerCase().trim();
if(this.characterCategoryStatesMap.containsKey(category))
return characterCategoryStatesMap.get(category).contains(state);
return false;
}
@Override
public Set<String> getCharacterStateCategories(String state) {
state = state.toLowerCase().trim();
return this.characterStateCategoriesMap.get(state);
}
@Override
public Set<String> getCharacterCategoryStates(String category) {
category = category.toLowerCase().trim();
return this.characterCategoryStatesMap.get(category);
}
@Override
public Set<String> getStructures() {
return this.structures;
}
@Override
public Set<String> getCharacterCategories() {
return this.characterCategories;
}
@Override
public Set<String> getCharacterStatesNotInCharacterCategories(
Set<String> categories) {
Set<String> normalizedCategories = new HashSet<String>();
for(String category : categories)
normalizedCategories.add(category.toLowerCase().trim());
Set<String> result = new HashSet<String>();
for(String category : this.characterCategoryStatesMap.keySet()) {
if(!normalizedCategories.contains(category))
result.addAll(this.characterCategoryStatesMap.get(category));
}
return result;
}
*/
protected HashMap<String, Set<String>> glossary = new HashMap<String, Set<String>>();
protected HashMap<String, Set<String>> reverseGlossary = new HashMap<String, Set<String>>();
@Override
public Set<String> getWords(String category) {
category = category.toLowerCase().trim();
if(reverseGlossary.containsKey(category))
return reverseGlossary.get(category);
else
return new HashSet<String>();
}
@Override
public boolean contains(String word) {
word = word.toLowerCase().trim();
return glossary.containsKey(word);
}
@Override
public Set<String> getCategories(String word) {
word = word.toLowerCase().trim();
if(glossary.containsKey(word))
return glossary.get(word);
else
return new HashSet<String>();
}
@Override
public Set<String> getWordsNotInCategories(Set<String> categories) {
Set<String> normalizedCategories = new HashSet<String>();
for(String category : categories)
normalizedCategories.add(category.toLowerCase().trim());
Set<String> result = new HashSet<String>();
for(String category : this.reverseGlossary.keySet()) {
if(!normalizedCategories.contains(category))
result.addAll(reverseGlossary.get(category));
}
return result;
}
@Override
public void addEntry(String word, String category) {
word = word.toLowerCase().trim();
category = category.toLowerCase().trim();
if(!glossary.containsKey(word))
glossary.put(word, new HashSet<String>());
glossary.get(word).add(category);
if(!reverseGlossary.containsKey(category))
reverseGlossary.put(category, new HashSet<String>());
reverseGlossary.get(category).add(word);
}
}