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"));