/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.jena.rdf.model.impl;
import org.apache.jena.enhanced.* ;
import org.apache.jena.graph.* ;
import org.apache.jena.rdf.model.* ;
/**
A ReifiedStatementImpl encodes a Statement and behaves as a Resource.
*/
public class ReifiedStatementImpl extends ResourceImpl implements ReifiedStatement
{
/** the Statement that this ReifiedStatement represents */
protected Statement statement;
/**
private constructor, relies (ugh) on super(uri, model) generating
bnode if uril == null.
*/
private ReifiedStatementImpl( ModelCom m, String uri, Statement s )
{
super( uri, m );
assertStatement( s );
}
protected ReifiedStatementImpl( EnhGraph m, Node n, Statement s )
{
super( n, m );
assertStatement( s );
}
private void assertStatement( Statement s )
{
statement = s;
}
/**
answer [a .equals() version of] the Statement that this ReifiedStatement
represents.
*/
@Override
public Statement getStatement()
{ return statement; }
static final public Implementation reifiedStatementFactory = new Implementation()
{
/**
convert a _node_ into a ReifiedStatement in the enhanced graph
_eg_ by looking into this graph's reifier to find the binding for the
node; throw a DoesNotReify exception if there's no mapping.
*/
@Override
public EnhNode wrap( Node n, EnhGraph eg )
{
Triple x = getTriple( eg, n );
if (x == null) throw new DoesNotReifyException( n );
Statement st = StatementImpl.toStatement( x, (ModelCom) eg );
return new ReifiedStatementImpl( eg, n, st );
}
/**
Answer true iff the node <code>n</code> can become a reified statement,
ie it is associated with a triple by <code>eg</code>'s Reifier.
@param eg the (enhanced) graph who's Reifier might hold the triple
@param n the node who's triple is required
@return true iff there's an associated triple
*/
@Override
public boolean canWrap( Node n, EnhGraph eg )
{ return getTriple( eg, n ) != null; }
/**
Answer the triple associated with <code>n</code> by eg's graph's Reifier.
@param eg the (enhanced) graph who's Reifier might hold the triple
@param n the node who's triple is required
@return the associated triple if any, otherwise null
*/
private Triple getTriple( EnhGraph eg, Node n )
{ return ReifierStd.getTriple(eg.asGraph(), n ); }
};
// /**
// Answer our Reifier (ie our Model's Graph's Reifier).
// */
// protected Reifier getReifier()
// { return getModel().getGraph().getReifier(); }
@Override
public boolean isValid()
{ return ReifierStd.getTriple(getModel().getGraph(), this.asNode() ) != null; }
/**
tell the underlying graph's reifier that this ReifiedStatement's node
represents any Statement with this statement's triple. (May throw an
exception if the node is already reified to something different.)
*/
private ReifiedStatementImpl installInReifier()
{
ReifierStd.reifyAs(getModel().getGraph(), this.asNode(), statement.asTriple() );
return this;
}
/**
factory method. answer a ReifiedStatement which encodes the
Statement _s_. The mapping is remembered.
*/
public static ReifiedStatement create( Statement s )
{ return create( (ModelCom) s.getModel(), (String) null, s ); }
/**
factory method. answer a ReifiedStatement which encodes the
Statement _s_ with uri _uri_. The mapping is remembered.
*/
public static ReifiedStatementImpl create( ModelCom m, String uri, Statement s )
{ return new ReifiedStatementImpl( m, uri, s ).installInReifier(); }
public static ReifiedStatementImpl create( EnhGraph eg, Node n, Statement s )
{ return new ReifiedStatementImpl( eg, n, s ).installInReifier(); }
@Override
public String toString()
{ return super.toString() + "=>" + statement; }
public static ReifiedStatement createExistingReifiedStatement( ModelCom model, Node n )
{
Triple t = ReifierStd.getTriple(model.getGraph(), n );
return new ReifiedStatementImpl( model, n, model.asStatement( t ) );
}
}