001: /* ===========================================================================
002: * $RCSfile: RGconvImpl.java,v $
003: * ===========================================================================
004: *
005: * RetroGuard -- an obfuscation package for Java classfiles.
006: *
007: * Copyright (c) 1998-2006 Mark Welsh (markw@retrologic.com)
008: *
009: * This program can be redistributed and/or modified under the terms of the
010: * Version 2 of the GNU General Public License as published by the Free
011: * Software Foundation.
012: *
013: * This program is distributed in the hope that it will be useful,
014: * but WITHOUT ANY WARRANTY; without even the implied warranty of
015: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
016: * GNU General Public License for more details.
017: *
018: */
019:
020: package COM.rl.obf;
021:
022: import java.io.*;
023: import java.util.*;
024: import COM.rl.obf.patch.*;
025:
026: /**
027: * Main class for conversion utility. Converts from normal to obfuscated
028: * class filenames.
029: *
030: * @author Mark Welsh
031: */
032: public class RGconvImpl {
033: // Class Methods ---------------------------------------------------------
034: /**
035: * Main entry point for the converter.
036: *
037: * @param rgsFilename log-file name from the obfuscation.
038: * @param inListFilename list of unobfuscated class files
039: * @param outListFilename file for list of obfuscated class files
040: */
041: public static void convert(String rgsFilename,
042: String inListFilename, String outListFilename)
043: throws Exception {
044: File rgsFile = rgsFilename == null ? null : new File(
045: rgsFilename);
046: File inListFile = inListFilename == null ? null : new File(
047: inListFilename);
048: File outListFile = outListFilename == null ? null : new File(
049: outListFilename);
050:
051: // Script/log file must exist and be readable
052: if (rgsFile == null) {
053: throw new IllegalArgumentException("No log file specified.");
054: }
055: if (!rgsFile.exists()) {
056: throw new IllegalArgumentException(
057: "Log file specified does not exist.");
058: }
059: if (!rgsFile.canRead()) {
060: throw new IllegalArgumentException(
061: "Log file specified exists but cannot be read.");
062: }
063:
064: // Input list file must exist and be readable
065: if (inListFile != null && !inListFile.exists()) {
066: throw new IllegalArgumentException(
067: "Input list specified does not exist.");
068: }
069: if (inListFile != null && !inListFile.canRead()) {
070: throw new IllegalArgumentException(
071: "Input list specified exists but cannot be read.");
072: }
073:
074: // Output list file must be writable if it exists
075: if (outListFile != null && outListFile.exists()
076: && !outListFile.canWrite()) {
077: throw new IllegalArgumentException(
078: "Output list file cannot be written to.");
079: }
080:
081: // Call the main entry point
082: RGconvImpl.convert(rgsFile, inListFile, outListFile);
083: }
084:
085: /**
086: * Main entry point for the converter.
087: *
088: * @param rgsFile log-file from the obfuscation.
089: * @param inListFile list of unobfuscated class files
090: * @param outListFile file for list of obfuscated class files
091: */
092: public static void convert(File rgsFile, File inListFile,
093: File outListFile) throws Exception {
094: // Create the name mapping database, using the log file
095: ClassDB db = new ClassDB(rgsFile);
096:
097: // Convert the list file to obfuscated form
098: Vector output = db.toObfForConv(inListFile);
099:
100: // Write the output file
101: PrintStream out = null;
102: try {
103: out = outListFile == null ? System.out : new PrintStream(
104: new BufferedOutputStream(new FileOutputStream(
105: outListFile)));
106: for (Enumeration enm = output.elements(); enm
107: .hasMoreElements();) {
108: out.println((String) enm.nextElement());
109: }
110: out.flush();
111: } finally {
112: if (out != null) {
113: out.close();
114: }
115: }
116: }
117: }
|