Annotation-based AComment -> EntryComment

This commit is contained in:
2024-06-10 00:43:51 +02:00
parent a8e89aaee8
commit 1b3bf0ca96
5 changed files with 36 additions and 68 deletions

View File

@@ -1,12 +0,0 @@
package de.siphalor.tweed5.defaultextensions.comment.api;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface AComment {
String value() default "";
}

View File

@@ -0,0 +1,5 @@
package de.siphalor.tweed5.defaultextensions.comment.api;
public interface EntryComment {
String comment();
}

View File

@@ -10,10 +10,7 @@ import de.siphalor.tweed5.core.api.middleware.DefaultMiddlewareContainer;
import de.siphalor.tweed5.core.api.middleware.Middleware; import de.siphalor.tweed5.core.api.middleware.Middleware;
import de.siphalor.tweed5.data.extension.api.TweedEntryWriter; import de.siphalor.tweed5.data.extension.api.TweedEntryWriter;
import de.siphalor.tweed5.data.extension.api.extension.ReadWriteRelatedExtension; import de.siphalor.tweed5.data.extension.api.extension.ReadWriteRelatedExtension;
import de.siphalor.tweed5.defaultextensions.comment.api.AComment; import de.siphalor.tweed5.defaultextensions.comment.api.*;
import de.siphalor.tweed5.defaultextensions.comment.api.CommentExtension;
import de.siphalor.tweed5.defaultextensions.comment.api.CommentProducer;
import de.siphalor.tweed5.defaultextensions.comment.api.CommentModifyingExtension;
import lombok.Getter; import lombok.Getter;
import lombok.Value; import lombok.Value;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
@@ -32,7 +29,7 @@ public class CommentExtensionImpl implements ReadWriteRelatedExtension, CommentE
@Override @Override
public void setup(TweedExtensionSetupContext context) { public void setup(TweedExtensionSetupContext context) {
internalEntryDataExtension = context.registerEntryExtensionData(InternalCommentEntryData.class); internalEntryDataExtension = context.registerEntryExtensionData(InternalCommentEntryData.class);
context.registerEntryExtensionData(AComment.class); context.registerEntryExtensionData(EntryComment.class);
middlewareContainer = new DefaultMiddlewareContainer<>(); middlewareContainer = new DefaultMiddlewareContainer<>();
@@ -54,8 +51,8 @@ public class CommentExtensionImpl implements ReadWriteRelatedExtension, CommentE
public void initEntry(ConfigEntry<?> configEntry) { public void initEntry(ConfigEntry<?> configEntry) {
EntryExtensionsData entryExtensionsData = configEntry.extensionsData(); EntryExtensionsData entryExtensionsData = configEntry.extensionsData();
String baseComment; String baseComment;
if (entryExtensionsData.isPatchworkPartSet(AComment.class)) { if (entryExtensionsData.isPatchworkPartSet(EntryComment.class)) {
baseComment = ((AComment) entryExtensionsData).value(); baseComment = ((EntryComment) entryExtensionsData).comment();
} else { } else {
baseComment = ""; baseComment = "";
} }

View File

@@ -16,16 +16,15 @@ import de.siphalor.tweed5.data.extension.api.readwrite.TweedEntryReaderWriters;
import de.siphalor.tweed5.data.extension.impl.ReadWriteExtensionImpl; import de.siphalor.tweed5.data.extension.impl.ReadWriteExtensionImpl;
import de.siphalor.tweed5.data.hjson.HjsonCommentType; import de.siphalor.tweed5.data.hjson.HjsonCommentType;
import de.siphalor.tweed5.data.hjson.HjsonWriter; import de.siphalor.tweed5.data.hjson.HjsonWriter;
import de.siphalor.tweed5.defaultextensions.comment.api.AComment;
import de.siphalor.tweed5.defaultextensions.comment.api.CommentExtension; import de.siphalor.tweed5.defaultextensions.comment.api.CommentExtension;
import de.siphalor.tweed5.defaultextensions.comment.api.CommentProducer;
import de.siphalor.tweed5.defaultextensions.comment.api.CommentModifyingExtension; import de.siphalor.tweed5.defaultextensions.comment.api.CommentModifyingExtension;
import de.siphalor.tweed5.defaultextensions.comment.api.CommentProducer;
import de.siphalor.tweed5.defaultextensions.comment.api.EntryComment;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.Value; import lombok.Value;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import java.io.StringWriter; import java.io.StringWriter;
import java.lang.annotation.Annotation;
import java.util.*; import java.util.*;
import static org.junit.jupiter.api.Assertions.*; import static org.junit.jupiter.api.Assertions.*;
@@ -60,11 +59,11 @@ class CommentExtensionImplTest {
configContainer.attachAndSealTree(rootEntry); configContainer.attachAndSealTree(rootEntry);
//noinspection unchecked //noinspection unchecked
RegisteredExtensionData<EntryExtensionsData, AComment> commentData = (RegisteredExtensionData<EntryExtensionsData, AComment>) configContainer.entryDataExtensions().get(AComment.class); RegisteredExtensionData<EntryExtensionsData, EntryComment> commentData = (RegisteredExtensionData<EntryExtensionsData, EntryComment>) configContainer.entryDataExtensions().get(EntryComment.class);
commentData.set(rootEntry.extensionsData(), new ACommentImpl("This is the root value.\nIt is the topmost value in the tree.")); commentData.set(rootEntry.extensionsData(), new CommentImpl("This is the root value.\nIt is the topmost value in the tree."));
commentData.set(intEntry.extensionsData(), new ACommentImpl("It is an integer")); commentData.set(intEntry.extensionsData(), new CommentImpl("It is an integer"));
commentData.set(stringEntry.extensionsData(), new ACommentImpl("It is a string")); commentData.set(stringEntry.extensionsData(), new CommentImpl("It is a string"));
} }
@Test @Test
@@ -123,13 +122,8 @@ class CommentExtensionImplTest {
} }
@Value @Value
private static class ACommentImpl implements AComment { private static class CommentImpl implements EntryComment {
String value; String comment;
@Override
public Class<? extends Annotation> annotationType() {
return null;
}
} }
private static class TestCommentModifyingExtension implements TweedExtension, CommentModifyingExtension { private static class TestCommentModifyingExtension implements TweedExtension, CommentModifyingExtension {

View File

@@ -3,14 +3,12 @@ package de.siphalor.tweed5.defaultextensions.validation.impl;
import de.siphalor.tweed5.core.api.entry.ConfigEntry; import de.siphalor.tweed5.core.api.entry.ConfigEntry;
import de.siphalor.tweed5.core.api.extension.EntryExtensionsData; import de.siphalor.tweed5.core.api.extension.EntryExtensionsData;
import de.siphalor.tweed5.core.api.extension.RegisteredExtensionData; import de.siphalor.tweed5.core.api.extension.RegisteredExtensionData;
import de.siphalor.tweed5.core.api.middleware.Middleware;
import de.siphalor.tweed5.core.impl.DefaultConfigContainer; import de.siphalor.tweed5.core.impl.DefaultConfigContainer;
import de.siphalor.tweed5.core.impl.entry.SimpleConfigEntryImpl; import de.siphalor.tweed5.core.impl.entry.SimpleConfigEntryImpl;
import de.siphalor.tweed5.core.impl.entry.StaticMapCompoundConfigEntryImpl; import de.siphalor.tweed5.core.impl.entry.StaticMapCompoundConfigEntryImpl;
import de.siphalor.tweed5.defaultextensions.comment.api.AComment;
import de.siphalor.tweed5.defaultextensions.comment.api.CommentExtension; import de.siphalor.tweed5.defaultextensions.comment.api.CommentExtension;
import de.siphalor.tweed5.defaultextensions.comment.api.EntryComment;
import de.siphalor.tweed5.defaultextensions.comment.impl.CommentExtensionImpl; import de.siphalor.tweed5.defaultextensions.comment.impl.CommentExtensionImpl;
import de.siphalor.tweed5.defaultextensions.validation.api.ConfigEntryValidator;
import de.siphalor.tweed5.defaultextensions.validation.api.EntrySpecificValidation; import de.siphalor.tweed5.defaultextensions.validation.api.EntrySpecificValidation;
import de.siphalor.tweed5.defaultextensions.validation.api.ValidationExtension; import de.siphalor.tweed5.defaultextensions.validation.api.ValidationExtension;
import de.siphalor.tweed5.defaultextensions.validation.api.result.ValidationIssue; import de.siphalor.tweed5.defaultextensions.validation.api.result.ValidationIssue;
@@ -23,8 +21,10 @@ import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource; import org.junit.jupiter.params.provider.CsvSource;
import java.lang.annotation.Annotation; import java.util.Collections;
import java.util.*; import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import static org.junit.jupiter.api.Assertions.*; import static org.junit.jupiter.api.Assertions.*;
@@ -60,38 +60,22 @@ class ValidationExtensionImplTest {
configContainer.attachAndSealTree(rootEntry); configContainer.attachAndSealTree(rootEntry);
//noinspection unchecked //noinspection unchecked
RegisteredExtensionData<EntryExtensionsData, AComment> commentData = (RegisteredExtensionData<EntryExtensionsData, AComment>) configContainer.entryDataExtensions().get(AComment.class); RegisteredExtensionData<EntryExtensionsData, EntryComment> commentData = (RegisteredExtensionData<EntryExtensionsData, EntryComment>) configContainer.entryDataExtensions().get(EntryComment.class);
commentData.set(intEntry.extensionsData(), new AComment() { commentData.set(intEntry.extensionsData(), () -> "This is the main comment!");
@Override
public Class<? extends Annotation> annotationType() {
return null;
}
@Override
public String value() {
return "This is the main comment!";
}
});
//noinspection unchecked //noinspection unchecked
RegisteredExtensionData<EntryExtensionsData, EntrySpecificValidation> entrySpecificValidation = (RegisteredExtensionData<EntryExtensionsData, EntrySpecificValidation>) configContainer.entryDataExtensions().get(EntrySpecificValidation.class); RegisteredExtensionData<EntryExtensionsData, EntrySpecificValidation> entrySpecificValidation = (RegisteredExtensionData<EntryExtensionsData, EntrySpecificValidation>) configContainer.entryDataExtensions().get(EntrySpecificValidation.class);
entrySpecificValidation.set(byteEntry.extensionsData(), new EntrySpecificValidation() { entrySpecificValidation.set(
@Override byteEntry.extensionsData(),
public Collection<Middleware<ConfigEntryValidator>> validators() { () -> Collections.singleton(new SimpleValidatorMiddleware("range", new NumberRangeValidator<>(Byte.class, (byte) 10, (byte) 100)))
return Collections.singleton(new SimpleValidatorMiddleware("range", new NumberRangeValidator<>(Byte.class, (byte) 10, (byte) 100))); );
} entrySpecificValidation.set(
}); intEntry.extensionsData(),
entrySpecificValidation.set(intEntry.extensionsData(), new EntrySpecificValidation() { () -> Collections.singleton(new SimpleValidatorMiddleware("range", new NumberRangeValidator<>(Integer.class, null, 123)))
@Override );
public Collection<Middleware<ConfigEntryValidator>> validators() { entrySpecificValidation.set(
return Collections.singleton(new SimpleValidatorMiddleware("range", new NumberRangeValidator<>(Integer.class, null, 123))); doubleEntry.extensionsData(),
} () -> Collections.singleton(new SimpleValidatorMiddleware("range", new NumberRangeValidator<>(Double.class, 0.5, null)))
}); );
entrySpecificValidation.set(doubleEntry.extensionsData(), new EntrySpecificValidation() {
@Override
public Collection<Middleware<ConfigEntryValidator>> validators() {
return Collections.singleton(new SimpleValidatorMiddleware("range", new NumberRangeValidator<>(Double.class, 0.5, null)));
}
});
configContainer.initialize(); configContainer.initialize();
} }