1 package org.slf4j.converter;
2
3 import java.io.File;
4 import java.io.FileInputStream;
5 import java.io.FileOutputStream;
6 import java.io.FileNotFoundException;
7 import java.io.IOException;
8 import java.io.FileReader;
9 import java.io.BufferedReader;
10 import java.io.InputStreamReader;
11 import java.nio.channels.FileChannel;
12 import java.util.Iterator;
13 import java.util.List;
14 import java.util.ArrayList;
15
16 import javax.swing.JFileChooser;
17
18 public class Converter {
19
20 private List<File> javaFiles;
21
22 private AbstractMatcher matcher;
23
24 private Writer writer;
25
26 private String source;
27
28 private int conversionType;
29
30 private boolean commentConversion;
31
32
33
34
35
36
37 public static void main(String[] args) throws IOException {
38
39 Converter converter = new Converter();
40
41 if (args.length > 0) {
42 converter.source = args[0];
43 } else {
44
45 JFileChooser selector = new JFileChooser();
46 selector.setDialogTitle("Source folder selector");
47 selector.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
48 int res = selector.showOpenDialog(null);
49 if (res == JFileChooser.APPROVE_OPTION) {
50 File folder = selector.getSelectedFile();
51 converter.source = folder.getAbsolutePath();
52 } else {
53 return;
54 }
55 }
56
57 converter.conversionType = Constant.JCL_TO_SLF4J;
58 if (converter.init()) {
59 converter.convert(converter.javaFiles);
60 }
61 }
62
63
64
65
66
67
68 public boolean init() throws IOException {
69 matcher = AbstractMatcher.getMatcherImpl(conversionType);
70 if (matcher == null) {
71 return false;
72 }
73 matcher.setCommentConversion(commentConversion);
74 writer = new Writer();
75
76 File fileSource = new File(source);
77 if (!fileSource.isDirectory()) {
78 System.out.println("source path is not a valid source directory");
79 return false;
80 } else {
81 BufferedReader in = new BufferedReader(new InputStreamReader(
82 System.in));
83 System.out
84 .println("RUNNING CONVERTER WILL REPLACE JAVA FILES CONTAINED IN "
85 + source + ", DO YOU WANT TO CONTINUE Y / N ?");
86 String response = in.readLine();
87 if (response.equalsIgnoreCase("N")) {
88 return false;
89 }
90
91 selectFiles(fileSource);
92
93 if (javaFiles.size() > 1000) {
94 System.out.println("THERE IS " + javaFiles.size()
95 + " FILES TO CONVERT, DO YOU WANT TO CONTINUE Y / N ?");
96 if (response.equalsIgnoreCase("N")) {
97 return false;
98 }
99 }
100 }
101 return true;
102 }
103
104
105
106
107
108 private void delete(File fdest) {
109 if (fdest.isDirectory()) {
110 File[] files = fdest.listFiles();
111 if (files != null) {
112 for (int i = 0; i < files.length; i++) {
113 delete(files[i]);
114 }
115 }
116 fdest.delete();
117 } else {
118 fdest.delete();
119 }
120 }
121
122
123
124
125
126
127 private void copy(File fsource, File fdest) {
128 try {
129 FileInputStream fis = new FileInputStream(fsource);
130 FileOutputStream fos = new FileOutputStream(fdest);
131 FileChannel channelSource = fis.getChannel();
132 FileChannel channelDest = fos.getChannel();
133 if (channelSource.isOpen() && channelDest.isOpen()) {
134 channelSource.transferTo(0, channelSource.size(), channelDest);
135 channelSource.close();
136 channelDest.close();
137 } else {
138 System.out.println("error copying file "
139 + fsource.getAbsolutePath());
140 }
141
142 } catch (FileNotFoundException exc) {
143 System.out.println(exc.toString());
144 } catch (IOException e) {
145 System.out.println(e.toString());
146 }
147 }
148
149
150
151
152
153
154 private List<File> selectFiles(File file) {
155 if (javaFiles == null) {
156 javaFiles = new ArrayList<File>();
157 }
158 if (file.isDirectory()) {
159 File[] files = file.listFiles();
160 if (files != null) {
161 for (int i = 0; i < files.length; i++) {
162 selectFiles(files[i]);
163 }
164 }
165 } else {
166 if (file.getName().endsWith(".java")) {
167 javaFiles.add(file);
168 }
169 }
170 return javaFiles;
171 }
172
173
174
175
176
177 private void convert(List<File> lstFiles) {
178 Iterator<File> itFile = lstFiles.iterator();
179 while (itFile.hasNext()) {
180 File currentFile = itFile.next();
181 convert(currentFile);
182 }
183 }
184
185
186
187
188
189 private void convert(File file) {
190 File newFile = new File(file.getAbsolutePath() + "new");
191 try {
192 boolean isEmpty = false;
193 writer.initFileWriter(newFile);
194 FileReader freader = new FileReader(file);
195 BufferedReader breader = new BufferedReader(freader);
196 String line;
197 String newLine;
198 while (!isEmpty) {
199 line = breader.readLine();
200 if (line != null) {
201 newLine = matcher.replace(line);
202 writer.write(newLine);
203 } else {
204 isEmpty = true;
205 writer.closeFileWriter();
206 copy(newFile, file);
207 delete(newFile);
208 }
209 }
210 } catch (IOException exc) {
211 System.out.println("error reading file " + exc);
212 }
213 }
214 }