diff --git a/src/main/java/com/poiji/annotation/ExcelCellName.java b/src/main/java/com/poiji/annotation/ExcelCellName.java index 53b6d64..eb5a0bb 100644 --- a/src/main/java/com/poiji/annotation/ExcelCellName.java +++ b/src/main/java/com/poiji/annotation/ExcelCellName.java @@ -32,9 +32,11 @@ /** * Delimeter for column multiname. - * + *

* Example: @ExcelCellName(value = "id,identifier", delimerer = ",") - * means that column with name 'id' will be mapped, or if no column 'id', then column 'identifier' will be mapped to this field. + * reading: column with name 'id' will be mapped into field, or if no column 'id', + * then column 'identifier' will be mapped into field. + * writing: field will be saved into column 'id' * * @return delimeter for column multiname. */ diff --git a/src/main/java/com/poiji/save/MappedFields.java b/src/main/java/com/poiji/save/MappedFields.java index c5ccea7..d04e292 100644 --- a/src/main/java/com/poiji/save/MappedFields.java +++ b/src/main/java/com/poiji/save/MappedFields.java @@ -53,7 +53,10 @@ public MappedFields parseEntity() { } else { final ExcelCellName annotation = field.getAnnotation(ExcelCellName.class); if (annotation != null) { - final String excelName = annotation.value(); + final String delimeter = annotation.delimeter(); + final String excelName = delimeter.isEmpty() + ? annotation.value() + : annotation.value().substring(0, annotation.value().indexOf(delimeter)); final int order = annotation.order(); if (order == ABSENT_ORDER) { unordered.add(field); diff --git a/src/test/java/com/poiji/deserialize/MultinameTest.java b/src/test/java/com/poiji/deserialize/MultinameTest.java new file mode 100644 index 0000000..7a9aebf --- /dev/null +++ b/src/test/java/com/poiji/deserialize/MultinameTest.java @@ -0,0 +1,40 @@ +package com.poiji.deserialize; + +import com.poiji.bind.Poiji; +import com.poiji.deserialize.model.ConcurrentEntity; +import java.io.File; +import java.util.Arrays; +import java.util.List; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import static java.util.Collections.singletonList; +import static org.hamcrest.CoreMatchers.equalTo; +import static org.junit.Assert.assertThat; + +@RunWith(Parameterized.class) +public class MultinameTest { + + private final String path; + + public MultinameTest(String path) { + this.path = path; + } + + @Parameterized.Parameters + public static List excel() { + return Arrays.asList("src/test/resources/multiname.xlsx", "src/test/resources/multiname.xls"); + } + + @Test + public void read() { + final List expected = singletonList(new ConcurrentEntity().setPrimitiveLong(1).setText("1")); + + final List actual = Poiji.fromExcel(new File(path), ConcurrentEntity.class); + + assertThat(actual, equalTo(expected)); + + } + +} diff --git a/src/test/java/com/poiji/deserialize/model/ConcurrentEntity.java b/src/test/java/com/poiji/deserialize/model/ConcurrentEntity.java index cb389d0..97577cc 100644 --- a/src/test/java/com/poiji/deserialize/model/ConcurrentEntity.java +++ b/src/test/java/com/poiji/deserialize/model/ConcurrentEntity.java @@ -13,7 +13,7 @@ public final class ConcurrentEntity { @ExcelCell(0) private long primitiveLong; - @ExcelCellName(value = "TexT") + @ExcelCellName(value = "TexT,other", delimeter = ",") private String text; } diff --git a/src/test/resources/multiname.xls b/src/test/resources/multiname.xls new file mode 100644 index 0000000..7f60dc9 Binary files /dev/null and b/src/test/resources/multiname.xls differ diff --git a/src/test/resources/multiname.xlsx b/src/test/resources/multiname.xlsx new file mode 100644 index 0000000..d2a202e Binary files /dev/null and b/src/test/resources/multiname.xlsx differ