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