/* ZkInfo.java Purpose: Description: History: Fri May 30 19:13:58 2008, Created by tomyeh Copyright (C) 2008 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.zk.ui.metainfo; import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.Page; import org.zkoss.zk.ui.util.ConditionImpl; import org.zkoss.zk.xel.ExValue; import org.zkoss.zk.xel.impl.Utils; /** * Represents the zk element in a ZUML page. * * @author tomyeh * @since 3.5.0 */ public class ZkInfo extends ForEachBranchInfo { /** The switch condition. */ private ExValue _switch; /** The case condition. */ private ExValue[] _case; /** Constructs a ZK info. */ public ZkInfo(NodeInfo parent, ConditionImpl cond) { super(parent, cond); } /** Returns whether the switch condition is defined. */ public boolean withSwitch() { return _switch != null; } /** Sets the switch condition. * @param switchc the switch condition; EL allowed. * Ignored if null. * Note: if it is an empty string, the switch condition * (returned by {@link #resolveSwitch}) is an empty string. */ public void setSwitch(String switchc) { if (_case != null && switchc != null) throw new IllegalStateException("case and switch/choose cannot coexist"); _switch = switchc != null ? new ExValue(switchc, Object.class) : null; } /** Returns the switch condition's value; evaluate EL expression if any. * <p>Note: unlike {@link #resolveCase}, it might return null * even if {@link #withSwitch} is true. */ public Object resolveSwitch(Page page, Component comp) { return _switch == null ? null : comp != null ? _switch.getValue(_evalr, comp) : _switch.getValue(_evalr, page); } /** Returns whether the case condition is defined. */ public boolean withCase() { return _case != null; } /** Sets the case condition. */ public void setCase(String casec) { if (_switch != null && casec != null) throw new IllegalStateException("case and switch/choose cannot coexist"); _case = Utils.parseList(casec, Object.class, false); } /** Returns the case condition's value, or null if no case is * specified (i.e., {@link #withCase} is false. * It evaluates EL expression if any. */ public Object[] resolveCase(Page page, Component comp) { if (_case == null) return null; Object[] ary = new Object[_case.length]; for (int j = 0; j < _case.length; ++j) ary[j] = comp != null ? _case[j].getValue(_evalr, comp) : _case[j].getValue(_evalr, page); return ary; } //Object// public String toString() { return "[ZkInfo@" + System.identityHashCode(this) + ']'; } }