Upload working

This commit is contained in:
GEXCE
2017-11-08 17:38:10 +01:00
parent bb74e36db7
commit 338b52911f
5 changed files with 129 additions and 14 deletions
@@ -16,6 +16,7 @@ import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import org.apache.commons.io.FileUtils;
import org.slf4j.Logger;
@@ -44,6 +45,7 @@ import com.bayer.edam.migration.adam.ClassificationList;
import com.bayer.edam.migration.adam.EntityId;
import com.bayer.edam.migration.adam.Token;
import com.bayer.edam.migration.adam.UploadClassification;
import com.bayer.edam.migration.adam.UploadFileRecord;
import com.bayer.edam.migration.adam.UploadRecord;
import com.bayer.edam.migration.adam.UploadRecord.WriteClassification;
import com.bayer.edam.migration.adam.UploadResult;
@@ -163,6 +165,14 @@ public class MamMigrationSelective implements CommandLineRunner {
postToAdam(entry);
}
while (openUploads.size() > 0) {
log.debug("Sleeping...");
TimeUnit.SECONDS.sleep(10); // XXX
log.debug("Checking back on open uploads");
attachOpenUploads();
}
invalidateAdamToken();
}
@@ -361,7 +371,7 @@ public class MamMigrationSelective implements CommandLineRunner {
}
if (entry.creationDate != null)
record.addField("byr_ah_deliveryDate", isoDate.format(entry.creationDate));
record.addField("byr_ah_releaseDate", isoDate.format(entry.creationDate));
if (entry.metaData.get("photographer") != null)
record.addField("byr_ah_photographer", entry.metaData.get("photographer"));
@@ -456,10 +466,9 @@ public class MamMigrationSelective implements CommandLineRunner {
URI location = restTemplate.postForLocation(Definitions.adamHost + "/records", httpEntity, UploadRecord.class);
log.info("RESULT Entry " + entry.id + " migrated to record " + location);
// XXX
uploadFilesForEntry(entry, location);
// TODO process file upload errors
// TODO process file upload errors(?)
log.info("FINAL " + entry.id + fieldSeparator + location.toString() + fieldSeparator + entryJson);
}
@@ -526,6 +535,7 @@ public class MamMigrationSelective implements CommandLineRunner {
}
// Instead of downloading from MAM, take the pre-downloaded files from the harddrive
boolean isMaster = true;
for (File file : filesForUpload) {
if (file.exists()) {
if (file.length() < 4000000000L) {
@@ -538,13 +548,22 @@ public class MamMigrationSelective implements CommandLineRunner {
new HttpEntity<MultiValueMap<String, Object>>(parameters, adamUploadHeaders), UploadResult.class).getBody();
if (result.token != null) {
// TODO
log.debug("Token: " + result.token);
log.debug("Storing upload token " + result.token);
UploadReference reference = new UploadReference();
reference.targetRecord = recordLocation;
// reference.isMaster = isMaster;
reference.token = result.token;
reference.filename = file.getName();
openUploads.add(reference);
}
else if (result.uri != null) {
log.debug("Storing upload reference URI " + result.uri);
openUploads.add(new UploadReference(recordLocation, result.uri));
UploadReference reference = new UploadReference();
reference.targetRecord = recordLocation;
// reference.isMaster = isMaster;
reference.uri = result.uri;
reference.filename = file.getName();
openUploads.add(reference);
}
else {
log.error("No token/URI after upload!");
@@ -560,9 +579,49 @@ public class MamMigrationSelective implements CommandLineRunner {
else {
log.error("Could not find file on disk " + file.getAbsolutePath());
}
isMaster = false;
}
// attach uploaded files to records where possible
attachOpenUploads();
}
private void attachOpenUploads() {
List<UploadReference> processedReferences = new ArrayList<UploadReference>();
for (UploadReference reference : openUploads) {
if (reference.token != null) {
UploadFileRecord fileRecord = new UploadFileRecord();
fileRecord.addFile(reference.token, reference.filename);
log.debug("Attach uploaded file to " + reference.targetRecord);
HttpEntity<UploadFileRecord> httpEntity = new HttpEntity<UploadFileRecord>(fileRecord, adamHeaders);
restTemplate.exchange(Definitions.adamHost + reference.targetRecord, HttpMethod.PUT, httpEntity, UploadFileRecord.class);
processedReferences.add(reference);
}
else {
log.debug("Checking status of upload " + reference.filename + " at " + reference.uri);
UploadResult result = restTemplate.exchange(Definitions.adamHost + reference.uri, HttpMethod.GET, adamHeadersEntity, UploadResult.class).getBody();
log.debug("Result: " + result);
if (result.token != null) {
log.debug("Storing upload token " + result.token);
reference.uri = null;
reference.token = result.token;
}
else if (result.status != null) {
if (result.status.equals("Error")) {
log.error("System could not process file " + reference.filename + " for " + reference.targetRecord);
processedReferences.add(reference);
}
}
}
}
openUploads.removeAll(processedReferences);
}
private File getFileForEntry(Download download, Long id) throws IOException {