if (me == null) { throw new Error("oops"); }
    public PersistentObject add(final OID oid, Property prop,                                final Object value) {        if (LOG.isDebugEnabled()) {            trace("add", new Object[] {oid, prop.getName(), value});        }        prop.dispatch(new Property.Switch() {                public void onRole(Role role) {                    addEvent(new AddEvent(Session.this, oid, role, value));                    if (role.isReversable()) {                        PersistentObject me = retrieve(oid);                        Role rev = role.getReverse();                        PersistentObject po = (PersistentObject) value;                        if (rev.isCollection()) {                            addEvent(new AddEvent(Session.this, po.getOID(),                                                  rev, me));                        } else {                            PersistentObject old =                                (PersistentObject) get(po.getOID(), rev);                            if (old != null) {                                addEvent(new RemoveEvent(Session.this,                                                         old.getOID(), rev,                                                         po));                            }                            addEvent(new SetEvent(Session.this, po.getOID(),                                                  rev, me));                        }                    }                }                public void onAlias(Alias alias) {                    add(oid, alias.getTarget(), value);                }                public void onLink(Link link) {                    // should deal with link attributes here                    throw new Error("not implemented");                }            });        if (LOG.isDebugEnabled()) {            untrace("add", null);        }        return null;    }