Home | History | Annotate | Download | only in class2greylist
      1 package com.android.class2greylist;
      2 
      3 import java.io.File;
      4 import java.io.FileNotFoundException;
      5 import java.io.FileOutputStream;
      6 import java.io.PrintStream;
      7 import java.util.ArrayList;
      8 import java.util.Comparator;
      9 import java.util.HashMap;
     10 import java.util.HashSet;
     11 import java.util.List;
     12 import java.util.Map;
     13 import java.util.Set;
     14 import java.util.stream.Collectors;
     15 
     16 public class AnnotationPropertyWriter implements AnnotationConsumer {
     17 
     18     private final PrintStream mOutput;
     19     private final List<Map<String, String>> mContents;
     20     private final Set<String> mColumns;
     21 
     22     public AnnotationPropertyWriter(String csvFile) throws FileNotFoundException {
     23         mOutput = new PrintStream(new FileOutputStream(new File(csvFile)));
     24         mContents = new ArrayList<>();
     25         mColumns = new HashSet<>();
     26     }
     27 
     28     public void consume(String apiSignature, Map<String, String> annotationProperties,
     29             Set<String> parsedFlags) {
     30         // Clone properties map.
     31         Map<String, String> contents = new HashMap(annotationProperties);
     32 
     33         // Append the member signature.
     34         contents.put("signature", apiSignature);
     35 
     36         // Store data.
     37         mColumns.addAll(contents.keySet());
     38         mContents.add(contents);
     39     }
     40 
     41     public void close() {
     42         // Sort columns by name and print header row.
     43         List<String> columns = new ArrayList<>(mColumns);
     44         columns.sort(Comparator.naturalOrder());
     45         mOutput.println(columns.stream().collect(Collectors.joining(",")));
     46 
     47         // Sort contents according to columns and print.
     48         for (Map<String, String> row : mContents) {
     49             mOutput.println(columns.stream().map(column -> row.getOrDefault(column, ""))
     50                     .collect(Collectors.joining(",")));
     51         }
     52 
     53         // Close output.
     54         mOutput.close();
     55     }
     56 }
     57