diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 000000000..70842ae7e --- /dev/null +++ b/docs/README.md @@ -0,0 +1,97 @@ +# ๐Ÿš€ ๊ตฌํ˜„ํ•  ๊ธฐ๋Šฅ ๋ชฉ๋ก + +## ์ž…๋ ฅ +- ๋ฉ”๋‰ด๋‚˜ ๊ธฐ๋Šฅ ์„ ํƒ์‹œ ์ž…๋ ฅ๊ฐ’์ด ๋ฒ”์œ„ ์•ˆ์˜ ์ž…๋ ฅ์ธ์ง€ ๊ฒ€์ฆํ•œ๋‹ค. +### ์ž…๋ ฅ ์˜ˆ์™ธ ์ƒํ™ฉ +- ๋ฉ”์ธ๊ณผ ๊ด€๋ฆฌ ํ™”๋ฉด์—์„œ ๋ณด์—ฌ์ฃผ๋Š” ๊ธฐ๋Šฅ์ด ์•„๋‹Œ๊ฒฝ์šฐ +- ๋“ฑ๋กํ•  ์ง€ํ•˜์ฒ  ์—ญ ๊ด€๋ จ + - ์ด๋ฆ„์˜ ๊ธธ์ด๊ฐ€ 2์ž ๋ฏธ๋งŒ์ธ ๊ฒฝ์šฐ + - ์ด๋ฆ„์ด '์—ญ'์œผ๋กœ ๋๋‚˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ + - ์ด๋ฆ„์— ๊ณต๋ฐฑ์ด ๋“ค์–ด๊ฐ€๋Š” ๊ฒฝ์šฐ + - ์ด๋ฆ„์ด ์ˆซ์ž์™€ ํ•œ๊ธ€์ด ์•„๋‹Œ ๊ฒฝ์šฐ + - ์ค‘๋ณต๋œ ์ด๋ฆ„์ธ ๊ฒฝ์šฐ +- ๋“ฑ๋กํ•  ๋…ธ์„  ๊ด€๋ จ + - ์ด๋ฆ„์˜ ๊ธธ์ด๊ฐ€ 2์ž ๋ฏธ๋งŒ์ธ ๊ฒฝ์šฐ + - ์ด๋ฆ„์ด '์„ '์œผ๋กœ ๋๋‚˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ + - ์ด๋ฆ„์ด ์ˆซ์ž์™€ ํ•œ๊ธ€์ด ์•„๋‹Œ ๊ฒฝ์šฐ + - ์ƒํ–‰ ์ข…์ ์—ญ๊ณผ ํ•˜ํ–‰ ์ข…์ ์—ญ์˜ ์ด๋ฆ„์ด ๊ฐ™์€ ๊ฒฝ์šฐ +- ๋“ฑ๋กํ•  ๊ตฌ๊ฐ„ ๊ด€๋ จ + - ์„ ํƒํ•œ ๋…ธ์„ ์ด ๋“ฑ๋ก๋˜์ง€ ์•Š์€ ๋…ธ์„ ์ธ ๊ฒฝ์šฐ + - ์—ญ์ด๋ฆ„์ด ๋“ฑ๋ก๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ + +
+ +## ์ถœ๋ ฅ +- ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ™”๋ฉด ๋ ˆ์ด์•„์›ƒ ๊ตฌ์„ฑ + 1. ์ฃผ ๋ฉ”๋‰ด ํ™”๋ฉด + 2. ๊ธฐ๋Šฅ ์„ ํƒ ํ™”๋ฉด + - ์„ธ๋ถ€ ๊ธฐ๋Šฅ ํฌํ•จ + 3. ์ž…๋ ฅ ์•ˆ๋‚ด ํ™”๋ฉด + 4. ์ž…๋ ฅ ๊ฒฐ๊ณผ ์ถœ๋ ฅ +- ์ž…๋ ฅ ์œ ๋„ ๋ฉ”์‹œ์ง€ ์ถœ๋ ฅ +- ์ž…๋ ฅ ๋ฐ˜์‘ ๋ฉ”์‹œ์ง€ ์ถœ๋ ฅ + - ๊ธฐ๋Œ€ ์ถœ๋ ฅ ๊ฒฐ๊ณผ์‹œ '[INFO] ...' + - ์—๋Ÿฌ์‹œ '[ERROR] ...' + +
+ +## ์ฃผ์š” ๋กœ์ง +### ๋ฉ”์ธํ™”๋ฉด +- ์„ ํƒํ•œ ๋ฉ”๋‰ด๋กœ ์ด๋™ ๋˜๋Š” ๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•œ๋‹ค. + - ์—ญ ๊ด€๋ฆฌ, ๋…ธ์„  ๊ด€๋ฆฌ, ๊ตฌ๊ฐ„ ๊ด€๋ฆฌ -> ์„ธ๋ถ€ ๊ธฐ๋Šฅ ์„ ํƒ ์•ˆ๋‚ด + - ์ง€ํ•˜์ฒ  ๋…ธ์„ ๋„ ์ถœ๋ ฅ -> ๊ธฐ๋Šฅ ์‹คํ–‰ + - ์ข…๋ฃŒ -> ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ข…๋ฃŒ + +### ์—ญ ๊ด€๋ฆฌ ๊ด€๋ จ +- ์—ญ ๋“ฑ๋ก + - ์ž…๋ ฅ๋ฐ›์€ ์—ญ์„ ๊ฒ€์ฆ + - ๊ฒ€์ฆ ๊ฒฐ๊ณผ์— ๋”ฐ๋ผ ์ €์žฅ์†Œ์— ์—ญ ์ €์žฅ ํ›„ [INFO]๋˜๋Š” [ERROR] ๋ฉ”์‹œ์ง€ ์ถœ๋ ฅ +- ์—ญ ์‚ญ์ œ + - ์ž…๋ ฅ๋ฐ›์€ ์—ญ์„ ๊ฒ€์ฆ + - ๊ฒ€์ฆ ๊ฒฐ๊ณผ์— ๋”ฐ๋ผ ์ €์žฅ์†Œ์—์„œ ์‚ญ์ œ ํ›„ [INFO]๋˜๋Š” [ERROR] ๋ฉ”์‹œ์ง€ ์ถœ๋ ฅ +- ์—ญ ์กฐํšŒ + - ์ €์žฅ์†Œ ๋ชจ๋“  ์—ญ์„ ํ˜ธ์ถœํ•˜์—ฌ ์ถœ๋ ฅ +- ๋Œ์•„๊ฐ€๊ธฐ + - ๋ฉ”์ธ ํ™”๋ฉด ํ˜ธ์ถœ + +### ๋…ธ์„  ๊ด€๋ฆฌ ๊ด€๋ จ +- ๋…ธ์„  ๋“ฑ๋ก + 1. ๋“ฑ๋กํ•  ๋…ธ์„  ์ด๋ฆ„ ์ž…๋ ฅ ๊ฒ€์ฆ + 2. ๋…ธ์„ ์˜ ์ƒํ–‰ ์ข…์ ์—ญ ์ด๋ฆ„ ์ž…๋ ฅ ๊ฒ€์ฆ + 3. ๋…ธ์„ ์˜ ํ•˜ํ–‰ ์ข…์ ์—ญ ์ด๋ฆ„ ์ž…๋ ฅ ๊ฒ€์ฆ + 4. ๊ฒ€์ฆ ํ›„ ๊ฒฐ๊ณผ์— ๋”ฐ๋ผ ์ €์žฅ์†Œ์— ์ €์žฅ ํ›„ [INFO]๋˜๋Š” [ERROR] ๋ฉ”์‹œ์ง€ ์ถœ๋ ฅ +- ๋…ธ์„  ์‚ญ์ œ + - ์ž…๋ ฅ๋ฐ›์€ ๋…ธ์„  ๊ฒ€์ฆ + - ๊ฒ€์ฆ ๊ฒฐ๊ณผ์— ๋”ฐ๋ผ ์ €์žฅ์†Œ์—์„œ ์‚ญ์ œ ํ›„ [INFO]๋˜๋Š” [ERROR] ๋ฉ”์‹œ์ง€ ์ถœ๋ ฅ +- ๋…ธ์„  ์กฐํšŒ + - ์ €์žฅ์†Œ ๋ชจ๋“  ๋…ธ์„  ํ˜ธ์ถœํ•˜์—ฌ ์ถœ๋ ฅ +- ๋Œ์•„๊ฐ€๊ธฐ + - ๋ฉ”์ธ ํ™”๋ฉด ํ˜ธ์ถœ + +### ๊ตฌ๊ฐ„ ๊ด€๋ฆฌ ๊ด€๋ จ +- ๊ตฌ๊ฐ„ ๋“ฑ๋ก(๋…ธ์„ ์— ์—ญ์„ ์ถ”๊ฐ€) + - ๊ตฌ๊ฐ„ ๋“ฑ๋กํ•  ๋…ธ์„  ๊ฒ€์ฆ + - ์—ญ ์ด๋ฆ„ ๊ฒ€์ฆ + - ์ˆœ์„œ ๊ฒ€์ฆ + - ๊ฒ€์ฆ ํ›„ ๊ฒฐ๊ณผ์— ๋”ฐ๋ผ ์ €์žฅ์†Œ์— ์ €์žฅ ๋ฐ ์—ญ ์žฌ๋ฐฐ์—ด ํ›„ [INFO]๋˜๋Š” [ERROR] ๋ฉ”์‹œ์ง€ ์ถœ๋ ฅ +- ๊ตฌ๊ฐ„ ์‚ญ์ œ + - ์‚ญ์ œํ•  ๊ตฌ๊ฐ„ ๋…ธ์„  ๊ฒ€์ฆ + - ์—ญ ์ด๋ฆ„ ๊ฒ€์ฆ + - ๊ฒ€์ฆ ํ›„ ๊ฒฐ๊ณผ์— ๋”ฐ๋ผ ์ €์žฅ์†Œ์—์„œ ์‚ญ์ œ ๋ฐ ์—ญ ์žฌ๋ฐฐ์—ด ํ›„ [INFO]๋˜๋Š” [ERROR] ๋ฉ”์‹œ์ง€ ์ถœ๋ ฅ +- ๋Œ์•„๊ฐ€๊ธฐ + - ๋ฉ”์ธ ํ™”๋ฉด ํ˜ธ์ถœ + +### ์ง€ํ•˜์ฒ  ๋…ธ์„ ๋„ ์ถœ๋ ฅ ๊ด€๋ จ +- ๋…ธ์„ ๋„๋Š” ์ด๋ฆ„ ์ˆœ์œผ๋กœ ์ถœ๋ ฅํ•œ๋‹ค +- ๊ฐ ๋…ธ์„ ๋„๋Š” ๋…ธ์„ ์˜ ์ด๋ฆ„๊ณผ ๋“ฑ๋ก๋œ ์—ญ์„ ํฌํ•จํ•œ๋‹ค +- ๋“ฑ๋ก๋œ ์—ญ์€ ์ˆœ์„œ๋Œ€๋กœ ์ถœ๋ ฅํ•œ๋‹ค + +
+ +## ์ดˆ๊ธฐ ์„ค์ • +- ์—ญ ๋“ฑ๋ก + - ๊ต๋Œ€์—ญ, ๊ฐ•๋‚จ์—ญ, ์—ญ์‚ผ์—ญ, ๋‚จ๋ถ€ํ„ฐ๋ฏธ๋„์—ญ, ์–‘์žฌ์—ญ, ์–‘์žฌ์‹œ๋ฏผ์˜์ˆฒ์—ญ, ๋งค๋ด‰์—ญ +- ๋…ธ์„  ๋“ฑ๋ก(์™ผ์ชฝ ๋์ด ์ƒํ–‰ ์ข…์ ) + - 2ํ˜ธ์„ : ๊ต๋Œ€์—ญ - ๊ฐ•๋‚จ์—ญ - ์—ญ์‚ผ์—ญ + - 3ํ˜ธ์„ : ๊ต๋Œ€์—ญ - ๋‚จ๋ถ€ํ„ฐ๋ฏธ๋„์—ญ - ์–‘์žฌ์—ญ - ๋งค๋ด‰์—ญ + - ์‹ ๋ถ„๋‹น์„ : ๊ฐ•๋‚จ์—ญ - ์–‘์žฌ์—ญ - ์–‘์žฌ์‹œ๋ฏผ์˜์ˆฒ์—ญ \ No newline at end of file diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java index 0bcf786cc..8ee3d2246 100644 --- a/src/main/java/subway/Application.java +++ b/src/main/java/subway/Application.java @@ -1,10 +1,15 @@ package subway; +import subway.controller.SubwayMap; + import java.util.Scanner; public class Application { public static void main(String[] args) { final Scanner scanner = new Scanner(System.in); // TODO: ํ”„๋กœ๊ทธ๋žจ ๊ตฌํ˜„ + DummyDataSetting.run(); + SubwayMap subwayMap = new SubwayMap(); + subwayMap.Run(scanner); } } diff --git a/src/main/java/subway/DummyDataSetting.java b/src/main/java/subway/DummyDataSetting.java new file mode 100644 index 000000000..f434e51ce --- /dev/null +++ b/src/main/java/subway/DummyDataSetting.java @@ -0,0 +1,46 @@ +package subway; + +import subway.domain.Line; +import subway.domain.LineRepository; +import subway.domain.Station; +import subway.domain.StationRepository; + +import java.util.Arrays; +import java.util.List; + +public class DummyDataSetting { + + public static void run() { + /* + * ์—ญ: ๊ต๋Œ€์—ญ, ๊ฐ•๋‚จ์—ญ, ์—ญ์‚ผ์—ญ, ๋‚จ๋ถ€ํ„ฐ๋ฏธ๋„์—ญ, ์–‘์žฌ์—ญ, ์–‘์žฌ์‹œ๋ฏผ์˜์ˆฒ์—ญ, ๋งค๋ด‰์—ญ + * ๋…ธ์„ : 2ํ˜ธ์„ , 3ํ˜ธ์„ , ์‹ ๋ถ„๋‹น์„  + * ๋…ธ์„ ์— ์—ญ + * - 2ํ˜ธ์„ : ๊ต๋Œ€์—ญ - ๊ฐ•๋‚จ์—ญ - ์—ญ์‚ผ์—ญ + * - 3ํ˜ธ์„ : ๊ต๋Œ€์—ญ - ๋‚จ๋ถ€ํ„ฐ๋ฏธ๋„์—ญ - ์–‘์žฌ์—ญ - ๋งค๋ด‰์—ญ + * - ์‹ ๋ถ„๋‹น์„ : ๊ฐ•๋‚จ์—ญ - ์–‘์žฌ์—ญ - ์–‘์žฌ์‹œ๋ฏผ์˜์ˆฒ์—ญ + */ + List stationNames = Arrays.asList("๊ต๋Œ€์—ญ", "๊ฐ•๋‚จ์—ญ", "์—ญ์‚ผ์—ญ", "๋‚จ๋ถ€ํ„ฐ๋ฏธ๋„์—ญ", "์–‘์žฌ์—ญ", + "์–‘์žฌ์‹œ๋ฏผ์˜์ˆฒ์—ญ", "๋งค๋ด‰์—ญ"); + for (String name : stationNames) { + StationRepository.addStation(new Station(name)); + } + + List lineNames = Arrays.asList("2ํ˜ธ์„ ", "3ํ˜ธ์„ ", "์‹ ๋ถ„๋‹น์„ "); + for (String name : lineNames) { + LineRepository.addLine(new Line(name)); + } + + LineRepository.getLine("2ํ˜ธ์„ ").addSectionByStation(StationRepository.getStation("๊ต๋Œ€์—ญ")); + LineRepository.getLine("2ํ˜ธ์„ ").addSectionByStation(StationRepository.getStation("๊ฐ•๋‚จ์—ญ")); + LineRepository.getLine("2ํ˜ธ์„ ").addSectionByStation(StationRepository.getStation("์—ญ์‚ผ์—ญ")); + + LineRepository.getLine("3ํ˜ธ์„ ").addSectionByStation(StationRepository.getStation("๊ต๋Œ€์—ญ")); + LineRepository.getLine("3ํ˜ธ์„ ").addSectionByStation(StationRepository.getStation("๋‚จ๋ถ€ํ„ฐ๋ฏธ๋„์—ญ")); + LineRepository.getLine("3ํ˜ธ์„ ").addSectionByStation(StationRepository.getStation("์–‘์žฌ์—ญ")); + LineRepository.getLine("3ํ˜ธ์„ ").addSectionByStation(StationRepository.getStation("๋งค๋ด‰์—ญ")); + + LineRepository.getLine("์‹ ๋ถ„๋‹น์„ ").addSectionByStation(StationRepository.getStation("๊ฐ•๋‚จ์—ญ")); + LineRepository.getLine("์‹ ๋ถ„๋‹น์„ ").addSectionByStation(StationRepository.getStation("์–‘์žฌ์—ญ")); + LineRepository.getLine("์‹ ๋ถ„๋‹น์„ ").addSectionByStation(StationRepository.getStation("์–‘์žฌ์‹œ๋ฏผ์˜์ˆฒ์—ญ")); + } +} diff --git a/src/main/java/subway/LineManagementSign.java b/src/main/java/subway/LineManagementSign.java new file mode 100644 index 000000000..032f34dd9 --- /dev/null +++ b/src/main/java/subway/LineManagementSign.java @@ -0,0 +1,27 @@ +package subway; + +import java.util.Arrays; + +public enum LineManagementSign { + ADD_LINE("1"), + DELETE_LINE("2"), + SHOW_LINES("3"), + BACK_TO_MAIN("B"); + + private String sign; + + LineManagementSign(String sign) { + this.sign = sign; + } + + public String getSign() { + return sign; + } + + public static LineManagementSign validateSign(String inputData) { + return Arrays.stream(LineManagementSign.values()) + .filter(sign -> inputData.toUpperCase().equals(sign.getSign())) + .findFirst() + .orElseThrow(() -> new IllegalArgumentException("์—†๋Š” ๊ธฐ๋Šฅ")); + } +} diff --git a/src/main/java/subway/MainSign.java b/src/main/java/subway/MainSign.java new file mode 100644 index 000000000..1be879320 --- /dev/null +++ b/src/main/java/subway/MainSign.java @@ -0,0 +1,28 @@ +package subway; + +import java.util.Arrays; + +public enum MainSign { + STATION_MANAGEMENT("1"), + LINE_MANAGEMENT("2"), + SECTION_MANAGEMENT("3"), + PRINT_SUBWAY_ROUTE("4"), + CLOSE_MAIN("Q"); + + private String sign; + + MainSign(String sign) { + this.sign = sign; + } + + public String getSign() { + return sign; + } + + public static MainSign validateSign(String inputData) { + return Arrays.stream(MainSign.values()) + .filter(sign -> inputData.toUpperCase().equals(sign.getSign())) + .findFirst() + .orElseThrow(() -> new IllegalArgumentException("์—†๋Š” ๊ธฐ๋Šฅ")); + } +} diff --git a/src/main/java/subway/SectionManagementSign.java b/src/main/java/subway/SectionManagementSign.java new file mode 100644 index 000000000..af4811e42 --- /dev/null +++ b/src/main/java/subway/SectionManagementSign.java @@ -0,0 +1,26 @@ +package subway; + +import java.util.Arrays; + +public enum SectionManagementSign { + ADD_SECTION("1"), + DELETE_SECTION("2"), + BACK_TO_MAIN("B"); + + private String sign; + + SectionManagementSign(String sign) { + this.sign = sign; + } + + public String getSign() { + return sign; + } + + public static SectionManagementSign validateSign(String inputData) { + return Arrays.stream(SectionManagementSign.values()) + .filter(sign -> inputData.toUpperCase().equals(sign.getSign())) + .findFirst() + .orElseThrow(() -> new IllegalArgumentException("์—†๋Š” ๊ธฐ๋Šฅ")); + } +} diff --git a/src/main/java/subway/StationManagementSign.java b/src/main/java/subway/StationManagementSign.java new file mode 100644 index 000000000..bfe9154d2 --- /dev/null +++ b/src/main/java/subway/StationManagementSign.java @@ -0,0 +1,27 @@ +package subway; + +import java.util.Arrays; + +public enum StationManagementSign { + ADD_STATION("1"), + DELETE_STATION("2"), + SHOW_STATIONS("3"), + BACK_TO_MAIN("B"); + + private String sign; + + StationManagementSign(String sign) { + this.sign = sign; + } + + public String getSign() { + return sign; + } + + public static StationManagementSign validateSign(String inputData) { + return Arrays.stream(StationManagementSign.values()) + .filter(sign -> inputData.toUpperCase().equals(sign.getSign())) + .findFirst() + .orElseThrow(() -> new IllegalArgumentException("์—†๋Š” ๊ธฐ๋Šฅ")); + } +} diff --git a/src/main/java/subway/controller/ErrorHandler.java b/src/main/java/subway/controller/ErrorHandler.java new file mode 100644 index 000000000..b757e8793 --- /dev/null +++ b/src/main/java/subway/controller/ErrorHandler.java @@ -0,0 +1,78 @@ +package subway.controller; + +import subway.domain.Line; +import subway.domain.LineRepository; +import subway.domain.Station; +import subway.domain.StationRepository; + +import java.util.Objects; +import java.util.regex.Pattern; + +public class ErrorHandler { + private static final String STATION_NAME_END = "์—ญ"; + private static final String LINE_NAME_END = "์„ "; + private static final int NAME_MIN_LENGTH = 2; + private static final int LENGTH_TO_INDEX = 1; + + public static void validateStationNameFormat(String inputData) { + if (inputData.length() < NAME_MIN_LENGTH + || !Pattern.matches("^[0-9๊ฐ€-ํžฃ]*$", inputData) + || !inputData.substring(inputData.length() - LENGTH_TO_INDEX).equals(STATION_NAME_END)) { + throw new IllegalArgumentException("format error"); + } + } + + public static void validateStationDuplicate(String inputData) { + if (StationRepository.isDuplicate(inputData)) { + throw new IllegalArgumentException("duplicate error"); + } + } + + public static void validateStationRegistered(String inputData) { + if (!StationRepository.isDuplicate(inputData)) { + throw new IllegalArgumentException("not registered error"); + } + } + + public static void validateLineNameFormat(String inputData) { + if (inputData.length() < NAME_MIN_LENGTH + || !Pattern.matches("^[0-9๊ฐ€-ํžฃ]*$", inputData) + || !inputData.substring(inputData.length() - LENGTH_TO_INDEX).equals(LINE_NAME_END)) { + throw new IllegalArgumentException("format error"); + } + } + + public static void validateLineDuplicate(String inputData) { + if (LineRepository.isDuplicate(inputData)) { + throw new IllegalArgumentException("duplicate error"); + } + } + + public static void validateLineRegistered(String inputData) { + if (!LineRepository.isDuplicate(inputData)) { + throw new IllegalArgumentException("not registered error"); + } + } + + public static void validateStationDuplicateInLine(Station targetStation, Line line) { + if (line.getSections().stream() + .anyMatch(station -> Objects.equals(station, targetStation))) { + throw new IllegalArgumentException("duplicate error"); + } + } + + public static void validateStationRegisteredInLine(Station targetStation, Line line) { + if (line.getSections().stream() + .noneMatch(station -> Objects.equals(station, targetStation))) { + throw new IllegalArgumentException("not registered error"); + } + } + + public static void validateOrder(String targetOrder, Line line) { + int order = Integer.parseInt(targetOrder); + if (order < 1 || order > line.getSections().size()) { + throw new IllegalArgumentException("inbound error"); + } + } + +} diff --git a/src/main/java/subway/controller/SubwayMap.java b/src/main/java/subway/controller/SubwayMap.java new file mode 100644 index 000000000..4e555c36c --- /dev/null +++ b/src/main/java/subway/controller/SubwayMap.java @@ -0,0 +1,345 @@ +package subway.controller; + +import subway.LineManagementSign; +import subway.MainSign; +import subway.SectionManagementSign; +import subway.StationManagementSign; +import subway.domain.*; +import subway.view.InputView; +import subway.view.OutputView; + +import java.util.Scanner; +import java.util.function.Consumer; + +public class SubwayMap { + private boolean isRun = true; + private OutputView outputView; + private InputView inputView; + private Scanner scanner; + + public void Run(Scanner scanner) { + this.scanner = scanner; + while (isRun) { + outputView = new OutputView(); + inputView = new InputView(); + startMain(); + } + } + + private void startMain() { + outputView.printMainScreen(); + inputView.scanData(scanner); + validateSign(inputView.getInputData(), + t -> MainSign.validateSign(t), + () -> startMain()); + chooseFunctionInMain(inputView.getInputData()); + } + + private void chooseFunctionInMain(String inputData) { + if (inputData.equals(MainSign.STATION_MANAGEMENT.getSign())) { + startStationManagement(); + } + if (inputData.equals(MainSign.LINE_MANAGEMENT.getSign())) { + startLineManagement(); + } + if (inputData.equals(MainSign.SECTION_MANAGEMENT.getSign())) { + startSectionManagement(); + } + if (inputData.equals(MainSign.PRINT_SUBWAY_ROUTE.getSign())) { + outputView.printSubwaySections(); + } + if (inputData.equalsIgnoreCase(MainSign.CLOSE_MAIN.getSign())) { + isRun = false; + } + } + + + private void startStationManagement() { + outputView.printStationManagementScreen(); + inputView.scanData(scanner); + validateSign(inputView.getInputData(), + t -> StationManagementSign.validateSign(t), + () -> startStationManagement()); + chooseFunctionInStationManagement(inputView.getInputData()); + + } + + private void chooseFunctionInStationManagement(String inputData) { + if (inputData.equals(StationManagementSign.ADD_STATION.getSign())) { + addStation(); + System.out.println("addStation ๋"); + outputView.infoAddStation(); + } + if (inputData.equals(StationManagementSign.DELETE_STATION.getSign())) { + deleteStation(); + outputView.infoDeleteStation(); + } + if (inputData.equals(StationManagementSign.SHOW_STATIONS.getSign())) { + outputView.printAllStations(); + } + if (inputData.equalsIgnoreCase(StationManagementSign.BACK_TO_MAIN.getSign())) { + startMain(); + } + } + + private void addStation() { + outputView.guideAddStation(); + inputView.scanData(scanner); + String name = inputView.getInputData(); + validateStationName(name, () -> addStation()); + validateStationDuplicate(name, () -> addStation()); + StationRepository.addStation(new Station(name)); + } + + private void validateSign(String inputData, Consumer tryExpression, Runnable catchExpression) { + try { + tryExpression.accept(inputData); + } catch (IllegalArgumentException E) { + outputView.errorChooseFunction(); + catchExpression.run(); + } + } + + private void validateStationName(String inputData, Runnable catchExpression) { + try { + ErrorHandler.validateStationNameFormat(inputData); + } catch (IllegalArgumentException E) { + outputView.errorStationFormat(); + catchExpression.run(); + } + } + + private void validateStationDuplicate(String inputData, Runnable catchExpression) { + try { + ErrorHandler.validateStationDuplicate(inputData); + } catch (IllegalArgumentException E) { + outputView.errorStationDuplicate(); + catchExpression.run(); + } + } + + private void validateStationRegistered(String inputData, Runnable catchExpression) { + try { + ErrorHandler.validateStationRegistered(inputData); + } catch (IllegalArgumentException E) { + outputView.errorDeleteStationNotRegistered(); + catchExpression.run(); + } + } + + private void deleteStation() { + outputView.guideDeleteStation(); + inputView.scanData(scanner); + validateStationName(inputView.getInputData(), () -> deleteStation()); + validateStationRegistered(inputView.getInputData(), () -> deleteStation()); + StationRepository.deleteStation(inputView.getInputData()); + LineRepository.deleteStationInLine(inputView.getInputData()); + + } + + private void startLineManagement() { + outputView.printLineManagementScreen(); + inputView.scanData(scanner); + validateSign(inputView.getInputData(), + t -> LineManagementSign.validateSign(t), + () -> startLineManagement()); + chooseFunctionInLineManagement(inputView.getInputData()); + } + + private void chooseFunctionInLineManagement(String inputData) { + if (inputData.equals(LineManagementSign.ADD_LINE.getSign())) { + addLine(); + addUpwardTerminal(); + addDownwardTerminal(); + outputView.infoAddLine(); + } + if (inputData.equals(LineManagementSign.DELETE_LINE.getSign())) { + deleteLine(); + outputView.infoDeleteLine(); + } + if (inputData.equals(LineManagementSign.SHOW_LINES.getSign())) { + outputView.printAllLines(); + } + if (inputData.equalsIgnoreCase(LineManagementSign.BACK_TO_MAIN.getSign())) { + startMain(); + } + } + + private void addLine() { + outputView.guideAddLineName(); + inputView.scanData(scanner); + String name = inputView.getInputData(); + validateLineName(name, () -> addLine()); + validateLineDuplicate(name, () -> addLine()); + LineRepository.addLine(new Line(name)); + } + + private void addUpwardTerminal() { + outputView.guideAddLineUpwardTerminal(); + inputView.scanData(scanner); + String name = inputView.getInputData(); + validateStationName(name, () -> addUpwardTerminal()); + validateStationRegistered(name, () -> addUpwardTerminal()); + LineRepository.getNewLine().addSectionByStation(StationRepository.getStation(name)); + } + + private void addDownwardTerminal() { + outputView.guideAddLineDownwardTerminal(); + inputView.scanData(scanner); + String name = inputView.getInputData(); + validateStationName(name, () -> addDownwardTerminal()); + validateStationRegistered(name, () -> addDownwardTerminal()); + LineRepository.getNewLine().addSectionByStation(StationRepository.getStation(name)); + } + + private void deleteLine() { + outputView.guideDeleteLine(); + inputView.scanData(scanner); + String name = inputView.getInputData(); + validateLineName(name, () -> deleteLine()); + validateLineRegistered(name, () -> deleteLine()); + LineRepository.deleteLineByName(inputView.getInputData()); + } + + private void validateLineName(String inputData, Runnable catchExpression) { + try { + ErrorHandler.validateLineNameFormat(inputData); + } catch (IllegalArgumentException E) { + outputView.errorLineFormat(); + catchExpression.run(); + } + } + + private void validateLineDuplicate(String inputData, Runnable catchExpression) { + try { + ErrorHandler.validateLineDuplicate(inputData); + } catch (IllegalArgumentException E) { + outputView.errorLineDuplicate(); + catchExpression.run(); + } + } + + private void validateLineRegistered(String inputData, Runnable catchExpression) { + try { + ErrorHandler.validateLineRegistered(inputData); + } catch (IllegalArgumentException E) { + outputView.errorDeleteLineNotRegistered(); + catchExpression.run(); + } + } + + private void startSectionManagement() { + outputView.printSectionManagementScreen(); + inputView.scanData(scanner); + validateSign(inputView.getInputData(), + t -> SectionManagementSign.validateSign(t), + () -> startSectionManagement()); + chooseFunctionInSectionManagement(inputView.getInputData()); + } + + private void chooseFunctionInSectionManagement(String inputData) { + if (inputData.equals(SectionManagementSign.ADD_SECTION.getSign())) { + addSection(); + outputView.infoAddSection(); + } + if (inputData.equals(SectionManagementSign.DELETE_SECTION.getSign())) { + deleteSection(); + outputView.infoDeleteSection(); + } + if (inputData.equalsIgnoreCase(SectionManagementSign.BACK_TO_MAIN.getSign())) { + startMain(); + } + } + + private void addSection() { + Line line; + Station station; + int order; + line = addCheckLine(); + station = addCheckStation(line); + order = addcheckOrder(line); + line.addSectionByOrderAndStation(order, station); + } + + private Line addCheckLine() { + outputView.guideCheckLine(); + inputView.scanData(scanner); + String name = inputView.getInputData(); + validateLineName(name, () -> addSection()); + validateLineRegistered(name, () -> addSection()); + return LineRepository.getLine(name); + } + + private Station addCheckStation(Line line) { + outputView.guideCheckSectionStation(); + inputView.scanData(scanner); + String name = inputView.getInputData(); + validateStationName(name, () -> addSection()); + validateStationRegistered(name, () -> addSection()); + validateStationDuplicateInLine(StationRepository.getStation(name), line, () -> addSection()); + return StationRepository.getStation(name); + } + + private int addcheckOrder(Line line) { + outputView.guideCheckSectionOrder(); + inputView.scanData(scanner); + String order = inputView.getInputData(); + validateOrder(order, line, () -> addSection()); + return Integer.parseInt(order); + } + + private void validateStationDuplicateInLine(Station station, Line line, Runnable expression) { + try { + ErrorHandler.validateStationDuplicateInLine(station, line); + } catch (IllegalArgumentException E) { + outputView.errorStationDuplicate(); + expression.run(); + } + } + + private void validateOrder(String order, Line line, Runnable expression) { + try { + ErrorHandler.validateOrder(order, line); + } catch (NumberFormatException E) { + outputView.errorParseIntOrder(); + expression.run(); + } catch (IllegalArgumentException E) { + outputView.errorInBoundOrder(); + expression.run(); + } + } + + private void deleteSection() { + Line line = deleteCheckLine(); + Station station = deleteCheckStation(line); + line.deleteSectionByName(station.getName()); + } + + private Line deleteCheckLine() { + outputView.guideDeleteSectionLine(); + inputView.scanData(scanner); + String name = inputView.getInputData(); + validateLineName(name, () -> deleteSection()); + validateLineRegistered(name, () -> deleteSection()); + return LineRepository.getLine(name); + } + + private Station deleteCheckStation(Line line) { + outputView.guideDeleteSectionStation(); + inputView.scanData(scanner); + String name = inputView.getInputData(); + validateStationName(name, () -> deleteSection()); + validateStationRegistered(name, () -> deleteSection()); + validateStationRegisteredInLine(StationRepository.getStation(name), line, () -> deleteSection()); + return StationRepository.getStation(name); + } + + private void validateStationRegisteredInLine(Station station, Line line, Runnable expression) { + try { + ErrorHandler.validateStationRegisteredInLine(station, line); + } catch (IllegalArgumentException E) { + outputView.errorStationDuplicate(); + expression.run(); + } + } +} diff --git a/src/main/java/subway/domain/Line.java b/src/main/java/subway/domain/Line.java index f4d738d5a..2f1cc75e9 100644 --- a/src/main/java/subway/domain/Line.java +++ b/src/main/java/subway/domain/Line.java @@ -1,5 +1,9 @@ package subway.domain; +import java.util.LinkedList; +import java.util.List; +import java.util.Objects; + public class Line { private String name; @@ -12,4 +16,22 @@ public String getName() { } // ์ถ”๊ฐ€ ๊ธฐ๋Šฅ ๊ตฌํ˜„ + private static final int FROM_ORDER_TO_INDEX = 1; + private List sections = new LinkedList<>(); + + public List getSections() { + return sections; + } + + public void addSectionByStation(Station station) { + sections.add(station); + } + + public void addSectionByOrderAndStation(int orderOfRoute, Station station) { + sections.add(orderOfRoute - FROM_ORDER_TO_INDEX, station); + } + + public boolean deleteSectionByName(String name) { + return sections.removeIf(station -> Objects.equals(station.getName(), name)); + } } diff --git a/src/main/java/subway/domain/LineRepository.java b/src/main/java/subway/domain/LineRepository.java index 49132ddb6..ba95b24ec 100644 --- a/src/main/java/subway/domain/LineRepository.java +++ b/src/main/java/subway/domain/LineRepository.java @@ -19,4 +19,32 @@ public static void addLine(Line line) { public static boolean deleteLineByName(String name) { return lines.removeIf(line -> Objects.equals(line.getName(), name)); } + + private static final int FROM_ORDER_TO_INDEX = 1; + + public static Line getLine(String name) { + return lines.stream() + .filter(station -> station.getName().equals(name)) + .findAny() + .get(); + } + + public static Line getNewLine() { + return lines.get(lines.size() - FROM_ORDER_TO_INDEX); + } + + public static void deleteStationInLine(String name) { + for (Line line : lines) { + line.getSections().removeIf(station -> Objects.equals(station.getName(), name)); + } + } + + public static boolean isDuplicate(String name) { + return lines.stream() + .anyMatch(station -> station.getName().equals(name)); + } + + public static List getLines() { + return lines; + } } diff --git a/src/main/java/subway/domain/StationRepository.java b/src/main/java/subway/domain/StationRepository.java index b7245c0f3..5a7dc09c2 100644 --- a/src/main/java/subway/domain/StationRepository.java +++ b/src/main/java/subway/domain/StationRepository.java @@ -19,4 +19,20 @@ public static void addStation(Station station) { public static boolean deleteStation(String name) { return stations.removeIf(station -> Objects.equals(station.getName(), name)); } + + public static Station getStation(String name) { + return stations.stream() + .filter(station -> station.getName().equals(name)) + .findAny() + .get(); + } + + public static boolean isDuplicate(String name) { + return stations.stream() + .anyMatch(station -> station.getName().equals(name)); + } + + public static List getStations() { + return stations; + } } diff --git a/src/main/java/subway/view/InputView.java b/src/main/java/subway/view/InputView.java new file mode 100644 index 000000000..5bda58b72 --- /dev/null +++ b/src/main/java/subway/view/InputView.java @@ -0,0 +1,16 @@ +package subway.view; + +import java.util.Scanner; + +public class InputView { + private String inputData; + + public String getInputData() { + return inputData; + } + + public void scanData(Scanner scanner) { + inputData = scanner.nextLine(); + System.out.println(); + } +} diff --git a/src/main/java/subway/view/OutputView.java b/src/main/java/subway/view/OutputView.java new file mode 100644 index 000000000..b393a7238 --- /dev/null +++ b/src/main/java/subway/view/OutputView.java @@ -0,0 +1,229 @@ +package subway.view; + +import subway.domain.Line; +import subway.domain.LineRepository; +import subway.domain.Station; +import subway.domain.StationRepository; + +public class OutputView { + private static final String NEXT_LINE = "\n"; + private static final String GUIDE_MESSAGE_START = "##"; + private static final String GUIDE_MESSAGE_END_CHOOSE_FUNCTION = "์›ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์„ ํƒํ•˜์„ธ์š”."; + private static final String GUIDE_MESSAGE_END_ADD_STATION = "๋“ฑ๋กํ•  ์—ญ ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜์„ธ์š”."; + private static final String GUIDE_MESSAGE_END_DELETE_STATION = "์‚ญ์ œํ•  ์—ญ ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜์„ธ์š”."; + private static final String GUIDE_MESSAGE_END_ADD_LINE_NAME = "๋“ฑ๋กํ•  ๋…ธ์„  ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜์„ธ์š”."; + private static final String GUIDE_MESSAGE_END_ADD_LINE_UPWARD_TERMINAL = "๋“ฑ๋กํ•  ๋…ธ์„ ์˜ ์ƒํ–‰ ์ข…์ ์—ญ ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜์„ธ์š”."; + private static final String GUIDE_MESSAGE_END_ADD_LINE_DOWNWARD_TERMINAL = "๋‘ฅ๋กํ•  ๋…ธ์„ ์˜ ํ•˜ํ–‰ ์ข…์ ์—ญ ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜์„ธ์š”."; + private static final String GUIDE_MESSAGE_END_DELETE_LINE = "์‚ญ์ œํ•  ๋…ธ์„  ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜์„ธ์š”."; + private static final String GUIDE_MESSAGE_END_CKECK_SECTION_LINE = "๋…ธ์„ ์„ ์ž…๋ ฅํ•˜์„ธ์š”."; + private static final String GUIDE_MESSAGE_END_CHECK_SECTION_STATION = "์—ญ ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜์„ธ์š”."; + private static final String GUIDE_MESSAGE_END_CHECK_SECTION_ORDER = "์ˆœ์„œ๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”."; + private static final String GUIDE_MESSAGE_END_DELETE_SECTION_LINE = "์‚ญ์ œํ•  ๊ตฌ๊ฐ„์˜ ๋…ธ์„ ์„ ์ž…๋ ฅํ•˜์„ธ์š”."; + private static final String GUIDE_MESSAGE_END_DELETE_SECTION_STATION = "์‚ญ์ œํ•  ๊ตฌ๊ฐ„์˜ ์—ญ์„ ์ž…๋ ฅํ•˜์„ธ์š”."; + + private static final String INFO_MESSAGE_START = "[INFO]"; + private static final String INFO_MESSAGE_END_ADD_STATION = "์ง€ํ•˜์ฒ  ์—ญ์ด ๋“ฑ๋ก๋˜์—ˆ์Šต๋‹ˆ๋‹ค."; + private static final String INFO_MESSAGE_END_DELETE_STATION = "์ง€ํ•˜์ฒ  ์—ญ์ด ์‚ญ์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค."; + private static final String INFO_MESSAGE_END_ADD_LINE = "์ง€ํ•˜์ฒ  ๋…ธ์„ ์ด ๋“ฑ๋ก๋˜์—ˆ์Šต๋‹ˆ๋‹ค."; + private static final String INFO_MESSAGE_END_DELETE_LINE = "์ง€ํ•˜์ฒ  ๋…ธ์„ ์ด ์‚ญ์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค."; + private static final String INFO_MESSAGE_END_ADD_SECTION = "๊ตฌ๊ฐ„์ด ๋“ฑ๋ก๋˜์—ˆ์Šต๋‹ˆ๋‹ค."; + private static final String INFO_MESSAGE_END_DELETE_SECTION = "๊ตฌ๊ฐ„์ด ์‚ญ์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค."; + + private static final String ERROR_MESSAGE_START = "[ERROR]"; + private static final String ERROR_MESSAGE_END_CHOOSE_FUNCTION = "์„ ํƒํ•  ์ˆ˜ ์—†๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค."; + private static final String ERROR_MESSAGE_END_ADD_STATION_FORMAT = "์—ญ ์ด๋ฆ„์€ 2๊ธ€์ž ์ด์ƒ, ํ•œ๊ธ€๊ณผ ์ˆซ์ž ์กฐํ•ฉ์ด๋ฉฐ, '-์—ญ'์œผ๋กœ ๋๋‚˜์•ผ ํ•ฉ๋‹ˆ๋‹ค."; + private static final String ERROR_MESSAGE_END_ADD_STATION_DUPLICATE = "์ด๋ฏธ ๋“ฑ๋ก๋œ ์—ญ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค."; + private static final String ERROR_MESSAGE_END_DELETE_STATION_NOT_REGISTERED = "๋“ฑ๋ก๋˜์ง€ ์•Š์€ ์—ญ์ž…๋‹ˆ๋‹ค."; + private static final String ERROR_MESSAGE_END_ADD_LINE_FORMAT = "๋…ธ์„  ์ด๋ฆ„์€ 2๊ธ€์ž ์ด์ƒ, ํ•œ๊ธ€๊ณผ ์ˆซ์ž ์กฐํ•ฉ์ด๋ฉฐ, '-์„ '์œผ๋กœ ๋๋‚˜์•ผ ํ•ฉ๋‹ˆ๋‹ค."; + private static final String ERROR_MESSAGE_END_ADD_LINE_DUPLICATE = "์ด๋ฏธ ๋“ฑ๋ก๋œ ๋…ธ์„  ์ด๋ฆ„์ž…๋‹ˆ๋‹ค."; + private static final String ERROR_MESSAGE_END_DELETE_LINE_NOT_REGISTERED = "๋“ฑ๋ก๋˜์ง€ ์•Š์€ ๋…ธ์„ ์ž…๋‹ˆ๋‹ค."; + private static final String ERROR_MESSAGE_END_PARSEINT_ORDER = "๊ตฌ๊ฐ„ ์ˆœ์„œ๋Š” ์ˆซ์ž์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค."; + private static final String ERROR_MESSAGE_END_INBOUND_ORDER = "๊ตฌ๊ฐ„ ์ˆœ์„œ๋Š” 1์ด์ƒ์ด๋ฉฐ ํ•ด๋‹น ๋…ธ์„  ๊ตฌ๊ฐ„์˜ ๊ธธ์ด ์ดํ•˜์ž…๋‹ˆ๋‹ค."; + + public void guideChooseFunction() { + System.out.println(String.join(" ", GUIDE_MESSAGE_START, GUIDE_MESSAGE_END_CHOOSE_FUNCTION)); + } + + public void guideAddStation() { + System.out.println(String.join(" ", GUIDE_MESSAGE_START, GUIDE_MESSAGE_END_ADD_STATION)); + } + + public void guideDeleteStation() { + System.out.println(String.join(" ", GUIDE_MESSAGE_START, GUIDE_MESSAGE_END_DELETE_STATION)); + } + + public void guideAddLineName() { + System.out.println(String.join(" ", GUIDE_MESSAGE_START, GUIDE_MESSAGE_END_ADD_LINE_NAME)); + } + + public void guideAddLineUpwardTerminal() { + System.out.println(String.join(" ", GUIDE_MESSAGE_START, GUIDE_MESSAGE_END_ADD_LINE_UPWARD_TERMINAL)); + } + + public void guideAddLineDownwardTerminal() { + System.out.println(String.join(" ", GUIDE_MESSAGE_START, GUIDE_MESSAGE_END_ADD_LINE_DOWNWARD_TERMINAL)); + } + + public void guideDeleteLine() { + System.out.println(String.join(" ", GUIDE_MESSAGE_START, GUIDE_MESSAGE_END_DELETE_LINE)); + } + + public void guideCheckLine() { + System.out.println(String.join(" ", GUIDE_MESSAGE_START, GUIDE_MESSAGE_END_CKECK_SECTION_LINE)); + } + + public void guideCheckSectionStation() { + System.out.println(String.join(" ", GUIDE_MESSAGE_START, GUIDE_MESSAGE_END_CHECK_SECTION_STATION)); + } + + public void guideCheckSectionOrder() { + System.out.println(String.join(" ", GUIDE_MESSAGE_START, GUIDE_MESSAGE_END_CHECK_SECTION_ORDER)); + } + + public void guideDeleteSectionLine() { + System.out.println(String.join(" ", GUIDE_MESSAGE_START, GUIDE_MESSAGE_END_DELETE_SECTION_LINE)); + } + + public void guideDeleteSectionStation() { + System.out.println(String.join(" ", GUIDE_MESSAGE_START, GUIDE_MESSAGE_END_DELETE_SECTION_STATION)); + } + + public void errorChooseFunction() { + System.out.println(String.join(" ", ERROR_MESSAGE_START, ERROR_MESSAGE_END_CHOOSE_FUNCTION)); + System.out.println(); + } + + public void infoAddStation() { + System.out.println(String.join(" ", INFO_MESSAGE_START, INFO_MESSAGE_END_ADD_STATION)); + System.out.println(); + } + + public void errorStationFormat() { + System.out.println(String.join(" ", ERROR_MESSAGE_START, ERROR_MESSAGE_END_ADD_STATION_FORMAT)); + System.out.println(); + } + + public void errorStationDuplicate() { + System.out.println(String.join(" ", ERROR_MESSAGE_START, ERROR_MESSAGE_END_ADD_STATION_DUPLICATE)); + System.out.println(); + } + + public void infoDeleteStation() { + System.out.println(String.join(" ", INFO_MESSAGE_START, INFO_MESSAGE_END_DELETE_STATION)); + System.out.println(); + } + + public void errorDeleteStationNotRegistered() { + System.out.println(String.join(" ", ERROR_MESSAGE_START, ERROR_MESSAGE_END_DELETE_STATION_NOT_REGISTERED)); + System.out.println(); + } + + public void infoAddLine() { + System.out.println(String.join(" ", INFO_MESSAGE_START, INFO_MESSAGE_END_ADD_LINE)); + System.out.println(); + } + + public void errorLineFormat() { + System.out.println(String.join(" ", ERROR_MESSAGE_START, ERROR_MESSAGE_END_ADD_LINE_FORMAT)); + System.out.println(); + } + + public void errorLineDuplicate() { + System.out.println(String.join(" ", ERROR_MESSAGE_START, ERROR_MESSAGE_END_ADD_LINE_DUPLICATE)); + System.out.println(); + } + + public void infoDeleteLine() { + System.out.println(String.join(" ", INFO_MESSAGE_START, INFO_MESSAGE_END_DELETE_LINE)); + System.out.println(); + } + + public void errorDeleteLineNotRegistered() { + System.out.println(String.join(" ", ERROR_MESSAGE_START, ERROR_MESSAGE_END_DELETE_LINE_NOT_REGISTERED)); + System.out.println(); + } + + public void infoAddSection() { + System.out.println(String.join(" ", INFO_MESSAGE_START, INFO_MESSAGE_END_ADD_SECTION)); + System.out.println(); + } + + public void errorParseIntOrder() { + System.out.println(String.join(" ", ERROR_MESSAGE_START, ERROR_MESSAGE_END_PARSEINT_ORDER)); + System.out.println(); + } + + public void errorInBoundOrder() { + System.out.println(String.join(" ", ERROR_MESSAGE_START, ERROR_MESSAGE_END_INBOUND_ORDER)); + System.out.println(); + } + + public void infoDeleteSection() { + System.out.println(String.join(" ", INFO_MESSAGE_START, INFO_MESSAGE_END_DELETE_SECTION)); + System.out.println(); + } + + public void printMainScreen() { + System.out.println("## ๋ฉ”์ธ ํ™”๋ฉด"); + System.out.println("1. ์—ญ ๊ด€๋ฆฌ"); + System.out.println("2. ๋…ธ์„  ๊ด€๋ฆฌ"); + System.out.println("3. ๊ตฌ๊ฐ„ ๊ด€๋ฆฌ"); + System.out.println("4. ์ง€ํ•˜์ฒ  ๋…ธ์„ ๋„ ์ถœ๋ ฅ"); + System.out.println("Q. ์ข…๋ฃŒ" + NEXT_LINE); + guideChooseFunction(); + } + + public void printStationManagementScreen() { + System.out.println("## ์—ญ ๊ด€๋ฆฌ ํ™”๋ฉด"); + System.out.println("1. ์—ญ ๋“ฑ๋ก"); + System.out.println("2. ์—ญ ์‚ญ์ œ"); + System.out.println("3. ์—ญ ์กฐํšŒ"); + System.out.println("B. ๋Œ์•„๊ฐ€๊ธฐ" + NEXT_LINE); + guideChooseFunction(); + } + + public void printLineManagementScreen() { + System.out.println("## ๋…ธ์„  ๊ด€๋ฆฌ ํ™”๋ฉด"); + System.out.println("1. ๋…ธ์„  ๋“ฑ๋ก"); + System.out.println("2. ๋…ธ์„  ์‚ญ์ œ"); + System.out.println("3. ๋…ธ์„  ์กฐํšŒ"); + System.out.println("B. ๋Œ์•„๊ฐ€๊ธฐ" + NEXT_LINE); + guideChooseFunction(); + } + + public void printSectionManagementScreen() { + System.out.println("## ๊ตฌ๊ฐ„ ๊ด€๋ฆฌ ํ™”๋ฉด"); + System.out.println("1. ๊ตฌ๊ฐ„ ๋“ฑ๋ก"); + System.out.println("2. ๊ตฌ๊ฐ„ ์‚ญ์ œ"); + System.out.println("B. ๋Œ์•„๊ฐ€๊ธฐ" + NEXT_LINE); + guideChooseFunction(); + } + + public void printAllStations() { + System.out.println(String.join(" ", GUIDE_MESSAGE_START, "์—ญ ๋ชฉ๋ก")); + for (Station station : StationRepository.getStations()) { + System.out.println(String.join(" ", INFO_MESSAGE_START, station.getName())); + } + System.out.println(); + } + + public void printAllLines() { + System.out.println(String.join(" ", GUIDE_MESSAGE_START, "๋…ธ์„  ๋ชฉ๋ก")); + for (Line line : LineRepository.getLines()) { + System.out.println(String.join(" ", INFO_MESSAGE_START, line.getName())); + } + System.out.println(); + } + + public void printSubwaySections() { + System.out.println(String.join(" ", GUIDE_MESSAGE_START, "์ง€ํ•˜์ฒ  ๋…ธ์„ ๋„")); + for (Line line : LineRepository.getLines()) { + System.out.println(String.join(" ", INFO_MESSAGE_START, line.getName())); + System.out.println(String.join(" ", INFO_MESSAGE_START, "---")); + for (Station station : line.getSections()) { + System.out.println(String.join(" ", INFO_MESSAGE_START, station.getName())); + } + System.out.println(); + } + } +}