/*
* Copyright Aduna (http://www.aduna-software.com/) (c) 1997-2006.
*
* Licensed under the Aduna BSD-style license.
*/
package org.openrdf.sail.memory.model;
import org.openrdf.model.URI;
/**
* A MemoryStore-specific implementation of URI that stores separated namespace
* and local name information to enable reuse of namespace String objects
* (reducing memory usage) and that gives it node properties.
*/
public class MemURI implements URI, MemResource {
/*-----------*
* Variables *
*-----------*/
/**
*
*/
private static final long serialVersionUID = 9118488004995852467L;
/**
* The URI's namespace.
*/
private final String namespace;
/**
* The URI's local name.
*/
private final String localName;
/**
* The object that created this MemURI.
*/
transient private Object creator;
/**
* The MemURI's hash code, 0 if not yet initialized.
*/
private int hashCode = 0;
/**
* The list of statements for which this MemURI is the subject.
*/
transient private MemStatementList subjectStatements = null;
/**
* The list of statements for which this MemURI is the predicate.
*/
transient private MemStatementList predicateStatements = null;
/**
* The list of statements for which this MemURI is the object.
*/
transient private MemStatementList objectStatements = null;
/**
* The list of statements for which this MemURI represents the context.
*/
transient private MemStatementList contextStatements = null;
/*--------------*
* Constructors *
*--------------*/
/**
* Creates a new MemURI for a URI.
*
* @param creator
* The object that is creating this MemURI.
* @param namespace
* namespace part of URI.
* @param localName
* localname part of URI.
*/
public MemURI(Object creator, String namespace, String localName) {
this.creator = creator;
this.namespace = namespace;
this.localName = localName;
}
/*---------*
* Methods *
*---------*/
// Overrides Object.toString(), implements URI.toString()
@Override
public String toString() {
return namespace + localName;
}
public String stringValue() {
return toString();
}
// Implements URI.getNamespace()
public String getNamespace() {
return namespace;
}
// Implements URI.getLocalName()
public String getLocalName() {
return localName;
}
// Overrides Object.equals(Object), implements URI.equals(Object)
@Override
public boolean equals(Object other) {
if (this == other) {
return true;
}
if (other instanceof MemURI) {
MemURI o = (MemURI)other;
return namespace.equals(o.getNamespace()) && localName.equals(o.getLocalName());
}
else if (other instanceof URI) {
String otherStr = other.toString();
return namespace.length() + localName.length() == otherStr.length() && otherStr.endsWith(localName)
&& otherStr.startsWith(namespace);
}
return false;
}
// Overrides Object.hashCode(), implements URI.hashCode()
@Override
public int hashCode() {
if (hashCode == 0) {
hashCode = toString().hashCode();
}
return hashCode;
}
// Implements MemValue.getCreator()
public Object getCreator() {
return creator;
}
// Implements MemValue.getSubjectStatementList()
public MemStatementList getSubjectStatementList() {
if (subjectStatements == null) {
return EMPTY_LIST;
}
else {
return subjectStatements;
}
}
// Implements MemValue.getSubjectStatementCount()
public int getSubjectStatementCount() {
if (subjectStatements == null) {
return 0;
}
else {
return subjectStatements.size();
}
}
// Implements MemValue.addSubjectStatement(MemStatement)
public void addSubjectStatement(MemStatement st) {
if (subjectStatements == null) {
subjectStatements = new MemStatementList(4);
}
subjectStatements.add(st);
}
// Implements MemValue.removeSubjectStatement(MemStatement)
public void removeSubjectStatement(MemStatement st) {
subjectStatements.remove(st);
if (subjectStatements.isEmpty()) {
subjectStatements = null;
}
}
/**
* Gets the list of statements for which this MemURI is the predicate.
*
* @return a MemStatementList containing the statements.
*/
public MemStatementList getPredicateStatementList() {
if (predicateStatements == null) {
return EMPTY_LIST;
}
else {
return predicateStatements;
}
}
/**
* Gets the number of Statements for which this MemURI is the predicate.
*
* @return An integer larger than or equal to 0.
*/
public int getPredicateStatementCount() {
if (predicateStatements == null) {
return 0;
}
else {
return predicateStatements.size();
}
}
/**
* Adds a statement to this MemURI's list of statements for which it is the
* predicate.
*/
public void addPredicateStatement(MemStatement st) {
if (predicateStatements == null) {
predicateStatements = new MemStatementList(4);
}
predicateStatements.add(st);
}
/**
* Removes a statement from this MemURI's list of statements for which it is
* the predicate.
*/
public void removePredicateStatement(MemStatement st) {
predicateStatements.remove(st);
if (predicateStatements.isEmpty()) {
predicateStatements = null;
}
}
// Implements MemValue.getObjectStatementList()
public MemStatementList getObjectStatementList() {
if (objectStatements == null) {
return EMPTY_LIST;
}
else {
return objectStatements;
}
}
// Implements MemValue.getObjectStatementCount()
public int getObjectStatementCount() {
if (objectStatements == null) {
return 0;
}
else {
return objectStatements.size();
}
}
// Implements MemValue.addObjectStatement(MemStatement)
public void addObjectStatement(MemStatement st) {
if (objectStatements == null) {
objectStatements = new MemStatementList(4);
}
objectStatements.add(st);
}
// Implements MemValue.removeObjectStatement(MemStatement)
public void removeObjectStatement(MemStatement st) {
objectStatements.remove(st);
if (objectStatements.isEmpty()) {
objectStatements = null;
}
}
// Implements MemResource.getContextStatementList()
public MemStatementList getContextStatementList() {
if (contextStatements == null) {
return EMPTY_LIST;
}
else {
return contextStatements;
}
}
// Implements MemResource.getContextStatementCount()
public int getContextStatementCount() {
if (contextStatements == null) {
return 0;
}
else {
return contextStatements.size();
}
}
// Implements MemResource.addContextStatement(MemStatement)
public void addContextStatement(MemStatement st) {
if (contextStatements == null) {
contextStatements = new MemStatementList(4);
}
contextStatements.add(st);
}
// Implements MemResource.removeContextStatement(MemStatement)
public void removeContextStatement(MemStatement st) {
contextStatements.remove(st);
if (contextStatements.isEmpty()) {
contextStatements = null;
}
}
}