Skip to content

Commit

Permalink
Use builder pattern to allow for easier customization
Browse files Browse the repository at this point in the history
  • Loading branch information
rchomczyk committed Oct 27, 2024
1 parent 3b26450 commit c105284
Show file tree
Hide file tree
Showing 6 changed files with 160 additions and 49 deletions.
49 changes: 0 additions & 49 deletions honey-common/src/dev/shiza/honey/adventure/AdventureHoney.java
Original file line number Diff line number Diff line change
@@ -1,62 +1,13 @@
package dev.shiza.honey.adventure;

import static net.kyori.adventure.text.minimessage.MiniMessage.miniMessage;

import dev.shiza.honey.Honey;
import dev.shiza.honey.conversion.ImplicitConversion;
import dev.shiza.honey.message.MessageCompiler;
import dev.shiza.honey.placeholder.evaluator.PlaceholderContext;
import dev.shiza.honey.placeholder.evaluator.PlaceholderEvaluator;
import dev.shiza.honey.placeholder.resolver.PlaceholderResolver;
import dev.shiza.honey.placeholder.sanitizer.PlaceholderSanitizer;
import dev.shiza.honey.processor.ProcessorRegistry;
import dev.shiza.honey.reflection.ReflectivePlaceholderEvaluatorFactory;
import java.util.Collections;
import java.util.Map;
import java.util.function.Consumer;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.MiniMessage;

public interface AdventureHoney extends Honey<Component> {

static AdventureHoney createReflective() {
return createReflective(miniMessage());
}

static AdventureHoney createReflective(final MiniMessage miniMessage) {
return createReflective(miniMessage, PlaceholderContext.create());
}

static AdventureHoney createReflective(
final MiniMessage miniMessage, final PlaceholderContext placeholderContext) {
return create(
AdventureMessageCompilerFactory.create(miniMessage),
ImplicitConversion.create(Collections.emptySet()),
placeholderContext,
PlaceholderResolver.create(),
PlaceholderSanitizer.create(),
ReflectivePlaceholderEvaluatorFactory.create(),
ProcessorRegistry.create());
}

static AdventureHoney create(
final MessageCompiler<Component> messageCompiler,
final ImplicitConversion implicitConversion,
final PlaceholderContext placeholderContext,
final PlaceholderResolver placeholderResolver,
final PlaceholderSanitizer placeholderSanitizer,
final PlaceholderEvaluator placeholderEvaluator,
final ProcessorRegistry processorRegistry) {
return new AdventureHoneyImpl(
messageCompiler,
implicitConversion,
placeholderContext,
placeholderResolver,
placeholderSanitizer,
placeholderEvaluator,
processorRegistry);
}

AdventureHoney variable(final String key, final Object value);

AdventureHoney variables(final Map<String, Object> variables);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package dev.shiza.honey.adventure;

import dev.shiza.honey.builder.HoneyBaseBuilder;
import dev.shiza.honey.message.MessageCompiler;
import net.kyori.adventure.text.Component;

final class AdventureHoneyBuilder extends HoneyBaseBuilder<Component, AdventureHoney> {

AdventureHoneyBuilder(final MessageCompiler<Component> messageCompiler) {
super(messageCompiler);
}

@Override
public AdventureHoney build() {
return new AdventureHoneyImpl(
this.messageCompiler,
this.implicitConversion,
this.placeholderContext,
this.placeholderResolver,
this.placeholderSanitizer,
this.placeholderEvaluator,
this.processorRegistry);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package dev.shiza.honey.adventure;

import dev.shiza.honey.builder.HoneyBuilder;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.MiniMessage;

public final class AdventureHoneyFactory {

private AdventureHoneyFactory() {}

public static HoneyBuilder<Component, AdventureHoney> builder() {
return new AdventureHoneyBuilder(AdventureMessageCompilerFactory.create());
}

public static HoneyBuilder<Component, AdventureHoney> builder(final MiniMessage miniMessage) {
return new AdventureHoneyBuilder(AdventureMessageCompilerFactory.create(miniMessage));
}
}
88 changes: 88 additions & 0 deletions honey-common/src/dev/shiza/honey/builder/HoneyBaseBuilder.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
package dev.shiza.honey.builder;

import dev.shiza.honey.Honey;
import dev.shiza.honey.conversion.ImplicitConversion;
import dev.shiza.honey.message.MessageCompiler;
import dev.shiza.honey.placeholder.evaluator.PlaceholderContext;
import dev.shiza.honey.placeholder.evaluator.PlaceholderEvaluator;
import dev.shiza.honey.placeholder.resolver.PlaceholderResolver;
import dev.shiza.honey.placeholder.sanitizer.PlaceholderSanitizer;
import dev.shiza.honey.processor.ProcessorRegistry;
import dev.shiza.honey.reflection.ReflectivePlaceholderEvaluatorFactory;
import org.jetbrains.annotations.ApiStatus.Internal;

@Internal
public abstract class HoneyBaseBuilder<T, R extends Honey<T>> implements HoneyBuilder<T, R> {

protected MessageCompiler<T> messageCompiler;
protected ImplicitConversion implicitConversion;
protected PlaceholderContext placeholderContext;
protected PlaceholderResolver placeholderResolver;
protected PlaceholderSanitizer placeholderSanitizer;
protected PlaceholderEvaluator placeholderEvaluator;
protected ProcessorRegistry processorRegistry;

private HoneyBaseBuilder(
final MessageCompiler<T> messageCompiler,
final ImplicitConversion implicitConversion,
final PlaceholderContext placeholderContext,
final PlaceholderResolver placeholderResolver,
final PlaceholderSanitizer placeholderSanitizer,
final PlaceholderEvaluator placeholderEvaluator,
final ProcessorRegistry processorRegistry) {
this.messageCompiler = messageCompiler;
this.implicitConversion = implicitConversion;
this.placeholderContext = placeholderContext;
this.placeholderResolver = placeholderResolver;
this.placeholderSanitizer = placeholderSanitizer;
this.placeholderEvaluator = placeholderEvaluator;
this.processorRegistry = processorRegistry;
}

protected HoneyBaseBuilder(final MessageCompiler<T> messageCompiler) {
this(
messageCompiler,
ImplicitConversion.create(),
PlaceholderContext.create(),
PlaceholderResolver.create(),
PlaceholderSanitizer.create(),
ReflectivePlaceholderEvaluatorFactory.create(),
ProcessorRegistry.create());
}

@Override
public HoneyBuilder<T, R> implicitConversion(final ImplicitConversion implicitConversion) {
this.implicitConversion = implicitConversion;
return this;
}

@Override
public HoneyBuilder<T, R> placeholderContext(final PlaceholderContext placeholderContext) {
this.placeholderContext = placeholderContext;
return this;
}

@Override
public HoneyBuilder<T, R> placeholderResolver(final PlaceholderResolver placeholderResolver) {
this.placeholderResolver = placeholderResolver;
return this;
}

@Override
public HoneyBuilder<T, R> placeholderSanitizer(final PlaceholderSanitizer placeholderSanitizer) {
this.placeholderSanitizer = placeholderSanitizer;
return this;
}

@Override
public HoneyBuilder<T, R> placeholderEvaluator(final PlaceholderEvaluator placeholderEvaluator) {
this.placeholderEvaluator = placeholderEvaluator;
return this;
}

@Override
public HoneyBuilder<T, R> processorRegistry(final ProcessorRegistry processorRegistry) {
this.processorRegistry = processorRegistry;
return this;
}
}
26 changes: 26 additions & 0 deletions honey-common/src/dev/shiza/honey/builder/HoneyBuilder.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package dev.shiza.honey.builder;

import dev.shiza.honey.Honey;
import dev.shiza.honey.conversion.ImplicitConversion;
import dev.shiza.honey.placeholder.evaluator.PlaceholderContext;
import dev.shiza.honey.placeholder.evaluator.PlaceholderEvaluator;
import dev.shiza.honey.placeholder.resolver.PlaceholderResolver;
import dev.shiza.honey.placeholder.sanitizer.PlaceholderSanitizer;
import dev.shiza.honey.processor.ProcessorRegistry;

public interface HoneyBuilder<T, R extends Honey<T>> {

HoneyBuilder<T, R> implicitConversion(final ImplicitConversion implicitConversion);

HoneyBuilder<T, R> placeholderContext(final PlaceholderContext placeholderContext);

HoneyBuilder<T, R> placeholderResolver(final PlaceholderResolver placeholderResolver);

HoneyBuilder<T, R> placeholderSanitizer(final PlaceholderSanitizer placeholderSanitizer);

HoneyBuilder<T, R> placeholderEvaluator(final PlaceholderEvaluator placeholderEvaluator);

HoneyBuilder<T, R> processorRegistry(final ProcessorRegistry processorRegistry);

R build();
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,10 @@ public static ImplicitConversion create(final Set<ImplicitConversionUnit> units)
return new ImplicitConversion(units);
}

public static ImplicitConversion create(final ImplicitConversionUnit... units) {
return create(Set.of(units));
}

public <T> T convert(final Object value) {
Object currentValue = value;

Expand Down

0 comments on commit c105284

Please sign in to comment.