package fr.openwide.core.wicket.more.notification.service;
import java.util.concurrent.Callable;
import org.apache.wicket.Page;
import org.apache.wicket.core.request.handler.BookmarkablePageRequestHandler;
import org.apache.wicket.core.request.handler.PageProvider;
import org.apache.wicket.request.IRequestHandler;
import org.apache.wicket.request.Url;
import org.apache.wicket.request.cycle.RequestCycle;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.apache.wicket.util.lang.Args;
import fr.openwide.core.commons.util.context.IExecutionContext.ITearDownHandle;
import fr.openwide.core.context.IContextualService;
import fr.openwide.core.spring.util.StringUtils;
import fr.openwide.core.wicket.more.link.descriptor.generator.IPageLinkGenerator;
public abstract class AbstractNotificationUrlBuilderServiceImpl implements IContextualService {
private static final String ANCHOR_ROOT = "#";
private IWicketContextProvider wicketContextProvider;
public AbstractNotificationUrlBuilderServiceImpl(IWicketContextProvider wicketContextProvider) {
this.wicketContextProvider = wicketContextProvider;
}
@Override
public <T> T runWithContext(Callable<T> callable) throws Exception {
return wicketContextProvider.context().run(callable);
}
protected String buildUrl(Callable<IPageLinkGenerator> pageLinkGeneratorTask) {
return buildUrl(pageLinkGeneratorTask, null);
}
protected String buildUrl(final Callable<IPageLinkGenerator> pageLinkGeneratorTask, final String anchor) {
Args.notNull(pageLinkGeneratorTask, "pageLinkGeneratorTask");
try (ITearDownHandle handle = wicketContextProvider.context().open()) {
IPageLinkGenerator pageLinkGenerator = pageLinkGeneratorTask.call();
StringBuilder url = new StringBuilder();
url.append(pageLinkGenerator.fullUrl());
if (StringUtils.hasText(anchor)) {
url.append(ANCHOR_ROOT).append(anchor);
}
return url.toString();
} catch (RuntimeException e) {
throw e;
} catch (Exception e) {
if (e instanceof InterruptedException) {
Thread.currentThread().interrupt();
}
throw new RuntimeException(e);
}
}
@Deprecated
protected String buildUrl(Class<? extends Page> pageClass, PageParameters parameters) {
return buildUrl(pageClass, parameters, null);
}
@Deprecated
protected String buildUrl(Class<? extends Page> pageClass, PageParameters parameters, String anchor) {
return buildUrl(new BookmarkablePageRequestHandler(new PageProvider(pageClass, parameters)), anchor);
}
@Deprecated
protected String buildUrl(final IRequestHandler requestHandler, final String anchor) {
Args.notNull(requestHandler, "requestHandler");
try (ITearDownHandle handle = wicketContextProvider.context().open()) {
StringBuilder url = new StringBuilder();
url.append(RequestCycle.get().getUrlRenderer().renderFullUrl(Url.parse(RequestCycle.get().urlFor(requestHandler))));
if (StringUtils.hasText(anchor)) {
url.append(ANCHOR_ROOT).append(anchor);
}
return url.toString();
}
}
}