Log in Help
Print
Homereleasesgate-5.1-beta2-build3402-ALLpluginsOntologysrcgatecreoleontologyimplsesame 〉 UtilResourceQueryIterator.java
 
/*
 *  Copyright (c) 1998-2009, The University of Sheffield.
 *
 *  This file is part of GATE (see http://gate.ac.uk/), and is free
 *  software, licenced under the GNU Library General Public License,
 *  Version 2, June 1991 (in the distribution as file licence.html,
 *  and also available at http://gate.ac.uk/gate/licence.html).
 *
 *  Johann Petrak 2009-08-13
 *
 *  $Id: UtilResourceQueryIterator.java 11598 2009-10-13 13:44:17Z johann_p $
 */
package gate.creole.ontology.impl.sesame;

import gate.creole.ontology.GateOntologyException;
import gate.creole.ontology.LiteralOrONodeID;
import gate.creole.ontology.OClass;
import gate.creole.ontology.OConstants;
import gate.creole.ontology.OInstance;
import gate.creole.ontology.OResource;
import gate.creole.ontology.impl.OResourceImpl;
import gate.creole.ontology.impl.Utils;
import gate.util.ClosableIterator;
import org.apache.log4j.Logger;

/**
 *
 * @param <T> 
 * @author Johann Petrak
 */
 public class UtilResourceQueryIterator<T extends OResource>
     implements ClosableIterator<T> {

    private OntologyServiceImplSesame mService;
    private UtilTupleQueryIterator mQuery;
    private Class mClass;
    private Logger logger;

    public UtilResourceQueryIterator(
        OntologyServiceImplSesame service, 
        UtilTupleQueryIterator query,
        Class theClass
        ) {
      mService = service;
      mQuery = query;
      mClass = theClass;
    }


    public void setBinding(String name, LiteralOrONodeID value) {
      mQuery.setBinding(name, UtilConvert.toSesameValue(value));
    }

    public boolean hasNext() {
      return mQuery.hasNext();
    }

    public T next() {
      if(mClass == OClass.class) {
        OClass aClass = null;
        LiteralOrONodeID l = mQuery.nextFirst();
        if(l.isONodeID()) {
          if(l.getONodeID().isAnonymousResource()) {
            aClass = mService.getRestrictionForONodeID(l.getONodeID());
          } else {
            aClass = Utils.createOClass(mService.ontology, mService, l.getONodeID().toString(), OConstants.OWL_CLASS);
          }
        } else {
          throw new GateOntologyException("Unexpected literal when retrieving classes");
        }
        return (T)aClass;
      } else if(mClass == OInstance.class) {
        OInstance aInstance = null;
        LiteralOrONodeID l = mQuery.nextFirst();
        if(l.isONodeID()) {
          if(l.getONodeID().isAnonymousResource()) {
            throw new GateOntologyException("Unexpected blank node when retrieving instances");
          } else {
            aInstance = Utils.createOInstance(mService.ontology, mService, l.getONodeID().toString());
          }
        } else {
          throw new GateOntologyException("Unexpected literal when retrieving instances");
        }
        return (T)aInstance;
      }
      return null;
    }



    public void close() {
      mQuery.close();
    }

    public void remove() {
      throw new UnsupportedOperationException("remove method not supported");
    }
  }