001 package org.springframework.beans; 002 003 import java.io.File; 004 import java.io.FileInputStream; 005 import java.io.FileOutputStream; 006 import java.io.IOException; 007 import java.io.InputStream; 008 import java.io.OutputStream; 009 import java.util.ArrayList; 010 import java.util.List; 011 012 import org.apache.commons.io.IOUtils; 013 014 public class LicenseHeaderTest { 015 016 public static void main(String[] args) { 017 new LicenseHeaderTest().exec(args); 018 } 019 020 protected void exec(String[] args) { 021 try { 022 long beg = System.currentTimeMillis(); 023 String dir = "c:/eclipse/sts/2.6.1/ide/ws/rice-trunk"; 024 List<File> xmlFiles = getFiles(new File(dir)); 025 System.out.println(xmlFiles.size()); 026 List<File> problemFiles = getProblemFiles(xmlFiles); 027 String[] invalidHeaders = getInvalidHeaders(); 028 System.out.println(problemFiles.size()); 029 for (int i = 0; i < problemFiles.size(); i++) { 030 File problemFile = problemFiles.get(i); 031 System.out.println(problemFile.getAbsolutePath()); 032 reWrite(problemFile, invalidHeaders); 033 } 034 long end = System.currentTimeMillis(); 035 long elapsed = end - beg; 036 double seconds = elapsed / 1000D; 037 System.out.println(seconds); 038 } catch (Throwable t) { 039 t.printStackTrace(); 040 } 041 } 042 043 protected void reWrite(File file, String[] invalidHeaders) throws IOException { 044 InputStream in = new FileInputStream(file); 045 String oldContent = IOUtils.toString(in); 046 in.close(); 047 String newContent = getGoodContent(oldContent, invalidHeaders); 048 OutputStream out = new FileOutputStream(file); 049 IOUtils.write(newContent.getBytes(), out); 050 out.close(); 051 } 052 053 protected String getGoodContent(String content, String[] invalidHeaders) { 054 for (String invalidHeader : invalidHeaders) { 055 content = content.replace(invalidHeader, ""); 056 } 057 return content; 058 059 } 060 061 protected String[] getInvalidHeaders() throws IOException { 062 String baseDir = "C:/eclipse/sts/2.6.1/ide/ws/kuali-spring-util/src/test/resources"; 063 String[] filenames = { "invalid1.txt", "invalid2.txt", "invalid3.txt", "invalid4.txt", "invalid5.txt" }; 064 String[] invalidHeaders = new String[filenames.length]; 065 int count = 0; 066 for (String filename : filenames) { 067 String fullFileName = baseDir + "/" + filename; 068 String content = IOUtils.toString(new FileInputStream(fullFileName)); 069 invalidHeaders[count++] = content; 070 } 071 return invalidHeaders; 072 } 073 074 protected List<File> getProblemFiles(List<File> files) throws IOException { 075 List<File> problemFiles = new ArrayList<File>(); 076 for (File file : files) { 077 List<String> lines = IOUtils.readLines(new FileInputStream(file)); 078 079 int prologIndex = getPrologIndex(lines); 080 if (prologIndex != -1 && prologIndex != 0) { 081 // problemFiles.add(file); 082 continue; 083 } 084 085 boolean copyRightIssue = isMultipleCopyRights(lines); 086 if (copyRightIssue) { 087 problemFiles.add(file); 088 continue; 089 } 090 } 091 return problemFiles; 092 } 093 094 protected boolean isMultipleCopyRights(List<String> strings) { 095 int count = 0; 096 for (int i = 0; i < strings.size(); i++) { 097 String s = strings.get(i); 098 String lowerCase = s.toLowerCase(); 099 int pos = lowerCase.indexOf("copyright"); 100 if (pos != -1) { 101 count++; 102 } 103 } 104 return count > 1; 105 } 106 107 protected int getPrologIndex(List<String> strings) { 108 for (int i = 0; i < strings.size(); i++) { 109 String s = strings.get(i); 110 if (isProlog(s)) { 111 return i; 112 } 113 } 114 return -1; 115 } 116 117 protected boolean isProlog(String s) { 118 String lowerCase = s.toLowerCase(); 119 int pos1 = lowerCase.indexOf("<?xml"); 120 int pos2 = lowerCase.indexOf("?>"); 121 boolean flag1 = pos1 != -1 && pos2 != -1; 122 boolean flag2 = pos2 > pos1; 123 return flag1 && flag2; 124 } 125 126 protected boolean isSkip(File file) { 127 String name = file.getAbsolutePath(); 128 if (name.contains(".svn")) { 129 return true; 130 } 131 if (name.contains("config\\ide")) { 132 return true; 133 } 134 if (name.contains("db\\impex")) { 135 return true; 136 } 137 return false; 138 } 139 140 protected boolean isAdd(File file) { 141 String name = file.getAbsolutePath(); 142 if (name.contains(".x")) { 143 return true; 144 } else { 145 return false; 146 } 147 } 148 149 protected List<File> getFiles(File dir) { 150 File[] contents = dir.listFiles(); 151 List<File> files = new ArrayList<File>(); 152 for (File file : contents) { 153 if (isSkip(file)) { 154 continue; 155 } 156 if (file.isDirectory()) { 157 files.addAll(getFiles(file)); 158 } else { 159 if (isAdd(file)) { 160 files.add(file); 161 } 162 } 163 } 164 return files; 165 } 166 }