From ff7f2b6df3d0efea314c215f3838cdccb001efc8 Mon Sep 17 00:00:00 2001 From: Voomra Date: Wed, 28 Feb 2024 17:33:12 +0300 Subject: [PATCH] =?UTF-8?q?feat:=20Optional=20=D0=BF=D1=80=D0=B8=20=D0=BF?= =?UTF-8?q?=D0=BE=D0=BB=D1=83=D1=87=D0=B5=D0=BD=D0=B8=D0=B8=20=D0=B0=D1=82?= =?UTF-8?q?=D1=82=D1=80=D0=B8=D0=B1=D1=83=D1=82=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 2 +- src/main/java/ru/di9/xml/XmlElement.java | 27 +++++++++++++------- src/test/java/ru/di9/xml/XmlElementTest.java | 18 ++++++++++--- 3 files changed, 33 insertions(+), 14 deletions(-) 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())); }