001: /*
002: (c) Copyright 2002, 2003, 2004, 2005, 2006, 2007, 2008 Hewlett-Packard Development Company, LP
003: [See end of file]
004: $Id: Element.java,v 1.11 2008/01/02 12:07:57 andy_seaborne Exp $
005: */
006:
007: package com.hp.hpl.jena.graph.query;
008:
009: import com.hp.hpl.jena.graph.*;
010:
011: /**
012: An Element of a matching triple. Elements have associated indexes, their place
013: in the Domain storing the matching values. Subclasses represent constants,
014: binding occurances of variables, and bound instances of variables.
015:
016: @author hedgehog
017: */
018:
019: public abstract class Element {
020: protected final int index;
021:
022: /**
023: Answer this Element's index in the Domains it is compiled for.
024: */
025: public int getIndex() {
026: return index;
027: }
028:
029: /**
030: Initialise this Element with its allocated index.
031: */
032: protected Element(int index) {
033: this .index = index;
034: }
035:
036: /**
037: Initialiser invoked by sub-classes which need no index.
038: */
039: protected Element() {
040: this (-1);
041: }
042:
043: /**
044: The constant ANY matches anything and binds nothing
045: */
046: public static final Element ANY = new Element() {
047: public boolean match(Domain d, Node n) {
048: return true;
049: }
050:
051: public Node asNodeMatch(Domain d) {
052: return Node.ANY;
053: }
054:
055: public String toString() {
056: return "<any>";
057: }
058: };
059:
060: /**
061: Answer true if this Element matches x given the bindings in d. May side-effect d
062: by (re)binding if this element is a variable.
063: @param d the variable bindings to read/update for variables
064: @param x the value to match
065: @return true if the match succeeded
066: */
067: public abstract boolean match(Domain d, Node x);
068:
069: /**
070: Answer a Node suitable as a pattern-match element in a TripleMatch approximating
071: this Element. Thus Bind elements map to null (or Node.ANY).
072: @param d the domain holding the variable bindings
073: @return the matched value (null if none, ie binding occurance or ANY)
074: */
075: public abstract Node asNodeMatch(Domain d);
076:
077: public String toString() {
078: return "<" + this .getClass() + " element>";
079: }
080: }
081:
082: /*
083: (c) Copyright 2002, 2003, 2004, 2005, 2006, 2007, 2008 Hewlett-Packard Development Company, LP
084: All rights reserved.
085:
086: Redistribution and use in source and binary forms, with or without
087: modification, are permitted provided that the following conditions
088: are met:
089:
090: 1. Redistributions of source code must retain the above copyright
091: notice, this list of conditions and the following disclaimer.
092:
093: 2. Redistributions in binary form must reproduce the above copyright
094: notice, this list of conditions and the following disclaimer in the
095: documentation and/or other materials provided with the distribution.
096:
097: 3. The name of the author may not be used to endorse or promote products
098: derived from this software without specific prior written permission.
099:
100: THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
101: IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
102: OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
103: IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
104: INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
105: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
106: DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
107: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
108: (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
109: THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
110: */
|