/* * 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.graph.NodeFactory ; import org.apache.jena.rdf.model.* ; import org.apache.jena.shared.JenaException ; /** Abstract base class for StaementImpl - pulls up the stuff that doesn't depend on how statements are represented (as S/P/O or as Triples). */ public abstract class StatementBase { protected final ModelCom model; protected StatementBase( ModelCom model ) { if (model == null) throw new JenaException( "Statement models must no be null" ); this.model = model; } public Model getModel() { return model; } /** * replace this StaementImpl [ie the one of which this is the base] with (S, * P, n). Answer the new StaementImpl. Abstract here to allow methods to be * pulled up. */ protected abstract StatementImpl replace( RDFNode n ); /** * Answer the object of this statement as a Literal, or throw a * LiteralRequiredException. */ public abstract Literal getLiteral(); public abstract Resource getResource(); public abstract Resource getSubject(); public abstract Property getPredicate(); public abstract RDFNode getObject(); protected StatementImpl stringReplace(String s, String lang, boolean wellFormed) { return replace(new LiteralImpl(NodeFactory.createLiteral(s, lang, wellFormed), model)); } /** * "replace" the Object of this statement with the literal string value _s_. * NOTE: this is a convenience function to eliminate the use of a deprecated * constructor; when data-types are put properly into Jena, it will likely * disappear. */ protected StatementImpl stringReplace( String s ) { return stringReplace( s, "", false ); } public Statement changeLiteralObject( boolean o ) { return changeObject( model.createTypedLiteral( o ) ); } public Statement changeLiteralObject( long o ) { return changeObject( model.createTypedLiteral( o ) ); } public Statement changeLiteralObject( char o ) { return changeObject( model.createTypedLiteral( o ) ); } public Statement changeLiteralObject( double o ) { return changeObject( model.createTypedLiteral( o ) ); } public Statement changeLiteralObject( float o ) { return changeObject( model.createTypedLiteral( o ) ); } public Statement changeLiteralObject( int o ) { return changeObject( model.createTypedLiteral( o ) ); } public Statement changeObject( String o ) { return stringReplace( String.valueOf( o ) ); } public Statement changeObject( String o, boolean wellFormed ) { return stringReplace( String.valueOf( o ), "", wellFormed ); } public Statement changeObject( String o, String l ) { return stringReplace( String.valueOf( o ), l, false ); } public Statement changeObject( String o, String l, boolean wellFormed ) { return stringReplace( String.valueOf( o ), l, wellFormed ); } public Statement changeObject( RDFNode o ) { return replace( o ); } public boolean getBoolean() { return getLiteral().getBoolean(); } public byte getByte() { return getLiteral().getByte(); } public short getShort() { return getLiteral().getShort(); } public int getInt() { return getLiteral().getInt(); } public long getLong() { return getLiteral().getLong(); } public char getChar() { return getLiteral().getChar(); } public float getFloat() { return getLiteral().getFloat(); } public double getDouble() { return getLiteral().getDouble(); } public String getString() { return getLiteral().getLexicalForm(); } /** * utility: check that node is a Resource, throw otherwise */ protected Resource mustBeResource(RDFNode n) { if (n instanceof Resource) return (Resource) n; else throw new ResourceRequiredException(n); } public String getLanguage() { return getLiteral().getLanguage(); } public boolean getWellFormed() { return hasWellFormedXML(); } public boolean hasWellFormedXML() { return getLiteral().isWellFormedXML(); } /** Answer a string describing this Statement in a vagely pretty way, with the representations of the subject, predicate, and object in that order. */ @Override public String toString() { return "[" + getSubject().toString() + ", " + getPredicate().toString() + ", " + objectString( getObject() ) + "]"; } /** Answer a string describing <code>object</code>, quoting it if it is a literal. */ protected String objectString( RDFNode object ) { return object.asNode().toString( null, true ); } }