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.data.extension.api.TweedEntryWriter;
import de.siphalor.tweed5.data.extension.api.extension.ReadWriteRelatedExtension;
import de.siphalor.tweed5.defaultextensions.comment.api.AComment;
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.*;
import lombok.Getter;
import lombok.Value;
import org.jetbrains.annotations.Nullable;
@@ -32,7 +29,7 @@ public class CommentExtensionImpl implements ReadWriteRelatedExtension, CommentE
@Override
public void setup(TweedExtensionSetupContext context) {
internalEntryDataExtension = context.registerEntryExtensionData(InternalCommentEntryData.class);
context.registerEntryExtensionData(AComment.class);
context.registerEntryExtensionData(EntryComment.class);
middlewareContainer = new DefaultMiddlewareContainer<>();
@@ -54,8 +51,8 @@ public class CommentExtensionImpl implements ReadWriteRelatedExtension, CommentE
public void initEntry(ConfigEntry<?> configEntry) {
EntryExtensionsData entryExtensionsData = configEntry.extensionsData();
String baseComment;
if (entryExtensionsData.isPatchworkPartSet(AComment.class)) {
baseComment = ((AComment) entryExtensionsData).value();
if (entryExtensionsData.isPatchworkPartSet(EntryComment.class)) {
baseComment = ((EntryComment) entryExtensionsData).comment();
} else {
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.hjson.HjsonCommentType;
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.CommentProducer;
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.Value;
import org.junit.jupiter.api.Test;
import java.io.StringWriter;
import java.lang.annotation.Annotation;
import java.util.*;
import static org.junit.jupiter.api.Assertions.*;
@@ -60,11 +59,11 @@ class CommentExtensionImplTest {
configContainer.attachAndSealTree(rootEntry);
//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(intEntry.extensionsData(), new ACommentImpl("It is an integer"));
commentData.set(stringEntry.extensionsData(), new ACommentImpl("It is a string"));
commentData.set(rootEntry.extensionsData(), new CommentImpl("This is the root value.\nIt is the topmost value in the tree."));
commentData.set(intEntry.extensionsData(), new CommentImpl("It is an integer"));
commentData.set(stringEntry.extensionsData(), new CommentImpl("It is a string"));
}
@Test
@@ -123,13 +122,8 @@ class CommentExtensionImplTest {
}
@Value
private static class ACommentImpl implements AComment {
String value;
@Override
public Class<? extends Annotation> annotationType() {
return null;
}
private static class CommentImpl implements EntryComment {
String comment;
}
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.extension.EntryExtensionsData;
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.entry.SimpleConfigEntryImpl;
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.EntryComment;
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.ValidationExtension;
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.provider.CsvSource;
import java.lang.annotation.Annotation;
import java.util.*;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import static org.junit.jupiter.api.Assertions.*;
@@ -60,38 +60,22 @@ class ValidationExtensionImplTest {
configContainer.attachAndSealTree(rootEntry);
//noinspection unchecked
RegisteredExtensionData<EntryExtensionsData, AComment> commentData = (RegisteredExtensionData<EntryExtensionsData, AComment>) configContainer.entryDataExtensions().get(AComment.class);
commentData.set(intEntry.extensionsData(), new AComment() {
@Override
public Class<? extends Annotation> annotationType() {
return null;
}
@Override
public String value() {
return "This is the main comment!";
}
});
RegisteredExtensionData<EntryExtensionsData, EntryComment> commentData = (RegisteredExtensionData<EntryExtensionsData, EntryComment>) configContainer.entryDataExtensions().get(EntryComment.class);
commentData.set(intEntry.extensionsData(), () -> "This is the main comment!");
//noinspection unchecked
RegisteredExtensionData<EntryExtensionsData, EntrySpecificValidation> entrySpecificValidation = (RegisteredExtensionData<EntryExtensionsData, EntrySpecificValidation>) configContainer.entryDataExtensions().get(EntrySpecificValidation.class);
entrySpecificValidation.set(byteEntry.extensionsData(), new EntrySpecificValidation() {
@Override
public Collection<Middleware<ConfigEntryValidator>> validators() {
return Collections.singleton(new SimpleValidatorMiddleware("range", new NumberRangeValidator<>(Byte.class, (byte) 10, (byte) 100)));
}
});
entrySpecificValidation.set(intEntry.extensionsData(), new EntrySpecificValidation() {
@Override
public Collection<Middleware<ConfigEntryValidator>> validators() {
return Collections.singleton(new SimpleValidatorMiddleware("range", new NumberRangeValidator<>(Integer.class, null, 123)));
}
});
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)));
}
});
entrySpecificValidation.set(
byteEntry.extensionsData(),
() -> Collections.singleton(new SimpleValidatorMiddleware("range", new NumberRangeValidator<>(Byte.class, (byte) 10, (byte) 100)))
);
entrySpecificValidation.set(
intEntry.extensionsData(),
() -> Collections.singleton(new SimpleValidatorMiddleware("range", new NumberRangeValidator<>(Integer.class, null, 123)))
);
entrySpecificValidation.set(
doubleEntry.extensionsData(),
() -> Collections.singleton(new SimpleValidatorMiddleware("range", new NumberRangeValidator<>(Double.class, 0.5, null)))
);
configContainer.initialize();
}