Package com.google.gwt.ricordo.server

Source Code of com.google.gwt.ricordo.server.OntologyHandler

package com.google.gwt.ricordo.server;

//import org.semanticweb.HermiT.Reasoner;

import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

import org.coode.owlapi.manchesterowlsyntax.ManchesterOWLSyntaxEditorParser;
import org.semanticweb.owlapi.apibinding.OWLManager;
import org.semanticweb.owlapi.expression.OWLEntityChecker;
import org.semanticweb.owlapi.expression.ParserException;
import org.semanticweb.owlapi.expression.ShortFormEntityChecker;
import org.semanticweb.owlapi.model.IRI;
import org.semanticweb.owlapi.model.OWLAxiom;
import org.semanticweb.owlapi.model.OWLClass;
import org.semanticweb.owlapi.model.OWLClassExpression;
import org.semanticweb.owlapi.model.OWLOntology;
import org.semanticweb.owlapi.model.OWLOntologyCreationException;
import org.semanticweb.owlapi.model.OWLOntologyManager;
import org.semanticweb.owlapi.model.OWLOntologyStorageException;
import org.semanticweb.owlapi.owllink.OWLlinkHTTPXMLReasonerFactory;
import org.semanticweb.owlapi.owllink.OWLlinkReasoner;
import org.semanticweb.owlapi.owllink.OWLlinkReasonerConfiguration;
import org.semanticweb.owlapi.owllink.OWLlinkReasonerIOException;
import org.semanticweb.owlapi.owllink.Request;
import org.semanticweb.owlapi.owllink.Response;
import org.semanticweb.owlapi.owllink.builtin.requests.CreateKB;
import org.semanticweb.owlapi.owllink.builtin.requests.GetEquivalentClasses;
import org.semanticweb.owlapi.owllink.builtin.requests.GetSubClasses;
import org.semanticweb.owlapi.owllink.builtin.requests.LoadOntologies;
import org.semanticweb.owlapi.owllink.builtin.requests.Tell;
import org.semanticweb.owlapi.owllink.builtin.response.KB;
import org.semanticweb.owlapi.owllink.builtin.response.OK;
import org.semanticweb.owlapi.owllink.builtin.response.OWLlinkErrorResponseException;
import org.semanticweb.owlapi.owllink.builtin.response.SetOfClassSynsets;
import org.semanticweb.owlapi.owllink.builtin.response.SetOfClasses;
import org.semanticweb.owlapi.owllink.server.OWLlinkServer;
import org.semanticweb.owlapi.owllink.server.serverfactory.PelletServerFactory;
import org.semanticweb.owlapi.reasoner.Node;
import org.semanticweb.owlapi.util.BidirectionalShortFormProvider;
import org.semanticweb.owlapi.util.BidirectionalShortFormProviderAdapter;
import org.semanticweb.owlapi.util.ShortFormProvider;
import org.semanticweb.owlapi.util.SimpleShortFormProvider;

import com.google.gwt.ricordo.client.exception.ManchesterQueryException;
import com.google.gwt.ricordo.shared.OntologyTermData;

public class OntologyHandler {
  public static final String DOCUMENT_IRI = "WEB-INF\\resources\\ontologies\\ricordo.owl";
//  public static final String DOCUMENT_IRI = "/home/sarala/ricordo/resources/ricordo.owl";
  private OWLOntologyManager manager = OWLManager.createOWLOntologyManager();

    private OWLOntology ontology = null;//Create/use an OWLOntology;
    private OWLlinkReasoner reasoner = null;
    private String ou = "http://bioonto.uk/ricordo.owl";
    private OWLOntology oldOntology=null;//for creating manchester queries
    private KB kbResponse;
    private ConfigHandler configHandler;
    private IRI docIRI;
 
 
  public OntologyHandler(String file, ConfigHandler configHandler){ 
    this.configHandler = configHandler;
    docIRI=IRI.create(new File(file));
   
        try {
            ontology = manager.createOntology();
            oldOntology = manager.loadOntology(docIRI);
        } catch (OWLOntologyCreationException e) {
            e.printStackTrace()//To change body of catch statement use File | Settings | File Templates.
        }
       
        setUpReasoner();
  }
 
  public void setUpReasoner(){
    URL url = null;//Configure the server end-point
        try {
            url = new URL("http://bioonto.gen.cam.ac.uk:8081");
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }

        OWLlinkReasonerConfiguration reasonerConfiguration = new OWLlinkReasonerConfiguration(url);
        OWLlinkHTTPXMLReasonerFactory factory = new OWLlinkHTTPXMLReasonerFactory();
       
        try{
          reasoner = factory.createNonBufferingReasoner(ontology, reasonerConfiguration);
        }catch (OWLlinkReasonerIOException e){
            System.out.println(e.getMessage());  
            startPelletServer();
            reasoner = factory.createNonBufferingReasoner(ontology, reasonerConfiguration);
        }
        createKB();
  }
 
  public void createKB(){
    try {
            CreateKB createKBRequest = new CreateKB(IRI.create(ou));
            kbResponse = reasoner.answer(createKBRequest);
            System.out.println("Created KB: "+kbResponse.getKB());
            LoadOntologies loadOntologies = new LoadOntologies(kbResponse.getKB(),IRI.create(new File(DOCUMENT_IRI)));
           // Tell tellRequest = new Tell(kbResponse.getKB(), oldOntology.getAxioms());
            OK okResponse = reasoner.answer(loadOntologies);
        } catch (OWLlinkErrorResponseException e) {
            System.out.println(e.getMessage());
        }   
  }
 
    public void startPelletServer(){
        int port = 8081;//HTTP port for the server, e.g., 8081
        PelletServerFactory pellet = new PelletServerFactory();
        OWLlinkServer server = pellet.createServer(port);//
        server.run();
    }

/*    public void stopPelletServer(){
        if(server!=null) {
            try {
                server.stop();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }*/
   
    private Response executeReasoner(Request request){
      try{
        return reasoner.answer(request);
      }catch(OWLlinkReasonerIOException ex){
        setUpReasoner();
        return reasoner.answer(request);
      }
    }
   
  public SetOfClasses equivalentClasses(OWLClassExpression classExp){
    GetEquivalentClasses getEquivalentClasses = new GetEquivalentClasses(IRI.create(ou),classExp);
    SetOfClasses eqclasses = (SetOfClasses)executeReasoner(getEquivalentClasses);//reasoner.answer(getEquivalentClasses);
   
    return eqclasses;
  }
 
  public OWLClass addNewClass(OWLClassExpression classExp){
    String ricordoid = configHandler.readAndUpdate(ConfigHandler.RICORDOID);
    OWLClass newowlclass = manager.getOWLDataFactory().getOWLClass(IRI.create("http://www.ricordo.eu/ricordo.owl#RICORDO_"+ricordoid));
    OWLAxiom axiom = manager.getOWLDataFactory().getOWLEquivalentClassesAxiom(newowlclass, classExp);
    Set<OWLAxiom> axiomSet = new HashSet<OWLAxiom>();
    axiomSet.add(axiom);
    Tell tellRequest = new Tell(IRI.create(ou),axiomSet);
    OK okResponse = (OK)executeReasoner(tellRequest);//reasoner.answer(tellRequest);
     
    //add to owlfile
    manager.addAxioms(oldOntology, axiomSet);
    writeToOWLFile();
   
    return newowlclass;   
  }
 
  public OWLClassExpression runManchesterQuery(String manchesterQuery) throws ManchesterQueryException{
    ManchesterOWLSyntaxEditorParser parser = new ManchesterOWLSyntaxEditorParser(manager.getOWLDataFactory(), manchesterQuery);
        parser.setDefaultOntology(oldOntology);
        ShortFormProvider shortFormProvider = new SimpleShortFormProvider();
        Set<OWLOntology> importsClosure = oldOntology.getImportsClosure();
        BidirectionalShortFormProvider bidiShortFormProvider = new BidirectionalShortFormProviderAdapter(manager, importsClosure, shortFormProvider);
        // Specify an entity checker that wil be used to check a class expression contains the correct names.
        OWLEntityChecker entityChecker = new ShortFormEntityChecker(bidiShortFormProvider);
        parser.setOWLEntityChecker(entityChecker);

        OWLClassExpression classExp=null;
        try {
            classExp = parser.parseClassExpression();
        } catch (ParserException e) {
          e.printStackTrace();
          throw new ManchesterQueryException("Invalid manchester query",e.getMessage());          
        }
    return classExp;
  }
 
  public ArrayList<OntologyTermData> getOntologyTerms(OWLClassExpression classExp){
      ArrayList<OntologyTermData> idList = new ArrayList<OntologyTermData>();        
          if(classExp==null){
            return idList;
          }
          GetSubClasses getSubClasses = new GetSubClasses(IRI.create(ou), classExp);
          SetOfClassSynsets synsets = (SetOfClassSynsets)executeReasoner(getSubClasses); //reasoner.answer(getSubClasses);
          Iterator<Node<OWLClass>> it = synsets.iterator();
          while (it.hasNext()) {
              Node<OWLClass> owlClassNode = it.next();
              populateidList(owlClassNode.getEntities().iterator().next().toStringID(), idList);
          }
         
          GetEquivalentClasses getEquivalentClasses = new GetEquivalentClasses(IRI.create(ou),classExp);
          SetOfClasses eqclasses = (SetOfClasses)executeReasoner(getEquivalentClasses);//reasoner.answer(getEquivalentClasses);

          Iterator<OWLClass> eqiIterator = eqclasses.iterator();
          while(eqiIterator.hasNext()){
              OWLClass eqClass = eqiIterator.next();
              populateidList(eqClass.toStringID(), idList);
          }
   
    return idList;
  }
 
    private void populateidList(String cls, ArrayList<OntologyTermData> idList){
        String term = cls.substring(cls.indexOf("#")+1);
        String [] termData = term.split("_");
        if(termData.length==2){
            OntologyTermData ontologyTermData = new OntologyTermData(termData[0], termData[0]+":"+termData[1]);
            idList.add(ontologyTermData);
        }

    }
   
    private void writeToOWLFile(){
      try {
      manager.saveOntology(oldOntology, docIRI);
    } catch (OWLOntologyStorageException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    }

}
TOP

Related Classes of com.google.gwt.ricordo.server.OntologyHandler

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.