package pt.ist.fenixframework.pstm;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import jvstm.ReadTransaction;
import jvstm.Transaction;
import jvstm.cps.ConsistencyCheckTransaction;
import jvstm.cps.Depended;
import pt.ist.fenixframework.DomainObject;
import org.apache.ojb.broker.PersistenceBroker;
public class FenixConsistencyCheckTransaction extends ReadTransaction
implements ConsistencyCheckTransaction,FenixTransaction {
private FenixTransaction parent;
private Object checkedObj;
public FenixConsistencyCheckTransaction(FenixTransaction parent, Object checkedObj) {
super((Transaction)parent);
this.parent = parent;
this.checkedObj = checkedObj;
}
@Override
public Transaction makeNestedTransaction(boolean readOnly) {
throw new Error("Nested transactions not supported yet...");
}
@Override
public <T> T getBoxValue(jvstm.VBox<T> vbox) {
throw new Error("In a FenixConsistencyCheckTransaction we must call the three-arg getBoxValue method");
}
private static final Set<Depended> EMPTY_SET = Collections.unmodifiableSet(new HashSet<Depended>());
public Set<Depended> getDepended() {
return EMPTY_SET;
}
public void setReadOnly() {
throw new Error("It doesn't make sense to call setReadOnly for a FenixConsistencyCheckTransaction");
}
public DBChanges getDBChanges() {
throw new Error("A FenixConsistencyCheckTransaction is read-only");
}
public PersistenceBroker getOJBBroker() {
return parent.getOJBBroker();
}
public DomainObject readDomainObject(String classname, int oid) {
return parent.readDomainObject(classname, oid);
}
public <T> T getBoxValue(VBox<T> vbox, Object obj, String attr) {
if (obj != checkedObj) {
throw new Error("We currently do not support consistency-predicates that access other objects");
}
// ask the parent transaction (a RW tx) for the value of the box
return parent.getBoxValue(vbox, obj, attr);
}
public boolean isBoxValueLoaded(VBox vbox) {
throw new Error("It doesn't make sense to call isBoxValueLoaded for a FenixConsistencyCheckTransaction");
}
public void logRelationAdd(String relationName, DomainObject o1, DomainObject o2) {
throw new Error("It doesn't make sense to call logRelationAdd for a FenixConsistencyCheckTransaction");
}
public void logRelationRemove(String relationName, DomainObject o1, DomainObject o2) {
throw new Error("It doesn't make sense to call logRelationRemove for a FenixConsistencyCheckTransaction");
}
}