/** * */ package org.zkoss.zk.ui.select.impl; import java.util.ArrayList; import org.zkoss.lang.Strings; /** * The model representing a selector. * @since 6.0.0 * @author simonpai */ public class Selector extends ArrayList<SimpleSelectorSequence> { private static final long serialVersionUID = -9125226126564264333L; private final int _selectorIndex; public Selector(int selectorIndex) { _selectorIndex = selectorIndex; } /** * Add combinator to the last simple selector sequence */ public void attachCombinator(Combinator combinator) { if (isEmpty()) throw new ParseException("Cannot have combinator " + "prior to the first sequence of simple selectors."); get(size() - 1).setCombinator(combinator); } /** * Return the index of this selector in a multiple selector sequence. */ public int getSelectorIndex() { return _selectorIndex; } /** * Return the i-th combinator */ public Combinator getCombinator(int index) { return get(index).getCombinator(); } /*package*/ boolean requiresIdSpace(int index) { return !Strings.isEmpty(get(index).getId()); } public enum Combinator { DESCENDANT(" "), CHILD(" > "), ADJACENT_SIBLING(" + "), GENERAL_SIBLING(" ~ "); private final String _str; Combinator(String str) { _str = str; } public String toString() { return _str; } } public String toString() { StringBuffer sb = new StringBuffer(); int size = size(); for (int i = 0; i < size; i++) { SimpleSelectorSequence seq = get(i); sb.append(seq); if (i < size - 1) sb.append(seq.getCombinator()); } return sb.toString(); } }