/******************************************************************************* * Copyright (c) 2009, 2010 Fraunhofer IWU and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Fraunhofer IWU - initial API and implementation *******************************************************************************/ package net.enilink.komma.em.internal; import java.util.Map; import java.util.Set; import com.google.inject.Inject; import net.enilink.komma.core.IEntity; import net.enilink.komma.core.IEntityDecorator; import net.enilink.komma.core.IReference; import net.enilink.komma.core.IReferenceable; import net.enilink.komma.core.URI; public class EagerCachingEntityManager extends DecoratingEntityManager { @Inject private Map<IReference, Object> entityCache; @Inject public EagerCachingEntityManager(Set<IEntityDecorator> decorators) { super(decorators); } @Override protected IEntity createBeanForClass(IReference resource, Class<?> type) { Object bean = entityCache.get(resource); if (bean == null || !bean.getClass().equals(type)) { Object oldBean = bean; bean = super.createBeanForClass(resource, type); entityCache.put(resource, bean); } return (IEntity) bean; } public <T> T rename(T bean, URI uri) { entityCache.remove(((IReferenceable) bean).getReference()); T newBean = super.rename(bean, uri); entityCache.put(((IReferenceable) newBean).getReference(), bean); return newBean; } }