/* Choose.java

	Purpose:
		
	Description:
		
	History:
		Tue Sep  6 15:33:24     2005, Created by tomyeh

Copyright (C) 2005 Potix Corporation. All Rights Reserved.

{{IS_RIGHT
	This program is distributed under LGPL Version 2.1 in the hope that
	it will be useful, but WITHOUT ANY WARRANTY.
}}IS_RIGHT
*/
package org.zkoss.web.servlet.dsp.action;

import java.io.IOException;
import java.io.StringWriter;

import org.zkoss.web.servlet.dsp.DspException;

/**
 * Provides the context for mutually exclusive conditional execution.
 *
 * @author tomyeh
 */
public class Choose extends AbstractAction {
	private boolean _matched, _trim;

	/** Returns whether any child {@link When} is evaluated to true. */
	/*package*/ boolean isMatched() {
		return _matched;
	}

	/** Sets whether any child {@link When} is evaluated to true. */
	/*package*/ void setMatched(boolean matched) {
		_matched = matched;
	}

	/** Returns whether to trim the result. */
	public boolean isTrim() {
		return _trim;
	}

	/** Sets whether to trim the result.
	 * <p>Default: true.
	 */
	public void setTrim(boolean trim) {
		_trim = trim;
	}

	//-- Action --//
	public void render(ActionContext ac, boolean nested) throws DspException, IOException {
		if (nested && isEffective()) {
			final StringWriter out = getFragmentOut(ac, _trim);
			renderFragment(ac, out, _trim);
			if (out != null)
				ac.getOut().write(out.toString());
		}
	}

	//-- Object --//
	public String toString() {
		return "choose";
	}
}
