2021-08-17

This commit is contained in:
2021-08-17 18:37:42 +09:00
parent ed54dbad52
commit d55894b614
20 changed files with 415 additions and 2 deletions

View File

@@ -71,7 +71,7 @@ dependencies {
implementation("org.slf4j:slf4j-api:1.7.32") implementation("org.slf4j:slf4j-api:1.7.32")
implementation("org.jetbrains:annotations:22.0.0") 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") compileOnly("org.projectlombok:lombok:1.18.20")
annotationProcessor("org.projectlombok:lombok:1.18.20") annotationProcessor("org.projectlombok:lombok:1.18.20")

14
locale/build.gradle.kts Normal file
View 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
View 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>

View 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 {
}

View 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 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
View 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
View 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>

View File

@@ -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 {
}

View 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;
}

View File

@@ -0,0 +1,2 @@
<h1>Sample Mustache</h1>
<p>Hello, <span>{{person.name}}</span></p>

View 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);
}
}

View File

@@ -13,5 +13,6 @@ include(
"web-socket-servlet", "web-socket-client", "web-socket-servlet", "web-socket-client",
"thread", "hibernate", "jdbc-sqlite", "thread", "hibernate", "jdbc-sqlite",
"xml", "jackson", "jsoup", "markdown", "network", "httpd", "xml", "jackson", "jsoup", "markdown", "network", "httpd",
"swing", "java-fx", "properties" "swing", "java-fx", "properties",
"mustache", "thymeleaf", "locale"
) )

View 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
View 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>

View 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;
}

View 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;
}
}

View 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!

View File

@@ -0,0 +1,8 @@
#
# Examples for Java
#
# Copyright (c) 2021. Elex. All Rights Reserved.
# https://www.elex-project.com/
#
hello = 안녕

View 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>

View File

@@ -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);
}
}