package com.googlecode.gwt.test.gwtbootstrap.patcher;
import com.github.gwtbootstrap.client.ui.constants.VisibilityChange;
import com.github.gwtbootstrap.client.ui.event.HiddenEvent;
import com.github.gwtbootstrap.client.ui.event.HideEvent;
import com.github.gwtbootstrap.client.ui.event.ShowEvent;
import com.github.gwtbootstrap.client.ui.event.ShownEvent;
import com.google.gwt.dom.client.Element;
import com.google.gwt.user.client.ui.Widget;
import com.googlecode.gwt.test.patchers.PatchClass;
import com.googlecode.gwt.test.patchers.PatchMethod;
import com.googlecode.gwt.test.utils.GwtReflectionUtils;
import java.util.HashMap;
import java.util.Map;
/**
* Patcher for Collapse (bootstrap 2.1.1).
*
* @author Kenichiro Tanaka
*/
@PatchClass(target = "com.github.gwtbootstrap.client.ui.Collapse")
class CollapsePatcher {
private static Map<Object, Boolean> shownObject = new HashMap<Object, Boolean>();
@PatchMethod
static void changeVisibility(Object collapse, Element e, String c) {
if (!shownObject.containsKey(collapse)) {
shownObject.put(collapse, isToggle(collapse));
}
if (VisibilityChange.SHOW.get().equals(c) && !shownObject.get(collapse)) {
show(collapse);
} else if (VisibilityChange.HIDE.get().equals(c) && shownObject.get(collapse)) {
hide(collapse);
} else if (VisibilityChange.TOGGLE.get().equals(c)) {
if (shownObject.get(collapse)) {
hide(collapse);
} else {
show(collapse);
}
}
}
@PatchMethod
static void changeVisibility(String target, String c) {
}
@PatchMethod
static void configure(Object collapse, Element e, String parent, boolean toggle) {
shownObject.put(collapse, toggle);
}
@PatchMethod
static void configure(String selector, String parent, boolean toggle) {
// TODO:
}
@PatchMethod
static void removeDataIfExists(Object collapse, Element e) {
}
@PatchMethod
static void setHandlerFunctions(Object collapse, Element e) {
}
private static Widget getWidget(Object collapse) {
return GwtReflectionUtils.<Widget>callPrivateMethod(collapse, "getWidget");
}
private static void hide(Object collapse) {
getWidget(collapse).fireEvent(new HideEvent());
shownObject.put(collapse, false);
getWidget(collapse).fireEvent(new HiddenEvent());
}
private static boolean isToggle(Object collapse) {
return GwtReflectionUtils.<Boolean>callPrivateMethod(collapse, "isToggle");
}
private static void show(Object collapse) {
getWidget(collapse).fireEvent(new ShowEvent());
shownObject.put(collapse, true);
getWidget(collapse).fireEvent(new ShownEvent());
}
}