001: /*
002: (c) Copyright 2003, 2004, 2005, 2006, 2007, 2008 Hewlett-Packard Development Company, LP
003: [see end of file]
004: $Id: ReifiedStatementImpl.java,v 1.13 2008/01/02 12:05:01 andy_seaborne Exp $
005: */
006:
007: package com.hp.hpl.jena.rdf.model.impl;
008:
009: import com.hp.hpl.jena.enhanced.*;
010: import com.hp.hpl.jena.graph.*;
011: import com.hp.hpl.jena.rdf.model.*;
012:
013: /**
014: A ReifiedStatementImpl encodes a Statement and behaves as a Resource.
015: */
016:
017: public class ReifiedStatementImpl extends ResourceImpl implements
018: ReifiedStatement {
019: /** the Statement that this ReifiedStatement represents */
020: protected Statement statement;
021:
022: /**
023: private constructor, relies (ugh) on super(uri, model) generating
024: bnode if uril == null.
025: */
026:
027: private ReifiedStatementImpl(ModelCom m, String uri, Statement s) {
028: super (uri, m);
029: assertStatement(s);
030: }
031:
032: protected ReifiedStatementImpl(EnhGraph m, Node n, Statement s) {
033: super (n, m);
034: assertStatement(s);
035: }
036:
037: private void assertStatement(Statement s) {
038: statement = s;
039: }
040:
041: /**
042: answer [a .equals() version of] the Statement that this ReifiedStatement
043: represents.
044: */
045: public Statement getStatement() {
046: return statement;
047: }
048:
049: static final public Implementation reifiedStatementFactory = new Implementation() {
050: /**
051: convert a _node_ into a ReifiedStatement in the enhanced graph
052: _eg_ by looking into this graph's reifier to find the binding for the
053: node; throw a DoesNotReify exception if there's no mapping.
054: */
055: public EnhNode wrap(Node n, EnhGraph eg) {
056: Triple x = getTriple(eg, n);
057: if (x == null)
058: throw new DoesNotReifyException(n);
059: Statement st = StatementImpl.toStatement(x, (ModelCom) eg);
060: return new ReifiedStatementImpl(eg, n, st);
061: }
062:
063: /**
064: Answer true iff the node <code>n</code> can become a reified statement,
065: ie it is associated with a triple by <code>eg</code>'s Reifier.
066: @param eg the (enhanced) graph who's Reifier might hold the triple
067: @param n the node who's triple is required
068: @return true iff there's an associated triple
069: */
070: public boolean canWrap(Node n, EnhGraph eg) {
071: return getTriple(eg, n) != null;
072: }
073:
074: /**
075: Answer the triple associated with <code>n</code> by eg's graph's Reifier.
076: @param eg the (enhanced) graph who's Reifier might hold the triple
077: @param n the node who's triple is required
078: @return the associated triple if any, otherwise null
079: */
080: private Triple getTriple(EnhGraph eg, Node n) {
081: return eg.asGraph().getReifier().getTriple(n);
082: }
083: };
084:
085: /**
086: Answer our Reifier (ie our Model's Graph's Reifier).
087: */
088: protected Reifier getReifier() {
089: return getModel().getGraph().getReifier();
090: }
091:
092: public boolean isValid() {
093: return getModel().getGraph().getReifier().getTriple(
094: this .asNode()) != null;
095: }
096:
097: /**
098: tell the underlying graph's reifier that this ReifiedStatement's node
099: represents any Statement with this statement's triple. (May throw an
100: exception if the node is already reified to something different.)
101: */
102: private ReifiedStatementImpl installInReifier() {
103: getReifier().reifyAs(this .asNode(), statement.asTriple());
104: return this ;
105: }
106:
107: /**
108: factory method. answer a ReifiedStatement which encodes the
109: Statement _s_. The mapping is remembered.
110: */
111: public static ReifiedStatement create(Statement s) {
112: return create((ModelCom) s.getModel(), (String) null, s);
113: }
114:
115: /**
116: factory method. answer a ReifiedStatement which encodes the
117: Statement _s_ with uri _uri_. The mapping is remembered.
118: */
119: public static ReifiedStatementImpl create(ModelCom m, String uri,
120: Statement s) {
121: return new ReifiedStatementImpl(m, uri, s).installInReifier();
122: }
123:
124: public static ReifiedStatementImpl create(EnhGraph eg, Node n,
125: Statement s) {
126: return new ReifiedStatementImpl(eg, n, s).installInReifier();
127: }
128:
129: public String toString() {
130: return super .toString() + "=>" + statement;
131: }
132:
133: public static ReifiedStatement createExistingReifiedStatement(
134: ModelCom model, Node n) {
135: Triple t = model.getGraph().getReifier().getTriple(n);
136: return new ReifiedStatementImpl(model, n, model.asStatement(t));
137: }
138: }
139:
140: /*
141: (c) Copyright 2003, 2004, 2005, 2006, 2007, 2008 Hewlett-Packard Development Company, LP
142: All rights reserved.
143:
144: Redistribution and use in source and binary forms, with or without
145: modification, are permitted provided that the following conditions
146: are met:
147:
148: 1. Redistributions of source code must retain the above copyright
149: notice, this list of conditions and the following disclaimer.
150:
151: 2. Redistributions in binary form must reproduce the above copyright
152: notice, this list of conditions and the following disclaimer in the
153: documentation and/or other materials provided with the distribution.
154:
155: 3. The name of the author may not be used to endorse or promote products
156: derived from this software without specific prior written permission.
157:
158: THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
159: IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
160: OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
161: IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
162: INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
163: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
164: DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
165: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
166: (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
167: THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
168: */
|