Skip to content

Commit

Permalink
Added UUID expression function for thymeleaf templating
Browse files Browse the repository at this point in the history
  • Loading branch information
ginccc committed Feb 7, 2025
1 parent 9188735 commit 59403f1
Show file tree
Hide file tree
Showing 6 changed files with 69 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import ai.labs.eddi.modules.templating.impl.HtmlTemplateEngine;
import ai.labs.eddi.modules.templating.impl.JavaScriptTemplateEngine;
import ai.labs.eddi.modules.templating.impl.TextTemplateEngine;
import ai.labs.eddi.modules.templating.impl.dialects.uuid.UUIDDialect;
import io.quarkus.runtime.Startup;
import jakarta.annotation.PostConstruct;
import jakarta.enterprise.context.ApplicationScoped;
Expand Down Expand Up @@ -67,6 +68,7 @@ private TemplateEngine createTemplateEngine(TemplateMode templateMode) {

var templateEngine = new TemplateEngine();
templateEngine.addTemplateResolver(templateResolver);
templateEngine.addDialect(new UUIDDialect());

return templateEngine;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package ai.labs.eddi.modules.templating.impl;

import ai.labs.eddi.modules.templating.ITemplatingEngine;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;
import org.thymeleaf.exceptions.TemplateInputException;

import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import java.util.Arrays;
import java.util.List;
import java.util.Locale;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package ai.labs.eddi.modules.templating.impl.dialects.uuid;

import org.thymeleaf.dialect.AbstractDialect;
import org.thymeleaf.dialect.IExpressionObjectDialect;
import org.thymeleaf.expression.IExpressionObjectFactory;

public class UUIDDialect extends AbstractDialect implements IExpressionObjectDialect {
public UUIDDialect() {
super("UUIDDialect");
}

@Override
public IExpressionObjectFactory getExpressionObjectFactory() {
return new UUIDExpressionObjectFactory();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package ai.labs.eddi.modules.templating.impl.dialects.uuid;

import org.thymeleaf.context.IExpressionContext;
import org.thymeleaf.expression.IExpressionObjectFactory;

import java.util.Collections;
import java.util.Set;

public class UUIDExpressionObjectFactory implements IExpressionObjectFactory {
private static final String UUID_OBJECT_NAME = "uuidUtils";

@Override
public Set<String> getAllExpressionObjectNames() {
return Collections.singleton(UUID_OBJECT_NAME);
}

@Override
public Object buildObject(IExpressionContext context, String expressionObjectName) {
if (UUID_OBJECT_NAME.equals(expressionObjectName)) {
return new UUIDWrapper();
}

return null;
}

@Override
public boolean isCacheable(String expressionObjectName) {
return true;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package ai.labs.eddi.modules.templating.impl.dialects.uuid;

public class UUIDWrapper {
public String generateUUID() {
return java.util.UUID.randomUUID().toString();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package ai.labs.eddi.modules.templating.impl.dialects.uuid;

import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.assertEquals;

public class UUIDWrapperTest {
@Test
public void testGenerateUUID() {
assertEquals(36, new UUIDWrapper().generateUUID().length());
}
}

0 comments on commit 59403f1

Please sign in to comment.