package co.codewizards.cloudstore.ls.core.invoke;
import static co.codewizards.cloudstore.core.util.AssertUtil.*;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.ObjectStreamException;
import java.io.Serializable;
import java.util.Collections;
import java.util.IdentityHashMap;
import java.util.Map;
import co.codewizards.cloudstore.core.ls.NoObjectRef;
public class ObjectGraphContainer implements Serializable {
private static final long serialVersionUID = 1L;
private Object root;
@NoObjectRef(inheritToObjectGraphChildren = false)
private IdentityHashMap<Object, ForceNonTransientContainer> transientFieldOwnerObject2ForceNonTransientContainer = new IdentityHashMap<Object, ForceNonTransientContainer>();
public ObjectGraphContainer(final Object root) {
this.root = assertNotNull(root, "root");
}
public Object getRoot() {
return root;
}
public void putForceNonTransientContainer(final ForceNonTransientContainer forceNonTransientContainer) {
assertNotNull(forceNonTransientContainer, "forceNonTransientContainer");
transientFieldOwnerObject2ForceNonTransientContainer.put(forceNonTransientContainer.getTransientFieldOwnerObject(), forceNonTransientContainer);
}
private void writeObject(ObjectOutputStream out) throws IOException {
out.writeObject(root);
out.writeObject(transientFieldOwnerObject2ForceNonTransientContainer);
}
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
root = in.readObject();
@SuppressWarnings("unchecked")
final IdentityHashMap<Object, ForceNonTransientContainer> m = (IdentityHashMap<Object, ForceNonTransientContainer>) in.readObject();
transientFieldOwnerObject2ForceNonTransientContainer = m;
}
@SuppressWarnings("unused") // seems, Eclipse does not (yet) know this (new?!) serialization method
private void readObjectNoData() throws ObjectStreamException {
throw new UnsupportedOperationException("WTF?!");
}
public Map<Object, ForceNonTransientContainer> getTransientFieldOwnerObject2ForceNonTransientContainer() {
return Collections.unmodifiableMap(transientFieldOwnerObject2ForceNonTransientContainer);
}
}