/**
* Copyright (c) 2014, the Railo Company Ltd.
* Copyright (c) 2015, Lucee Assosication Switzerland
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*
*/
package lucee;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintStream;
import java.io.Reader;
import java.lang.reflect.InvocationTargetException;
import java.sql.ResultSet;
import java.util.Collection;
import java.util.Date;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.Map;
import java.util.Set;
import javax.servlet.http.Cookie;
import lucee.commons.io.IOUtil;
import lucee.commons.io.SystemUtil;
import lucee.commons.io.res.Resource;
import lucee.commons.io.res.ResourcesImpl;
import lucee.commons.io.res.util.ResourceUtil;
import lucee.runtime.exp.PageException;
import lucee.runtime.op.Caster;
import lucee.runtime.type.QueryImpl;
import org.w3c.dom.Attr;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
/**
*
*/
public class aprint {
public static void date(String value) {
long millis=System.currentTimeMillis();
o(
new Date(millis)
+"-"
+(millis-(millis/1000*1000))
+" "+value);
}
public static void ds(boolean useOutStream) {
new Exception("Stack trace").printStackTrace(useOutStream?System.out:System.err);
}
public static void ds(Object label,boolean useOutStream) {
_eo(useOutStream?System.out:System.err, label);
ds(useOutStream);
}
public static void ds() {ds(false);}
public static void ds(Object label) {ds(label,false);}
public static void dumpStack() {ds(false);}
public static void dumpStack(boolean useOutStream) {ds(useOutStream);}
public static void dumpStack(String label) {ds(label,false);}
public static void dumpStack(String label,boolean useOutStream) {ds(label,useOutStream);}
public static void err(boolean o) {
System.err.println(o);
}
public static void err(double d) {
System.err.println(d);
}
public static void err(long d) {
System.err.println(d);
}
public static void err(float d) {
System.err.println(d);
}
public static void err(int d) {
System.err.println(d);
}
public static void err(short d) {
System.err.println(d);
}
public static void out(Object o1,Object o2,Object o3) {
System.out.print(o1);
System.out.print(o2);
System.out.println(o3);
}
public static void out(Object o1,Object o2) {
System.out.print(o1);
System.out.println(o2);
}
public static void out(Object o,long l) {
System.out.print(o);
System.out.println(l);
}
public static void out(Object o,double d) {
System.out.print(o);
System.out.println(d);
}
public static void out(byte[] arr, int offset, int len) {
System.out.print("byte[]{");
for(int i=offset;i<len+offset;i++) {
if(i>0)System.out.print(',');
System.out.print(arr[i]);
}
System.out.println("}");
}
public static void out(double o) {
System.out.println(o);
}
public static void out(float o) {
System.out.println(o);
}
public static void out(long o) {
System.out.println(o);
}
public static void out(int o) {
System.out.println(o);
}
public static void out(char o) {
System.out.println(o);
}
public static void out(boolean o) {
System.out.println(o);
}
public static void out() {
System.out.println();
}
public static void printST(Throwable t) {
if(t instanceof InvocationTargetException){
t=((InvocationTargetException)t).getTargetException();
}
err(t.getClass().getName());
t.printStackTrace();
}
public static void printST(Throwable t,PrintStream ps) {
if(t instanceof InvocationTargetException){
t=((InvocationTargetException)t).getTargetException();
}
err(t.getClass().getName());
t.printStackTrace(ps);
}
public static void out(Object o) {
_eo(System.out, o);
}
public static void err(Object o) {
_eo(System.err, o);
}
public static void writeTemp(String name,Object o, boolean addStackTrace) {
//write(SystemUtil.getTempDirectory().getRealResource(name+".log"), o);
write(SystemUtil.getHomeDirectory().getRealResource(name+".log"), o,addStackTrace);
}
public static void writeHome(String name,Object o, boolean addStackTrace) {
write(SystemUtil.getHomeDirectory().getRealResource(name+".log"), o,addStackTrace);
}
public static void writeCustom(String path,Object o, boolean addStackTrace) {
write(ResourcesImpl.getFileResourceProvider().getResource(path), o,addStackTrace);
}
public static void write(Resource res,Object o, boolean addStackTrace) {
OutputStream os=null;
PrintStream ps=null;
try{
ResourceUtil.touch(res);
os = res.getOutputStream(true);
ps = new PrintStream(os);
_eo(ps, o);
if(addStackTrace) new Exception("Stack trace").printStackTrace(ps);
}
catch(IOException ioe){
ioe.printStackTrace();
}
finally{
IOUtil.closeEL(ps);
IOUtil.closeEL(os);
}
}
public static void _eo(Object o, boolean d) {
_eo(System.out, o);
}
public static void o(Object o) {
_eo(System.out, o);
}
public static void e(Object o) {
_eo(System.err, o);
}
public static void oe(Object o, boolean valid) {
_eo(valid?System.out:System.err, o);
}
public static void dateO(String value) {
_date(System.out, value);
}
public static void dateE(String value) {
_date(System.err, value);
}
private static void _date(PrintStream ps,String value) {
long millis = System.currentTimeMillis();
_eo(ps,
new Date(millis)
+"-"
+(millis-(millis/1000*1000))
+" "+value);
}
private static void _eo(PrintStream ps,Object o) {
if(o instanceof Enumeration) _eo(ps,(Enumeration)o);
else if(o instanceof Object[]) _eo(ps,(Object[])o);
else if(o instanceof boolean[]) _eo(ps,(boolean[])o);
else if(o instanceof byte[]) _eo(ps,(byte[])o);
else if(o instanceof int[]) _eo(ps,(int[])o);
else if(o instanceof float[]) _eo(ps,(float[])o);
else if(o instanceof long[]) _eo(ps,(long[])o);
else if(o instanceof double[]) _eo(ps,(double[])o);
else if(o instanceof char[]) _eo(ps,(char[])o);
else if(o instanceof short[]) _eo(ps,(short[])o);
else if(o instanceof Set) _eo(ps,(Set)o);
else if(o instanceof List) _eo(ps,(List)o);
else if(o instanceof Map) _eo(ps,(Map)o);
else if(o instanceof Collection) _eo(ps,(Collection)o);
else if(o instanceof Iterator) _eo(ps,(Iterator)o);
else if(o instanceof NamedNodeMap) _eo(ps,(NamedNodeMap)o);
else if(o instanceof ResultSet) _eo(ps,(ResultSet)o);
else if(o instanceof Node) _eo(ps,(Node)o);
else if(o instanceof Throwable) _eo(ps,(Throwable)o);
else if(o instanceof Attributes) _eo(ps,(Attributes)o);
else if(o instanceof Cookie) {
Cookie c=(Cookie) o;
ps.println("Cookie(name:"+c.getName()+";domain:"+c.getDomain()+";maxage:"+c.getMaxAge()+";path:"+c.getPath()+";value:"+c.getValue()+";version:"+c.getVersion()+";secure:"+c.getSecure()+")");
}
else if(o instanceof InputSource) {
InputSource is=(InputSource) o;
Reader r = is.getCharacterStream();
try {
ps.println(IOUtil.toString(is.getCharacterStream()));
} catch (IOException e) {}
finally {
IOUtil.closeEL(r);
}
}
else ps.println(o);
}
private static void _eo(PrintStream ps,Object[] arr) {
if(arr==null){
ps.println("null");
return;
}
ps.print(arr.getClass().getComponentType().getName()+"[]{");
for(int i=0;i<arr.length;i++) {
if(i>0) {
ps.print("\t,");
}
_eo(ps,arr[i]);
}
ps.println("}");
}
private static void _eo(PrintStream ps,int[] arr) {
ps.print("int[]{");
for(int i=0;i<arr.length;i++) {
if(i>0)ps.print(',');
ps.print(arr[i]);
}
ps.println("}");
}
private static void _eo(PrintStream ps,byte[] arr) {
ps.print("byte[]{");
for(int i=0;i<arr.length;i++) {
if(i>0)ps.print(',');
ps.print(arr[i]);
}
ps.println("}");
}
private static void _eo(PrintStream ps,boolean[] arr) {
ps.print("boolean[]{");
for(int i=0;i<arr.length;i++) {
if(i>0)ps.print(',');
ps.print(arr[i]);
}
ps.println("}");
}
private static void _eo(PrintStream ps,char[] arr) {
ps.print("char[]{");
for(int i=0;i<arr.length;i++) {
if(i>0)ps.print(',');
ps.print(arr[i]);
}
ps.println("}");
}
private static void _eo(PrintStream ps,short[] arr) {
ps.print("short[]{");
for(int i=0;i<arr.length;i++) {
if(i>0)ps.print(',');
ps.print(arr[i]);
}
ps.println("}");
}
private static void _eo(PrintStream ps,float[] arr) {
ps.print("float[]{");
for(int i=0;i<arr.length;i++) {
if(i>0)ps.print(',');
ps.print(arr[i]);
}
ps.println("}");
}
private static void _eo(PrintStream ps,long[] arr) {
ps.print("long[]{");
for(int i=0;i<arr.length;i++) {
if(i>0)ps.print(',');
ps.print(arr[i]);
}
ps.println("}");
}
private static void _eo(PrintStream ps,double[] arr) {
ps.print("double[]{");
for(int i=0;i<arr.length;i++) {
if(i>0)ps.print(',');
ps.print(arr[i]);
}
ps.println("}");
}
private static void _eo(PrintStream ps,Node n) {
ps.print(Caster.toString(n,null));
}
private static void _eo(PrintStream ps,Throwable t) {
t.printStackTrace(ps);
}
private static void _eo(PrintStream ps,Enumeration en) {
_eo(ps,en.getClass().getName()+" [");
while(en.hasMoreElements()) {
ps.print(en.nextElement());
ps.println(",");
}
_eo(ps,"]");
}
private static void _eo(PrintStream ps,List list) {
ListIterator it = list.listIterator();
_eo(ps,list.getClass().getName()+" {");
while(it.hasNext()) {
int index = it.nextIndex();
it.next();
ps.print(index);
ps.print(":");
ps.print(list.get(index));
ps.println(";");
}
_eo(ps,"}");
}
private static void _eo(PrintStream ps,Collection coll) {
Iterator it = coll.iterator();
_eo(ps,coll.getClass().getName()+" {");
while(it.hasNext()) {
_eo(ps, it.next());
}
_eo(ps,"}");
}
private static void _eo(PrintStream ps,Iterator it) {
_eo(ps,it.getClass().getName()+" {");
while(it.hasNext()) {
ps.print(it.next());
ps.println(";");
}
_eo(ps,"}");
}
private static void _eo(PrintStream ps,Set set) {
Iterator it = set.iterator();
ps.println(set.getClass().getName()+" {");
boolean first=true;
while(it.hasNext()) {
if(!first)ps.print(",");first=false;
_eo(ps,it.next());
}
_eo(ps,"}");
}
private static void _eo(PrintStream ps,ResultSet res) {
try {
_eo(ps, new QueryImpl(res,"query",null).toString());
} catch (PageException e) {
_eo(ps, res.toString());
}
}
private static void _eo(PrintStream ps,Map map) {
if(map==null) {
ps.println("null");
return;
}
Iterator it = map.keySet().iterator();
if(map.size()<2) {
ps.print(map.getClass().getName()+" {");
while(it.hasNext()) {
Object key = it.next();
_eo(ps,key);
ps.print(":");
_eo(ps,map.get(key));
}
ps.println("}");
}
else {
ps.println(map.getClass().getName()+" {");
while(it.hasNext()) {
Object key = it.next();
ps.print(" ");
_eo(ps,key);
ps.print(":");
_eo(ps,map.get(key));
ps.println(";");
}
ps.println("}");
}
}
private static void _eo(PrintStream ps,NamedNodeMap map) {
if(map==null) {
ps.println("null");
return;
}
int len = map.getLength();
ps.print(map.getClass().getName()+" {");
Attr attr;
for(int i=0;i<len;i++) {
attr=(Attr)map.item(i);
ps.print(attr.getName());
ps.print(":");
ps.print(attr.getValue());
ps.println(";");
}
ps.println("}");
}
private static void _eo(PrintStream ps,Attributes attrs) {
if(attrs==null) {
ps.println("null");
return;
}
int len = attrs.getLength();
ps.print(attrs.getClass().getName()+" {");
for(int i=0;i<len;i++) {
ps.print(attrs.getLocalName(i));
ps.print(":");
ps.print(attrs.getValue(i));
ps.println();
}
ps.println("}");
}
}