package com.googlecode.gwt.test.gwtbootstrap.patcher; import com.github.gwtbootstrap.client.ui.Modal; import com.github.gwtbootstrap.client.ui.constants.VisibilityChange; import com.google.gwt.dom.client.Element; import com.googlecode.gwt.test.exceptions.ReflectionException; import com.googlecode.gwt.test.patchers.PatchClass; import com.googlecode.gwt.test.patchers.PatchMethod; import com.googlecode.gwt.test.utils.GwtReflectionUtils; /** * Patcher for {@link Modal}. * * @author Kenichiro Tanaka */ @PatchClass(Modal.class) class ModalPatcher { @PatchMethod static void centerVertically(Modal modal, Element e) { } @PatchMethod static void changeVisibility(Modal modal, Element e, String visibility) { if (VisibilityChange.SHOW.get().equals(visibility) && !modal.isVisible()) { show(modal); } else if (VisibilityChange.HIDE.get().equals(visibility) && modal.isVisible()) { hide(modal); } else if (VisibilityChange.TOGGLE.get().equals(visibility)) { if (modal.isVisible()) { hide(modal); } else { show(modal); } } } @PatchMethod static void configure(Modal modal, Element e, boolean k, boolean b, boolean s) { } @PatchMethod static void configure(Modal modal, Element e, boolean k, String b, boolean s) { } @PatchMethod static void reconfigure(Modal modal, Element e, boolean k, boolean b, boolean s) { } @PatchMethod static void reconfigure(Modal modal, Element e, boolean k, String b, boolean s) { } @PatchMethod static void setHandlerFunctions(Modal modal, Element e) { } @PatchMethod static void unsetHandlerFunctions(Modal modal, Element e) { } private static void callOn(Modal modal, String method) { try { // try with bootstrap 2.0.4.0 signature GwtReflectionUtils.callPrivateMethod(modal, method); } catch (ReflectionException e) { // try with bootstrap 2.1.1.0 signature GwtReflectionUtils.callPrivateMethod(modal, method, new Object[]{null}); } } private static void hide(Modal modal) { callOn(modal, "onHide"); modal.setVisible(false); callOn(modal, "onHidden"); } private static void show(Modal modal) { callOn(modal, "onShow"); modal.setVisible(true); callOn(modal, "onShown"); } }