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.List;
019
020 /**
021 * This is a partial implementation of an AceWiki engine.
022 *
023 * @author Tobias Kuhn
024 */
025 public abstract class AbstractAceWikiEngine implements AceWikiEngine {
026
027 private static final String defaultEngineClassName
028 = "ch.uzh.ifi.attempto.acewiki.aceowl.ACEOWLEngine";
029
030 /**
031 * Creates the AceWiki engine for the given ontology.
032 *
033 * @param ontology The ontology.
034 * @return The AceWiki engine.
035 */
036 static AceWikiEngine createLanguageEngine(Ontology ontology) {
037 String n = ontology.getParameter("engine_class");
038 Object loadedObj = null;
039 ClassLoader classLoader = AbstractAceWikiEngine.class.getClassLoader();
040
041 if (n != null && !n.equals("")) {
042 try {
043 loadedObj = classLoader.loadClass(n).newInstance();
044 } catch (ClassNotFoundException ex) {
045 ontology.log("Engine class not found: " + n);
046 System.err.println("Engine class not found: " + n);
047 } catch (Exception ex) {
048 ontology.log("Failed to load engine object: " + n);
049 System.err.println("Failed to load engine object: " + n);
050 ex.printStackTrace();
051 }
052 }
053
054 if (loadedObj == null) {
055 n = defaultEngineClassName;
056 ontology.log("Loading default engine: " + n);
057 try {
058 loadedObj = classLoader.loadClass(n).newInstance();
059 } catch (Exception ex) {
060 throw new RuntimeException("Failed to load default engine.", ex);
061 }
062 }
063
064 if (!(loadedObj instanceof AceWikiEngine)) {
065 throw new RuntimeException("Engine object must be an instance of LanguageEngine");
066 }
067
068 AceWikiEngine engine = (AceWikiEngine) loadedObj;
069 engine.init(ontology);
070 return engine;
071 }
072
073 private List<OntologyExporter> exporters = new ArrayList<OntologyExporter>();
074 private String[] lexicalTypes = new String[] {};
075 private WordIndex wordIndex;
076
077 public void init(Ontology ontology) {
078 for (String language : getLanguages()) {
079 getLanguageHandler(language).init(ontology);
080 }
081 getReasoner().init(ontology);
082 }
083
084 /**
085 * Sets the lexical types, as defined by the respective ontology element types.
086 *
087 * @param lexicalTypes The lexical types.
088 */
089 public void setLexicalTypes(String... lexicalTypes) {
090 this.lexicalTypes = lexicalTypes;
091 }
092
093 /**
094 * Adds an exporter to export the wiki content in a certain format.
095 *
096 * @param exporter An ontology exporter.
097 */
098 public void addExporter(OntologyExporter exporter) {
099 exporters.add(exporter);
100 }
101
102 public List<OntologyExporter> getExporters() {
103 return exporters;
104 }
105
106 public String[] getLexicalTypes() {
107 return lexicalTypes;
108 }
109
110 public WordIndex getWordIndex() {
111 if (wordIndex == null) {
112 wordIndex = new DefaultWordIndex();
113 }
114 return wordIndex;
115 }
116
117 }