diff --git a/application-module/build.gradle b/application-module/build.gradle new file mode 100644 index 000000000..aacf047b9 --- /dev/null +++ b/application-module/build.gradle @@ -0,0 +1,13 @@ +plugins { + id 'java' +} + +version '1.0.0' + +repositories { + mavenCentral() +} + +dependencies { + testCompile group: 'junit', name: 'junit', version: '4.12' +} diff --git a/application-module/src/main/java/Application.java b/application-module/src/main/java/Application.java new file mode 100644 index 000000000..234dbb378 --- /dev/null +++ b/application-module/src/main/java/Application.java @@ -0,0 +1,37 @@ +import controller.CreateUserController; +import controller.ListController; +import controller.RootController; +import controller.UserLoginController; +import domain.UrlMapper; +import domain.controller.Controller; +import domain.controller.FrontController; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class Application { + + private static final Logger logger = LoggerFactory.getLogger(RequestHandler.class); + + private static final Controller CONTROLLER; + + static { + Map urlMapper = new HashMap<>(); + urlMapper.put("/user/create", CreateUserController.getInstance()); + urlMapper.put("/user/login", UserLoginController.getInstance()); + urlMapper.put("/", RootController.getInstance()); + urlMapper.put("/user/list", ListController.getInstance()); + CONTROLLER = new FrontController(new UrlMapper(urlMapper)); + } + + public static void main(String[] args) throws Exception { + try { + WebServer.main(args, CONTROLLER); + } catch (IOException e) { + logger.error(e.getMessage()); + e.printStackTrace(); + } + } +} diff --git a/src/main/java/web/application/controller/CreateUserController.java b/application-module/src/main/java/controller/CreateUserController.java similarity index 83% rename from src/main/java/web/application/controller/CreateUserController.java rename to application-module/src/main/java/controller/CreateUserController.java index 87cd0c718..563ba046d 100644 --- a/src/main/java/web/application/controller/CreateUserController.java +++ b/application-module/src/main/java/controller/CreateUserController.java @@ -1,9 +1,10 @@ -package web.application.controller; +package controller; import db.DataBase; -import web.application.domain.model.User; -import web.server.domain.request.HttpRequest; -import web.server.domain.response.HttpResponse; +import domain.controller.AbstractController; +import domain.model.User; +import domain.request.HttpRequest; +import domain.response.HttpResponse; public class CreateUserController extends AbstractController { @@ -30,5 +31,6 @@ public void doPost(HttpRequest httpRequest, HttpResponse httpResponse) { private static class ControllerCache { private static final CreateUserController CREATE_USER_CONTROLLER = new CreateUserController(); + } } diff --git a/src/main/java/web/application/controller/ListController.java b/application-module/src/main/java/controller/ListController.java similarity index 58% rename from src/main/java/web/application/controller/ListController.java rename to application-module/src/main/java/controller/ListController.java index 001710ab7..6f33c322c 100644 --- a/src/main/java/web/application/controller/ListController.java +++ b/application-module/src/main/java/controller/ListController.java @@ -1,35 +1,40 @@ -package web.application.controller; +package controller; +import utils.HandlebarsHelper; +import db.DataBase; +import domain.controller.AbstractController; +import domain.request.HttpRequest; +import domain.response.HttpResponse; +import dto.UserListResponse; import java.util.ArrayList; import java.util.Optional; - -import db.DataBase; -import web.HandlebarsHelper; -import web.application.dto.UserListResponse; -import web.server.domain.request.HttpRequest; -import web.server.domain.response.HttpResponse; -import web.server.utils.StaticFileType; +import utils.StaticFileType; public class ListController extends AbstractController { + private static final String LOGINED = "logined"; + + private ListController() { + super(); + } + public static ListController getInstance() { - return ListController.Cache.LIST_CONTROLLER; + return Cache.LIST_CONTROLLER; } @Override public void doGet(HttpRequest httpRequest, HttpResponse httpResponse) { - boolean isLogined = Optional.ofNullable(httpRequest.getSession().getAttribute("logined")) + boolean isLogined = Optional.ofNullable(httpRequest.getSession().getAttribute(LOGINED)) .map(value -> Boolean.parseBoolean(value.toString())) .orElse(false); if (!isLogined) { - httpResponse.forward("templates/index.html", StaticFileType.HTML); + httpResponse.sendRedirect("/"); return; } - HandlebarsHelper handlebarsHelper = HandlebarsHelper.getInstance(); UserListResponse userListResponse = UserListResponse.of(new ArrayList<>(DataBase.findAll())); - String content = handlebarsHelper.apply("user/list", userListResponse); + String content = HandlebarsHelper.apply("user/list", userListResponse); httpResponse.forward(content); } diff --git a/src/main/java/web/application/controller/RootController.java b/application-module/src/main/java/controller/RootController.java similarity index 75% rename from src/main/java/web/application/controller/RootController.java rename to application-module/src/main/java/controller/RootController.java index 99c30f123..0e8570254 100644 --- a/src/main/java/web/application/controller/RootController.java +++ b/application-module/src/main/java/controller/RootController.java @@ -1,9 +1,10 @@ -package web.application.controller; +package controller; -import web.application.common.FilePrefixPathMapper; -import web.server.domain.request.HttpRequest; -import web.server.domain.response.HttpResponse; -import web.server.utils.StaticFileType; +import domain.controller.AbstractController; +import domain.request.HttpRequest; +import domain.response.HttpResponse; +import utils.FilePrefixPathMapper; +import utils.StaticFileType; public class RootController extends AbstractController { diff --git a/src/main/java/web/application/controller/UserLoginController.java b/application-module/src/main/java/controller/UserLoginController.java similarity index 76% rename from src/main/java/web/application/controller/UserLoginController.java rename to application-module/src/main/java/controller/UserLoginController.java index 666e499fa..0a63f5731 100644 --- a/src/main/java/web/application/controller/UserLoginController.java +++ b/application-module/src/main/java/controller/UserLoginController.java @@ -1,15 +1,20 @@ -package web.application.controller; +package controller; -import web.application.common.FilePrefixPathMapper; -import web.application.service.UserService; -import web.server.domain.request.HttpRequest; -import web.server.domain.request.HttpSession; -import web.server.domain.response.HttpResponse; -import web.server.domain.response.ResponseCookie; -import web.server.utils.StaticFileType; +import domain.controller.AbstractController; +import domain.request.HttpRequest; +import domain.request.HttpSession; +import domain.response.HttpResponse; +import domain.response.ResponseCookie; +import service.UserService; +import utils.FilePrefixPathMapper; +import utils.StaticFileType; public class UserLoginController extends AbstractController { + private UserLoginController() { + super(); + } + public static UserLoginController getInstance() { return Cache.USER_LOGIN_CONTROLLER; } diff --git a/src/main/java/db/DataBase.java b/application-module/src/main/java/db/DataBase.java similarity index 93% rename from src/main/java/db/DataBase.java rename to application-module/src/main/java/db/DataBase.java index 8dc8c7fd6..7c24ab476 100644 --- a/src/main/java/db/DataBase.java +++ b/application-module/src/main/java/db/DataBase.java @@ -1,10 +1,10 @@ package db; import com.google.common.collect.Maps; +import domain.model.User; import java.util.Collection; import java.util.Map; import java.util.Optional; -import web.application.domain.model.User; public class DataBase { diff --git a/src/main/java/web/application/domain/model/User.java b/application-module/src/main/java/domain/model/User.java similarity index 58% rename from src/main/java/web/application/domain/model/User.java rename to application-module/src/main/java/domain/model/User.java index 0c37405ae..24f7b4561 100644 --- a/src/main/java/web/application/domain/model/User.java +++ b/application-module/src/main/java/domain/model/User.java @@ -1,15 +1,11 @@ -package web.application.domain.model; +package domain.model; -import lombok.AccessLevel; -import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; import lombok.ToString; -@AllArgsConstructor(access = AccessLevel.PRIVATE) @Getter @ToString -@Builder public class User { private String userId; @@ -17,6 +13,14 @@ public class User { private String name; private String email; + @Builder + public User(String userId, String password, String name, String email) { + this.userId = userId; + this.password = password; + this.name = name; + this.email = email; + } + public boolean hasPasswordSameWith(String password) { return this.password.equals(password); } diff --git a/src/main/java/web/application/dto/ResponseDto.java b/application-module/src/main/java/dto/ResponseDto.java similarity index 57% rename from src/main/java/web/application/dto/ResponseDto.java rename to application-module/src/main/java/dto/ResponseDto.java index 98b5e322c..3021d777b 100644 --- a/src/main/java/web/application/dto/ResponseDto.java +++ b/application-module/src/main/java/dto/ResponseDto.java @@ -1,4 +1,4 @@ -package web.application.dto; +package dto; public abstract class ResponseDto { diff --git a/src/main/java/web/application/dto/UserListResponse.java b/application-module/src/main/java/dto/UserListResponse.java similarity index 83% rename from src/main/java/web/application/dto/UserListResponse.java rename to application-module/src/main/java/dto/UserListResponse.java index 9bca48f74..c9fd7a566 100644 --- a/src/main/java/web/application/dto/UserListResponse.java +++ b/application-module/src/main/java/dto/UserListResponse.java @@ -1,7 +1,7 @@ -package web.application.dto; +package dto; +import domain.model.User; import java.util.List; -import web.application.domain.model.User; public class UserListResponse extends ResponseDto { diff --git a/src/main/java/web/application/service/UserService.java b/application-module/src/main/java/service/UserService.java similarity index 87% rename from src/main/java/web/application/service/UserService.java rename to application-module/src/main/java/service/UserService.java index 9d714d546..a7f57503f 100644 --- a/src/main/java/web/application/service/UserService.java +++ b/application-module/src/main/java/service/UserService.java @@ -1,8 +1,8 @@ -package web.application.service; +package service; import db.DataBase; +import domain.model.User; import java.util.Optional; -import web.application.domain.model.User; public class UserService { diff --git a/src/main/java/web/HandlebarsHelper.java b/application-module/src/main/java/utils/HandlebarsHelper.java similarity index 62% rename from src/main/java/web/HandlebarsHelper.java rename to application-module/src/main/java/utils/HandlebarsHelper.java index 94e18e5e0..45ee42c98 100644 --- a/src/main/java/web/HandlebarsHelper.java +++ b/application-module/src/main/java/utils/HandlebarsHelper.java @@ -1,23 +1,24 @@ -package web; +package utils; import com.github.jknack.handlebars.Handlebars; import com.github.jknack.handlebars.Template; import com.github.jknack.handlebars.io.ClassPathTemplateLoader; import com.github.jknack.handlebars.io.TemplateLoader; +import dto.ResponseDto; import java.io.IOException; -import web.application.dto.ResponseDto; public class HandlebarsHelper { - public static HandlebarsHelper getInstance() { - return Cache.HANDLEBARS_HELPER; - } + private static final Handlebars handlebars; - public String apply(String path, ResponseDto responseDto) { + static { TemplateLoader loader = new ClassPathTemplateLoader(); loader.setPrefix("/templates"); loader.setSuffix(".html"); - Handlebars handlebars = new Handlebars(loader); + handlebars = new Handlebars(loader); + } + + public static String apply(String path, ResponseDto responseDto) { try { Template template = handlebars.compile(path); return template.apply(responseDto); @@ -26,8 +27,4 @@ public String apply(String path, ResponseDto responseDto) { } } - private static class Cache { - - private static final HandlebarsHelper HANDLEBARS_HELPER = new HandlebarsHelper(); - } } diff --git a/src/main/resources/logback.xml b/application-module/src/main/resources/logback.xml similarity index 100% rename from src/main/resources/logback.xml rename to application-module/src/main/resources/logback.xml diff --git a/src/main/resources/static/css/bootstrap.min.css b/application-module/src/main/resources/static/css/bootstrap.min.css similarity index 100% rename from src/main/resources/static/css/bootstrap.min.css rename to application-module/src/main/resources/static/css/bootstrap.min.css diff --git a/src/main/resources/static/css/styles.css b/application-module/src/main/resources/static/css/styles.css similarity index 100% rename from src/main/resources/static/css/styles.css rename to application-module/src/main/resources/static/css/styles.css diff --git a/src/main/resources/static/favicon.ico b/application-module/src/main/resources/static/favicon.ico similarity index 100% rename from src/main/resources/static/favicon.ico rename to application-module/src/main/resources/static/favicon.ico diff --git a/src/main/resources/static/fonts/glyphicons-halflings-regular.eot b/application-module/src/main/resources/static/fonts/glyphicons-halflings-regular.eot similarity index 100% rename from src/main/resources/static/fonts/glyphicons-halflings-regular.eot rename to application-module/src/main/resources/static/fonts/glyphicons-halflings-regular.eot diff --git a/src/main/resources/static/fonts/glyphicons-halflings-regular.svg b/application-module/src/main/resources/static/fonts/glyphicons-halflings-regular.svg similarity index 100% rename from src/main/resources/static/fonts/glyphicons-halflings-regular.svg rename to application-module/src/main/resources/static/fonts/glyphicons-halflings-regular.svg diff --git a/src/main/resources/static/fonts/glyphicons-halflings-regular.ttf b/application-module/src/main/resources/static/fonts/glyphicons-halflings-regular.ttf similarity index 100% rename from src/main/resources/static/fonts/glyphicons-halflings-regular.ttf rename to application-module/src/main/resources/static/fonts/glyphicons-halflings-regular.ttf diff --git a/src/main/resources/static/fonts/glyphicons-halflings-regular.woff b/application-module/src/main/resources/static/fonts/glyphicons-halflings-regular.woff similarity index 100% rename from src/main/resources/static/fonts/glyphicons-halflings-regular.woff rename to application-module/src/main/resources/static/fonts/glyphicons-halflings-regular.woff diff --git a/src/main/resources/static/fonts/glyphicons-halflings-regular.woff2 b/application-module/src/main/resources/static/fonts/glyphicons-halflings-regular.woff2 similarity index 100% rename from src/main/resources/static/fonts/glyphicons-halflings-regular.woff2 rename to application-module/src/main/resources/static/fonts/glyphicons-halflings-regular.woff2 diff --git a/src/main/resources/static/images/80-text.png b/application-module/src/main/resources/static/images/80-text.png similarity index 100% rename from src/main/resources/static/images/80-text.png rename to application-module/src/main/resources/static/images/80-text.png diff --git a/src/main/resources/static/js/bootstrap.min.js b/application-module/src/main/resources/static/js/bootstrap.min.js similarity index 100% rename from src/main/resources/static/js/bootstrap.min.js rename to application-module/src/main/resources/static/js/bootstrap.min.js diff --git a/src/main/resources/static/js/jquery-2.2.0.min.js b/application-module/src/main/resources/static/js/jquery-2.2.0.min.js similarity index 100% rename from src/main/resources/static/js/jquery-2.2.0.min.js rename to application-module/src/main/resources/static/js/jquery-2.2.0.min.js diff --git a/src/main/resources/static/js/scripts.js b/application-module/src/main/resources/static/js/scripts.js similarity index 100% rename from src/main/resources/static/js/scripts.js rename to application-module/src/main/resources/static/js/scripts.js diff --git a/src/main/resources/templates/index.html b/application-module/src/main/resources/templates/index.html similarity index 97% rename from src/main/resources/templates/index.html rename to application-module/src/main/resources/templates/index.html index 9f1a6f6d9..42e383ff8 100644 --- a/src/main/resources/templates/index.html +++ b/application-module/src/main/resources/templates/index.html @@ -17,7 +17,7 @@