//{HEADER
/**
* This class is part of jnex 'Nexirius Application Framework for Java'
*
* Copyright (C) Nexirius GmbH, CH-4450 Sissach, Switzerland (www.nexirius.ch)
*
* <p>This library is free software; you can redistribute it and/or<br>
* modify it under the terms of the GNU Lesser General Public<br>
* License as published by the Free Software Foundation; either<br>
* version 2.1 of the License, or (at your option) any later version.</p>
*
* <p>This library is distributed in the hope that it will be useful,<br>
* but WITHOUT ANY WARRANTY; without even the implied warranty of<br>
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU<br>
* Lesser General Public License for more details.</p>
*
* <p>You should have received a copy of the GNU Lesser General Public<br>
* License along with this library; if not, write to the Free Software<br>
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA</p>
* </blockquote>
*
* <p>
* Nexirius GmbH, hereby disclaims all copyright interest in<br>
* the library jnex' 'Nexirius Application Framework for Java' written<br>
* by Marcel Baumann.</p>
*/
//}HEADER
package com.nexirius.tools;
import com.nexirius.util.StringVector;
import com.nexirius.util.XFile;
import com.nexirius.util.XString;
public class Replacer {
XFile m_root;
StringVector m_files;
String m_pattern[];
String m_replace[];
public int goCopy(String dirname, String targetDir, String pat[], String rep[], String extension)
throws Exception {
if (!dirname.endsWith(XFile.separator)) {
dirname = dirname + XFile.separator;
}
if (!targetDir.endsWith(XFile.separator)) {
targetDir = targetDir + XFile.separator;
}
XFile target = new XFile(targetDir);
target.mkdirs();
m_root = new XFile(dirname);
m_files = m_root.getFiles(true);
for (String fname = m_files.firstItem(); fname != null; fname = m_files.nextItem()) {
XFile newfile = new XFile(targetDir, fname);
newfile.mkdirs();
newfile.delete();
newfile.createFrom(new XFile(dirname, fname), false);
}
return go(targetDir, pat, rep, extension);
}
public int go(String dirname, String pat[], String rep[], String extension)
throws Exception {
m_pattern = pat;
m_replace = rep;
int ret = 0;
int fcount = 0;
m_root = new XFile(dirname);
m_files = m_root.getFiles(true);
for (String fname = m_files.firstItem(); fname != null; fname = m_files.nextItem()) {
if (extension != null && fname.endsWith(extension)) {
int replacements = 0;
//System.out.println("JAVA FILE: " + fname);
++fcount;
XFile file = new XFile(dirname, fname);
StringVector sv = file.getTextLines();
StringVector svout = new StringVector();
for (String s = sv.firstItem(); s != null; s = sv.nextItem()) {
XString xs = new XString(s);
int reps = 0;
for (int i = 0; i < m_pattern.length; ++i) {
reps += xs.replace(m_pattern[i], m_replace[i]);
}
if (reps > 0) {
replacements += reps;
//System.out.println("BEFORE:" + s);
//System.out.println("AFTER :" + xs.toString());
}
svout.append(xs.toString());
}
if (replacements > 0) {
++ret;
System.out.println("WRITING (" + replacements + ") : " + fname);
file.writeTextLines(svout);
}
} else {
//System.out.println(fname);
}
}
System.out.println(ret + " of " + fcount + " files changed.");
return ret;
}
public static void main(String argv[]) {
Replacer r = new Replacer();
if (argv.length < 3) {
System.err.println("OR: java Replacer .extension Directory pat1 rep1 pat2 rep2 ...");
return;
}
String extension = extension = argv[0];
String dir = argv[1];
int pn = (argv.length - 2) / 2;
String pat[] = new String[pn];
String rep[] = new String[pn];
for (int i = 0; i < pn; ++i) {
pat[i] = argv[2 + 2 * i];
rep[i] = argv[3 + 2 * i];
}
try {
r.go(dir, pat, rep, extension);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}