/*
* Copyright Aduna (http://www.aduna-software.com/) (c) 1997-2006.
*
* Licensed under the Aduna BSD-style license.
*/
package org.openrdf.model.impl;
import org.openrdf.model.Resource;
import org.openrdf.model.Statement;
import org.openrdf.model.URI;
import org.openrdf.model.Value;
/**
* An implementation of the {@link Statement} interface for statements that
* don't have an associated context. For statements that do have an associated
* context, {@link ContextStatementImpl} can be used.
*/
public class StatementImpl implements Statement {
/*-----------*
* Constants *
*-----------*/
private static final long serialVersionUID = 8707542157460228077L;
/**
* The statement's subject.
*/
private final Resource subject;
/**
* The statement's predicate.
*/
private final URI predicate;
/**
* The statement's object.
*/
private final Value object;
/*--------------*
* Constructors *
*--------------*/
/**
* Creates a new Statement with the supplied subject, predicate and object.
*
* @param subject
* The statement's subject, must not be <tt>null</tt>.
* @param predicate
* The statement's predicate, must not be <tt>null</tt>.
* @param object
* The statement's object, must not be <tt>null</tt>.
*/
public StatementImpl(Resource subject, URI predicate, Value object) {
assert (subject != null);
assert (predicate != null);
assert (object != null);
this.subject = subject;
this.predicate = predicate;
this.object = object;
}
/*---------*
* Methods *
*---------*/
// Implements Statement.getSubject()
public Resource getSubject() {
return subject;
}
// Implements Statement.getPredicate()
public URI getPredicate() {
return predicate;
}
// Implements Statement.getObject()
public Value getObject() {
return object;
}
// Implements Statement.getContext()
public Resource getContext() {
return null;
}
// Overrides Object.equals(Object), implements Statement.equals(Object)
@Override
public boolean equals(Object other) {
if (this == other) {
return true;
}
if (other instanceof Statement) {
Statement otherSt = (Statement)other;
// The object is potentially the cheapest to check, as types
// of these references might be different.
// In general the number of different predicates in sets of
// statements is the smallest, so predicate equality is checked
// last.
return object.equals(otherSt.getObject()) && subject.equals(otherSt.getSubject())
&& predicate.equals(otherSt.getPredicate());
}
return false;
}
// Overrides Object.hashCode(), implements Statement.hashCode()
@Override
public int hashCode() {
return 961 * subject.hashCode() + 31 * predicate.hashCode() + object.hashCode();
}
/**
* Gives a String-representation of this Statement that can be used for
* debugging.
*/
@Override
public String toString() {
StringBuilder sb = new StringBuilder(256);
sb.append("(");
sb.append(getSubject());
sb.append(", ");
sb.append(getPredicate());
sb.append(", ");
sb.append(getObject());
sb.append(")");
return sb.toString();
}
}