package fr.openwide.maven.artifact.notifier.web.application.common.component.navigation; import java.util.List; import org.apache.wicket.Page; import org.apache.wicket.markup.html.link.BookmarkablePageLink; import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.util.lang.Args; import com.google.common.collect.Lists; /** * Un {@link BookmarkablePageLink} qui exploite les {@link DynamicPageParameters}. */ public class DynamicBookmarkablePageLink<T> extends BookmarkablePageLink<T> { private static final long serialVersionUID = -7297463634865525448L; private final DynamicPageParameters dynamicParameters; private final List<String> mandatoryParameters = Lists.newArrayList(); public <C extends Page> DynamicBookmarkablePageLink(String id, Class<C> pageClass, DynamicPageParameters dynamicParameters) { super(id, pageClass); this.dynamicParameters = dynamicParameters; } @Override public PageParameters getPageParameters() { return dynamicParameters.buildStaticPageParameters(); } public DynamicBookmarkablePageLink<T> mandatoryParameter(String parameterName) { Args.notNull(parameterName, "parameterName"); mandatoryParameters.add(parameterName); return this; } @Override protected void onConfigure() { super.onConfigure(); PageParameters staticPageParameters = getPageParameters(); for (String mandatoryParameter : mandatoryParameters) { if (staticPageParameters.get(mandatoryParameter).isNull()) { setVisible(false); return; } } setVisible(true); } @Override protected void onDetach() { super.onDetach(); dynamicParameters.detach(); } }