package org.orienteer.pages;
import org.apache.wicket.core.request.handler.IPageClassRequestHandler;
import org.apache.wicket.core.request.mapper.MountedMapper;
import org.apache.wicket.request.IRequestHandler;
import org.apache.wicket.request.Request;
import org.apache.wicket.request.Url;
import org.apache.wicket.request.component.IRequestablePage;
import org.orienteer.pages.module.PagesModule;
import org.orienteer.pages.web.EmbeddedWebPage;
import org.orienteer.pages.web.FullWebPage;
import com.orientechnologies.orient.core.db.record.OIdentifiable;
import com.orientechnologies.orient.core.id.ORID;
import com.orientechnologies.orient.core.record.impl.ODocument;
/**
* Mounted mapper to link to pageId
*/
public class PagesMountedMapper extends MountedMapper {
private final ORID pageIdentity;
private static Class<? extends IRequestablePage> getPageClass(OIdentifiable pageId) {
ODocument doc = pageId.getRecord();
Boolean embedded = doc.field(PagesModule.OPROPERTY_EMBEDDED);
return embedded==null || embedded ?EmbeddedWebPage.class:FullWebPage.class;
}
public PagesMountedMapper(OIdentifiable pageId) {
super((String)((ODocument)pageId.getRecord()).field(PagesModule.OPROPERTY_PATH), getPageClass(pageId), new OPageParametersEncoder(pageId.getIdentity()));
pageIdentity = pageId.getIdentity();
}
public boolean isServing(OIdentifiable pageId) {
return pageIdentity.equals(pageId);
}
@Override
// We should ensure that request is for this pageId;
public Url mapHandler(IRequestHandler requestHandler) {
if(requestHandler instanceof IPageClassRequestHandler) {
IPageClassRequestHandler handler = (IPageClassRequestHandler) requestHandler;
if(OPageParametersEncoder.matchHandler(pageIdentity, handler)) return super.mapHandler(requestHandler);
else return null;
} else {
return super.mapHandler(requestHandler);
}
}
}