diff --git a/src/main/java/com/example/parser/FlowableExcelMapper.java b/src/main/java/com/example/parser/FlowableExcelMapper.java index 14246c1..b28515e 100644 --- a/src/main/java/com/example/parser/FlowableExcelMapper.java +++ b/src/main/java/com/example/parser/FlowableExcelMapper.java @@ -75,9 +75,7 @@ public class FlowableExcelMapper { protected JsonNode rowToJsonNode(ArrayList types, ArrayList paths, ArrayList row, JsonNode jsonNode) { for (int cellNum = 0; cellNum < row.size(); cellNum++) { String cellValue = row.get(cellNum); - if (cellValue == null || cellValue.isEmpty()) { - jsonNode = addNode(jsonNode, paths.get(cellNum), null); - } else { + if (cellValue != null && !cellValue.isEmpty()) { String type = types.get(cellNum); Object content; switch (type) { @@ -175,53 +173,4 @@ public class FlowableExcelMapper { } return -1; } - - public boolean isSubset(JsonNode asIs, JsonNode toBe) { - // If toBe is null, it is always a subset - if (toBe == null) { - return true; - } - // If asIs is null, but toBe is not, toBe is not a subset - if (asIs == null) { - return false; - } - // If toBo is a value node, compare values - if (toBe.isValueNode()) { - return asIs.isValueNode() && asIs.asText().equals(toBe.asText()); - } - // If toBe is an array node, check is all elements of toBe exist in asIs - if(toBe.isArray()){ - if (!asIs.isArray() || toBe.size() > asIs.size()) { - return false; - } - for (JsonNode toBeElement : toBe) { - boolean found = false; - for (JsonNode asIsElement : asIs) { - if (isSubset(asIsElement, toBeElement)) { - found = true; - break; - } - } - if (!found) { - return false; - } - } - return true; - } - // If toBe is an object node, check if all fields in toBe exist in asIs - if (toBe.isObject()){ - if (!asIs.isObject()){ - return false; - } - for (Iterator iterator = toBe.fieldNames(); iterator.hasNext(); ) { - String fieldName = iterator.next(); - if (!asIs.has(fieldName) || !isSubset(asIs.get(fieldName), toBe.get(fieldName))){ - return false; - } - } - return true; - } - // If none of the above matches, return false - return false; - } } diff --git a/src/test/java/com/example/parser/FlowableExcelMapperTest.java b/src/test/java/com/example/parser/FlowableExcelMapperTest.java index 415cc8d..0351650 100644 --- a/src/test/java/com/example/parser/FlowableExcelMapperTest.java +++ b/src/test/java/com/example/parser/FlowableExcelMapperTest.java @@ -12,6 +12,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import java.util.ArrayList; +import java.util.Iterator; import java.util.stream.Stream; @@ -22,8 +23,55 @@ class FlowableExcelMapperTest { @Autowired private FlowableExcelMapper flowableExcelMapper; - private static final Logger logger = LoggerFactory.getLogger(FlowableExcelMapperTest.class); + public boolean isSubset(JsonNode root, JsonNode test) { + // If test is null, it is always a subset of root + if (test == null) { + return true; + } + // If root is null, but test is not, test is not a subset of root + if (root == null) { + return false; + } + // If test is a value node, compare values + if (test.isValueNode()) { + return root.isValueNode() && root.asText().equals(test.asText()); + } + // If test is an array node, check if all elements of test exist in root + if(test.isArray()){ + if (!root.isArray() || test.size() > root.size()) { + return false; + } + for (JsonNode rootElement : test) { + boolean found = false; + for (JsonNode testElement : root) { + if (isSubset(testElement, rootElement)) { + found = true; + break; + } + } + if (!found) { + return false; + } + } + return true; + } + // If test is an object node, check if all fields in test exist in root + if (test.isObject()){ + if (!root.isObject()){ + return false; + } + for (Iterator iterator = test.fieldNames(); iterator.hasNext(); ) { + String fieldName = iterator.next(); + if (!root.has(fieldName) || !isSubset(root.get(fieldName), test.get(fieldName))){ + return false; + } + } + return true; + } + // If none of the above matches, return false + return false; + } protected Stream getArgumentsFromExcel(String path) { ArrayList argumentList = new ArrayList<>(); @@ -44,7 +92,8 @@ class FlowableExcelMapperTest { public void excelMapperTest(JsonNode row) { JsonNode asIs = row.get("root"); JsonNode toBe = row.get("test"); - logger.info("{}asIs= {}{}toBe= {}{}", System.lineSeparator(), asIs.toPrettyString(), System.lineSeparator(), toBe.toPrettyString(), System.lineSeparator()); - Assertions.assertThat(flowableExcelMapper.isSubset(asIs, toBe)).isTrue(); + //logger.info("{}root={}{}test={}", System.lineSeparator(), asIs, System.lineSeparator(), toBe); + Assertions.assertThat(isSubset(asIs, toBe)) + .withFailMessage(System.lineSeparator() + "root=" + asIs + System.lineSeparator() + "test=" + toBe).isTrue(); } } diff --git a/src/test/resources/flowableExcelMapperTestData.xlsx b/src/test/resources/flowableExcelMapperTestData.xlsx index 0cd1519..b36a75f 100644 Binary files a/src/test/resources/flowableExcelMapperTestData.xlsx and b/src/test/resources/flowableExcelMapperTestData.xlsx differ