/*
* Copyright (c) 2010 Mysema Ltd.
* All rights reserved.
*
*/
package com.mysema.rdfbean.model;
import javax.annotation.Nullable;
import javax.annotation.concurrent.Immutable;
import com.mysema.commons.lang.Assert;
/**
* STMT represents an RDF statement
*
* @author sasa
*
*/
@Immutable
public final class STMT {
private final ID subject;
private final UID predicate;
private final NODE object;
@Nullable
private final UID context;
private final boolean asserted;
public STMT(ID subject, UID predicate, NODE object) {
this(subject, predicate, object, null);
}
public STMT(ID subject, UID predicate, NODE object, @Nullable UID context) {
this(subject, predicate, object, context, true);
}
public STMT(STMT stmt, UID context) {
this(stmt.getSubject(), stmt.getPredicate(), stmt.getObject(), context);
}
public STMT(ID subject, UID predicate, NODE object, @Nullable UID context, boolean asserted) {
this.subject = Assert.notNull(subject, "subject");
this.predicate = Assert.notNull(predicate, "predicate");
this.object = Assert.notNull(object, "object");
this.context = context;
this.asserted = asserted;
}
public NODE getObject() {
return object;
}
public UID getPredicate() {
return predicate;
}
public ID getSubject() {
return subject;
}
public String toString() {
return "" + subject + " " + predicate + " " + object;
}
@Nullable
public UID getContext() {
return context;
}
public boolean isObjectStatement() {
return object instanceof ID;
}
public boolean isAsserted() {
return asserted;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + subject.hashCode();
result = prime * result + predicate.hashCode();
result = prime * result + object.hashCode();
result = prime * result + ((context == null) ? 0 : context.hashCode());
result = prime * result + (asserted ? 1231 : 1237);
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
} else if (obj instanceof STMT) {
STMT other = (STMT) obj;
if (!subject.equals(other.subject)) {
return false;
}
if (!predicate.equals(other.predicate)) {
return false;
}
if (!object.equals(other.object)) {
return false;
}
if (context == null) {
if (other.context != null) {
return false;
}
} else if (!context.equals(other.context)) {
return false;
}
if (asserted != other.asserted) {
return false;
}
return true;
} else {
return false;
}
}
}