001 package railo.runtime.util; 002 003 import java.util.Enumeration; 004 import java.util.Iterator; 005 import java.util.Map; 006 007 import org.w3c.dom.Node; 008 009 import railo.runtime.exp.CasterException; 010 import railo.runtime.exp.PageException; 011 import railo.runtime.op.Caster; 012 import railo.runtime.op.Decision; 013 import railo.runtime.text.xml.XMLCaster; 014 import railo.runtime.type.ForEachIteratorable; 015 import railo.runtime.type.ObjectWrap; 016 import railo.runtime.type.it.EnumAsIt; 017 import railo.runtime.type.it.ForEachQueryIterator; 018 import railo.runtime.type.wrap.MapAsStruct; 019 020 public class ForEachUtil { 021 022 public static Iterator toIterator(Object o) throws PageException { 023 024 025 if(o instanceof ForEachIteratorable) 026 return ((ForEachIteratorable)o).getIterator(); 027 028 else if(o instanceof Node)return XMLCaster.toXMLStruct((Node)o,false).getIterator(); 029 else if(o instanceof Map) { 030 return MapAsStruct.toStruct((Map)o,true).getIterator(); 031 } 032 else if(o instanceof ObjectWrap) { 033 return toIterator(((ObjectWrap)o).getEmbededObject()); 034 } 035 else if(Decision.isArray(o)) { 036 return Caster.toArray(o).getIterator(); 037 } 038 else if(o instanceof Iterator) { 039 return (Iterator)o; 040 } 041 else if(o instanceof Enumeration) { 042 return new EnumAsIt((Enumeration)o); 043 } 044 045 throw new CasterException(o,"collection"); 046 } 047 048 public static void reset(Iterator it) throws PageException { 049 050 if(it instanceof ForEachQueryIterator) { 051 ((ForEachQueryIterator)it).reset(); 052 } 053 } 054 055 }