Skip to content

Commit 9973789

Browse files
authored
Merge pull request #416 from devgateway/fix/OCVN-400/export-all-button-saveas
OCVN-400 Export all button not working on prod
2 parents d47df9a + 8671b92 commit 9973789

4 files changed

Lines changed: 35 additions & 52 deletions

File tree

ui/oce/index.jsx

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -298,22 +298,22 @@ class OCApp extends React.Component{
298298
}
299299

300300
exportBtn(){
301-
if(this.state.exporting){
302-
return (
303-
<div className="filters">
304-
<div className="progress">
305-
<div className="progress-bar progress-bar-danger" role="progressbar" style={{width: "100%"}}>
306-
{this.t('export:exporting')}
307-
</div>
308-
</div>
309-
</div>
310-
)
301+
const { filters, selectedYears, locale, selectedMonths } = this.state;
302+
let url = new URI('/api/ocds/excelExport')
303+
.addSearch(filters.toJS())
304+
.addSearch('year', selectedYears.toArray())
305+
.addSearch('language', locale);
306+
307+
if(selectedYears.count() == 1){
308+
url = url.addSearch('month', selectedMonths && selectedMonths.toJS())
309+
.addSearch('monthly', true);
311310
}
312-
return <div className="filters" onClick={e => this.downloadExcel()}>
311+
312+
return <a className="filters" href={url} download="export.zip">
313313
<img className="top-nav-icon" src="assets/icons/export.svg" width="100%" height="100%"/>
314314
{this.t('export:export')}
315315
<i className="glyphicon glyphicon-menu-down"></i>
316-
</div>
316+
</a>
317317
}
318318

319319
toggleDashboardSwitcher(e){

ui/oce/style.less

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,3 +63,8 @@
6363
}
6464
}
6565
}
66+
67+
a.filters{
68+
text-decoration: none;
69+
color: white;
70+
}

web/src/main/java/org/devgateway/ocds/web/rest/controller/export/ExcelExportController.java

Lines changed: 15 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,7 @@
11
package org.devgateway.ocds.web.rest.controller.export;
22

33
import io.swagger.annotations.ApiOperation;
4-
import java.io.BufferedOutputStream;
5-
import java.io.File;
6-
import java.io.FileInputStream;
7-
import java.io.FileOutputStream;
8-
import java.io.IOException;
9-
import java.io.InputStream;
10-
import java.util.zip.Deflater;
11-
import java.util.zip.ZipEntry;
12-
import java.util.zip.ZipOutputStream;
13-
import javax.servlet.http.HttpServletResponse;
14-
import javax.validation.Valid;
154
import org.apache.commons.io.FileCleaningTracker;
16-
import org.apache.commons.io.IOUtils;
175
import org.devgateway.ocds.persistence.mongo.Release;
186
import org.devgateway.ocds.persistence.mongo.constants.MongoConstants;
197
import org.devgateway.ocds.web.rest.controller.GenericOCDSController;
@@ -29,6 +17,13 @@
2917
import org.springframework.web.bind.annotation.RequestMethod;
3018
import org.springframework.web.bind.annotation.RestController;
3119

20+
import javax.servlet.http.HttpServletResponse;
21+
import javax.validation.Valid;
22+
import java.io.BufferedOutputStream;
23+
import java.io.IOException;
24+
import java.util.zip.Deflater;
25+
import java.util.zip.ZipEntry;
26+
import java.util.zip.ZipOutputStream;
3227

3328
import static org.springframework.data.mongodb.core.query.Query.query;
3429

@@ -39,19 +34,15 @@
3934
@RestController
4035
public class ExcelExportController extends GenericOCDSController {
4136
protected final Logger logger = LoggerFactory.getLogger(ExcelExportController.class);
42-
37+
@Autowired
38+
protected AdminSettingsRepository adminSettingsRepository;
4339
@Autowired
4440
private SettingsUtils settingsUtils;
45-
4641
@Autowired
4742
private ExcelGenerator excelGenerator;
48-
4943
@Autowired
5044
private FileCleaningTracker fileCleaningTracker;
5145

52-
@Autowired
53-
protected AdminSettingsRepository adminSettingsRepository;
54-
5546
@ApiOperation(value = "Export releases in Excel format.")
5647
@RequestMapping(value = "/api/ocds/excelExport", method = {RequestMethod.GET, RequestMethod.POST})
5748
public void excelExport(@ModelAttribute @Valid final YearFilterPagingRequest filter,
@@ -74,39 +65,25 @@ public void excelExport(@ModelAttribute @Valid final YearFilterPagingRequest fil
7465
if (numberOfReleases <= settingsUtils.getExcelBatchSize()) {
7566
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
7667
response.setHeader("Content-Disposition", "attachment; filename=" + "excel-export.xlsx");
77-
7868
response.getOutputStream().write(excelGenerator.getExcelDownload(filter));
7969
} else {
80-
File file = File.createTempFile("createZip", ".zip");
81-
logger.info("Created temp file: " + file.getAbsolutePath());
82-
83-
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file));
84-
85-
ZipOutputStream zout = new ZipOutputStream(bos);
70+
response.setContentType("application/zip");
71+
response.setHeader("Content-Disposition", "attachment; filename=" + "excel-export.zip");
72+
response.flushBuffer();
73+
ZipOutputStream zout = new ZipOutputStream(new BufferedOutputStream(response.getOutputStream()));
8674
zout.setMethod(ZipOutputStream.DEFLATED);
87-
zout.setLevel(Deflater.BEST_SPEED);
88-
75+
zout.setLevel(Deflater.NO_COMPRESSION);
8976
int numberOfPages = (int) Math.ceil((double) numberOfReleases / filter.getPageSize());
9077
for (int i = 0; i < numberOfPages; i++) {
9178
filter.setPageNumber(i);
92-
9379
ZipEntry ze = new ZipEntry("excel-export-page " + (i + 1) + ".xlsx");
94-
9580
zout.putNextEntry(ze);
9681
byte[] bytes = excelGenerator.getExcelDownload(filter);
9782
zout.write(bytes, 0, bytes.length);
98-
9983
zout.closeEntry();
84+
response.flushBuffer();
10085
}
10186
zout.close();
102-
fileCleaningTracker.track(file, file);
103-
IOUtils.closeQuietly(bos);
104-
105-
response.setContentType("application/zip");
106-
response.setHeader("Content-Disposition", "attachment; filename=" + "excel-export.zip");
107-
108-
InputStream is = new FileInputStream(file);
109-
IOUtils.copy(is, response.getOutputStream());
11087
response.flushBuffer();
11188
}
11289
}

web/src/main/java/org/devgateway/ocds/web/util/SettingsUtils.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
package org.devgateway.ocds.web.util;
22

3-
import java.util.List;
43
import org.devgateway.toolkit.persistence.dao.AdminSettings;
54
import org.devgateway.toolkit.persistence.repository.AdminSettingsRepository;
65
import org.slf4j.Logger;
76
import org.slf4j.LoggerFactory;
87
import org.springframework.beans.factory.annotation.Autowired;
98
import org.springframework.stereotype.Service;
109

10+
import java.util.List;
11+
1112
/**
1213
* @author idobre
1314
* @since 6/22/16
@@ -18,7 +19,7 @@ public class SettingsUtils {
1819

1920
public static final String DEFAULT_LANGUAGE = "en_US";
2021

21-
private static final Integer EXCELBATCHSIZEDEFAULT = 10000;
22+
private static final Integer EXCELBATCHSIZEDEFAULT = 5000;
2223

2324
@Autowired
2425
private AdminSettingsRepository adminSettingsRepository;

0 commit comments

Comments
 (0)