/* * 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(); } } }