Package com.clarkparsia.pellet.rules

Source Code of com.clarkparsia.pellet.rules.DataRangeBindingHelper

// Copyright (c) 2006 - 2008, Clark & Parsia, LLC. <http://www.clarkparsia.com>
// This source code is available under the terms of the Affero General Public License v3.
//
// Please see LICENSE.txt for full license terms, including the availability of proprietary exceptions.
// Questions, comments, or requests for clarification: licensing@clarkparsia.com

package com.clarkparsia.pellet.rules;

import java.util.Collection;
import java.util.Collections;
import java.util.logging.Logger;

import org.mindswap.pellet.ABox;
import org.mindswap.pellet.Literal;
import org.mindswap.pellet.exceptions.InternalReasonerException;

import com.clarkparsia.pellet.datatypes.DatatypeReasoner;
import com.clarkparsia.pellet.datatypes.exceptions.DatatypeReasonerException;
import com.clarkparsia.pellet.rules.model.AtomVariable;
import com.clarkparsia.pellet.rules.model.DataRangeAtom;


/**
* <p>
* Title: Data Range Binding Helper
* </p>
* <p>
* Description:
* </p>
* <p>
* Copyright: Copyright (c) 2007
* </p>
* <p>
* Company: Clark & Parsia, LLC. <http://www.clarkparsia.com>
* </p>
*
* @author Ron Alford
*/
public class DataRangeBindingHelper implements BindingHelper {

  private static final Logger log;

  static {
    log = Logger.getLogger( DataRangeBindingHelper.class.getCanonicalName() );
  }

  private DatatypeReasoner dtReasoner;
  private DataRangeAtom atom;
  private boolean hasNext;
 
  public DataRangeBindingHelper( ABox abox, DataRangeAtom atom ) {
    this.dtReasoner = abox.getDatatypeReasoner();
    this.atom = atom;
    hasNext = false;
  }
 
  public Collection<AtomVariable> getBindableVars( Collection<AtomVariable> bound ) {
    return Collections.emptySet();
  }

  public Collection<AtomVariable> getPrerequisiteVars( Collection<AtomVariable> bound ) {
    return VariableUtils.getVars( atom );
  }

  public void rebind(VariableBinding newBinding) {
    Literal dValue = newBinding.get( atom.getArgument() );

    if( dValue == null ) {
      throw new InternalReasonerException(
          "DataRangeBindingHelper cannot generate bindings for " + atom );
    }

    try {
      hasNext = dtReasoner.isSatisfiable( Collections.singleton( atom.getPredicate() ),
          dValue.getValue() );
    } catch( DatatypeReasonerException e ) {
      final String msg = "Unexpected datatype reasoner exception: " + e.getMessage();
      log.severe( msg );
      throw new InternalReasonerException( e );
    }
  }

  public boolean selectNextBinding() {
    if ( hasNext ) {
      hasNext = false;
      return true;
    }
    return false;
  }

  public void setCurrentBinding(VariableBinding currentBinding) {
    // This space left intentionally blank.
  }
 
  public String toString() { return atom.toString(); }

}
TOP

Related Classes of com.clarkparsia.pellet.rules.DataRangeBindingHelper

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.