/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package edu.harvard.iq.dataverse; import java.util.List; import javax.ejb.EJB; import javax.faces.context.FacesContext; import javax.faces.view.ViewScoped; import javax.inject.Named; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; /** * * @author skraffmi */ @ViewScoped @Named("guestbookResponsesPage") public class GuestbookResponsesPage implements java.io.Serializable { @EJB GuestbookServiceBean guestbookService; @EJB GuestbookResponseServiceBean guestbookResponseService; @EJB DataverseServiceBean dvService; private Long guestbookId; private Long dataverseId; private Guestbook guestbook; private Dataverse dataverse; private String redirectString = ""; public String getRedirectString() { return redirectString; } public void setRedirectString(String redirectString) { this.redirectString = redirectString; } private List<GuestbookResponse> responses; private List<Object[]> responsesAsArray; public List<Object[]> getResponsesAsArray() { return responsesAsArray; } public void setResponsesAsArray(List<Object[]> responsesAsArray) { this.responsesAsArray = responsesAsArray; } public void init() { guestbook = guestbookService.find(guestbookId); dataverse = dvService.find(dataverseId); if(guestbook != null){ responsesAsArray = guestbookResponseService.findArrayByGuestbookIdAndDataverseId(guestbookId, dataverseId); } } public void downloadResponsesByDataverseAndGuestbook(){ FacesContext ctx = FacesContext.getCurrentInstance(); HttpServletResponse response = (HttpServletResponse) ctx.getExternalContext().getResponse(); response.setContentType("text/comma-separated-values"); String fileNameString = "attachment;filename=" + getFileName(); response.setHeader("Content-Disposition", fileNameString); //selectedGuestbook String converted = convertResponsesToTabDelimited(guestbookResponseService.findArrayByDataverseIdAndGuestbookId(dataverseId, guestbookId)); try { ServletOutputStream out = response.getOutputStream(); out.write(converted.getBytes()); out.flush(); ctx.responseComplete(); } catch (Exception e) { } } private String getFileName(){ return dataverse.getName() + "_GuestbookReponses.csv"; } private final String SEPARATOR = ","; private final String END_OF_LINE = "\n"; private String convertResponsesToTabDelimited(List<Object[]> guestbookResponses) { StringBuilder sb = new StringBuilder(); sb.append("Guestbook, Dataset, Date, Type, File Name, User Name, Email, Institution, Position, Custom Questions"); sb.append(END_OF_LINE); for (Object[] array : guestbookResponses) { sb.append(array[0]); sb.append(SEPARATOR); sb.append(array[1]); sb.append(SEPARATOR); sb.append(array[2]); sb.append(SEPARATOR); sb.append(array[3]); sb.append(SEPARATOR); sb.append(array[4]); sb.append(SEPARATOR); sb.append(array[5] == null ? "" : array[5]); sb.append(SEPARATOR); sb.append(array[6] == null ? "" : array[6]); sb.append(SEPARATOR); sb.append(array[7] == null ? "" : array[7]); sb.append(SEPARATOR); sb.append(array[8] == null ? "" : array[8]); if(array[9] != null){ List <Object[]> responses = (List<Object[]>) array[9]; for (Object[] response: responses){ sb.append(SEPARATOR); sb.append(response[0]); sb.append(SEPARATOR); sb.append(response[1] == null ? "" : response[1]); } } sb.append(END_OF_LINE); } return sb.toString(); } public Dataverse getDataverse() { return dataverse; } public void setDataverse(Dataverse dataverse) { this.dataverse = dataverse; } public Long getDataverseId() { return dataverseId; } public void setDataverseId(Long dataverseId) { this.dataverseId = dataverseId; } public Long getGuestbookId() { return guestbookId; } public void setGuestbookId(Long guestbookId) { this.guestbookId = guestbookId; } public Guestbook getGuestbook() { return guestbook; } public void setGuestbook(Guestbook guestbook) { this.guestbook = guestbook; } public List<GuestbookResponse> getResponses() { return responses; } public void setResponses(List<GuestbookResponse> responses) { this.responses = responses; } }