com.talk2object.plum.view.web.component.input.WebCheckBox Maven / Gradle / Ivy
The newest version!
package com.talk2object.plum.view.web.component.input;
import java.util.Map;
import org.apache.log4j.Logger;
import org.jsoup.nodes.Element;
import com.talk2object.plum.view.component.CheckBox;
import com.talk2object.plum.view.component.Component;
import com.talk2object.plum.view.event.AbstractViewAction;
import com.talk2object.plum.view.event.ViewAction;
import com.talk2object.plum.view.event.WebEvent;
import com.talk2object.plum.view.web.component.AbstractTemplateWebComponent;
import com.talk2object.plum.view.web.component.ComponentElements;
public class WebCheckBox extends AbstractTemplateWebComponent {
static Logger logger = Logger.getLogger(WebCheckBox.class);
private final String LABEL = "label";
private static Element componentHtmlTemplate;
private final String CHECKBOX = "input";
Element checkbox;
Element span;
public WebCheckBox(String id, Component component,
Element templateTemplate) {
super(id, component, templateTemplate);
}
public CheckBox getCheckBox() {
return (CheckBox) getComponent();
}
public void createHtmlElement() {
ComponentElements componentElements = findAndCloneElement(
getComponentHtmlTemplate(true), true);
htmlOuterElement = componentElements.getOuter();
htmlInnerElement = componentElements.getInner();
checkbox = findElementByClass(CHECKBOX);
checkbox.attr("id", id);
checkbox.attr("value", "foo");
checkbox.attr("name", getFullInputName(CHECKBOX));
if (getCheckBox().containsListener(Component.EVENT_VALUE_CHANGE)) {
String onChange = String.format("_plum_post('%s','%s','%s')",
getId(), CHECKBOX, WebEvent.VALUE_SET.name());
checkbox.attr("onChange", onChange);
}
span = findElementByClass(LABEL);
CheckBox checkBox = getCheckBox();
// set value
if (checkBox.isChecked())
checkbox.attr("checked", "checked");
else
checkbox.removeAttr("checked");
// set label
span.empty();
span.appendText(checkBox.getCaption());
}
public boolean isChecked() {
return checkbox.hasAttr("checked");
}
protected ViewAction onValueChange(String newValue) {
boolean oldState = isChecked();
boolean newState = (newValue != null);
final boolean stateChanged = (oldState != newState);
if (stateChanged) {
// update HTML tag state
if (newState)
checkbox.attr("checked", "checked");
else
checkbox.removeAttr("checked");
if (logger.isDebugEnabled())
logger.debug(String.format("component id (%s) state from %s to %s",getId(), oldState,
newState));
}
return new AbstractViewAction(WebEvent.VALUE_SET.name()) {
@Override
public void execute(Component view) {
if (stateChanged) {
CheckBox cb = (CheckBox) view;
cb.setChecked(checkbox.hasAttr("checked"));
}
}
};
}
@Override
public ViewAction processEvent(WebEvent event,
Map parameters) {
if (event == WebEvent.VALUE_SET) {
String newValue =(String) parameters.get(CHECKBOX);
return onValueChange(newValue);
} else
throw new RuntimeException("unknow event:" + event);
}
@Override
public Element getComponentHtmlTemplate() {
return componentHtmlTemplate;
}
@Override
public void setComponentHtmlTemplate(Element element) {
componentHtmlTemplate = element;
}
@Override
public String getComponentType() {
return "checkbox";
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy