package fr.openwide.core.wicket.more.notification.service; import java.util.Locale; import java.util.concurrent.Callable; import org.apache.wicket.Application; import org.apache.wicket.protocol.http.WebApplication; @SuppressWarnings("deprecation") public class WicketContextExecutorImpl implements IWicketContextExecutor { private final IWicketContextProvider contextProvider; public WicketContextExecutorImpl(IWicketContextProvider contextProvider) { super(); this.contextProvider = contextProvider; } @Override public <T> T runWithContext(Callable<T> callable) throws Exception { return contextProvider.context().run(callable); } @Override public <T> T runWithContext(String applicationName, Callable<T> callable) throws Exception { return contextProvider.context(retrieveWebApplication(applicationName)).run(callable); } @Override public <T> T runWithContext(WebApplication application, Callable<T> callable) throws Exception { return contextProvider.context(application).run(callable); } @Override public <T> T runWithContext(Callable<T> callable, Locale locale) throws Exception { return contextProvider.context(locale).run(callable); } @Override public <T> T runWithContext(String applicationName, Callable<T> callable, Locale locale) throws Exception { return contextProvider.context(retrieveWebApplication(applicationName), locale).run(callable); } @Override public <T> T runWithContext(WebApplication application, Callable<T> callable, Locale locale) throws Exception { return contextProvider.context(application, locale).run(callable); } private WebApplication retrieveWebApplication(String applicationName) { WebApplication webApplication; if (WebApplication.exists()) { webApplication = WebApplication.get(); } else { Application application = WebApplication.get(applicationName); if (!(application instanceof WebApplication)) { throw new IllegalStateException("Application is not a WebApplication"); } webApplication = (WebApplication) application; } return webApplication; } }