package org.exoplatform.portal.mop.page;
import org.exoplatform.portal.mop.Utils;
import org.exoplatform.portal.pom.config.POMSession;
import org.gatein.mop.api.workspace.ObjectType;
import org.gatein.mop.api.workspace.Site;
import org.gatein.mop.api.workspace.Workspace;
/** @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a> */
abstract class DataCache {
protected abstract PageData getPage(POMSession session, PageKey key);
protected abstract void removePage(POMSession session, PageKey key);
protected abstract void putPage(PageData data);
protected abstract void clear();
final PageData getPageData(POMSession session, PageKey key) {
PageData data;
if (session.isModified()) {
data = loadPage(session, key);
} else {
data = getPage(session, key);
}
//
return data;
}
protected final PageData loadPage(POMSession session, PageKey key) {
Workspace workspace = session.getWorkspace();
ObjectType<Site> objectType = Utils.objectType(key.getSite().getType());
Site site = workspace.getSite(objectType, key.getSite().getName());
if (site != null) {
org.gatein.mop.api.workspace.Page root = site.getRootPage();
org.gatein.mop.api.workspace.Page pages = root.getChild("pages");
org.gatein.mop.api.workspace.Page page = pages.getChild(key.getName());
if (page != null) {
return new PageData(page);
} else {
return PageData.EMPTY;
}
} else {
return PageData.EMPTY;
}
}
}