001: /*
002: * Copyright (c) 2004-2008 QOS.ch
003: * All rights reserved.
004: *
005: * Permission is hereby granted, free of charge, to any person obtaining
006: * a copy of this software and associated documentation files (the
007: * "Software"), to deal in the Software without restriction, including
008: * without limitation the rights to use, copy, modify, merge, publish,
009: * distribute, sublicense, and/or sell copies of the Software, and to
010: * permit persons to whom the Software is furnished to do so, subject to
011: * the following conditions:
012: *
013: * The above copyright notice and this permission notice shall be
014: * included in all copies or substantial portions of the Software.
015: *
016: * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
017: * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
018: * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
019: * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
020: * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
021: * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
022: * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
023: */
024:
025: package org.slf4j.migrator;
026:
027: import java.io.File;
028: import java.io.IOException;
029: import java.util.ArrayList;
030: import java.util.Iterator;
031: import java.util.List;
032:
033: import javax.swing.SwingUtilities;
034:
035: import org.slf4j.migrator.internal.MigratorFrame;
036: import org.slf4j.migrator.internal.ProgressListener;
037: import org.slf4j.migrator.line.RuleSet;
038:
039: public class ProjectConverter {
040:
041: private RuleSet ruleSet;
042: private List<ConversionException> exception;
043:
044: ProgressListener progressListener;
045:
046: public static void main(String[] args) throws IOException {
047: SwingUtilities.invokeLater(new Runnable() {
048: public void run() {
049: MigratorFrame inst = new MigratorFrame();
050: inst.setLocationRelativeTo(null);
051: inst.setVisible(true);
052: }
053: });
054: }
055:
056: /**
057: * Ask for concrete matcher implementation depending on the conversion mode
058: * Ask for user confirmation to convert the selected source directory if valid
059: * Ask for user confirmation in case of number of files to convert > 1000
060: *
061: * @return true if init operation complete
062: * @throws IOException
063: */
064: public ProjectConverter(int conversionType,
065: ProgressListener progressListener) {
066: this .progressListener = progressListener;
067: ruleSet = RuleSetFactory.getMatcherImpl(conversionType);
068: if (ruleSet == null) {
069: addException(new ConversionException(
070: ConversionException.NOT_IMPLEMENTED));
071: }
072: }
073:
074: public void convertProject(File folder) {
075: FileSelector fs = new FileSelector(progressListener);
076: List<File> fileList = fs.selectJavaFilesInFolder(folder);
077: scanFileList(fileList);
078: progressListener.onDone();
079: }
080:
081: /**
082: * Convert a list of files
083: *
084: * @param lstFiles
085: */
086: private void scanFileList(List<File> lstFiles) {
087: progressListener.onFileScanBegin();
088: Iterator<File> itFile = lstFiles.iterator();
089: while (itFile.hasNext()) {
090: File currentFile = itFile.next();
091: progressListener.onFileScan(currentFile);
092: scanFile(currentFile);
093: }
094: }
095:
096: /**
097: * Convert the specified file Read each line and ask matcher implementation
098: * for conversion Rewrite the line returned by matcher
099: *
100: * @param file
101: */
102: private void scanFile(File file) {
103: try {
104: InplaceFileConverter fc = new InplaceFileConverter(ruleSet,
105: progressListener);
106: fc.convert(file);
107: } catch (IOException exc) {
108: addException(new ConversionException(exc.toString()));
109: }
110: }
111:
112: public void addException(ConversionException exc) {
113: if (exception == null) {
114: exception = new ArrayList<ConversionException>();
115: }
116: exception.add(exc);
117: }
118:
119: public void printException() {
120: if (exception != null) {
121: Iterator iterator = exception.iterator();
122: while (iterator.hasNext()) {
123: ConversionException exc = (ConversionException) iterator
124: .next();
125: exc.print();
126: }
127: exception = null;
128: }
129: }
130: }
|