001    package other;
002    
003    //import java.beans.BeanInfo;
004    //import java.beans.IntrospectionException;
005    //import java.beans.Introspector;
006    //import java.beans.PropertyDescriptor;
007    import java.util.HashMap;
008    
009    public class Debug
010    {
011    
012            private static boolean debug = true;
013            private static boolean printMethodName = false;
014            private static HashMap<String, Integer> counters = new HashMap<String, Integer>();
015    
016            public static void log(Object o)
017            {
018                    print(o);
019                    // print("\tin: " + Debug.getCallingMethod());
020            }
021    
022            public static void exception(Exception e)
023            {
024                    print(e);
025            }
026    
027            public static void print(Object o)
028            {
029                    if (debug)
030                    {
031                            if (o != null && o.getClass().getName().startsWith("["))
032                                    o = arrayToString(o);
033                            String stringToPrint = String.valueOf(o);
034                            stringToPrint = addBeforeEachLine(stringToPrint, "~");
035                            System.out.println(stringToPrint);
036                            System.out.flush();
037                    }
038                    if (printMethodName)
039                            (new Exception("This is just to get the method name"))
040                                            .printStackTrace();
041            }
042    
043            public static void print(int i)
044            {
045                    print(Integer.toString(i));
046            }
047    
048            public static void print(Object o, int i)
049            {
050                    if (i == 1)
051                            print(o);
052            }
053    
054            public static void println(Object o)
055            {
056                    print(o + "\n");
057            }
058    
059            public static void addCounter(String name)
060            {
061                    if (counters.containsKey(name))
062                            print("Resetting counter: \"" + name + "\" with value: "
063                                            + counters.get(name));
064                    counters.put(name, new Integer(0));
065            }
066    
067            public static void printCounter(String name)
068            {
069                    String s = "`Counter: \"" + name + "\" = " + counters.get(name) + "\n";
070                    System.out.print(s);
071            }
072    
073            public static void incrementCounter(String name)
074            {
075                    counters.put(name, new Integer(counters.get(name).intValue() + 1));
076            }
077    
078            public static void incrementAndPrintCounter(String name)
079            {
080                    printCounter(name);
081                    incrementCounter(name);
082            }
083    
084            public static void count(String name)
085            {
086                    if (counters.containsKey(name))
087                            incrementCounter(name);
088                    else
089                            addCounter(name);
090                    printCounter(name);
091            }
092    
093            public static String addBeforeEachLine(String s, String prefix)
094            {
095                    return prefix + s;
096            }
097    
098            public static String arrayToString(Object o)
099            {
100                    return arrayToString(o, ", ", ",\n");
101            }
102    
103            public static String arrayToStringln(Object o)
104            {
105                    return arrayToString(o, ",\n ", ",\n");
106            }
107    
108            public static String arrayToString(Object o, String elementSperator,
109                            String arraySeperator)
110            {
111                    if (o == null)
112                            return "null";
113                    String cl = o.getClass().getName();
114                    if (!cl.startsWith("["))
115                            return o.toString();
116                    StringBuffer sb = new StringBuffer("[");
117                    if (o instanceof byte[])
118                    {
119                            byte ba[] = (byte[]) o;
120                            for (int i = 0; i < ba.length; i++)
121                            {
122                                    if (i > 0)
123                                            sb.append(elementSperator);
124                                    sb.append("(byte)");
125                                    sb.append(ba[i]);
126                            }
127    
128                    } else if (o instanceof char[])
129                    {
130                            char ca[] = (char[]) o;
131                            for (int i = 0; i < ca.length; i++)
132                            {
133                                    if (i > 0)
134                                            sb.append(elementSperator);
135                                    sb.append("'");
136                                    sb.append(ca[i]);
137                                    sb.append("'");
138                            }
139    
140                    } else if (o instanceof short[])
141                    {
142                            short sa[] = (short[]) o;
143                            for (int i = 0; i < sa.length; i++)
144                            {
145                                    if (i > 0)
146                                            sb.append(elementSperator);
147                                    sb.append("(short)");
148                                    sb.append(sa[i]);
149                            }
150    
151                    } else if (o instanceof int[])
152                    {
153                            int ia[] = (int[]) o;
154                            for (int i = 0; i < ia.length; i++)
155                            {
156                                    if (i > 0)
157                                            sb.append(elementSperator);
158                                    sb.append(ia[i]);
159                            }
160    
161                    } else if (o instanceof long[])
162                    {
163                            long la[] = (long[]) o;
164                            for (int i = 0; i < la.length; i++)
165                            {
166                                    if (i > 0)
167                                            sb.append(elementSperator);
168                                    sb.append(la[i]);
169                                    sb.append("L");
170                            }
171    
172                    } else if (o instanceof float[])
173                    {
174                            float fa[] = (float[]) o;
175                            for (int i = 0; i < fa.length; i++)
176                            {
177                                    if (i > 0)
178                                            sb.append(elementSperator);
179                                    sb.append(fa[i]);
180                                    sb.append("F");
181                            }
182    
183                    } else if (o instanceof double[])
184                    {
185                            double da[] = (double[]) o;
186                            for (int i = 0; i < da.length; i++)
187                            {
188                                    if (i > 0)
189                                            sb.append(elementSperator);
190                                    sb.append(da[i]);
191                                    sb.append("D");
192                            }
193    
194                    } else if (o instanceof String)
195                    {
196                            String sa[] = (String[]) o;
197                            for (int i = 0; i < sa.length; i++)
198                            {
199                                    if (i > 0)
200                                            sb.append(elementSperator);
201                                    sb.append("\"");
202                                    sb.append(sa[i]);
203                                    sb.append("\"");
204                            }
205    
206                    } else if (cl.startsWith("[L"))
207                    {
208                            Object oa[] = (Object[]) o;
209                            for (int i = 0; i < oa.length; i++)
210                            {
211                                    if (i > 0)
212                                            sb.append(elementSperator);
213                                    sb.append(i + "-");
214                                    sb.append(oa[i]);
215                            }
216    
217                    } else if (cl.startsWith("[["))
218                    {
219                            Object aa[] = (Object[]) o;
220                            for (int i = 0; i < aa.length; i++)
221                            {
222                                    if (i > 0)
223                                            sb.append(arraySeperator);
224                                    sb
225                                                    .append(arrayToString(aa[i], elementSperator,
226                                                                    arraySeperator));
227                            }
228    
229                    } else
230                    {
231                            sb.append("(unknown array type)");
232                    }
233                    sb.append("]");
234                    return sb.toString();
235            }
236    
237            // public static void initLoggerThread()
238            // {
239            // try
240            // {
241            //                      
242            // }
243            // catch (FileNotFoundException e)
244            // {
245            // e.printStackTrace();
246            // }
247            // }
248            //
249            // public static String getBeanStuff(Object bean)
250            // {
251            // String s= "";
252            // BeanInfo beanInfo = null;
253            // try
254            // {
255            // beanInfo = Introspector.getBeanInfo(bean.getClass());
256            // }
257            // catch (IntrospectionException e1)
258            // {
259            // e1.printStackTrace();
260            // }
261            // PropertyDescriptor property[] = beanInfo.getPropertyDescriptors();
262            // for (int i = 0; i < property.length; i++)
263            // {
264            // String propertyName = property[i].getName();
265            // try
266            // {
267            // Object propertyValue = property[i].getReadMethod()
268            // .invoke(bean, null);
269            // s += propertyName + " = " + propertyValue + "\n";
270            // }
271            // catch (IllegalArgumentException e)
272            // {
273            // e.printStackTrace();
274            // }
275            // catch (IllegalAccessException e)
276            // {
277            // e.printStackTrace();
278            // }
279            // catch (InvocationTargetException e)
280            // {
281            // e.printStackTrace();
282            // }
283            // }
284            // return s;
285            // }
286            //      
287            // public static void inspectBean(Object bean)
288            // {
289            // print(getBeanStuff(bean));
290            // }
291    
292            public static String getCallingMethod()
293            {
294                    StackTraceElement[] stackElements = new Exception().getStackTrace();
295    
296                    StackTraceElement callingElement = null;
297                    for (int i = 0; i < stackElements.length; i++)
298                            if (!stackElements[i].getClassName().equals(Debug.class.getName()))
299                                    callingElement = stackElements[i];
300    
301                    return callingElement == null ? null : callingElement.toString();
302                    // String info = null;
303                    // if(callingElement != null)
304                    // {
305                    // info = callingElement.getClassName();
306                    //              
307                    // if (info != null)
308                    // info += "." + callingElement.getMethodName();
309                    // }
310            }
311    }