package com.javaeasy.changeimport; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; import com.javaeasy.fileiterator.ProcessFileSysItemIF; public class ImportChangeProcessor implements ProcessFileSysItemIF { boolean processFilesInCurrentFolder = true; private static final String JAVA = "java"; private static final String MIDDLE_PROC = "changeimport"; private static final String NOT_TO_PROCESS = ".svn"; private int changedImport = 0; private int changedImportAll = 0; private List<File> errorFiles = new ArrayList<File>(); private static String[] ignoredPackageNames = { "com.ebay.tools.soa.v3", "com.ebay.soaframework.eclipse", "com.ebay.tools.soa.ebox", "com.ebay.tools.soa.errorlibrary", "com.ebay.tools.soa.external", "com.ebay.tools.soa.marketplace" }; private static boolean shouldIgnore(String line) { for (String pkg : ignoredPackageNames) { if (line.contains(pkg)) { return true; } } return false; } @Override public void initProcessor(File root) { } @Override public String[] getProcessFileExtentions() { return new String[] { JAVA }; } @Override public String[] getProcessFileNames() { return new String[] { "plugin.xml", "MANIFEST.MF" }; } private static void log(String str) { System.out.println(str); } @Override public void preProcessFolder(File folder) { String fullPath = folder.getAbsolutePath(); log("Processing folder :" + fullPath); if (fullPath.contains(NOT_TO_PROCESS)) { processFilesInCurrentFolder = false; } else { processFilesInCurrentFolder = true; } } @Override public void postProcessFolder(File folder) { log("Processed folder :" + folder); } @Override public void preProcessFile(File file) { log("Processing file: " + file); } @Override public void processFile(File file) { if (processFilesInCurrentFolder == false) { return; } try { BufferedReader reader = new BufferedReader(new FileReader(file)); String line = null; File newJavaFile = new File(file.getAbsolutePath() + MIDDLE_PROC); if (newJavaFile.isFile() == true) { newJavaFile.delete(); } boolean creation = newJavaFile.createNewFile(); if (creation == false) { errorFiles.add(file); log("Unable to create file: " + newJavaFile); } PrintWriter writer = new PrintWriter(new FileWriter(newJavaFile)); while ((line = reader.readLine()) != null) { // not import, return if (line.trim().startsWith("import") == false) { writer.write(line + "\r\n"); continue; } if (shouldIgnore(line) == false){ // should do a replacement changedImport++; line = line.replace("com.ebay.tools.soa.", "org.ebayopensource.turmeric.eclipse."); } writer.write(line + "\r\n"); } reader.close(); writer.close(); file.delete(); newJavaFile.renameTo(file); } catch (FileNotFoundException e) { e.printStackTrace(); errorFiles.add(file); } catch (IOException e) { e.printStackTrace(); errorFiles.add(file); } } @Override public void postProcessFile(File file) { if (processFilesInCurrentFolder == false) { return; } log("Processed file: " + file + ". Changed import: " + changedImport); changedImportAll += changedImport; changedImport = 0; } @Override public void done() { log("Processe finished. Changed import :" + changedImportAll); log("Error Files:"); for (File errFile : errorFiles) { log(errFile.toString()); } } }