in android/src/main/java/com/facebook/flipper/plugins/databases/DatabasesManager.java [64:243]
private void listenForCommands(FlipperConnection connection) {
connection.receive(
DATABASE_LIST_COMMAND,
new FlipperReceiver() {
@Override
public void onReceive(FlipperObject params, FlipperResponder responder) {
int databaseId = 1;
mDatabaseDescriptorHolderSparseArray.clear();
mDatabaseDescriptorHolderSet.clear();
for (DatabaseDriver<?> databaseDriver : mDatabaseDriverList) {
List<? extends DatabaseDescriptor> databaseDescriptorList =
databaseDriver.getDatabases();
for (DatabaseDescriptor databaseDescriptor : databaseDescriptorList) {
int id = databaseId++;
DatabaseDescriptorHolder databaseDescriptorHolder =
new DatabaseDescriptorHolder(id, databaseDriver, databaseDescriptor);
mDatabaseDescriptorHolderSparseArray.put(id, databaseDescriptorHolder);
mDatabaseDescriptorHolderSet.add(databaseDescriptorHolder);
}
}
FlipperArray result =
ObjectMapper.databaseListToFlipperArray(mDatabaseDescriptorHolderSet);
responder.success(result);
}
});
connection.receive(
GET_TABLE_DATA_COMMAND,
new FlipperReceiver() {
@Override
public void onReceive(FlipperObject params, FlipperResponder responder) {
GetTableDataRequest getTableDataRequest =
ObjectMapper.flipperObjectToGetTableDataRequest(params);
if (getTableDataRequest == null) {
responder.error(
ObjectMapper.toErrorFlipperObject(
DatabasesErrorCodes.ERROR_INVALID_REQUEST,
DatabasesErrorCodes.ERROR_INVALID_REQUEST_MESSAGE));
} else {
DatabaseDescriptorHolder databaseDescriptorHolder =
mDatabaseDescriptorHolderSparseArray.get(getTableDataRequest.databaseId);
if (databaseDescriptorHolder == null) {
responder.error(
ObjectMapper.toErrorFlipperObject(
DatabasesErrorCodes.ERROR_DATABASE_INVALID,
DatabasesErrorCodes.ERROR_DATABASE_INVALID_MESSAGE));
} else {
try {
DatabaseGetTableDataResponse databaseGetTableDataResponse =
databaseDescriptorHolder.databaseDriver.getTableData(
databaseDescriptorHolder.databaseDescriptor,
getTableDataRequest.table,
getTableDataRequest.order,
getTableDataRequest.reverse,
getTableDataRequest.start,
getTableDataRequest.count);
responder.success(
ObjectMapper.databaseGetTableDataReponseToFlipperObject(
databaseGetTableDataResponse));
} catch (Exception e) {
responder.error(
ObjectMapper.toErrorFlipperObject(
DatabasesErrorCodes.ERROR_SQL_EXECUTION_EXCEPTION, e.getMessage()));
}
}
}
}
});
connection.receive(
GET_TABLE_STRUCTURE_COMMAND,
new FlipperReceiver() {
@Override
public void onReceive(FlipperObject params, FlipperResponder responder) {
GetTableStructureRequest getTableStructureRequest =
ObjectMapper.flipperObjectToGetTableStructureRequest(params);
if (getTableStructureRequest == null) {
responder.error(
ObjectMapper.toErrorFlipperObject(
DatabasesErrorCodes.ERROR_INVALID_REQUEST,
DatabasesErrorCodes.ERROR_INVALID_REQUEST_MESSAGE));
} else {
DatabaseDescriptorHolder databaseDescriptorHolder =
mDatabaseDescriptorHolderSparseArray.get(getTableStructureRequest.databaseId);
if (databaseDescriptorHolder == null) {
responder.error(
ObjectMapper.toErrorFlipperObject(
DatabasesErrorCodes.ERROR_DATABASE_INVALID,
DatabasesErrorCodes.ERROR_DATABASE_INVALID_MESSAGE));
} else {
try {
DatabaseGetTableStructureResponse databaseGetTableStructureResponse =
databaseDescriptorHolder.databaseDriver.getTableStructure(
databaseDescriptorHolder.databaseDescriptor,
getTableStructureRequest.table);
responder.success(
ObjectMapper.databaseGetTableStructureResponseToFlipperObject(
databaseGetTableStructureResponse));
} catch (Exception e) {
responder.error(
ObjectMapper.toErrorFlipperObject(
DatabasesErrorCodes.ERROR_SQL_EXECUTION_EXCEPTION, e.getMessage()));
}
}
}
}
});
connection.receive(
GET_TABLE_INFO_COMMAND,
new FlipperReceiver() {
@Override
public void onReceive(FlipperObject params, FlipperResponder responder) {
GetTableInfoRequest getTableInfoRequest =
ObjectMapper.flipperObjectToGetTableInfoRequest(params);
if (getTableInfoRequest == null) {
responder.error(
ObjectMapper.toErrorFlipperObject(
DatabasesErrorCodes.ERROR_INVALID_REQUEST,
DatabasesErrorCodes.ERROR_INVALID_REQUEST_MESSAGE));
} else {
DatabaseDescriptorHolder databaseDescriptorHolder =
mDatabaseDescriptorHolderSparseArray.get(getTableInfoRequest.databaseId);
if (databaseDescriptorHolder == null) {
responder.error(
ObjectMapper.toErrorFlipperObject(
DatabasesErrorCodes.ERROR_DATABASE_INVALID,
DatabasesErrorCodes.ERROR_DATABASE_INVALID_MESSAGE));
} else {
try {
DatabaseGetTableInfoResponse databaseGetTableInfoResponse =
databaseDescriptorHolder.databaseDriver.getTableInfo(
databaseDescriptorHolder.databaseDescriptor, getTableInfoRequest.table);
responder.success(
ObjectMapper.databaseGetTableInfoResponseToFlipperObject(
databaseGetTableInfoResponse));
} catch (Exception e) {
responder.error(
ObjectMapper.toErrorFlipperObject(
DatabasesErrorCodes.ERROR_SQL_EXECUTION_EXCEPTION, e.getMessage()));
}
}
}
}
});
connection.receive(
EXECUTE_COMMAND,
new FlipperReceiver() {
@Override
public void onReceive(FlipperObject params, FlipperResponder responder) {
ExecuteSqlRequest executeSqlRequest =
ObjectMapper.flipperObjectToExecuteSqlRequest(params);
if (executeSqlRequest == null) {
responder.error(
ObjectMapper.toErrorFlipperObject(
DatabasesErrorCodes.ERROR_INVALID_REQUEST,
DatabasesErrorCodes.ERROR_INVALID_REQUEST_MESSAGE));
} else {
DatabaseDescriptorHolder databaseDescriptorHolder =
mDatabaseDescriptorHolderSparseArray.get(executeSqlRequest.databaseId);
if (databaseDescriptorHolder == null) {
responder.error(
ObjectMapper.toErrorFlipperObject(
DatabasesErrorCodes.ERROR_DATABASE_INVALID,
DatabasesErrorCodes.ERROR_DATABASE_INVALID_MESSAGE));
} else {
try {
DatabaseExecuteSqlResponse databaseExecuteSqlResponse =
databaseDescriptorHolder.databaseDriver.executeSQL(
databaseDescriptorHolder.databaseDescriptor, executeSqlRequest.value);
responder.success(
ObjectMapper.databaseExecuteSqlResponseToFlipperObject(
databaseExecuteSqlResponse));
} catch (Exception e) {
responder.error(
ObjectMapper.toErrorFlipperObject(
DatabasesErrorCodes.ERROR_SQL_EXECUTION_EXCEPTION, e.getMessage()));
}
}
}
}
});
}