]> git.uio.no Git - ifi-stolz-refaktor.git/blob - software/no.uio.ifi.refaktor/src/no/uio/ifi/refaktor/utils/RefaktorDebug.java
Software: moving text selections to new package
[ifi-stolz-refaktor.git] / software / no.uio.ifi.refaktor / src / no / uio / ifi / refaktor / utils / RefaktorDebug.java
1 package no.uio.ifi.refaktor.utils;
2
3 import java.io.File;
4 import java.io.IOException;
5 import java.io.PrintStream;
6 import java.io.PrintWriter;
7 import java.io.StringWriter;
8 import java.util.Set;
9 import java.util.logging.FileHandler;
10 import java.util.logging.Handler;
11 import java.util.logging.Level;
12 import java.util.logging.Logger;
13 import java.util.logging.SimpleFormatter;
14
15 import org.eclipse.ltk.core.refactoring.Change;
16 import org.eclipse.ltk.core.refactoring.CompositeChange;
17 import org.eclipse.text.edits.TextEdit;
18
19 public class RefaktorDebug {
20
21         static {
22                 createLogger();
23         }
24
25         private static boolean debug = true;
26         private static PrintStream out;
27         private static Logger logger;
28
29         public static void initialize() {
30                 out = System.err;
31                 debug = Boolean.parseBoolean(System.getProperty("refaktor.debug", "true"));
32                 println("(Refaktor Debug active)");
33         }
34
35         public static void println() {
36                 println("");
37         }
38
39         public static void println(Object o) {
40                 println(o.toString());
41         }
42
43         public static void print(Object o) {
44                 print(o.toString());
45         }
46
47         public static void println(Object caller, Object object) {
48                 println(caller, object.toString());
49         }
50
51         public static void println(Object caller, String string) {
52                 println(caller.getClass().getSimpleName() + ":\n" + string);
53         }
54
55         public static void println(String str) {
56                 if (!debug)
57                         return;
58
59                 out.println(str);
60         }
61
62         public static void print(String str) {
63                 if (!debug)
64                         return;
65
66                 out.print(str);
67         }
68
69         public static void printChange(Change change, Set<Change> s, int i) {
70                 if (!debug)
71                         return;
72
73                 s.add(change);
74                 println("Level " + i++ + ": " + change.getClass());
75                 CompositeChange c = (CompositeChange) change.getAdapter(CompositeChange.class);
76                 if (c != null) {
77                         for(Change ch: c.getChildren()) {
78                                 if (!s.contains(ch))
79                                         printChange(ch, s, i);
80                         }
81                 }
82         }
83
84         public static void printTextEdit(TextEdit edit, int i) {
85                 if (!debug)
86                         return;
87
88                 println(i++ + ": " + edit.getClass());
89                 for (TextEdit t: edit.getChildren()) 
90                         printTextEdit(t, i);
91
92         }
93
94         public static void log(Throwable t) {
95                 StringWriter stringWriter = new StringWriter();
96                 t.printStackTrace(new PrintWriter(stringWriter));
97                 log(stringWriter.toString());
98         }
99
100         public static void log(String string) {
101                 logger.log(Level.SEVERE, string);
102         }
103
104         private static void createLogger() {
105                 logger = Logger.getLogger(RefaktorDebug.class.getCanonicalName());
106                 logger.setLevel(Level.ALL);
107
108                 File homeDirectory = new File(System.getProperty("user.home"));
109                 File defaultDirectory = new File(homeDirectory, "no.uio.ifi.refaktor.logs");
110
111                 File loggingDirectory = new File(System.getProperty("refaktor.logs", defaultDirectory.getAbsolutePath()));
112
113                 if (!loggingDirectory.exists())
114                         loggingDirectory.mkdir();
115
116                 try {
117                         Handler handler = new FileHandler(loggingDirectory.getAbsolutePath() + "/no.uio.ifi.refaktor.%g.log", true);
118                         handler.setFormatter(new SimpleFormatter());
119                         logger.addHandler(handler);
120                 } catch (SecurityException e) {
121                         e.printStackTrace();
122                 } catch (IOException e) {
123                         e.printStackTrace();
124                 }
125         }
126 }