package org.nocket.gen.page.guiservice; import gengui.annotations.Closer; import java.io.Serializable; import java.util.Collection; import org.apache.wicket.ajax.AjaxRequestTarget; import org.nocket.NocketSession; import org.nocket.gen.domain.element.ButtonElement; import org.nocket.gen.page.DMDWebGenPageContext; import org.nocket.gen.page.element.PageElementI; import org.nocket.gen.page.element.synchronizer.ButtonCallback; import org.nocket.util.Assert; public class CloserHandler implements Serializable { private static final long serialVersionUID = 1L; private ButtonCallback buttonCallback; private boolean hideCloseButton; private DMDWebGenPageContext dmdWebGenPageContext; public CloserHandler(DMDWebGenPageContext dmdWebGenPageContext) { this(dmdWebGenPageContext, false); } public CloserHandler(DMDWebGenPageContext dmdWebGenPageContext, boolean hideCloseButton) { this.hideCloseButton = hideCloseButton; this.buttonCallback = initButtonCallback(dmdWebGenPageContext); this.dmdWebGenPageContext = dmdWebGenPageContext; } public void onSubmit(AjaxRequestTarget target) { if (buttonCallback != null) { buttonCallback.onSubmit(target); } else { DMDWebGenGuiServiceProvider webGuiServiceProvider = NocketSession.get().getDMDWebGenGuiServiceProvider(); webGuiServiceProvider.registerAjaxRequestTarget(dmdWebGenPageContext, target); webGuiServiceProvider.closeModalPanel(); webGuiServiceProvider.unregisterAjaxRequestTarget(dmdWebGenPageContext, target); } } private ButtonCallback initButtonCallback(DMDWebGenPageContext context) { Collection<? extends ButtonElement> elements = context.getDomainRegistry().getElements(ButtonElement.class); for (ButtonElement<?> buttonElement : elements) { Closer closer = buttonElement.getMethod().getAnnotation(Closer.class); if (closer != null && Closer.Type.DEFAULT.equals(closer.value())) { String wicketId = buttonElement.getWicketId(); PageElementI<?> element = context.getPageRegistry().getElement(wicketId); Assert.test(element instanceof org.nocket.gen.page.element.ButtonElement); return ((org.nocket.gen.page.element.ButtonElement) element).getButtonCallback(); } } return null; } public boolean hideCloseButton() { return hideCloseButton; } }