Skip to content

Commit 98d22ac

Browse files
mlopezFCjavier-godoy
authored andcommitted
refactor: centralize obtaining the DataStream
1 parent 9c927d1 commit 98d22ac

File tree

4 files changed

+32
-61
lines changed

4 files changed

+32
-61
lines changed

src/main/java/com/flowingcode/vaadin/addons/gridexporter/BaseInputStreamFactory.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,28 @@
11
package com.flowingcode.vaadin.addons.gridexporter;
22

3+
import java.lang.reflect.Method;
34
import java.util.List;
45
import java.util.stream.Collectors;
56
import java.util.stream.Stream;
67
import org.apache.commons.lang3.tuple.ImmutablePair;
78
import org.apache.commons.lang3.tuple.Pair;
9+
import org.slf4j.Logger;
810
import org.slf4j.LoggerFactory;
911
import com.flowingcode.vaadin.addons.gridhelpers.GridHelper;
1012
import com.vaadin.flow.component.ComponentUtil;
1113
import com.vaadin.flow.component.grid.Grid;
1214
import com.vaadin.flow.component.grid.Grid.Column;
15+
import com.vaadin.flow.component.grid.dataview.GridLazyDataView;
16+
import com.vaadin.flow.data.provider.AbstractBackEndDataProvider;
1317
import com.vaadin.flow.data.provider.DataCommunicator;
18+
import com.vaadin.flow.data.provider.DataProvider;
1419
import com.vaadin.flow.data.provider.Query;
1520
import com.vaadin.flow.server.InputStreamFactory;
1621

1722
@SuppressWarnings("serial")
1823
abstract class BaseInputStreamFactory<T> implements InputStreamFactory {
1924

25+
private final static Logger LOGGER = LoggerFactory.getLogger(BaseInputStreamFactory.class);
2026
protected GridExporter<T> exporter;
2127
protected String template;
2228

@@ -65,5 +71,28 @@ protected List<Pair<String,Column<T>>> getGridFooters(Grid<T> grid) {
6571
.collect(Collectors.toList());
6672
}
6773

74+
protected Stream<T> obtainDataStream(DataProvider<T, ?> dataProvider) {
75+
Object filter = null;
76+
try {
77+
Method method = DataCommunicator.class.getDeclaredMethod("getFilter");
78+
method.setAccessible(true);
79+
filter = method.invoke(exporter.grid.getDataCommunicator());
80+
} catch (Exception e) {
81+
LOGGER.error("Unable to get filter from DataCommunicator", e);
82+
}
6883

84+
Stream<T> dataStream;
85+
if (dataProvider instanceof AbstractBackEndDataProvider) {
86+
GridLazyDataView<T> gridLazyDataView = exporter.grid.getLazyDataView();
87+
dataStream = gridLazyDataView.getItems();
88+
} else {
89+
@SuppressWarnings({"rawtypes", "unchecked"})
90+
Query<T, ?> streamQuery =
91+
new Query<>(0, exporter.grid.getDataProvider().size(new Query(filter)),
92+
exporter.grid.getDataCommunicator().getBackEndSorting(),
93+
exporter.grid.getDataCommunicator().getInMemorySorting(), null);
94+
dataStream = getDataStream(streamQuery);
95+
}
96+
return dataStream;
97+
}
6998
}

src/main/java/com/flowingcode/vaadin/addons/gridexporter/CsvInputStreamFactory.java

Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
import java.io.OutputStreamWriter;
99
import java.io.PipedInputStream;
1010
import java.io.PipedOutputStream;
11-
import java.lang.reflect.Method;
1211
import java.util.List;
1312
import java.util.stream.Collectors;
1413
import java.util.stream.Stream;
@@ -19,8 +18,6 @@
1918
import com.vaadin.flow.component.grid.Grid.Column;
2019
import com.vaadin.flow.data.binder.BeanPropertySet;
2120
import com.vaadin.flow.data.binder.PropertySet;
22-
import com.vaadin.flow.data.provider.DataCommunicator;
23-
import com.vaadin.flow.data.provider.Query;
2421

2522
/**
2623
* @author mlope
@@ -49,20 +46,7 @@ public void run() {
4946
List<Pair<String, Column<T>>> headers = getGridHeaders(exporter.grid);
5047
writer.writeNext(headers.stream().map(pair->pair.getLeft()).collect(Collectors.toList()).toArray(new String[0]));
5148

52-
Object filter = null;
53-
try {
54-
Method method = DataCommunicator.class.getDeclaredMethod("getFilter");
55-
method.setAccessible(true);
56-
filter = method.invoke(exporter.grid.getDataCommunicator());
57-
} catch (Exception e) {
58-
LOGGER.error("Unable to get filter from DataCommunicator", e);
59-
}
60-
61-
@SuppressWarnings({"rawtypes", "unchecked"})
62-
Query<T, ?> streamQuery = new Query<>(0, exporter.grid.getDataProvider().size(new Query(filter)),
63-
exporter.grid.getDataCommunicator().getBackEndSorting(),
64-
exporter.grid.getDataCommunicator().getInMemorySorting(), null);
65-
Stream<T> dataStream = getDataStream(streamQuery);
49+
Stream<T> dataStream = obtainDataStream(exporter.grid.getDataProvider());
6650
dataStream.forEach(t -> {
6751
writer.writeNext(buildRow(t,writer));
6852
});

src/main/java/com/flowingcode/vaadin/addons/gridexporter/DocxInputStreamFactory.java

Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
import java.io.InputStream;
88
import java.io.PipedInputStream;
99
import java.io.PipedOutputStream;
10-
import java.lang.reflect.Method;
1110
import java.util.Calendar;
1211
import java.util.Iterator;
1312
import java.util.List;
@@ -33,9 +32,7 @@
3332
import com.vaadin.flow.component.grid.Grid.Column;
3433
import com.vaadin.flow.data.binder.BeanPropertySet;
3534
import com.vaadin.flow.data.binder.PropertySet;
36-
import com.vaadin.flow.data.provider.DataCommunicator;
3735
import com.vaadin.flow.data.provider.DataProvider;
38-
import com.vaadin.flow.data.provider.Query;
3936

4037
/**
4138
* @author mlope
@@ -132,20 +129,7 @@ protected XWPFDocument createDoc() throws IOException {
132129
}
133130

134131
private void fillData(XWPFTable table, XWPFTableCell dataCell, DataProvider<T, ?> dataProvider) {
135-
Object filter = null;
136-
try {
137-
Method method = DataCommunicator.class.getDeclaredMethod("getFilter");
138-
method.setAccessible(true);
139-
filter = method.invoke(exporter.grid.getDataCommunicator());
140-
} catch (Exception e) {
141-
LOGGER.error("Unable to get filter from DataCommunicator", e);
142-
}
143-
144-
@SuppressWarnings({"rawtypes", "unchecked"})
145-
Query<T, ?> streamQuery = new Query<>(0, exporter.grid.getDataProvider().size(new Query(filter)),
146-
exporter.grid.getDataCommunicator().getBackEndSorting(),
147-
exporter.grid.getDataCommunicator().getInMemorySorting(), null);
148-
Stream<T> dataStream = getDataStream(streamQuery);
132+
Stream<T> dataStream = obtainDataStream(dataProvider);
149133

150134
boolean[] firstRow = new boolean[] {true};
151135
XWPFTableCell[] startingCell = new XWPFTableCell[1];

src/main/java/com/flowingcode/vaadin/addons/gridexporter/ExcelInputStreamFactory.java

Lines changed: 1 addition & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
import java.io.InputStream;
88
import java.io.PipedInputStream;
99
import java.io.PipedOutputStream;
10-
import java.lang.reflect.Method;
1110
import java.text.DateFormat;
1211
import java.text.DecimalFormat;
1312
import java.text.ParseException;
@@ -35,13 +34,9 @@
3534
import com.vaadin.flow.component.ComponentUtil;
3635
import com.vaadin.flow.component.grid.ColumnTextAlign;
3736
import com.vaadin.flow.component.grid.Grid.Column;
38-
import com.vaadin.flow.component.grid.dataview.GridLazyDataView;
3937
import com.vaadin.flow.data.binder.BeanPropertySet;
4038
import com.vaadin.flow.data.binder.PropertySet;
41-
import com.vaadin.flow.data.provider.AbstractBackEndDataProvider;
42-
import com.vaadin.flow.data.provider.DataCommunicator;
4339
import com.vaadin.flow.data.provider.DataProvider;
44-
import com.vaadin.flow.data.provider.Query;
4540

4641
/**
4742
* @author mlope
@@ -132,30 +127,9 @@ public void run() {
132127
}
133128

134129

135-
@SuppressWarnings("unchecked")
136130
private void fillData(Sheet sheet, Cell dataCell, DataProvider<T, ?> dataProvider,
137131
boolean titleExists) {
138-
Object filter = null;
139-
try {
140-
Method method = DataCommunicator.class.getDeclaredMethod("getFilter");
141-
method.setAccessible(true);
142-
filter = method.invoke(exporter.grid.getDataCommunicator());
143-
} catch (Exception e) {
144-
LOGGER.error("Unable to get filter from DataCommunicator", e);
145-
}
146-
147-
Stream<T> dataStream;
148-
if (dataProvider instanceof AbstractBackEndDataProvider) {
149-
GridLazyDataView<T> gridLazyDataView = exporter.grid.getLazyDataView();
150-
dataStream = gridLazyDataView.getItems();
151-
} else {
152-
@SuppressWarnings("rawtypes")
153-
Query<T, ?> streamQuery =
154-
new Query<>(0, exporter.grid.getDataProvider().size(new Query(filter)),
155-
exporter.grid.getDataCommunicator().getBackEndSorting(),
156-
exporter.grid.getDataCommunicator().getInMemorySorting(), null);
157-
dataStream = getDataStream(streamQuery);
158-
}
132+
Stream<T> dataStream = obtainDataStream(dataProvider);
159133

160134
boolean[] notFirstRow = new boolean[1];
161135
Cell[] startingCell = new Cell[1];

0 commit comments

Comments
 (0)