/* This file is part of the db4o object database http://www.db4o.com
Copyright (C) 2004 - 2011 Versant Corporation http://www.versant.com
db4o is free software; you can redistribute it and/or modify it under
the terms of version 3 of the GNU General Public License as published
by the Free Software Foundation.
db4o is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License along
with this program. If not, see http://www.gnu.org/licenses/. */
package com.db4o.internal;
import com.db4o.ext.*;
public class FrozenObjectInfo implements ObjectInfo {
private final Db4oDatabase _sourceDatabase;
private final long _uuidLongPart;
private final long _id;
private final long _commitTimestamp;
private final Object _object;
public FrozenObjectInfo(Object object, long id, Db4oDatabase sourceDatabase, long uuidLongPart, long commitTimestamp) {
_sourceDatabase = sourceDatabase;
_uuidLongPart = uuidLongPart;
_id = id;
_commitTimestamp = commitTimestamp;
_object = object;
}
private FrozenObjectInfo(ObjectReference ref, VirtualAttributes virtualAttributes) {
this(
ref == null ? null : ref.getObject(),
ref == null ? -1 :ref.getID(),
virtualAttributes == null ? null : virtualAttributes.i_database,
virtualAttributes == null ? -1 : virtualAttributes.i_uuid,
virtualAttributes == null ? 0 : virtualAttributes.i_version);
}
public FrozenObjectInfo(Transaction trans, ObjectReference ref, boolean committed) {
this(ref, isInstantiatedReference(ref) ? ref.virtualAttributes(trans, committed) : null);
}
private static boolean isInstantiatedReference(ObjectReference ref){
return ref != null && ref.getObject() != null;
}
public long getInternalID() {
return _id;
}
public Object getObject() {
return _object;
}
public Db4oUUID getUUID() {
if(_sourceDatabase == null ){
return null;
}
return new Db4oUUID(_uuidLongPart, _sourceDatabase.getSignature());
}
public long getVersion() {
return getCommitTimestamp();
}
public long getCommitTimestamp() {
return _commitTimestamp;
}
public long sourceDatabaseId(Transaction trans) {
if(_sourceDatabase == null){
return -1;
}
return _sourceDatabase.getID(trans);
}
public long uuidLongPart() {
return _uuidLongPart;
}
}