001    package railo;
002    
003    import java.io.IOException;
004    import java.io.PrintStream;
005    import java.io.Reader;
006    import java.lang.reflect.InvocationTargetException;
007    import java.sql.ResultSet;
008    import java.util.Date;
009    import java.util.Enumeration;
010    import java.util.Iterator;
011    import java.util.List;
012    import java.util.ListIterator;
013    import java.util.Map;
014    import java.util.Set;
015    
016    import javax.servlet.http.Cookie;
017    
018    import org.w3c.dom.Attr;
019    import org.w3c.dom.NamedNodeMap;
020    import org.w3c.dom.Node;
021    import org.xml.sax.InputSource;
022    
023    import railo.commons.io.IOUtil;
024    import railo.runtime.exp.PageException;
025    import railo.runtime.op.Caster;
026    import railo.runtime.type.QueryImpl;
027    
028    /**
029     *  
030     */
031    public class aprint {
032    
033            
034    
035            public static void date(String value) {
036                    long millis=System.currentTimeMillis();
037            o(
038                            new Date(millis)
039                            +"-"
040                            +(millis-(millis/1000*1000))
041                            +" "+value);
042            }
043    
044            public static void ds(boolean useOutStream) {
045                    new Exception("Stack trace").printStackTrace(useOutStream?System.out:System.err);
046            }
047            
048            public static void ds(Object label,boolean useOutStream) {
049                    _(useOutStream?System.out:System.err, label);
050                    ds(useOutStream);
051            }
052            
053            public static void ds() {ds(false);}
054            public static void ds(Object label) {ds(label,false);}
055            public static void dumpStack() {ds(false);}
056            public static void dumpStack(boolean useOutStream) {ds(useOutStream);}
057            public static void dumpStack(String label) {ds(label,false);}
058            public static void dumpStack(String label,boolean useOutStream) {ds(label,useOutStream);}
059        
060        public static void err(boolean o) { 
061                    System.err.println(o);
062            }
063        public static void err(double d) {
064                    System.err.println(d);
065            }
066        public static void err(long d) {
067                    System.err.println(d);
068            }
069        public static void err(float d) {
070                    System.err.println(d);
071            }
072        public static void err(int d) {
073                    System.err.println(d);
074            }
075        public static void err(short d) {
076                    System.err.println(d);
077            }
078    
079        public static void out(Object o1,Object o2,Object o3) {
080                    System.out.print(o1);
081                    System.out.print(o2);
082                    System.out.println(o3);
083            }
084            
085            public static void out(Object o1,Object o2) {
086                    System.out.print(o1);
087                    System.out.println(o2);
088            }
089    
090            public static void out(Object o,long l) {
091                    System.out.print(o);
092                    System.out.println(l);
093            }
094            
095            public static void out(Object o,double d) {
096                    System.out.print(o);
097                    System.out.println(d);
098            }
099        
100        
101        public static void out(byte[] arr, int offset, int len) {
102            System.out.print("byte[]{");
103            for(int i=offset;i<len+offset;i++) {
104                if(i>0)System.out.print(',');
105                System.out.print(arr[i]);
106            }
107            System.out.println("}");
108        }
109        
110        
111    
112        
113    
114            
115            public static void out(double o) {
116                    System.out.println(o);
117            }
118            
119            public static void out(float o) {
120                    System.out.println(o);
121            }
122            public static void out(long o) {
123                    System.out.println(o);
124            }
125            public static void out(int o) {
126                    System.out.println(o);
127            }
128            public static void out(char o) {
129                    System.out.println(o);
130            }
131            public static void out(boolean o) {
132                    System.out.println(o);
133            }
134            public static void out() {
135                    System.out.println();
136            }
137    
138            public static void printST(Throwable t) {
139                    if(t instanceof InvocationTargetException){
140                            t=((InvocationTargetException)t).getTargetException();
141                    }
142                    err(t.getClass().getName());
143                    t.printStackTrace();
144                    
145            }
146            
147            public static void printST(Throwable t,PrintStream ps) {
148                    if(t instanceof InvocationTargetException){
149                            t=((InvocationTargetException)t).getTargetException();
150                    }
151                    err(t.getClass().getName());
152                    t.printStackTrace(ps);
153                    
154            }
155            
156            
157    
158            public static void out(Object o) {
159                    _(System.out, o);
160            }
161            public static void err(Object o) {
162                    _(System.err, o);
163            }
164            
165    
166            public static void o(Object o) {
167                    _(System.out, o);
168            }
169            public static void e(Object o) {
170                    _(System.err, o);
171            }
172            public static void oe(Object o, boolean valid) {
173                    _(valid?System.out:System.err, o);
174            }
175            
176            public static void dateO(String value) {
177                    _date(System.out, value);
178            }
179            
180            public static void dateE(String value) {
181                    _date(System.err, value);
182            }
183    
184            private static void _date(PrintStream ps,String value) {
185                    long millis = System.currentTimeMillis();
186                    _(ps,
187                    new Date(millis)
188                    +"-"
189                    +(millis-(millis/1000*1000))
190                    +" "+value);
191            }
192            
193            
194            
195            private static void _(PrintStream ps,Object o) {
196            if(o instanceof Enumeration) _(ps,(Enumeration)o);
197            if(o instanceof Object[]) _(ps,(Object[])o);
198            else if(o instanceof boolean[]) _(ps,(boolean[])o);
199            else if(o instanceof byte[]) _(ps,(byte[])o);
200            else if(o instanceof int[]) _(ps,(int[])o);
201            else if(o instanceof float[]) _(ps,(float[])o);
202            else if(o instanceof long[]) _(ps,(long[])o);
203            else if(o instanceof double[]) _(ps,(double[])o);
204            else if(o instanceof char[]) _(ps,(char[])o);
205            else if(o instanceof short[]) _(ps,(short[])o);
206            else if(o instanceof Set) _(ps,(Set)o);
207            else if(o instanceof List) _(ps,(List)o);
208            else if(o instanceof Map) _(ps,(Map)o);
209            else if(o instanceof Iterator) _(ps,(Iterator)o);
210            else if(o instanceof NamedNodeMap) _(ps,(NamedNodeMap)o);
211            else if(o instanceof ResultSet) _(ps,(ResultSet)o);
212            else if(o instanceof Node) _(ps,(Node)o);
213            else if(o instanceof Throwable) _(ps,(Throwable)o);
214            else if(o instanceof Cookie) {
215                    Cookie c=(Cookie) o;
216                    ps.println("Cookie(name:"+c.getName()+";domain:"+c.getDomain()+";maxage:"+c.getMaxAge()+";path:"+c.getPath()+";value:"+c.getValue()+";version:"+c.getVersion()+";secure:"+c.getSecure()+")");
217            }
218            else if(o instanceof InputSource) {
219                    InputSource is=(InputSource) o;
220                    Reader r = is.getCharacterStream();
221                    try {
222                                    ps.println(IOUtil.toString(is.getCharacterStream()));
223                            } catch (IOException e) {}
224                            finally {
225                                    IOUtil.closeEL(r);
226                            }
227            }
228            
229            else ps.println(o);
230        }
231            
232            
233            
234            
235            private static void _(PrintStream ps,Object[] arr) {
236            if(arr==null){
237                    ps.println("null");
238                    return;
239            }
240            ps.print(arr.getClass().getComponentType().getName()+"[]{");
241            for(int i=0;i<arr.length;i++) {
242                if(i>0) {
243                    ps.print("\t,");
244                }
245                _(ps,arr[i]);
246            }
247            ps.println("}");
248        }
249        
250        private static void _(PrintStream ps,int[] arr) {
251            ps.print("int[]{");
252            for(int i=0;i<arr.length;i++) {
253                if(i>0)ps.print(',');
254                ps.print(arr[i]);
255            }
256            ps.println("}");
257        }
258        
259        private static void _(PrintStream ps,byte[] arr) {
260            ps.print("byte[]{");
261            for(int i=0;i<arr.length;i++) {
262                if(i>0)ps.print(',');
263                ps.print(arr[i]);
264            }
265            ps.println("}");
266        }
267        
268        private static void _(PrintStream ps,boolean[] arr) {
269            ps.print("boolean[]{");
270            for(int i=0;i<arr.length;i++) {
271                if(i>0)ps.print(',');
272                ps.print(arr[i]);
273            }
274            ps.println("}");
275        }
276        
277        private static void _(PrintStream ps,char[] arr) {
278            ps.print("char[]{");
279            for(int i=0;i<arr.length;i++) {
280                if(i>0)ps.print(',');
281                ps.print(arr[i]);
282            }
283            ps.println("}");
284        }
285        
286        private static void _(PrintStream ps,short[] arr) {
287            ps.print("short[]{");
288            for(int i=0;i<arr.length;i++) {
289                if(i>0)ps.print(',');
290                ps.print(arr[i]);
291            }
292            ps.println("}");
293        }
294        
295        private static void _(PrintStream ps,float[] arr) {
296            ps.print("float[]{");
297            for(int i=0;i<arr.length;i++) {
298                if(i>0)ps.print(',');
299                ps.print(arr[i]);
300            }
301            ps.println("}");
302        }
303        
304        private static void _(PrintStream ps,long[] arr) {
305            ps.print("long[]{");
306            for(int i=0;i<arr.length;i++) {
307                if(i>0)ps.print(',');
308                ps.print(arr[i]);
309            }
310            ps.println("}");
311        }
312        
313        private static void _(PrintStream ps,double[] arr) {
314            ps.print("double[]{");
315            for(int i=0;i<arr.length;i++) {
316                if(i>0)ps.print(',');
317                ps.print(arr[i]);
318            }
319            ps.println("}");
320        }
321        
322    
323            private static void _(PrintStream ps,Node n) {
324                    ps.print(Caster.toString(n,null));
325            }
326            
327            
328            private static void _(PrintStream ps,Throwable t) {
329            t.printStackTrace(ps);
330        }
331        
332    
333        private static void _(PrintStream ps,Enumeration en) {
334            
335            _(ps,en.getClass().getName()+" [");
336            while(en.hasMoreElements()) {
337                    ps.print(en.nextElement());
338                ps.println(",");
339            }
340            _(ps,"]");
341        }
342        
343        private static void _(PrintStream ps,List list) {
344            ListIterator it = list.listIterator();
345            _(ps,list.getClass().getName()+" {");
346            while(it.hasNext()) {
347                int index = it.nextIndex();
348                it.next();
349                ps.print(index);
350                ps.print(":");
351                ps.print(list.get(index));
352                ps.println(";");
353            }
354            _(ps,"}");
355        }
356        
357        private static void _(PrintStream ps,Iterator it) {
358            
359            _(ps,it.getClass().getName()+" {");
360            while(it.hasNext()) {
361                ps.print(it.next());
362                ps.println(";");
363            }
364            _(ps,"}");
365        }
366        
367        
368        private static void _(PrintStream ps,Set set) {
369            Iterator it = set.iterator();
370            ps.println(set.getClass().getName()+" {");
371            while(it.hasNext()) {
372                    _(ps,it.next());
373                ps.println(",");
374            }
375            _(ps,"}");
376        }
377        
378        private static void _(PrintStream ps,ResultSet res) {
379            try {
380                            _(ps, new QueryImpl(res,"query").toString());
381                    } catch (PageException e) {
382                            _(ps, res.toString());
383                    }
384        }
385    
386        private static void _(PrintStream ps,Map map) {
387            if(map==null) {
388                    ps.println("null");
389                    return;
390            }
391            Iterator it = map.keySet().iterator();
392            
393            if(map.size()<2) {
394                    ps.print(map.getClass().getName()+" {");
395                while(it.hasNext()) {
396                    Object key = it.next();
397    
398                    ps.print(key);
399                    ps.print(":");
400                    ps.print(map.get(key));
401                }
402                ps.println("}");
403            } 
404            else {
405                    ps.println(map.getClass().getName()+" {");
406                    while(it.hasNext()) {
407                        Object key = it.next();
408                        ps.print("  ");
409                        ps.print(key);
410                        ps.print(":");
411                        ps.print(map.get(key));
412                        ps.println(";");
413                    }
414                    ps.println("}");
415            }
416        }
417    
418        private static void _(PrintStream ps,NamedNodeMap map) {
419            if(map==null) {
420                    ps.println("null");
421                    return;
422            }
423            int len = map.getLength();
424            ps.print(map.getClass().getName()+" {");
425            Attr attr;
426            for(int i=0;i<len;i++) {
427                    attr=(Attr)map.item(i);
428    
429                    ps.print(attr.getName());
430                    ps.print(":");
431                    ps.print(attr.getValue());
432                ps.println(";");
433            }
434            ps.println("}");
435        }
436        
437        
438    
439    }