embulk-parser-poi_excel 0.1.4 → 0.1.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +52 -5
- data/build.gradle +18 -8
- data/src/main/java/org/embulk/parser/poi_excel/PoiExcelColumnValueType.java +4 -0
- data/src/main/java/org/embulk/parser/poi_excel/PoiExcelParserPlugin.java +80 -3
- data/src/main/java/org/embulk/parser/poi_excel/bean/PoiExcelColumnBean.java +103 -6
- data/src/main/java/org/embulk/parser/poi_excel/bean/PoiExcelColumnIndex.java +74 -37
- data/src/main/java/org/embulk/parser/poi_excel/bean/util/PoiExcelCellAddress.java +50 -0
- data/src/main/java/org/embulk/parser/poi_excel/visitor/PoiExcelCellFontVisitor.java +0 -6
- data/src/main/java/org/embulk/parser/poi_excel/visitor/PoiExcelCellStyleVisitor.java +11 -11
- data/src/main/java/org/embulk/parser/poi_excel/visitor/PoiExcelCellTypeVisitor.java +52 -0
- data/src/main/java/org/embulk/parser/poi_excel/visitor/PoiExcelCellValueVisitor.java +106 -37
- data/src/main/java/org/embulk/parser/poi_excel/visitor/PoiExcelClientAnchorVisitor.java +1 -1
- data/src/main/java/org/embulk/parser/poi_excel/visitor/PoiExcelColumnVisitor.java +64 -4
- data/src/main/java/org/embulk/parser/poi_excel/visitor/PoiExcelVisitorFactory.java +14 -0
- data/src/main/java/org/embulk/parser/poi_excel/visitor/embulk/BooleanCellVisitor.java +5 -0
- data/src/main/java/org/embulk/parser/poi_excel/visitor/embulk/CellVisitor.java +3 -0
- data/src/main/java/org/embulk/parser/poi_excel/visitor/embulk/DoubleCellVisitor.java +5 -0
- data/src/main/java/org/embulk/parser/poi_excel/visitor/embulk/LongCellVisitor.java +5 -0
- data/src/main/java/org/embulk/parser/poi_excel/visitor/embulk/StringCellVisitor.java +30 -2
- data/src/main/java/org/embulk/parser/poi_excel/visitor/embulk/TimestampCellVisitor.java +5 -0
- data/src/main/java/org/embulk/parser/poi_excel/visitor/util/MergedRegionMap.java +51 -0
- data/src/test/java/org/embulk/parser/poi_excel/TestPoiExcelParserPlugin.java +27 -79
- data/src/test/java/org/embulk/parser/poi_excel/TestPoiExcelParserPlugin_cellAddress.java +69 -0
- data/src/test/java/org/embulk/parser/poi_excel/TestPoiExcelParserPlugin_cellComment.java +1 -1
- data/src/test/java/org/embulk/parser/poi_excel/TestPoiExcelParserPlugin_cellError.java +1 -1
- data/src/test/java/org/embulk/parser/poi_excel/TestPoiExcelParserPlugin_cellFont.java +1 -1
- data/src/test/java/org/embulk/parser/poi_excel/TestPoiExcelParserPlugin_cellStyle.java +14 -14
- data/src/test/java/org/embulk/parser/poi_excel/TestPoiExcelParserPlugin_cellType.java +79 -0
- data/src/test/java/org/embulk/parser/poi_excel/TestPoiExcelParserPlugin_columnNumber.java +1 -1
- data/src/test/java/org/embulk/parser/poi_excel/TestPoiExcelParserPlugin_constant.java +1 -1
- data/src/test/java/org/embulk/parser/poi_excel/TestPoiExcelParserPlugin_convertError.java +1 -1
- data/src/test/java/org/embulk/parser/poi_excel/TestPoiExcelParserPlugin_formula.java +90 -0
- data/src/test/java/org/embulk/parser/poi_excel/TestPoiExcelParserPlugin_mergedCell.java +89 -0
- data/src/test/java/org/embulk/parser/poi_excel/TestPoiExcelParserPlugin_sheets.java +35 -1
- metadata +26 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '058cae76dc2aff62982491ddd1d29f0bc707d030'
|
4
|
+
data.tar.gz: 4b7652888f66faa0b3b3653cda9c3ba4b9d49887
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b700c88e34a05edd16d1d7444053540fae8f8ef7d596c709505f070ca4d3d0582e9c69da6cc253b97a595cbe5d3aad60f1a1bbb75b90110e573575ba32c4d752
|
7
|
+
data.tar.gz: a36bc92ebd495a908f98c53cb92ebd3c84c294df3cde9d2ea926f0c452c9a6d2fcce7646f9f906a6ed25b21fb14de1a2ecc6ea5ee6e8aeec10c8b46346efd070
|
data/README.md
CHANGED
@@ -28,12 +28,12 @@ in:
|
|
28
28
|
```
|
29
29
|
|
30
30
|
if omit **value**, specified `cell_value`.
|
31
|
-
if omit **column_number** when **
|
31
|
+
if omit **column_number** when **value** is `cell_value`, specified next column.
|
32
32
|
|
33
33
|
|
34
34
|
## Configuration
|
35
35
|
|
36
|
-
* **sheets**: sheet name. (list of string, required)
|
36
|
+
* **sheets**: sheet name. can use wildcards `*`, `?`. (list of string, required)
|
37
37
|
* **skip_header_lines**: skip rows. (integer, default: `0`)
|
38
38
|
* **columns**: column definition. see below. (hash, required)
|
39
39
|
* **sheet_options**: sheet option. see below. (hash, default: null)
|
@@ -44,9 +44,15 @@ if omit **column_number** when **valus** is `cell_value`, specified next column.
|
|
44
44
|
* **type**: Embulk column type. (string, required)
|
45
45
|
* **value**: value type. see below. (string, defualt: `cell_value`)
|
46
46
|
* **column_number**: Excel column number. see below. (string, default: next column)
|
47
|
+
* **cell_address**: Excel cell address such as `A1`, `Sheet1!B3`. only one of `column_number`, `cell_address` can be specified. (string, not required)
|
48
|
+
* **numeric_format**: format of numeric(double) to string such as `%4.2f`. (default: Java's Double.toString())
|
47
49
|
* **attribute_name**: use with value `cell_style`, `cell_font`, etc. see below. (list of string)
|
48
50
|
* **on_cell_error**: processing method of Cell error. see below. (string, default: `constant`)
|
51
|
+
* **formula_handling**: processing method of formula. see below. (`evaluate` or `cashed_value`. default: `evaluate`)
|
52
|
+
* **on_evaluate_error**: processing method of evaluate formula error. see below. (string, default: `exception`)
|
53
|
+
* **formula_replace**: replace formula before evaluate. see below.
|
49
54
|
* **on_convert_error**: processing method of convert error. see below. (string, default: `exception`)
|
55
|
+
* **search_merged_cell**: search merged cell when cell is BLANK. one of `none`, `linear_search`, `tree_search`. (string, default: `tree_search`)
|
50
56
|
|
51
57
|
### value
|
52
58
|
|
@@ -55,6 +61,8 @@ if omit **column_number** when **valus** is `cell_value`, specified next column.
|
|
55
61
|
* `cell_style`: all cell style attributes. returned json string. see **attribute_name**. (**type** required `string`)
|
56
62
|
* `cell_font`: all cell font attributes. returned json string. see **attribute_name**. (**type** required `string`)
|
57
63
|
* `cell_comment`: all cell comment attributes. returned json string. see **attribute_name**. (**type** required `string`)
|
64
|
+
* `cell_type`: cell type. returned Cell.getCellType() of POI.
|
65
|
+
* `cell_cached_type`: cell cached formula result type. returned Cell.getCachedFormulaResultType() of POI when CellType==FORMULA, otherwise same as `cell_type` (returned Cell.getCellType()).
|
58
66
|
* `sheet_name`: sheet name.
|
59
67
|
* `row_number`: row number(1 origin).
|
60
68
|
* `column_number`: column number(1 origin).
|
@@ -120,11 +128,50 @@ Processing method of Cell error (`#DIV/0!`, `#REF!`, etc).
|
|
120
128
|
```
|
121
129
|
|
122
130
|
* `constant`: set null. (default)
|
123
|
-
* `constant.`*value*: set value.
|
131
|
+
* `constant.`*value*: set specified value.
|
124
132
|
* `error_code`: set error code.
|
125
133
|
* `exception`: throw exception.
|
126
134
|
|
127
135
|
|
136
|
+
### formula_handling
|
137
|
+
|
138
|
+
Processing method of formula.
|
139
|
+
|
140
|
+
```yaml
|
141
|
+
columns:
|
142
|
+
- {name: foo, type: string, column_number: A, value: cell_value, formula_handling: cashed_value}
|
143
|
+
```
|
144
|
+
|
145
|
+
* `evaluate`: evaluate formula. (default)
|
146
|
+
* `cashed_value`: cashed value in cell.
|
147
|
+
|
148
|
+
|
149
|
+
### on_evaluate_error
|
150
|
+
|
151
|
+
Processing method of evaluate formula error.
|
152
|
+
|
153
|
+
```yaml
|
154
|
+
columns:
|
155
|
+
- {name: foo, type: string, column_number: A, value: cell_value, on_evaluate_error: constant}
|
156
|
+
```
|
157
|
+
|
158
|
+
* `constant`: set null.
|
159
|
+
* `constant.`*value*: set value.
|
160
|
+
* `exception`: throw exception. (default)
|
161
|
+
|
162
|
+
|
163
|
+
### formula_replace
|
164
|
+
|
165
|
+
Replace formula before evaluate.
|
166
|
+
|
167
|
+
```yaml
|
168
|
+
columns:
|
169
|
+
- {name: foo, type: string, column_number: A, value: cell_value, formula_replace: [{regex: aaa, to: "A${row}"}, {regex: bbb, to: "B${row}"}]}
|
170
|
+
```
|
171
|
+
|
172
|
+
`${row}` is replaced with the current row number.
|
173
|
+
|
174
|
+
|
128
175
|
### on_convert_error
|
129
176
|
|
130
177
|
Processing method of convert error. ex) Excel boolean to Embulk timestamp
|
@@ -141,7 +188,7 @@ Processing method of convert error. ex) Excel boolean to Embulk timestamp
|
|
141
188
|
|
142
189
|
### sheet_options
|
143
190
|
|
144
|
-
Options of
|
191
|
+
Options of individual sheet.
|
145
192
|
|
146
193
|
```yaml
|
147
194
|
parser:
|
@@ -165,7 +212,7 @@ Options of indivisual sheet.
|
|
165
212
|
```
|
166
213
|
|
167
214
|
**sheet_options** is map of sheet name.
|
168
|
-
Map values are **skip_header_lines**, **
|
215
|
+
Map values are **skip_header_lines**, **columns**.
|
169
216
|
|
170
217
|
**columns** is map of column name.
|
171
218
|
Map values are same **columns** in **parser** (excluding `name`, `type`).
|
data/build.gradle
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
plugins {
|
2
2
|
id "com.jfrog.bintray" version "1.1"
|
3
|
-
id "com.github.jruby-gradle.base" version "
|
3
|
+
id "com.github.jruby-gradle.base" version "1.5.0"
|
4
4
|
id "java"
|
5
5
|
id "eclipse"
|
6
6
|
}
|
@@ -13,7 +13,7 @@ configurations {
|
|
13
13
|
provided
|
14
14
|
}
|
15
15
|
|
16
|
-
version = "0.1.
|
16
|
+
version = "0.1.10"
|
17
17
|
|
18
18
|
sourceCompatibility = 1.7
|
19
19
|
targetCompatibility = 1.7
|
@@ -23,8 +23,10 @@ dependencies {
|
|
23
23
|
provided "org.embulk:embulk-core:0.7.5"
|
24
24
|
compile "org.embulk:embulk-standards:0.7.5"
|
25
25
|
// compile "YOUR_JAR_DEPENDENCY_GROUP:YOUR_JAR_DEPENDENCY_MODULE:YOUR_JAR_DEPENDENCY_VERSION"
|
26
|
-
compile group: 'org.apache.poi', name : 'poi', version: '3.
|
27
|
-
compile
|
26
|
+
compile group: 'org.apache.poi', name : 'poi', version: '3.17'
|
27
|
+
compile(group: 'org.apache.poi', name : 'poi-ooxml', version: '3.17') {
|
28
|
+
exclude group: 'stax', module: 'stax-api'
|
29
|
+
}
|
28
30
|
testCompile "junit:junit:4.+"
|
29
31
|
}
|
30
32
|
|
@@ -36,14 +38,22 @@ task classpath(type: Copy, dependsOn: ["jar"]) {
|
|
36
38
|
clean { delete "classpath" }
|
37
39
|
|
38
40
|
task gem(type: JRubyExec, dependsOn: ["gemspec", "classpath"]) {
|
39
|
-
jrubyArgs "-
|
40
|
-
script "
|
41
|
+
jrubyArgs "-S"
|
42
|
+
script "gem"
|
43
|
+
scriptArgs "build", "${project.name}.gemspec"
|
41
44
|
doLast { ant.move(file: "${project.name}-${project.version}.gem", todir: "pkg") }
|
42
45
|
}
|
43
46
|
|
44
47
|
task gemPush(type: JRubyExec, dependsOn: ["gem"]) {
|
45
|
-
jrubyArgs "-
|
46
|
-
script "
|
48
|
+
jrubyArgs "-S"
|
49
|
+
script "gem"
|
50
|
+
scriptArgs "push", "pkg/${project.name}-${project.version}.gem"
|
51
|
+
}
|
52
|
+
|
53
|
+
task gemUnpack(type: JRubyExec) {
|
54
|
+
jrubyArgs "-S"
|
55
|
+
script "gem"
|
56
|
+
scriptArgs "unpack", "pkg/${project.name}-${project.version}.gem"
|
47
57
|
}
|
48
58
|
|
49
59
|
task "package"(dependsOn: ["gemspec", "classpath"]) << {
|
@@ -11,6 +11,10 @@ public enum PoiExcelColumnValueType {
|
|
11
11
|
CELL_FONT(true, false),
|
12
12
|
/** cell comment */
|
13
13
|
CELL_COMMENT(true, false),
|
14
|
+
/** cell type */
|
15
|
+
CELL_TYPE(true, false),
|
16
|
+
/** cell CachedFormulaResultType */
|
17
|
+
CELL_CACHED_TYPE(true, false),
|
14
18
|
/** sheet name */
|
15
19
|
SHEET_NAME(false, false),
|
16
20
|
/** row number (1 origin) */
|
@@ -2,8 +2,11 @@ package org.embulk.parser.poi_excel;
|
|
2
2
|
|
3
3
|
import java.io.IOException;
|
4
4
|
import java.util.ArrayList;
|
5
|
+
import java.util.LinkedHashSet;
|
5
6
|
import java.util.List;
|
6
7
|
import java.util.Map;
|
8
|
+
import java.util.Set;
|
9
|
+
import java.util.regex.Pattern;
|
7
10
|
|
8
11
|
import org.apache.poi.EncryptedDocumentException;
|
9
12
|
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
|
@@ -93,6 +96,11 @@ public class PoiExcelParserPlugin implements ParserPlugin {
|
|
93
96
|
@ConfigDefault("null")
|
94
97
|
public Optional<String> getColumnNumber();
|
95
98
|
|
99
|
+
// A1,B2,... or Sheet1!A1
|
100
|
+
@Config("cell_address")
|
101
|
+
@ConfigDefault("null")
|
102
|
+
public Optional<String> getCellAddress();
|
103
|
+
|
96
104
|
// use when value_type=cell_style, cell_font, ...
|
97
105
|
@Config("attribute_name")
|
98
106
|
@ConfigDefault("null")
|
@@ -100,11 +108,19 @@ public class PoiExcelParserPlugin implements ParserPlugin {
|
|
100
108
|
}
|
101
109
|
|
102
110
|
public interface ColumnCommonOptionTask extends Task {
|
111
|
+
// format of numeric(double) to string
|
112
|
+
@Config("numeric_format")
|
113
|
+
@ConfigDefault("null")
|
114
|
+
public Optional<String> getNumericFormat();
|
103
115
|
|
104
116
|
// search merged cell if cellType=BLANK
|
105
117
|
@Config("search_merged_cell")
|
106
118
|
@ConfigDefault("null")
|
107
|
-
public Optional<
|
119
|
+
public Optional<String> getSearchMergedCell();
|
120
|
+
|
121
|
+
@Config("formula_handling")
|
122
|
+
@ConfigDefault("null")
|
123
|
+
public Optional<String> getFormulaHandling();
|
108
124
|
|
109
125
|
@Config("formula_replace")
|
110
126
|
@ConfigDefault("null")
|
@@ -166,9 +182,60 @@ public class PoiExcelParserPlugin implements ParserPlugin {
|
|
166
182
|
throw new RuntimeException(e);
|
167
183
|
}
|
168
184
|
|
169
|
-
|
185
|
+
List<String> list = resolveSheetName(workbook, sheetNames);
|
186
|
+
if (log.isDebugEnabled()) {
|
187
|
+
log.debug("resolved sheet names={}", list);
|
188
|
+
}
|
189
|
+
run(task, schema, workbook, list, output);
|
190
|
+
}
|
191
|
+
}
|
192
|
+
}
|
193
|
+
|
194
|
+
private List<String> resolveSheetName(Workbook workbook, List<String> sheetNames) {
|
195
|
+
Set<String> set = new LinkedHashSet<>();
|
196
|
+
for (String s : sheetNames) {
|
197
|
+
if (s.contains("*") || s.contains("?")) {
|
198
|
+
int length = s.length();
|
199
|
+
StringBuilder sb = new StringBuilder(length * 2);
|
200
|
+
StringBuilder buf = new StringBuilder(32);
|
201
|
+
for (int i = 0; i < length;) {
|
202
|
+
int c = s.codePointAt(i);
|
203
|
+
switch (c) {
|
204
|
+
case '*':
|
205
|
+
if (buf.length() > 0) {
|
206
|
+
sb.append(Pattern.quote(buf.toString()));
|
207
|
+
buf.setLength(0);
|
208
|
+
}
|
209
|
+
sb.append(".*");
|
210
|
+
break;
|
211
|
+
case '?':
|
212
|
+
if (buf.length() > 0) {
|
213
|
+
sb.append(Pattern.quote(buf.toString()));
|
214
|
+
buf.setLength(0);
|
215
|
+
}
|
216
|
+
sb.append(".");
|
217
|
+
break;
|
218
|
+
default:
|
219
|
+
buf.appendCodePoint(c);
|
220
|
+
break;
|
221
|
+
}
|
222
|
+
i += Character.charCount(c);
|
223
|
+
}
|
224
|
+
if (buf.length() > 0) {
|
225
|
+
sb.append(Pattern.quote(buf.toString()));
|
226
|
+
}
|
227
|
+
String regex = sb.toString();
|
228
|
+
for (Sheet sheet : workbook) {
|
229
|
+
String name = sheet.getSheetName();
|
230
|
+
if (name.matches(regex)) {
|
231
|
+
set.add(name);
|
232
|
+
}
|
233
|
+
}
|
234
|
+
} else {
|
235
|
+
set.add(s);
|
170
236
|
}
|
171
237
|
}
|
238
|
+
return new ArrayList<>(set);
|
172
239
|
}
|
173
240
|
|
174
241
|
protected void run(PluginTask task, Schema schema, Workbook workbook, List<String> sheetNames, PageOutput output) {
|
@@ -193,18 +260,28 @@ public class PoiExcelParserPlugin implements ParserPlugin {
|
|
193
260
|
|
194
261
|
int count = 0;
|
195
262
|
for (Row row : sheet) {
|
196
|
-
|
263
|
+
int rowIndex = row.getRowNum();
|
264
|
+
if (rowIndex < skipHeaderLines) {
|
265
|
+
log.debug("row({}) skipped", rowIndex);
|
197
266
|
continue;
|
198
267
|
}
|
268
|
+
if (log.isDebugEnabled()) {
|
269
|
+
log.debug("row({}) start", rowIndex);
|
270
|
+
}
|
199
271
|
|
200
272
|
visitor.setRow(row);
|
201
273
|
schema.visitColumns(visitor);
|
202
274
|
pageBuilder.addRecord();
|
203
275
|
|
204
276
|
if (++count >= flushCount) {
|
277
|
+
log.trace("flush");
|
205
278
|
pageBuilder.flush();
|
206
279
|
count = 0;
|
207
280
|
}
|
281
|
+
|
282
|
+
if (log.isDebugEnabled()) {
|
283
|
+
log.debug("row({}) end", rowIndex);
|
284
|
+
}
|
208
285
|
}
|
209
286
|
pageBuilder.flush();
|
210
287
|
}
|
@@ -11,6 +11,7 @@ import org.embulk.parser.poi_excel.PoiExcelParserPlugin.ColumnCommonOptionTask;
|
|
11
11
|
import org.embulk.parser.poi_excel.PoiExcelParserPlugin.ColumnOptionTask;
|
12
12
|
import org.embulk.parser.poi_excel.PoiExcelParserPlugin.FormulaReplaceTask;
|
13
13
|
import org.embulk.parser.poi_excel.bean.PoiExcelColumnBean.ErrorStrategy.Strategy;
|
14
|
+
import org.embulk.parser.poi_excel.bean.util.PoiExcelCellAddress;
|
14
15
|
import org.embulk.spi.Column;
|
15
16
|
|
16
17
|
import com.google.common.base.Optional;
|
@@ -107,6 +108,25 @@ public class PoiExcelColumnBean {
|
|
107
108
|
return Optional.absent();
|
108
109
|
}
|
109
110
|
|
111
|
+
private Optional<PoiExcelCellAddress> cellAddress;
|
112
|
+
|
113
|
+
public PoiExcelCellAddress getCellAddress() {
|
114
|
+
if (cellAddress == null) {
|
115
|
+
this.cellAddress = initializeCellAddress();
|
116
|
+
}
|
117
|
+
return cellAddress.orNull();
|
118
|
+
}
|
119
|
+
|
120
|
+
protected Optional<PoiExcelCellAddress> initializeCellAddress() {
|
121
|
+
for (ColumnOptionTask task : columnTaskList) {
|
122
|
+
Optional<String> option = task.getCellAddress();
|
123
|
+
if (option.isPresent()) {
|
124
|
+
return Optional.of(new PoiExcelCellAddress(option.get()));
|
125
|
+
}
|
126
|
+
}
|
127
|
+
return Optional.absent();
|
128
|
+
}
|
129
|
+
|
110
130
|
protected abstract class CacheValue<T> {
|
111
131
|
private T value;
|
112
132
|
|
@@ -231,23 +251,100 @@ public class PoiExcelColumnBean {
|
|
231
251
|
return attributeName.get();
|
232
252
|
}
|
233
253
|
|
234
|
-
private CacheValue<
|
254
|
+
private CacheValue<String> numericFormat = new CacheValue<String>() {
|
235
255
|
|
236
256
|
@Override
|
237
|
-
protected Optional<
|
238
|
-
return task.
|
257
|
+
protected Optional<String> getTaskValue(ColumnCommonOptionTask task) {
|
258
|
+
return task.getNumericFormat();
|
239
259
|
}
|
240
260
|
|
241
261
|
@Override
|
242
|
-
protected
|
243
|
-
return
|
262
|
+
protected String getDefaultValue() {
|
263
|
+
return "";
|
244
264
|
}
|
245
265
|
};
|
246
266
|
|
247
|
-
public
|
267
|
+
public String getNumericFormat() {
|
268
|
+
return numericFormat.get();
|
269
|
+
}
|
270
|
+
|
271
|
+
public enum SearchMergedCell {
|
272
|
+
NONE, LINEAR_SEARCH, TREE_SEARCH
|
273
|
+
}
|
274
|
+
|
275
|
+
private CacheValue<SearchMergedCell> searchMergedCell = new CacheValue<SearchMergedCell>() {
|
276
|
+
|
277
|
+
@Override
|
278
|
+
protected Optional<SearchMergedCell> getTaskValue(ColumnCommonOptionTask task) {
|
279
|
+
Optional<String> option = task.getSearchMergedCell();
|
280
|
+
String value = option.or("null").trim();
|
281
|
+
switch (value.toLowerCase()) {
|
282
|
+
case "null":
|
283
|
+
return Optional.absent();
|
284
|
+
case "true": // compatibility ver 0.1.7
|
285
|
+
return Optional.of(getDefaultValue());
|
286
|
+
case "false": // compatibility ver 0.1.7
|
287
|
+
return Optional.of(SearchMergedCell.NONE);
|
288
|
+
default:
|
289
|
+
break;
|
290
|
+
}
|
291
|
+
try {
|
292
|
+
return Optional.of(SearchMergedCell.valueOf(value.toUpperCase()));
|
293
|
+
} catch (Exception e) {
|
294
|
+
List<String> list = new ArrayList<>();
|
295
|
+
for (SearchMergedCell s : SearchMergedCell.values()) {
|
296
|
+
list.add(s.name().toLowerCase());
|
297
|
+
}
|
298
|
+
throw new ConfigException(MessageFormat.format("illegal search_merged_cell={0}. expected={1}", value,
|
299
|
+
list), e);
|
300
|
+
}
|
301
|
+
}
|
302
|
+
|
303
|
+
@Override
|
304
|
+
protected SearchMergedCell getDefaultValue() {
|
305
|
+
return SearchMergedCell.TREE_SEARCH;
|
306
|
+
}
|
307
|
+
};
|
308
|
+
|
309
|
+
public SearchMergedCell getSearchMergedCell() {
|
248
310
|
return searchMergedCell.get();
|
249
311
|
}
|
250
312
|
|
313
|
+
public enum FormulaHandling {
|
314
|
+
EVALUATE, CASHED_VALUE
|
315
|
+
}
|
316
|
+
|
317
|
+
private CacheValue<FormulaHandling> formulaHandling = new CacheValue<FormulaHandling>() {
|
318
|
+
|
319
|
+
@Override
|
320
|
+
protected Optional<FormulaHandling> getTaskValue(ColumnCommonOptionTask task) {
|
321
|
+
Optional<String> option = task.getFormulaHandling();
|
322
|
+
String value = option.or("null");
|
323
|
+
if ("null".equalsIgnoreCase(value)) {
|
324
|
+
return Optional.absent();
|
325
|
+
}
|
326
|
+
try {
|
327
|
+
return Optional.of(FormulaHandling.valueOf(value.trim().toUpperCase()));
|
328
|
+
} catch (Exception e) {
|
329
|
+
List<String> list = new ArrayList<>();
|
330
|
+
for (FormulaHandling s : FormulaHandling.values()) {
|
331
|
+
list.add(s.name().toLowerCase());
|
332
|
+
}
|
333
|
+
throw new ConfigException(MessageFormat.format("illegal formula_handling={0}. expected={1}", value,
|
334
|
+
list), e);
|
335
|
+
}
|
336
|
+
}
|
337
|
+
|
338
|
+
@Override
|
339
|
+
protected FormulaHandling getDefaultValue() {
|
340
|
+
return FormulaHandling.EVALUATE;
|
341
|
+
}
|
342
|
+
};
|
343
|
+
|
344
|
+
public FormulaHandling getFormulaHandling() {
|
345
|
+
return formulaHandling.get();
|
346
|
+
}
|
347
|
+
|
251
348
|
private CacheValue<List<FormulaReplaceTask>> formulaReplace = new CacheValue<List<FormulaReplaceTask>>() {
|
252
349
|
|
253
350
|
@Override
|