All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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