content: // This file is part of AceWiki.
  // Copyright 2008-2013, AceWiki developers.
  //
  // AceWiki is free software: you can redistribute it and/or modify it under the terms of the GNU
  // Lesser General Public License as published by the Free Software Foundation, either version 3 of
  // the License, or (at your option) any later version.
  //
  // AceWiki is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
  // even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  // Lesser General Public License for more details.
  //
  // You should have received a copy of the GNU Lesser General Public License along with AceWiki. If
  // not, see http://www.gnu.org/licenses/.
  
  package ch.uzh.ifi.attempto.acewiki;
  
  import java.util.Map;
  
  import nextapp.echo.app.ApplicationInstance;
  import nextapp.echo.app.Window;
  import ch.uzh.ifi.attempto.acewiki.core.AceWikiConfig;
  import ch.uzh.ifi.attempto.echocomp.Style;
  
  /**
   * This non-public class represents an AceWiki application instance.
   *
   * @author Tobias Kuhn
   */
  public class AceWikiApp extends ApplicationInstance {
  
  	private static final long serialVersionUID = -2038165609406790355L;
  	
  	/**
  	 * No login required option.
  	 */
  	public static final int NO_LOGIN = 0;
  
  	/**
  	 * Login without password required.
  	 */
  	public static final int NONPW_LOGIN = 1;
  
  	/**
  	 * Login with password required (not fully implemented).
  	 */
  	public static final int PW_LOGIN = 2;
  
  	private static int sessionID = 1;
  
  	private Map<String, String> parameters;
  	private Wiki wiki;
  	private Window window;
      private Backend backend;
  
  	/**
  	 * Creates a new AceWiki application instance.
  	 *
       * @param backend The backend object contains ontology of the wiki.
  	 * @param parameters The configuration parameters.
  	 */
  	public AceWikiApp(Backend backend, Map<String, String> parameters) {
          this.backend = backend;
  		this.parameters = parameters;
  	}
  
  	public Window init() {
  		setStyleSheet(Style.styleSheet);
  		window = new Window();
  		wiki = new Wiki(backend, parameters, sessionID++);
  		wiki.log("syst", "start session");
  
  		// Show login window if required:
  		if (wiki.getUser() == null && wiki.getConfig().isLoginRequiredForViewing()) {
  			wiki.showLoginWindow();
  		}
  		window.setContent(wiki.getContentPane());
  
  		window.setTitle("AceWiki");
  
  		return window;
  	}
  
  	public void dispose() {
  		if (wiki != null) wiki.dispose();
  		super.dispose();
  	}
  
  	/**
  	 * Logs out the current user.
  	 */
  	public void logout() {
  		wiki.dispose();
  		wiki = new Wiki(backend, parameters, sessionID++);
  		wiki.log("syst", "start session");
  		if (wiki.getConfig().isLoginRequiredForViewing()) {
  			wiki.showLoginWindow();
  		}
  		window.setContent(wiki.getContentPane());
  	}
  
  	/**
  	 * Returns the wiki instance.
  	 *
  	 * @return The wiki instance.
  	 */
  	public Wiki getWiki() {
  		return wiki;
  	}
  
  	public AceWikiConfig getConfig() {
  		return getWiki().getConfig();
  	}
  
  }
  