blob: 3dfaa6fe322cc42cc221e9864e6e286966c0ce93 [file] [log] [blame]
/*
* Copyright (C) 2012 The Android Open Source Project
*
* 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.android.sdklib.internal.build;
import com.android.SdkConstants;
import com.android.sdklib.internal.build.SymbolLoader.SymbolEntry;
import com.google.common.base.Charsets;
import com.google.common.base.Splitter;
import com.google.common.collect.HashBasedTable;
import com.google.common.collect.Lists;
import com.google.common.collect.Table;
import com.google.common.io.Closer;
import com.google.common.io.Files;
import java.io.BufferedWriter;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* A class to write R.java classes based on data read from text symbol files generated by
* aapt with the --output-text-symbols option.
*
* @deprecated Use Android-Builder instead
*/
@Deprecated
public class SymbolWriter {
private final String mOutFolder;
private final String mPackageName;
private final List<SymbolLoader> mSymbols = Lists.newArrayList();
private final SymbolLoader mValues;
public SymbolWriter(String outFolder, String packageName, SymbolLoader values) {
mOutFolder = outFolder;
mPackageName = packageName;
mValues = values;
}
public void addSymbolsToWrite(SymbolLoader symbols) {
mSymbols.add(symbols);
}
private Table<String, String, SymbolEntry> getAllSymbols() {
Table<String, String, SymbolEntry> symbols = HashBasedTable.create();
for (SymbolLoader symbolLoader : mSymbols) {
symbols.putAll(symbolLoader.getSymbols());
}
return symbols;
}
public void write() throws IOException {
Splitter splitter = Splitter.on('.');
Iterable<String> folders = splitter.split(mPackageName);
File file = new File(mOutFolder);
for (String folder : folders) {
file = new File(file, folder);
}
file.mkdirs();
file = new File(file, SdkConstants.FN_RESOURCE_CLASS);
Closer closer = Closer.create();
try {
BufferedWriter writer = closer.register(Files.newWriter(file, Charsets.UTF_8));
writer.write("/* AUTO-GENERATED FILE. DO NOT MODIFY.\n");
writer.write(" *\n");
writer.write(" * This class was automatically generated by the\n");
writer.write(" * aapt tool from the resource data it found. It\n");
writer.write(" * should not be modified by hand.\n");
writer.write(" */\n");
writer.write("package ");
writer.write(mPackageName);
writer.write(";\n\npublic final class R {\n");
Table<String, String, SymbolEntry> symbols = getAllSymbols();
Table<String, String, SymbolEntry> values = mValues.getSymbols();
Set<String> rowSet = symbols.rowKeySet();
List<String> rowList = Lists.newArrayList(rowSet);
Collections.sort(rowList);
for (String row : rowList) {
writer.write("\tpublic static final class ");
writer.write(row);
writer.write(" {\n");
Map<String, SymbolEntry> rowMap = symbols.row(row);
Set<String> symbolSet = rowMap.keySet();
ArrayList<String> symbolList = Lists.newArrayList(symbolSet);
Collections.sort(symbolList);
for (String symbolName : symbolList) {
// get the matching SymbolEntry from the values Table.
SymbolEntry value = values.get(row, symbolName);
if (value != null) {
writer.write("\t\tpublic static final ");
writer.write(value.getType());
writer.write(" ");
writer.write(value.getName());
writer.write(" = ");
writer.write(value.getValue());
writer.write(";\n");
}
}
writer.write("\t}\n");
}
writer.write("}\n");
} catch (Throwable e) {
throw closer.rethrow(e);
} finally {
closer.close();
}
}
}