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.gui;
  
  import nextapp.echo.app.ApplicationInstance;
  import nextapp.echo.app.Color;
  import ch.uzh.ifi.attempto.acewiki.Task;
  import ch.uzh.ifi.attempto.acewiki.Wiki;
  import ch.uzh.ifi.attempto.acewiki.core.AceWikiReasoner;
  import ch.uzh.ifi.attempto.acewiki.core.Concept;
  import ch.uzh.ifi.attempto.acewiki.core.OntologyElement;
  import ch.uzh.ifi.attempto.echocomp.EchoThread;
  
  /**
   * This class stands for an article page showing the article of a concept. At the
   * moment, concepts are represented only by nouns.
   * 
   * @author Tobias Kuhn
   */
  public class ConceptPage extends ArticlePage {
  	
  	private static final long serialVersionUID = -505381176379658743L;
  
  	private Concept concept;
  	
  	/**
  	 * Creates a new article page for a concept.
  	 * 
  	 * @param concept The concept.
  	 * @param wiki The wiki instance.
  	 */
  	protected ConceptPage(Concept concept, Wiki wiki) {
  		super(wiki, concept);
  		this.concept = concept;
  	}
  	
  	public OntologyElement getOntologyElement() {
  		return concept;
  	}
  	
  	protected void doUpdate() {
  		super.doUpdate();
  
  		getTitle().setText(getHeading(concept));
  		
  		EchoThread thread = new EchoThread() {
  			
  			public ApplicationInstance getApplication() {
  				return getWiki().getApplication();
  			}
  			
  			public void run() {
  				synchronized (getWiki().getApplication()) {
  					getWiki().enqueueWeakAsyncTask(new Task() {
  						
  						private boolean satisfiable;
  						
  						public void run() {
  							AceWikiReasoner r = concept.getOntology().getReasoner();
  							satisfiable = r.isSatisfiable(concept);
  						}
  						
  						public void updateGUI() {
  							if (satisfiable) {
  								getTitle().setColor(Color.BLACK);
  							} else {
  								getTitle().setColor(new Color(193, 0, 0));
  							}
  						}
  						
  					});
  					try {
  						sleep(500);
  					} catch (InterruptedException ex) {}
  				}
  			}
  			
  		};
  		thread.setPriority(Thread.MIN_PRIORITY);
  		thread.start();
  	}
  
  }
  