com.google.android.stardroid.data.AsciiProtoRewriter.java Source code

Java tutorial

Introduction

Here is the source code for com.google.android.stardroid.data.AsciiProtoRewriter.java

Source

// Copyright 2010 Google Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package com.google.android.stardroid.data;

import com.google.android.stardroid.R;
import com.google.common.io.Closeables;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.lang.reflect.Field;

/**
 * Runs through the ascii protocol buffers and replaces all R.string.<constant>
 * strings with the true int values.
 *
 * @author Brent Bryan
 */
public class AsciiProtoRewriter {

    // No instances
    private AsciiProtoRewriter() {
    }

    private static class MissingStringException extends Exception {
        public MissingStringException(String missingName) {
            super("Missing object name: " + missingName);
        }
    }

    private static int getString(String s) throws MissingStringException {
        try {
            // Hackily extract the name from "R.string.thename"
            String name = s.substring(10, s.length() - 1);
            Field f = R.string.class.getDeclaredField(name);
            // System.out.println("replacing: " + s);
            return f.getInt(null);
        } catch (SecurityException e) {
            throw new MissingStringException(s);
        } catch (NoSuchFieldException e) {
            throw new MissingStringException(s);
        } catch (IllegalAccessException e) {
            throw new MissingStringException(s);
        }
    }

    public static void main(String[] args) throws IOException {
        if (args.length != 1 || !args[0].endsWith("_R.ascii")) {
            System.out.println("Usage: AsciiToBinaryProtoWriter <inputprefix>_R.ascii");
            System.exit(1);
        }

        String inputFile = args[0];
        String outputFile = args[0].replaceAll("_R.ascii", ".ascii");

        BufferedReader in = null;
        PrintWriter out = null;
        try {
            in = new BufferedReader(new FileReader(inputFile));
            out = new PrintWriter(new FileWriter(outputFile));

            String s;
            while ((s = in.readLine()) != null) {
                if (s.contains("REMOVE")) {
                    try {
                        s = s.replaceAll("REMOVE_", "");
                        String[] tokens = s.split("\\s+");
                        for (String token : tokens) {
                            if (token.contains("R.string")) {
                                int value = getString(token);
                                s = s.replaceAll(token, "" + value);
                            }
                        }
                    } catch (MissingStringException m) {
                        System.out.println("Warning: " + m.getMessage() + ".  Skipping...");
                        continue;
                    }
                }
                out.println(s);
            }
        } finally {
            Closeables.closeQuietly(in);
            Closeables.close(out, false);
        }
    }
}