001: /******************************************************************
002: * File: FGraph.java
003: * Created by: Dave Reynolds
004: * Created on: 22-Jan-03
005: *
006: * (c) Copyright 2003, 2004, 2005, 2006, 2007, 2008 Hewlett-Packard Development Company, LP
007: * [See end of file]
008: * $Id: FGraph.java,v 1.12 2008/01/02 12:07:00 andy_seaborne Exp $
009: *****************************************************************/package com.hp.hpl.jena.reasoner;
010:
011: import com.hp.hpl.jena.graph.Graph;
012: import com.hp.hpl.jena.util.iterator.*;
013:
014: /**
015: * Wrapper round a Graph to implement the slighly modified Finder
016: * interface.
017: *
018: * @author <a href="mailto:der@hplb.hpl.hp.com">Dave Reynolds</a>
019: * @version $Revision: 1.12 $ on $Date: 2008/01/02 12:07:00 $
020: */
021: public class FGraph implements Finder {
022:
023: /** The graph being searched */
024: protected Graph graph;
025:
026: /**
027: * Constructor
028: */
029: public FGraph(Graph graph) {
030: this .graph = graph;
031: }
032:
033: /**
034: * Basic pattern lookup interface.
035: * @param pattern a TriplePattern to be matched against the data
036: * @return a ClosableIterator over all Triples in the data set
037: * that match the pattern
038: */
039: public ExtendedIterator find(TriplePattern pattern) {
040: if (graph == null)
041: return WrappedIterator.create(new NullIterator());
042: return graph.find(pattern.asTripleMatch());
043: }
044:
045: /**
046: * Extended find interface used in situations where the implementator
047: * may or may not be able to answer the complete query. It will
048: * attempt to answer the pattern but if its answers are not known
049: * to be complete then it will also pass the request on to the nested
050: * Finder to append more results.
051: * @param pattern a TriplePattern to be matched against the data
052: * @param continuation either a Finder or a normal Graph which
053: * will be asked for additional match results if the implementor
054: * may not have completely satisfied the query.
055: */
056: public ExtendedIterator findWithContinuation(TriplePattern pattern,
057: Finder continuation) {
058: if (graph == null)
059: return WrappedIterator.create(new NullIterator());
060: if (continuation == null) {
061: return graph.find(pattern.asTripleMatch());
062: } else {
063: return graph.find(pattern.asTripleMatch()).andThen(
064: continuation.find(pattern));
065: }
066: }
067:
068: /**
069: * Returns the graph.
070: * @return Graph
071: */
072: public Graph getGraph() {
073: return graph;
074: }
075:
076: /**
077: * Return true if the given pattern occurs somewhere in the find sequence.
078: */
079: public boolean contains(TriplePattern pattern) {
080: return graph.contains(pattern.getSubject(), pattern
081: .getPredicate(), pattern.getObject());
082: }
083:
084: }
085:
086: /*
087: (c) Copyright 2003, 2004, 2005, 2006, 2007, 2008 Hewlett-Packard Development Company, LP
088: All rights reserved.
089:
090: Redistribution and use in source and binary forms, with or without
091: modification, are permitted provided that the following conditions
092: are met:
093:
094: 1. Redistributions of source code must retain the above copyright
095: notice, this list of conditions and the following disclaimer.
096:
097: 2. Redistributions in binary form must reproduce the above copyright
098: notice, this list of conditions and the following disclaimer in the
099: documentation and/or other materials provided with the distribution.
100:
101: 3. The name of the author may not be used to endorse or promote products
102: derived from this software without specific prior written permission.
103:
104: THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
105: IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
106: OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
107: IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
108: INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
109: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
110: DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
111: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
112: (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
113: THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
114: */
|