package fr.openwide.core.showcase.web.application.links.component; import org.apache.wicket.Component; import org.apache.wicket.MarkupContainer; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.form.AjaxFormSubmitBehavior; import org.apache.wicket.ajax.form.OnChangeAjaxBehavior; import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.WebPage; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.form.RadioChoice; import org.apache.wicket.markup.html.link.Link; import org.apache.wicket.markup.html.panel.GenericPanel; import org.apache.wicket.model.AbstractReadOnlyModel; import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; import org.apache.wicket.model.ResourceModel; import com.google.common.collect.ImmutableList; import fr.openwide.core.showcase.core.business.user.model.User; import fr.openwide.core.showcase.core.util.binding.Bindings; import fr.openwide.core.showcase.web.application.links.page.LinksPage1; import fr.openwide.core.showcase.web.application.links.page.LinksPage2; import fr.openwide.core.showcase.web.application.links.page.LinksPage3; import fr.openwide.core.showcase.web.application.links.page.LinksTemplate; import fr.openwide.core.showcase.web.application.widgets.component.UserAutocompleteAjaxComponent; import fr.openwide.core.wicket.markup.html.basic.CoreLabel; import fr.openwide.core.wicket.more.condition.Condition; import fr.openwide.core.wicket.more.link.descriptor.LinkInvalidTargetRuntimeException; import fr.openwide.core.wicket.more.link.descriptor.parameter.validator.LinkParameterValidationRuntimeException; import fr.openwide.core.wicket.more.markup.html.basic.PlaceholderContainer; import fr.openwide.core.wicket.more.model.BindingModel; public class DynamicLinkTestPanel extends GenericPanel<User> { private static final long serialVersionUID = -3224809110343020920L; public DynamicLinkTestPanel(String id, final IModel<User> userModel) { super(id, userModel); Component lastUser = new CoreLabel("lastUser", BindingModel.of(userModel, Bindings.user().fullName())).hideIfEmpty(); add( lastUser, new PlaceholderContainer("lastUserPlaceholder").condition(Condition.componentVisible(lastUser)) ); Form<?> form = new Form<Void>("form"); add(form); final MarkupContainer testContainer = new WebMarkupContainer("testContainer"); testContainer.setOutputMarkupId(true); add(testContainer); UserAutocompleteAjaxComponent autocomplete = new UserAutocompleteAjaxComponent("user", userModel) { private static final long serialVersionUID = 1L; @Override protected void onUpdate(AjaxRequestTarget target) { target.add(testContainer); } }; autocomplete.setAutoUpdate(true); final IModel<Class<? extends WebPage>> pageClassModel = new Model<Class<? extends WebPage>>(); form.add( new RadioChoice<Class<? extends WebPage>>("page", pageClassModel, ImmutableList.<Class<? extends WebPage>>of(LinksPage1.class, LinksPage2.class, LinksPage3.class) ) .setLabel(new ResourceModel("links.page")), autocomplete .setLabel(new ResourceModel("links.user")) ); form.add(new AjaxFormSubmitBehavior(OnChangeAjaxBehavior.EVENT_NAME) { private static final long serialVersionUID = 1L; @Override protected void onSubmit(AjaxRequestTarget target) { target.add(testContainer); } }); testContainer.add( new Label("url", new AbstractReadOnlyModel<String>() { private static final long serialVersionUID = 1L; @Override public String getObject() { try { return LinksTemplate.linkDescriptor(pageClassModel, userModel).fullUrl(); } catch(LinkInvalidTargetRuntimeException e) { return e.getMessage(); } catch(LinkParameterValidationRuntimeException e) { return e.getMessage(); } } @Override public void detach() { super.detach(); pageClassModel.detach(); userModel.detach(); } }), new Form<Void>("linkForm") { private static final long serialVersionUID = 1L; @Override protected void onSubmit() { LinksTemplate.linkDescriptor(pageClassModel, userModel).setResponsePage(); } }, LinksTemplate.linkDescriptor(pageClassModel, userModel).link("bookmarkableLink") .hideIfInvalid(), new Link<Void>("linkWithRedirect") { private static final long serialVersionUID = 1L; @Override public void onClick() { throw LinksTemplate.linkDescriptor(pageClassModel, userModel).newRestartResponseException(); } } ); } }