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