2021-08-17
This commit is contained in:
@@ -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")
|
||||
|
||||
14
locale/build.gradle.kts
Normal file
14
locale/build.gradle.kts
Normal file
@@ -0,0 +1,14 @@
|
||||
/*
|
||||
* Examples for Java
|
||||
*
|
||||
* Copyright (c) 2021. Elex. All Rights Reserved.
|
||||
* https://www.elex-project.com/
|
||||
*/
|
||||
|
||||
plugins {
|
||||
id("elex-java")
|
||||
}
|
||||
|
||||
dependencies {
|
||||
|
||||
}
|
||||
20
locale/logback.xml
Normal file
20
locale/logback.xml
Normal file
@@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
~ Examples for Java
|
||||
~
|
||||
~ Copyright (c) 2021. Elex. All Rights Reserved.
|
||||
~ https://www.elex-project.com/
|
||||
-->
|
||||
|
||||
<configuration>
|
||||
|
||||
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<encoder>
|
||||
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<root level="TRACE">
|
||||
<appender-ref ref="CONSOLE" />
|
||||
</root>
|
||||
</configuration>
|
||||
27
locale/src/main/java/kr/pe/elex/examples/LocaleSample.java
Normal file
27
locale/src/main/java/kr/pe/elex/examples/LocaleSample.java
Normal file
@@ -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 {
|
||||
|
||||
}
|
||||
@@ -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());
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
14
mustache/build.gradle.kts
Normal file
14
mustache/build.gradle.kts
Normal file
@@ -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")
|
||||
}
|
||||
20
mustache/logback.xml
Normal file
20
mustache/logback.xml
Normal file
@@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
~ Examples for Java
|
||||
~
|
||||
~ Copyright (c) 2021. Elex. All Rights Reserved.
|
||||
~ https://www.elex-project.com/
|
||||
-->
|
||||
|
||||
<configuration>
|
||||
|
||||
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<encoder>
|
||||
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<root level="TRACE">
|
||||
<appender-ref ref="CONSOLE" />
|
||||
</root>
|
||||
</configuration>
|
||||
@@ -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 {
|
||||
}
|
||||
18
mustache/src/main/java/kr/pe/elex/examples/Person.java
Normal file
18
mustache/src/main/java/kr/pe/elex/examples/Person.java
Normal file
@@ -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;
|
||||
}
|
||||
2
mustache/src/main/resources/sample.mustache
Normal file
2
mustache/src/main/resources/sample.mustache
Normal file
@@ -0,0 +1,2 @@
|
||||
<h1>Sample Mustache</h1>
|
||||
<p>Hello, <span>{{person.name}}</span></p>
|
||||
41
mustache/src/test/java/kr/pe/elex/examples/MustacheTest.java
Normal file
41
mustache/src/test/java/kr/pe/elex/examples/MustacheTest.java
Normal file
@@ -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<String, Object> 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);
|
||||
}
|
||||
}
|
||||
@@ -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"
|
||||
)
|
||||
|
||||
15
thymeleaf/build.gradle.kts
Normal file
15
thymeleaf/build.gradle.kts
Normal file
@@ -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")
|
||||
|
||||
}
|
||||
20
thymeleaf/logback.xml
Normal file
20
thymeleaf/logback.xml
Normal file
@@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
~ Examples for Java
|
||||
~
|
||||
~ Copyright (c) 2021. Elex. All Rights Reserved.
|
||||
~ https://www.elex-project.com/
|
||||
-->
|
||||
|
||||
<configuration>
|
||||
|
||||
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<encoder>
|
||||
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<root level="debug">
|
||||
<appender-ref ref="CONSOLE" />
|
||||
</root>
|
||||
</configuration>
|
||||
18
thymeleaf/src/main/java/kr/pe/elex/examples/Person.java
Normal file
18
thymeleaf/src/main/java/kr/pe/elex/examples/Person.java
Normal file
@@ -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;
|
||||
}
|
||||
91
thymeleaf/src/main/java/kr/pe/elex/examples/Thymeleaf.java
Normal file
91
thymeleaf/src/main/java/kr/pe/elex/examples/Thymeleaf.java
Normal file
@@ -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<String, String> resolveMessagesForTemplate(String template, ITemplateResource templateResource, Locale locale) {
|
||||
|
||||
Map<String, String> map = propertiesToMap(getClass()
|
||||
.getResourceAsStream("/messages_" + locale.getLanguage() + ".properties"));
|
||||
return map;
|
||||
}
|
||||
}
|
||||
|
||||
private static Map<String, String> propertiesToMap(InputStream is) throws IOException {
|
||||
Properties properties = properties(is);
|
||||
Map<String, String> 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;
|
||||
}
|
||||
}
|
||||
9
thymeleaf/src/main/resources/messages.properties
Normal file
9
thymeleaf/src/main/resources/messages.properties
Normal file
@@ -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!
|
||||
8
thymeleaf/src/main/resources/messages_ko.properties
Normal file
8
thymeleaf/src/main/resources/messages_ko.properties
Normal file
@@ -0,0 +1,8 @@
|
||||
#
|
||||
# Examples for Java
|
||||
#
|
||||
# Copyright (c) 2021. Elex. All Rights Reserved.
|
||||
# https://www.elex-project.com/
|
||||
#
|
||||
|
||||
hello = 안녕
|
||||
12
thymeleaf/src/main/resources/sample.html
Normal file
12
thymeleaf/src/main/resources/sample.html
Normal file
@@ -0,0 +1,12 @@
|
||||
<!DOCTYPE html>
|
||||
<html xmlns:th="http://www.thymeleaf.org">
|
||||
<head>
|
||||
<title>Thymeleaf Sample</title>
|
||||
<meta charset="UTF-8"/>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
||||
</head>
|
||||
<body>
|
||||
<p><span th:text="#{hello}"></span><span th:text="${person.name}">NAME</span></p>
|
||||
<p th:text="#{only}"></p>
|
||||
</body>
|
||||
</html>
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user