01: /*
02: (c) Copyright 2004, 2005, 2006, 2007, 2008 Hewlett-Packard Development Company, LP
03: [See end of file]
04: $Id: GraphMemBaseQueryHandler.java,v 1.6 2008/01/02 12:09:51 andy_seaborne Exp $
05: */
06:
07: package com.hp.hpl.jena.mem;
08:
09: import com.hp.hpl.jena.graph.Node;
10: import com.hp.hpl.jena.graph.impl.TripleStore;
11: import com.hp.hpl.jena.graph.query.SimpleQueryHandler;
12: import com.hp.hpl.jena.util.iterator.ExtendedIterator;
13:
14: /**
15: A QueryHandler for GraphMemBase's subclasses, exploiting those classes
16: indexes to implement objectsFor, predicatesFor, and subjectsFor efficiently
17: for the (ANY, ANY) case used in listSubjects(), listPredicates(), and
18: listObjects().
19:
20: @author kers
21: */
22: public class GraphMemBaseQueryHandler extends SimpleQueryHandler {
23: protected final TripleStore store;
24:
25: public GraphMemBaseQueryHandler(GraphMemBase graph) {
26: super (graph);
27: this .store = graph.store;
28: }
29:
30: public ExtendedIterator objectsFor(Node s, Node p) {
31: return bothANY(s, p) ? findObjects() : super .objectsFor(s, p);
32: }
33:
34: public ExtendedIterator predicatesFor(Node s, Node o) {
35: return bothANY(s, o) ? findPredicates() : super .predicatesFor(
36: s, o);
37: }
38:
39: public ExtendedIterator subjectsFor(Node p, Node o) {
40: return bothANY(p, o) ? findSubjects() : super .subjectsFor(p, o);
41: }
42:
43: /**
44: Answer true iff both <code>a</code> and <code>b</code> are ANY wildcards
45: or are null (legacy).
46: */
47: private boolean bothANY(Node a, Node b) {
48: return (a == null || a.equals(Node.ANY))
49: && (b == null || b.equals(Node.ANY));
50: }
51:
52: public ExtendedIterator findPredicates() {
53: return store.listPredicates();
54: }
55:
56: public ExtendedIterator findObjects() {
57: return store.listObjects();
58: }
59:
60: public ExtendedIterator findSubjects() {
61: return store.listSubjects();
62: }
63:
64: }
65: /*
66: (c) Copyright 2004, 2005, 2006, 2007, 2008 Hewlett-Packard Development Company, LP
67: All rights reserved.
68:
69: Redistribution and use in source and binary forms, with or without
70: modification, are permitted provided that the following conditions
71: are met:
72:
73: 1. Redistributions of source code must retain the above copyright
74: notice, this list of conditions and the following disclaimer.
75:
76: 2. Redistributions in binary form must reproduce the above copyright
77: notice, this list of conditions and the following disclaimer in the
78: documentation and/or other materials provided with the distribution.
79:
80: 3. The name of the author may not be used to endorse or promote products
81: derived from this software without specific prior written permission.
82:
83: THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
84: IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
85: OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
86: IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
87: INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
88: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
89: DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
90: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
91: (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
92: THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
93: */
|