# HG changeset patch # User casties # Date 1478200258 -3600 # Node ID 03dcbaf8b8cfa3daab1a16a27eb1c8d61e341bb6 # Parent db3e1bbfde036f57015110b9c06dbf5a8c869b37 add download-as-csv button to browse repository. diff -r db3e1bbfde03 -r 03dcbaf8b8cf src/main/java/de/mpiwg/itgroup/ismi/browse/AbstractEntityRepositoryBean.java --- a/src/main/java/de/mpiwg/itgroup/ismi/browse/AbstractEntityRepositoryBean.java Tue Nov 01 19:45:16 2016 +0100 +++ b/src/main/java/de/mpiwg/itgroup/ismi/browse/AbstractEntityRepositoryBean.java Thu Nov 03 20:10:58 2016 +0100 @@ -83,26 +83,31 @@ this.updateDefinitions(getWrapper().getLWDefinitions()); } - private void updateAdvancedEntities() { - if (StringUtils.isNotEmpty(getObjectClass())) { - this.advancedPaginator.initCount(); - int startRecord = this.advancedPaginator.getCurrentPage() - * this.advancedPaginator.getItemsPerPage(); - if((this.advancedPaginator.getCurrentPage() + 1) == this.advancedPaginator.getNumberOfPages()){ - int mod = this.entities.size() % advancedPaginator.getItemsPerPage(); - if(mod == 0){ - this.currentEntities = entities.subList(startRecord, startRecord + this.advancedPaginator.getItemsPerPage()); - }else{ - this.currentEntities = entities.subList(startRecord, startRecord + mod); - } - - }else{ - this.currentEntities = entities.subList(startRecord, startRecord + this.advancedPaginator.getItemsPerPage()); - } - - } else - this.currentEntities = new ArrayList(); - } + /** + * Put the current subset of this.entites in this.currentEntities. + */ + private void updateAdvancedEntities() { + if (StringUtils.isNotEmpty(getObjectClass())) { + this.advancedPaginator.initCount(); + int startRecord = this.advancedPaginator.getCurrentPage() * this.advancedPaginator.getItemsPerPage(); + if ((this.advancedPaginator.getCurrentPage() + 1) == this.advancedPaginator.getNumberOfPages()) { + int mod = this.entities.size() % advancedPaginator.getItemsPerPage(); + if (mod == 0) { + this.currentEntities = entities.subList(startRecord, + startRecord + this.advancedPaginator.getItemsPerPage()); + } else { + this.currentEntities = entities.subList(startRecord, startRecord + mod); + } + + } else { + this.currentEntities = entities.subList(startRecord, + startRecord + this.advancedPaginator.getItemsPerPage()); + } + } else { + // empty object_class + this.currentEntities = new ArrayList(); + } + } public String advancedFirst() { this.advancedPaginator.first(); diff -r db3e1bbfde03 -r 03dcbaf8b8cf src/main/java/de/mpiwg/itgroup/ismi/browse/EntityRepositoryBean.java --- a/src/main/java/de/mpiwg/itgroup/ismi/browse/EntityRepositoryBean.java Tue Nov 01 19:45:16 2016 +0100 +++ b/src/main/java/de/mpiwg/itgroup/ismi/browse/EntityRepositoryBean.java Thu Nov 03 20:10:58 2016 +0100 @@ -1,11 +1,17 @@ package de.mpiwg.itgroup.ismi.browse; +import java.io.IOException; +import java.io.PrintWriter; import java.util.ArrayList; +import java.util.List; +import javax.faces.context.FacesContext; import javax.faces.event.ActionEvent; +import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang.StringUtils; import org.mpi.openmind.repository.bo.Entity; +import org.mpi.openmind.repository.utils.CsvEntityListWriter; import de.mpiwg.itgroup.ismi.entry.beans.SessionBean; import de.mpiwg.itgroup.ismi.event.beans.CopyEvent; @@ -14,6 +20,7 @@ import de.mpiwg.itgroup.ismi.util.guiComponents.DataPaginator; public class EntityRepositoryBean extends AbstractEntityRepositoryBean { + private static final long serialVersionUID = -2380877853539157567L; private transient DataPaginator paginator = new DataPaginator(); @@ -29,30 +36,27 @@ } - private void updateEntities() { - if (StringUtils.isNotEmpty(getObjectClass())) { - this.paginator.initCount(); - int startRecord = this.paginator.getCurrentPage() - * this.paginator.getItemsPerPage(); - - if(this.paginator.getNumberOfPages() == 0){ - this.setEntities(new ArrayList()); - }else{ - int mod = getWrapper().getEntitiesCount(getObjectClass()) % paginator.getItemsPerPage(); - if((paginator.getCurrentPage() + 1) == paginator.getNumberOfPages() && mod != 0){ - this.setEntities( - getWrapper().getEntityByDefSubList(getObjectClass(), startRecord, startRecord + mod) - ); - }else{ - this.setEntities( - getWrapper().getEntityByDefSubList(getObjectClass(), startRecord, startRecord + paginator.getItemsPerPage()) - ); - } - } - } else { - this.setEntities(new ArrayList()); - } - } + private void updateEntities() { + if (StringUtils.isNotEmpty(getObjectClass())) { + this.paginator.initCount(); + int startRecord = this.paginator.getCurrentPage() * this.paginator.getItemsPerPage(); + + if (this.paginator.getNumberOfPages() == 0) { + this.setEntities(new ArrayList()); + } else { + int mod = getWrapper().getEntitiesCount(getObjectClass()) % paginator.getItemsPerPage(); + if ((paginator.getCurrentPage() + 1) == paginator.getNumberOfPages() && mod != 0) { + this.setEntities( + getWrapper().getEntityByDefSubList(getObjectClass(), startRecord, startRecord + mod)); + } else { + this.setEntities(getWrapper().getEntityByDefSubList(getObjectClass(), startRecord, + startRecord + paginator.getItemsPerPage())); + } + } + } else { + this.setEntities(new ArrayList()); + } + } public String first() { this.paginator.first(); @@ -143,6 +147,71 @@ return SessionBean.PAGE_ENTRY; } } + + /** + * Downloads all Entities of the selected class as CSV. + * + * To be used for resultMode == all. + * + * @throws IOException + */ + public void downloadAllCsv() throws IOException { + List allEnts = getWrapper().getEntitiesByDef(getObjectClass()); + sendAsCsv(allEnts); + } + + /** + * Downloads all currently selected Entities as CSV. + * + * To be used for resultMode == advanced. + * + * @throws IOException + */ + public void downloadAdvancedCsv() throws IOException { + sendAsCsv(getEntities()); + } + + /** + * Send the given Entities as CSV file to the client. + * + * @throws IOException + */ + public void sendAsCsv(List entList) throws IOException { + // Get the FacesContext + FacesContext facesContext = FacesContext.getCurrentInstance(); + + // Get HTTP response + HttpServletResponse response = (HttpServletResponse) facesContext.getExternalContext().getResponse(); + + // Set response headers + response.reset(); // Reset the response in the first place + response.setCharacterEncoding("UTF-8"); + response.setHeader("Content-Type", "application/csv"); // Set the content type + response.setHeader("Content-Disposition", "attachment; filename=entities.csv"); + + // Open response output Writer + PrintWriter responseWriter = response.getWriter(); + + // make sure all entities attributes are loaded + for (Entity entity : entList) { + if (entity.isLightweight()) { + getWrapper().getEntityContent(entity); + } + } + + // write all entities to the response + CsvEntityListWriter.writeEntities(entList, responseWriter); + + // Make sure that everything is out + responseWriter.flush(); + responseWriter.close(); + + // JSF doc: + // Signal the JavaServer Faces implementation that the HTTP response for this request has already been generated + // (such as an HTTP redirect), and that the request processing lifecycle should be terminated + // as soon as the current phase is completed. + facesContext.responseComplete(); + } public DataPaginator getPaginator() { return paginator; diff -r db3e1bbfde03 -r 03dcbaf8b8cf src/main/webapp/browse/components/advancedResult.xhtml --- a/src/main/webapp/browse/components/advancedResult.xhtml Tue Nov 01 19:45:16 2016 +0100 +++ b/src/main/webapp/browse/components/advancedResult.xhtml Thu Nov 03 20:10:58 2016 +0100 @@ -15,7 +15,7 @@ - + - - - - - - @@ -72,34 +72,39 @@ - - - - - - + + + + \ No newline at end of file diff -r db3e1bbfde03 -r 03dcbaf8b8cf src/main/webapp/browse/components/showAllResult.xhtml --- a/src/main/webapp/browse/components/showAllResult.xhtml Tue Nov 01 19:45:16 2016 +0100 +++ b/src/main/webapp/browse/components/showAllResult.xhtml Thu Nov 03 20:10:58 2016 +0100 @@ -14,7 +14,7 @@ - + + + +