feat: Optional при получении аттрибутов

This commit is contained in:
2024-02-28 17:33:12 +03:00
parent 2853382889
commit ff7f2b6df3
3 changed files with 33 additions and 14 deletions

View File

@@ -14,7 +14,7 @@ compileJava {
} }
group = "ru.di9" group = "ru.di9"
version = "1.1" version = "1.2"
repositories { repositories {
mavenLocal() mavenLocal()

View File

@@ -56,21 +56,30 @@ public class XmlElement implements Iterable<XmlElement> {
return element.hasAttribute(key); return element.hasAttribute(key);
} }
public String getAttribute(String key) { public Optional<String> getAttribute(String key) {
return element.getAttribute(key); if (element.hasAttribute(key)) {
return Optional.of(element.getAttribute(key));
} else {
return Optional.empty();
}
} }
public int getAttributeAsInt(String key) { public OptionalInt getAttributeAsInt(String key) {
var value = element.getAttribute(key); if (element.hasAttribute(key)) {
return StringUtils.isEmpty(value) ? 0 : Integer.parseInt(value); return OptionalInt.of(Integer.parseInt(element.getAttribute(key)));
} else {
return OptionalInt.empty();
}
} }
public boolean getAttributeAsBool(String key) { public Optional<Boolean> getAttributeAsBool(String key) {
var value = element.getAttribute(key); if (element.hasAttribute(key)) {
return !StringUtils.isEmpty(value) && Boolean.parseBoolean(value); return Optional.of(Boolean.parseBoolean(element.getAttribute(key)));
} else {
return Optional.empty();
}
} }
@SuppressWarnings("NullableProblems")
@Override @Override
public Iterator<XmlElement> iterator() { public Iterator<XmlElement> iterator() {
return new XmlElementIterator(element.getChildNodes()); return new XmlElementIterator(element.getChildNodes());

View File

@@ -34,6 +34,7 @@ class XmlElementTest {
assertEquals("root", rootElement.getTagName()); assertEquals("root", rootElement.getTagName());
} }
@SuppressWarnings("OptionalGetWithoutIsPresent")
@Test @Test
void testIterator() { void testIterator() {
Iterator<XmlElement> iteratorElement = rootElement.iterator(); Iterator<XmlElement> iteratorElement = rootElement.iterator();
@@ -47,13 +48,22 @@ class XmlElementTest {
assertEquals(tagName, element.getTagName()); assertEquals(tagName, element.getTagName());
switch (element.getTagName()) { switch (element.getTagName()) {
case "node_str" -> assertEquals(attr, element.getAttribute("attr")); case "node_str" -> {
case "node_int" -> assertEquals(attr, element.getAttributeAsInt("attr")); assertTrue(element.getAttribute("attr").isPresent());
case "node_bool" -> assertEquals(attr, element.getAttributeAsBool("attr")); 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" -> { case "empty" -> {
assertTrue(StringUtils.isEmpty(element.getValue())); assertTrue(StringUtils.isEmpty(element.getValue()));
assertFalse(element.hasAttribute("attr")); assertFalse(element.hasAttribute("attr"));
assertTrue(StringUtils.isEmpty(element.getAttribute("attr"))); assertTrue(element.getAttribute("attr").isEmpty());
} }
default -> fail("Unknown tag '%s'".formatted(element.getTagName())); default -> fail("Unknown tag '%s'".formatted(element.getTagName()));
} }