/*
* Copyright (c) 2014-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
package com.facebook.stetho.sample;
import android.content.ContentResolver;
import android.database.Cursor;
import com.facebook.stetho.dumpapp.ArgsHelper;
import com.facebook.stetho.dumpapp.DumpException;
import com.facebook.stetho.dumpapp.DumpUsageException;
import com.facebook.stetho.dumpapp.DumperContext;
import com.facebook.stetho.dumpapp.DumperPlugin;
import java.io.PrintStream;
import java.util.Iterator;
public class APODDumperPlugin implements DumperPlugin {
private static final String NAME = "apod";
private static final String CMD_LIST = "list";
private static final String CMD_CLEAR = "clear";
private static final String CMD_DELETE = "delete";
private static final String CMD_REFRESH = "refresh";
private final ContentResolver mContentResolver;
private final APODRssFetcher mAPODRssFetcher;
public APODDumperPlugin(ContentResolver contentResolver) {
mContentResolver = contentResolver;
mAPODRssFetcher = new APODRssFetcher(mContentResolver);
}
@Override
public String getName() {
return NAME;
}
@Override
public void dump(DumperContext dumpContext) throws DumpException {
PrintStream writer = dumpContext.getStdout();
Iterator<String> argsIter = dumpContext.getArgsAsList().iterator();
String command = ArgsHelper.nextOptionalArg(argsIter, null);
if (CMD_LIST.equalsIgnoreCase(command)) {
doList(writer);
} else if (CMD_DELETE.equalsIgnoreCase(command)) {
doRemove(writer, argsIter);
} else if (CMD_CLEAR.equalsIgnoreCase(command)) {
doClear(writer);
} else if (CMD_REFRESH.equalsIgnoreCase(command)) {
doRefresh(writer);
} else {
usage(writer);
if (command != null) {
throw new DumpUsageException("Unknown command: " + command);
}
}
}
private void doList(PrintStream writer) {
Cursor cursor = mContentResolver.query(
APODContract.CONTENT_URI,
null /* projection */,
null /* selection */,
null /* selectionArgs */,
APODContract.Columns._ID);
int count = 0;
while (cursor.moveToNext()) {
writer.println(String.format("Row #%d", count++));
for (int i = 0; i < cursor.getColumnCount(); ++i) {
writer.println(String.format(" %s: %s", cursor.getColumnName(i), cursor.getString(i)));
}
}
writer.println();
}
private void doRemove(PrintStream writer, Iterator<String> argsIter) throws DumpUsageException {
String rowId = ArgsHelper.nextArg(argsIter, "Expected rowId");
delete(writer, APODContract.Columns._ID + "=?", new String[] {rowId});
}
private void doClear(PrintStream writer) {
delete(writer, null, null);
}
private void doRefresh(PrintStream writer) {
mAPODRssFetcher.fetchAndStore();
writer.println("Submitted request to fetch new data");
}
private void delete(PrintStream writer, String where, String[] args) {
int result = mContentResolver.delete(APODContract.CONTENT_URI, where, args);
writer.println("Removed " + result + " rows.");
}
private static void usage(PrintStream writer) {
final String cmdName = "dumpapp " + NAME;
final String usagePrefix = "Usage: " + cmdName + " ";
writer.println(usagePrefix + "<command> [command-options]");
writer.print(usagePrefix + CMD_LIST);
writer.println();
writer.print(usagePrefix + CMD_CLEAR);
writer.println();
writer.print(usagePrefix + CMD_DELETE + " <rowId>");
writer.println();
writer.print(usagePrefix + CMD_REFRESH);
writer.println();
}
}