package org.simpleframework.xml.util;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;
public class Replace extends LineStripper {
private static final String LGPL =
" \\* This library is free software.*02111-1307\\s+USA\\s+\\*\\/";
private static final String APACHE =
" * Licensed under the Apache License, Version 2.0 (the \"License\");\n"+
" * you may not use this file except in compliance with the License.\n"+
" * You may obtain a copy of the License at\n"+
" *\n"+
" * http://www.apache.org/licenses/LICENSE-2.0\n"+
" *\n"+
" * Unless required by applicable law or agreed to in writing, software\n"+
" * distributed under the License is distributed on an \"AS IS\" BASIS,\n"+
" * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or \n"+
" * implied. See the License for the specific language governing \n"+
" * permissions and limitations under the License.\n"+
" */";
public static void main(String[] list) throws Exception{
List<File> files = getFiles(new File(list[0]), true);
Pattern pattern = Pattern.compile(LGPL, Pattern.DOTALL | Pattern.MULTILINE);
for(File file : files) {
String text = getFile(file);
text = pattern.matcher(text).replaceAll(APACHE);
save(file, text);
}
}
public static void save(File file, String text) throws Exception {
OutputStream out = new FileOutputStream(file);
OutputStreamWriter utf = new OutputStreamWriter(out, "UTF-8");
utf.write(text);
utf.flush();
utf.close();
out.flush();
out.close();
}
public static String getFile(File file) throws Exception {
InputStream in = new FileInputStream(file);
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] block = new byte[8192];
int count = 0;
while((count = in.read(block)) != -1) {
out.write(block, 0, count);
}
return out.toString("UTF-8");
}
public static List<File> getFiles(File root, boolean recursive) {
List<File> files = new ArrayList<File>();
File[] fileList = root.listFiles();
for(File file : fileList) {
if(file.isDirectory() && !file.getName().equals(".svn")) {
if(recursive) {
files.addAll(getFiles(file, recursive));
}
} else if(file.getName().endsWith(".java")){
files.add(file);
}
}
return files;
}
}