@Override Serializable createMutableContainer(final Object object) { AttributeHolder holder = (AttributeHolder)object; return new AttributeHolder(holder.getValue()); }
public Map getInheritableAttributes() { Map inheritableAttributes = new HashMap(); Map map = (Map) threadBasedMap.get(Thread.currentThread()); if(map != null) { for(Iterator it = map.values().iterator(); it.hasNext(); ) { Map attributes = (Map) it.next(); for(Iterator ij = attributes.entrySet().iterator(); ij.hasNext(); ) { Map.Entry entry = (Map.Entry) ij.next(); AttributeHolder original = (AttributeHolder) entry.getValue(); AttributeHolder copy = new AttributeHolder(original.getValue()); if(original.isSerializable()) { copy.serializable(); } inheritableAttributes.put(entry.getKey(), copy); } } } return inheritableAttributes; }
@Override 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 { Serializable mutableContainer = createMutableContainer(object); alreadyDecomposed.put(object, mutableContainer); decomposeInto(object, mutableContainer, alreadyDecomposed); Serializable holder = new AttributeHolder(updatedValue); return holder; } }