diff --git a/build.gradle b/build.gradle index 567772c..b0ee545 100644 --- a/build.gradle +++ b/build.gradle @@ -14,7 +14,7 @@ compileJava { } group = "ru.di9" -version = "1.1" +version = "1.2" repositories { mavenLocal() diff --git a/src/main/java/ru/di9/xml/XmlElement.java b/src/main/java/ru/di9/xml/XmlElement.java index 11cb59d..26cd842 100644 --- a/src/main/java/ru/di9/xml/XmlElement.java +++ b/src/main/java/ru/di9/xml/XmlElement.java @@ -56,21 +56,30 @@ public class XmlElement implements Iterable { return element.hasAttribute(key); } - public String getAttribute(String key) { - return element.getAttribute(key); + public Optional getAttribute(String key) { + if (element.hasAttribute(key)) { + return Optional.of(element.getAttribute(key)); + } else { + return Optional.empty(); + } } - public int getAttributeAsInt(String key) { - var value = element.getAttribute(key); - return StringUtils.isEmpty(value) ? 0 : Integer.parseInt(value); + public OptionalInt getAttributeAsInt(String key) { + if (element.hasAttribute(key)) { + return OptionalInt.of(Integer.parseInt(element.getAttribute(key))); + } else { + return OptionalInt.empty(); + } } - public boolean getAttributeAsBool(String key) { - var value = element.getAttribute(key); - return !StringUtils.isEmpty(value) && Boolean.parseBoolean(value); + public Optional getAttributeAsBool(String key) { + if (element.hasAttribute(key)) { + return Optional.of(Boolean.parseBoolean(element.getAttribute(key))); + } else { + return Optional.empty(); + } } - @SuppressWarnings("NullableProblems") @Override public Iterator iterator() { return new XmlElementIterator(element.getChildNodes()); diff --git a/src/test/java/ru/di9/xml/XmlElementTest.java b/src/test/java/ru/di9/xml/XmlElementTest.java index 0451a58..3df0c14 100644 --- a/src/test/java/ru/di9/xml/XmlElementTest.java +++ b/src/test/java/ru/di9/xml/XmlElementTest.java @@ -34,6 +34,7 @@ class XmlElementTest { assertEquals("root", rootElement.getTagName()); } + @SuppressWarnings("OptionalGetWithoutIsPresent") @Test void testIterator() { Iterator iteratorElement = rootElement.iterator(); @@ -47,13 +48,22 @@ class XmlElementTest { assertEquals(tagName, element.getTagName()); switch (element.getTagName()) { - case "node_str" -> assertEquals(attr, element.getAttribute("attr")); - case "node_int" -> assertEquals(attr, element.getAttributeAsInt("attr")); - case "node_bool" -> assertEquals(attr, element.getAttributeAsBool("attr")); + case "node_str" -> { + assertTrue(element.getAttribute("attr").isPresent()); + assertEquals(attr, element.getAttribute("attr").get()); + } + case "node_int" -> { + assertTrue(element.getAttribute("attr").isPresent()); + assertEquals(attr, element.getAttributeAsInt("attr").getAsInt()); + } + case "node_bool" -> { + assertTrue(element.getAttribute("attr").isPresent()); + assertEquals(attr, element.getAttributeAsBool("attr").get()); + } case "empty" -> { assertTrue(StringUtils.isEmpty(element.getValue())); assertFalse(element.hasAttribute("attr")); - assertTrue(StringUtils.isEmpty(element.getAttribute("attr"))); + assertTrue(element.getAttribute("attr").isEmpty()); } default -> fail("Unknown tag '%s'".formatted(element.getTagName())); }