1 /**
2 * Copyright (c) 2004-2011 QOS.ch
3 * All rights reserved.
4 *
5 * Permission is hereby granted, free of charge, to any person obtaining
6 * a copy of this software and associated documentation files (the
7 * "Software"), to deal in the Software without restriction, including
8 * without limitation the rights to use, copy, modify, merge, publish,
9 * distribute, sublicense, and/or sell copies of the Software, and to
10 * permit persons to whom the Software is furnished to do so, subject to
11 * the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be
14 * included in all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23 *
24 */
25 package org.slf4j.migrator;
26
27 import java.io.File;
28 import java.io.IOException;
29 import java.util.ArrayList;
30 import java.util.Iterator;
31 import java.util.List;
32
33 import javax.swing.SwingUtilities;
34
35 import org.slf4j.migrator.internal.MigratorFrame;
36 import org.slf4j.migrator.internal.ProgressListener;
37 import org.slf4j.migrator.line.RuleSet;
38
39 public class ProjectConverter {
40
41 private RuleSet ruleSet;
42 private List<ConversionException> exception;
43
44 ProgressListener progressListener;
45
46 public static void main(String[] args) throws IOException {
47 SwingUtilities.invokeLater(new Runnable() {
48 public void run() {
49 MigratorFrame inst = new MigratorFrame();
50 inst.setLocationRelativeTo(null);
51 inst.setVisible(true);
52 }
53 });
54 }
55
56 /**
57 * Ask for concrete matcher implementation depending on the conversion mode
58 * Ask for user confirmation to convert the selected source directory if valid
59 * Ask for user confirmation in case of number of files to convert > 1000
60 *
61 * @param conversionType
62 * @param progressListener
63 */
64 public ProjectConverter(int conversionType, ProgressListener progressListener) {
65 this.progressListener = progressListener;
66 ruleSet = RuleSetFactory.getMatcherImpl(conversionType);
67 if (ruleSet == null) {
68 addException(new ConversionException(ConversionException.NOT_IMPLEMENTED));
69 }
70 }
71
72 public void convertProject(File folder) {
73 FileSelector fs = new FileSelector(progressListener);
74 List<File> fileList = fs.selectJavaFilesInFolder(folder);
75 scanFileList(fileList);
76 progressListener.onDone();
77 }
78
79 /**
80 * Convert a list of files
81 *
82 * @param lstFiles
83 */
84 private void scanFileList(List<File> lstFiles) {
85 progressListener.onFileScanBegin();
86 Iterator<File> itFile = lstFiles.iterator();
87 while (itFile.hasNext()) {
88 File currentFile = itFile.next();
89 progressListener.onFileScan(currentFile);
90 scanFile(currentFile);
91 }
92 }
93
94 /**
95 * Convert the specified file Read each line and ask matcher implementation
96 * for conversion Rewrite the line returned by matcher
97 *
98 * @param file
99 */
100 private void scanFile(File file) {
101 try {
102 InplaceFileConverter fc = new InplaceFileConverter(ruleSet, progressListener);
103 fc.convert(file);
104 } catch (IOException exc) {
105 addException(new ConversionException(exc.toString()));
106 }
107 }
108
109 public void addException(ConversionException exc) {
110 if (exception == null) {
111 exception = new ArrayList<ConversionException>();
112 }
113 exception.add(exc);
114 }
115
116 public void printException() {
117 if (exception != null) {
118 Iterator<ConversionException> iterator = exception.iterator();
119 while (iterator.hasNext()) {
120 ConversionException exc = (ConversionException) iterator.next();
121 exc.print();
122 }
123 exception = null;
124 }
125 }
126 }