blob: 9f334677c3257b80694c090df7ba967896591af7 [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.HashMap;
import java.util.Map;
public class FileWritingGreylistConsumer implements GreylistConsumer {
private final Status mStatus;
private final Map<Integer, PrintStream> mSdkToPrintStreamMap;
private final PrintStream mWhitelistStream;
private static PrintStream openFile(String filename) throws FileNotFoundException {
if (filename == null) {
return null;
}
return new PrintStream(new FileOutputStream(new File(filename)));
}
private static Map<Integer, PrintStream> openFiles(
Map<Integer, String> filenames) throws FileNotFoundException {
Map<Integer, PrintStream> streams = new HashMap<>();
for (Map.Entry<Integer, String> entry : filenames.entrySet()) {
streams.put(entry.getKey(), openFile(entry.getValue()));
}
return streams;
}
public FileWritingGreylistConsumer(Status status, Map<Integer, String> sdkToFilenameMap,
String whitelistFile) throws FileNotFoundException {
mStatus = status;
mSdkToPrintStreamMap = openFiles(sdkToFilenameMap);
mWhitelistStream = openFile(whitelistFile);
}
@Override
public void greylistEntry(String signature, Integer maxTargetSdk) {
PrintStream p = mSdkToPrintStreamMap.get(maxTargetSdk);
if (p == null) {
mStatus.error("No output file for signature %s with maxTargetSdk of %d", signature,
maxTargetSdk == null ? "<absent>" : maxTargetSdk.toString());
return;
}
p.println(signature);
}
@Override
public void whitelistEntry(String signature) {
if (mWhitelistStream != null) {
mWhitelistStream.println(signature);
}
}
@Override
public void close() {
for (PrintStream p : mSdkToPrintStreamMap.values()) {
p.close();
}
if (mWhitelistStream != null) {
mWhitelistStream.close();
}
}
}