blob: aacd9639cd820000d0ebe2ad0fdba6195d0dea32 [file] [log] [blame]
package com.android.class2greylist;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
public class AnnotationPropertyWriter implements AnnotationConsumer {
private final PrintStream mOutput;
private final List<Map<String, String>> mContents;
private final Set<String> mColumns;
public AnnotationPropertyWriter(String csvFile) throws FileNotFoundException {
mOutput = new PrintStream(new FileOutputStream(new File(csvFile)));
mContents = new ArrayList<>();
mColumns = new HashSet<>();
}
public void consume(String apiSignature, Map<String, String> annotationProperties,
Set<String> parsedFlags) {
// Clone properties map.
Map<String, String> contents = new HashMap(annotationProperties);
// Append the member signature.
contents.put("signature", apiSignature);
// Store data.
mColumns.addAll(contents.keySet());
mContents.add(contents);
}
public void close() {
// Sort columns by name and print header row.
List<String> columns = new ArrayList<>(mColumns);
columns.sort(Comparator.naturalOrder());
mOutput.println(columns.stream().collect(Collectors.joining(",")));
// Sort contents according to columns and print.
for (Map<String, String> row : mContents) {
mOutput.println(columns.stream().map(column -> row.getOrDefault(column, ""))
.collect(Collectors.joining(",")));
}
// Close output.
mOutput.close();
}
}