Skip to content
This repository has been archived by the owner on May 1, 2023. It is now read-only.

Commit

Permalink
Added a way to provide the database files to the DatabasePeerManager …
Browse files Browse the repository at this point in the history
…module.
  • Loading branch information
jferlisi committed Mar 12, 2015
1 parent 7a2d418 commit e5ec904
Show file tree
Hide file tree
Showing 4 changed files with 86 additions and 28 deletions.
@@ -0,0 +1,16 @@
package com.facebook.stetho.inspector.database;

import java.io.File;
import java.util.Set;

/**
* Provides a {@link Set} of database files.
*/
public interface DatabaseFilesProvider {

/**
* Returns a {@link Set} of database files.
*/
Set<File> getDatabaseFiles();

}
Expand Up @@ -6,7 +6,6 @@

import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
Expand All @@ -30,18 +29,43 @@ public class DatabasePeerManager extends ChromePeerManager {
};

private final Context mContext;
private final DatabaseFilesProvider mDatabaseFilesProvider;

public DatabasePeerManager(Context context) {
/**
* Constructs the object with a {@link DatabaseFilesProvider} that supplies the database files
* from {@link Context#databaseList()}.
*
* @param context the context
*/
public DatabasePeerManager(final Context context) {
this(context, new DatabaseFilesProvider() {
@Override public Set<File> getDatabaseFiles() {
Set<File> databaseFiles = new HashSet<File>();
for (String filename : context.databaseList())
databaseFiles.add(new File(filename));
return databaseFiles;
}
});
}

/**
* @param context the context
* @param mDatabaseFilesProvider a database file name provider, can be null
*/
public DatabasePeerManager(Context context,
DatabaseFilesProvider mDatabaseFilesProvider) {
mContext = context;
this.mDatabaseFilesProvider = mDatabaseFilesProvider;
setListener(mPeerRegistrationListener);
}

private void bootstrapNewPeer(JsonRpcPeer peer) {
Iterable<String> tidiedList = tidyDatabaseList(mContext.databaseList());
for (String databaseName : tidiedList) {
Set<File> potentialDatabaseFiles = mDatabaseFilesProvider.getDatabaseFiles();
Iterable<File> tidiedList = tidyDatabaseList(potentialDatabaseFiles);
for (File database : tidiedList) {
Database.DatabaseObject databaseParams = new Database.DatabaseObject();
databaseParams.id = databaseName;
databaseParams.name = databaseName;
databaseParams.id = database.getPath();
databaseParams.name = database.getName();
databaseParams.domain = mContext.getPackageName();
databaseParams.version = "N/A";
Database.AddDatabaseEvent eventParams = new Database.AddDatabaseEvent();
Expand All @@ -56,17 +80,17 @@ private void bootstrapNewPeer(JsonRpcPeer peer) {
* that this only removes the database if it is true that it shadows another database lacking
* the uninteresting suffix.
*
* @param databaseFilenames Raw list of database filenames.
* @param databaseFiles Raw list of database files.
* @return Tidied list with shadow databases removed.
*/
// @VisibleForTesting
static List<String> tidyDatabaseList(String[] databaseFilenames) {
Set<String> originalAsSet = new HashSet<String>(Arrays.asList(databaseFilenames));
List<String> tidiedList = new ArrayList<String>();
for (String databaseFilename : databaseFilenames) {
static List<File> tidyDatabaseList(Set<File> databaseFiles) {
List<File> tidiedList = new ArrayList<File>();
for (File databaseFile : databaseFiles) {
String databaseFilename = databaseFile.getPath();
String sansSuffix = removeSuffix(databaseFilename, UNINTERESTING_FILENAME_SUFFIXES);
if (sansSuffix.equals(databaseFilename) || !originalAsSet.contains(sansSuffix)) {
tidiedList.add(databaseFilename);
if (sansSuffix.equals(databaseFilename) || !databaseFiles.contains(new File(sansSuffix))) {
tidiedList.add(databaseFile);
}
}
return tidiedList;
Expand Down
Expand Up @@ -2,6 +2,7 @@

package com.facebook.stetho.inspector.protocol.module;

import com.facebook.stetho.inspector.database.DatabaseFilesProvider;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
Expand Down Expand Up @@ -38,11 +39,24 @@ public class Database implements ChromeDevtoolsDomain {
private final DatabasePeerManager mDatabasePeerManager;
private final ObjectMapper mObjectMapper;

/**
* Constructs the object with the default {@link DatabasePeerManager}.
* @param context the context
*/
public Database(Context context) {
mDatabasePeerManager = new DatabasePeerManager(context);
mObjectMapper = new ObjectMapper();
}

/**
* @param context the context
* @param databaseFilesProvider a database files provider, can be null
*/
public Database(Context context, DatabaseFilesProvider databaseFilesProvider) {
mDatabasePeerManager = new DatabasePeerManager(context, databaseFilesProvider);
mObjectMapper = new ObjectMapper();
}

@ChromeDevtoolsMethod
public void enable(JsonRpcPeer peer, JSONObject params) {
mDatabasePeerManager.addPeer(peer);
Expand Down
Expand Up @@ -2,28 +2,32 @@

package com.facebook.stetho.inspector.database;

import java.io.File;
import java.util.HashSet;
import java.util.List;

import java.util.Set;
import org.junit.Test;

import static org.junit.Assert.assertArrayEquals;

public class DatabasePeerManagerTest {
@Test
public void testTidyDatabaseList() {
String[] databases = {
"foo.db", "foo.db-journal",
"bar.db", "bar.db-journal", "bar.db-uid",
"baz.db", "baz.db-somethingelse",
"dangling.db-journal",
};
String[] expected = {
"foo.db",
"bar.db",
"baz.db", "baz.db-somethingelse",
"dangling.db-journal",
};
List<String> tidied = DatabasePeerManager.tidyDatabaseList(databases);
assertArrayEquals(expected, tidied.toArray());
Set<File> databases = new HashSet<File>();
databases.add(new File("foo.db"));
databases.add(new File("foo.db-journal"));
databases.add(new File("bar.db"));
databases.add(new File("bar.db-journal"));
databases.add(new File("bar.db-uid"));
databases.add(new File("baz.db"));
databases.add(new File("baz.db-somethingelse"));
databases.add(new File("dangling.db-journal"));

File[] expected = {
new File("foo.db"), new File("bar.db"), new File("baz.db"),
new File("baz.db-somethingelse"), new File("dangling.db-journal")
};
List<File> tidied = DatabasePeerManager.tidyDatabaseList(databases);
assertArrayEquals(expected, tidied.toArray());
}
}

0 comments on commit e5ec904

Please sign in to comment.