package railo.runtime.util; import java.util.Enumeration; import java.util.Iterator; import java.util.Map; import org.w3c.dom.Node; import railo.runtime.exp.CasterException; import railo.runtime.exp.PageException; import railo.runtime.op.Caster; import railo.runtime.op.Decision; import railo.runtime.text.xml.XMLCaster; import railo.runtime.type.ForEachIteratorable; import railo.runtime.type.ObjectWrap; import railo.runtime.type.it.EnumAsIt; import railo.runtime.type.it.ForEachQueryIterator; import railo.runtime.type.wrap.MapAsStruct; public class ForEachUtil { public static Iterator toIterator(Object o) throws PageException { if(o instanceof ForEachIteratorable) return ((ForEachIteratorable)o).getIterator(); else if(o instanceof Node)return XMLCaster.toXMLStruct((Node)o,false).getIterator(); else if(o instanceof Map) { return MapAsStruct.toStruct((Map)o,true).getIterator(); } else if(o instanceof ObjectWrap) { return toIterator(((ObjectWrap)o).getEmbededObject()); } else if(Decision.isArray(o)) { return Caster.toArray(o).getIterator(); } else if(o instanceof Iterator) { return (Iterator)o; } else if(o instanceof Enumeration) { return new EnumAsIt((Enumeration)o); } throw new CasterException(o,"collection"); } public static void reset(Iterator it) throws PageException { if(it instanceof ForEachQueryIterator) { ((ForEachQueryIterator)it).reset(); } } }