Skip to content

Commit 953e878

Browse files
authored
Merge pull request #7 from spacious-team/develop
Релиз 2022.4
2 parents 9e33cbf + a6d48f2 commit 953e878

5 files changed

Lines changed: 54 additions & 79 deletions

File tree

pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424

2525
<groupId>org.spacious-team</groupId>
2626
<artifactId>table-wrapper-xml-impl</artifactId>
27-
<version>2022.2</version>
27+
<version>2022.4</version>
2828
<packaging>jar</packaging>
2929

3030
<name>Table Wrapper API Xml SpreadsheetML Implementation</name>
@@ -71,7 +71,7 @@
7171
<dependency>
7272
<groupId>com.github.spacious-team</groupId>
7373
<artifactId>table-wrapper-api</artifactId>
74-
<version>2022.2</version>
74+
<version>2022.4</version>
7575
</dependency>
7676
<dependency>
7777
<groupId>com.github.VEINHORN</groupId>

src/main/java/org/spacious_team/table_wrapper/xml/XmlReportPage.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,16 +26,22 @@
2626
import org.spacious_team.table_wrapper.api.TableCellAddress;
2727

2828
import java.util.function.BiPredicate;
29+
import java.util.function.Predicate;
2930

3031
@RequiredArgsConstructor
3132
public class XmlReportPage extends AbstractReportPage<XmlTableRow> {
3233

3334
private final Worksheet sheet;
3435

3536
@Override
36-
public TableCellAddress find(Object value, int startRow, int endRow, int startColumn, int endColumn,
37-
BiPredicate<String, Object> stringPredicate) {
38-
return XmlTableHelper.find(sheet, value, startRow, endRow, startColumn, endColumn, stringPredicate);
37+
public TableCellAddress find(Object value, int startRow, int endRow, int startColumn, int endColumn) {
38+
return XmlTableHelper.find(sheet, value, startRow, endRow, startColumn, endColumn);
39+
}
40+
41+
@Override
42+
public TableCellAddress find(int startRow, int endRow, int startColumn, int endColumn, Predicate<Object> cellValuePredicate) {
43+
return XmlTableHelper.find(sheet, startRow, endRow, startColumn, endColumn,
44+
(cell) -> cellValuePredicate.test(cell.getData()));
3945
}
4046

4147
@Override

src/main/java/org/spacious_team/table_wrapper/xml/XmlTableFactory.java

Lines changed: 5 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import org.spacious_team.table_wrapper.api.AbstractTableFactory;
2222
import org.spacious_team.table_wrapper.api.ReportPage;
2323
import org.spacious_team.table_wrapper.api.Table;
24+
import org.spacious_team.table_wrapper.api.TableCellRange;
2425
import org.spacious_team.table_wrapper.api.TableColumnDescription;
2526

2627
public class XmlTableFactory extends AbstractTableFactory<XmlReportPage> {
@@ -32,53 +33,13 @@ public XmlTableFactory() {
3233
@Override
3334
public Table create(ReportPage reportPage,
3435
String tableName,
35-
String lastRowString,
36+
TableCellRange tableRange,
3637
Class<? extends TableColumnDescription> headerDescription,
3738
int headersRowCount) {
38-
return new XmlTable(cast(reportPage),
39+
return new XmlTable(
40+
cast(reportPage),
3941
tableName,
40-
reportPage.getTableCellRange(tableName, headersRowCount, lastRowString),
41-
headerDescription,
42-
headersRowCount);
43-
}
44-
45-
@Override
46-
public Table create(ReportPage reportPage,
47-
String tableName,
48-
Class<? extends TableColumnDescription> headerDescription,
49-
int headersRowCount) {
50-
return new XmlTable(cast(reportPage),
51-
tableName,
52-
reportPage.getTableCellRange(tableName, headersRowCount),
53-
headerDescription,
54-
headersRowCount);
55-
}
56-
57-
@Override
58-
public Table createNameless(ReportPage reportPage,
59-
String providedTableName,
60-
String firstRowString,
61-
String lastRowString,
62-
Class<? extends TableColumnDescription> headerDescription,
63-
int headersRowCount) {
64-
return new XmlTable(cast(reportPage),
65-
providedTableName,
66-
reportPage.getTableCellRange(firstRowString, headersRowCount, lastRowString)
67-
.addRowsToTop(1),
68-
headerDescription,
69-
headersRowCount);
70-
}
71-
72-
@Override
73-
public Table createNameless(ReportPage reportPage,
74-
String providedTableName,
75-
String firstRowString,
76-
Class<? extends TableColumnDescription> headerDescription,
77-
int headersRowCount) {
78-
return new XmlTable(cast(reportPage),
79-
providedTableName,
80-
reportPage.getTableCellRange(firstRowString, headersRowCount)
81-
.addRowsToTop(1),
42+
tableRange,
8243
headerDescription,
8344
headersRowCount);
8445
}

src/main/java/org/spacious_team/table_wrapper/xml/XmlTableHelper.java

Lines changed: 35 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -24,41 +24,42 @@
2424
import org.spacious_team.table_wrapper.api.TableCellAddress;
2525

2626
import java.util.Date;
27+
import java.util.Objects;
2728
import java.util.function.BiPredicate;
29+
import java.util.function.Predicate;
2830

2931
import static org.spacious_team.table_wrapper.api.TableCellAddress.NOT_FOUND;
3032

3133
class XmlTableHelper {
3234

33-
static TableCellAddress find(Worksheet sheet, Object value, int startRow, int endRow, int startColumn, int endColumn,
34-
BiPredicate<String, Object> stringPredicate) {
35-
int tableLastRowNum = getLastRowNum(sheet);
36-
if (tableLastRowNum == -1) {
37-
return NOT_FOUND;
38-
} else if (endRow > tableLastRowNum) {
39-
endRow = tableLastRowNum + 1; // endRow is exclusive
40-
}
41-
if (value instanceof Number) {
42-
value = ((Number) value).doubleValue();
43-
}
44-
for(int rowNum = startRow; rowNum < endRow; rowNum++) {
35+
static TableCellAddress find(Worksheet sheet, Object expected,
36+
int startRow, int endRow,
37+
int startColumn, int endColumn) {
38+
return find(sheet, startRow, endRow, startColumn, endColumn, equalsPredicate(expected));
39+
}
40+
41+
static TableCellAddress find(Worksheet sheet, int startRow, int endRow,
42+
int startColumn, int endColumn,
43+
Predicate<Cell> predicate) {
44+
startRow = Math.max(0, startRow);
45+
endRow = Math.min(endRow, getLastRowNum(sheet) + 1); // endRow is exclusive
46+
for (int rowNum = startRow; rowNum < endRow; rowNum++) {
4547
Row row = sheet.getRowAt(rowNum + 1);
46-
TableCellAddress address = find(row, value, startColumn, endColumn, stringPredicate);
48+
TableCellAddress address = find(row, startColumn, endColumn, predicate);
4749
if (address != NOT_FOUND) {
4850
return address;
4951
}
5052
}
5153
return NOT_FOUND;
5254
}
5355

54-
static TableCellAddress find(Row row, Object value, int startColumn, int endColumn,
55-
BiPredicate<String, Object> stringPredicate) {
56+
static TableCellAddress find(Row row, int startColumn, int endColumn, Predicate<Cell> predicate) {
5657
if (row != null) {
5758
for (Cell cell : row.getCells()) {
5859
if (cell != null) {
5960
int column = cell.getIndex() - 1;
6061
if (startColumn <= column && column < endColumn) {
61-
if (compare(value, cell, stringPredicate)) {
62+
if (predicate.test(cell)) {
6263
return new TableCellAddress(row.getIndex() - 1, column);
6364
}
6465
}
@@ -72,19 +73,25 @@ static int getLastRowNum(Worksheet sheet) {
7273
return sheet.getTable().getRowMap().lastKey() - 1;
7374
}
7475

75-
private static boolean compare(Object value, Cell cell, BiPredicate<String, Object> stringPredicate) {
76-
if (value instanceof String) {
77-
return stringPredicate.test(cell.getData$(), value);
78-
} else if (value instanceof Integer || value instanceof Long) {
79-
return cell.intValue() == ((Number) value).longValue();
80-
} else if (value instanceof Number) {
81-
return Math.abs(cell.doubleValue() - ((Number) value).doubleValue()) < 1e-6;
82-
} else if (value instanceof Boolean) {
83-
return value.equals(cell.booleanValue());
84-
} else if (value instanceof Date) {
85-
return value.equals(cell.getData());
76+
static Predicate<Cell> equalsPredicate(Object expected) {
77+
if (expected instanceof String) {
78+
return (cell) -> Objects.equals(cell.getData$(), expected);
79+
} else if (expected instanceof Integer || expected instanceof Long) {
80+
return (cell) -> {
81+
Object data = cell.getData();
82+
return (data instanceof Number) &&
83+
((Number) data).longValue() == ((Number) expected).longValue();
84+
};
85+
} else if (expected instanceof Number) {
86+
return (cell) -> {
87+
Object data = cell.getData();
88+
return (data instanceof Number) &&
89+
Math.abs(((Number) data).doubleValue() - ((Number) expected).doubleValue()) < 1e-6;
90+
};
91+
} else if (expected instanceof Boolean) {
92+
return (cell) -> Objects.equals(expected, cell.booleanValue());
8693
} else {
87-
return false;
94+
return (cell) -> Objects.equals(expected, cell.getData());
8895
}
8996
}
9097
}

src/main/java/org/spacious_team/table_wrapper/xml/XmlTableRow.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import java.util.Iterator;
2929

3030
import static org.spacious_team.table_wrapper.api.TableCellAddress.NOT_FOUND;
31+
import static org.spacious_team.table_wrapper.xml.XmlTableHelper.equalsPredicate;
3132

3233
@RequiredArgsConstructor
3334
public class XmlTableRow extends AbstractReportPageRow {
@@ -57,8 +58,8 @@ public int getLastCellNum() {
5758
}
5859

5960
@Override
60-
public boolean rowContains(Object value) {
61-
return XmlTableHelper.find(row, value, 0, Integer.MAX_VALUE, String::equals) != NOT_FOUND;
61+
public boolean rowContains(Object expected) {
62+
return XmlTableHelper.find(row, 0, Integer.MAX_VALUE, equalsPredicate(expected)) != NOT_FOUND;
6263
}
6364

6465
@Override

0 commit comments

Comments
 (0)