Skip to content

Commit

Permalink
Add an addon for opel placeholder evaluator
Browse files Browse the repository at this point in the history
  • Loading branch information
shitzuu committed Aug 15, 2024
1 parent 2685764 commit 3d4661b
Show file tree
Hide file tree
Showing 8 changed files with 120 additions and 0 deletions.
1 change: 1 addition & 0 deletions .idea/gradle.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,13 @@
[versions]
honey = "1.0.0-SNAPSHOT"
apache-commons-lang3 = "3.16.0"
allegro-opel = "1.1.14"
iridium = "1.1.0"
parboiled = "1.4.1"

[libraries]
honey = { module = "dev.shiza:honey", version.ref = "honey" }
opel = { module = "pl.allegro.tech:opel", version.ref = "allegro-opel" }
lang = { module = "org.apache.commons:commons-lang3", version.ref = "apache-commons-lang3" }
iridium = { module = "com.iridium:IridiumColorAPI", version.ref = "iridium" }
parboiled = { module = "org.parboiled:parboiled-java", version.ref = "parboiled" }
16 changes: 16 additions & 0 deletions honey-opel/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
plugins {
`honey-java`
`honey-publish`
`honey-repositories`
}

dependencies {
compileOnly(libs.honey)
api(libs.lang)
api(libs.opel)
api(libs.parboiled)
}

honeyPublish {
artifactId = "honey-addons-opel"
}
20 changes: 20 additions & 0 deletions honey-opel/src/dev/shiza/honey/opel/OpelImplicitConversion.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package dev.shiza.honey.opel;

import pl.allegro.tech.opel.OpelEngineBuilder;

public abstract class OpelImplicitConversion<T, R> {

private final Class<T> from;
private final Class<R> to;

protected OpelImplicitConversion(Class<T> from, Class<R> to) {
this.from = from;
this.to = to;
}

public abstract R convert(final T from);

public void register(final OpelEngineBuilder builder) {
builder.withImplicitConversion(from, to, this::convert);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package dev.shiza.honey.opel;

import java.util.HashSet;
import java.util.Set;
import pl.allegro.tech.opel.OpelEngineBuilder;

public class OpelImplicitConversionBatch {

private final Set<OpelImplicitConversion<?, ?>> conversions;

OpelImplicitConversionBatch() {
this.conversions = new HashSet<>();
}

public static OpelImplicitConversionBatch create() {
return new OpelImplicitConversionBatch();
}

public OpelImplicitConversionBatch add(final OpelImplicitConversion<?, ?> conversion) {
conversions.add(conversion);
return this;
}

public void register(final OpelEngineBuilder engineBuilder) {
conversions.forEach(conversion -> conversion.register(engineBuilder));
}
}
31 changes: 31 additions & 0 deletions honey-opel/src/dev/shiza/honey/opel/OpelPlaceholderEvaluator.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package dev.shiza.honey.opel;

import dev.shiza.honey.placeholder.evaluator.EvaluatedPlaceholder;
import dev.shiza.honey.placeholder.evaluator.PlaceholderContext;
import dev.shiza.honey.placeholder.evaluator.PlaceholderEvaluator;
import dev.shiza.honey.placeholder.resolver.Placeholder;
import java.util.concurrent.CompletableFuture;
import pl.allegro.tech.opel.EvalContext;
import pl.allegro.tech.opel.EvalContextBuilder;
import pl.allegro.tech.opel.OpelEngine;

class OpelPlaceholderEvaluator implements PlaceholderEvaluator {

private final OpelEngine opelEngine;

OpelPlaceholderEvaluator(final OpelEngine opelEngine) {
this.opelEngine = opelEngine;
}

@Override
public CompletableFuture<EvaluatedPlaceholder> evaluate(
final PlaceholderContext context, final Placeholder placeholder) {
return opelEngine
.eval(placeholder.expression(), getAsEvalContext(context))
.thenApply(evaluatedValue -> new EvaluatedPlaceholder(placeholder, evaluatedValue));
}

private EvalContext getAsEvalContext(final PlaceholderContext context) {
return EvalContextBuilder.create().withValues(context.getValues()).build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package dev.shiza.honey.opel;

import dev.shiza.honey.placeholder.evaluator.PlaceholderEvaluator;
import pl.allegro.tech.opel.OpelEngine;
import pl.allegro.tech.opel.OpelEngineBuilder;

public final class OpelPlaceholderEvaluatorFactory {

private OpelPlaceholderEvaluatorFactory() {}

public static PlaceholderEvaluator create(final OpelEngine opelEngine) {
return new OpelPlaceholderEvaluator(opelEngine);
}

public static PlaceholderEvaluator create() {
return create(OpelEngineBuilder.create().build());
}
}
1 change: 1 addition & 0 deletions settings.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
rootProject.name = "honey-addons"
include("honey-iridium")
include("honey-opel")

0 comments on commit 3d4661b

Please sign in to comment.