/*
* ome.util.mem.SimpleHandle
*
* Copyright 2006 University of Dundee. All rights reserved.
* Use is subject to license terms supplied in LICENSE.txt
*/
package ome.util.mem;
/**
* Supports unit tests for the {@link Handle} class. Takes on the Handle role,
* the Body is {@link MockBody}. Also, clearly exemplifies how to write a well
* behaved Handle.
*
* @author Jean-Marie Burel <a
* href="mailto:j.burel@dundee.ac.uk">j.burel@dundee.ac.uk</a>
* @author <br>
* Andrea Falconi <a
* href="mailto:a.falconi@dundee.ac.uk"> a.falconi@dundee.ac.uk</a>
* @since OME2.2
*/
class SimpleHandle extends Handle {
SimpleHandle() {
super(new MockBody()); // Always create a new Body object.
// Hold no state, as our state is hold by the Body.
}
// WARNING: A well behaved Handle mustn't leak out a reference to its
// Body. The only purpose of this method is to allow test cases to set
// expectations on the Mock object.
MockBody getInitialBody() {
return (MockBody) getBody();
}
// Replicate Body's class interface to forward calls.
public void readState() {
// This method only read the Body's state, just forward the call.
MockBody body = (MockBody) getBody();
body.readState();
// Now just discard the reference to the Body. No caching, no leakage.
}
public void writeState() {
// This method writes the Body's state, we must notify Handle first.
breakSharing();
// Then we can forward the call.
MockBody body = (MockBody) getBody();
body.writeState();
// Now just discard the reference to the Body. No caching, no leakage.
}
}