package railo.runtime.type.util; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; import railo.runtime.op.Operator; import railo.runtime.type.Collection; import railo.runtime.type.Collection.Key; public class CollectionUtil { private static final Object NULL = new Object(); public static boolean equals(Collection left, Collection right) { if(left.size()!=right.size()) return false; Iterator<Key> it = left.keyIterator(); Key k; Object l,r; while(it.hasNext()){ k=it.next(); r=right.get(k,NULL); if(r==NULL) return false; l=left.get(k,NULL); if(!Operator.equalsEL(r, l, false, true)) return false; } return true; } /*public static String[] toStringArray(Key[] keys) { if(keys==null) return null; String[] arr=new String[keys.length]; for(int i=0;i<keys.length;i++){ arr[i]=keys[i].getString(); } return arr; }*/ public static String getKeyList(Iterator<Key> it, String delimiter) { StringBuilder sb=new StringBuilder(it.next().getString()); if(delimiter.length()==1) { char c=delimiter.charAt(0); while(it.hasNext()) { sb.append(c); sb.append(it.next().getString()); } } else { while(it.hasNext()) { sb.append(delimiter); sb.append(it.next().getString()); } } return sb.toString(); } public static String getKeyList(Collection coll, String delimiter) { if(coll.size()==0) return ""; return getKeyList(coll.keyIterator(), delimiter); } public static Key[] keys(Collection coll) { if(coll==null) return new Key[0]; Iterator<Key> it = coll.keyIterator(); List<Key> rtn=new ArrayList<Key>(); if(it!=null)while(it.hasNext()){ rtn.add(it.next()); } return rtn.toArray(new Key[rtn.size()]); } public static String[] keysAsString(Collection coll) { if(coll==null) return new String[0]; Iterator<Key> it = coll.keyIterator(); List<String> rtn=new ArrayList<String>(); if(it!=null)while(it.hasNext()){ rtn.add(it.next().getString()); } return rtn.toArray(new String[rtn.size()]); } public static boolean isEmpty(Map<?, ?> map) { return map==null || map.size()==0; } /*public static int hashCode(Collection coll) { produce infiniti loop when there is a refrerence to itself or a anchestor int hashCode = 1; Iterator<Entry<Key, Object>> it = coll.entryIterator(); Entry<Key, Object> e; while(it.hasNext()) { e = it.next(); hashCode = 31*hashCode+ ( (e.getKey()==null?0:e.getKey().hashCode()) ^ (e.getValue()==null ? 0 : e.getValue().hashCode()) ); } return hashCode; }*/ }