view src/main/java/de/mpiwg/gazetteer/servlet/GetDatafile.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 source

package de.mpiwg.gazetteer.servlet;

import static edu.harvard.iq.dataverse.util.JsfHelper.JH;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.ejb.EJB;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.Response;

import org.apache.commons.lang.StringUtils;
import org.primefaces.json.JSONArray;
import org.primefaces.json.JSONException;
import org.primefaces.json.JSONObject;

import edu.harvard.iq.dataverse.DataFile;
import edu.harvard.iq.dataverse.DataFileServiceBean;
import edu.harvard.iq.dataverse.FileMetadata;
import edu.harvard.iq.dataverse.api.DownloadInfo;
import edu.harvard.iq.dataverse.api.DownloadInstance;
import edu.harvard.iq.dataverse.authorization.AuthenticationRequest;
import edu.harvard.iq.dataverse.authorization.CredentialsAuthenticationProvider;
import edu.harvard.iq.dataverse.authorization.exceptions.AuthenticationFailedException;
import edu.harvard.iq.dataverse.authorization.users.AuthenticatedUser;
import edu.harvard.iq.dataverse.export.DDIExportServiceBean;



public class GetDatafile extends AbstractMonographServlet{
	

	private static final Logger logger = Logger.getLogger(GetDatafile.class.getName());

	@EJB
    DataFileServiceBean dataFileService;
	
	
	
	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// Set response content type
		response.setContentType("application/json");
		response.setCharacterEncoding("UTF-8");
		
		JSONObject jsonResponse = new JSONObject();	
		
		Long fileId = Long.parseLong(request.getParameter("fileId"));
		
		if(fileId != null){
			// get datafile by fileId
			System.out.println("getting file... fileId=" + fileId);
			
			DataFile df = dataFileService.find(fileId);
			try {
				if (df == null) {
					logger.warning("Access: datafile service could not locate a DataFile object for id "+fileId+"!");
					jsonResponse.put("state", "error");
				
				} else {
					
						JSONObject jsonFile = new JSONObject();
					
						jsonFile.put("fileLabel", df.getFileMetadata().getLabel());
						jsonFile.put("fileName", df.getFileSystemName());
						jsonFile.put("fileSize", df.getFilesize());

						// get file data from file system
						//Path filePath = df.getSavedOriginalFile();	// only works on tab-data 
						
						Path filePath = null;
						if (df.getFileSystemName() != null && df.getFileSystemName().startsWith("/")) {
							filePath = Paths.get(df.getFileSystemName());
				        } else {
				        	Path studyDirectoryPath = df.getOwner().getFileSystemDirectory();
				        	if (studyDirectoryPath == null) {
				        		jsonResponse.put("state", "error");
				            	//return;
				        	}
				        	String studyDirectory = studyDirectoryPath.toString();
				 
				        	filePath = Paths.get(studyDirectory, df.getFileSystemName());
				        }
						
				        if (filePath != null) {
				        	String dataString = "";
							File fileDir = new File(filePath.toString());
							BufferedReader in = new BufferedReader( new InputStreamReader(
												new FileInputStream(fileDir), "UTF8")); 
							String str;
							while ((str = in.readLine()) != null) {
								// TODO file may not be from LGServices which are not in the right format we can parse here
	
								dataString += str.replace("\t", ",");
								dataString += "\n";
							}
					    	in.close();
						
					    	jsonFile.put("dataString", dataString);
							    
					    	jsonResponse.put("file", jsonFile);	
					    
					    	jsonResponse.put("state", "ok");
				        }
						
				}
			} catch (JSONException e) {
				
				e.printStackTrace();
			}
		}
	
		
		// ======================
    
		response.setHeader("Access-Control-Allow-Origin", "*");
        
		java.io.PrintWriter out = response.getWriter();
		out.print(jsonResponse);
		out.flush();
		
		
		
	}
}