diff --git a/buildSrc/src/main/kotlin/elex-base.gradle.kts b/buildSrc/src/main/kotlin/elex-base.gradle.kts index 720919c..4b2d22d 100644 --- a/buildSrc/src/main/kotlin/elex-base.gradle.kts +++ b/buildSrc/src/main/kotlin/elex-base.gradle.kts @@ -71,7 +71,7 @@ dependencies { implementation("org.slf4j:slf4j-api:1.7.32") implementation("org.jetbrains:annotations:22.0.0") - implementation("com.elex-project:abraxas:4.6.0") + implementation("com.elex-project:abraxas:4.7.0") compileOnly("org.projectlombok:lombok:1.18.20") annotationProcessor("org.projectlombok:lombok:1.18.20") diff --git a/locale/build.gradle.kts b/locale/build.gradle.kts new file mode 100644 index 0000000..d2aab59 --- /dev/null +++ b/locale/build.gradle.kts @@ -0,0 +1,14 @@ +/* + * Examples for Java + * + * Copyright (c) 2021. Elex. All Rights Reserved. + * https://www.elex-project.com/ + */ + +plugins { + id("elex-java") +} + +dependencies { + +} diff --git a/locale/logback.xml b/locale/logback.xml new file mode 100644 index 0000000..74ff8a3 --- /dev/null +++ b/locale/logback.xml @@ -0,0 +1,20 @@ + + + + + + + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + + + + + + diff --git a/locale/src/main/java/kr/pe/elex/examples/LocaleSample.java b/locale/src/main/java/kr/pe/elex/examples/LocaleSample.java new file mode 100644 index 0000000..9c7b327 --- /dev/null +++ b/locale/src/main/java/kr/pe/elex/examples/LocaleSample.java @@ -0,0 +1,27 @@ +/* + * Examples for Java + * + * Copyright (c) 2021. Elex. All Rights Reserved. + * https://www.elex-project.com/ + */ + +package kr.pe.elex.examples; + +import com.sun.net.httpserver.HttpExchange; +import com.sun.net.httpserver.HttpHandler; +import com.sun.net.httpserver.HttpServer; +import lombok.extern.slf4j.Slf4j; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.net.InetSocketAddress; +import java.time.LocalDateTime; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + +@Slf4j +public class LocaleSample { + +} diff --git a/locale/src/test/java/kr/pe/elex/examples/LocaleSampleTest.java b/locale/src/test/java/kr/pe/elex/examples/LocaleSampleTest.java new file mode 100644 index 0000000..c28455e --- /dev/null +++ b/locale/src/test/java/kr/pe/elex/examples/LocaleSampleTest.java @@ -0,0 +1,41 @@ +/* + * Examples for Java + * + * Copyright (c) 2021. Elex. All Rights Reserved. + * https://www.elex-project.com/ + */ + +package kr.pe.elex.examples; + +import com.elex_project.abraxas.Console; +import lombok.extern.slf4j.Slf4j; +import org.junit.jupiter.api.Test; + +import java.util.Locale; + +import static org.junit.jupiter.api.Assertions.*; +@Slf4j +class LocaleSampleTest { + + @Test + void test(){ + Locale locale = Locale.KOREA; + + Console.writeLine("> Language: {}", locale.getLanguage()); + Console.writeLine("> Country: {}", locale.getCountry()); + + Console.writeLine("> Display Name: {}", locale.getDisplayName()); + Console.writeLine("> Display Country: {}", locale.getDisplayCountry()); + Console.writeLine("> Display Language: {}", locale.getDisplayLanguage()); + Console.writeLine("> Display Script: {}", locale.getDisplayScript()); + Console.writeLine("> Display Variant: {}", locale.getDisplayVariant()); + + Console.writeLine("> ISO3 Country: {}", locale.getISO3Country()); + Console.writeLine("> ISO3 Language: {}", locale.getISO3Language()); + + Console.writeLine("> To Language Tag: {}", locale.toLanguageTag()); + Console.writeLine("> To String: {}", locale.toString()); + + + } +} diff --git a/mustache/build.gradle.kts b/mustache/build.gradle.kts new file mode 100644 index 0000000..9bd25cd --- /dev/null +++ b/mustache/build.gradle.kts @@ -0,0 +1,14 @@ +/* + * Examples for Java + * + * Copyright (c) 2021. Elex. All Rights Reserved. + * https://www.elex-project.com/ + */ + +plugins { + id("elex-java") +} + +dependencies { + implementation("com.github.spullara.mustache.java:compiler:0.9.7") +} diff --git a/mustache/logback.xml b/mustache/logback.xml new file mode 100644 index 0000000..74ff8a3 --- /dev/null +++ b/mustache/logback.xml @@ -0,0 +1,20 @@ + + + + + + + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + + + + + + diff --git a/mustache/src/main/java/kr/pe/elex/examples/MustacheSample.java b/mustache/src/main/java/kr/pe/elex/examples/MustacheSample.java new file mode 100644 index 0000000..04b610d --- /dev/null +++ b/mustache/src/main/java/kr/pe/elex/examples/MustacheSample.java @@ -0,0 +1,11 @@ +/* + * Examples for Java + * + * Copyright (c) 2021. Elex. All Rights Reserved. + * https://www.elex-project.com/ + */ + +package kr.pe.elex.examples; + +public class MustacheSample { +} diff --git a/mustache/src/main/java/kr/pe/elex/examples/Person.java b/mustache/src/main/java/kr/pe/elex/examples/Person.java new file mode 100644 index 0000000..3f41839 --- /dev/null +++ b/mustache/src/main/java/kr/pe/elex/examples/Person.java @@ -0,0 +1,18 @@ +/* + * Examples for Java + * + * Copyright (c) 2021. Elex. All Rights Reserved. + * https://www.elex-project.com/ + */ + +package kr.pe.elex.examples; + +import lombok.AllArgsConstructor; +import lombok.Data; + +@Data +@AllArgsConstructor +public class Person { + private String name; + private int age; +} diff --git a/mustache/src/main/resources/sample.mustache b/mustache/src/main/resources/sample.mustache new file mode 100644 index 0000000..9680375 --- /dev/null +++ b/mustache/src/main/resources/sample.mustache @@ -0,0 +1,2 @@ +

Sample Mustache

+

Hello, {{person.name}}

diff --git a/mustache/src/test/java/kr/pe/elex/examples/MustacheTest.java b/mustache/src/test/java/kr/pe/elex/examples/MustacheTest.java new file mode 100644 index 0000000..ee7834a --- /dev/null +++ b/mustache/src/test/java/kr/pe/elex/examples/MustacheTest.java @@ -0,0 +1,41 @@ +/* + * Examples for Java + * + * Copyright (c) 2021. Elex. All Rights Reserved. + * https://www.elex-project.com/ + */ + +package kr.pe.elex.examples; + +import com.elex_project.abraxas.Console; +import com.github.mustachejava.DefaultMustacheFactory; +import com.github.mustachejava.Mustache; +import com.github.mustachejava.MustacheFactory; +import org.junit.jupiter.api.Test; + +import java.io.InputStreamReader; +import java.io.StringWriter; +import java.util.HashMap; +import java.util.Map; + +class MustacheTest { + + @Test + void test(){ + MustacheFactory factory = new DefaultMustacheFactory(); + Mustache mustache = factory + //.compile("/sample.mustache"); // 리소스로부터 템플릿을 불러온다. + .compile(new InputStreamReader(getClass().getResourceAsStream("/sample.mustache")), + "sample"); + + //Object context; // Object, List, Map 등 템플릿에 전달될 데이터 + Map context = new HashMap<>(); + context.put("person",new Person("Charlie", 14)); + + StringWriter writer = new StringWriter(); + mustache.execute(writer, context); + String result = writer.toString(); + + Console.writeLine(result); + } +} diff --git a/settings.gradle.kts b/settings.gradle.kts index 14d63ce..46fd87c 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -13,5 +13,6 @@ include( "web-socket-servlet", "web-socket-client", "thread", "hibernate", "jdbc-sqlite", "xml", "jackson", "jsoup", "markdown", "network", "httpd", - "swing", "java-fx", "properties" + "swing", "java-fx", "properties", + "mustache", "thymeleaf", "locale" ) diff --git a/thymeleaf/build.gradle.kts b/thymeleaf/build.gradle.kts new file mode 100644 index 0000000..954e503 --- /dev/null +++ b/thymeleaf/build.gradle.kts @@ -0,0 +1,15 @@ +/* + * Examples for Java + * + * Copyright (c) 2021. Elex. All Rights Reserved. + * https://www.elex-project.com/ + */ + +plugins { + id("elex-java") +} + +dependencies { + implementation("org.thymeleaf:thymeleaf:3.0.12.RELEASE") + +} diff --git a/thymeleaf/logback.xml b/thymeleaf/logback.xml new file mode 100644 index 0000000..207f78b --- /dev/null +++ b/thymeleaf/logback.xml @@ -0,0 +1,20 @@ + + + + + + + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + + + + + + diff --git a/thymeleaf/src/main/java/kr/pe/elex/examples/Person.java b/thymeleaf/src/main/java/kr/pe/elex/examples/Person.java new file mode 100644 index 0000000..3f41839 --- /dev/null +++ b/thymeleaf/src/main/java/kr/pe/elex/examples/Person.java @@ -0,0 +1,18 @@ +/* + * Examples for Java + * + * Copyright (c) 2021. Elex. All Rights Reserved. + * https://www.elex-project.com/ + */ + +package kr.pe.elex.examples; + +import lombok.AllArgsConstructor; +import lombok.Data; + +@Data +@AllArgsConstructor +public class Person { + private String name; + private int age; +} diff --git a/thymeleaf/src/main/java/kr/pe/elex/examples/Thymeleaf.java b/thymeleaf/src/main/java/kr/pe/elex/examples/Thymeleaf.java new file mode 100644 index 0000000..09d0135 --- /dev/null +++ b/thymeleaf/src/main/java/kr/pe/elex/examples/Thymeleaf.java @@ -0,0 +1,91 @@ +/* + * Examples for Java + * + * Copyright (c) 2021. Elex. All Rights Reserved. + * https://www.elex-project.com/ + */ + +package kr.pe.elex.examples; + +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.thymeleaf.TemplateEngine; +import org.thymeleaf.context.Context; +import org.thymeleaf.messageresolver.StandardMessageResolver; +import org.thymeleaf.templatemode.TemplateMode; +import org.thymeleaf.templateresolver.ClassLoaderTemplateResolver; +import org.thymeleaf.templateresource.ITemplateResource; + +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.StringWriter; +import java.nio.charset.StandardCharsets; +import java.util.HashMap; +import java.util.Locale; +import java.util.Map; +import java.util.Properties; + +@Slf4j +public class Thymeleaf { + private final TemplateEngine templateEngine; + + @SneakyThrows + public Thymeleaf() { + templateEngine = new TemplateEngine(); + templateEngine.setTemplateResolver(new MyTemplateResolver()); + templateEngine.setMessageResolver(new MyMessageResolver()); + } + + public String process(String template, Context context) throws IOException { + + StringWriter writer = new StringWriter(); + templateEngine.process(template, context, writer); + + String out = writer.toString(); + writer.close(); + return out; + } + + private static class MyTemplateResolver extends ClassLoaderTemplateResolver { + MyTemplateResolver() { + super(); + this.setTemplateMode(TemplateMode.HTML); + this.setSuffix(".html"); + } + } + + private static class MyMessageResolver extends StandardMessageResolver { + @SneakyThrows + MyMessageResolver() { + super(); + + this.setDefaultMessages(properties(getClass() + .getResourceAsStream("/messages.properties"))); + } + + @SneakyThrows + @Override + protected Map resolveMessagesForTemplate(String template, ITemplateResource templateResource, Locale locale) { + + Map map = propertiesToMap(getClass() + .getResourceAsStream("/messages_" + locale.getLanguage() + ".properties")); + return map; + } + } + + private static Map propertiesToMap(InputStream is) throws IOException { + Properties properties = properties(is); + Map map = new HashMap<>(); + for (String key : properties.stringPropertyNames()) { + map.put(key, properties.getProperty(key)); + } + return map; + } + + private static Properties properties(InputStream is) throws IOException { + Properties properties = new Properties(); + properties.load(new InputStreamReader(is, StandardCharsets.UTF_8)); + return properties; + } +} diff --git a/thymeleaf/src/main/resources/messages.properties b/thymeleaf/src/main/resources/messages.properties new file mode 100644 index 0000000..4f0855a --- /dev/null +++ b/thymeleaf/src/main/resources/messages.properties @@ -0,0 +1,9 @@ + +# Examples for Java +# +# Copyright (c) 2021. Elex. All Rights Reserved. +# https://www.elex-project.com/ +# + +hello = Hello +only = Only in ROOT! diff --git a/thymeleaf/src/main/resources/messages_ko.properties b/thymeleaf/src/main/resources/messages_ko.properties new file mode 100644 index 0000000..dd65d24 --- /dev/null +++ b/thymeleaf/src/main/resources/messages_ko.properties @@ -0,0 +1,8 @@ +# +# Examples for Java +# +# Copyright (c) 2021. Elex. All Rights Reserved. +# https://www.elex-project.com/ +# + +hello = 안녕 diff --git a/thymeleaf/src/main/resources/sample.html b/thymeleaf/src/main/resources/sample.html new file mode 100644 index 0000000..c238f54 --- /dev/null +++ b/thymeleaf/src/main/resources/sample.html @@ -0,0 +1,12 @@ + + + + Thymeleaf Sample + + + + +

NAME

+

+ + diff --git a/thymeleaf/src/test/java/kr/pe/elex/examples/ThymeleafTest.java b/thymeleaf/src/test/java/kr/pe/elex/examples/ThymeleafTest.java new file mode 100644 index 0000000..35f6d31 --- /dev/null +++ b/thymeleaf/src/test/java/kr/pe/elex/examples/ThymeleafTest.java @@ -0,0 +1,31 @@ +/* + * Examples for Java + * + * Copyright (c) 2021. Elex. All Rights Reserved. + * https://www.elex-project.com/ + */ + +package kr.pe.elex.examples; + +import com.elex_project.abraxas.Console; +import lombok.extern.slf4j.Slf4j; +import org.junit.jupiter.api.Test; +import org.thymeleaf.context.Context; + +import java.io.IOException; + +@Slf4j +class ThymeleafTest { + + @Test + void test() throws IOException { + Context context = new Context(); + ///context.setLocale(Locale.ENGLISH); + context.setVariable("person", new Person("Charlie", 14)); + + Thymeleaf thymeleaf = new Thymeleaf(); + String out = thymeleaf.process("sample.html", context); + + Console.writeLine(out); + } +}