package org.exoplatform.portal.mop.page;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.exoplatform.commons.serialization.MarshalledObject;
import org.exoplatform.portal.pom.config.POMSession;
/**
* A simple implementation for unit testing purpose.
*
* @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a>
*/
public class SimpleDataCache extends DataCache {
/** . */
protected Map<MarshalledObject<PageKey>, MarshalledObject<PageData>> pages;
public SimpleDataCache() {
this.pages = new ConcurrentHashMap<MarshalledObject<PageKey>, MarshalledObject<PageData>>();
}
@Override
protected PageData getPage(POMSession session, PageKey key) {
MarshalledObject<PageKey> marshalledKey = MarshalledObject.marshall(key);
MarshalledObject<PageData> marshalledPage = pages.get(marshalledKey);
if (marshalledPage == null) {
PageData page = loadPage(session, key);
if (page != null) {
pages.put(marshalledKey, MarshalledObject.marshall(page));
return page;
} else {
return null;
}
} else {
return marshalledPage.unmarshall();
}
}
@Override
protected void removePage(POMSession session, PageKey key) {
pages.remove(MarshalledObject.marshall(key));
}
@Override
protected void putPage(PageData data) {
pages.put(MarshalledObject.marshall(data.key), MarshalledObject.marshall(data));
}
@Override
protected void clear() {
pages.clear();
}
}