Mercurial > hg > LGDataverses
comparison 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 |
comparison
equal
deleted
inserted
replaced
13:d3374217e19e | 14:be7787c36e58 |
---|---|
33 | 33 |
34 import org.apache.commons.fileupload.FileItem; | 34 import org.apache.commons.fileupload.FileItem; |
35 import org.apache.commons.fileupload.disk.DiskFileItemFactory; | 35 import org.apache.commons.fileupload.disk.DiskFileItemFactory; |
36 import org.apache.commons.fileupload.servlet.ServletFileUpload; | 36 import org.apache.commons.fileupload.servlet.ServletFileUpload; |
37 import org.apache.commons.lang.StringUtils; | 37 import org.apache.commons.lang.StringUtils; |
38 import org.primefaces.json.JSONArray; | |
38 import org.primefaces.json.JSONException; | 39 import org.primefaces.json.JSONException; |
39 import org.primefaces.json.JSONObject; | 40 import org.primefaces.json.JSONObject; |
40 import org.primefaces.model.UploadedFile; | 41 import org.primefaces.model.UploadedFile; |
41 | 42 |
42 import edu.harvard.iq.dataverse.DataFile; | 43 import edu.harvard.iq.dataverse.DataFile; |
92 super.init(); | 93 super.init(); |
93 } | 94 } |
94 | 95 |
95 | 96 |
96 protected JSONObject saveFile(UpFile upFile) { | 97 protected JSONObject saveFile(UpFile upFile) { |
98 | |
99 JSONObject jsonSavedResult= new JSONObject(); | |
100 | |
97 //String datasetGlobalId = "doi:10.5072/FK2/1EWLIR"; | 101 //String datasetGlobalId = "doi:10.5072/FK2/1EWLIR"; |
98 String datasetGlobalId = params.get("datasetGlobalId"); | 102 String datasetGlobalId = params.get("datasetGlobalId"); |
99 dataset = datasetService.findByGlobalId(datasetGlobalId); | 103 dataset = datasetService.findByGlobalId(datasetGlobalId); |
100 workingVersion = dataset.getEditVersion(); | 104 workingVersion = dataset.getEditVersion(); |
101 | 105 |
105 String fileName = upFile.getFileName(); | 109 String fileName = upFile.getFileName(); |
106 String contentType = upFile.getContentType(); | 110 String contentType = upFile.getContentType(); |
107 | 111 |
108 InputStream fileStream = new ByteArrayInputStream(fileContent.getBytes(StandardCharsets.UTF_8)); | 112 InputStream fileStream = new ByteArrayInputStream(fileContent.getBytes(StandardCharsets.UTF_8)); |
109 dFileList = ingestService.createDataFiles(workingVersion, fileStream, fileName, contentType); | 113 dFileList = ingestService.createDataFiles(workingVersion, fileStream, fileName, contentType); |
114 | |
110 | 115 |
111 } catch (IOException ioex) { | 116 } catch (IOException ioex) { |
112 logger.warning("Failed to process and/or save the file " + upFile.getFileName() + "; " + ioex.getMessage()); | 117 logger.warning("Failed to process and/or save the file " + upFile.getFileName() + "; " + ioex.getMessage()); |
113 | 118 |
119 try { | |
120 jsonSavedResult.put("status", "error"); | |
121 jsonSavedResult.put("message", "Failed to process and/or save the file " + upFile.getFileName() + "; " + ioex.getMessage()); | |
122 } catch (JSONException e) { | |
123 | |
124 e.printStackTrace(); | |
125 } | |
126 return jsonSavedResult; | |
114 } | 127 } |
115 | 128 |
116 | 129 // get file list in the dataset first (before add file), in order to compare with the list after saving, to get saved fileId |
117 | 130 List<DataFile> beforeAdding = dataset.getFiles(); |
118 ingestService.addFiles(workingVersion, dFileList); | 131 |
119 | 132 ingestService.addFiles(workingVersion, dFileList); |
120 JSONObject jsonSavedResult= new JSONObject(); | 133 |
121 | 134 |
122 // Use the API to save the dataset: | 135 // Use the API to save the dataset: |
123 Command<Dataset> cmd; | 136 Command<Dataset> cmd; |
124 try { | 137 try { |
125 cmd = new UpdateDatasetCommand(dataset, this.authUser); | 138 cmd = new UpdateDatasetCommand(dataset, this.authUser); |
126 dataset = commandEngine.submit(cmd); | 139 dataset = commandEngine.submit(cmd); |
162 | 175 |
163 // Call Ingest Service one more time, to | 176 // Call Ingest Service one more time, to |
164 // queue the data ingest jobs for asynchronous execution: | 177 // queue the data ingest jobs for asynchronous execution: |
165 ingestService.startIngestJobs(dataset, (AuthenticatedUser) this.authUser); | 178 ingestService.startIngestJobs(dataset, (AuthenticatedUser) this.authUser); |
166 | 179 |
167 | 180 // saved fileId is not obvious |
168 // returning fields, got after saving to dataset, returning info for the saved file. | 181 List<DataFile> afterAdding = dataset.getFiles(); // get file list after ingestService.addFiles() |
169 // indicating the file has been published, since the saving is asynchronous execution, cannot get new file id here? | 182 List<DataFile> diffList = this.getAddedDataFile(afterAdding, beforeAdding); |
170 | 183 |
184 | |
185 // try to return fields, got after saving to dataset, returning info for the saved file. | |
186 // indicating the file has been uploaded | |
187 | |
171 try { | 188 try { |
172 jsonSavedResult.put("status", "ok"); | 189 jsonSavedResult.put("status", "ok"); |
173 jsonSavedResult.put("message", "Dataset Saved!"); | 190 jsonSavedResult.put("message", "Dataset Saved!"); |
174 | 191 |
175 JSONObject fileMetadata = new JSONObject(); | 192 JSONObject fileMetadata = new JSONObject(); |
176 | 193 |
177 System.out.println(dataset.getDisplayName()); | 194 System.out.println(dataset.getDisplayName()); |
178 | 195 |
179 fileMetadata.put("datasetTitle", dataset.getDisplayName()); | 196 fileMetadata.put("datasetTitle", dataset.getDisplayName()); |
180 | 197 |
198 // compare beforeAdding and afterAdding list, but it's not efficient to do that. | |
199 if (diffList != null) { | |
200 fileMetadata.put("fileId", diffList.get(0).getId()); | |
201 } | |
202 | |
181 jsonSavedResult.put("fileMetadata", fileMetadata); | 203 jsonSavedResult.put("fileMetadata", fileMetadata); |
182 | 204 |
183 | 205 |
184 } catch (JSONException e) { | 206 } catch (JSONException e) { |
185 e.printStackTrace(); | 207 e.printStackTrace(); |
186 } | 208 } |
187 | 209 |
188 return jsonSavedResult; | 210 return jsonSavedResult; |
189 } | 211 } |
190 | 212 |
213 | |
214 | |
215 | |
216 | |
217 private List<DataFile> getAddedDataFile(List<DataFile> a, | |
218 List<DataFile> b) { | |
219 | |
220 List<DataFile> diff = new ArrayList<DataFile>(a); | |
221 diff.removeAll(b); | |
222 | |
223 return diff; | |
224 } | |
225 | |
226 | |
191 private void loadParameters(HttpServletRequest request) { | 227 private void loadParameters(HttpServletRequest request) { |
192 | 228 |
193 params.put("user", request.getParameter("user")); | 229 params.put("user", request.getParameter("user")); |
194 params.put("password", request.getParameter("password")); | 230 params.put("password", request.getParameter("password")); |
195 params.put("datasetGlobalId", request.getParameter("datasetGlobalId")); | 231 params.put("datasetGlobalId", request.getParameter("datasetGlobalId")); |