1 26 package org.snipsnap.util; 27 28 import java.io.BufferedReader ; 29 import java.io.File ; 30 import java.io.FileReader ; 31 import java.io.IOException ; 32 import java.io.FilenameFilter ; 33 import java.io.BufferedWriter ; 34 import java.io.FileWriter ; 35 import java.util.regex.Pattern ; 36 import java.util.regex.Matcher ; 37 38 47 public class ExprEditor { 48 49 public static void main(String [] args) { 50 String dir = args[0]; 51 String regex = args[1]; 52 String replacement = null; 53 54 if(regex.startsWith("file:")) { 55 try { 56 regex = getFileContent(new File (regex.substring("file:".length()))); 57 System.err.println("searching for files matching: "+regex); 58 } catch (IOException e) { 59 System.err.println("Error: can't find file '"+regex+"'"); 60 System.exit(1); 61 } 62 } 63 64 65 if(args.length > 2) { 66 replacement = args[2]; 67 if (replacement.startsWith("file:")) { 68 try { 69 replacement = getFileContent(new File (replacement.substring("file:".length()))); 70 } catch (IOException e) { 71 System.err.println("Error: can't find file '" + replacement + "'"); 72 System.exit(1); 73 } 74 } 75 } 76 77 Pattern pattern = Pattern.compile(regex, Pattern.DOTALL|Pattern.MULTILINE); 78 79 traverse(new File (dir), pattern, replacement); 80 } 81 82 private static String getFileContent(File file) throws IOException { 83 BufferedReader reader = new BufferedReader (new FileReader (file)); 84 StringBuffer content = new StringBuffer (); 85 char[] buffer = new char[1024]; 86 int len = 0; 87 while((len = reader.read(buffer)) != -1) { 88 content.append(buffer, 0, len); 89 } 90 reader.close(); 91 return content.toString(); 92 } 93 94 private static void traverse(File root, Pattern pattern, String replacement) { 95 File [] files = root.listFiles(new FilenameFilter () { 96 public boolean accept(File file, String s) { 97 return new File (file, s).isDirectory() || s.endsWith(".java"); 98 } 99 }); 100 for (int entry = 0; files != null && entry < files.length; entry++) { 101 if (files[entry].isDirectory()) { 102 traverse(files[entry], pattern, replacement); 103 } else { 104 replace(files[entry], pattern, replacement); 105 } 106 } 107 } 108 109 private static void replace(File file, Pattern pattern, String replacement) { 110 try { 111 String content = getFileContent(file); 112 Matcher matcher = pattern.matcher(content); 114 if(matcher.find()) { 115 if(null != replacement) { 116 content = matcher.replaceFirst(replacement); 117 storeFileContent(file, content); 118 System.err.println("modified '"+file.getPath()+"' ("+matcher.groupCount()+")"); 119 } else { 120 System.err.println("found '"+file.getPath()+"' ("+matcher.groupCount()+")"); 121 } 122 } 123 } catch (IOException e) { 124 System.err.println("unable to load '"+file+"'"); 125 } 126 } 127 128 private static void storeFileContent(File file, String content) throws IOException { 129 File modifiedFile = new File (file.getParentFile(), file.getName() + ".new"); 130 BufferedWriter writer = new BufferedWriter (new FileWriter (modifiedFile)); 131 writer.write(content); 132 writer.close(); 133 modifiedFile.renameTo(file); 134 } 135 136 } 137 | Popular Tags |