From 4fa96d9ab69e6b35b19b2ca502aa225bebe7935a Mon Sep 17 00:00:00 2001 From: Ramesh Babu Prudhvi Date: Sat, 9 Jul 2022 17:37:12 +0530 Subject: [PATCH] Data Substitutor (#160) * [DataBind] Added Substitutor support * [DataBind] Updated Test * [DataBind] Substitutor for ExcelData * [DataBind] Cleanup * [DataBind] updated test --- selcukes-databind/pom.xml | 2 +- .../github/selcukes/databind/DataField.java | 18 ++++++++ .../databind/annotation/Interpolate.java | 30 +++++++++++++ .../selcukes/databind/excel/ExcelCell.java | 17 ++++---- .../databind/properties/PropertyField.java | 15 ++++--- .../substitute/DefaultSubstitutor.java | 30 +++++++++++++ .../databind/substitute/Substitutor.java | 25 +++++++++++ .../github/selcukes/databind/utils/Maps.java | 13 ++++-- .../databind/tests/EnvPropSubstitutor.java | 41 ++++++++++++++++++ .../databind/tests/ExcelMapperTest.java | 28 +++++++++--- .../databind/tests/PropertiesMapperTest.java | 8 +++- .../src/test/resources/TestData.xlsx | Bin 13345 -> 13374 bytes .../src/test/resources/test_config.properties | 5 ++- 13 files changed, 202 insertions(+), 30 deletions(-) create mode 100644 selcukes-databind/src/main/java/io/github/selcukes/databind/annotation/Interpolate.java create mode 100644 selcukes-databind/src/main/java/io/github/selcukes/databind/substitute/DefaultSubstitutor.java create mode 100644 selcukes-databind/src/main/java/io/github/selcukes/databind/substitute/Substitutor.java create mode 100644 selcukes-databind/src/test/java/io/github/selcukes/databind/tests/EnvPropSubstitutor.java diff --git a/selcukes-databind/pom.xml b/selcukes-databind/pom.xml index d45a2cedb..757dda373 100644 --- a/selcukes-databind/pom.xml +++ b/selcukes-databind/pom.xml @@ -11,7 +11,7 @@ selcukes-databind selcukes-databind - Selcukes Databind helps to parser JSON, YML, XML and Excel files. + Selcukes Databind helps to parser JSON, YML, XML, Properties and Excel files. 11 diff --git a/selcukes-databind/src/main/java/io/github/selcukes/databind/DataField.java b/selcukes-databind/src/main/java/io/github/selcukes/databind/DataField.java index 20248fcc5..42ecca4e1 100644 --- a/selcukes-databind/src/main/java/io/github/selcukes/databind/DataField.java +++ b/selcukes-databind/src/main/java/io/github/selcukes/databind/DataField.java @@ -16,8 +16,12 @@ package io.github.selcukes.databind; +import io.github.selcukes.databind.annotation.Interpolate; import io.github.selcukes.databind.annotation.Key; import io.github.selcukes.databind.converters.Converter; +import io.github.selcukes.databind.substitute.DefaultSubstitutor; +import io.github.selcukes.databind.substitute.Substitutor; +import io.github.selcukes.databind.utils.Reflections; import lombok.Getter; import lombok.Setter; @@ -66,6 +70,20 @@ public Optional getColumn() { return ofNullable(field.getDeclaredAnnotation(Key.class)); } + @SuppressWarnings("unchecked") + private Optional getInterpolate() { + Class entityClass = (Class) field.getDeclaringClass(); + return ofNullable(entityClass.getDeclaredAnnotation(Interpolate.class)); + } + + public Substitutor getSubstitutor() { + return getInterpolate() + .map(Interpolate::substitutor) + .map(Reflections::newInstance) + .map(Substitutor.class::cast) + .orElseGet(DefaultSubstitutor::new); + } + @SuppressWarnings("unchecked") private Converter findMatchingConverter() { return getColumn() diff --git a/selcukes-databind/src/main/java/io/github/selcukes/databind/annotation/Interpolate.java b/selcukes-databind/src/main/java/io/github/selcukes/databind/annotation/Interpolate.java new file mode 100644 index 000000000..59afd338e --- /dev/null +++ b/selcukes-databind/src/main/java/io/github/selcukes/databind/annotation/Interpolate.java @@ -0,0 +1,30 @@ +/* + * Copyright (c) Ramesh Babu Prudhvi. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.github.selcukes.databind.annotation; + +import io.github.selcukes.databind.substitute.DefaultSubstitutor; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +public @interface Interpolate { + Class substitutor() default DefaultSubstitutor.class; +} diff --git a/selcukes-databind/src/main/java/io/github/selcukes/databind/excel/ExcelCell.java b/selcukes-databind/src/main/java/io/github/selcukes/databind/excel/ExcelCell.java index 57eeeb749..b461bfe12 100644 --- a/selcukes-databind/src/main/java/io/github/selcukes/databind/excel/ExcelCell.java +++ b/selcukes-databind/src/main/java/io/github/selcukes/databind/excel/ExcelCell.java @@ -16,19 +16,17 @@ package io.github.selcukes.databind.excel; +import io.github.selcukes.databind.DataField; import io.github.selcukes.databind.annotation.Key; import io.github.selcukes.databind.converters.Converter; -import io.github.selcukes.databind.DataField; +import io.github.selcukes.databind.utils.Maps; import org.apache.poi.ss.usermodel.DataFormatter; import org.apache.poi.ss.usermodel.Row; import java.lang.reflect.Field; import java.util.List; import java.util.Map; -import java.util.TreeMap; -import static io.github.selcukes.databind.utils.StringHelper.toFieldName; -import static java.lang.String.CASE_INSENSITIVE_ORDER; import static java.lang.String.format; import static java.util.Optional.ofNullable; import static org.apache.poi.ss.usermodel.Row.MissingCellPolicy.RETURN_BLANK_AS_NULL; @@ -52,17 +50,18 @@ public ExcelCell parse(final Row row) { var cellValue = ofNullable(row.getCell(index, RETURN_BLANK_AS_NULL)) .map(cell -> formatter.formatCellValue(cell).trim()) .orElse(""); - setConvertedValue(getConverter().convert(cellValue, getColumn().map(Key::format).orElse(""))); + var substituted = getSubstitutor().replace(cellValue); + var format = getColumn().map(Key::format).orElse(""); + var converted = getConverter().convert(substituted, format); + setConvertedValue(converted); return this; } private int getIndex(Map headers) { String header = getColumn() .map(Key::name) - .orElse(toFieldName(getFieldName())); - Map headersMap = new TreeMap<>(CASE_INSENSITIVE_ORDER); - headersMap.putAll(headers); - return ofNullable(headersMap.get(header)) + .orElse(getFieldName()); + return ofNullable(Maps.caseInsensitive(headers).get(header)) .orElseThrow(() -> new IllegalArgumentException(format("Column %s not found", getFieldName()))); } } diff --git a/selcukes-databind/src/main/java/io/github/selcukes/databind/properties/PropertyField.java b/selcukes-databind/src/main/java/io/github/selcukes/databind/properties/PropertyField.java index d65eb8653..85f22712d 100644 --- a/selcukes-databind/src/main/java/io/github/selcukes/databind/properties/PropertyField.java +++ b/selcukes-databind/src/main/java/io/github/selcukes/databind/properties/PropertyField.java @@ -24,21 +24,24 @@ import java.util.List; import java.util.Properties; -import static io.github.selcukes.databind.utils.StringHelper.toFieldName; - class PropertyField extends DataField { private final Properties properties; - public PropertyField(final Field field, final Properties properties, final List> defaultConverters) { + public PropertyField( + final Field field, + final Properties properties, + final List> defaultConverters + ) { super(field, defaultConverters); this.properties = properties; } public PropertyField parse() { - String fieldName = getColumn() + String keyName = getColumn() .map(Key::name) - .orElse(toFieldName(getFieldName())); - setConvertedValue(getConverter().convert(properties.getProperty(fieldName))); + .orElse(getFieldName()); + var substituted = getSubstitutor().replace(properties, keyName); + setConvertedValue(getConverter().convert(substituted)); return this; } diff --git a/selcukes-databind/src/main/java/io/github/selcukes/databind/substitute/DefaultSubstitutor.java b/selcukes-databind/src/main/java/io/github/selcukes/databind/substitute/DefaultSubstitutor.java new file mode 100644 index 000000000..febeadc96 --- /dev/null +++ b/selcukes-databind/src/main/java/io/github/selcukes/databind/substitute/DefaultSubstitutor.java @@ -0,0 +1,30 @@ +/* + * Copyright (c) Ramesh Babu Prudhvi. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.github.selcukes.databind.substitute; + +import java.util.Properties; + +public class DefaultSubstitutor implements Substitutor { + public String replace(Properties variables, String key) { + return variables.getProperty(key); + } + + @Override + public String replace(String strToReplace) { + return strToReplace; + } +} diff --git a/selcukes-databind/src/main/java/io/github/selcukes/databind/substitute/Substitutor.java b/selcukes-databind/src/main/java/io/github/selcukes/databind/substitute/Substitutor.java new file mode 100644 index 000000000..140cb6a4f --- /dev/null +++ b/selcukes-databind/src/main/java/io/github/selcukes/databind/substitute/Substitutor.java @@ -0,0 +1,25 @@ +/* + * Copyright (c) Ramesh Babu Prudhvi. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.github.selcukes.databind.substitute; + + +import java.util.Properties; + +public interface Substitutor { + String replace(Properties variables, String key); + String replace(String strToReplace); +} diff --git a/selcukes-databind/src/main/java/io/github/selcukes/databind/utils/Maps.java b/selcukes-databind/src/main/java/io/github/selcukes/databind/utils/Maps.java index e435a5704..0b4c7b98d 100644 --- a/selcukes-databind/src/main/java/io/github/selcukes/databind/utils/Maps.java +++ b/selcukes-databind/src/main/java/io/github/selcukes/databind/utils/Maps.java @@ -18,13 +18,12 @@ import lombok.experimental.UtilityClass; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.Properties; +import java.util.*; import java.util.stream.Collectors; import java.util.stream.IntStream; +import static java.lang.String.CASE_INSENSITIVE_ORDER; + @UtilityClass public class Maps { public static Map of(Properties properties) { @@ -40,4 +39,10 @@ public static Map of(List keys, List values) { return IntStream.range(0, keys.size()).boxed() .filter(i -> !StringHelper.isNullOrEmpty(keys.get(i))).collect(Collectors.toMap(keys::get, values::get)); } + + public static Map caseInsensitive(Map map) { + var newMap = new TreeMap(CASE_INSENSITIVE_ORDER); + newMap.putAll(map); + return newMap; + } } diff --git a/selcukes-databind/src/test/java/io/github/selcukes/databind/tests/EnvPropSubstitutor.java b/selcukes-databind/src/test/java/io/github/selcukes/databind/tests/EnvPropSubstitutor.java new file mode 100644 index 000000000..4c0af6413 --- /dev/null +++ b/selcukes-databind/src/test/java/io/github/selcukes/databind/tests/EnvPropSubstitutor.java @@ -0,0 +1,41 @@ +/* + * Copyright (c) Ramesh Babu Prudhvi. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.github.selcukes.databind.tests; + +import io.github.selcukes.databind.substitute.DefaultSubstitutor; +import io.github.selcukes.databind.utils.StringHelper; + +import java.time.LocalDate; +import java.util.Properties; + +public class EnvPropSubstitutor extends DefaultSubstitutor { + @Override + public String replace(Properties variables, String key) { + String value = variables.getProperty(key); + return StringHelper.interpolate(value, + matcher -> matcher.group(1).equals("DATE") ? + LocalDate.now().toString() : System.getProperty(matcher.group(1)) + ); + } + + @Override + public String replace(String strToReplace) { + return StringHelper.interpolate(strToReplace, + matcher -> matcher.group(1).equals("DATE") ? + LocalDate.now().toString() : System.getenv(matcher.group(1))); + } +} diff --git a/selcukes-databind/src/test/java/io/github/selcukes/databind/tests/ExcelMapperTest.java b/selcukes-databind/src/test/java/io/github/selcukes/databind/tests/ExcelMapperTest.java index e8a02bbb3..f382debb2 100644 --- a/selcukes-databind/src/test/java/io/github/selcukes/databind/tests/ExcelMapperTest.java +++ b/selcukes-databind/src/test/java/io/github/selcukes/databind/tests/ExcelMapperTest.java @@ -16,9 +16,10 @@ package io.github.selcukes.databind.tests; -import io.github.selcukes.databind.excel.ExcelMapper; -import io.github.selcukes.databind.annotation.Key; import io.github.selcukes.databind.annotation.DataFile; +import io.github.selcukes.databind.annotation.Interpolate; +import io.github.selcukes.databind.annotation.Key; +import io.github.selcukes.databind.excel.ExcelMapper; import io.github.selcukes.databind.exception.DataMapperException; import lombok.Data; import org.testng.annotations.Test; @@ -29,27 +30,42 @@ public class ExcelMapperTest { @Data @DataFile(fileName = "TestData.xlsx", sheetName = "Smoke") - static class Pojo { + static class SampleExcel { @Key(name = "Screen") private String screen; @Key(name = "Feature") private String feature; @Key(name = "Test") private String test; - // @Column(name = "Run") private String run; } @Test public void excelMapperTest() { - Stream pojoStream = ExcelMapper.parse(Pojo.class); + Stream pojoStream = ExcelMapper.parse(SampleExcel.class); pojoStream.forEach(System.out::println); } + @Interpolate(substitutor = EnvPropSubstitutor.class) + @Data + @DataFile(fileName = "TestData.xlsx", sheetName = "Yahoo") + static class SampleExcel1 { + @Key(name = "First Name") + String firstName; + @Key(name = "Last Name") + String lastName; + String date; + } + + @Test + public void interpolateExcelMapperTest() { + Stream excelStream = ExcelMapper.parse(SampleExcel1.class); + excelStream.forEach(System.out::println); + } + @Test(expectedExceptions = DataMapperException.class) public void excelMapperNegativeTest() { ExcelMapper.parse(Selcukes.class); - } @Data diff --git a/selcukes-databind/src/test/java/io/github/selcukes/databind/tests/PropertiesMapperTest.java b/selcukes-databind/src/test/java/io/github/selcukes/databind/tests/PropertiesMapperTest.java index 88a6d4dc8..ce586b787 100644 --- a/selcukes-databind/src/test/java/io/github/selcukes/databind/tests/PropertiesMapperTest.java +++ b/selcukes-databind/src/test/java/io/github/selcukes/databind/tests/PropertiesMapperTest.java @@ -17,6 +17,7 @@ package io.github.selcukes.databind.tests; import io.github.selcukes.databind.annotation.DataFile; +import io.github.selcukes.databind.annotation.Interpolate; import io.github.selcukes.databind.annotation.Key; import io.github.selcukes.databind.properties.PropertiesMapper; import lombok.Data; @@ -33,21 +34,24 @@ public void testProperties() { System.out.println(testConfig.getUserName()); if (testConfig.isTest()) System.out.println(testConfig.getDate()); - + System.out.println(testConfig.getOsName()); System.out.println(testConfig.getJim()); System.out.println(testConfig.getMass()); } + @Interpolate(substitutor = EnvPropSubstitutor.class) @DataFile @Data static class TestConfig { String userName; - boolean isTest; String password; + boolean isTest; + String osName; LocalDate date; @Key(name = "selcukes.jim") int jim; @Key(name = "mass", converter = ListStringConverter.class) List mass; } + } diff --git a/selcukes-databind/src/test/resources/TestData.xlsx b/selcukes-databind/src/test/resources/TestData.xlsx index 574b8d208c98af0a98d8d94c8af744c0f032fb54..f2175eabfabc3afb0420e727879bfd4699c56248 100644 GIT binary patch delta 2759 zcmY*bX*|>m7oHhw6Bij8Stn#HF~($f859jkP4+|?J0UWYZ8EkjO~Zfa+HNm{lE{Q) z-M){@(NHIlptxm-GCd=bRjmdXLiYoa9<+wQCU@2*iH^1mXjM zKqMa(qTfC5JAQuN$|PT(S61GBMVkBv^@E38twiWoA%lDyMC0B3t(RV9#nuTov}V{9 zAKFb~3SaI`6U`;AWPVhbtPx-`^~CymvP6^{d^7Ar5jQPI+O?}ogC3W2D0^~|B6Y+ZX_$;q_jQX zT$MCVJSlWS(2$v5Q+FgL?A*(!LoLgU&Kzpjkt64HXHJ_6apz81tzDRdX!ZLxNpI|b z-4n*`2i!^0jpiA>DlW~_At=p53Cd!Xq*AjbXLz<5l-XO>Izq^KTOxubXHrQj)5ls5 z53OalXIAWqcpYLE`y-HXRt=$fg!7*_bJHfio`Cd?Fz-s8++{6vutGG$a`Rsq_*0k2 zSV!OO2)Q6TunQqndaN}jPlb^1jrjw4+NVuzWSXMHdk$>Lw$bQsG^*O(qJ@F_BP{_AU1> z({P88j**!r@WhVKfm{h(hZ6iG=@XW0AG*s?a`MIH3%t=rgz=m=Qlbx}=TJskmfV8( zidQ?KjxAkc{r*uO)FGqH$MKmH=^9;wN~?6Q;cbOo{pu~t)PX~z7q-@abjx?NL4SX? zO-ObIqa`8UkZG4U@uy|d*kGT;Sh0zQ-KM9eFVtd)wE{S~^rsDg)en{WF*P<^ASuIn z+(^!{m|$z-)kCa_>un2mdH$4798rDMYKnOED07yL#AmPBuSwP&@?Sd$4hbz-x}qK) z(Zz*0U{p@}ya@O}tLmTqI1QAt2>}zR-^vD|y*$vd?7nX~$GWzM0g{Fv=i)8W5?t_=bI(Lyj{Q;%@nNiWLOD(mtp4`f-qG#Y z@dLY$^T?#s>i4RfY)Qr~_Ys+nRPv#1C=qVgkwN)bEua-~N_e_opPZ3hK0b-#j(hlF zOw6XQLIja!W2m~YU`@u9;=LGuMA?){zr8>a3a7oi3}-)a&0L)%MffTlt8DhZ?fQDu zsmG#Hmxg;H$qw&FZh0h3Q}8{De8n9VUSMWwMbK3}m~>lNha-b`a)h>>-k!uLi&Tu( zsqWlZu)*Q(F^ZM5`3PuIy@kH4{OvFq$8Ti8*!I>(j78|r1Ts|LE#Bgi^-pNx@7!jW zY`3e-gJ~D3N7s@2+Kv{rm=Nw-%^bX6!0EWpUUfHHi#|R@X0acwgjt)u@P8_V&h1&H zxMjkDomb1xoUUgrW@_E@*>fDG=z!0_7$tg@_RBRV5|coMaWS$rM=i@_Qj zaZf=PM&7KiIdP9IB2ZM?e}m4n)$Km!r!D--Wa6X9bK;i@RCwUizR?>_8zLak(b2Kj zA05$$XYW!_u-I7#L>FBS!X9dGTfP4%;rnH&LZsY0D82=AgCv}H2g&kEWa;#>Yv_iRltsbMR*s!g44eC_>o7*R;ZVo`!aTPOk^`ptwGzawOm$ z&=t7w;V*}WVhl~m7$eMsue>33W-46D$aq(Ib5j!=I-R2bRI|9r-7UN4p+(q+rJf#JdT z6+rPB1GUUsEhXjSO9(87j;YV>Vp25&Pzzoag1Y*AR`(M3u*!N6GtYzW=k) zjo3*)iEtUj_!BII?$;3H@ye!g`0~{e3&O`on85sJJ7qo)bZV_A#q+DV6wr0pT{f=$n8Klwzf=E zOv?HdWWeO;6eqJ|656IY8jRkDW|j+T7)>_O^|bi2k@anJcNNt=P0=;sp+ovb;(}p4 zdU6d}ftR)QJJCNmT@rDwNGdnfU=;`R%FG$vL}%qRY8S98DsqTuQ!cLW?<%k|*18&j zLJZvIA+PRbyRQ4O!F`?yOqLF<=hEk#+INLXWI~^0udsJ}!~?1NSJ3)Y>ZcM8<pENjs z$D{LCgN${-YcQv<$NOBrc3Xx!k7qma&+i8mpe(@Uz$VHBa>N7hqlEyxstQD#|8JOn z3{wUFhSRD-qW>Ni5D0#3BLBt{fDe5U>;_n&4ZtiQ4J{@5k9^ocAlSc+#|Q-sps|oa zIiO!o7SK{tfD9vn0i--YRpS@^o9<)LxkEr8f&ZJD1gg}22ipNZ)ucI5s9&Z30b&;v ANdN!< delta 2720 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 alfW|-0lbseGd=-4lNB^01`{v<0000F%>bhS diff --git a/selcukes-databind/src/test/resources/test_config.properties b/selcukes-databind/src/test/resources/test_config.properties index 90efb44cd..1332a9907 100644 --- a/selcukes-databind/src/test/resources/test_config.properties +++ b/selcukes-databind/src/test/resources/test_config.properties @@ -1,6 +1,7 @@ -userName=QA +userName=Ramesh password=make isTest=true -date=2022-07-08 +osName= ${os.name} +date=${DATE} selcukes.jim=50 mass=jim,jil \ No newline at end of file