package ch.uzh.ifi.attempto.acewiki.gf; import java.util.Map; import org.semanticweb.owlapi.model.OWLLogicalEntity; import ch.uzh.ifi.attempto.acewiki.core.AceWikiEngine; import ch.uzh.ifi.attempto.acewiki.core.AnswerElement; import ch.uzh.ifi.attempto.acewiki.core.Ontology; import ch.uzh.ifi.attempto.acewiki.owl.AbstractOWLOntoElement; import ch.uzh.ifi.attempto.base.TextContainer; import ch.uzh.ifi.attempto.base.TextElement; // TODO: cleanup // TODO: rename to something like GFOWLEntityAnswerElement public class SimpleAnswerElement extends AbstractOWLOntoElement implements AnswerElement { private final OWLLogicalEntity mEntity; private final Ontology mOntology; public SimpleAnswerElement(Ontology ontology, OWLLogicalEntity entity) { mOntology = ontology; mEntity = entity; } @Override public String[] getWords() { return new String[] { mEntity.toString() }; } @Override public void setWords(String serializedWords) { throw new UnsupportedOperationException(); } @Override public OWLLogicalEntity getOWLRepresentation() { return mEntity; } @Override public String getIRISuffix() { return mEntity.getIRI().getFragment(); } public String serializeWords() { return getWords() + ";"; } public String getType() { return mEntity.getEntityType().toString(); } public String getInternalType() { return getType(); } /** * <p>Returns the textual representation of the entity.</p> */ public TextContainer getAnswerText(String lang) { AceWikiEngine engine = mOntology.getEngine(); String answerAsStr = null; String iriSuffix = getIRISuffix(); if (engine instanceof GfEngine) { Map<String, String> iriToToken = ((GfEngine) engine).getGfGrammar().getIriToToken(lang); if (iriToToken != null) { answerAsStr = iriToToken.get(iriSuffix); } } // TODO: if mapping failed then we use the entity name as the answer and indicate this with # if (answerAsStr == null) { answerAsStr = iriSuffix.replaceFirst("_[A-Z0-9]+$", "") + " (#)"; } // TODO: remove hack (replacing of underscores by spaces answerAsStr = answerAsStr.replaceAll("_", " "); return new TextContainer(new TextElement(answerAsStr)); } }