/** * Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.master.cache; import net.sf.ehcache.Element; import net.sf.ehcache.store.compound.ReadWriteCopyStrategy; import org.joda.beans.Bean; import org.joda.beans.JodaBeanUtils; import org.joda.beans.MetaProperty; import com.opengamma.master.AbstractLink; /** * Strategy based on Joda beans. */ public class JodaBeanCopyStrategy implements ReadWriteCopyStrategy<Element> { /** Serialization version. */ private static final long serialVersionUID = -7446127079130032128L; @Override public Element copyForWrite(Element element) { if (element == null) { return null; } else { Bean bean = (Bean) element.getObjectValue(); Element result = new Element(element.getObjectKey(), JodaBeanUtils.clone(bean)); // Clear any resolved links that point to other documents (e.g. positions linking to securities) for (MetaProperty<?> metaProperty : bean.metaBean().metaPropertyIterable()) { if (AbstractLink.class.isAssignableFrom(metaProperty.propertyType())) { AbstractLink<?> link = (AbstractLink<?>) metaProperty.get(bean); link.setTarget(null); } } return result; } } @Override public Element copyForRead(Element element) { if (element == null) { return null; } else { Bean bean = (Bean) element.getObjectValue(); return new Element(element.getObjectKey(), JodaBeanUtils.clone(bean)); } } }