Mercurial > hg > LGDataverses
diff src/main/java/de/mpiwg/gazetteer/servlet/SaveResource.java @ 14:be7787c36e58 default tip
new: nofity LGSercies for deleted files
author | Zoe Hong <zhong@mpiwg-berlin.mpg.de> |
---|---|
date | Mon, 02 Nov 2015 16:41:23 +0100 |
parents | c2e2d794847f |
children |
line wrap: on
line diff
--- a/src/main/java/de/mpiwg/gazetteer/servlet/SaveResource.java Wed Sep 30 13:55:57 2015 +0200 +++ b/src/main/java/de/mpiwg/gazetteer/servlet/SaveResource.java Mon Nov 02 16:41:23 2015 +0100 @@ -35,6 +35,7 @@ import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.commons.lang.StringUtils; +import org.primefaces.json.JSONArray; import org.primefaces.json.JSONException; import org.primefaces.json.JSONObject; import org.primefaces.model.UploadedFile; @@ -94,6 +95,9 @@ protected JSONObject saveFile(UpFile upFile) { + + JSONObject jsonSavedResult= new JSONObject(); + //String datasetGlobalId = "doi:10.5072/FK2/1EWLIR"; String datasetGlobalId = params.get("datasetGlobalId"); dataset = datasetService.findByGlobalId(datasetGlobalId); @@ -107,18 +111,27 @@ InputStream fileStream = new ByteArrayInputStream(fileContent.getBytes(StandardCharsets.UTF_8)); dFileList = ingestService.createDataFiles(workingVersion, fileStream, fileName, contentType); + } catch (IOException ioex) { logger.warning("Failed to process and/or save the file " + upFile.getFileName() + "; " + ioex.getMessage()); - + + try { + jsonSavedResult.put("status", "error"); + jsonSavedResult.put("message", "Failed to process and/or save the file " + upFile.getFileName() + "; " + ioex.getMessage()); + } catch (JSONException e) { + + e.printStackTrace(); + } + return jsonSavedResult; } - + // get file list in the dataset first (before add file), in order to compare with the list after saving, to get saved fileId + List<DataFile> beforeAdding = dataset.getFiles(); - ingestService.addFiles(workingVersion, dFileList); - - JSONObject jsonSavedResult= new JSONObject(); - + ingestService.addFiles(workingVersion, dFileList); + + // Use the API to save the dataset: Command<Dataset> cmd; try { @@ -164,10 +177,14 @@ // queue the data ingest jobs for asynchronous execution: ingestService.startIngestJobs(dataset, (AuthenticatedUser) this.authUser); - - // returning fields, got after saving to dataset, returning info for the saved file. - // indicating the file has been published, since the saving is asynchronous execution, cannot get new file id here? - + // saved fileId is not obvious + List<DataFile> afterAdding = dataset.getFiles(); // get file list after ingestService.addFiles() + List<DataFile> diffList = this.getAddedDataFile(afterAdding, beforeAdding); + + + // try to return fields, got after saving to dataset, returning info for the saved file. + // indicating the file has been uploaded + try { jsonSavedResult.put("status", "ok"); jsonSavedResult.put("message", "Dataset Saved!"); @@ -177,7 +194,12 @@ System.out.println(dataset.getDisplayName()); fileMetadata.put("datasetTitle", dataset.getDisplayName()); - + + // compare beforeAdding and afterAdding list, but it's not efficient to do that. + if (diffList != null) { + fileMetadata.put("fileId", diffList.get(0).getId()); + } + jsonSavedResult.put("fileMetadata", fileMetadata); @@ -188,6 +210,20 @@ return jsonSavedResult; } + + + + + private List<DataFile> getAddedDataFile(List<DataFile> a, + List<DataFile> b) { + + List<DataFile> diff = new ArrayList<DataFile>(a); + diff.removeAll(b); + + return diff; + } + + private void loadParameters(HttpServletRequest request) { params.put("user", request.getParameter("user"));