Skip to content

Commit 5cbd28e

Browse files
authored
Merge pull request #24 from spacious-team/improvement-lazy-wrapping-report-table
Отложенная инициализация WrappingReportTable
2 parents 2746f18 + f429865 commit 5cbd28e

File tree

1 file changed

+47
-32
lines changed

1 file changed

+47
-32
lines changed

src/main/java/org/spacious_team/broker/report_parser/api/WrappingReportTable.java

Lines changed: 47 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -18,66 +18,81 @@
1818

1919
package org.spacious_team.broker.report_parser.api;
2020

21+
import lombok.AccessLevel;
2122
import lombok.Getter;
23+
import lombok.RequiredArgsConstructor;
2224

2325
import java.util.ArrayList;
2426
import java.util.Arrays;
2527
import java.util.Collection;
2628
import java.util.Collections;
2729
import java.util.List;
2830

31+
@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
2932
public class WrappingReportTable<RowType> implements ReportTable<RowType> {
30-
@Getter
31-
private final BrokerReport report;
32-
private final List<RowType> data;
33+
private final ReportTable<RowType> reportTable;
34+
35+
@SafeVarargs
36+
public static <T> WrappingReportTable<T> of(BrokerReport report, Collection<T>... dataset) {
37+
return new WrappingReportTable<>(new EagerWrappingReportTable<>(report, dataset));
38+
}
3339

3440
@SafeVarargs
3541
public static <T> WrappingReportTable<T> of(ReportTable<T>... tables) {
3642
assertIsTrue(tables.length > 0, "Can't wrap, report tables not provided");
3743
BrokerReport report = tables[0].getReport();
3844
boolean isAllReportsIsSame = Arrays.stream(tables)
3945
.map(ReportTable::getReport)
40-
.filter(tableReport -> tableReport != report)
41-
.findAny()
42-
.isEmpty();
46+
.allMatch(tableReport -> tableReport == report);
4347
assertIsTrue(isAllReportsIsSame, "Wrapping report tables should be built for same broker report");
44-
return new WrappingReportTable<>(report, tables);
45-
48+
return new WrappingReportTable<>(new LazyWrappingReportTable<>(report, tables));
4649
}
4750

48-
@SafeVarargs
49-
public WrappingReportTable(BrokerReport report, ReportTable<RowType>... tables) {
50-
List<RowType> data = new ArrayList<>();
51-
for (ReportTable<RowType> table : tables) {
52-
data.addAll(table.getData());
51+
private static void assertIsTrue(boolean expression, String message) {
52+
if (!expression) {
53+
throw new IllegalArgumentException(message);
5354
}
54-
this.report = report;
55-
this.data = data;
5655
}
5756

58-
@SafeVarargs
59-
public static <T> WrappingReportTable<T> of(BrokerReport report, Collection<T>... dataset) {
60-
return new WrappingReportTable<>(report, dataset);
57+
@Override
58+
public BrokerReport getReport() {
59+
return reportTable.getReport();
6160
}
6261

63-
@SafeVarargs
64-
public WrappingReportTable(BrokerReport report, Collection<RowType>... dataset) {
65-
List<RowType> data = new ArrayList<>();
66-
for (Collection<RowType> d : dataset) {
67-
data.addAll(d);
68-
}
69-
this.report = report;
70-
this.data = data;
62+
@Override
63+
public List<RowType> getData() {
64+
return reportTable.getData();
7165
}
7266

73-
private static void assertIsTrue(boolean expression, String message) {
74-
if (!expression) {
75-
throw new IllegalArgumentException(message);
67+
@Getter
68+
private static class EagerWrappingReportTable<RowType> implements ReportTable<RowType> {
69+
private final BrokerReport report;
70+
private final List<RowType> data;
71+
72+
@SafeVarargs
73+
public EagerWrappingReportTable(BrokerReport report, Collection<RowType>... dataset) {
74+
List<RowType> data = new ArrayList<>();
75+
for (Collection<RowType> d : dataset) {
76+
data.addAll(d);
77+
}
78+
this.report = report;
79+
this.data = Collections.unmodifiableList(data);
7680
}
7781
}
7882

79-
@Override
80-
public List<RowType> getData() {
81-
return Collections.unmodifiableList(data);
83+
@RequiredArgsConstructor
84+
private static class LazyWrappingReportTable<RowType> implements ReportTable<RowType> {
85+
@Getter
86+
private final BrokerReport report;
87+
private final ReportTable<RowType>[] tables;
88+
89+
@Override
90+
public List<RowType> getData() {
91+
List<RowType> data = new ArrayList<>();
92+
for (ReportTable<RowType> table : tables) {
93+
data.addAll(table.getData());
94+
}
95+
return Collections.unmodifiableList(data);
96+
}
8297
}
8398
}

0 commit comments

Comments
 (0)