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.gf; 016 017 import java.util.HashMap; 018 import java.util.List; 019 import java.util.Map; 020 021 import org.grammaticalframework.parser.ParseState; 022 023 import ch.uzh.ifi.attempto.acewiki.core.AbstractSentence; 024 import ch.uzh.ifi.attempto.acewiki.core.Declaration; 025 import ch.uzh.ifi.attempto.acewiki.core.OntologyElement; 026 import ch.uzh.ifi.attempto.acewiki.core.SentenceDetail; 027 import ch.uzh.ifi.attempto.base.TextContainer; 028 import ch.uzh.ifi.attempto.base.TextElement; 029 030 /** 031 * This class represents a declaration statement for the GF AceWiki engine. 032 * 033 * @author Tobias Kuhn 034 */ 035 public class GFDeclaration extends AbstractSentence implements Declaration { 036 037 private GFGrammar gfGrammar; 038 private ParseState parseState; 039 private Map<String, TextContainer> textContainers = new HashMap<String, TextContainer>(); 040 041 /** 042 * Creates a new GF declaration object from a parse state. 043 * 044 * @param parseState The parse state. 045 * @param gfGrammar The grammar object. 046 */ 047 public GFDeclaration(ParseState parseState, GFGrammar gfGrammar) { 048 this.gfGrammar = gfGrammar; 049 this.parseState = parseState; 050 } 051 052 /** 053 * Creates a new GF declaration object from a text in a given language. 054 * 055 * @param text The declaration text. 056 * @param language The language. 057 * @param gfGrammar The grammar object. 058 */ 059 public GFDeclaration(String text, String language, GFGrammar gfGrammar) { 060 this.gfGrammar = gfGrammar; 061 parseState = getGFGrammar().parse(text, language); 062 } 063 064 protected TextContainer getTextContainer(String language) { 065 TextContainer tc = textContainers.get(language); 066 if (tc == null) { 067 tc = new TextContainer(); 068 for (String s : getGFGrammar().linearizeAsTokens(parseState, language)) { 069 tc.addElement(new TextElement(s)); 070 } 071 textContainers.put(language, tc); 072 } 073 return tc; 074 } 075 076 public List<TextElement> getTextElements(String language) { 077 return getTextContainer(language).getTextElements(); 078 } 079 080 public boolean contains(OntologyElement e) { 081 // TODO 082 return false; 083 } 084 085 public List<SentenceDetail> getDetails(String language) { 086 return null; 087 } 088 089 public boolean isReasonable() { 090 return true; 091 } 092 093 public void update() { 094 } 095 096 public String serialize() { 097 return getGFGrammar().serialize(parseState); 098 } 099 100 /** 101 * Returns the grammar object. 102 * 103 * @return The grammar object. 104 */ 105 public GFGrammar getGFGrammar() { 106 return gfGrammar; 107 } 108 109 }