У меня есть процесс, который управляет шаблонами дерева папок (каждый с сотнями папок), примененными к нескольким сотням экземпляров, как часть системы доставки документов.Когда шаблон изменяется, процесс применяет обновления к каждому экземпляру, а если папка удаляется из шаблона, соответствующие папки экземпляров не нравятся (все родители удаляются) и перемещаются в глобальную архивную папку (добавляется родительский архив),Для каждой папки каждый связанный документ также не связан (этот конкретный родитель удален).
Для этого мне нужно выполнить несколько сотен запросов на получение списка (файлов) папок, которые я архивируюПоэтому для повышения производительности я хочу перейти на пакетный запрос.Ответы списка будут перехвачены обратным вызовом onSuccess и собраны в карте fileId -> children.
Однако я не нашел никакой информации, которую можно использовать в методе обратного вызова, чтобы сопоставить результат списка ссоответствующий запрос, ни в FileList (который содержит только информацию о результате), ни в responseHeaders.Я попытался добавить свой собственный заголовок «content-id», но не нашел его в ответе (вам нужно будет предоставить собственный метод getDriveService для создания клиента Drive API):
public void unlinkChildren(Set<String> parentIds) throws Exception {
BatchRequest batch = getDriveService().batch();
// get the children of every parent
FileListCallbackHandler fileListCallback = new FileListCallbackHandler();
for (String parentId : parentIds) {
final String query = String.format("trashed=false and '%s' in parents", parentId);
Drive.Files.List list = getDriveService().files().list().setQ(query);
list.getRequestHeaders().set("content-id", parentId);
list.queue(batch, fileListCallback);
if (batch.size() == 100) {
batch.execute();
}
}
if (batch.size() > 0) {
batch.execute();
}
Map<String, List<File>> childrenMap = fileListCallback.getSearchResultMap();
// do stuff
}
public class FileListCallbackHandler extends JsonBatchCallback<FileList> {
private Map<String, List<File>> searchResultMap = new HashMap<>();
@Override
public void onSuccess(FileList t, HttpHeaders responseHeaders) throws IOException {
String parentId = responseHeaders.getFirstHeaderStringValue("Content-ID"); // this is null >:(
searchResultMap.put(parentId, t.getFiles());
}
@Override
public void onFailure(GoogleJsonError e, HttpHeaders responseHeaders) throws IOException {
logger.error("Error Message: {}", e.getMessage());
}
public Map<String, List<File>> getSearchResultMap() {
return searchResultMap;
}
}
IЗащищенный заголовок Content-ID содержал добавленное мной значение, но в ответе такого заголовка не было.Все, что я получил, было
{cache-control=[private, max-age=0], content-length=[2024], content-type=[application/json; charset=UTF-8], date=[Mon, 28 Jan 2019 17:42:52 GMT], expires=[Mon, 28 Jan 2019 17:42:52 GMT]}
Есть ли какие-либо способы получить соответствие между запросами и ответами?