package org.orienteer.pages; import org.apache.wicket.core.request.handler.IPageClassRequestHandler; import org.apache.wicket.core.request.handler.IPageRequestHandler; import org.apache.wicket.request.Url; import org.apache.wicket.request.component.IRequestablePage; import org.apache.wicket.request.mapper.parameter.IPageParametersEncoder; import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.request.mapper.parameter.PageParametersEncoder; import org.apache.wicket.util.string.StringValue; import com.orientechnologies.orient.core.id.ORID; /** * {@link IPageParametersEncoder} for transparent adding page Id */ public class OPageParametersEncoder extends PageParametersEncoder { public static final String PAGE_IDENTITY = "__orienteerPageId__"; private final ORID pageIdentity; public OPageParametersEncoder(ORID pageIdentity) { this.pageIdentity = pageIdentity; } @Override public PageParameters decodePageParameters(Url url) { PageParameters ret = super.decodePageParameters(url); if(ret==null) ret = new PageParameters(); ret.add(PAGE_IDENTITY, pageIdentity); return ret; } @Override public Url encodePageParameters(PageParameters pageParameters) { StringValue sv = pageParameters.get(PAGE_IDENTITY); if(!sv.isEmpty()) { pageParameters.remove(PAGE_IDENTITY); } Url ret = super.encodePageParameters(pageParameters); if(!sv.isEmpty()) { pageParameters.add(PAGE_IDENTITY, sv.toString()); } return ret; } public static boolean matchHandler(ORID pageIdentity, IPageClassRequestHandler requestHandler) { PageParameters params = null; if(requestHandler instanceof IPageRequestHandler) { IRequestablePage page = ((IPageRequestHandler)requestHandler).getPage(); if(page!=null) params = page.getPageParameters(); } if(params==null) params = requestHandler.getPageParameters(); StringValue sv = params!=null?params.get(PAGE_IDENTITY):null; return sv!=null && pageIdentity!=null?pageIdentity.toString().equals(sv.toOptionalString()):false; } }