package com.orbitz.monitoring.lib.decomposer;
import java.io.Serializable;
import java.util.IdentityHashMap;
/**
* Default AttributeDecomposer.Step implementations
* @author Doug Barth
*/
abstract class AbstractAttributeDecomposerStep implements AttributeDecomposer.Step {
public Serializable decompose(final Object object,
final IdentityHashMap<Object, Serializable> alreadyDecomposed) {
if (object == null) {
return null;
}
if (alreadyDecomposed.containsKey(object)) {
return alreadyDecomposed.get(object);
} else {
final Serializable mutableContainer = createMutableContainer(object);
alreadyDecomposed.put(object, mutableContainer);
decomposeInto(object, mutableContainer, alreadyDecomposed);
return mutableContainer;
}
}
abstract Serializable createMutableContainer(Object o);
abstract void decomposeInto(Object o, Serializable container,
IdentityHashMap<Object, Serializable> alreadyDecomposed);
}