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    }