Compare commits

6 Commits

5 changed files with 73 additions and 28 deletions

1
.idea/gradle.xml generated
View File

@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="GradleMigrationSettings" migrationVersion="1" />
<component name="GradleSettings">
<option name="linkedExternalProjectsSettings">
<GradleProjectSettings>

View File

@@ -1,21 +1,19 @@
# XmlElement
## Использование
TODO
## Подключение к проекту
### Gradle
```groovy
implementation("ru.di9:xml-element:1.0")
repositories {
maven { url "https://di9.ru/git/api/packages/Voomra/maven" }
}
```
## Сборка
```shell
gradle build
```
## Установка в локальный Maven
```shell
gradle publishToMavenLocal
```groovy
implementation("ru.di9:xml-element:1.2.1")
```

View File

@@ -1,3 +1,5 @@
//file:noinspection GroovyAssignabilityCheck
//file:noinspection GrUnresolvedAccess
plugins {
id "java-library"
id "maven-publish"
@@ -14,7 +16,7 @@ compileJava {
}
group = "ru.di9"
version = "1.1"
version = "1.2.1"
repositories {
mavenLocal()
@@ -24,9 +26,9 @@ repositories {
dependencies {
api("it.unimi.dsi:fastutil:8.5.12")
def junit5_version = "5.9.2"
testImplementation("org.junit.jupiter:junit-jupiter-api:${junit5_version}")
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:${junit5_version}")
def junit5Version = "5.9.2"
testImplementation("org.junit.jupiter:junit-jupiter-api:$junit5Version")
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:$junit5Version")
}
test {
@@ -43,4 +45,21 @@ publishing {
from components.java
}
}
repositories {
maven {
name = "Di9"
url = uri("https://di9.ru/git/api/packages/Voomra/maven")
def giteaToken = System.getenv("GITEA_TOKEN")
credentials(HttpHeaderCredentials) {
name = "Authorization"
value = "token ${giteaToken}"
}
authentication {
header(HttpHeaderAuthentication)
}
}
}
}

View File

@@ -56,21 +56,38 @@ public class XmlElement implements Iterable<XmlElement> {
return element.hasAttribute(key);
}
public String getAttribute(String key) {
return element.getAttribute(key);
public Optional<String> 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<Boolean> getAttributeAsBool(String key) {
if (element.hasAttribute(key)) {
return Optional.of(Boolean.parseBoolean(element.getAttribute(key)));
} else {
return Optional.empty();
}
}
public List<String> getAttributeAsListString(String key) {
if (element.hasAttribute(key)) {
return Arrays.asList(element.getAttribute(key).split(","));
} else {
return Collections.emptyList();
}
}
@SuppressWarnings("NullableProblems")
@Override
public Iterator<XmlElement> iterator() {
return new XmlElementIterator(element.getChildNodes());

View File

@@ -34,6 +34,7 @@ class XmlElementTest {
assertEquals("root", rootElement.getTagName());
}
@SuppressWarnings("OptionalGetWithoutIsPresent")
@Test
void testIterator() {
Iterator<XmlElement> 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()));
}