Main
더보기
package com.sbs.example.easytextboard;
public class Main {
public static void main(String[] args) {
new App().run();
}
}
App
더보기
package com.sbs.example.easytextboard;
import java.util.Scanner;
import com.sbs.example.easytextboard.container.Container;
import com.sbs.example.easytextboard.controller.ArticleController;
import com.sbs.example.easytextboard.controller.Controller;
import com.sbs.example.easytextboard.controller.MemberController;
import com.sbs.example.easytextboard.service.ArticleService;
import com.sbs.example.easytextboard.service.MemberService;
public class App {
private MemberController memberController;
private ArticleController articleController;
public App() {
memberController = Container.memberController;
articleController = Container.articleController;
makeTestData();
init();
}
private void init() {
ArticleService articleService = Container.articleService;
Container.session.selectedBoardId = articleService.getDefultBoardId();
}
private void makeTestData() {
// 회원 2명 생성
MemberService memberService = Container.memberService;
int firstMemberId = memberService.join("aaa", "aaa", "aaa");
int secondMemberId = memberService.join("bbb", "bbb", "bbb");
// 테스트 게시판 2개 생성
ArticleService articleService = Container.articleService;
int noticeBoardId = articleService.makeBoard("공지사항");
int freeBoardId = articleService.makeBoard("자유");
}
public void run() {
Scanner sc = Container.scanner;
while (true) {
System.out.printf("명령어 입력 : ");
String command = sc.nextLine();
if (command.equals("system exit")) {
System.out.println("== 프로그램 종료 ==");
break;
}
Controller controller = getControllerByCommand(command);
if (controller == null) {
System.out.println("존재하지 않는 명령어 입니다.");
continue;
}
if (controller != null) {
controller.doCommand(command);
}
}
sc.close();
}
private Controller getControllerByCommand(String command) {
if (command.startsWith("member ")) {
return memberController;
} else if (command.startsWith("article ")) {
return articleController;
}
return null;
}
}
Container
더보기
package com.sbs.example.easytextboard.container;
import java.util.Scanner;
import com.sbs.example.easytextboard.controller.ArticleController;
import com.sbs.example.easytextboard.controller.MemberController;
import com.sbs.example.easytextboard.dao.ArticleDao;
import com.sbs.example.easytextboard.dao.MemberDao;
import com.sbs.example.easytextboard.service.ArticleService;
import com.sbs.example.easytextboard.service.MemberService;
import com.sbs.example.easytextboard.session.Session;
public class Container {
public static Scanner scanner;
public static Session session;
public static ArticleService articleService;
public static MemberService memberService;
public static ArticleDao articleDao;
public static MemberDao memberDao;
public static MemberController memberController;
public static ArticleController articleController;
static {
scanner = new Scanner(System.in);
session = new Session();
articleDao = new ArticleDao();
memberDao = new MemberDao();
articleService = new ArticleService();
memberService = new MemberService();
memberController = new MemberController();
articleController = new ArticleController();
}
}
Controller
더보기
Article Controller
package com.sbs.example.easytextboard.controller;
import java.util.ArrayList;
import java.util.List;
import com.sbs.example.easytextboard.container.Container;
import com.sbs.example.easytextboard.dto.Article;
import com.sbs.example.easytextboard.dto.Board;
import com.sbs.example.easytextboard.dto.Member;
import com.sbs.example.easytextboard.service.ArticleService;
import com.sbs.example.easytextboard.service.MemberService;
public class ArticleController extends Controller {
private ArticleService articleService;
private MemberService memberService;
public ArticleController() {
articleService = Container.articleService;
memberService = Container.memberService;
}
public void doCommand(String command) {
if (command.equals("article add")) {
add(command);
} else if (command.startsWith("article list ")) {
list(command);
} else if (command.equals("article list")) {
list(command);
} else if (command.startsWith("article detail ")) {
detail(command);
} else if (command.startsWith("article delete ")) {
delete(command);
} else if (command.startsWith("article modify ")) {
modify(command);
} else if (command.startsWith("article search ")) {
search(command);
} else if (command.equals("article makeBoard")) {
makeBoard(command);
} else if (command.startsWith("article selectBoard ")) {
selectBoard(command);
} else if (command.equals("article currentBoard")) {
currentBoard(command);
} else if (command.equals("article test")) {
test(command);
}
}
private void test(String command) {
articleService.test();
}
private void currentBoard(String command) {
if (Container.session.selectedBoardId == 0) {
System.out.println("게시판 선택 후 이용해 주세요.");
return;
}
Board board = articleService.getBoardById(Container.session.selectedBoardId);
System.out.printf("현재 \"%s\" 게시판이 선택되어있는 상태입니다.\n", board.name);
}
private void selectBoard(String command) {
int inputedId = 0;
try {
inputedId = Integer.parseInt(command.split(" ")[2]);
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("입력된 게시판 번호가 존재하지 않습니다.");
return;
} catch (NumberFormatException e) {
System.out.println("게시판 번호는 양의 정수를 입력해주세요.");
return;
}
Board board = articleService.getBoardById(inputedId);
if (board == null) {
System.out.printf("%d번 게시판은 존재하지 않습니다.\n", inputedId);
return;
}
System.out.printf("%s(%d번) 게시판이 선택되었습니다.\n", board.name, board.id);
Container.session.selectedBoard(board.id);
}
private void makeBoard(String command) {
System.out.println("== 게시판 생성 ==");
System.out.printf("게시판 이름 : ");
String boardName = Container.scanner.nextLine();
int boardId = articleService.makeBoard(boardName);
System.out.printf("%s (%d번) 게시판이 생성되었습니다.\n", boardName, boardId);
}
private void search(String command) {
String[] commandBits = command.split(" ");
String searchKeyword = commandBits[2];
int page = 0;
if (commandBits.length >= 4) {
try {
page = Integer.parseInt(commandBits[3]);
} catch (NumberFormatException e) {
System.out.println("페이지 번호는 양의 정수로 입력해주세요.");
return;
}
}
if (page <= 1) {
page = 1;
}
List<Article> searchResultArticles = new ArrayList<>();
for (Article article : articleService.getArticles()) {
if (article.title.contains(searchKeyword)) {
searchResultArticles.add(article);
}
}
int itemsInAPage = 10;
int startPos = searchResultArticles.size() - 1;
startPos -= (page - 1) * itemsInAPage;
int endPos = startPos - (itemsInAPage - 1);
if (searchResultArticles.size() == 0) {
System.out.println("검색결과가 존재하지 않습니다.");
return;
}
if (startPos < 0) {
System.out.printf("%d페이지는 존재하지 않습니다.\n", page);
return;
}
if (endPos < 0) {
endPos = 0;
}
System.out.println("== 게시물 검색 ==");
System.out.println("번호 / 제목");
for (int i = startPos; i >= endPos; i--) {
Article article = searchResultArticles.get(i);
System.out.printf("%d / %s\n", article.id, article.title);
}
}
private void modify(String command) {
if (Container.session.isLogout()) {
System.out.println("로그인 후 이용해주세요");
return;
}
int inputedId = 0;
try {
inputedId = Integer.parseInt(command.split(" ")[2]);
} catch (NumberFormatException e) {
System.out.println("게시물 번호는 양의 정수를 입력해 주세요.");
return;
}
System.out.printf("수정할 제목 : ");
String title = Container.scanner.nextLine();
System.out.printf("수정할 제목 : ");
String body = Container.scanner.nextLine();
Article article = articleService.modify(inputedId, title, body);
if (article == null) {
System.out.printf("%d번 게시물은 존재하지 않습니다.\n", inputedId);
return;
}
System.out.printf("%d번 게시물이 수정되었습니다.\n", inputedId);
}
private void delete(String command) {
if (Container.session.isLogout()) {
System.out.println("로그인 후 이용해주세요");
return;
}
int inputedId = 0;
try {
inputedId = Integer.parseInt(command.split(" ")[2]);
} catch (NumberFormatException e) {
System.out.println("게시물 번호는 양의 정수를 입력해 주세요.");
return;
}
Article article = articleService.getArticle(inputedId);
if (article == null) {
System.out.printf("%d번 게시물은 존재하지 않습니다.\n", inputedId);
return;
}
articleService.remove(inputedId);
System.out.printf("%d번 게시물이 삭제 되었습니다.\n", inputedId);
}
private void detail(String command) {
int inputedId = 0;
try {
inputedId = Integer.parseInt(command.split(" ")[2]);
} catch (NumberFormatException e) {
System.out.println("게시물 번호는 양의 정수를 입력해 주세요.");
return;
}
Article article = articleService.getArticle(inputedId);
if (article == null) {
System.out.printf("%d번 게시물은 존재하지 않습니다.\n", inputedId);
return;
}
Member member = memberService.getMemberById(article.memberId);
System.out.println("== 게시물 상세 ==");
System.out.printf("번호 : %d\n", article.id);
System.out.printf("작성자 : %s\n", member.name);
System.out.printf("제목 : %s\n", article.title);
System.out.printf("내용 : %s\n", article.body);
}
private void list(String command) {
int boardId = Container.session.selectedBoardId;
Board board = articleService.getBoardById(boardId);
int page = 0;
try {
page = Integer.parseInt(command.split(" ")[2]);
} catch (ArrayIndexOutOfBoundsException e) {
page = 1;
} catch (NumberFormatException e) {
System.out.println("페이지 번호는 양의 정수를 입력해 주세요.");
return;
}
if (page <= 1) {
page = 1;
}
List<Article> selectedBoardArticles = new ArrayList<>();
for (Article article : articleService.getArticles()) {
if (article.boardId == boardId) {
selectedBoardArticles.add(article);
}
}
int itemsInAPage = 10;
int startPos = selectedBoardArticles.size() - 1;
startPos -= (page - 1) * itemsInAPage;
int endPos = startPos - (itemsInAPage - 1);
if (selectedBoardArticles.size() == 0) {
System.out.println("게시물이 존재하지 않습니다.");
return;
}
if (startPos < 0) {
System.out.printf("%d페이지는 존재하지 않습니다.\n", page);
return;
}
if (endPos < 0) {
endPos = 0;
}
System.out.printf("== %s 게시판 게시물 리스트 ==\n", board.name);
System.out.println("번호 / 작성자 / 제목");
for (int i = startPos; i >= endPos; i--) {
Article article = selectedBoardArticles.get(i);
Member member = memberService.getMemberById(article.memberId);
System.out.printf("%d / %s / %s\n", article.id, member.name, article.title);
}
}
private void add(String command) {
if (Container.session.isLogout()) {
System.out.println("로그인 후 이용해주세요");
return;
}
System.out.println("== 게시물 등록 ==");
System.out.printf(" 제목 : ");
String title = Container.scanner.nextLine();
System.out.printf(" 내용 : ");
String body = Container.scanner.nextLine();
int memberId = Container.session.loginedMemberId;
int boardId = Container.session.selectedBoardId;
int id = articleService.add(title, body, memberId, boardId);
System.out.printf("%d번 게시물이 생성되었습니다.\n", id);
}
}
MemberController
package com.sbs.example.easytextboard.controller;
import com.sbs.example.easytextboard.container.Container;
import com.sbs.example.easytextboard.dto.Member;
import com.sbs.example.easytextboard.service.MemberService;
public class MemberController extends Controller {
private MemberService memberService;
public MemberController() {
memberService = Container.memberService;
}
public void doCommand(String command) {
if (command.equals("member join")) {
join(command);
} else if (command.equals("member login")) {
login(command);
} else if (command.equals("member whoami")) {
whoami(command);
} else if (command.equals("member logout")) {
logout(command);
}
}
private void logout(String command) {
if (Container.session.isLogout()) {
System.out.println("로그인 후 이용해 주세요");
return;
}
Container.session.logout();
System.out.println("정상적으로 로그아웃 되었습니다.");
}
private void whoami(String command) {
if (Container.session.isLogout()) {
System.out.println("로그인 후 이용해 주세요");
return;
}
int loginedMemberId = Container.session.loginedMemberId;
Member loginedMember = memberService.getMemberById(loginedMemberId);
System.out.println("== 로그인된 사용자 정보 ==");
System.out.printf("로그인 아이디 : %s\n", loginedMember.loginId);
System.out.printf("이름 : %s\n", loginedMember.name);
}
private void login(String command) {
if (Container.session.isLogined()) {
System.out.println("이미 로그인 중입니다.");
return;
}
System.out.println("== 로그인 ==");
String loginId;
String loginPw;
Member member = null;
int loginIdCount = 0;
int loginIdMaxCount = 3;
int loginPwCount = 0;
int loginPwMaxCount = 3;
while (true) {
if (loginIdCount >= loginIdMaxCount) {
System.out.println("로그인을 취소합니다.");
return;
}
System.out.printf("로그인 아이디 : ");
loginId = Container.scanner.nextLine().trim();
if (loginId.length() == 0) {
System.out.println("입력된 값이 존재하지 않습니다.");
loginIdCount++;
continue;
}
member = memberService.getMemberByLoginId(loginId);
if (member == null) {
System.out.println("존재하지 않는 아이디 입니다.");
loginIdCount++;
continue;
}
break;
}
while (true) {
if (loginPwCount >= loginPwMaxCount) {
System.out.println("로그인을 취소합니다.");
return;
}
System.out.printf("로그인 비밀번호 : ");
loginPw = Container.scanner.nextLine().trim();
if (loginPw.length() == 0) {
System.out.println("입력된 값이 존재하지 않습니다.");
loginPwCount++;
continue;
}
if (member.loginPw.equals(loginPw) == false) {
System.out.println("비밀번호가 일치하지 않습니다.");
loginPwCount++;
continue;
}
break;
}
Container.session.login(member.memberId);
System.out.printf("로그인 성공, %s님 환영합니다.\n", member.name);
}
private void join(String command) {
System.out.println("== 회원 가입 ==");
String loginId;
String loginPw;
String name;
int loginIdCount = 0;
int loginIdMaxCount = 3;
while (true) {
if (loginIdCount >= loginIdMaxCount) {
System.out.println("회원가입을 취소합니다.");
return;
}
System.out.printf("로그인 아이디 : ");
loginId = Container.scanner.nextLine().trim();
if (loginId.length() == 0) {
System.out.println("입력된 값이 존재하지 않습니다.");
loginIdCount++;
continue;
}
boolean isJoinableLoginId = memberService.isJoinableLoginId(loginId);
if (isJoinableLoginId == false) {
System.out.printf("%s(은)는 이미 사용중인 아이디 입니다.\n", loginId);
loginIdCount++;
continue;
}
break;
}
System.out.printf("로그인 비밀번호 : ");
loginPw = Container.scanner.nextLine();
System.out.printf("이름 : ");
name = Container.scanner.nextLine();
int id = memberService.join(loginId, loginPw, name);
System.out.printf("%d번 회원이 생성되었습니다.\n", id);
}
}
Controller
package com.sbs.example.easytextboard.controller;
public abstract class Controller {
public abstract void doCommand(String command);
}
*전체적인 일상은 노션을 통해 작성하고 있습니다.
'Java' 카테고리의 다른 글
#068 게시글 Listing / Select / Board 까지 전체 코드 정리 3차 (0) | 2020.12.15 |
---|---|
#067 게시글 Listing / Select / Board 까지 전체 코드 정리 2차 (0) | 2020.12.15 |
#056 [그룹활동] 재미있는 취미 (0) | 2020.12.11 |
#055 [과제] 전체 구현 조건 (0) | 2020.12.11 |
#054 데이터 수명에 대하여 (0) | 2020.12.11 |