From 0eeea802f05aaa5dd289cea6d9d2c3125f2d8037 Mon Sep 17 00:00:00 2001 From: jiwoo-kimm Date: Fri, 11 Dec 2020 16:46:20 +0900 Subject: [PATCH 01/51] docs(readme): add the list to implement --- README.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/README.md b/README.md index e6ed1056f..f5500480a 100644 --- a/README.md +++ b/README.md @@ -468,3 +468,12 @@ public class StationRepository { ## ๐Ÿ“ License This project is [MIT](https://github.com/woowacourse/java-subway-map-precourse/blob/master/LICENSE.md) licensed. + +
+ +## โ˜‘ ๊ตฌํ˜„ํ•  ๊ธฐ๋Šฅ ๋ชฉ๋ก + +- [ ] ๋ฉ”์ธ + - [ ] ์„ ํƒ์ง€์— ์—†๋Š” ์ž…๋ ฅ์ผ ์‹œ ์—๋Ÿฌ๋ฉ”์„ธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค + - [ ] ์‚ฌ์šฉ์ž ์ž…๋ ฅ์— ๋”ฐ๋ผ ๊ธฐ๋Šฅ์„ ๋ถˆ๋Ÿฌ ์˜จ๋‹ค + - [ ] ์‚ฌ์šฉ์ž ์ž…๋ ฅ์ด Q์ธ ๊ฒฝ์šฐ ํ”„๋กœ๊ทธ๋žจ์„ ์™„์ „ ์ข…๋ฃŒํ•œ๋‹ค \ No newline at end of file From 46283bf4b32069dcec8c99f4fc35556db4201409 Mon Sep 17 00:00:00 2001 From: jiwoo-kimm Date: Fri, 11 Dec 2020 16:47:29 +0900 Subject: [PATCH 02/51] feat(manager): implement select function and validate function code input --- src/main/java/subway/Application.java | 4 +- src/main/java/subway/FunctionValidator.java | 13 +++++ src/main/java/subway/Manager.java | 47 +++++++++++++++++++ src/main/java/subway/constant/Function.java | 30 ++++++++++++ .../java/subway/constant/Information.java | 6 +++ .../exception/InvalidInputException.java | 22 +++++++++ 6 files changed, 121 insertions(+), 1 deletion(-) create mode 100644 src/main/java/subway/FunctionValidator.java create mode 100644 src/main/java/subway/Manager.java create mode 100644 src/main/java/subway/constant/Function.java create mode 100644 src/main/java/subway/constant/Information.java create mode 100644 src/main/java/subway/exception/InvalidInputException.java diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java index 0bcf786cc..ccaa011f7 100644 --- a/src/main/java/subway/Application.java +++ b/src/main/java/subway/Application.java @@ -3,8 +3,10 @@ import java.util.Scanner; public class Application { + public static void main(String[] args) { final Scanner scanner = new Scanner(System.in); - // TODO: ํ”„๋กœ๊ทธ๋žจ ๊ตฌํ˜„ + Manager manager = new Manager(scanner); + manager.start(); } } diff --git a/src/main/java/subway/FunctionValidator.java b/src/main/java/subway/FunctionValidator.java new file mode 100644 index 000000000..970908d6a --- /dev/null +++ b/src/main/java/subway/FunctionValidator.java @@ -0,0 +1,13 @@ +package subway; + +import subway.constant.Function; +import subway.exception.InvalidInputException; + + +public class FunctionValidator { + + public void validate(String input) throws InvalidInputException { + if (!Function.isAvailable(input)) + throw new InvalidInputException(InvalidInputException.ExceptionCode.INVALID_FUNCTION_CODE); + } +} diff --git a/src/main/java/subway/Manager.java b/src/main/java/subway/Manager.java new file mode 100644 index 000000000..ebdfca559 --- /dev/null +++ b/src/main/java/subway/Manager.java @@ -0,0 +1,47 @@ +package subway; + +import subway.constant.Information; +import subway.exception.InvalidInputException; + +import java.util.Scanner; + +public class Manager { + + private Scanner scanner; + private FunctionValidator functionValidator = new FunctionValidator(); + private boolean isContinue = true; + + public Manager(Scanner scanner) { + this.scanner = scanner; + } + + + public void start() { + initParams(); + while (isContinue) + runFunction(); + } + + private void initParams() { + // TODO ๋…ธ์„ ๋„ ์ดˆ๊ธฐํ™” + } + + private void runFunction() { + try { + String selectedFunction = selectFunction(); + } catch (InvalidInputException e) { + System.out.println(e.getMessage()); + } + } + + private String selectFunction() throws InvalidInputException { + String line = getFunctionInput(); + functionValidator.validate(line); + return line; + } + + private String getFunctionInput() { + System.out.println(Information.MAIN_INFO); + return scanner.nextLine(); + } +} diff --git a/src/main/java/subway/constant/Function.java b/src/main/java/subway/constant/Function.java new file mode 100644 index 000000000..2beac2e3c --- /dev/null +++ b/src/main/java/subway/constant/Function.java @@ -0,0 +1,30 @@ +package subway.constant; + +import java.util.ArrayList; +import java.util.List; + +public enum Function { + + MANAGE_STATION("1"), + MANAGE_LINE("2"), + MANAGE_ROUTE("3"), + PRINT_MAP("4"), + QUIT("Q"); + + private static List functionCodes = new ArrayList<>(); + private String code; + + Function(String code) { + this.code = code; + } + + public static boolean isAvailable(String input) { + initFunctionValues(); + return functionCodes.contains(input); + } + + private static void initFunctionValues() { + for (Function function : Function.values()) + functionCodes.add(function.code); + } +} diff --git a/src/main/java/subway/constant/Information.java b/src/main/java/subway/constant/Information.java new file mode 100644 index 000000000..cd2e684db --- /dev/null +++ b/src/main/java/subway/constant/Information.java @@ -0,0 +1,6 @@ +package subway.constant; + +public class Information { + + public static final String MAIN_INFO = "\n## ๋ฉ”์ธ ํ™”๋ฉด\n1. ์—ญ ๊ด€๋ฆฌ\n2. ๋…ธ์„  ๊ด€๋ฆฌ\n3. ๊ตฌ๊ฐ„ ๊ด€๋ฆฌ\n4. ์ง€ํ•˜์ฒ  ๋…ธ์„ ๋„ ์ถœ๋ ฅ\nQ. ์ข…๋ฃŒ\n\n## ์›ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์„ ํƒํ•˜์„ธ์š”."; +} diff --git a/src/main/java/subway/exception/InvalidInputException.java b/src/main/java/subway/exception/InvalidInputException.java new file mode 100644 index 000000000..22b7094e3 --- /dev/null +++ b/src/main/java/subway/exception/InvalidInputException.java @@ -0,0 +1,22 @@ +package subway.exception; + +public class InvalidInputException extends RuntimeException { + + public enum ExceptionCode { + INVALID_FUNCTION_CODE + } + + private final String HEADER = "\n[ERROR] "; + + private ExceptionCode exceptionCode; + + public InvalidInputException(ExceptionCode exceptionCode) { + this.exceptionCode = exceptionCode; + } + + public String getMessage() { + if (exceptionCode.equals(ExceptionCode.INVALID_FUNCTION_CODE)) + return HEADER + "์„ ํƒํ•  ์ˆ˜ ์—†๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค."; + return ""; + } +} From 78f99df50b692b87d40d32f2aa8de348fc6a64b0 Mon Sep 17 00:00:00 2001 From: jiwoo-kimm Date: Fri, 11 Dec 2020 17:19:40 +0900 Subject: [PATCH 03/51] feat(main): implement run service on user input --- README.md | 4 +- src/main/java/subway/Application.java | 6 +- src/main/java/subway/Manager.java | 47 -------------- ...onValidator.java => ServiceValidator.java} | 6 +- src/main/java/subway/constant/Function.java | 30 --------- .../java/subway/constant/Information.java | 8 ++- src/main/java/subway/constant/Service.java | 34 ++++++++++ src/main/java/subway/domain/Map.java | 8 +++ src/main/java/subway/service/AreaService.java | 18 +++++ src/main/java/subway/service/LineService.java | 18 +++++ src/main/java/subway/service/MainService.java | 65 +++++++++++++++++++ src/main/java/subway/service/MapService.java | 10 +++ .../java/subway/service/StationService.java | 18 +++++ 13 files changed, 187 insertions(+), 85 deletions(-) delete mode 100644 src/main/java/subway/Manager.java rename src/main/java/subway/{FunctionValidator.java => ServiceValidator.java} (69%) delete mode 100644 src/main/java/subway/constant/Function.java create mode 100644 src/main/java/subway/constant/Service.java create mode 100644 src/main/java/subway/domain/Map.java create mode 100644 src/main/java/subway/service/AreaService.java create mode 100644 src/main/java/subway/service/LineService.java create mode 100644 src/main/java/subway/service/MainService.java create mode 100644 src/main/java/subway/service/MapService.java create mode 100644 src/main/java/subway/service/StationService.java diff --git a/README.md b/README.md index f5500480a..68c645160 100644 --- a/README.md +++ b/README.md @@ -474,6 +474,6 @@ This project is [MIT](https://github.com/woowacourse/java-subway-map-precourse/b ## โ˜‘ ๊ตฌํ˜„ํ•  ๊ธฐ๋Šฅ ๋ชฉ๋ก - [ ] ๋ฉ”์ธ - - [ ] ์„ ํƒ์ง€์— ์—†๋Š” ์ž…๋ ฅ์ผ ์‹œ ์—๋Ÿฌ๋ฉ”์„ธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค - - [ ] ์‚ฌ์šฉ์ž ์ž…๋ ฅ์— ๋”ฐ๋ผ ๊ธฐ๋Šฅ์„ ๋ถˆ๋Ÿฌ ์˜จ๋‹ค + - [x] ์„ ํƒ์ง€์— ์—†๋Š” ์ž…๋ ฅ์ผ ์‹œ ์—๋Ÿฌ๋ฉ”์„ธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค + - [x] ์‚ฌ์šฉ์ž ์ž…๋ ฅ์— ๋”ฐ๋ผ ๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•œ๋‹ค - [ ] ์‚ฌ์šฉ์ž ์ž…๋ ฅ์ด Q์ธ ๊ฒฝ์šฐ ํ”„๋กœ๊ทธ๋žจ์„ ์™„์ „ ์ข…๋ฃŒํ•œ๋‹ค \ No newline at end of file diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java index ccaa011f7..e0f99c035 100644 --- a/src/main/java/subway/Application.java +++ b/src/main/java/subway/Application.java @@ -1,12 +1,14 @@ package subway; +import subway.service.MainService; + import java.util.Scanner; public class Application { public static void main(String[] args) { final Scanner scanner = new Scanner(System.in); - Manager manager = new Manager(scanner); - manager.start(); + MainService mainService = new MainService(scanner); + mainService.start(); } } diff --git a/src/main/java/subway/Manager.java b/src/main/java/subway/Manager.java deleted file mode 100644 index ebdfca559..000000000 --- a/src/main/java/subway/Manager.java +++ /dev/null @@ -1,47 +0,0 @@ -package subway; - -import subway.constant.Information; -import subway.exception.InvalidInputException; - -import java.util.Scanner; - -public class Manager { - - private Scanner scanner; - private FunctionValidator functionValidator = new FunctionValidator(); - private boolean isContinue = true; - - public Manager(Scanner scanner) { - this.scanner = scanner; - } - - - public void start() { - initParams(); - while (isContinue) - runFunction(); - } - - private void initParams() { - // TODO ๋…ธ์„ ๋„ ์ดˆ๊ธฐํ™” - } - - private void runFunction() { - try { - String selectedFunction = selectFunction(); - } catch (InvalidInputException e) { - System.out.println(e.getMessage()); - } - } - - private String selectFunction() throws InvalidInputException { - String line = getFunctionInput(); - functionValidator.validate(line); - return line; - } - - private String getFunctionInput() { - System.out.println(Information.MAIN_INFO); - return scanner.nextLine(); - } -} diff --git a/src/main/java/subway/FunctionValidator.java b/src/main/java/subway/ServiceValidator.java similarity index 69% rename from src/main/java/subway/FunctionValidator.java rename to src/main/java/subway/ServiceValidator.java index 970908d6a..dc9e751fb 100644 --- a/src/main/java/subway/FunctionValidator.java +++ b/src/main/java/subway/ServiceValidator.java @@ -1,13 +1,13 @@ package subway; -import subway.constant.Function; +import subway.constant.Service; import subway.exception.InvalidInputException; -public class FunctionValidator { +public class ServiceValidator { public void validate(String input) throws InvalidInputException { - if (!Function.isAvailable(input)) + if (!Service.isAvailable(input)) throw new InvalidInputException(InvalidInputException.ExceptionCode.INVALID_FUNCTION_CODE); } } diff --git a/src/main/java/subway/constant/Function.java b/src/main/java/subway/constant/Function.java deleted file mode 100644 index 2beac2e3c..000000000 --- a/src/main/java/subway/constant/Function.java +++ /dev/null @@ -1,30 +0,0 @@ -package subway.constant; - -import java.util.ArrayList; -import java.util.List; - -public enum Function { - - MANAGE_STATION("1"), - MANAGE_LINE("2"), - MANAGE_ROUTE("3"), - PRINT_MAP("4"), - QUIT("Q"); - - private static List functionCodes = new ArrayList<>(); - private String code; - - Function(String code) { - this.code = code; - } - - public static boolean isAvailable(String input) { - initFunctionValues(); - return functionCodes.contains(input); - } - - private static void initFunctionValues() { - for (Function function : Function.values()) - functionCodes.add(function.code); - } -} diff --git a/src/main/java/subway/constant/Information.java b/src/main/java/subway/constant/Information.java index cd2e684db..f6af28c3c 100644 --- a/src/main/java/subway/constant/Information.java +++ b/src/main/java/subway/constant/Information.java @@ -2,5 +2,11 @@ public class Information { - public static final String MAIN_INFO = "\n## ๋ฉ”์ธ ํ™”๋ฉด\n1. ์—ญ ๊ด€๋ฆฌ\n2. ๋…ธ์„  ๊ด€๋ฆฌ\n3. ๊ตฌ๊ฐ„ ๊ด€๋ฆฌ\n4. ์ง€ํ•˜์ฒ  ๋…ธ์„ ๋„ ์ถœ๋ ฅ\nQ. ์ข…๋ฃŒ\n\n## ์›ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์„ ํƒํ•˜์„ธ์š”."; + public static final String CHOOSE_FUNCTION = "\n## ์›ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์„ ํƒํ•˜์„ธ์š”."; + + public static final String MAIN_INFO = "\n## ๋ฉ”์ธ ํ™”๋ฉด\n1. ์—ญ ๊ด€๋ฆฌ\n2. ๋…ธ์„  ๊ด€๋ฆฌ\n3. ๊ตฌ๊ฐ„ ๊ด€๋ฆฌ\n4. ์ง€ํ•˜์ฒ  ๋…ธ์„ ๋„ ์ถœ๋ ฅ\nQ. ์ข…๋ฃŒ\n" + CHOOSE_FUNCTION; + public static final String STATION_INFO = "\n## ์—ญ ๊ด€๋ฆฌ ํ™”๋ฉด\n1. ์—ญ ๋“ฑ๋ก\n2. ์—ญ ์‚ญ์ œ\n3. ์—ญ ์กฐํšŒ\nB. ๋Œ์•„๊ฐ€๊ธฐ\n" + CHOOSE_FUNCTION; + public static final String LINE_INFO = "\n## ๋…ธ์„  ๊ด€๋ฆฌ ํ™”๋ฉด\n1. ๋…ธ์„  ๋“ฑ๋ก\n2. ๋…ธ์„  ์‚ญ์ œ\n3. ๋…ธ์„  ์กฐํšŒ\nB. ๋Œ์•„๊ฐ€๊ธฐ\n" + CHOOSE_FUNCTION; + public static final String AREA_INFO = "\n## ๊ตฌ๊ฐ„ ๊ด€๋ฆฌ ํ™”๋ฉด\n1. ๊ตฌ๊ฐ„ ๋“ฑ๋ก\n2. ๊ตฌ๊ฐ„ ์‚ญ์ œ\nB. ๋Œ์•„๊ฐ€๊ธฐ\n" + CHOOSE_FUNCTION; + public static final String MAP_INFO = "\n## ์ง€ํ•˜์ฒ  ๋…ธ์„ ๋„"; } diff --git a/src/main/java/subway/constant/Service.java b/src/main/java/subway/constant/Service.java new file mode 100644 index 000000000..c7ae24f19 --- /dev/null +++ b/src/main/java/subway/constant/Service.java @@ -0,0 +1,34 @@ +package subway.constant; + +import java.util.ArrayList; +import java.util.List; + +public enum Service { + + STATION("1"), + LINE("2"), + AREA("3"), + MAP("4"), + QUIT("Q"); + + private static List serviceCodes = new ArrayList<>(); + private String code; + + Service(String code) { + this.code = code; + } + + public String getCode() { + return code; + } + + public static boolean isAvailable(String input) { + initServiceCodes(); + return serviceCodes.contains(input); + } + + private static void initServiceCodes() { + for (Service service : Service.values()) + serviceCodes.add(service.code); + } +} diff --git a/src/main/java/subway/domain/Map.java b/src/main/java/subway/domain/Map.java new file mode 100644 index 000000000..dd8b09b49 --- /dev/null +++ b/src/main/java/subway/domain/Map.java @@ -0,0 +1,8 @@ +package subway.domain; + +public class Map { + + public Map() { + // TODO ๋…ธ์„  ์ดˆ๊ธฐํ™” + } +} diff --git a/src/main/java/subway/service/AreaService.java b/src/main/java/subway/service/AreaService.java new file mode 100644 index 000000000..13abc0363 --- /dev/null +++ b/src/main/java/subway/service/AreaService.java @@ -0,0 +1,18 @@ +package subway.service; + +import subway.constant.Information; + +import java.util.Scanner; + +public class AreaService { + + private Scanner scanner; + + public AreaService(Scanner scanner) { + this.scanner = scanner; + } + + public void run() { + System.out.println(Information.AREA_INFO); + } +} diff --git a/src/main/java/subway/service/LineService.java b/src/main/java/subway/service/LineService.java new file mode 100644 index 000000000..621d911cb --- /dev/null +++ b/src/main/java/subway/service/LineService.java @@ -0,0 +1,18 @@ +package subway.service; + +import subway.constant.Information; + +import java.util.Scanner; + +public class LineService { + + private Scanner scanner; + + public LineService(Scanner scanner) { + this.scanner = scanner; + } + + public void run() { + System.out.println(Information.LINE_INFO); + } +} diff --git a/src/main/java/subway/service/MainService.java b/src/main/java/subway/service/MainService.java new file mode 100644 index 000000000..7aae480b2 --- /dev/null +++ b/src/main/java/subway/service/MainService.java @@ -0,0 +1,65 @@ +package subway.service; + +import subway.ServiceValidator; +import subway.constant.Information; +import subway.constant.Service; +import subway.exception.InvalidInputException; + +import java.util.Scanner; + +public class MainService { + + private Scanner scanner; + private ServiceValidator serviceValidator = new ServiceValidator(); + private boolean isContinue = true; + + private StationService stationService; + private LineService lineService; + private AreaService areaService; + private MapService mapService; + + public MainService(Scanner scanner) { + this.scanner = scanner; + stationService = new StationService(scanner); + lineService = new LineService(scanner); + areaService = new AreaService(scanner); + mapService = new MapService(); + } + + + public void start() { + while (isContinue) + runService(); + } + + private void runService() { + try { + String selectedService = selectService(); + runSelectedService(selectedService); + } catch (InvalidInputException e) { + System.out.println(e.getMessage()); + } + } + + private String selectService() { + String line = getServiceInput(); + serviceValidator.validate(line); + return line; + } + + private String getServiceInput() { + System.out.println(Information.MAIN_INFO); + return scanner.nextLine(); + } + + private void runSelectedService(String selectedFunction) { + if (selectedFunction.equals(Service.STATION.getCode())) + stationService.run(); + if (selectedFunction.equals(Service.LINE.getCode())) + lineService.run(); + if (selectedFunction.equals(Service.AREA.getCode())) + areaService.run(); + if (selectedFunction.equals(Service.MAP.getCode())) + mapService.run(); + } +} diff --git a/src/main/java/subway/service/MapService.java b/src/main/java/subway/service/MapService.java new file mode 100644 index 000000000..3579db3da --- /dev/null +++ b/src/main/java/subway/service/MapService.java @@ -0,0 +1,10 @@ +package subway.service; + +import subway.constant.Information; + +public class MapService { + + public void run() { + System.out.println(Information.MAP_INFO); + } +} diff --git a/src/main/java/subway/service/StationService.java b/src/main/java/subway/service/StationService.java new file mode 100644 index 000000000..d22ca42ff --- /dev/null +++ b/src/main/java/subway/service/StationService.java @@ -0,0 +1,18 @@ +package subway.service; + +import subway.constant.Information; + +import java.util.Scanner; + +public class StationService { + + private Scanner scanner; + + public StationService(Scanner scanner) { + this.scanner = scanner; + } + + public void run() { + System.out.println(Information.STATION_INFO); + } +} From 30473334bee1587de4a878c99cf35a96371cd3e8 Mon Sep 17 00:00:00 2001 From: jiwoo-kimm Date: Fri, 11 Dec 2020 17:39:29 +0900 Subject: [PATCH 04/51] refactor: refactor package structure --- README.md | 4 ++-- .../java/subway/{domain => repository}/LineRepository.java | 4 +++- .../java/subway/{domain => repository}/StationRepository.java | 4 +++- src/main/java/subway/service/MainService.java | 4 +++- src/main/java/subway/{ => validator}/ServiceValidator.java | 2 +- 5 files changed, 12 insertions(+), 6 deletions(-) rename src/main/java/subway/{domain => repository}/LineRepository.java (90%) rename src/main/java/subway/{domain => repository}/StationRepository.java (90%) rename src/main/java/subway/{ => validator}/ServiceValidator.java (92%) diff --git a/README.md b/README.md index 68c645160..ea244ff05 100644 --- a/README.md +++ b/README.md @@ -473,7 +473,7 @@ This project is [MIT](https://github.com/woowacourse/java-subway-map-precourse/b ## โ˜‘ ๊ตฌํ˜„ํ•  ๊ธฐ๋Šฅ ๋ชฉ๋ก -- [ ] ๋ฉ”์ธ +- [x] ๋ฉ”์ธ - [x] ์„ ํƒ์ง€์— ์—†๋Š” ์ž…๋ ฅ์ผ ์‹œ ์—๋Ÿฌ๋ฉ”์„ธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค - [x] ์‚ฌ์šฉ์ž ์ž…๋ ฅ์— ๋”ฐ๋ผ ๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•œ๋‹ค - - [ ] ์‚ฌ์šฉ์ž ์ž…๋ ฅ์ด Q์ธ ๊ฒฝ์šฐ ํ”„๋กœ๊ทธ๋žจ์„ ์™„์ „ ์ข…๋ฃŒํ•œ๋‹ค \ No newline at end of file + - [x] ์‚ฌ์šฉ์ž ์ž…๋ ฅ์ด Q์ธ ๊ฒฝ์šฐ ํ”„๋กœ๊ทธ๋žจ์„ ์™„์ „ ์ข…๋ฃŒํ•œ๋‹ค \ No newline at end of file diff --git a/src/main/java/subway/domain/LineRepository.java b/src/main/java/subway/repository/LineRepository.java similarity index 90% rename from src/main/java/subway/domain/LineRepository.java rename to src/main/java/subway/repository/LineRepository.java index 49132ddb6..2cf84c862 100644 --- a/src/main/java/subway/domain/LineRepository.java +++ b/src/main/java/subway/repository/LineRepository.java @@ -1,4 +1,6 @@ -package subway.domain; +package subway.repository; + +import subway.domain.Line; import java.util.ArrayList; import java.util.Collections; diff --git a/src/main/java/subway/domain/StationRepository.java b/src/main/java/subway/repository/StationRepository.java similarity index 90% rename from src/main/java/subway/domain/StationRepository.java rename to src/main/java/subway/repository/StationRepository.java index b7245c0f3..211b46558 100644 --- a/src/main/java/subway/domain/StationRepository.java +++ b/src/main/java/subway/repository/StationRepository.java @@ -1,4 +1,6 @@ -package subway.domain; +package subway.repository; + +import subway.domain.Station; import java.util.ArrayList; import java.util.Collections; diff --git a/src/main/java/subway/service/MainService.java b/src/main/java/subway/service/MainService.java index 7aae480b2..5fccae9cf 100644 --- a/src/main/java/subway/service/MainService.java +++ b/src/main/java/subway/service/MainService.java @@ -1,6 +1,6 @@ package subway.service; -import subway.ServiceValidator; +import subway.validator.ServiceValidator; import subway.constant.Information; import subway.constant.Service; import subway.exception.InvalidInputException; @@ -61,5 +61,7 @@ private void runSelectedService(String selectedFunction) { areaService.run(); if (selectedFunction.equals(Service.MAP.getCode())) mapService.run(); + if (selectedFunction.equals(Service.QUIT.getCode())) + isContinue = false; } } diff --git a/src/main/java/subway/ServiceValidator.java b/src/main/java/subway/validator/ServiceValidator.java similarity index 92% rename from src/main/java/subway/ServiceValidator.java rename to src/main/java/subway/validator/ServiceValidator.java index dc9e751fb..d32be5722 100644 --- a/src/main/java/subway/ServiceValidator.java +++ b/src/main/java/subway/validator/ServiceValidator.java @@ -1,4 +1,4 @@ -package subway; +package subway.validator; import subway.constant.Service; import subway.exception.InvalidInputException; From b42a6410e90aefee515bbee2a0961dc2d5755903 Mon Sep 17 00:00:00 2001 From: jiwoo-kimm Date: Fri, 11 Dec 2020 19:29:42 +0900 Subject: [PATCH 05/51] feat(main): initialize map with given data --- README.md | 3 +- .../java/subway/constant/InitialData.java | 46 +++++++++++++++++++ src/main/java/subway/domain/Line.java | 14 ++++++ src/main/java/subway/domain/Station.java | 1 + .../subway/repository/LineRepository.java | 5 ++ .../subway/repository/StationRepository.java | 5 ++ src/main/java/subway/service/LineService.java | 7 +++ .../java/subway/service/StationService.java | 7 +++ 8 files changed, 87 insertions(+), 1 deletion(-) create mode 100644 src/main/java/subway/constant/InitialData.java diff --git a/README.md b/README.md index ea244ff05..5132f9081 100644 --- a/README.md +++ b/README.md @@ -476,4 +476,5 @@ This project is [MIT](https://github.com/woowacourse/java-subway-map-precourse/b - [x] ๋ฉ”์ธ - [x] ์„ ํƒ์ง€์— ์—†๋Š” ์ž…๋ ฅ์ผ ์‹œ ์—๋Ÿฌ๋ฉ”์„ธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค - [x] ์‚ฌ์šฉ์ž ์ž…๋ ฅ์— ๋”ฐ๋ผ ๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•œ๋‹ค - - [x] ์‚ฌ์šฉ์ž ์ž…๋ ฅ์ด Q์ธ ๊ฒฝ์šฐ ํ”„๋กœ๊ทธ๋žจ์„ ์™„์ „ ์ข…๋ฃŒํ•œ๋‹ค \ No newline at end of file + - [x] ์‚ฌ์šฉ์ž ์ž…๋ ฅ์ด Q์ธ ๊ฒฝ์šฐ ํ”„๋กœ๊ทธ๋žจ์„ ์™„์ „ ์ข…๋ฃŒํ•œ๋‹ค + - [x] ์‚ฌ์ „๋“ฑ๋ก์ •๋ณด์— ๋”ฐ๋ผ ์ง€ํ•˜์ฒ  ๋…ธ์„ ๋„๋ฅผ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค \ No newline at end of file diff --git a/src/main/java/subway/constant/InitialData.java b/src/main/java/subway/constant/InitialData.java new file mode 100644 index 000000000..af6efe715 --- /dev/null +++ b/src/main/java/subway/constant/InitialData.java @@ -0,0 +1,46 @@ +package subway.constant; + +import subway.domain.Line; +import subway.domain.Station; + +import java.util.Arrays; +import java.util.List; + +public class InitialData { + + public static final List stations = Arrays.asList( + new Station("๊ต๋Œ€์—ญ"), + new Station("๊ฐ•๋‚จ์—ญ"), + new Station("์—ญ์‚ผ์—ญ"), + new Station("๋‚จ๋ถ€ํ„ฐ๋ฏธ๋„์—ญ"), + new Station("์–‘์žฌ์—ญ"), + new Station("์–‘์žฌ์‹œ๋ฏผ์˜์ˆฒ์—ญ"), + new Station("๋งค๋ด‰์—ญ") + ); + + + private static final List lineTwoStations = Arrays.asList( + new Station("๊ต๋Œ€์—ญ"), + new Station("๊ฐ•๋‚จ์—ญ"), + new Station("์—ญ์‚ผ์—ญ") + ); + + private static final List lineThreeStations = Arrays.asList( + new Station("๊ต๋Œ€์—ญ"), + new Station("๋‚จ๋ถ€ํ„ฐ๋ฏธ๋„์—ญ"), + new Station("์–‘์žฌ์—ญ"), + new Station("๋งค๋ด‰์—ญ") + ); + + private static final List lineSinbundangStations = Arrays.asList( + new Station("๊ฐ•๋‚จ์—ญ"), + new Station("์–‘์žฌ์—ญ"), + new Station("์–‘์žฌ์‹œ๋ฏผ์˜์ˆฒ์—ญ") + ); + + public static final List lines = Arrays.asList( + new Line("2ํ˜ธ์„ ", lineTwoStations), + new Line("3ํ˜ธ์„ ", lineThreeStations), + new Line("์‹ ๋ถ„๋‹น์„ ", lineSinbundangStations) + ); +} diff --git a/src/main/java/subway/domain/Line.java b/src/main/java/subway/domain/Line.java index f4d738d5a..9c9d90f08 100644 --- a/src/main/java/subway/domain/Line.java +++ b/src/main/java/subway/domain/Line.java @@ -1,15 +1,29 @@ package subway.domain; +import java.util.ArrayList; +import java.util.List; + public class Line { + private String name; + private List stations = new ArrayList<>(); public Line(String name) { this.name = name; } + public Line(String name, List stations) { + this.name = name; + this.stations = stations; + } + public String getName() { return name; } + public List getStations() { + return stations; + } + // ์ถ”๊ฐ€ ๊ธฐ๋Šฅ ๊ตฌํ˜„ } diff --git a/src/main/java/subway/domain/Station.java b/src/main/java/subway/domain/Station.java index bdb142590..4c75a8481 100644 --- a/src/main/java/subway/domain/Station.java +++ b/src/main/java/subway/domain/Station.java @@ -1,6 +1,7 @@ package subway.domain; public class Station { + private String name; public Station(String name) { diff --git a/src/main/java/subway/repository/LineRepository.java b/src/main/java/subway/repository/LineRepository.java index 2cf84c862..d4e37473d 100644 --- a/src/main/java/subway/repository/LineRepository.java +++ b/src/main/java/subway/repository/LineRepository.java @@ -18,6 +18,11 @@ public static void addLine(Line line) { lines.add(line); } + public static void addLine(List lines) { + for (Line line : lines) + addLine(line); + } + public static boolean deleteLineByName(String name) { return lines.removeIf(line -> Objects.equals(line.getName(), name)); } diff --git a/src/main/java/subway/repository/StationRepository.java b/src/main/java/subway/repository/StationRepository.java index 211b46558..067c33c2e 100644 --- a/src/main/java/subway/repository/StationRepository.java +++ b/src/main/java/subway/repository/StationRepository.java @@ -18,6 +18,11 @@ public static void addStation(Station station) { stations.add(station); } + public static void addStation(List stations) { + for (Station station : stations) + addStation(station); + } + public static boolean deleteStation(String name) { return stations.removeIf(station -> Objects.equals(station.getName(), name)); } diff --git a/src/main/java/subway/service/LineService.java b/src/main/java/subway/service/LineService.java index 621d911cb..e3d1dccbd 100644 --- a/src/main/java/subway/service/LineService.java +++ b/src/main/java/subway/service/LineService.java @@ -1,6 +1,8 @@ package subway.service; import subway.constant.Information; +import subway.constant.InitialData; +import subway.repository.LineRepository; import java.util.Scanner; @@ -10,6 +12,11 @@ public class LineService { public LineService(Scanner scanner) { this.scanner = scanner; + initLines(); + } + + private void initLines() { + LineRepository.addLine(InitialData.lines); } public void run() { diff --git a/src/main/java/subway/service/StationService.java b/src/main/java/subway/service/StationService.java index d22ca42ff..5ecae3ba0 100644 --- a/src/main/java/subway/service/StationService.java +++ b/src/main/java/subway/service/StationService.java @@ -1,6 +1,8 @@ package subway.service; import subway.constant.Information; +import subway.constant.InitialData; +import subway.repository.StationRepository; import java.util.Scanner; @@ -10,6 +12,11 @@ public class StationService { public StationService(Scanner scanner) { this.scanner = scanner; + initStations(); + } + + private void initStations() { + StationRepository.addStation(InitialData.stations); } public void run() { From ff4656a2f1ca84d774acebb4b935878e55c1f5c1 Mon Sep 17 00:00:00 2001 From: jiwoo-kimm Date: Fri, 11 Dec 2020 19:34:48 +0900 Subject: [PATCH 06/51] docs(readme): update the list to implement station service --- README.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 5132f9081..3e379ab7a 100644 --- a/README.md +++ b/README.md @@ -477,4 +477,9 @@ This project is [MIT](https://github.com/woowacourse/java-subway-map-precourse/b - [x] ์„ ํƒ์ง€์— ์—†๋Š” ์ž…๋ ฅ์ผ ์‹œ ์—๋Ÿฌ๋ฉ”์„ธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค - [x] ์‚ฌ์šฉ์ž ์ž…๋ ฅ์— ๋”ฐ๋ผ ๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•œ๋‹ค - [x] ์‚ฌ์šฉ์ž ์ž…๋ ฅ์ด Q์ธ ๊ฒฝ์šฐ ํ”„๋กœ๊ทธ๋žจ์„ ์™„์ „ ์ข…๋ฃŒํ•œ๋‹ค - - [x] ์‚ฌ์ „๋“ฑ๋ก์ •๋ณด์— ๋”ฐ๋ผ ์ง€ํ•˜์ฒ  ๋…ธ์„ ๋„๋ฅผ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค \ No newline at end of file + - [x] ์‚ฌ์ „๋“ฑ๋ก์ •๋ณด์— ๋”ฐ๋ผ ์ง€ํ•˜์ฒ  ๋…ธ์„ ๋„๋ฅผ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค +- [ ] ์—ญ ๊ด€๋ฆฌ + - [ ] ์—ญ ์กฐํšŒ ์‹œ ๋ชจ๋“  ์—ญ์˜ ์ด๋ฆ„์„ ์ค‘๋ณต ์—†์ด ์ถœ๋ ฅํ•œ๋‹ค. + - [ ] ์—ญ ๋“ฑ๋ก ์‹œ ์ด๋ฆ„ ์ค‘๋ณต์„ ํ™•์ธํ•œ๋‹ค. + - [ ] ์—ญ ๋“ฑ๋ก ์‹œ ์ด๋ฆ„์ด 2๊ธ€์ž ์ด์ƒ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. + - [ ] ์—ญ ์‚ญ์ œ ์‹œ ๋…ธ์„ ์— ๋“ฑ๋ก๋œ ์—ญ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. \ No newline at end of file From e26b69057631969db3482cbbc8332b5515a9d1cc Mon Sep 17 00:00:00 2001 From: jiwoo-kimm Date: Fri, 11 Dec 2020 19:43:54 +0900 Subject: [PATCH 07/51] docs(readme): update the list to implement station service --- README.md | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 5132f9081..b6f265ec8 100644 --- a/README.md +++ b/README.md @@ -474,7 +474,14 @@ This project is [MIT](https://github.com/woowacourse/java-subway-map-precourse/b ## โ˜‘ ๊ตฌํ˜„ํ•  ๊ธฐ๋Šฅ ๋ชฉ๋ก - [x] ๋ฉ”์ธ - - [x] ์„ ํƒ์ง€์— ์—†๋Š” ์ž…๋ ฅ์ผ ์‹œ ์—๋Ÿฌ๋ฉ”์„ธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค - - [x] ์‚ฌ์šฉ์ž ์ž…๋ ฅ์— ๋”ฐ๋ผ ๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•œ๋‹ค - - [x] ์‚ฌ์šฉ์ž ์ž…๋ ฅ์ด Q์ธ ๊ฒฝ์šฐ ํ”„๋กœ๊ทธ๋žจ์„ ์™„์ „ ์ข…๋ฃŒํ•œ๋‹ค - - [x] ์‚ฌ์ „๋“ฑ๋ก์ •๋ณด์— ๋”ฐ๋ผ ์ง€ํ•˜์ฒ  ๋…ธ์„ ๋„๋ฅผ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค \ No newline at end of file + - [x] ์„ ํƒ์ง€์— ์—†๋Š” ์ž…๋ ฅ์ผ ์‹œ ์—๋Ÿฌ๋ฉ”์„ธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. + - [x] ์‚ฌ์šฉ์ž ์ž…๋ ฅ์— ๋”ฐ๋ผ ํ•˜์œ„ ๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•œ๋‹ค. + - [x] ์‚ฌ์šฉ์ž ์ž…๋ ฅ์ด Q์ธ ๊ฒฝ์šฐ ํ”„๋กœ๊ทธ๋žจ์„ ์™„์ „ ์ข…๋ฃŒํ•œ๋‹ค. + - [x] ์‚ฌ์ „๋“ฑ๋ก์ •๋ณด์— ๋”ฐ๋ผ ์ง€ํ•˜์ฒ  ๋…ธ์„ ๋„๋ฅผ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค. +- [ ] ์—ญ ๊ด€๋ฆฌ + - [ ] ์„ ํƒ์ง€์— ์—†๋Š” ์ž…๋ ฅ์ผ ์‹œ ์—๋Ÿฌ๋ฉ”์„ธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. + - [ ] ์‚ฌ์šฉ์ž ์ž…๋ ฅ์— ๋”ฐ๋ผ ํ•˜์œ„ ๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•œ๋‹ค. + - [ ] ์—ญ ์กฐํšŒ ์‹œ ๋ชจ๋“  ์—ญ์˜ ์ด๋ฆ„์„ ์ค‘๋ณต ์—†์ด ์ถœ๋ ฅํ•œ๋‹ค. + - [ ] ์—ญ ๋“ฑ๋ก ์‹œ ์ด๋ฆ„ ์ค‘๋ณต์„ ํ™•์ธํ•œ๋‹ค. + - [ ] ์—ญ ๋“ฑ๋ก ์‹œ ์ด๋ฆ„์ด 2๊ธ€์ž ์ด์ƒ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. + - [ ] ์—ญ ์‚ญ์ œ ์‹œ ๋…ธ์„ ์— ๋“ฑ๋ก๋œ ์—ญ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. \ No newline at end of file From 4493cd30866584f7c6a2f782c53b2115fd92cf14 Mon Sep 17 00:00:00 2001 From: jiwoo-kimm Date: Fri, 11 Dec 2020 19:49:05 +0900 Subject: [PATCH 08/51] refactor: rename function to service --- .../java/subway/exception/InvalidInputException.java | 4 ++-- src/main/java/subway/service/MainService.java | 12 ++++++------ src/main/java/subway/validator/ServiceValidator.java | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/main/java/subway/exception/InvalidInputException.java b/src/main/java/subway/exception/InvalidInputException.java index 22b7094e3..05c1ff92a 100644 --- a/src/main/java/subway/exception/InvalidInputException.java +++ b/src/main/java/subway/exception/InvalidInputException.java @@ -3,7 +3,7 @@ public class InvalidInputException extends RuntimeException { public enum ExceptionCode { - INVALID_FUNCTION_CODE + INVALID_SERVICE_CODE } private final String HEADER = "\n[ERROR] "; @@ -15,7 +15,7 @@ public InvalidInputException(ExceptionCode exceptionCode) { } public String getMessage() { - if (exceptionCode.equals(ExceptionCode.INVALID_FUNCTION_CODE)) + if (exceptionCode.equals(ExceptionCode.INVALID_SERVICE_CODE)) return HEADER + "์„ ํƒํ•  ์ˆ˜ ์—†๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค."; return ""; } diff --git a/src/main/java/subway/service/MainService.java b/src/main/java/subway/service/MainService.java index 5fccae9cf..5f5d82b16 100644 --- a/src/main/java/subway/service/MainService.java +++ b/src/main/java/subway/service/MainService.java @@ -52,16 +52,16 @@ private String getServiceInput() { return scanner.nextLine(); } - private void runSelectedService(String selectedFunction) { - if (selectedFunction.equals(Service.STATION.getCode())) + private void runSelectedService(String selectedService) { + if (selectedService.equals(Service.STATION.getCode())) stationService.run(); - if (selectedFunction.equals(Service.LINE.getCode())) + if (selectedService.equals(Service.LINE.getCode())) lineService.run(); - if (selectedFunction.equals(Service.AREA.getCode())) + if (selectedService.equals(Service.AREA.getCode())) areaService.run(); - if (selectedFunction.equals(Service.MAP.getCode())) + if (selectedService.equals(Service.MAP.getCode())) mapService.run(); - if (selectedFunction.equals(Service.QUIT.getCode())) + if (selectedService.equals(Service.QUIT.getCode())) isContinue = false; } } diff --git a/src/main/java/subway/validator/ServiceValidator.java b/src/main/java/subway/validator/ServiceValidator.java index d32be5722..a97b0d9d0 100644 --- a/src/main/java/subway/validator/ServiceValidator.java +++ b/src/main/java/subway/validator/ServiceValidator.java @@ -8,6 +8,6 @@ public class ServiceValidator { public void validate(String input) throws InvalidInputException { if (!Service.isAvailable(input)) - throw new InvalidInputException(InvalidInputException.ExceptionCode.INVALID_FUNCTION_CODE); + throw new InvalidInputException(InvalidInputException.ExceptionCode.INVALID_SERVICE_CODE); } } From 7e84642d36fba9d4951264eaa895ad7b8fbf7d4f Mon Sep 17 00:00:00 2001 From: jiwoo-kimm Date: Fri, 11 Dec 2020 20:00:27 +0900 Subject: [PATCH 09/51] refactor: move validation method into service --- src/main/java/subway/constant/Service.java | 9 ++++++++- .../java/subway/validator/ServiceValidator.java | 13 ------------- 2 files changed, 8 insertions(+), 14 deletions(-) delete mode 100644 src/main/java/subway/validator/ServiceValidator.java diff --git a/src/main/java/subway/constant/Service.java b/src/main/java/subway/constant/Service.java index c7ae24f19..835acdd75 100644 --- a/src/main/java/subway/constant/Service.java +++ b/src/main/java/subway/constant/Service.java @@ -1,5 +1,7 @@ package subway.constant; +import subway.exception.InvalidInputException; + import java.util.ArrayList; import java.util.List; @@ -22,7 +24,12 @@ public String getCode() { return code; } - public static boolean isAvailable(String input) { + public static void validate(String input) throws InvalidInputException { + if (!isAvailable(input)) + throw new InvalidInputException(InvalidInputException.ExceptionCode.INVALID_SERVICE_CODE); + } + + private static boolean isAvailable(String input) { initServiceCodes(); return serviceCodes.contains(input); } diff --git a/src/main/java/subway/validator/ServiceValidator.java b/src/main/java/subway/validator/ServiceValidator.java deleted file mode 100644 index a97b0d9d0..000000000 --- a/src/main/java/subway/validator/ServiceValidator.java +++ /dev/null @@ -1,13 +0,0 @@ -package subway.validator; - -import subway.constant.Service; -import subway.exception.InvalidInputException; - - -public class ServiceValidator { - - public void validate(String input) throws InvalidInputException { - if (!Service.isAvailable(input)) - throw new InvalidInputException(InvalidInputException.ExceptionCode.INVALID_SERVICE_CODE); - } -} From 7bce4ef80db7daad7a5638550640bd9574c38a84 Mon Sep 17 00:00:00 2001 From: jiwoo-kimm Date: Fri, 11 Dec 2020 20:01:22 +0900 Subject: [PATCH 10/51] feat(station): implement select function and validation input --- README.md | 2 +- src/main/java/subway/constant/Function.java | 40 +++++++++++++++++++ .../exception/InvalidInputException.java | 5 ++- src/main/java/subway/service/MainService.java | 4 +- .../java/subway/service/StationService.java | 22 ++++++++++ 5 files changed, 67 insertions(+), 6 deletions(-) create mode 100644 src/main/java/subway/constant/Function.java diff --git a/README.md b/README.md index b6f265ec8..c74661ed5 100644 --- a/README.md +++ b/README.md @@ -479,7 +479,7 @@ This project is [MIT](https://github.com/woowacourse/java-subway-map-precourse/b - [x] ์‚ฌ์šฉ์ž ์ž…๋ ฅ์ด Q์ธ ๊ฒฝ์šฐ ํ”„๋กœ๊ทธ๋žจ์„ ์™„์ „ ์ข…๋ฃŒํ•œ๋‹ค. - [x] ์‚ฌ์ „๋“ฑ๋ก์ •๋ณด์— ๋”ฐ๋ผ ์ง€ํ•˜์ฒ  ๋…ธ์„ ๋„๋ฅผ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค. - [ ] ์—ญ ๊ด€๋ฆฌ - - [ ] ์„ ํƒ์ง€์— ์—†๋Š” ์ž…๋ ฅ์ผ ์‹œ ์—๋Ÿฌ๋ฉ”์„ธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. + - [x] ์„ ํƒ์ง€์— ์—†๋Š” ์ž…๋ ฅ์ผ ์‹œ ์—๋Ÿฌ๋ฉ”์„ธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. - [ ] ์‚ฌ์šฉ์ž ์ž…๋ ฅ์— ๋”ฐ๋ผ ํ•˜์œ„ ๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•œ๋‹ค. - [ ] ์—ญ ์กฐํšŒ ์‹œ ๋ชจ๋“  ์—ญ์˜ ์ด๋ฆ„์„ ์ค‘๋ณต ์—†์ด ์ถœ๋ ฅํ•œ๋‹ค. - [ ] ์—ญ ๋“ฑ๋ก ์‹œ ์ด๋ฆ„ ์ค‘๋ณต์„ ํ™•์ธํ•œ๋‹ค. diff --git a/src/main/java/subway/constant/Function.java b/src/main/java/subway/constant/Function.java new file mode 100644 index 000000000..cbb64da50 --- /dev/null +++ b/src/main/java/subway/constant/Function.java @@ -0,0 +1,40 @@ +package subway.constant; + +import subway.exception.InvalidInputException; + +import java.util.ArrayList; +import java.util.List; + +public enum Function { + + ADD("1"), + DELETE("2"), + SHOW("3"), + QUIT("B"); + + private static List functionCodes = new ArrayList<>(); + private String code; + + Function(String code) { + this.code = code; + } + + public String getCode() { + return code; + } + + public static void validate(String input) throws InvalidInputException { + if (!isAvailable(input)) + throw new InvalidInputException(InvalidInputException.ExceptionCode.INVALID_FUNCTION_CODE); + } + + private static boolean isAvailable(String input) { + initFunctionCodes(); + return functionCodes.contains(input); + } + + private static void initFunctionCodes() { + for (Function function : Function.values()) + functionCodes.add(function.code); + } +} diff --git a/src/main/java/subway/exception/InvalidInputException.java b/src/main/java/subway/exception/InvalidInputException.java index 05c1ff92a..5a90caa82 100644 --- a/src/main/java/subway/exception/InvalidInputException.java +++ b/src/main/java/subway/exception/InvalidInputException.java @@ -3,7 +3,8 @@ public class InvalidInputException extends RuntimeException { public enum ExceptionCode { - INVALID_SERVICE_CODE + INVALID_SERVICE_CODE, + INVALID_FUNCTION_CODE; } private final String HEADER = "\n[ERROR] "; @@ -15,7 +16,7 @@ public InvalidInputException(ExceptionCode exceptionCode) { } public String getMessage() { - if (exceptionCode.equals(ExceptionCode.INVALID_SERVICE_CODE)) + if (exceptionCode.equals(ExceptionCode.INVALID_SERVICE_CODE) || exceptionCode.equals(ExceptionCode.INVALID_FUNCTION_CODE)) return HEADER + "์„ ํƒํ•  ์ˆ˜ ์—†๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค."; return ""; } diff --git a/src/main/java/subway/service/MainService.java b/src/main/java/subway/service/MainService.java index 5f5d82b16..bb5d423e8 100644 --- a/src/main/java/subway/service/MainService.java +++ b/src/main/java/subway/service/MainService.java @@ -1,6 +1,5 @@ package subway.service; -import subway.validator.ServiceValidator; import subway.constant.Information; import subway.constant.Service; import subway.exception.InvalidInputException; @@ -10,7 +9,6 @@ public class MainService { private Scanner scanner; - private ServiceValidator serviceValidator = new ServiceValidator(); private boolean isContinue = true; private StationService stationService; @@ -43,7 +41,7 @@ private void runService() { private String selectService() { String line = getServiceInput(); - serviceValidator.validate(line); + Service.validate(line); return line; } diff --git a/src/main/java/subway/service/StationService.java b/src/main/java/subway/service/StationService.java index 5ecae3ba0..409d21a11 100644 --- a/src/main/java/subway/service/StationService.java +++ b/src/main/java/subway/service/StationService.java @@ -1,7 +1,9 @@ package subway.service; +import subway.constant.Function; import subway.constant.Information; import subway.constant.InitialData; +import subway.exception.InvalidInputException; import subway.repository.StationRepository; import java.util.Scanner; @@ -20,6 +22,26 @@ private void initStations() { } public void run() { + try { + String selectedFunction = selectFunction(); + runSelectedFunction(selectedFunction); + } catch (InvalidInputException e) { + System.out.println(e.getMessage()); + } + } + + private String selectFunction() { + String line = getFunctionInput(); + Function.validate(line); + return line; + } + + private String getFunctionInput() { System.out.println(Information.STATION_INFO); + return scanner.nextLine(); + } + + private void runSelectedFunction(String selectedFunction) { + System.out.println("์„ ํƒ๋œ ๊ธฐ๋Šฅ: "+selectedFunction); } } From 56ae11b1115abe97429266a7cc33290a6702e79c Mon Sep 17 00:00:00 2001 From: jiwoo-kimm Date: Fri, 11 Dec 2020 20:15:02 +0900 Subject: [PATCH 11/51] feat(station): implement run function on user input --- README.md | 2 +- .../java/subway/constant/Information.java | 12 +++++++++++- .../exception/InvalidInputException.java | 3 ++- .../java/subway/service/StationService.java | 19 ++++++++++++++++++- 4 files changed, 32 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index c74661ed5..f82b816f0 100644 --- a/README.md +++ b/README.md @@ -480,7 +480,7 @@ This project is [MIT](https://github.com/woowacourse/java-subway-map-precourse/b - [x] ์‚ฌ์ „๋“ฑ๋ก์ •๋ณด์— ๋”ฐ๋ผ ์ง€ํ•˜์ฒ  ๋…ธ์„ ๋„๋ฅผ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค. - [ ] ์—ญ ๊ด€๋ฆฌ - [x] ์„ ํƒ์ง€์— ์—†๋Š” ์ž…๋ ฅ์ผ ์‹œ ์—๋Ÿฌ๋ฉ”์„ธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. - - [ ] ์‚ฌ์šฉ์ž ์ž…๋ ฅ์— ๋”ฐ๋ผ ํ•˜์œ„ ๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•œ๋‹ค. + - [x] ์‚ฌ์šฉ์ž ์ž…๋ ฅ์— ๋”ฐ๋ผ ํ•˜์œ„ ๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•œ๋‹ค. - [ ] ์—ญ ์กฐํšŒ ์‹œ ๋ชจ๋“  ์—ญ์˜ ์ด๋ฆ„์„ ์ค‘๋ณต ์—†์ด ์ถœ๋ ฅํ•œ๋‹ค. - [ ] ์—ญ ๋“ฑ๋ก ์‹œ ์ด๋ฆ„ ์ค‘๋ณต์„ ํ™•์ธํ•œ๋‹ค. - [ ] ์—ญ ๋“ฑ๋ก ์‹œ ์ด๋ฆ„์ด 2๊ธ€์ž ์ด์ƒ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. diff --git a/src/main/java/subway/constant/Information.java b/src/main/java/subway/constant/Information.java index f6af28c3c..5de82f547 100644 --- a/src/main/java/subway/constant/Information.java +++ b/src/main/java/subway/constant/Information.java @@ -2,11 +2,21 @@ public class Information { - public static final String CHOOSE_FUNCTION = "\n## ์›ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์„ ํƒํ•˜์„ธ์š”."; + public static final String INFO_HEADER = "\n[INFO] "; + public static final String CHOOSE_FUNCTION = "\n## ์›ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์„ ํƒํ•˜์„ธ์š”."; public static final String MAIN_INFO = "\n## ๋ฉ”์ธ ํ™”๋ฉด\n1. ์—ญ ๊ด€๋ฆฌ\n2. ๋…ธ์„  ๊ด€๋ฆฌ\n3. ๊ตฌ๊ฐ„ ๊ด€๋ฆฌ\n4. ์ง€ํ•˜์ฒ  ๋…ธ์„ ๋„ ์ถœ๋ ฅ\nQ. ์ข…๋ฃŒ\n" + CHOOSE_FUNCTION; + public static final String STATION_INFO = "\n## ์—ญ ๊ด€๋ฆฌ ํ™”๋ฉด\n1. ์—ญ ๋“ฑ๋ก\n2. ์—ญ ์‚ญ์ œ\n3. ์—ญ ์กฐํšŒ\nB. ๋Œ์•„๊ฐ€๊ธฐ\n" + CHOOSE_FUNCTION; + public static final String ADD_STATION_INFO = "\n## ๋“ฑ๋กํ•  ์—ญ ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜์„ธ์š”."; + public static final String ADD_STATION_SUCCESS = INFO_HEADER + "์ง€ํ•˜์ฒ  ์—ญ์ด ๋“ฑ๋ก๋˜์—ˆ์Šต๋‹ˆ๋‹ค."; + public static final String DELETE_STATION_INFO = "\n## ์‚ญ์ œํ•  ์—ญ ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜์„ธ์š”."; + public static final String DELETE_STATION_SUCCESS = INFO_HEADER + "์ง€ํ•˜์ฒ  ์—ญ์ด ์‚ญ์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค."; + public static final String SHOW_STATION_INFO = "\n## ์—ญ ๋ชฉ๋ก"; + public static final String LINE_INFO = "\n## ๋…ธ์„  ๊ด€๋ฆฌ ํ™”๋ฉด\n1. ๋…ธ์„  ๋“ฑ๋ก\n2. ๋…ธ์„  ์‚ญ์ œ\n3. ๋…ธ์„  ์กฐํšŒ\nB. ๋Œ์•„๊ฐ€๊ธฐ\n" + CHOOSE_FUNCTION; + public static final String AREA_INFO = "\n## ๊ตฌ๊ฐ„ ๊ด€๋ฆฌ ํ™”๋ฉด\n1. ๊ตฌ๊ฐ„ ๋“ฑ๋ก\n2. ๊ตฌ๊ฐ„ ์‚ญ์ œ\nB. ๋Œ์•„๊ฐ€๊ธฐ\n" + CHOOSE_FUNCTION; + public static final String MAP_INFO = "\n## ์ง€ํ•˜์ฒ  ๋…ธ์„ ๋„"; } diff --git a/src/main/java/subway/exception/InvalidInputException.java b/src/main/java/subway/exception/InvalidInputException.java index 5a90caa82..d1282bb39 100644 --- a/src/main/java/subway/exception/InvalidInputException.java +++ b/src/main/java/subway/exception/InvalidInputException.java @@ -4,7 +4,8 @@ public class InvalidInputException extends RuntimeException { public enum ExceptionCode { INVALID_SERVICE_CODE, - INVALID_FUNCTION_CODE; + INVALID_FUNCTION_CODE, + DUPLICATE_STATION_CODE; } private final String HEADER = "\n[ERROR] "; diff --git a/src/main/java/subway/service/StationService.java b/src/main/java/subway/service/StationService.java index 409d21a11..3c0f575cf 100644 --- a/src/main/java/subway/service/StationService.java +++ b/src/main/java/subway/service/StationService.java @@ -42,6 +42,23 @@ private String getFunctionInput() { } private void runSelectedFunction(String selectedFunction) { - System.out.println("์„ ํƒ๋œ ๊ธฐ๋Šฅ: "+selectedFunction); + if (selectedFunction.equals(Function.ADD.getCode())) + addNewStation(); + if (selectedFunction.equals(Function.DELETE.getCode())) + deleteStation(); + if (selectedFunction.equals(Function.SHOW.getCode())) + showStations(); + } + + private void addNewStation() { + System.out.println(Information.ADD_STATION_INFO); + } + + private void deleteStation() { + System.out.println(Information.DELETE_STATION_INFO); + } + + private void showStations() { + System.out.println(Information.SHOW_STATION_INFO); } } From 0c7ac5c7df11f6834d090c4a8ea174d4ca5582f0 Mon Sep 17 00:00:00 2001 From: jiwoo-kimm Date: Fri, 11 Dec 2020 20:26:46 +0900 Subject: [PATCH 12/51] feat(station): check duplicated name on add --- README.md | 2 +- src/main/java/subway/domain/Station.java | 15 ++++++++++++++- .../exception/InvalidInputException.java | 2 ++ .../java/subway/service/StationService.java | 18 ++++++++++++++++++ 4 files changed, 35 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index f82b816f0..4b646e2a4 100644 --- a/README.md +++ b/README.md @@ -482,6 +482,6 @@ This project is [MIT](https://github.com/woowacourse/java-subway-map-precourse/b - [x] ์„ ํƒ์ง€์— ์—†๋Š” ์ž…๋ ฅ์ผ ์‹œ ์—๋Ÿฌ๋ฉ”์„ธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. - [x] ์‚ฌ์šฉ์ž ์ž…๋ ฅ์— ๋”ฐ๋ผ ํ•˜์œ„ ๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•œ๋‹ค. - [ ] ์—ญ ์กฐํšŒ ์‹œ ๋ชจ๋“  ์—ญ์˜ ์ด๋ฆ„์„ ์ค‘๋ณต ์—†์ด ์ถœ๋ ฅํ•œ๋‹ค. - - [ ] ์—ญ ๋“ฑ๋ก ์‹œ ์ด๋ฆ„ ์ค‘๋ณต์„ ํ™•์ธํ•œ๋‹ค. + - [x] ์—ญ ๋“ฑ๋ก ์‹œ ์ด๋ฆ„ ์ค‘๋ณต์„ ํ™•์ธํ•œ๋‹ค. - [ ] ์—ญ ๋“ฑ๋ก ์‹œ ์ด๋ฆ„์ด 2๊ธ€์ž ์ด์ƒ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. - [ ] ์—ญ ์‚ญ์ œ ์‹œ ๋…ธ์„ ์— ๋“ฑ๋ก๋œ ์—ญ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. \ No newline at end of file diff --git a/src/main/java/subway/domain/Station.java b/src/main/java/subway/domain/Station.java index 4c75a8481..a572ebe5c 100644 --- a/src/main/java/subway/domain/Station.java +++ b/src/main/java/subway/domain/Station.java @@ -1,5 +1,7 @@ package subway.domain; +import java.util.Objects; + public class Station { private String name; @@ -12,5 +14,16 @@ public String getName() { return name; } - // ์ถ”๊ฐ€ ๊ธฐ๋Šฅ ๊ตฌํ˜„ + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof Station)) return false; + Station station = (Station) o; + return Objects.equals(name, station.name); + } + + @Override + public int hashCode() { + return Objects.hash(name); + } } diff --git a/src/main/java/subway/exception/InvalidInputException.java b/src/main/java/subway/exception/InvalidInputException.java index d1282bb39..0dd061387 100644 --- a/src/main/java/subway/exception/InvalidInputException.java +++ b/src/main/java/subway/exception/InvalidInputException.java @@ -19,6 +19,8 @@ public InvalidInputException(ExceptionCode exceptionCode) { public String getMessage() { if (exceptionCode.equals(ExceptionCode.INVALID_SERVICE_CODE) || exceptionCode.equals(ExceptionCode.INVALID_FUNCTION_CODE)) return HEADER + "์„ ํƒํ•  ์ˆ˜ ์—†๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค."; + if (exceptionCode.equals(ExceptionCode.DUPLICATE_STATION_CODE)) + return HEADER + "์ด๋ฏธ ๋“ฑ๋ก๋œ ์—ญ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค."; return ""; } } diff --git a/src/main/java/subway/service/StationService.java b/src/main/java/subway/service/StationService.java index 3c0f575cf..e9ba87542 100644 --- a/src/main/java/subway/service/StationService.java +++ b/src/main/java/subway/service/StationService.java @@ -3,6 +3,7 @@ import subway.constant.Function; import subway.constant.Information; import subway.constant.InitialData; +import subway.domain.Station; import subway.exception.InvalidInputException; import subway.repository.StationRepository; @@ -51,7 +52,24 @@ private void runSelectedFunction(String selectedFunction) { } private void addNewStation() { + Station newStation = getNewStationInput(); + validateNewStation(newStation); + StationRepository.addStation(newStation); + System.out.println(Information.ADD_STATION_SUCCESS); + } + + private Station getNewStationInput() { System.out.println(Information.ADD_STATION_INFO); + return new Station(scanner.nextLine()); + } + + private void validateNewStation(Station newStation) { + validateDuplicateStation(newStation); + } + + private void validateDuplicateStation(Station newStation) { + if (StationRepository.stations().contains(newStation)) + throw new InvalidInputException(InvalidInputException.ExceptionCode.DUPLICATE_STATION_CODE); } private void deleteStation() { From 47b853ab2481cb7bebf8ef9ee1af0b68ad8f1a17 Mon Sep 17 00:00:00 2001 From: jiwoo-kimm Date: Fri, 11 Dec 2020 20:32:04 +0900 Subject: [PATCH 13/51] feat(station): validate station name length on add --- README.md | 75 ++++++++++++------- src/main/java/subway/constant/Constant.java | 6 ++ .../exception/InvalidInputException.java | 7 +- .../java/subway/service/StationService.java | 9 ++- 4 files changed, 66 insertions(+), 31 deletions(-) create mode 100644 src/main/java/subway/constant/Constant.java diff --git a/README.md b/README.md index 4b646e2a4..7e8ccff9b 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,18 @@ # ์ง€ํ•˜์ฒ  ๋…ธ์„ ๋„ ๋ฏธ์…˜ + - ์ง€ํ•˜์ฒ  ์—ญ๊ณผ ๋…ธ์„ ์„ ๊ด€๋ฆฌํ•˜๋Š” ์ง€ํ•˜์ฒ  ๋…ธ์„ ๋„ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•œ๋‹ค.
## ๐Ÿš€ ๊ธฐ๋Šฅ ์š”๊ตฌ์‚ฌํ•ญ -### ์ดˆ๊ธฐ ์„ค์ • +### ์ดˆ๊ธฐ ์„ค์ • + - ํ”„๋กœ๊ทธ๋žจ ์‹œ์ž‘ ์‹œ ์—ญ, ๋…ธ์„  ๋“ฑ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ๋ฏธ๋ฆฌ ์…‹ํŒ…ํ•  ์ˆ˜ ์žˆ๋‹ค. > ์•„๋ž˜์˜ ์‚ฌ์ „ ๋“ฑ๋ก ์ •๋ณด๋กœ ๋ฐ˜๋“œ์‹œ ์ดˆ๊ธฐ ์„ค์ •์„ ํ•˜๊ธฐ > + ``` 1. ์ง€ํ•˜์ฒ ์—ญ์œผ๋กœ ๊ต๋Œ€์—ญ, ๊ฐ•๋‚จ์—ญ, ์—ญ์‚ผ์—ญ, ๋‚จ๋ถ€ํ„ฐ๋ฏธ๋„์—ญ, ์–‘์žฌ์—ญ, ์–‘์žฌ์‹œ๋ฏผ์˜์ˆฒ์—ญ, ๋งค๋ด‰์—ญ์ด ๋“ฑ๋ก๋˜์–ด ์žˆ๋‹ค. 2. ์ง€ํ•˜์ฒ  ๋…ธ์„ ์œผ๋กœ 2ํ˜ธ์„ , 3ํ˜ธ์„ , ์‹ ๋ถ„๋‹น์„ ์ด ๋“ฑ๋ก๋˜์–ด ์žˆ๋‹ค. @@ -20,23 +23,26 @@ ``` - + ### ์ง€ํ•˜์ฒ  ์—ญ ๊ด€๋ จ ๊ธฐ๋Šฅ + - ์ง€ํ•˜์ฒ  ์—ญ์„ ๋“ฑ๋กํ•˜๊ณ  ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋‹ค. (๋‹จ, ๋…ธ์„ ์— ๋“ฑ๋ก๋œ ์—ญ์€ ์‚ญ์ œํ•  ์ˆ˜ ์—†๋‹ค) - ์ค‘๋ณต๋œ ์ง€ํ•˜์ฒ  ์—ญ ์ด๋ฆ„์ด ๋“ฑ๋ก๋  ์ˆ˜ ์—†๋‹ค. - ์ง€ํ•˜์ฒ  ์—ญ ์ด๋ฆ„์€ 2๊ธ€์ž ์ด์ƒ์ด์–ด์•ผ ํ•œ๋‹ค. - ์ง€ํ•˜์ฒ  ์—ญ์˜ ๋ชฉ๋ก์„ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค. ### ์ง€ํ•˜์ฒ  ๋…ธ์„  ๊ด€๋ จ ๊ธฐ๋Šฅ + - ์ง€ํ•˜์ฒ  ๋…ธ์„ ์„ ๋“ฑ๋กํ•˜๊ณ  ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋‹ค. - ์ค‘๋ณต๋œ ์ง€ํ•˜์ฒ  ๋…ธ์„  ์ด๋ฆ„์ด ๋“ฑ๋ก๋  ์ˆ˜ ์—†๋‹ค. - ์ง€ํ•˜์ฒ  ๋…ธ์„  ์ด๋ฆ„์€ 2๊ธ€์ž ์ด์ƒ์ด์–ด์•ผ ํ•œ๋‹ค. -- ๋…ธ์„  ๋“ฑ๋ก ์‹œ ์ƒํ–‰ ์ข…์ ์—ญ๊ณผ ํ•˜ํ–‰ ์ข…์ ์—ญ์„ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค. +- ๋…ธ์„  ๋“ฑ๋ก ์‹œ ์ƒํ–‰ ์ข…์ ์—ญ๊ณผ ํ•˜ํ–‰ ์ข…์ ์—ญ์„ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค. - ์ง€ํ•˜์ฒ  ๋…ธ์„ ์˜ ๋ชฉ๋ก์„ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค. ### ์ง€ํ•˜์ฒ  ๊ตฌ๊ฐ„ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ + - ์ง€ํ•˜์ฒ  ๋…ธ์„ ์— ๊ตฌ๊ฐ„์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ธฐ๋Šฅ์€ ๋…ธ์„ ์— ์—ญ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋ผ๊ณ ๋„ ํ•  ์ˆ˜ ์žˆ๋‹ค. - - ์—ญ๊ณผ ์—ญ์‚ฌ์ด๋ฅผ ๊ตฌ๊ฐ„์ด๋ผ ํ•˜๊ณ  ์ด ๊ตฌ๊ฐ„๋“ค์˜ ๋ชจ์Œ์ด ๋…ธ์„ ์ด๋‹ค. + - ์—ญ๊ณผ ์—ญ์‚ฌ์ด๋ฅผ ๊ตฌ๊ฐ„์ด๋ผ ํ•˜๊ณ  ์ด ๊ตฌ๊ฐ„๋“ค์˜ ๋ชจ์Œ์ด ๋…ธ์„ ์ด๋‹ค. - ํ•˜๋‚˜์˜ ์—ญ์€ ์—ฌ๋Ÿฌ๊ฐœ์˜ ๋…ธ์„ ์— ์ถ”๊ฐ€๋  ์ˆ˜ ์žˆ๋‹ค. - ์—ญ๊ณผ ์—ญ ์‚ฌ์ด์— ์ƒˆ๋กœ์šด ์—ญ์ด ์ถ”๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค. - ๋…ธ์„ ์—์„œ ๊ฐˆ๋ž˜๊ธธ์€ ์ƒ๊ธธ ์ˆ˜ ์—†๋‹ค. @@ -44,6 +50,7 @@ ### ์ง€ํ•˜์ฒ  ๊ตฌ๊ฐ„ ์‚ญ์ œ ๊ธฐ๋Šฅ + - ๋…ธ์„ ์— ๋“ฑ๋ก๋œ ์—ญ์„ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋‹ค. - ์ข…์ ์„ ์ œ๊ฑฐํ•  ๊ฒฝ์šฐ ๋‹ค์Œ ์—ญ์ด ์ข…์ ์ด ๋œ๋‹ค. - ๋…ธ์„ ์— ํฌํ•จ๋œ ์—ญ์ด ๋‘๊ฐœ ์ดํ•˜์ผ ๋•Œ๋Š” ์—ญ์„ ์ œ๊ฑฐํ•  ์ˆ˜ ์—†๋‹ค. @@ -51,17 +58,21 @@ ### ์ง€ํ•˜์ฒ  ๋…ธ์„ ์— ๋“ฑ๋ก๋œ ์—ญ ์กฐํšŒ ๊ธฐ๋Šฅ + - ๋…ธ์„ ์˜ ์ƒํ–‰ ์ข…์ ๋ถ€ํ„ฐ ํ•˜ํ–‰ ์ข…์ ๊นŒ์ง€ ์—ฐ๊ฒฐ๋œ ์ˆœ์„œ๋Œ€๋กœ ์—ญ ๋ชฉ๋ก์„ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค.
## โœ๐Ÿป ์ž…์ถœ๋ ฅ ์š”๊ตฌ์‚ฌํ•ญ + - `ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์‹คํ–‰ ๊ฒฐ๊ณผ ์˜ˆ์‹œ`๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ์ž…์ถœ๋ ฅ์„ ๊ตฌํ˜„ํ•œ๋‹ค. - ๊ธฐ๋Œ€ํ•˜๋Š” ์ถœ๋ ฅ ๊ฒฐ๊ณผ๋Š” `[INFO]`๋ฅผ ๋ถ™์—ฌ์„œ ์ถœ๋ ฅํ•œ๋‹ค. ์ถœ๋ ฅ๊ฐ’์˜ ํ˜•์‹์€ ์˜ˆ์‹œ์™€ ๋™์ผํ•˜๊ฒŒ ํ•œ๋‹ค. - ์—๋Ÿฌ ๋ฐœ์ƒ ์‹œ `[ERROR]`๋ฅผ ๋ถ™์—ฌ์„œ ์ถœ๋ ฅํ•œ๋‹ค. (์—๋Ÿฌ์˜ ๋ฌธ๊ตฌ๋Š” ์ž์œ ๋กญ๊ฒŒ ์ž‘์„ฑํ•œ๋‹ค.) -### ๐Ÿ’ป ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์‹คํ–‰ ๊ฒฐ๊ณผ +### ๐Ÿ’ป ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์‹คํ–‰ ๊ฒฐ๊ณผ + #### ์—ญ ๊ด€๋ฆฌ + ``` ## ๋ฉ”์ธ ํ™”๋ฉด 1. ์—ญ ๊ด€๋ฆฌ @@ -233,6 +244,7 @@ B. ๋Œ์•„๊ฐ€๊ธฐ ``` ### ๊ตฌ๊ฐ„ ๊ด€๋ฆฌ + - ์ˆœ์„œ๋Š” 1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค. ``` @@ -379,25 +391,28 @@ B. ๋Œ์•„๊ฐ€๊ธฐ
## ๐ŸŽฑ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์š”๊ตฌ์‚ฌํ•ญ + - ์ž๋ฐ” ์ฝ”๋“œ ์ปจ๋ฒค์…˜์„ ์ง€ํ‚ค๋ฉด์„œ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•œ๋‹ค. - - ๊ธฐ๋ณธ์ ์œผ๋กœ [Google Java Style Guide](https://google.github.io/styleguide/javaguide.html)์„ ์›์น™์œผ๋กœ ํ•œ๋‹ค. - - ๋‹จ, ๋“ค์—ฌ์“ฐ๊ธฐ๋Š” '2 spaces'๊ฐ€ ์•„๋‹Œ '4 spaces'๋กœ ํ•œ๋‹ค. + - ๊ธฐ๋ณธ์ ์œผ๋กœ [Google Java Style Guide](https://google.github.io/styleguide/javaguide.html)์„ ์›์น™์œผ๋กœ ํ•œ๋‹ค. + - ๋‹จ, ๋“ค์—ฌ์“ฐ๊ธฐ๋Š” '2 spaces'๊ฐ€ ์•„๋‹Œ '4 spaces'๋กœ ํ•œ๋‹ค. - indent(์ธ๋ดํŠธ, ๋“ค์—ฌ์“ฐ๊ธฐ) depth๋ฅผ 3์ด ๋„˜์ง€ ์•Š๋„๋ก ๊ตฌํ˜„ํ•œ๋‹ค. 2๊นŒ์ง€๋งŒ ํ—ˆ์šฉํ•œ๋‹ค. - - ์˜ˆ๋ฅผ ๋“ค์–ด while๋ฌธ ์•ˆ์— if๋ฌธ์ด ์žˆ์œผ๋ฉด ๋“ค์—ฌ์“ฐ๊ธฐ๋Š” 2์ด๋‹ค. - - ํžŒํŠธ: indent(์ธ๋ดํŠธ, ๋“ค์—ฌ์“ฐ๊ธฐ) depth๋ฅผ ์ค„์ด๋Š” ์ข‹์€ ๋ฐฉ๋ฒ•์€ ํ•จ์ˆ˜(๋˜๋Š” ๋ฉ”์†Œ๋“œ)๋ฅผ ๋ถ„๋ฆฌํ•˜๋ฉด ๋œ๋‹ค. + - ์˜ˆ๋ฅผ ๋“ค์–ด while๋ฌธ ์•ˆ์— if๋ฌธ์ด ์žˆ์œผ๋ฉด ๋“ค์—ฌ์“ฐ๊ธฐ๋Š” 2์ด๋‹ค. + - ํžŒํŠธ: indent(์ธ๋ดํŠธ, ๋“ค์—ฌ์“ฐ๊ธฐ) depth๋ฅผ ์ค„์ด๋Š” ์ข‹์€ ๋ฐฉ๋ฒ•์€ ํ•จ์ˆ˜(๋˜๋Š” ๋ฉ”์†Œ๋“œ)๋ฅผ ๋ถ„๋ฆฌํ•˜๋ฉด ๋œ๋‹ค. - 3ํ•ญ ์—ฐ์‚ฐ์ž๋ฅผ ์“ฐ์ง€ ์•Š๋Š”๋‹ค. - ํ•จ์ˆ˜(๋˜๋Š” ๋ฉ”์†Œ๋“œ)์˜ ๊ธธ์ด๊ฐ€ 15๋ผ์ธ์„ ๋„˜์–ด๊ฐ€์ง€ ์•Š๋„๋ก ๊ตฌํ˜„ํ•œ๋‹ค. - - ํ•จ์ˆ˜(๋˜๋Š” ๋ฉ”์†Œ๋“œ)๊ฐ€ ํ•œ ๊ฐ€์ง€ ์ผ๋งŒ ์ž˜ ํ•˜๋„๋ก ๊ตฌํ˜„ํ•œ๋‹ค. + - ํ•จ์ˆ˜(๋˜๋Š” ๋ฉ”์†Œ๋“œ)๊ฐ€ ํ•œ ๊ฐ€์ง€ ์ผ๋งŒ ์ž˜ ํ•˜๋„๋ก ๊ตฌํ˜„ํ•œ๋‹ค. - else ์˜ˆ์•ฝ์–ด๋ฅผ ์“ฐ์ง€ ์•Š๋Š”๋‹ค. - - ํžŒํŠธ: if ์กฐ๊ฑด์ ˆ์—์„œ ๊ฐ’์„ returnํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•˜๋ฉด else๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค. - - else๋ฅผ ์“ฐ์ง€ ๋ง๋ผ๊ณ  ํ•˜๋‹ˆ switch/case๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋Š”๋ฐ switch/case๋„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. + - ํžŒํŠธ: if ์กฐ๊ฑด์ ˆ์—์„œ ๊ฐ’์„ returnํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•˜๋ฉด else๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค. + - else๋ฅผ ์“ฐ์ง€ ๋ง๋ผ๊ณ  ํ•˜๋‹ˆ switch/case๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋Š”๋ฐ switch/case๋„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. - ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์š”๊ตฌ์‚ฌํ•ญ์—์„œ ๋ณ„๋„๋กœ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€ ์•ˆ๋‚ด๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ํŒŒ์ผ ์ˆ˜์ •๊ณผ ํŒจํ‚ค์ง€ ์ด๋™์„ ์ž์œ ๋กญ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค. - ์˜ˆ์™ธ ์ƒํ™ฉ ์‹œ ์—๋Ÿฌ ๋ฌธ๊ตฌ๋ฅผ ์ถœ๋ ฅํ•ด์•ผ ํ•œ๋‹ค. ๋‹จ, ์—๋Ÿฌ ๋ฌธ๊ตฌ๋Š” `[ERROR]` ๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ•œ๋‹ค. ### ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์š”๊ตฌ์‚ฌํ•ญ - Application + - Application ํด๋ž˜์Šค๋ฅผ ํ™œ์šฉํ•ด ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค. - Application์˜ ํŒจํ‚ค์ง€ ๊ตฌ์กฐ๋Š” ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋Š”๋‹ค. -- ์ฃผ์„์„ ์ฐธ๊ณ ํ•˜์—ฌ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ฃผ์„๋Œ€๋กœ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์•„๋„ ๋˜๊ณ  ์‚ญ์ œํ•ด๋„ ๋ฌด๊ด€ํ•˜๋‹ค. +- ์ฃผ์„์„ ์ฐธ๊ณ ํ•˜์—ฌ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ฃผ์„๋Œ€๋กœ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์•„๋„ ๋˜๊ณ  ์‚ญ์ œํ•ด๋„ ๋ฌด๊ด€ํ•˜๋‹ค. + ```java public class Application { public static void main(String[] args) { @@ -407,11 +422,12 @@ public class Application { ``` ### ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์š”๊ตฌ์‚ฌํ•ญ - Station, Line + - Station, Line ํด๋ž˜์Šค๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ง€ํ•˜์ฒ ์—ญ๊ณผ ๋…ธ์„ ์„ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค. - ์ œ๊ณตํ•˜๋Š” ๊ฐ ํด๋ž˜์Šค์˜ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์—†๋‹ค. - ํ•„๋“œ(์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜)์ธ name์˜ ์ ‘๊ทผ ์ œ์–ด์ž private์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค. - ๊ฐ€๋Šฅํ•˜๋ฉด setter ๋ฉ”์†Œ๋“œ(ex. setXXX)๋ฅผ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๊ณ  ๊ตฌํ˜„ํ•œ๋‹ค. - + ```java public class Station { private String name; @@ -430,12 +446,13 @@ public class Station { ``` ### ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์š”๊ตฌ์‚ฌํ•ญ - StationRepository, LineRepository + - Station๊ณผ Line์˜ ์ƒํƒœ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” StationRepository, LineRepository๋ฅผ ์ œ๊ณตํ•œ๋‹ค. - ํ•„์š” ์‹œ StationRepository, LineRepository ์ด ์™ธ ์ถ”๊ฐ€๋กœ Repository๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. - ์ถ”๊ฐ€๋กœ ์ƒ์„ฑ๋˜๋Š” ๊ฐ์ฒด์— ๋Œ€ํ•ด์„œ XXXRepository ๋„ค์ด๋ฐ์œผ๋กœ ์ €์žฅ ํด๋ž˜์Šค๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค. - ๊ฐ์ฒด๋“ค์˜ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ XXXRepository ํด๋ž˜์Šค๋ฅผ ํ™œ์šฉํ•ด ์ €์žฅ ๋กœ์ง์„ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค. - ํ•„์š”์— ๋”ฐ๋ผ ์ž์œ ๋กญ๊ฒŒ ์ˆ˜์ •์ด ๊ฐ€๋Šฅํ•˜๋‹ค. - + ```java public class StationRepository { private static final List stations = new ArrayList<>(); @@ -457,13 +474,15 @@ public class StationRepository {
## ๐Ÿ“ˆ ์ง„ํ–‰ ์š”๊ตฌ์‚ฌํ•ญ + - ๋ฏธ์…˜์€ [java-subway-map-precourse ์ €์žฅ์†Œ](https://github.com/woowacourse/java-subway-map-precourse) ๋ฅผ fork/cloneํ•ด ์‹œ์ž‘ํ•œ๋‹ค. - ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์ „์— java-subway-map-precourse/docs/README.md ํŒŒ์ผ์— ๊ตฌํ˜„ํ•  ๊ธฐ๋Šฅ ๋ชฉ๋ก์„ ์ •๋ฆฌํ•ด ์ถ”๊ฐ€ํ•œ๋‹ค. - git์˜ commit ๋‹จ์œ„๋Š” ์•ž ๋‹จ๊ณ„์—์„œ README.md ํŒŒ์ผ์— ์ •๋ฆฌํ•œ ๊ธฐ๋Šฅ ๋ชฉ๋ก ๋‹จ์œ„๋กœ ์ถ”๊ฐ€ํ•œ๋‹ค. - - [AngularJS Commit Message Conventions](https://gist.github.com/stephenparish/9941e89d80e2bc58a153) ์ฐธ๊ณ ํ•ด commit log๋ฅผ ๋‚จ๊ธด๋‹ค. + - [AngularJS Commit Message Conventions](https://gist.github.com/stephenparish/9941e89d80e2bc58a153) ์ฐธ๊ณ ํ•ด commit log๋ฅผ + ๋‚จ๊ธด๋‹ค. - [ํ”„๋ฆฌ์ฝ”์Šค ๊ณผ์ œ ์ œ์ถœ ๋ฌธ์„œ](https://github.com/woowacourse/woowacourse-docs/tree/master/precourse) ์ ˆ์ฐจ๋ฅผ ๋”ฐ๋ผ ๋ฏธ์…˜์„ ์ œ์ถœํ•œ๋‹ค. - - [ํ”„๋ฆฌ์ฝ”์Šค ๊ณผ์ œ FAQ](https://github.com/woowacourse/woowacourse-docs/tree/master/precourse/faq) ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. -
+ - [ํ”„๋ฆฌ์ฝ”์Šค ๊ณผ์ œ FAQ](https://github.com/woowacourse/woowacourse-docs/tree/master/precourse/faq) ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. +
## ๐Ÿ“ License @@ -474,14 +493,14 @@ This project is [MIT](https://github.com/woowacourse/java-subway-map-precourse/b ## โ˜‘ ๊ตฌํ˜„ํ•  ๊ธฐ๋Šฅ ๋ชฉ๋ก - [x] ๋ฉ”์ธ - - [x] ์„ ํƒ์ง€์— ์—†๋Š” ์ž…๋ ฅ์ผ ์‹œ ์—๋Ÿฌ๋ฉ”์„ธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. - - [x] ์‚ฌ์šฉ์ž ์ž…๋ ฅ์— ๋”ฐ๋ผ ํ•˜์œ„ ๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•œ๋‹ค. - - [x] ์‚ฌ์šฉ์ž ์ž…๋ ฅ์ด Q์ธ ๊ฒฝ์šฐ ํ”„๋กœ๊ทธ๋žจ์„ ์™„์ „ ์ข…๋ฃŒํ•œ๋‹ค. - - [x] ์‚ฌ์ „๋“ฑ๋ก์ •๋ณด์— ๋”ฐ๋ผ ์ง€ํ•˜์ฒ  ๋…ธ์„ ๋„๋ฅผ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค. + - [x] ์„ ํƒ์ง€์— ์—†๋Š” ์ž…๋ ฅ์ผ ์‹œ ์—๋Ÿฌ๋ฉ”์„ธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. + - [x] ์‚ฌ์šฉ์ž ์ž…๋ ฅ์— ๋”ฐ๋ผ ํ•˜์œ„ ๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•œ๋‹ค. + - [x] ์‚ฌ์šฉ์ž ์ž…๋ ฅ์ด Q์ธ ๊ฒฝ์šฐ ํ”„๋กœ๊ทธ๋žจ์„ ์™„์ „ ์ข…๋ฃŒํ•œ๋‹ค. + - [x] ์‚ฌ์ „๋“ฑ๋ก์ •๋ณด์— ๋”ฐ๋ผ ์ง€ํ•˜์ฒ  ๋…ธ์„ ๋„๋ฅผ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค. - [ ] ์—ญ ๊ด€๋ฆฌ - - [x] ์„ ํƒ์ง€์— ์—†๋Š” ์ž…๋ ฅ์ผ ์‹œ ์—๋Ÿฌ๋ฉ”์„ธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. - - [x] ์‚ฌ์šฉ์ž ์ž…๋ ฅ์— ๋”ฐ๋ผ ํ•˜์œ„ ๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•œ๋‹ค. - - [ ] ์—ญ ์กฐํšŒ ์‹œ ๋ชจ๋“  ์—ญ์˜ ์ด๋ฆ„์„ ์ค‘๋ณต ์—†์ด ์ถœ๋ ฅํ•œ๋‹ค. - - [x] ์—ญ ๋“ฑ๋ก ์‹œ ์ด๋ฆ„ ์ค‘๋ณต์„ ํ™•์ธํ•œ๋‹ค. - - [ ] ์—ญ ๋“ฑ๋ก ์‹œ ์ด๋ฆ„์ด 2๊ธ€์ž ์ด์ƒ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. - - [ ] ์—ญ ์‚ญ์ œ ์‹œ ๋…ธ์„ ์— ๋“ฑ๋ก๋œ ์—ญ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. \ No newline at end of file + - [x] ์„ ํƒ์ง€์— ์—†๋Š” ์ž…๋ ฅ์ผ ์‹œ ์—๋Ÿฌ๋ฉ”์„ธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. + - [x] ์‚ฌ์šฉ์ž ์ž…๋ ฅ์— ๋”ฐ๋ผ ํ•˜์œ„ ๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•œ๋‹ค. + - [ ] ์—ญ ์กฐํšŒ ์‹œ ๋ชจ๋“  ์—ญ์˜ ์ด๋ฆ„์„ ์ค‘๋ณต ์—†์ด ์ถœ๋ ฅํ•œ๋‹ค. + - [x] ์—ญ ๋“ฑ๋ก ์‹œ ์ด๋ฆ„ ์ค‘๋ณต์„ ํ™•์ธํ•œ๋‹ค. + - [x] ์—ญ ๋“ฑ๋ก ์‹œ ์ด๋ฆ„์ด 2๊ธ€์ž ์ด์ƒ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. + - [ ] ์—ญ ์‚ญ์ œ ์‹œ ๋…ธ์„ ์— ๋“ฑ๋ก๋œ ์—ญ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. \ No newline at end of file diff --git a/src/main/java/subway/constant/Constant.java b/src/main/java/subway/constant/Constant.java new file mode 100644 index 000000000..4f47915b2 --- /dev/null +++ b/src/main/java/subway/constant/Constant.java @@ -0,0 +1,6 @@ +package subway.constant; + +public class Constant { + + public static final int MIN_NAME_LENGTH = 2; +} diff --git a/src/main/java/subway/exception/InvalidInputException.java b/src/main/java/subway/exception/InvalidInputException.java index 0dd061387..1620bb821 100644 --- a/src/main/java/subway/exception/InvalidInputException.java +++ b/src/main/java/subway/exception/InvalidInputException.java @@ -5,7 +5,8 @@ public class InvalidInputException extends RuntimeException { public enum ExceptionCode { INVALID_SERVICE_CODE, INVALID_FUNCTION_CODE, - DUPLICATE_STATION_CODE; + DUPLICATE_STATION, + INVALID_NAME_LENGTH; } private final String HEADER = "\n[ERROR] "; @@ -19,8 +20,10 @@ public InvalidInputException(ExceptionCode exceptionCode) { public String getMessage() { if (exceptionCode.equals(ExceptionCode.INVALID_SERVICE_CODE) || exceptionCode.equals(ExceptionCode.INVALID_FUNCTION_CODE)) return HEADER + "์„ ํƒํ•  ์ˆ˜ ์—†๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค."; - if (exceptionCode.equals(ExceptionCode.DUPLICATE_STATION_CODE)) + if (exceptionCode.equals(ExceptionCode.DUPLICATE_STATION)) return HEADER + "์ด๋ฏธ ๋“ฑ๋ก๋œ ์—ญ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค."; + if (exceptionCode.equals(ExceptionCode.INVALID_NAME_LENGTH)) + return HEADER + "์ด๋ฆ„์€ ๋‘ ๊ธ€์ž ์ด์ƒ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค."; return ""; } } diff --git a/src/main/java/subway/service/StationService.java b/src/main/java/subway/service/StationService.java index e9ba87542..c0019675c 100644 --- a/src/main/java/subway/service/StationService.java +++ b/src/main/java/subway/service/StationService.java @@ -1,5 +1,6 @@ package subway.service; +import subway.constant.Constant; import subway.constant.Function; import subway.constant.Information; import subway.constant.InitialData; @@ -64,12 +65,18 @@ private Station getNewStationInput() { } private void validateNewStation(Station newStation) { + validateNameLength(newStation); validateDuplicateStation(newStation); } + private void validateNameLength(Station newStation) { + if (newStation.getName().length() < Constant.MIN_NAME_LENGTH) + throw new InvalidInputException(InvalidInputException.ExceptionCode.INVALID_NAME_LENGTH); + } + private void validateDuplicateStation(Station newStation) { if (StationRepository.stations().contains(newStation)) - throw new InvalidInputException(InvalidInputException.ExceptionCode.DUPLICATE_STATION_CODE); + throw new InvalidInputException(InvalidInputException.ExceptionCode.DUPLICATE_STATION); } private void deleteStation() { From 377eeb7581d044dd52552dfe95c1341c39f027bf Mon Sep 17 00:00:00 2001 From: jiwoo-kimm Date: Fri, 11 Dec 2020 20:35:51 +0900 Subject: [PATCH 14/51] feat(station): show all stations' name --- README.md | 2 +- src/main/java/subway/service/StationService.java | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 7e8ccff9b..fb13a3ffd 100644 --- a/README.md +++ b/README.md @@ -500,7 +500,7 @@ This project is [MIT](https://github.com/woowacourse/java-subway-map-precourse/b - [ ] ์—ญ ๊ด€๋ฆฌ - [x] ์„ ํƒ์ง€์— ์—†๋Š” ์ž…๋ ฅ์ผ ์‹œ ์—๋Ÿฌ๋ฉ”์„ธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. - [x] ์‚ฌ์šฉ์ž ์ž…๋ ฅ์— ๋”ฐ๋ผ ํ•˜์œ„ ๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•œ๋‹ค. - - [ ] ์—ญ ์กฐํšŒ ์‹œ ๋ชจ๋“  ์—ญ์˜ ์ด๋ฆ„์„ ์ค‘๋ณต ์—†์ด ์ถœ๋ ฅํ•œ๋‹ค. + - [x] ์—ญ ์กฐํšŒ ์‹œ ๋ชจ๋“  ์—ญ์˜ ์ด๋ฆ„์„ ์ค‘๋ณต ์—†์ด ์ถœ๋ ฅํ•œ๋‹ค. - [x] ์—ญ ๋“ฑ๋ก ์‹œ ์ด๋ฆ„ ์ค‘๋ณต์„ ํ™•์ธํ•œ๋‹ค. - [x] ์—ญ ๋“ฑ๋ก ์‹œ ์ด๋ฆ„์ด 2๊ธ€์ž ์ด์ƒ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. - [ ] ์—ญ ์‚ญ์ œ ์‹œ ๋…ธ์„ ์— ๋“ฑ๋ก๋œ ์—ญ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. \ No newline at end of file diff --git a/src/main/java/subway/service/StationService.java b/src/main/java/subway/service/StationService.java index c0019675c..853f55643 100644 --- a/src/main/java/subway/service/StationService.java +++ b/src/main/java/subway/service/StationService.java @@ -10,6 +10,8 @@ import java.util.Scanner; +import static subway.constant.Information.INFO_HEADER; + public class StationService { private Scanner scanner; @@ -84,6 +86,9 @@ private void deleteStation() { } private void showStations() { - System.out.println(Information.SHOW_STATION_INFO); + System.out.print(Information.SHOW_STATION_INFO); + for (Station station : StationRepository.stations()) + System.out.print(INFO_HEADER + station.getName()); + System.out.println(); } } From 8266594867b006a7feb803842419a53e677fab35 Mon Sep 17 00:00:00 2001 From: jiwoo-kimm Date: Fri, 11 Dec 2020 21:03:54 +0900 Subject: [PATCH 15/51] docs(readme): update the list to implement line --- README.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index fb13a3ffd..7dc2ce4ab 100644 --- a/README.md +++ b/README.md @@ -503,4 +503,13 @@ This project is [MIT](https://github.com/woowacourse/java-subway-map-precourse/b - [x] ์—ญ ์กฐํšŒ ์‹œ ๋ชจ๋“  ์—ญ์˜ ์ด๋ฆ„์„ ์ค‘๋ณต ์—†์ด ์ถœ๋ ฅํ•œ๋‹ค. - [x] ์—ญ ๋“ฑ๋ก ์‹œ ์ด๋ฆ„ ์ค‘๋ณต์„ ํ™•์ธํ•œ๋‹ค. - [x] ์—ญ ๋“ฑ๋ก ์‹œ ์ด๋ฆ„์ด 2๊ธ€์ž ์ด์ƒ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. - - [ ] ์—ญ ์‚ญ์ œ ์‹œ ๋…ธ์„ ์— ๋“ฑ๋ก๋œ ์—ญ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. \ No newline at end of file + - [ ] ์—ญ ์‚ญ์ œ ์‹œ ๋…ธ์„ ์— ๋“ฑ๋ก๋œ ์—ญ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. +- [ ] ๋…ธ์„  ๊ด€๋ฆฌ + - [ ] ์„ ํƒ์ง€์— ์—†๋Š” ์ž…๋ ฅ์ผ ์‹œ ์—๋Ÿฌ๋ฉ”์„ธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. + - [ ] ์‚ฌ์šฉ์ž ์ž…๋ ฅ์— ๋”ฐ๋ผ ํ•˜์œ„ ๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•œ๋‹ค. + - [ ] ๋…ธ์„  ์กฐํšŒ ์‹œ ๋ชจ๋“  ๋…ธ์„ ์˜ ์ด๋ฆ„์„ ์ค‘๋ณต ์—†์ด ์ถœ๋ ฅํ•œ๋‹ค. + - [ ] ๋…ธ์„  ๋“ฑ๋ก ์‹œ ์ด๋ฆ„ ์ค‘๋ณต์„ ํ™•์ธํ•œ๋‹ค. + - [ ] ๋…ธ์„  ๋“ฑ๋ก ์‹œ ์ด๋ฆ„์ด 2๊ธ€์ž ์ด์ƒ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. + - [ ] ๋…ธ์„  ๋“ฑ๋ก ์‹œ ์ƒํ–‰ ์ข…์ ์—ญ์ด ์กด์žฌํ•˜๋Š” ์—ญ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. + - [ ] ๋…ธ์„  ๋“ฑ๋ก ์‹œ ํ•˜ํ–‰ ์ข…์ ์—ญ์ด ์กด์žฌํ•˜๋Š” ์—ญ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. + - [ ] ๋…ธ์„  ์‚ญ์ œ ์‹œ ์กด์žฌํ•˜๋Š” ๋…ธ์„ ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. \ No newline at end of file From c96a22359b2f3229250da31f00100fb8609c59f6 Mon Sep 17 00:00:00 2001 From: jiwoo-kimm Date: Fri, 11 Dec 2020 21:36:16 +0900 Subject: [PATCH 16/51] refactor: make service abstract --- src/main/java/subway/service/BaseService.java | 56 +++++++++++++++++++ src/main/java/subway/service/Service.java | 13 +++++ .../java/subway/service/StationService.java | 43 ++++---------- 3 files changed, 79 insertions(+), 33 deletions(-) create mode 100644 src/main/java/subway/service/BaseService.java create mode 100644 src/main/java/subway/service/Service.java diff --git a/src/main/java/subway/service/BaseService.java b/src/main/java/subway/service/BaseService.java new file mode 100644 index 000000000..c9c878c46 --- /dev/null +++ b/src/main/java/subway/service/BaseService.java @@ -0,0 +1,56 @@ +package subway.service; + +import subway.constant.Function; +import subway.exception.InvalidInputException; + +import java.util.Scanner; + +public abstract class BaseService implements Service { + + private Scanner scanner; + private String info; + + public BaseService(Scanner scanner, String info) { + this.scanner = scanner; + this.info = info; + } + + @Override + public void run() { + try { + String selectedFunction = selectFunction(); + runSelectedFunction(selectedFunction); + } catch (InvalidInputException e) { + System.out.println(e.getMessage()); + } + } + + private String selectFunction() { + String line = getFunctionInput(); + Function.validate(line); + return line; + } + + private String getFunctionInput() { + System.out.println(info); + return scanner.nextLine(); + } + + private void runSelectedFunction(String selectedFunction) { + if (selectedFunction.equals(Function.ADD.getCode())) + add(); + if (selectedFunction.equals(Function.DELETE.getCode())) + delete(); + if (selectedFunction.equals(Function.SHOW.getCode())) + show(); + } + + @Override + public abstract void add(); + + @Override + public abstract void delete(); + + @Override + public abstract void show(); +} diff --git a/src/main/java/subway/service/Service.java b/src/main/java/subway/service/Service.java new file mode 100644 index 000000000..4df566bfd --- /dev/null +++ b/src/main/java/subway/service/Service.java @@ -0,0 +1,13 @@ +package subway.service; + +public interface Service { + + void run(); + + void add(); + + void delete(); + + void show(); + +} diff --git a/src/main/java/subway/service/StationService.java b/src/main/java/subway/service/StationService.java index 853f55643..d1617ca7e 100644 --- a/src/main/java/subway/service/StationService.java +++ b/src/main/java/subway/service/StationService.java @@ -1,7 +1,6 @@ package subway.service; import subway.constant.Constant; -import subway.constant.Function; import subway.constant.Information; import subway.constant.InitialData; import subway.domain.Station; @@ -12,11 +11,12 @@ import static subway.constant.Information.INFO_HEADER; -public class StationService { +public class StationService extends BaseService { private Scanner scanner; public StationService(Scanner scanner) { + super(scanner, Information.STATION_INFO); this.scanner = scanner; initStations(); } @@ -25,36 +25,9 @@ private void initStations() { StationRepository.addStation(InitialData.stations); } - public void run() { - try { - String selectedFunction = selectFunction(); - runSelectedFunction(selectedFunction); - } catch (InvalidInputException e) { - System.out.println(e.getMessage()); - } - } - - private String selectFunction() { - String line = getFunctionInput(); - Function.validate(line); - return line; - } - - private String getFunctionInput() { - System.out.println(Information.STATION_INFO); - return scanner.nextLine(); - } - private void runSelectedFunction(String selectedFunction) { - if (selectedFunction.equals(Function.ADD.getCode())) - addNewStation(); - if (selectedFunction.equals(Function.DELETE.getCode())) - deleteStation(); - if (selectedFunction.equals(Function.SHOW.getCode())) - showStations(); - } - - private void addNewStation() { + @Override + public void add() { Station newStation = getNewStationInput(); validateNewStation(newStation); StationRepository.addStation(newStation); @@ -81,11 +54,15 @@ private void validateDuplicateStation(Station newStation) { throw new InvalidInputException(InvalidInputException.ExceptionCode.DUPLICATE_STATION); } - private void deleteStation() { + + @Override + public void delete() { System.out.println(Information.DELETE_STATION_INFO); } - private void showStations() { + + @Override + public void show() { System.out.print(Information.SHOW_STATION_INFO); for (Station station : StationRepository.stations()) System.out.print(INFO_HEADER + station.getName()); From 2204c02d398057d979b0dd65e2e96e6c63db1393 Mon Sep 17 00:00:00 2001 From: jiwoo-kimm Date: Fri, 11 Dec 2020 21:43:16 +0900 Subject: [PATCH 17/51] feat(line): implement select function and validate input --- README.md | 3 +-- .../java/subway/constant/Information.java | 6 ++++++ src/main/java/subway/service/LineService.java | 19 ++++++++++++++++--- 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 7dc2ce4ab..dd6056f49 100644 --- a/README.md +++ b/README.md @@ -505,8 +505,7 @@ This project is [MIT](https://github.com/woowacourse/java-subway-map-precourse/b - [x] ์—ญ ๋“ฑ๋ก ์‹œ ์ด๋ฆ„์ด 2๊ธ€์ž ์ด์ƒ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. - [ ] ์—ญ ์‚ญ์ œ ์‹œ ๋…ธ์„ ์— ๋“ฑ๋ก๋œ ์—ญ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. - [ ] ๋…ธ์„  ๊ด€๋ฆฌ - - [ ] ์„ ํƒ์ง€์— ์—†๋Š” ์ž…๋ ฅ์ผ ์‹œ ์—๋Ÿฌ๋ฉ”์„ธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. - - [ ] ์‚ฌ์šฉ์ž ์ž…๋ ฅ์— ๋”ฐ๋ผ ํ•˜์œ„ ๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•œ๋‹ค. + - [x] ํ•˜์œ„ ๊ธฐ๋Šฅ์„ ์„ ํƒํ•œ๋‹ค. (์—ญ ๊ด€๋ฆฌ์™€ ๋™์ผ) - [ ] ๋…ธ์„  ์กฐํšŒ ์‹œ ๋ชจ๋“  ๋…ธ์„ ์˜ ์ด๋ฆ„์„ ์ค‘๋ณต ์—†์ด ์ถœ๋ ฅํ•œ๋‹ค. - [ ] ๋…ธ์„  ๋“ฑ๋ก ์‹œ ์ด๋ฆ„ ์ค‘๋ณต์„ ํ™•์ธํ•œ๋‹ค. - [ ] ๋…ธ์„  ๋“ฑ๋ก ์‹œ ์ด๋ฆ„์ด 2๊ธ€์ž ์ด์ƒ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. diff --git a/src/main/java/subway/constant/Information.java b/src/main/java/subway/constant/Information.java index 5de82f547..c89f0bc8c 100644 --- a/src/main/java/subway/constant/Information.java +++ b/src/main/java/subway/constant/Information.java @@ -15,6 +15,12 @@ public class Information { public static final String SHOW_STATION_INFO = "\n## ์—ญ ๋ชฉ๋ก"; public static final String LINE_INFO = "\n## ๋…ธ์„  ๊ด€๋ฆฌ ํ™”๋ฉด\n1. ๋…ธ์„  ๋“ฑ๋ก\n2. ๋…ธ์„  ์‚ญ์ œ\n3. ๋…ธ์„  ์กฐํšŒ\nB. ๋Œ์•„๊ฐ€๊ธฐ\n" + CHOOSE_FUNCTION; + public static final String ADD_LINE_INFO = "\n## ๋“ฑ๋กํ•  ๋…ธ์„  ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜์„ธ์š”."; + public static final String ADD_LINE_INFO_DOWN_END = "\n## ๋“ฑ๋กํ•  ๋…ธ์„ ์˜ ํ•˜ํ–‰ ์ข…์ ์—ญ ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜์„ธ์š”."; + public static final String ADD_LINE_SUCCESS = INFO_HEADER + "์ง€ํ•˜์ฒ  ๋…ธ์„ ์ด ๋“ฑ๋ก๋˜์—ˆ์Šต๋‹ˆ๋‹ค."; + public static final String DELETE_LINE_INFO = "\n## ์‚ญ์ œํ•  ๋…ธ์„  ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜์„ธ์š”."; + public static final String DELETE_LINE_SUCCESS = INFO_HEADER + "์ง€ํ•˜์ฒ  ๋…ธ์„ ์ด ์‚ญ์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค."; + public static final String SHOW_LINE_INFO = "\n## ๋…ธ์„  ๋ชฉ๋ก"; public static final String AREA_INFO = "\n## ๊ตฌ๊ฐ„ ๊ด€๋ฆฌ ํ™”๋ฉด\n1. ๊ตฌ๊ฐ„ ๋“ฑ๋ก\n2. ๊ตฌ๊ฐ„ ์‚ญ์ œ\nB. ๋Œ์•„๊ฐ€๊ธฐ\n" + CHOOSE_FUNCTION; diff --git a/src/main/java/subway/service/LineService.java b/src/main/java/subway/service/LineService.java index e3d1dccbd..b12b17b42 100644 --- a/src/main/java/subway/service/LineService.java +++ b/src/main/java/subway/service/LineService.java @@ -6,11 +6,12 @@ import java.util.Scanner; -public class LineService { +public class LineService extends BaseService { private Scanner scanner; public LineService(Scanner scanner) { + super(scanner, Information.LINE_INFO); this.scanner = scanner; initLines(); } @@ -19,7 +20,19 @@ private void initLines() { LineRepository.addLine(InitialData.lines); } - public void run() { - System.out.println(Information.LINE_INFO); + + @Override + public void add() { + System.out.println(Information.ADD_LINE_INFO); + } + + @Override + public void delete() { + System.out.println(Information.DELETE_LINE_INFO); + } + + @Override + public void show() { + System.out.println(Information.SHOW_LINE_INFO); } } From 6d6fcfd7393e0217eafc18c8283f40bfa53c74a3 Mon Sep 17 00:00:00 2001 From: jiwoo-kimm Date: Fri, 11 Dec 2020 21:45:16 +0900 Subject: [PATCH 18/51] feat(line): show all lines' name --- README.md | 2 +- src/main/java/subway/service/LineService.java | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index dd6056f49..4a5b21aba 100644 --- a/README.md +++ b/README.md @@ -506,7 +506,7 @@ This project is [MIT](https://github.com/woowacourse/java-subway-map-precourse/b - [ ] ์—ญ ์‚ญ์ œ ์‹œ ๋…ธ์„ ์— ๋“ฑ๋ก๋œ ์—ญ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. - [ ] ๋…ธ์„  ๊ด€๋ฆฌ - [x] ํ•˜์œ„ ๊ธฐ๋Šฅ์„ ์„ ํƒํ•œ๋‹ค. (์—ญ ๊ด€๋ฆฌ์™€ ๋™์ผ) - - [ ] ๋…ธ์„  ์กฐํšŒ ์‹œ ๋ชจ๋“  ๋…ธ์„ ์˜ ์ด๋ฆ„์„ ์ค‘๋ณต ์—†์ด ์ถœ๋ ฅํ•œ๋‹ค. + - [x] ๋…ธ์„  ์กฐํšŒ ์‹œ ๋ชจ๋“  ๋…ธ์„ ์˜ ์ด๋ฆ„์„ ์ค‘๋ณต ์—†์ด ์ถœ๋ ฅํ•œ๋‹ค. - [ ] ๋…ธ์„  ๋“ฑ๋ก ์‹œ ์ด๋ฆ„ ์ค‘๋ณต์„ ํ™•์ธํ•œ๋‹ค. - [ ] ๋…ธ์„  ๋“ฑ๋ก ์‹œ ์ด๋ฆ„์ด 2๊ธ€์ž ์ด์ƒ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. - [ ] ๋…ธ์„  ๋“ฑ๋ก ์‹œ ์ƒํ–‰ ์ข…์ ์—ญ์ด ์กด์žฌํ•˜๋Š” ์—ญ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. diff --git a/src/main/java/subway/service/LineService.java b/src/main/java/subway/service/LineService.java index b12b17b42..2e27dc8e2 100644 --- a/src/main/java/subway/service/LineService.java +++ b/src/main/java/subway/service/LineService.java @@ -2,10 +2,13 @@ import subway.constant.Information; import subway.constant.InitialData; +import subway.domain.Line; import subway.repository.LineRepository; import java.util.Scanner; +import static subway.constant.Information.INFO_HEADER; + public class LineService extends BaseService { private Scanner scanner; @@ -33,6 +36,9 @@ public void delete() { @Override public void show() { - System.out.println(Information.SHOW_LINE_INFO); + System.out.print(Information.SHOW_LINE_INFO); + for (Line line : LineRepository.lines()) + System.out.print(INFO_HEADER + line.getName()); + System.out.println(); } } From 4a7719a6c0dc552b29bd827a512a29fd70b9a9a3 Mon Sep 17 00:00:00 2001 From: jiwoo-kimm Date: Fri, 11 Dec 2020 21:57:32 +0900 Subject: [PATCH 19/51] feat(line): check duplicated name on add --- README.md | 2 +- .../java/subway/constant/Information.java | 1 + src/main/java/subway/domain/Line.java | 30 ++++++++++++++- .../exception/InvalidInputException.java | 3 ++ src/main/java/subway/service/LineService.java | 38 +++++++++++++++++++ 5 files changed, 72 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 4a5b21aba..dd1dbf0ff 100644 --- a/README.md +++ b/README.md @@ -507,7 +507,7 @@ This project is [MIT](https://github.com/woowacourse/java-subway-map-precourse/b - [ ] ๋…ธ์„  ๊ด€๋ฆฌ - [x] ํ•˜์œ„ ๊ธฐ๋Šฅ์„ ์„ ํƒํ•œ๋‹ค. (์—ญ ๊ด€๋ฆฌ์™€ ๋™์ผ) - [x] ๋…ธ์„  ์กฐํšŒ ์‹œ ๋ชจ๋“  ๋…ธ์„ ์˜ ์ด๋ฆ„์„ ์ค‘๋ณต ์—†์ด ์ถœ๋ ฅํ•œ๋‹ค. - - [ ] ๋…ธ์„  ๋“ฑ๋ก ์‹œ ์ด๋ฆ„ ์ค‘๋ณต์„ ํ™•์ธํ•œ๋‹ค. + - [x] ๋…ธ์„  ๋“ฑ๋ก ์‹œ ์ด๋ฆ„ ์ค‘๋ณต์„ ํ™•์ธํ•œ๋‹ค. - [ ] ๋…ธ์„  ๋“ฑ๋ก ์‹œ ์ด๋ฆ„์ด 2๊ธ€์ž ์ด์ƒ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. - [ ] ๋…ธ์„  ๋“ฑ๋ก ์‹œ ์ƒํ–‰ ์ข…์ ์—ญ์ด ์กด์žฌํ•˜๋Š” ์—ญ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. - [ ] ๋…ธ์„  ๋“ฑ๋ก ์‹œ ํ•˜ํ–‰ ์ข…์ ์—ญ์ด ์กด์žฌํ•˜๋Š” ์—ญ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. diff --git a/src/main/java/subway/constant/Information.java b/src/main/java/subway/constant/Information.java index c89f0bc8c..e1b100f01 100644 --- a/src/main/java/subway/constant/Information.java +++ b/src/main/java/subway/constant/Information.java @@ -16,6 +16,7 @@ public class Information { public static final String LINE_INFO = "\n## ๋…ธ์„  ๊ด€๋ฆฌ ํ™”๋ฉด\n1. ๋…ธ์„  ๋“ฑ๋ก\n2. ๋…ธ์„  ์‚ญ์ œ\n3. ๋…ธ์„  ์กฐํšŒ\nB. ๋Œ์•„๊ฐ€๊ธฐ\n" + CHOOSE_FUNCTION; public static final String ADD_LINE_INFO = "\n## ๋“ฑ๋กํ•  ๋…ธ์„  ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜์„ธ์š”."; + public static final String ADD_LINE_INFO_UP_END = "\n## ๋“ฑ๋กํ•  ๋…ธ์„ ์˜ ์ƒํ–‰ ์ข…์ ์—ญ ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜์„ธ์š”."; public static final String ADD_LINE_INFO_DOWN_END = "\n## ๋“ฑ๋กํ•  ๋…ธ์„ ์˜ ํ•˜ํ–‰ ์ข…์ ์—ญ ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜์„ธ์š”."; public static final String ADD_LINE_SUCCESS = INFO_HEADER + "์ง€ํ•˜์ฒ  ๋…ธ์„ ์ด ๋“ฑ๋ก๋˜์—ˆ์Šต๋‹ˆ๋‹ค."; public static final String DELETE_LINE_INFO = "\n## ์‚ญ์ œํ•  ๋…ธ์„  ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜์„ธ์š”."; diff --git a/src/main/java/subway/domain/Line.java b/src/main/java/subway/domain/Line.java index 9c9d90f08..260350aa4 100644 --- a/src/main/java/subway/domain/Line.java +++ b/src/main/java/subway/domain/Line.java @@ -2,10 +2,14 @@ import java.util.ArrayList; import java.util.List; +import java.util.Objects; public class Line { private String name; + private Station upEnd; + private Station downEnd; + private List stations = new ArrayList<>(); public Line(String name) { @@ -17,6 +21,19 @@ public Line(String name, List stations) { this.stations = stations; } + public Line(String name, Station upEnd, Station downEnd) { + this.name = name; + this.upEnd = upEnd; + this.downEnd = downEnd; + } + + public Line(String name, List stations, Station upEnd, Station downEnd) { + this.name = name; + this.stations = stations; + this.upEnd = upEnd; + this.downEnd = downEnd; + } + public String getName() { return name; } @@ -25,5 +42,16 @@ public List getStations() { return stations; } - // ์ถ”๊ฐ€ ๊ธฐ๋Šฅ ๊ตฌํ˜„ + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof Line)) return false; + Line line = (Line) o; + return Objects.equals(name, line.name); + } + + @Override + public int hashCode() { + return Objects.hash(name); + } } diff --git a/src/main/java/subway/exception/InvalidInputException.java b/src/main/java/subway/exception/InvalidInputException.java index 1620bb821..a3d99c536 100644 --- a/src/main/java/subway/exception/InvalidInputException.java +++ b/src/main/java/subway/exception/InvalidInputException.java @@ -6,6 +6,7 @@ public enum ExceptionCode { INVALID_SERVICE_CODE, INVALID_FUNCTION_CODE, DUPLICATE_STATION, + DUPLICATE_LINE, INVALID_NAME_LENGTH; } @@ -22,6 +23,8 @@ public String getMessage() { return HEADER + "์„ ํƒํ•  ์ˆ˜ ์—†๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค."; if (exceptionCode.equals(ExceptionCode.DUPLICATE_STATION)) return HEADER + "์ด๋ฏธ ๋“ฑ๋ก๋œ ์—ญ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค."; + if (exceptionCode.equals(ExceptionCode.DUPLICATE_LINE)) + return HEADER + "์ด๋ฏธ ๋“ฑ๋ก๋œ ๋…ธ์„  ์ด๋ฆ„์ž…๋‹ˆ๋‹ค."; if (exceptionCode.equals(ExceptionCode.INVALID_NAME_LENGTH)) return HEADER + "์ด๋ฆ„์€ ๋‘ ๊ธ€์ž ์ด์ƒ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค."; return ""; diff --git a/src/main/java/subway/service/LineService.java b/src/main/java/subway/service/LineService.java index 2e27dc8e2..dbb69fda6 100644 --- a/src/main/java/subway/service/LineService.java +++ b/src/main/java/subway/service/LineService.java @@ -3,6 +3,8 @@ import subway.constant.Information; import subway.constant.InitialData; import subway.domain.Line; +import subway.domain.Station; +import subway.exception.InvalidInputException; import subway.repository.LineRepository; import java.util.Scanner; @@ -26,7 +28,43 @@ private void initLines() { @Override public void add() { + Line newLine = getNewLineInput(); + validateNewLine(newLine); + LineRepository.addLine(newLine); + System.out.println(Information.ADD_LINE_SUCCESS); + } + + private Line getNewLineInput() { + String name = getNewLineName(); + Station upEnd = getNewLineUpEnd(); + Station downEnd = getNewLineDownEnd(); + Line newLine = new Line(name, upEnd, downEnd); + validateNewLine(newLine); + return newLine; + } + + private String getNewLineName() { System.out.println(Information.ADD_LINE_INFO); + return scanner.nextLine(); + } + + private Station getNewLineUpEnd() { + System.out.println(Information.ADD_LINE_INFO_UP_END); + return new Station(scanner.nextLine()); + } + + private Station getNewLineDownEnd() { + System.out.println(Information.ADD_LINE_INFO_DOWN_END); + return new Station(scanner.nextLine()); + } + + private void validateNewLine(Line newLine) { + validateDuplicateLine(newLine); + } + + private void validateDuplicateLine(Line newLine) { + if (LineRepository.lines().contains(newLine)) + throw new InvalidInputException(InvalidInputException.ExceptionCode.DUPLICATE_LINE); } @Override From d99343a4b7d8560aa87e1e7ead0c776137ab9e58 Mon Sep 17 00:00:00 2001 From: jiwoo-kimm Date: Fri, 11 Dec 2020 21:59:13 +0900 Subject: [PATCH 20/51] feat(line): validate line name length on add --- README.md | 2 +- src/main/java/subway/service/LineService.java | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index dd1dbf0ff..8ff65a914 100644 --- a/README.md +++ b/README.md @@ -508,7 +508,7 @@ This project is [MIT](https://github.com/woowacourse/java-subway-map-precourse/b - [x] ํ•˜์œ„ ๊ธฐ๋Šฅ์„ ์„ ํƒํ•œ๋‹ค. (์—ญ ๊ด€๋ฆฌ์™€ ๋™์ผ) - [x] ๋…ธ์„  ์กฐํšŒ ์‹œ ๋ชจ๋“  ๋…ธ์„ ์˜ ์ด๋ฆ„์„ ์ค‘๋ณต ์—†์ด ์ถœ๋ ฅํ•œ๋‹ค. - [x] ๋…ธ์„  ๋“ฑ๋ก ์‹œ ์ด๋ฆ„ ์ค‘๋ณต์„ ํ™•์ธํ•œ๋‹ค. - - [ ] ๋…ธ์„  ๋“ฑ๋ก ์‹œ ์ด๋ฆ„์ด 2๊ธ€์ž ์ด์ƒ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. + - [x] ๋…ธ์„  ๋“ฑ๋ก ์‹œ ์ด๋ฆ„์ด 2๊ธ€์ž ์ด์ƒ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. - [ ] ๋…ธ์„  ๋“ฑ๋ก ์‹œ ์ƒํ–‰ ์ข…์ ์—ญ์ด ์กด์žฌํ•˜๋Š” ์—ญ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. - [ ] ๋…ธ์„  ๋“ฑ๋ก ์‹œ ํ•˜ํ–‰ ์ข…์ ์—ญ์ด ์กด์žฌํ•˜๋Š” ์—ญ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. - [ ] ๋…ธ์„  ์‚ญ์ œ ์‹œ ์กด์žฌํ•˜๋Š” ๋…ธ์„ ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. \ No newline at end of file diff --git a/src/main/java/subway/service/LineService.java b/src/main/java/subway/service/LineService.java index dbb69fda6..59ec5cd2f 100644 --- a/src/main/java/subway/service/LineService.java +++ b/src/main/java/subway/service/LineService.java @@ -1,5 +1,6 @@ package subway.service; +import subway.constant.Constant; import subway.constant.Information; import subway.constant.InitialData; import subway.domain.Line; @@ -59,9 +60,15 @@ private Station getNewLineDownEnd() { } private void validateNewLine(Line newLine) { + validateNameLength(newLine); validateDuplicateLine(newLine); } + private void validateNameLength(Line newLine) { + if (newLine.getName().length() < Constant.MIN_NAME_LENGTH) + throw new InvalidInputException(InvalidInputException.ExceptionCode.INVALID_NAME_LENGTH); + } + private void validateDuplicateLine(Line newLine) { if (LineRepository.lines().contains(newLine)) throw new InvalidInputException(InvalidInputException.ExceptionCode.DUPLICATE_LINE); From c2e0a91e19e5d60f94e9c9f3de5c4b5bb37c4262 Mon Sep 17 00:00:00 2001 From: jiwoo-kimm Date: Fri, 11 Dec 2020 22:06:14 +0900 Subject: [PATCH 21/51] feat(line): check up and down end stations exist on add --- README.md | 4 ++-- src/main/java/subway/domain/Line.java | 8 ++++++++ src/main/java/subway/exception/InvalidInputException.java | 5 ++++- src/main/java/subway/service/LineService.java | 8 ++++++++ 4 files changed, 22 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 8ff65a914..56f01c802 100644 --- a/README.md +++ b/README.md @@ -509,6 +509,6 @@ This project is [MIT](https://github.com/woowacourse/java-subway-map-precourse/b - [x] ๋…ธ์„  ์กฐํšŒ ์‹œ ๋ชจ๋“  ๋…ธ์„ ์˜ ์ด๋ฆ„์„ ์ค‘๋ณต ์—†์ด ์ถœ๋ ฅํ•œ๋‹ค. - [x] ๋…ธ์„  ๋“ฑ๋ก ์‹œ ์ด๋ฆ„ ์ค‘๋ณต์„ ํ™•์ธํ•œ๋‹ค. - [x] ๋…ธ์„  ๋“ฑ๋ก ์‹œ ์ด๋ฆ„์ด 2๊ธ€์ž ์ด์ƒ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. - - [ ] ๋…ธ์„  ๋“ฑ๋ก ์‹œ ์ƒํ–‰ ์ข…์ ์—ญ์ด ์กด์žฌํ•˜๋Š” ์—ญ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. - - [ ] ๋…ธ์„  ๋“ฑ๋ก ์‹œ ํ•˜ํ–‰ ์ข…์ ์—ญ์ด ์กด์žฌํ•˜๋Š” ์—ญ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. + - [x] ๋…ธ์„  ๋“ฑ๋ก ์‹œ ์ƒํ–‰ ์ข…์ ์—ญ์ด ์กด์žฌํ•˜๋Š” ์—ญ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. + - [x] ๋…ธ์„  ๋“ฑ๋ก ์‹œ ํ•˜ํ–‰ ์ข…์ ์—ญ์ด ์กด์žฌํ•˜๋Š” ์—ญ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. - [ ] ๋…ธ์„  ์‚ญ์ œ ์‹œ ์กด์žฌํ•˜๋Š” ๋…ธ์„ ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. \ No newline at end of file diff --git a/src/main/java/subway/domain/Line.java b/src/main/java/subway/domain/Line.java index 260350aa4..de0515faf 100644 --- a/src/main/java/subway/domain/Line.java +++ b/src/main/java/subway/domain/Line.java @@ -38,6 +38,14 @@ public String getName() { return name; } + public Station getUpEnd() { + return upEnd; + } + + public Station getDownEnd() { + return downEnd; + } + public List getStations() { return stations; } diff --git a/src/main/java/subway/exception/InvalidInputException.java b/src/main/java/subway/exception/InvalidInputException.java index a3d99c536..f4b56e541 100644 --- a/src/main/java/subway/exception/InvalidInputException.java +++ b/src/main/java/subway/exception/InvalidInputException.java @@ -7,7 +7,8 @@ public enum ExceptionCode { INVALID_FUNCTION_CODE, DUPLICATE_STATION, DUPLICATE_LINE, - INVALID_NAME_LENGTH; + INVALID_NAME_LENGTH, + NO_SUCH_STATION; } private final String HEADER = "\n[ERROR] "; @@ -27,6 +28,8 @@ public String getMessage() { return HEADER + "์ด๋ฏธ ๋“ฑ๋ก๋œ ๋…ธ์„  ์ด๋ฆ„์ž…๋‹ˆ๋‹ค."; if (exceptionCode.equals(ExceptionCode.INVALID_NAME_LENGTH)) return HEADER + "์ด๋ฆ„์€ ๋‘ ๊ธ€์ž ์ด์ƒ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค."; + if (exceptionCode.equals(ExceptionCode.NO_SUCH_STATION)) + return HEADER + "์กด์žฌํ•˜์ง€ ์•Š๋Š” ์—ญ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค."; return ""; } } diff --git a/src/main/java/subway/service/LineService.java b/src/main/java/subway/service/LineService.java index 59ec5cd2f..f167331c3 100644 --- a/src/main/java/subway/service/LineService.java +++ b/src/main/java/subway/service/LineService.java @@ -7,6 +7,7 @@ import subway.domain.Station; import subway.exception.InvalidInputException; import subway.repository.LineRepository; +import subway.repository.StationRepository; import java.util.Scanner; @@ -62,6 +63,7 @@ private Station getNewLineDownEnd() { private void validateNewLine(Line newLine) { validateNameLength(newLine); validateDuplicateLine(newLine); + validateEndStationsExist(newLine); } private void validateNameLength(Line newLine) { @@ -74,6 +76,12 @@ private void validateDuplicateLine(Line newLine) { throw new InvalidInputException(InvalidInputException.ExceptionCode.DUPLICATE_LINE); } + private void validateEndStationsExist(Line newLine) { + if (!StationRepository.stations().contains(newLine.getUpEnd()) + || !StationRepository.stations().contains(newLine.getDownEnd())) + throw new InvalidInputException(InvalidInputException.ExceptionCode.NO_SUCH_STATION); + } + @Override public void delete() { System.out.println(Information.DELETE_LINE_INFO); From 6363f054661b1adfae0287a62b93f30b8c6641b3 Mon Sep 17 00:00:00 2001 From: jiwoo-kimm Date: Fri, 11 Dec 2020 22:12:33 +0900 Subject: [PATCH 22/51] feat(line): check line exists on delete --- README.md | 2 +- .../subway/exception/InvalidInputException.java | 5 ++++- src/main/java/subway/service/LineService.java | 16 ++++++++++++++++ 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 56f01c802..5b346e20d 100644 --- a/README.md +++ b/README.md @@ -511,4 +511,4 @@ This project is [MIT](https://github.com/woowacourse/java-subway-map-precourse/b - [x] ๋…ธ์„  ๋“ฑ๋ก ์‹œ ์ด๋ฆ„์ด 2๊ธ€์ž ์ด์ƒ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. - [x] ๋…ธ์„  ๋“ฑ๋ก ์‹œ ์ƒํ–‰ ์ข…์ ์—ญ์ด ์กด์žฌํ•˜๋Š” ์—ญ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. - [x] ๋…ธ์„  ๋“ฑ๋ก ์‹œ ํ•˜ํ–‰ ์ข…์ ์—ญ์ด ์กด์žฌํ•˜๋Š” ์—ญ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. - - [ ] ๋…ธ์„  ์‚ญ์ œ ์‹œ ์กด์žฌํ•˜๋Š” ๋…ธ์„ ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. \ No newline at end of file + - [x] ๋…ธ์„  ์‚ญ์ œ ์‹œ ์กด์žฌํ•˜๋Š” ๋…ธ์„ ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. \ No newline at end of file diff --git a/src/main/java/subway/exception/InvalidInputException.java b/src/main/java/subway/exception/InvalidInputException.java index f4b56e541..40ad5368a 100644 --- a/src/main/java/subway/exception/InvalidInputException.java +++ b/src/main/java/subway/exception/InvalidInputException.java @@ -8,7 +8,8 @@ public enum ExceptionCode { DUPLICATE_STATION, DUPLICATE_LINE, INVALID_NAME_LENGTH, - NO_SUCH_STATION; + NO_SUCH_STATION, + NO_SUCH_LINE; } private final String HEADER = "\n[ERROR] "; @@ -30,6 +31,8 @@ public String getMessage() { return HEADER + "์ด๋ฆ„์€ ๋‘ ๊ธ€์ž ์ด์ƒ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค."; if (exceptionCode.equals(ExceptionCode.NO_SUCH_STATION)) return HEADER + "์กด์žฌํ•˜์ง€ ์•Š๋Š” ์—ญ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค."; + if (exceptionCode.equals(ExceptionCode.NO_SUCH_LINE)) + return HEADER + "์กด์žฌํ•˜์ง€ ์•Š๋Š” ๋…ธ์„  ์ด๋ฆ„์ž…๋‹ˆ๋‹ค."; return ""; } } diff --git a/src/main/java/subway/service/LineService.java b/src/main/java/subway/service/LineService.java index f167331c3..c48fcbfe1 100644 --- a/src/main/java/subway/service/LineService.java +++ b/src/main/java/subway/service/LineService.java @@ -82,11 +82,27 @@ private void validateEndStationsExist(Line newLine) { throw new InvalidInputException(InvalidInputException.ExceptionCode.NO_SUCH_STATION); } + @Override public void delete() { + String targetLineName = getTargetLineName(); + validateLineExists(targetLineName); + LineRepository.deleteLineByName(targetLineName); + System.out.println(Information.DELETE_LINE_SUCCESS); + } + + private String getTargetLineName() { System.out.println(Information.DELETE_LINE_INFO); + return scanner.nextLine(); } + private void validateLineExists(String targetLineName) { + Line targetLine = new Line(targetLineName); + if (!LineRepository.lines().contains(targetLine)) + throw new InvalidInputException(InvalidInputException.ExceptionCode.NO_SUCH_LINE); + } + + @Override public void show() { System.out.print(Information.SHOW_LINE_INFO); From cc9fb30ae8b664d8453fa53f85b9f6f8f4661655 Mon Sep 17 00:00:00 2001 From: jiwoo-kimm Date: Fri, 11 Dec 2020 22:40:52 +0900 Subject: [PATCH 23/51] docs(readme): update the list to implement link service --- README.md | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 5b346e20d..078c96bfa 100644 --- a/README.md +++ b/README.md @@ -504,11 +504,18 @@ This project is [MIT](https://github.com/woowacourse/java-subway-map-precourse/b - [x] ์—ญ ๋“ฑ๋ก ์‹œ ์ด๋ฆ„ ์ค‘๋ณต์„ ํ™•์ธํ•œ๋‹ค. - [x] ์—ญ ๋“ฑ๋ก ์‹œ ์ด๋ฆ„์ด 2๊ธ€์ž ์ด์ƒ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. - [ ] ์—ญ ์‚ญ์ œ ์‹œ ๋…ธ์„ ์— ๋“ฑ๋ก๋œ ์—ญ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. -- [ ] ๋…ธ์„  ๊ด€๋ฆฌ +- [x] ๋…ธ์„  ๊ด€๋ฆฌ - [x] ํ•˜์œ„ ๊ธฐ๋Šฅ์„ ์„ ํƒํ•œ๋‹ค. (์—ญ ๊ด€๋ฆฌ์™€ ๋™์ผ) - [x] ๋…ธ์„  ์กฐํšŒ ์‹œ ๋ชจ๋“  ๋…ธ์„ ์˜ ์ด๋ฆ„์„ ์ค‘๋ณต ์—†์ด ์ถœ๋ ฅํ•œ๋‹ค. - [x] ๋…ธ์„  ๋“ฑ๋ก ์‹œ ์ด๋ฆ„ ์ค‘๋ณต์„ ํ™•์ธํ•œ๋‹ค. - [x] ๋…ธ์„  ๋“ฑ๋ก ์‹œ ์ด๋ฆ„์ด 2๊ธ€์ž ์ด์ƒ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. - [x] ๋…ธ์„  ๋“ฑ๋ก ์‹œ ์ƒํ–‰ ์ข…์ ์—ญ์ด ์กด์žฌํ•˜๋Š” ์—ญ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. - [x] ๋…ธ์„  ๋“ฑ๋ก ์‹œ ํ•˜ํ–‰ ์ข…์ ์—ญ์ด ์กด์žฌํ•˜๋Š” ์—ญ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. - - [x] ๋…ธ์„  ์‚ญ์ œ ์‹œ ์กด์žฌํ•˜๋Š” ๋…ธ์„ ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. \ No newline at end of file + - [x] ๋…ธ์„  ์‚ญ์ œ ์‹œ ์กด์žฌํ•˜๋Š” ๋…ธ์„ ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. +- [ ] ๊ตฌ๊ฐ„ ๊ด€๋ฆฌ + - [ ] ์„ ํƒ์ง€์— ์—†๋Š” ์ž…๋ ฅ์ผ ์‹œ ์—๋Ÿฌ๋ฉ”์„ธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. + - [ ] ์‚ฌ์šฉ์ž ์ž…๋ ฅ์— ๋”ฐ๋ผ ํ•˜์œ„ ๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•œ๋‹ค. + - [ ] ๊ตฌ๊ฐ„ ๋“ฑ๋ก ์‹œ ์กด์žฌํ•˜๋Š” ๋…ธ์„ ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. + - [ ] ๊ตฌ๊ฐ„ ๋“ฑ๋ก ์‹œ ์กด์žฌํ•˜๋Š” ์—ญ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. + - [ ] ๊ตฌ๊ฐ„ ์‚ญ์ œ ์‹œ ์กด์žฌํ•˜๋Š” ๋…ธ์„ ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. + - [ ] ๊ตฌ๊ฐ„ ์‚ญ์ œ ์‹œ ์กด์žฌํ•˜๋Š” ์—ญ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. From e141daec81de414b7372ce5251d97d2eaacaf9fd Mon Sep 17 00:00:00 2001 From: jiwoo-kimm Date: Fri, 11 Dec 2020 22:41:16 +0900 Subject: [PATCH 24/51] refactor: rename area into link --- src/main/java/subway/constant/Information.java | 2 +- src/main/java/subway/constant/Service.java | 2 +- .../subway/service/{AreaService.java => LinkService.java} | 6 +++--- src/main/java/subway/service/MainService.java | 8 ++++---- 4 files changed, 9 insertions(+), 9 deletions(-) rename src/main/java/subway/service/{AreaService.java => LinkService.java} (61%) diff --git a/src/main/java/subway/constant/Information.java b/src/main/java/subway/constant/Information.java index e1b100f01..49b7ba58e 100644 --- a/src/main/java/subway/constant/Information.java +++ b/src/main/java/subway/constant/Information.java @@ -23,7 +23,7 @@ public class Information { public static final String DELETE_LINE_SUCCESS = INFO_HEADER + "์ง€ํ•˜์ฒ  ๋…ธ์„ ์ด ์‚ญ์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค."; public static final String SHOW_LINE_INFO = "\n## ๋…ธ์„  ๋ชฉ๋ก"; - public static final String AREA_INFO = "\n## ๊ตฌ๊ฐ„ ๊ด€๋ฆฌ ํ™”๋ฉด\n1. ๊ตฌ๊ฐ„ ๋“ฑ๋ก\n2. ๊ตฌ๊ฐ„ ์‚ญ์ œ\nB. ๋Œ์•„๊ฐ€๊ธฐ\n" + CHOOSE_FUNCTION; + public static final String LINK_INFO = "\n## ๊ตฌ๊ฐ„ ๊ด€๋ฆฌ ํ™”๋ฉด\n1. ๊ตฌ๊ฐ„ ๋“ฑ๋ก\n2. ๊ตฌ๊ฐ„ ์‚ญ์ œ\nB. ๋Œ์•„๊ฐ€๊ธฐ\n" + CHOOSE_FUNCTION; public static final String MAP_INFO = "\n## ์ง€ํ•˜์ฒ  ๋…ธ์„ ๋„"; } diff --git a/src/main/java/subway/constant/Service.java b/src/main/java/subway/constant/Service.java index 835acdd75..b5c45f1da 100644 --- a/src/main/java/subway/constant/Service.java +++ b/src/main/java/subway/constant/Service.java @@ -9,7 +9,7 @@ public enum Service { STATION("1"), LINE("2"), - AREA("3"), + LINK("3"), MAP("4"), QUIT("Q"); diff --git a/src/main/java/subway/service/AreaService.java b/src/main/java/subway/service/LinkService.java similarity index 61% rename from src/main/java/subway/service/AreaService.java rename to src/main/java/subway/service/LinkService.java index 13abc0363..95e1e17b2 100644 --- a/src/main/java/subway/service/AreaService.java +++ b/src/main/java/subway/service/LinkService.java @@ -4,15 +4,15 @@ import java.util.Scanner; -public class AreaService { +public class LinkService { private Scanner scanner; - public AreaService(Scanner scanner) { + public LinkService(Scanner scanner) { this.scanner = scanner; } public void run() { - System.out.println(Information.AREA_INFO); + System.out.println(Information.LINK_INFO); } } diff --git a/src/main/java/subway/service/MainService.java b/src/main/java/subway/service/MainService.java index bb5d423e8..090ec8c6b 100644 --- a/src/main/java/subway/service/MainService.java +++ b/src/main/java/subway/service/MainService.java @@ -13,14 +13,14 @@ public class MainService { private StationService stationService; private LineService lineService; - private AreaService areaService; + private LinkService linkService; private MapService mapService; public MainService(Scanner scanner) { this.scanner = scanner; stationService = new StationService(scanner); lineService = new LineService(scanner); - areaService = new AreaService(scanner); + linkService = new LinkService(scanner); mapService = new MapService(); } @@ -55,8 +55,8 @@ private void runSelectedService(String selectedService) { stationService.run(); if (selectedService.equals(Service.LINE.getCode())) lineService.run(); - if (selectedService.equals(Service.AREA.getCode())) - areaService.run(); + if (selectedService.equals(Service.LINK.getCode())) + linkService.run(); if (selectedService.equals(Service.MAP.getCode())) mapService.run(); if (selectedService.equals(Service.QUIT.getCode())) From 80f56074c6623c25c2f3a476ec85c7af7e769804 Mon Sep 17 00:00:00 2001 From: jiwoo-kimm Date: Fri, 11 Dec 2020 22:48:13 +0900 Subject: [PATCH 25/51] refactor: rename service interface and classes --- src/main/java/subway/constant/Information.java | 2 +- .../service/{BaseService.java => CrudService.java} | 7 ++----- src/main/java/subway/service/LineService.java | 2 +- src/main/java/subway/service/MainService.java | 6 +++--- src/main/java/subway/service/MapService.java | 7 ++----- src/main/java/subway/service/PrintService.java | 10 ++++++++++ src/main/java/subway/service/Service.java | 13 ------------- src/main/java/subway/service/StationService.java | 2 +- 8 files changed, 20 insertions(+), 29 deletions(-) rename src/main/java/subway/service/{BaseService.java => CrudService.java} (88%) create mode 100644 src/main/java/subway/service/PrintService.java delete mode 100644 src/main/java/subway/service/Service.java diff --git a/src/main/java/subway/constant/Information.java b/src/main/java/subway/constant/Information.java index 49b7ba58e..b8487ca06 100644 --- a/src/main/java/subway/constant/Information.java +++ b/src/main/java/subway/constant/Information.java @@ -25,5 +25,5 @@ public class Information { public static final String LINK_INFO = "\n## ๊ตฌ๊ฐ„ ๊ด€๋ฆฌ ํ™”๋ฉด\n1. ๊ตฌ๊ฐ„ ๋“ฑ๋ก\n2. ๊ตฌ๊ฐ„ ์‚ญ์ œ\nB. ๋Œ์•„๊ฐ€๊ธฐ\n" + CHOOSE_FUNCTION; - public static final String MAP_INFO = "\n## ์ง€ํ•˜์ฒ  ๋…ธ์„ ๋„"; + public static final String PRINT_INFO = "\n## ์ง€ํ•˜์ฒ  ๋…ธ์„ ๋„"; } diff --git a/src/main/java/subway/service/BaseService.java b/src/main/java/subway/service/CrudService.java similarity index 88% rename from src/main/java/subway/service/BaseService.java rename to src/main/java/subway/service/CrudService.java index c9c878c46..420e7661c 100644 --- a/src/main/java/subway/service/BaseService.java +++ b/src/main/java/subway/service/CrudService.java @@ -5,12 +5,12 @@ import java.util.Scanner; -public abstract class BaseService implements Service { +public abstract class CrudService implements MapService { private Scanner scanner; private String info; - public BaseService(Scanner scanner, String info) { + public CrudService(Scanner scanner, String info) { this.scanner = scanner; this.info = info; } @@ -45,12 +45,9 @@ private void runSelectedFunction(String selectedFunction) { show(); } - @Override public abstract void add(); - @Override public abstract void delete(); - @Override public abstract void show(); } diff --git a/src/main/java/subway/service/LineService.java b/src/main/java/subway/service/LineService.java index c48fcbfe1..a35d468cf 100644 --- a/src/main/java/subway/service/LineService.java +++ b/src/main/java/subway/service/LineService.java @@ -13,7 +13,7 @@ import static subway.constant.Information.INFO_HEADER; -public class LineService extends BaseService { +public class LineService extends CrudService { private Scanner scanner; diff --git a/src/main/java/subway/service/MainService.java b/src/main/java/subway/service/MainService.java index 090ec8c6b..8daf2d31d 100644 --- a/src/main/java/subway/service/MainService.java +++ b/src/main/java/subway/service/MainService.java @@ -14,14 +14,14 @@ public class MainService { private StationService stationService; private LineService lineService; private LinkService linkService; - private MapService mapService; + private PrintService printService; public MainService(Scanner scanner) { this.scanner = scanner; stationService = new StationService(scanner); lineService = new LineService(scanner); linkService = new LinkService(scanner); - mapService = new MapService(); + printService = new PrintService(); } @@ -58,7 +58,7 @@ private void runSelectedService(String selectedService) { if (selectedService.equals(Service.LINK.getCode())) linkService.run(); if (selectedService.equals(Service.MAP.getCode())) - mapService.run(); + printService.run(); if (selectedService.equals(Service.QUIT.getCode())) isContinue = false; } diff --git a/src/main/java/subway/service/MapService.java b/src/main/java/subway/service/MapService.java index 3579db3da..f9266c8ae 100644 --- a/src/main/java/subway/service/MapService.java +++ b/src/main/java/subway/service/MapService.java @@ -1,10 +1,7 @@ package subway.service; -import subway.constant.Information; +public interface MapService { -public class MapService { + void run(); - public void run() { - System.out.println(Information.MAP_INFO); - } } diff --git a/src/main/java/subway/service/PrintService.java b/src/main/java/subway/service/PrintService.java new file mode 100644 index 000000000..5491e5f60 --- /dev/null +++ b/src/main/java/subway/service/PrintService.java @@ -0,0 +1,10 @@ +package subway.service; + +import subway.constant.Information; + +public class PrintService { + + public void run() { + System.out.println(Information.PRINT_INFO); + } +} diff --git a/src/main/java/subway/service/Service.java b/src/main/java/subway/service/Service.java deleted file mode 100644 index 4df566bfd..000000000 --- a/src/main/java/subway/service/Service.java +++ /dev/null @@ -1,13 +0,0 @@ -package subway.service; - -public interface Service { - - void run(); - - void add(); - - void delete(); - - void show(); - -} diff --git a/src/main/java/subway/service/StationService.java b/src/main/java/subway/service/StationService.java index d1617ca7e..20517083e 100644 --- a/src/main/java/subway/service/StationService.java +++ b/src/main/java/subway/service/StationService.java @@ -11,7 +11,7 @@ import static subway.constant.Information.INFO_HEADER; -public class StationService extends BaseService { +public class StationService extends CrudService { private Scanner scanner; From 40475110782542ff8080a6719b89f953e6db551a Mon Sep 17 00:00:00 2001 From: jiwoo-kimm Date: Fri, 11 Dec 2020 23:04:55 +0900 Subject: [PATCH 26/51] refactor: simplify constructors of line class --- src/main/java/subway/domain/Line.java | 13 +++++-------- src/main/java/subway/domain/Map.java | 8 -------- 2 files changed, 5 insertions(+), 16 deletions(-) delete mode 100644 src/main/java/subway/domain/Map.java diff --git a/src/main/java/subway/domain/Line.java b/src/main/java/subway/domain/Line.java index de0515faf..f01872955 100644 --- a/src/main/java/subway/domain/Line.java +++ b/src/main/java/subway/domain/Line.java @@ -6,6 +6,8 @@ public class Line { + private static final int UP_END_INDEX = 0; + private String name; private Station upEnd; private Station downEnd; @@ -16,22 +18,17 @@ public Line(String name) { this.name = name; } - public Line(String name, List stations) { - this.name = name; - this.stations = stations; - } - public Line(String name, Station upEnd, Station downEnd) { this.name = name; this.upEnd = upEnd; this.downEnd = downEnd; } - public Line(String name, List stations, Station upEnd, Station downEnd) { + public Line(String name, List stations) { this.name = name; this.stations = stations; - this.upEnd = upEnd; - this.downEnd = downEnd; + this.upEnd = stations.get(UP_END_INDEX); + this.downEnd = stations.get(stations.size() - 1); } public String getName() { diff --git a/src/main/java/subway/domain/Map.java b/src/main/java/subway/domain/Map.java deleted file mode 100644 index dd8b09b49..000000000 --- a/src/main/java/subway/domain/Map.java +++ /dev/null @@ -1,8 +0,0 @@ -package subway.domain; - -public class Map { - - public Map() { - // TODO ๋…ธ์„  ์ดˆ๊ธฐํ™” - } -} From 38e7d399695bf28d354dbb11f0cd1c7015ffbf0e Mon Sep 17 00:00:00 2001 From: jiwoo-kimm Date: Fri, 11 Dec 2020 23:05:32 +0900 Subject: [PATCH 27/51] feat(link): select function and validate input --- README.md | 2 +- .../java/subway/constant/Information.java | 7 +++++++ src/main/java/subway/service/LinkService.java | 19 ++++++++++++++++--- 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 078c96bfa..b813455ea 100644 --- a/README.md +++ b/README.md @@ -513,7 +513,7 @@ This project is [MIT](https://github.com/woowacourse/java-subway-map-precourse/b - [x] ๋…ธ์„  ๋“ฑ๋ก ์‹œ ํ•˜ํ–‰ ์ข…์ ์—ญ์ด ์กด์žฌํ•˜๋Š” ์—ญ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. - [x] ๋…ธ์„  ์‚ญ์ œ ์‹œ ์กด์žฌํ•˜๋Š” ๋…ธ์„ ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. - [ ] ๊ตฌ๊ฐ„ ๊ด€๋ฆฌ - - [ ] ์„ ํƒ์ง€์— ์—†๋Š” ์ž…๋ ฅ์ผ ์‹œ ์—๋Ÿฌ๋ฉ”์„ธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. + - [x] ์„ ํƒ์ง€์— ์—†๋Š” ์ž…๋ ฅ์ผ ์‹œ ์—๋Ÿฌ๋ฉ”์„ธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. - [ ] ์‚ฌ์šฉ์ž ์ž…๋ ฅ์— ๋”ฐ๋ผ ํ•˜์œ„ ๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•œ๋‹ค. - [ ] ๊ตฌ๊ฐ„ ๋“ฑ๋ก ์‹œ ์กด์žฌํ•˜๋Š” ๋…ธ์„ ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. - [ ] ๊ตฌ๊ฐ„ ๋“ฑ๋ก ์‹œ ์กด์žฌํ•˜๋Š” ์—ญ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. diff --git a/src/main/java/subway/constant/Information.java b/src/main/java/subway/constant/Information.java index b8487ca06..ecb975e41 100644 --- a/src/main/java/subway/constant/Information.java +++ b/src/main/java/subway/constant/Information.java @@ -24,6 +24,13 @@ public class Information { public static final String SHOW_LINE_INFO = "\n## ๋…ธ์„  ๋ชฉ๋ก"; public static final String LINK_INFO = "\n## ๊ตฌ๊ฐ„ ๊ด€๋ฆฌ ํ™”๋ฉด\n1. ๊ตฌ๊ฐ„ ๋“ฑ๋ก\n2. ๊ตฌ๊ฐ„ ์‚ญ์ œ\nB. ๋Œ์•„๊ฐ€๊ธฐ\n" + CHOOSE_FUNCTION; + public static final String ADD_LINK_INFO_LINE = "\n## ๋…ธ์„  ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜์„ธ์š”."; + public static final String ADD_LINK_INFO_STATION = "\n## ์—ญ ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜์„ธ์š”."; + public static final String ADD_LINK_INFO_ORDER = "\n## ์ˆœ์„œ๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”."; + public static final String ADD_LINK_SUCCESS = INFO_HEADER + "๊ตฌ๊ฐ„์ด ๋“ฑ๋ก๋˜์—ˆ์Šต๋‹ˆ๋‹ค."; + public static final String DELETE_LINK_INFO_LINE = "\n## ์‚ญ์ œํ•  ๊ตฌ๊ฐ„์˜ ๋…ธ์„  ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜์„ธ์š”."; + public static final String DELETE_LINK_INFO_STATION = "\n## ์‚ญ์ œํ•  ๊ตฌ๊ฐ„์˜ ์—ญ ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜์„ธ์š”."; + public static final String DELETE_LINK_SUCCESS = INFO_HEADER + "๊ตฌ๊ฐ„์ด ์‚ญ์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค."; public static final String PRINT_INFO = "\n## ์ง€ํ•˜์ฒ  ๋…ธ์„ ๋„"; } diff --git a/src/main/java/subway/service/LinkService.java b/src/main/java/subway/service/LinkService.java index 95e1e17b2..008b99252 100644 --- a/src/main/java/subway/service/LinkService.java +++ b/src/main/java/subway/service/LinkService.java @@ -1,18 +1,31 @@ package subway.service; import subway.constant.Information; +import subway.exception.InvalidInputException; import java.util.Scanner; -public class LinkService { +public class LinkService extends CrudService { private Scanner scanner; public LinkService(Scanner scanner) { + super(scanner, Information.LINK_INFO); this.scanner = scanner; } - public void run() { - System.out.println(Information.LINK_INFO); + @Override + public void add() { + + } + + @Override + public void delete() { + + } + + @Override + public void show() { + throw new InvalidInputException(InvalidInputException.ExceptionCode.INVALID_FUNCTION_CODE); } } From 80300549dfe39c4f66833fceb976224c44a24683 Mon Sep 17 00:00:00 2001 From: jiwoo-kimm Date: Fri, 11 Dec 2020 23:07:00 +0900 Subject: [PATCH 28/51] feat(link): run function on user input --- README.md | 2 +- src/main/java/subway/service/LinkService.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index b813455ea..8e7d11c2f 100644 --- a/README.md +++ b/README.md @@ -514,7 +514,7 @@ This project is [MIT](https://github.com/woowacourse/java-subway-map-precourse/b - [x] ๋…ธ์„  ์‚ญ์ œ ์‹œ ์กด์žฌํ•˜๋Š” ๋…ธ์„ ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. - [ ] ๊ตฌ๊ฐ„ ๊ด€๋ฆฌ - [x] ์„ ํƒ์ง€์— ์—†๋Š” ์ž…๋ ฅ์ผ ์‹œ ์—๋Ÿฌ๋ฉ”์„ธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. - - [ ] ์‚ฌ์šฉ์ž ์ž…๋ ฅ์— ๋”ฐ๋ผ ํ•˜์œ„ ๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•œ๋‹ค. + - [x] ์‚ฌ์šฉ์ž ์ž…๋ ฅ์— ๋”ฐ๋ผ ํ•˜์œ„ ๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•œ๋‹ค. - [ ] ๊ตฌ๊ฐ„ ๋“ฑ๋ก ์‹œ ์กด์žฌํ•˜๋Š” ๋…ธ์„ ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. - [ ] ๊ตฌ๊ฐ„ ๋“ฑ๋ก ์‹œ ์กด์žฌํ•˜๋Š” ์—ญ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. - [ ] ๊ตฌ๊ฐ„ ์‚ญ์ œ ์‹œ ์กด์žฌํ•˜๋Š” ๋…ธ์„ ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. diff --git a/src/main/java/subway/service/LinkService.java b/src/main/java/subway/service/LinkService.java index 008b99252..e929cba1d 100644 --- a/src/main/java/subway/service/LinkService.java +++ b/src/main/java/subway/service/LinkService.java @@ -16,12 +16,12 @@ public LinkService(Scanner scanner) { @Override public void add() { - + System.out.println(Information.ADD_LINK_INFO_LINE); } @Override public void delete() { - + System.out.println(Information.DELETE_LINK_INFO_LINE); } @Override From e1e36000ab6dac260550a9b4dcfef8afe7703901 Mon Sep 17 00:00:00 2001 From: jiwoo-kimm Date: Fri, 11 Dec 2020 23:17:39 +0900 Subject: [PATCH 29/51] feat(link): check line exists on add --- README.md | 3 +- src/main/java/subway/domain/Link.java | 26 +++++++++++++ src/main/java/subway/service/LinkService.java | 38 +++++++++++++++++++ 3 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 src/main/java/subway/domain/Link.java diff --git a/README.md b/README.md index 8e7d11c2f..9f1a8f0af 100644 --- a/README.md +++ b/README.md @@ -515,7 +515,8 @@ This project is [MIT](https://github.com/woowacourse/java-subway-map-precourse/b - [ ] ๊ตฌ๊ฐ„ ๊ด€๋ฆฌ - [x] ์„ ํƒ์ง€์— ์—†๋Š” ์ž…๋ ฅ์ผ ์‹œ ์—๋Ÿฌ๋ฉ”์„ธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. - [x] ์‚ฌ์šฉ์ž ์ž…๋ ฅ์— ๋”ฐ๋ผ ํ•˜์œ„ ๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•œ๋‹ค. - - [ ] ๊ตฌ๊ฐ„ ๋“ฑ๋ก ์‹œ ์กด์žฌํ•˜๋Š” ๋…ธ์„ ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. + - [x] ๊ตฌ๊ฐ„ ๋“ฑ๋ก ์‹œ ์กด์žฌํ•˜๋Š” ๋…ธ์„ ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. - [ ] ๊ตฌ๊ฐ„ ๋“ฑ๋ก ์‹œ ์กด์žฌํ•˜๋Š” ์—ญ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. + - [ ] ๊ตฌ๊ฐ„ ๋“ฑ๋ก ์‹œ ์ˆœ์„œ ์ž…๋ ฅ์ด ์ˆซ์ž์ธ์ง€ ํ™•์ธํ•œ๋‹ค. - [ ] ๊ตฌ๊ฐ„ ์‚ญ์ œ ์‹œ ์กด์žฌํ•˜๋Š” ๋…ธ์„ ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. - [ ] ๊ตฌ๊ฐ„ ์‚ญ์ œ ์‹œ ์กด์žฌํ•˜๋Š” ์—ญ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. diff --git a/src/main/java/subway/domain/Link.java b/src/main/java/subway/domain/Link.java new file mode 100644 index 000000000..9e560ddfd --- /dev/null +++ b/src/main/java/subway/domain/Link.java @@ -0,0 +1,26 @@ +package subway.domain; + +public class Link { + + private String lineName; + private String stationName; + private int order; + + public Link(String lineName, String stationName, int order) { + this.lineName = lineName; + this.stationName = stationName; + this.order = order; + } + + public String getLineName() { + return lineName; + } + + public String getStationName() { + return stationName; + } + + public int getOrder() { + return order; + } +} diff --git a/src/main/java/subway/service/LinkService.java b/src/main/java/subway/service/LinkService.java index e929cba1d..a9b5caa70 100644 --- a/src/main/java/subway/service/LinkService.java +++ b/src/main/java/subway/service/LinkService.java @@ -1,7 +1,12 @@ package subway.service; import subway.constant.Information; +import subway.domain.Line; +import subway.domain.Link; +import subway.domain.Station; import subway.exception.InvalidInputException; +import subway.repository.LineRepository; +import subway.repository.StationRepository; import java.util.Scanner; @@ -16,7 +21,40 @@ public LinkService(Scanner scanner) { @Override public void add() { + Link newLink = getNewLinkInput(); + validateNewLink(newLink); + } + + private Link getNewLinkInput() { + String lineName = getLineName(); + String stationName = getStationName(); + int order = getOrder(); + return new Link(lineName, stationName, order); + } + + private String getLineName() { System.out.println(Information.ADD_LINK_INFO_LINE); + return scanner.nextLine(); + } + + private String getStationName() { + System.out.println(Information.ADD_LINK_INFO_STATION); + return scanner.nextLine(); + } + + private int getOrder() { + System.out.println(Information.ADD_LINK_INFO_ORDER); + return Integer.parseInt(scanner.nextLine()); + } + + private void validateNewLink(Link newLink) { + validateLineExists(newLink.getLineName()); + } + + private void validateLineExists(String lineName) { + Line line = new Line(lineName); + if (!LineRepository.lines().contains(line)) + throw new InvalidInputException(InvalidInputException.ExceptionCode.NO_SUCH_LINE); } @Override From 28b53adec42db9384e595f0b74a1dd50af7b2254 Mon Sep 17 00:00:00 2001 From: jiwoo-kimm Date: Fri, 11 Dec 2020 23:19:08 +0900 Subject: [PATCH 30/51] feat(link): check station exists on add --- README.md | 2 +- src/main/java/subway/service/LinkService.java | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 9f1a8f0af..693b1d4a1 100644 --- a/README.md +++ b/README.md @@ -516,7 +516,7 @@ This project is [MIT](https://github.com/woowacourse/java-subway-map-precourse/b - [x] ์„ ํƒ์ง€์— ์—†๋Š” ์ž…๋ ฅ์ผ ์‹œ ์—๋Ÿฌ๋ฉ”์„ธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. - [x] ์‚ฌ์šฉ์ž ์ž…๋ ฅ์— ๋”ฐ๋ผ ํ•˜์œ„ ๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•œ๋‹ค. - [x] ๊ตฌ๊ฐ„ ๋“ฑ๋ก ์‹œ ์กด์žฌํ•˜๋Š” ๋…ธ์„ ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. - - [ ] ๊ตฌ๊ฐ„ ๋“ฑ๋ก ์‹œ ์กด์žฌํ•˜๋Š” ์—ญ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. + - [x] ๊ตฌ๊ฐ„ ๋“ฑ๋ก ์‹œ ์กด์žฌํ•˜๋Š” ์—ญ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. - [ ] ๊ตฌ๊ฐ„ ๋“ฑ๋ก ์‹œ ์ˆœ์„œ ์ž…๋ ฅ์ด ์ˆซ์ž์ธ์ง€ ํ™•์ธํ•œ๋‹ค. - [ ] ๊ตฌ๊ฐ„ ์‚ญ์ œ ์‹œ ์กด์žฌํ•˜๋Š” ๋…ธ์„ ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. - [ ] ๊ตฌ๊ฐ„ ์‚ญ์ œ ์‹œ ์กด์žฌํ•˜๋Š” ์—ญ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. diff --git a/src/main/java/subway/service/LinkService.java b/src/main/java/subway/service/LinkService.java index a9b5caa70..c215b95b8 100644 --- a/src/main/java/subway/service/LinkService.java +++ b/src/main/java/subway/service/LinkService.java @@ -49,6 +49,7 @@ private int getOrder() { private void validateNewLink(Link newLink) { validateLineExists(newLink.getLineName()); + validateStationExists(newLink.getStationName()); } private void validateLineExists(String lineName) { @@ -57,6 +58,12 @@ private void validateLineExists(String lineName) { throw new InvalidInputException(InvalidInputException.ExceptionCode.NO_SUCH_LINE); } + private void validateStationExists(String stationName) { + Station station = new Station(stationName); + if (!StationRepository.stations().contains(station)) + throw new InvalidInputException(InvalidInputException.ExceptionCode.NO_SUCH_STATION); + } + @Override public void delete() { System.out.println(Information.DELETE_LINK_INFO_LINE); From af781290c3f888bca536c7adfe04fa056c9161a1 Mon Sep 17 00:00:00 2001 From: jiwoo-kimm Date: Fri, 11 Dec 2020 23:32:32 +0900 Subject: [PATCH 31/51] feat(link): validate order input if it's integer --- README.md | 3 ++- .../java/subway/exception/InvalidInputException.java | 5 ++++- src/main/java/subway/service/LinkService.java | 12 ++++++++---- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 693b1d4a1..39e5f0451 100644 --- a/README.md +++ b/README.md @@ -517,6 +517,7 @@ This project is [MIT](https://github.com/woowacourse/java-subway-map-precourse/b - [x] ์‚ฌ์šฉ์ž ์ž…๋ ฅ์— ๋”ฐ๋ผ ํ•˜์œ„ ๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•œ๋‹ค. - [x] ๊ตฌ๊ฐ„ ๋“ฑ๋ก ์‹œ ์กด์žฌํ•˜๋Š” ๋…ธ์„ ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. - [x] ๊ตฌ๊ฐ„ ๋“ฑ๋ก ์‹œ ์กด์žฌํ•˜๋Š” ์—ญ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. - - [ ] ๊ตฌ๊ฐ„ ๋“ฑ๋ก ์‹œ ์ˆœ์„œ ์ž…๋ ฅ์ด ์ˆซ์ž์ธ์ง€ ํ™•์ธํ•œ๋‹ค. + - [x] ๊ตฌ๊ฐ„ ๋“ฑ๋ก ์‹œ ์ˆœ์„œ ์ž…๋ ฅ์ด ์ˆซ์ž๊ฐ€ ์•„๋‹ˆ๋ฉด ์—๋Ÿฌ๋ฉ”์„ธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. + - [ ] ๊ตฌ๊ฐ„ ๋“ฑ๋ก ์‹œ ์ˆœ์„œ ์ž…๋ ฅ์ด ๋ฒ”์œ„ ๋‚ด ์ˆซ์ž๊ฐ€ ์•„๋‹ˆ๋ฉด ์—๋Ÿฌ๋ฉ”์„ธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. - [ ] ๊ตฌ๊ฐ„ ์‚ญ์ œ ์‹œ ์กด์žฌํ•˜๋Š” ๋…ธ์„ ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. - [ ] ๊ตฌ๊ฐ„ ์‚ญ์ œ ์‹œ ์กด์žฌํ•˜๋Š” ์—ญ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. diff --git a/src/main/java/subway/exception/InvalidInputException.java b/src/main/java/subway/exception/InvalidInputException.java index 40ad5368a..308622072 100644 --- a/src/main/java/subway/exception/InvalidInputException.java +++ b/src/main/java/subway/exception/InvalidInputException.java @@ -9,7 +9,8 @@ public enum ExceptionCode { DUPLICATE_LINE, INVALID_NAME_LENGTH, NO_SUCH_STATION, - NO_SUCH_LINE; + NO_SUCH_LINE, + NON_NUMBER_INPUT; } private final String HEADER = "\n[ERROR] "; @@ -33,6 +34,8 @@ public String getMessage() { return HEADER + "์กด์žฌํ•˜์ง€ ์•Š๋Š” ์—ญ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค."; if (exceptionCode.equals(ExceptionCode.NO_SUCH_LINE)) return HEADER + "์กด์žฌํ•˜์ง€ ์•Š๋Š” ๋…ธ์„  ์ด๋ฆ„์ž…๋‹ˆ๋‹ค."; + if (exceptionCode.equals(ExceptionCode.NON_NUMBER_INPUT)) + return HEADER + "์ˆœ์„œ๋Š” ์ˆซ์ž๋กœ ์ž…๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค."; return ""; } } diff --git a/src/main/java/subway/service/LinkService.java b/src/main/java/subway/service/LinkService.java index c215b95b8..1b2551ca8 100644 --- a/src/main/java/subway/service/LinkService.java +++ b/src/main/java/subway/service/LinkService.java @@ -21,11 +21,15 @@ public LinkService(Scanner scanner) { @Override public void add() { - Link newLink = getNewLinkInput(); - validateNewLink(newLink); + try { + Link newLink = getNewLinkInput(); + validateNewLink(newLink); + } catch (NumberFormatException e) { + throw new InvalidInputException(InvalidInputException.ExceptionCode.NON_NUMBER_INPUT); + } } - private Link getNewLinkInput() { + private Link getNewLinkInput() throws NumberFormatException { String lineName = getLineName(); String stationName = getStationName(); int order = getOrder(); @@ -42,7 +46,7 @@ private String getStationName() { return scanner.nextLine(); } - private int getOrder() { + private int getOrder() throws NumberFormatException { System.out.println(Information.ADD_LINK_INFO_ORDER); return Integer.parseInt(scanner.nextLine()); } From 3a41cf0dc1e0d2a9e4a0c78606b115c27abc4a6a Mon Sep 17 00:00:00 2001 From: jiwoo-kimm Date: Sat, 12 Dec 2020 00:16:51 +0900 Subject: [PATCH 32/51] feat(link): add new link on proper parameters --- README.md | 2 +- src/main/java/subway/constant/Constant.java | 1 + .../java/subway/constant/InitialData.java | 21 +++++++++-------- src/main/java/subway/domain/Line.java | 6 +++++ .../exception/InvalidInputException.java | 5 +++- .../subway/repository/LineRepository.java | 5 ++++ src/main/java/subway/service/LinkService.java | 23 ++++++++++++++++++- 7 files changed, 50 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 39e5f0451..fef345673 100644 --- a/README.md +++ b/README.md @@ -518,6 +518,6 @@ This project is [MIT](https://github.com/woowacourse/java-subway-map-precourse/b - [x] ๊ตฌ๊ฐ„ ๋“ฑ๋ก ์‹œ ์กด์žฌํ•˜๋Š” ๋…ธ์„ ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. - [x] ๊ตฌ๊ฐ„ ๋“ฑ๋ก ์‹œ ์กด์žฌํ•˜๋Š” ์—ญ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. - [x] ๊ตฌ๊ฐ„ ๋“ฑ๋ก ์‹œ ์ˆœ์„œ ์ž…๋ ฅ์ด ์ˆซ์ž๊ฐ€ ์•„๋‹ˆ๋ฉด ์—๋Ÿฌ๋ฉ”์„ธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. - - [ ] ๊ตฌ๊ฐ„ ๋“ฑ๋ก ์‹œ ์ˆœ์„œ ์ž…๋ ฅ์ด ๋ฒ”์œ„ ๋‚ด ์ˆซ์ž๊ฐ€ ์•„๋‹ˆ๋ฉด ์—๋Ÿฌ๋ฉ”์„ธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. + - [x] ๊ตฌ๊ฐ„ ๋“ฑ๋ก ์‹œ ์ˆœ์„œ ์ž…๋ ฅ์ด ๋ฒ”์œ„ ๋‚ด ์ˆซ์ž๊ฐ€ ์•„๋‹ˆ๋ฉด ์—๋Ÿฌ๋ฉ”์„ธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. - [ ] ๊ตฌ๊ฐ„ ์‚ญ์ œ ์‹œ ์กด์žฌํ•˜๋Š” ๋…ธ์„ ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. - [ ] ๊ตฌ๊ฐ„ ์‚ญ์ œ ์‹œ ์กด์žฌํ•˜๋Š” ์—ญ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. diff --git a/src/main/java/subway/constant/Constant.java b/src/main/java/subway/constant/Constant.java index 4f47915b2..841ee7326 100644 --- a/src/main/java/subway/constant/Constant.java +++ b/src/main/java/subway/constant/Constant.java @@ -3,4 +3,5 @@ public class Constant { public static final int MIN_NAME_LENGTH = 2; + public static final int MIN_ORDER = 0; } diff --git a/src/main/java/subway/constant/InitialData.java b/src/main/java/subway/constant/InitialData.java index af6efe715..15991cc21 100644 --- a/src/main/java/subway/constant/InitialData.java +++ b/src/main/java/subway/constant/InitialData.java @@ -3,12 +3,13 @@ import subway.domain.Line; import subway.domain.Station; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class InitialData { - public static final List stations = Arrays.asList( + public static final List stations = new ArrayList<>(Arrays.asList( new Station("๊ต๋Œ€์—ญ"), new Station("๊ฐ•๋‚จ์—ญ"), new Station("์—ญ์‚ผ์—ญ"), @@ -16,31 +17,31 @@ public class InitialData { new Station("์–‘์žฌ์—ญ"), new Station("์–‘์žฌ์‹œ๋ฏผ์˜์ˆฒ์—ญ"), new Station("๋งค๋ด‰์—ญ") - ); + )); - private static final List lineTwoStations = Arrays.asList( + private static final List lineTwoStations = new ArrayList<>(Arrays.asList( new Station("๊ต๋Œ€์—ญ"), new Station("๊ฐ•๋‚จ์—ญ"), new Station("์—ญ์‚ผ์—ญ") - ); + )); - private static final List lineThreeStations = Arrays.asList( + private static final List lineThreeStations = new ArrayList<>(Arrays.asList( new Station("๊ต๋Œ€์—ญ"), new Station("๋‚จ๋ถ€ํ„ฐ๋ฏธ๋„์—ญ"), new Station("์–‘์žฌ์—ญ"), new Station("๋งค๋ด‰์—ญ") - ); + )); - private static final List lineSinbundangStations = Arrays.asList( + private static final List lineSinbundangStations = new ArrayList<>(Arrays.asList( new Station("๊ฐ•๋‚จ์—ญ"), new Station("์–‘์žฌ์—ญ"), new Station("์–‘์žฌ์‹œ๋ฏผ์˜์ˆฒ์—ญ") - ); + )); - public static final List lines = Arrays.asList( + public static final List lines = new ArrayList<>(Arrays.asList( new Line("2ํ˜ธ์„ ", lineTwoStations), new Line("3ํ˜ธ์„ ", lineThreeStations), new Line("์‹ ๋ถ„๋‹น์„ ", lineSinbundangStations) - ); + )); } diff --git a/src/main/java/subway/domain/Line.java b/src/main/java/subway/domain/Line.java index f01872955..c8019f782 100644 --- a/src/main/java/subway/domain/Line.java +++ b/src/main/java/subway/domain/Line.java @@ -59,4 +59,10 @@ public boolean equals(Object o) { public int hashCode() { return Objects.hash(name); } + + public void addNewLink(Link newLink) { + Station station = new Station(newLink.getStationName()); + int targetIndex = newLink.getOrder(); + stations.add(targetIndex, station); + } } diff --git a/src/main/java/subway/exception/InvalidInputException.java b/src/main/java/subway/exception/InvalidInputException.java index 308622072..230191451 100644 --- a/src/main/java/subway/exception/InvalidInputException.java +++ b/src/main/java/subway/exception/InvalidInputException.java @@ -10,7 +10,8 @@ public enum ExceptionCode { INVALID_NAME_LENGTH, NO_SUCH_STATION, NO_SUCH_LINE, - NON_NUMBER_INPUT; + NON_NUMBER_INPUT, + OUT_OF_LINE_RANGE; } private final String HEADER = "\n[ERROR] "; @@ -36,6 +37,8 @@ public String getMessage() { return HEADER + "์กด์žฌํ•˜์ง€ ์•Š๋Š” ๋…ธ์„  ์ด๋ฆ„์ž…๋‹ˆ๋‹ค."; if (exceptionCode.equals(ExceptionCode.NON_NUMBER_INPUT)) return HEADER + "์ˆœ์„œ๋Š” ์ˆซ์ž๋กœ ์ž…๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค."; + if (exceptionCode.equals(ExceptionCode.OUT_OF_LINE_RANGE)) + return HEADER + "์ˆœ์„œ๋Š” ํ•ด๋‹น ๋…ธ์„ ์˜ ๋ฒ”์œ„ ์•ˆ์—์„œ ์ž…๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค."; return ""; } } diff --git a/src/main/java/subway/repository/LineRepository.java b/src/main/java/subway/repository/LineRepository.java index d4e37473d..9d8ef80bc 100644 --- a/src/main/java/subway/repository/LineRepository.java +++ b/src/main/java/subway/repository/LineRepository.java @@ -26,4 +26,9 @@ public static void addLine(List lines) { public static boolean deleteLineByName(String name) { return lines.removeIf(line -> Objects.equals(line.getName(), name)); } + + public static Line getLineByName(String name) { + int index = lines.indexOf(new Line(name)); + return lines.get(index); + } } diff --git a/src/main/java/subway/service/LinkService.java b/src/main/java/subway/service/LinkService.java index 1b2551ca8..074274e2e 100644 --- a/src/main/java/subway/service/LinkService.java +++ b/src/main/java/subway/service/LinkService.java @@ -10,6 +10,8 @@ import java.util.Scanner; +import static subway.constant.Constant.MIN_ORDER; + public class LinkService extends CrudService { private Scanner scanner; @@ -24,6 +26,7 @@ public void add() { try { Link newLink = getNewLinkInput(); validateNewLink(newLink); + addNewLink(newLink); } catch (NumberFormatException e) { throw new InvalidInputException(InvalidInputException.ExceptionCode.NON_NUMBER_INPUT); } @@ -48,12 +51,13 @@ private String getStationName() { private int getOrder() throws NumberFormatException { System.out.println(Information.ADD_LINK_INFO_ORDER); - return Integer.parseInt(scanner.nextLine()); + return Integer.parseInt(scanner.nextLine()) - 1; } private void validateNewLink(Link newLink) { validateLineExists(newLink.getLineName()); validateStationExists(newLink.getStationName()); + validateOrderInRange(newLink); } private void validateLineExists(String lineName) { @@ -68,6 +72,23 @@ private void validateStationExists(String stationName) { throw new InvalidInputException(InvalidInputException.ExceptionCode.NO_SUCH_STATION); } + private void validateOrderInRange(Link newLink) { + Line line = getTargetLine(newLink.getLineName()); + if (newLink.getOrder() < MIN_ORDER || newLink.getOrder() > line.getStations().size()) + throw new InvalidInputException(InvalidInputException.ExceptionCode.OUT_OF_LINE_RANGE); + } + + private Line getTargetLine(String lineName) { + return LineRepository.getLineByName(lineName); + } + + private void addNewLink(Link newLink) { + Line line = getTargetLine(newLink.getLineName()); + line.addNewLink(newLink); + System.out.println(Information.ADD_LINK_SUCCESS); + } + + @Override public void delete() { System.out.println(Information.DELETE_LINK_INFO_LINE); From 571c6cea86fe9b7228d975e456960aa60f16f060 Mon Sep 17 00:00:00 2001 From: jiwoo-kimm Date: Sat, 12 Dec 2020 00:29:57 +0900 Subject: [PATCH 33/51] feat(link): update up and down ends on add --- README.md | 1 + src/main/java/subway/domain/Line.java | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/README.md b/README.md index fef345673..766da5c68 100644 --- a/README.md +++ b/README.md @@ -519,5 +519,6 @@ This project is [MIT](https://github.com/woowacourse/java-subway-map-precourse/b - [x] ๊ตฌ๊ฐ„ ๋“ฑ๋ก ์‹œ ์กด์žฌํ•˜๋Š” ์—ญ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. - [x] ๊ตฌ๊ฐ„ ๋“ฑ๋ก ์‹œ ์ˆœ์„œ ์ž…๋ ฅ์ด ์ˆซ์ž๊ฐ€ ์•„๋‹ˆ๋ฉด ์—๋Ÿฌ๋ฉ”์„ธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. - [x] ๊ตฌ๊ฐ„ ๋“ฑ๋ก ์‹œ ์ˆœ์„œ ์ž…๋ ฅ์ด ๋ฒ”์œ„ ๋‚ด ์ˆซ์ž๊ฐ€ ์•„๋‹ˆ๋ฉด ์—๋Ÿฌ๋ฉ”์„ธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. + - [x] ๊ตฌ๊ฐ„ ๋“ฑ๋ก ์‹œ ์ƒํ•˜ํ–‰ ์ข…์ ์—ญ์„ ๊ฐฑ์‹ ํ•œ๋‹ค. - [ ] ๊ตฌ๊ฐ„ ์‚ญ์ œ ์‹œ ์กด์žฌํ•˜๋Š” ๋…ธ์„ ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. - [ ] ๊ตฌ๊ฐ„ ์‚ญ์ œ ์‹œ ์กด์žฌํ•˜๋Š” ์—ญ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. diff --git a/src/main/java/subway/domain/Line.java b/src/main/java/subway/domain/Line.java index c8019f782..15f3a5b67 100644 --- a/src/main/java/subway/domain/Line.java +++ b/src/main/java/subway/domain/Line.java @@ -27,6 +27,10 @@ public Line(String name, Station upEnd, Station downEnd) { public Line(String name, List stations) { this.name = name; this.stations = stations; + setUpAndDownEndStations(); + } + + private void setUpAndDownEndStations() { this.upEnd = stations.get(UP_END_INDEX); this.downEnd = stations.get(stations.size() - 1); } @@ -64,5 +68,6 @@ public void addNewLink(Link newLink) { Station station = new Station(newLink.getStationName()); int targetIndex = newLink.getOrder(); stations.add(targetIndex, station); + setUpAndDownEndStations(); } } From 83bfe8b76bcf11f3996358ea48b209d1b0fa2673 Mon Sep 17 00:00:00 2001 From: jiwoo-kimm Date: Sat, 12 Dec 2020 00:39:27 +0900 Subject: [PATCH 34/51] feat(link): check line and station exist on delete --- README.md | 5 +-- src/main/java/subway/domain/Link.java | 5 +++ src/main/java/subway/service/LinkService.java | 31 ++++++++++++++++--- 3 files changed, 35 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 766da5c68..302f8f38f 100644 --- a/README.md +++ b/README.md @@ -520,5 +520,6 @@ This project is [MIT](https://github.com/woowacourse/java-subway-map-precourse/b - [x] ๊ตฌ๊ฐ„ ๋“ฑ๋ก ์‹œ ์ˆœ์„œ ์ž…๋ ฅ์ด ์ˆซ์ž๊ฐ€ ์•„๋‹ˆ๋ฉด ์—๋Ÿฌ๋ฉ”์„ธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. - [x] ๊ตฌ๊ฐ„ ๋“ฑ๋ก ์‹œ ์ˆœ์„œ ์ž…๋ ฅ์ด ๋ฒ”์œ„ ๋‚ด ์ˆซ์ž๊ฐ€ ์•„๋‹ˆ๋ฉด ์—๋Ÿฌ๋ฉ”์„ธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. - [x] ๊ตฌ๊ฐ„ ๋“ฑ๋ก ์‹œ ์ƒํ•˜ํ–‰ ์ข…์ ์—ญ์„ ๊ฐฑ์‹ ํ•œ๋‹ค. - - [ ] ๊ตฌ๊ฐ„ ์‚ญ์ œ ์‹œ ์กด์žฌํ•˜๋Š” ๋…ธ์„ ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. - - [ ] ๊ตฌ๊ฐ„ ์‚ญ์ œ ์‹œ ์กด์žฌํ•˜๋Š” ์—ญ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. + - [x] ๊ตฌ๊ฐ„ ์‚ญ์ œ ์‹œ ์กด์žฌํ•˜๋Š” ๋…ธ์„ ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. + - [x] ๊ตฌ๊ฐ„ ์‚ญ์ œ ์‹œ ์กด์žฌํ•˜๋Š” ์—ญ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. + - [ ] ๊ตฌ๊ฐ„ ์‚ญ์ œ ์‹œ ๋…ธ์„ ์— ๋‚จ์€ ์—ญ์ด 2๊ฐœ ์ดˆ๊ณผ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. diff --git a/src/main/java/subway/domain/Link.java b/src/main/java/subway/domain/Link.java index 9e560ddfd..76e05f11c 100644 --- a/src/main/java/subway/domain/Link.java +++ b/src/main/java/subway/domain/Link.java @@ -12,6 +12,11 @@ public Link(String lineName, String stationName, int order) { this.order = order; } + public Link(String targetLineName, String targetStationName) { + this.lineName = targetLineName; + this.stationName = targetStationName; + } + public String getLineName() { return lineName; } diff --git a/src/main/java/subway/service/LinkService.java b/src/main/java/subway/service/LinkService.java index 074274e2e..a82399689 100644 --- a/src/main/java/subway/service/LinkService.java +++ b/src/main/java/subway/service/LinkService.java @@ -33,18 +33,18 @@ public void add() { } private Link getNewLinkInput() throws NumberFormatException { - String lineName = getLineName(); - String stationName = getStationName(); + String lineName = getLineNameOnAdd(); + String stationName = getStationNameOnAdd(); int order = getOrder(); return new Link(lineName, stationName, order); } - private String getLineName() { + private String getLineNameOnAdd() { System.out.println(Information.ADD_LINK_INFO_LINE); return scanner.nextLine(); } - private String getStationName() { + private String getStationNameOnAdd() { System.out.println(Information.ADD_LINK_INFO_STATION); return scanner.nextLine(); } @@ -91,7 +91,30 @@ private void addNewLink(Link newLink) { @Override public void delete() { + Link targetLink = getTargetLinkInput(); + validateTargetLink(targetLink); + System.out.println(Information.DELETE_LINK_SUCCESS); + } + + private Link getTargetLinkInput() { + String targetLineName = getTargetLineNameOnDelete(); + String targetStationName = getTargetStationNameOnDelete(); + return new Link(targetLineName, targetStationName); + } + + private String getTargetLineNameOnDelete() { System.out.println(Information.DELETE_LINK_INFO_LINE); + return scanner.nextLine(); + } + + private String getTargetStationNameOnDelete() { + System.out.println(Information.DELETE_LINK_INFO_STATION); + return scanner.nextLine(); + } + + private void validateTargetLink(Link targetLink) { + validateLineExists(targetLink.getLineName()); + validateStationExists(targetLink.getStationName()); } @Override From f8b4ddf6cede18f15ded38816ae3664259e3fd85 Mon Sep 17 00:00:00 2001 From: jiwoo-kimm Date: Sat, 12 Dec 2020 00:54:02 +0900 Subject: [PATCH 35/51] feat(link): check remaining link count of the line on delete --- README.md | 5 +++-- src/main/java/subway/constant/Constant.java | 1 + src/main/java/subway/domain/Line.java | 6 ++++++ .../subway/exception/InvalidInputException.java | 5 ++++- src/main/java/subway/service/LinkService.java | 15 +++++++++++++++ 5 files changed, 29 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 302f8f38f..7c03a79a5 100644 --- a/README.md +++ b/README.md @@ -512,7 +512,7 @@ This project is [MIT](https://github.com/woowacourse/java-subway-map-precourse/b - [x] ๋…ธ์„  ๋“ฑ๋ก ์‹œ ์ƒํ–‰ ์ข…์ ์—ญ์ด ์กด์žฌํ•˜๋Š” ์—ญ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. - [x] ๋…ธ์„  ๋“ฑ๋ก ์‹œ ํ•˜ํ–‰ ์ข…์ ์—ญ์ด ์กด์žฌํ•˜๋Š” ์—ญ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. - [x] ๋…ธ์„  ์‚ญ์ œ ์‹œ ์กด์žฌํ•˜๋Š” ๋…ธ์„ ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. -- [ ] ๊ตฌ๊ฐ„ ๊ด€๋ฆฌ +- [x] ๊ตฌ๊ฐ„ ๊ด€๋ฆฌ - [x] ์„ ํƒ์ง€์— ์—†๋Š” ์ž…๋ ฅ์ผ ์‹œ ์—๋Ÿฌ๋ฉ”์„ธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. - [x] ์‚ฌ์šฉ์ž ์ž…๋ ฅ์— ๋”ฐ๋ผ ํ•˜์œ„ ๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•œ๋‹ค. - [x] ๊ตฌ๊ฐ„ ๋“ฑ๋ก ์‹œ ์กด์žฌํ•˜๋Š” ๋…ธ์„ ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. @@ -522,4 +522,5 @@ This project is [MIT](https://github.com/woowacourse/java-subway-map-precourse/b - [x] ๊ตฌ๊ฐ„ ๋“ฑ๋ก ์‹œ ์ƒํ•˜ํ–‰ ์ข…์ ์—ญ์„ ๊ฐฑ์‹ ํ•œ๋‹ค. - [x] ๊ตฌ๊ฐ„ ์‚ญ์ œ ์‹œ ์กด์žฌํ•˜๋Š” ๋…ธ์„ ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. - [x] ๊ตฌ๊ฐ„ ์‚ญ์ œ ์‹œ ์กด์žฌํ•˜๋Š” ์—ญ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. - - [ ] ๊ตฌ๊ฐ„ ์‚ญ์ œ ์‹œ ๋…ธ์„ ์— ๋‚จ์€ ์—ญ์ด 2๊ฐœ ์ดˆ๊ณผ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. + - [x] ๊ตฌ๊ฐ„ ์‚ญ์ œ ์‹œ ๋…ธ์„ ์— ๋‚จ์€ ์—ญ์ด 2๊ฐœ ์ดˆ๊ณผ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. + - [x] ๊ตฌ๊ฐ„ ์‚ญ์ œ ์‹œ ์ƒํ•˜ํ–‰ ์ข…์ ์—ญ์„ ๊ฐฑ์‹ ํ•œ๋‹ค. diff --git a/src/main/java/subway/constant/Constant.java b/src/main/java/subway/constant/Constant.java index 841ee7326..291d2d3c9 100644 --- a/src/main/java/subway/constant/Constant.java +++ b/src/main/java/subway/constant/Constant.java @@ -4,4 +4,5 @@ public class Constant { public static final int MIN_NAME_LENGTH = 2; public static final int MIN_ORDER = 0; + public static final int MIN_LINE_LENGTH = 3; } diff --git a/src/main/java/subway/domain/Line.java b/src/main/java/subway/domain/Line.java index 15f3a5b67..abcba6982 100644 --- a/src/main/java/subway/domain/Line.java +++ b/src/main/java/subway/domain/Line.java @@ -70,4 +70,10 @@ public void addNewLink(Link newLink) { stations.add(targetIndex, station); setUpAndDownEndStations(); } + + public void deleteTargetLink(Link targetLink) { + Station station = new Station(targetLink.getStationName()); + stations.remove(station); + setUpAndDownEndStations(); + } } diff --git a/src/main/java/subway/exception/InvalidInputException.java b/src/main/java/subway/exception/InvalidInputException.java index 230191451..f49151cd1 100644 --- a/src/main/java/subway/exception/InvalidInputException.java +++ b/src/main/java/subway/exception/InvalidInputException.java @@ -11,7 +11,8 @@ public enum ExceptionCode { NO_SUCH_STATION, NO_SUCH_LINE, NON_NUMBER_INPUT, - OUT_OF_LINE_RANGE; + OUT_OF_LINE_RANGE, + NO_LINK_AVAILABLE; } private final String HEADER = "\n[ERROR] "; @@ -39,6 +40,8 @@ public String getMessage() { return HEADER + "์ˆœ์„œ๋Š” ์ˆซ์ž๋กœ ์ž…๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค."; if (exceptionCode.equals(ExceptionCode.OUT_OF_LINE_RANGE)) return HEADER + "์ˆœ์„œ๋Š” ํ•ด๋‹น ๋…ธ์„ ์˜ ๋ฒ”์œ„ ์•ˆ์—์„œ ์ž…๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค."; + if (exceptionCode.equals(ExceptionCode.NO_LINK_AVAILABLE)) + return HEADER + "์—ญ์ด ๋‘ ๊ฐœ ์ดํ•˜์ธ ๋…ธ์„ ์€ ์‚ญ์ œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค"; return ""; } } diff --git a/src/main/java/subway/service/LinkService.java b/src/main/java/subway/service/LinkService.java index a82399689..681590399 100644 --- a/src/main/java/subway/service/LinkService.java +++ b/src/main/java/subway/service/LinkService.java @@ -10,6 +10,7 @@ import java.util.Scanner; +import static subway.constant.Constant.MIN_LINE_LENGTH; import static subway.constant.Constant.MIN_ORDER; public class LinkService extends CrudService { @@ -93,6 +94,7 @@ private void addNewLink(Link newLink) { public void delete() { Link targetLink = getTargetLinkInput(); validateTargetLink(targetLink); + deleteTargetLink(targetLink); System.out.println(Information.DELETE_LINK_SUCCESS); } @@ -115,8 +117,21 @@ private String getTargetStationNameOnDelete() { private void validateTargetLink(Link targetLink) { validateLineExists(targetLink.getLineName()); validateStationExists(targetLink.getStationName()); + validateLineLength(targetLink.getLineName()); } + private void validateLineLength(String lineName) { + Line targetLine = getTargetLine(lineName); + if (targetLine.getStations().size() < MIN_LINE_LENGTH) + throw new InvalidInputException(InvalidInputException.ExceptionCode.NO_LINK_AVAILABLE); + } + + private void deleteTargetLink(Link targetLink) { + Line targetLine = getTargetLine(targetLink.getLineName()); + targetLine.deleteTargetLink(targetLink); + } + + @Override public void show() { throw new InvalidInputException(InvalidInputException.ExceptionCode.INVALID_FUNCTION_CODE); From 32746266509951bbfb622128765a2690e8ff17e4 Mon Sep 17 00:00:00 2001 From: jiwoo-kimm Date: Sat, 12 Dec 2020 01:02:38 +0900 Subject: [PATCH 36/51] feat(station): check station deletable on delete --- README.md | 5 +-- .../exception/InvalidInputException.java | 5 ++- .../java/subway/service/StationService.java | 31 +++++++++++++++++++ 3 files changed, 38 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 7c03a79a5..3a92e8a06 100644 --- a/README.md +++ b/README.md @@ -497,13 +497,14 @@ This project is [MIT](https://github.com/woowacourse/java-subway-map-precourse/b - [x] ์‚ฌ์šฉ์ž ์ž…๋ ฅ์— ๋”ฐ๋ผ ํ•˜์œ„ ๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•œ๋‹ค. - [x] ์‚ฌ์šฉ์ž ์ž…๋ ฅ์ด Q์ธ ๊ฒฝ์šฐ ํ”„๋กœ๊ทธ๋žจ์„ ์™„์ „ ์ข…๋ฃŒํ•œ๋‹ค. - [x] ์‚ฌ์ „๋“ฑ๋ก์ •๋ณด์— ๋”ฐ๋ผ ์ง€ํ•˜์ฒ  ๋…ธ์„ ๋„๋ฅผ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค. -- [ ] ์—ญ ๊ด€๋ฆฌ +- [x] ์—ญ ๊ด€๋ฆฌ - [x] ์„ ํƒ์ง€์— ์—†๋Š” ์ž…๋ ฅ์ผ ์‹œ ์—๋Ÿฌ๋ฉ”์„ธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. - [x] ์‚ฌ์šฉ์ž ์ž…๋ ฅ์— ๋”ฐ๋ผ ํ•˜์œ„ ๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•œ๋‹ค. - [x] ์—ญ ์กฐํšŒ ์‹œ ๋ชจ๋“  ์—ญ์˜ ์ด๋ฆ„์„ ์ค‘๋ณต ์—†์ด ์ถœ๋ ฅํ•œ๋‹ค. - [x] ์—ญ ๋“ฑ๋ก ์‹œ ์ด๋ฆ„ ์ค‘๋ณต์„ ํ™•์ธํ•œ๋‹ค. - [x] ์—ญ ๋“ฑ๋ก ์‹œ ์ด๋ฆ„์ด 2๊ธ€์ž ์ด์ƒ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. - - [ ] ์—ญ ์‚ญ์ œ ์‹œ ๋…ธ์„ ์— ๋“ฑ๋ก๋œ ์—ญ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. + - [x] ์—ญ ์‚ญ์ œ ์‹œ ์กด์žฌํ•˜๋Š” ์—ญ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. + - [x] ์—ญ ์‚ญ์ œ ์‹œ ๋…ธ์„ ์— ๋“ฑ๋ก๋œ ์—ญ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. - [x] ๋…ธ์„  ๊ด€๋ฆฌ - [x] ํ•˜์œ„ ๊ธฐ๋Šฅ์„ ์„ ํƒํ•œ๋‹ค. (์—ญ ๊ด€๋ฆฌ์™€ ๋™์ผ) - [x] ๋…ธ์„  ์กฐํšŒ ์‹œ ๋ชจ๋“  ๋…ธ์„ ์˜ ์ด๋ฆ„์„ ์ค‘๋ณต ์—†์ด ์ถœ๋ ฅํ•œ๋‹ค. diff --git a/src/main/java/subway/exception/InvalidInputException.java b/src/main/java/subway/exception/InvalidInputException.java index f49151cd1..8ed3fb0ee 100644 --- a/src/main/java/subway/exception/InvalidInputException.java +++ b/src/main/java/subway/exception/InvalidInputException.java @@ -12,7 +12,8 @@ public enum ExceptionCode { NO_SUCH_LINE, NON_NUMBER_INPUT, OUT_OF_LINE_RANGE, - NO_LINK_AVAILABLE; + NO_LINK_AVAILABLE, + STATION_LINKED; } private final String HEADER = "\n[ERROR] "; @@ -42,6 +43,8 @@ public String getMessage() { return HEADER + "์ˆœ์„œ๋Š” ํ•ด๋‹น ๋…ธ์„ ์˜ ๋ฒ”์œ„ ์•ˆ์—์„œ ์ž…๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค."; if (exceptionCode.equals(ExceptionCode.NO_LINK_AVAILABLE)) return HEADER + "์—ญ์ด ๋‘ ๊ฐœ ์ดํ•˜์ธ ๋…ธ์„ ์€ ์‚ญ์ œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค"; + if (exceptionCode.equals(ExceptionCode.STATION_LINKED)) + return HEADER + "๋…ธ์„ ์— ์—ฐ๊ฒฐ๋œ ์—ญ์€ ์‚ญ์ œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค"; return ""; } } diff --git a/src/main/java/subway/service/StationService.java b/src/main/java/subway/service/StationService.java index 20517083e..87fe80766 100644 --- a/src/main/java/subway/service/StationService.java +++ b/src/main/java/subway/service/StationService.java @@ -3,12 +3,15 @@ import subway.constant.Constant; import subway.constant.Information; import subway.constant.InitialData; +import subway.domain.Line; import subway.domain.Station; import subway.exception.InvalidInputException; +import subway.repository.LineRepository; import subway.repository.StationRepository; import java.util.Scanner; +import static subway.constant.Information.DELETE_STATION_SUCCESS; import static subway.constant.Information.INFO_HEADER; public class StationService extends CrudService { @@ -57,7 +60,35 @@ private void validateDuplicateStation(Station newStation) { @Override public void delete() { + Station targetStation = getTargetStationInput(); + validateTargetStation(targetStation); + StationRepository.deleteStation(targetStation.getName()); + System.out.println(DELETE_STATION_SUCCESS); + } + + private Station getTargetStationInput() { System.out.println(Information.DELETE_STATION_INFO); + return new Station(scanner.nextLine()); + } + + private void validateTargetStation(Station targetStation) { + validateTargetStationExists(targetStation); + validateTargetStationIsNotLinked(targetStation); + } + + private void validateTargetStationExists(Station targetStation) { + if (!StationRepository.stations().contains(targetStation)) + throw new InvalidInputException(InvalidInputException.ExceptionCode.NO_SUCH_STATION); + } + + private void validateTargetStationIsNotLinked(Station targetStation) { + for (Line line : LineRepository.lines()) + validateTargetStationIsNotInLine(line, targetStation); + } + + private void validateTargetStationIsNotInLine(Line line, Station targetStation) { + if (line.getStations().contains(targetStation)) + throw new InvalidInputException(InvalidInputException.ExceptionCode.STATION_LINKED); } From 459cea1b6180e22518a43fc9d96f597fa6580e3c Mon Sep 17 00:00:00 2001 From: jiwoo-kimm Date: Sat, 12 Dec 2020 01:08:48 +0900 Subject: [PATCH 37/51] feat(print): print all lines and stations --- README.md | 2 ++ src/main/java/subway/constant/Constant.java | 1 + .../java/subway/service/PrintService.java | 23 ++++++++++++++++++- 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 3a92e8a06..72da140db 100644 --- a/README.md +++ b/README.md @@ -525,3 +525,5 @@ This project is [MIT](https://github.com/woowacourse/java-subway-map-precourse/b - [x] ๊ตฌ๊ฐ„ ์‚ญ์ œ ์‹œ ์กด์žฌํ•˜๋Š” ์—ญ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. - [x] ๊ตฌ๊ฐ„ ์‚ญ์ œ ์‹œ ๋…ธ์„ ์— ๋‚จ์€ ์—ญ์ด 2๊ฐœ ์ดˆ๊ณผ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. - [x] ๊ตฌ๊ฐ„ ์‚ญ์ œ ์‹œ ์ƒํ•˜ํ–‰ ์ข…์ ์—ญ์„ ๊ฐฑ์‹ ํ•œ๋‹ค. +- [x] ์ง€ํ•˜์ฒ  ๋…ธ์„ ๋„ + - [x] ๋ชจ๋“  ๋…ธ์„ ๊ณผ ์—ญ์„ ์ˆœ์„œ๋Œ€๋กœ ์ถœ๋ ฅํ•œ๋‹ค. diff --git a/src/main/java/subway/constant/Constant.java b/src/main/java/subway/constant/Constant.java index 291d2d3c9..8e9d5073a 100644 --- a/src/main/java/subway/constant/Constant.java +++ b/src/main/java/subway/constant/Constant.java @@ -5,4 +5,5 @@ public class Constant { public static final int MIN_NAME_LENGTH = 2; public static final int MIN_ORDER = 0; public static final int MIN_LINE_LENGTH = 3; + public static final String LINE = "---"; } diff --git a/src/main/java/subway/service/PrintService.java b/src/main/java/subway/service/PrintService.java index 5491e5f60..286122d6e 100644 --- a/src/main/java/subway/service/PrintService.java +++ b/src/main/java/subway/service/PrintService.java @@ -1,10 +1,31 @@ package subway.service; import subway.constant.Information; +import subway.domain.Line; +import subway.domain.Station; +import subway.repository.LineRepository; + +import static subway.constant.Constant.LINE; +import static subway.constant.Information.INFO_HEADER; public class PrintService { public void run() { - System.out.println(Information.PRINT_INFO); + System.out.print(Information.PRINT_INFO); + printLines(); + } + + private void printLines() { + for (Line line : LineRepository.lines()) { + printLine(line); + System.out.println(); + } + } + + private void printLine(Line line) { + System.out.print(INFO_HEADER + line.getName()); + System.out.print(INFO_HEADER + LINE); + for (Station station : line.getStations()) + System.out.print(INFO_HEADER + station.getName()); } } From 9e611b94167cee28238ccc5c4db881b027576a86 Mon Sep 17 00:00:00 2001 From: jiwoo-kimm Date: Sat, 12 Dec 2020 01:18:56 +0900 Subject: [PATCH 38/51] feat(line): add stations with line on add --- README.md | 1 + src/main/java/subway/service/LineService.java | 20 +++++++++++++++---- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 72da140db..66371b03c 100644 --- a/README.md +++ b/README.md @@ -512,6 +512,7 @@ This project is [MIT](https://github.com/woowacourse/java-subway-map-precourse/b - [x] ๋…ธ์„  ๋“ฑ๋ก ์‹œ ์ด๋ฆ„์ด 2๊ธ€์ž ์ด์ƒ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. - [x] ๋…ธ์„  ๋“ฑ๋ก ์‹œ ์ƒํ–‰ ์ข…์ ์—ญ์ด ์กด์žฌํ•˜๋Š” ์—ญ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. - [x] ๋…ธ์„  ๋“ฑ๋ก ์‹œ ํ•˜ํ–‰ ์ข…์ ์—ญ์ด ์กด์žฌํ•˜๋Š” ์—ญ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. + - [x] ๋…ธ์„  ๋“ฑ๋ก ์‹œ ์ƒํ•˜ํ–‰ ์ข…์ ์—ญ์„ ์—ญ ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ํ•œ๋‹ค. - [x] ๋…ธ์„  ์‚ญ์ œ ์‹œ ์กด์žฌํ•˜๋Š” ๋…ธ์„ ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. - [x] ๊ตฌ๊ฐ„ ๊ด€๋ฆฌ - [x] ์„ ํƒ์ง€์— ์—†๋Š” ์ž…๋ ฅ์ผ ์‹œ ์—๋Ÿฌ๋ฉ”์„ธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. diff --git a/src/main/java/subway/service/LineService.java b/src/main/java/subway/service/LineService.java index a35d468cf..144a3e952 100644 --- a/src/main/java/subway/service/LineService.java +++ b/src/main/java/subway/service/LineService.java @@ -9,6 +9,9 @@ import subway.repository.LineRepository; import subway.repository.StationRepository; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; import java.util.Scanner; import static subway.constant.Information.INFO_HEADER; @@ -32,15 +35,14 @@ private void initLines() { public void add() { Line newLine = getNewLineInput(); validateNewLine(newLine); - LineRepository.addLine(newLine); + addNewLine(newLine); System.out.println(Information.ADD_LINE_SUCCESS); } private Line getNewLineInput() { String name = getNewLineName(); - Station upEnd = getNewLineUpEnd(); - Station downEnd = getNewLineDownEnd(); - Line newLine = new Line(name, upEnd, downEnd); + List endStations = getNewLineEndStations(); + Line newLine = new Line(name, endStations); validateNewLine(newLine); return newLine; } @@ -50,6 +52,12 @@ private String getNewLineName() { return scanner.nextLine(); } + private List getNewLineEndStations() { + Station upEnd = getNewLineUpEnd(); + Station downEnd = getNewLineDownEnd(); + return new ArrayList<>(Arrays.asList(upEnd, downEnd)); + } + private Station getNewLineUpEnd() { System.out.println(Information.ADD_LINE_INFO_UP_END); return new Station(scanner.nextLine()); @@ -82,6 +90,10 @@ private void validateEndStationsExist(Line newLine) { throw new InvalidInputException(InvalidInputException.ExceptionCode.NO_SUCH_STATION); } + private void addNewLine(Line newLine) { + LineRepository.addLine(newLine); + } + @Override public void delete() { From a04bb464ee7008133b4c69c018bbec51476b7ba9 Mon Sep 17 00:00:00 2001 From: jiwoo-kimm Date: Sat, 12 Dec 2020 01:51:06 +0900 Subject: [PATCH 39/51] refactor: realign exception class --- .../exception/InvalidInputException.java | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/main/java/subway/exception/InvalidInputException.java b/src/main/java/subway/exception/InvalidInputException.java index 8ed3fb0ee..f7ed2b956 100644 --- a/src/main/java/subway/exception/InvalidInputException.java +++ b/src/main/java/subway/exception/InvalidInputException.java @@ -2,26 +2,26 @@ public class InvalidInputException extends RuntimeException { + private final String HEADER = "\n[ERROR] "; + private ExceptionCode exceptionCode; + + public InvalidInputException(ExceptionCode exceptionCode) { + this.exceptionCode = exceptionCode; + } + public enum ExceptionCode { INVALID_SERVICE_CODE, INVALID_FUNCTION_CODE, DUPLICATE_STATION, DUPLICATE_LINE, - INVALID_NAME_LENGTH, NO_SUCH_STATION, NO_SUCH_LINE, + INVALID_NAME_LENGTH, NON_NUMBER_INPUT, OUT_OF_LINE_RANGE, NO_LINK_AVAILABLE, STATION_LINKED; - } - private final String HEADER = "\n[ERROR] "; - - private ExceptionCode exceptionCode; - - public InvalidInputException(ExceptionCode exceptionCode) { - this.exceptionCode = exceptionCode; } public String getMessage() { @@ -31,12 +31,12 @@ public String getMessage() { return HEADER + "์ด๋ฏธ ๋“ฑ๋ก๋œ ์—ญ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค."; if (exceptionCode.equals(ExceptionCode.DUPLICATE_LINE)) return HEADER + "์ด๋ฏธ ๋“ฑ๋ก๋œ ๋…ธ์„  ์ด๋ฆ„์ž…๋‹ˆ๋‹ค."; - if (exceptionCode.equals(ExceptionCode.INVALID_NAME_LENGTH)) - return HEADER + "์ด๋ฆ„์€ ๋‘ ๊ธ€์ž ์ด์ƒ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค."; if (exceptionCode.equals(ExceptionCode.NO_SUCH_STATION)) return HEADER + "์กด์žฌํ•˜์ง€ ์•Š๋Š” ์—ญ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค."; if (exceptionCode.equals(ExceptionCode.NO_SUCH_LINE)) return HEADER + "์กด์žฌํ•˜์ง€ ์•Š๋Š” ๋…ธ์„  ์ด๋ฆ„์ž…๋‹ˆ๋‹ค."; + if (exceptionCode.equals(ExceptionCode.INVALID_NAME_LENGTH)) + return HEADER + "์ด๋ฆ„์€ ๋‘ ๊ธ€์ž ์ด์ƒ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค."; if (exceptionCode.equals(ExceptionCode.NON_NUMBER_INPUT)) return HEADER + "์ˆœ์„œ๋Š” ์ˆซ์ž๋กœ ์ž…๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค."; if (exceptionCode.equals(ExceptionCode.OUT_OF_LINE_RANGE)) From 8fb75e3921702e17db7515516fa64d67c9baea5a Mon Sep 17 00:00:00 2001 From: jiwoo-kimm Date: Sat, 12 Dec 2020 01:57:56 +0900 Subject: [PATCH 40/51] refactor: remove unused constructor --- src/main/java/subway/domain/Line.java | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/main/java/subway/domain/Line.java b/src/main/java/subway/domain/Line.java index abcba6982..d2c29c9be 100644 --- a/src/main/java/subway/domain/Line.java +++ b/src/main/java/subway/domain/Line.java @@ -18,12 +18,6 @@ public Line(String name) { this.name = name; } - public Line(String name, Station upEnd, Station downEnd) { - this.name = name; - this.upEnd = upEnd; - this.downEnd = downEnd; - } - public Line(String name, List stations) { this.name = name; this.stations = stations; From 5c3f57485e227173e54e83d8eee5022bd252889e Mon Sep 17 00:00:00 2001 From: jiwoo-kimm Date: Sat, 12 Dec 2020 02:01:03 +0900 Subject: [PATCH 41/51] style: realign --- src/main/java/subway/domain/Line.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/subway/domain/Line.java b/src/main/java/subway/domain/Line.java index d2c29c9be..837aea7cf 100644 --- a/src/main/java/subway/domain/Line.java +++ b/src/main/java/subway/domain/Line.java @@ -11,7 +11,6 @@ public class Line { private String name; private Station upEnd; private Station downEnd; - private List stations = new ArrayList<>(); public Line(String name) { @@ -58,6 +57,7 @@ public int hashCode() { return Objects.hash(name); } + public void addNewLink(Link newLink) { Station station = new Station(newLink.getStationName()); int targetIndex = newLink.getOrder(); From e8524cfa87bc021f30ead48bd43b1a69de70d332 Mon Sep 17 00:00:00 2001 From: jiwoo-kimm Date: Sat, 12 Dec 2020 02:07:17 +0900 Subject: [PATCH 42/51] refactor: rename constants --- src/main/java/subway/constant/Constant.java | 2 +- src/main/java/subway/constant/Service.java | 2 +- src/main/java/subway/service/LinkService.java | 4 ++-- src/main/java/subway/service/MainService.java | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/subway/constant/Constant.java b/src/main/java/subway/constant/Constant.java index 8e9d5073a..1cffd535d 100644 --- a/src/main/java/subway/constant/Constant.java +++ b/src/main/java/subway/constant/Constant.java @@ -4,6 +4,6 @@ public class Constant { public static final int MIN_NAME_LENGTH = 2; public static final int MIN_ORDER = 0; - public static final int MIN_LINE_LENGTH = 3; + public static final int MIN_STATIONS_IN_LINE = 3; public static final String LINE = "---"; } diff --git a/src/main/java/subway/constant/Service.java b/src/main/java/subway/constant/Service.java index b5c45f1da..d0162f949 100644 --- a/src/main/java/subway/constant/Service.java +++ b/src/main/java/subway/constant/Service.java @@ -10,7 +10,7 @@ public enum Service { STATION("1"), LINE("2"), LINK("3"), - MAP("4"), + PRINT("4"), QUIT("Q"); private static List serviceCodes = new ArrayList<>(); diff --git a/src/main/java/subway/service/LinkService.java b/src/main/java/subway/service/LinkService.java index 681590399..ebde0b366 100644 --- a/src/main/java/subway/service/LinkService.java +++ b/src/main/java/subway/service/LinkService.java @@ -10,7 +10,7 @@ import java.util.Scanner; -import static subway.constant.Constant.MIN_LINE_LENGTH; +import static subway.constant.Constant.MIN_STATIONS_IN_LINE; import static subway.constant.Constant.MIN_ORDER; public class LinkService extends CrudService { @@ -122,7 +122,7 @@ private void validateTargetLink(Link targetLink) { private void validateLineLength(String lineName) { Line targetLine = getTargetLine(lineName); - if (targetLine.getStations().size() < MIN_LINE_LENGTH) + if (targetLine.getStations().size() < MIN_STATIONS_IN_LINE) throw new InvalidInputException(InvalidInputException.ExceptionCode.NO_LINK_AVAILABLE); } diff --git a/src/main/java/subway/service/MainService.java b/src/main/java/subway/service/MainService.java index 8daf2d31d..40fa3b7fd 100644 --- a/src/main/java/subway/service/MainService.java +++ b/src/main/java/subway/service/MainService.java @@ -57,7 +57,7 @@ private void runSelectedService(String selectedService) { lineService.run(); if (selectedService.equals(Service.LINK.getCode())) linkService.run(); - if (selectedService.equals(Service.MAP.getCode())) + if (selectedService.equals(Service.PRINT.getCode())) printService.run(); if (selectedService.equals(Service.QUIT.getCode())) isContinue = false; From 623283db0f1920bc4537f5a02b7696fa57726db5 Mon Sep 17 00:00:00 2001 From: jiwoo-kimm Date: Sat, 12 Dec 2020 02:10:15 +0900 Subject: [PATCH 43/51] refactor: rename constant --- .../exception/InvalidInputException.java | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/main/java/subway/exception/InvalidInputException.java b/src/main/java/subway/exception/InvalidInputException.java index f7ed2b956..1acb5858c 100644 --- a/src/main/java/subway/exception/InvalidInputException.java +++ b/src/main/java/subway/exception/InvalidInputException.java @@ -2,7 +2,7 @@ public class InvalidInputException extends RuntimeException { - private final String HEADER = "\n[ERROR] "; + private final String ERROR_HEADER = "\n[ERROR] "; private ExceptionCode exceptionCode; public InvalidInputException(ExceptionCode exceptionCode) { @@ -26,25 +26,25 @@ public enum ExceptionCode { public String getMessage() { if (exceptionCode.equals(ExceptionCode.INVALID_SERVICE_CODE) || exceptionCode.equals(ExceptionCode.INVALID_FUNCTION_CODE)) - return HEADER + "์„ ํƒํ•  ์ˆ˜ ์—†๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค."; + return ERROR_HEADER + "์„ ํƒํ•  ์ˆ˜ ์—†๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค."; if (exceptionCode.equals(ExceptionCode.DUPLICATE_STATION)) - return HEADER + "์ด๋ฏธ ๋“ฑ๋ก๋œ ์—ญ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค."; + return ERROR_HEADER + "์ด๋ฏธ ๋“ฑ๋ก๋œ ์—ญ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค."; if (exceptionCode.equals(ExceptionCode.DUPLICATE_LINE)) - return HEADER + "์ด๋ฏธ ๋“ฑ๋ก๋œ ๋…ธ์„  ์ด๋ฆ„์ž…๋‹ˆ๋‹ค."; + return ERROR_HEADER + "์ด๋ฏธ ๋“ฑ๋ก๋œ ๋…ธ์„  ์ด๋ฆ„์ž…๋‹ˆ๋‹ค."; if (exceptionCode.equals(ExceptionCode.NO_SUCH_STATION)) - return HEADER + "์กด์žฌํ•˜์ง€ ์•Š๋Š” ์—ญ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค."; + return ERROR_HEADER + "์กด์žฌํ•˜์ง€ ์•Š๋Š” ์—ญ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค."; if (exceptionCode.equals(ExceptionCode.NO_SUCH_LINE)) - return HEADER + "์กด์žฌํ•˜์ง€ ์•Š๋Š” ๋…ธ์„  ์ด๋ฆ„์ž…๋‹ˆ๋‹ค."; + return ERROR_HEADER + "์กด์žฌํ•˜์ง€ ์•Š๋Š” ๋…ธ์„  ์ด๋ฆ„์ž…๋‹ˆ๋‹ค."; if (exceptionCode.equals(ExceptionCode.INVALID_NAME_LENGTH)) - return HEADER + "์ด๋ฆ„์€ ๋‘ ๊ธ€์ž ์ด์ƒ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค."; + return ERROR_HEADER + "์ด๋ฆ„์€ ๋‘ ๊ธ€์ž ์ด์ƒ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค."; if (exceptionCode.equals(ExceptionCode.NON_NUMBER_INPUT)) - return HEADER + "์ˆœ์„œ๋Š” ์ˆซ์ž๋กœ ์ž…๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค."; + return ERROR_HEADER + "์ˆœ์„œ๋Š” ์ˆซ์ž๋กœ ์ž…๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค."; if (exceptionCode.equals(ExceptionCode.OUT_OF_LINE_RANGE)) - return HEADER + "์ˆœ์„œ๋Š” ํ•ด๋‹น ๋…ธ์„ ์˜ ๋ฒ”์œ„ ์•ˆ์—์„œ ์ž…๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค."; + return ERROR_HEADER + "์ˆœ์„œ๋Š” ํ•ด๋‹น ๋…ธ์„ ์˜ ๋ฒ”์œ„ ์•ˆ์—์„œ ์ž…๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค."; if (exceptionCode.equals(ExceptionCode.NO_LINK_AVAILABLE)) - return HEADER + "์—ญ์ด ๋‘ ๊ฐœ ์ดํ•˜์ธ ๋…ธ์„ ์€ ์‚ญ์ œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค"; + return ERROR_HEADER + "์—ญ์ด ๋‘ ๊ฐœ ์ดํ•˜์ธ ๋…ธ์„ ์€ ์‚ญ์ œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค"; if (exceptionCode.equals(ExceptionCode.STATION_LINKED)) - return HEADER + "๋…ธ์„ ์— ์—ฐ๊ฒฐ๋œ ์—ญ์€ ์‚ญ์ œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค"; + return ERROR_HEADER + "๋…ธ์„ ์— ์—ฐ๊ฒฐ๋œ ์—ญ์€ ์‚ญ์ œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค"; return ""; } } From e50914ad3905df94ba6de3ccdfee76c78ee73a4b Mon Sep 17 00:00:00 2001 From: jiwoo-kimm Date: Sat, 12 Dec 2020 02:10:59 +0900 Subject: [PATCH 44/51] refactor: rename method --- src/main/java/subway/repository/LineRepository.java | 1 + src/main/java/subway/repository/StationRepository.java | 3 ++- src/main/java/subway/service/StationService.java | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/subway/repository/LineRepository.java b/src/main/java/subway/repository/LineRepository.java index 9d8ef80bc..9b4fb40d0 100644 --- a/src/main/java/subway/repository/LineRepository.java +++ b/src/main/java/subway/repository/LineRepository.java @@ -8,6 +8,7 @@ import java.util.Objects; public class LineRepository { + private static final List lines = new ArrayList<>(); public static List lines() { diff --git a/src/main/java/subway/repository/StationRepository.java b/src/main/java/subway/repository/StationRepository.java index 067c33c2e..720e98012 100644 --- a/src/main/java/subway/repository/StationRepository.java +++ b/src/main/java/subway/repository/StationRepository.java @@ -8,6 +8,7 @@ import java.util.Objects; public class StationRepository { + private static final List stations = new ArrayList<>(); public static List stations() { @@ -23,7 +24,7 @@ public static void addStation(List stations) { addStation(station); } - public static boolean deleteStation(String name) { + public static boolean deleteStationByName(String name) { return stations.removeIf(station -> Objects.equals(station.getName(), name)); } } diff --git a/src/main/java/subway/service/StationService.java b/src/main/java/subway/service/StationService.java index 87fe80766..2255a80e4 100644 --- a/src/main/java/subway/service/StationService.java +++ b/src/main/java/subway/service/StationService.java @@ -62,7 +62,7 @@ private void validateDuplicateStation(Station newStation) { public void delete() { Station targetStation = getTargetStationInput(); validateTargetStation(targetStation); - StationRepository.deleteStation(targetStation.getName()); + StationRepository.deleteStationByName(targetStation.getName()); System.out.println(DELETE_STATION_SUCCESS); } From 4b99d669a7a55dd32b71f435aeae62a739a0553b Mon Sep 17 00:00:00 2001 From: jiwoo-kimm Date: Sat, 12 Dec 2020 02:35:38 +0900 Subject: [PATCH 45/51] refactor: rename methods in services --- src/main/java/subway/service/CrudService.java | 14 +++++++------- src/main/java/subway/service/LineService.java | 18 ++++++------------ src/main/java/subway/service/LinkService.java | 18 +++++++++--------- src/main/java/subway/service/MainService.java | 4 ++++ src/main/java/subway/service/PrintService.java | 3 ++- .../java/subway/service/StationService.java | 4 ++-- 6 files changed, 30 insertions(+), 31 deletions(-) diff --git a/src/main/java/subway/service/CrudService.java b/src/main/java/subway/service/CrudService.java index 420e7661c..cfd46fa28 100644 --- a/src/main/java/subway/service/CrudService.java +++ b/src/main/java/subway/service/CrudService.java @@ -8,11 +8,11 @@ public abstract class CrudService implements MapService { private Scanner scanner; - private String info; + private String information; - public CrudService(Scanner scanner, String info) { + public CrudService(Scanner scanner, String information) { this.scanner = scanner; - this.info = info; + this.information = information; } @Override @@ -26,13 +26,13 @@ public void run() { } private String selectFunction() { - String line = getFunctionInput(); - Function.validate(line); - return line; + String input = getFunctionInput(); + Function.validate(input); + return input; } private String getFunctionInput() { - System.out.println(info); + System.out.println(information); return scanner.nextLine(); } diff --git a/src/main/java/subway/service/LineService.java b/src/main/java/subway/service/LineService.java index 144a3e952..d4d51af89 100644 --- a/src/main/java/subway/service/LineService.java +++ b/src/main/java/subway/service/LineService.java @@ -35,16 +35,14 @@ private void initLines() { public void add() { Line newLine = getNewLineInput(); validateNewLine(newLine); - addNewLine(newLine); + LineRepository.addLine(newLine); System.out.println(Information.ADD_LINE_SUCCESS); } private Line getNewLineInput() { String name = getNewLineName(); List endStations = getNewLineEndStations(); - Line newLine = new Line(name, endStations); - validateNewLine(newLine); - return newLine; + return new Line(name, endStations); } private String getNewLineName() { @@ -70,7 +68,7 @@ private Station getNewLineDownEnd() { private void validateNewLine(Line newLine) { validateNameLength(newLine); - validateDuplicateLine(newLine); + validateDuplicateLineExists(newLine); validateEndStationsExist(newLine); } @@ -79,7 +77,7 @@ private void validateNameLength(Line newLine) { throw new InvalidInputException(InvalidInputException.ExceptionCode.INVALID_NAME_LENGTH); } - private void validateDuplicateLine(Line newLine) { + private void validateDuplicateLineExists(Line newLine) { if (LineRepository.lines().contains(newLine)) throw new InvalidInputException(InvalidInputException.ExceptionCode.DUPLICATE_LINE); } @@ -90,15 +88,11 @@ private void validateEndStationsExist(Line newLine) { throw new InvalidInputException(InvalidInputException.ExceptionCode.NO_SUCH_STATION); } - private void addNewLine(Line newLine) { - LineRepository.addLine(newLine); - } - @Override public void delete() { String targetLineName = getTargetLineName(); - validateLineExists(targetLineName); + validateTargetLine(targetLineName); LineRepository.deleteLineByName(targetLineName); System.out.println(Information.DELETE_LINE_SUCCESS); } @@ -108,7 +102,7 @@ private String getTargetLineName() { return scanner.nextLine(); } - private void validateLineExists(String targetLineName) { + private void validateTargetLine(String targetLineName) { Line targetLine = new Line(targetLineName); if (!LineRepository.lines().contains(targetLine)) throw new InvalidInputException(InvalidInputException.ExceptionCode.NO_SUCH_LINE); diff --git a/src/main/java/subway/service/LinkService.java b/src/main/java/subway/service/LinkService.java index ebde0b366..4d5848705 100644 --- a/src/main/java/subway/service/LinkService.java +++ b/src/main/java/subway/service/LinkService.java @@ -10,8 +10,8 @@ import java.util.Scanner; -import static subway.constant.Constant.MIN_STATIONS_IN_LINE; import static subway.constant.Constant.MIN_ORDER; +import static subway.constant.Constant.MIN_STATIONS_IN_LINE; public class LinkService extends CrudService { @@ -28,6 +28,7 @@ public void add() { Link newLink = getNewLinkInput(); validateNewLink(newLink); addNewLink(newLink); + System.out.println(Information.ADD_LINK_SUCCESS); } catch (NumberFormatException e) { throw new InvalidInputException(InvalidInputException.ExceptionCode.NON_NUMBER_INPUT); } @@ -36,7 +37,7 @@ public void add() { private Link getNewLinkInput() throws NumberFormatException { String lineName = getLineNameOnAdd(); String stationName = getStationNameOnAdd(); - int order = getOrder(); + int order = getOrderOnAdd(); return new Link(lineName, stationName, order); } @@ -50,7 +51,7 @@ private String getStationNameOnAdd() { return scanner.nextLine(); } - private int getOrder() throws NumberFormatException { + private int getOrderOnAdd() throws NumberFormatException { System.out.println(Information.ADD_LINK_INFO_ORDER); return Integer.parseInt(scanner.nextLine()) - 1; } @@ -74,19 +75,18 @@ private void validateStationExists(String stationName) { } private void validateOrderInRange(Link newLink) { - Line line = getTargetLine(newLink.getLineName()); + Line line = getTargetLineByName(newLink.getLineName()); if (newLink.getOrder() < MIN_ORDER || newLink.getOrder() > line.getStations().size()) throw new InvalidInputException(InvalidInputException.ExceptionCode.OUT_OF_LINE_RANGE); } - private Line getTargetLine(String lineName) { + private Line getTargetLineByName(String lineName) { return LineRepository.getLineByName(lineName); } private void addNewLink(Link newLink) { - Line line = getTargetLine(newLink.getLineName()); + Line line = getTargetLineByName(newLink.getLineName()); line.addNewLink(newLink); - System.out.println(Information.ADD_LINK_SUCCESS); } @@ -121,13 +121,13 @@ private void validateTargetLink(Link targetLink) { } private void validateLineLength(String lineName) { - Line targetLine = getTargetLine(lineName); + Line targetLine = getTargetLineByName(lineName); if (targetLine.getStations().size() < MIN_STATIONS_IN_LINE) throw new InvalidInputException(InvalidInputException.ExceptionCode.NO_LINK_AVAILABLE); } private void deleteTargetLink(Link targetLink) { - Line targetLine = getTargetLine(targetLink.getLineName()); + Line targetLine = getTargetLineByName(targetLink.getLineName()); targetLine.deleteTargetLink(targetLink); } diff --git a/src/main/java/subway/service/MainService.java b/src/main/java/subway/service/MainService.java index 40fa3b7fd..e9b06d74f 100644 --- a/src/main/java/subway/service/MainService.java +++ b/src/main/java/subway/service/MainService.java @@ -18,6 +18,10 @@ public class MainService { public MainService(Scanner scanner) { this.scanner = scanner; + initServices(scanner); + } + + private void initServices(Scanner scanner) { stationService = new StationService(scanner); lineService = new LineService(scanner); linkService = new LinkService(scanner); diff --git a/src/main/java/subway/service/PrintService.java b/src/main/java/subway/service/PrintService.java index 286122d6e..374bb5c10 100644 --- a/src/main/java/subway/service/PrintService.java +++ b/src/main/java/subway/service/PrintService.java @@ -8,8 +8,9 @@ import static subway.constant.Constant.LINE; import static subway.constant.Information.INFO_HEADER; -public class PrintService { +public class PrintService implements MapService { + @Override public void run() { System.out.print(Information.PRINT_INFO); printLines(); diff --git a/src/main/java/subway/service/StationService.java b/src/main/java/subway/service/StationService.java index 2255a80e4..b6837ea3a 100644 --- a/src/main/java/subway/service/StationService.java +++ b/src/main/java/subway/service/StationService.java @@ -44,7 +44,7 @@ private Station getNewStationInput() { private void validateNewStation(Station newStation) { validateNameLength(newStation); - validateDuplicateStation(newStation); + validateDuplicateStationExists(newStation); } private void validateNameLength(Station newStation) { @@ -52,7 +52,7 @@ private void validateNameLength(Station newStation) { throw new InvalidInputException(InvalidInputException.ExceptionCode.INVALID_NAME_LENGTH); } - private void validateDuplicateStation(Station newStation) { + private void validateDuplicateStationExists(Station newStation) { if (StationRepository.stations().contains(newStation)) throw new InvalidInputException(InvalidInputException.ExceptionCode.DUPLICATE_STATION); } From 8a2af762476f2d2529558c99d7a433e70c5b28f3 Mon Sep 17 00:00:00 2001 From: jiwoo-kimm Date: Sat, 12 Dec 2020 02:38:09 +0900 Subject: [PATCH 46/51] style: remove empty line --- src/main/java/subway/exception/InvalidInputException.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/subway/exception/InvalidInputException.java b/src/main/java/subway/exception/InvalidInputException.java index 1acb5858c..ddba858f8 100644 --- a/src/main/java/subway/exception/InvalidInputException.java +++ b/src/main/java/subway/exception/InvalidInputException.java @@ -21,7 +21,6 @@ public enum ExceptionCode { OUT_OF_LINE_RANGE, NO_LINK_AVAILABLE, STATION_LINKED; - } public String getMessage() { From 0873f9ce5f7f28da3de4a9c19326da1a88def900 Mon Sep 17 00:00:00 2001 From: jiwoo-kimm Date: Sat, 12 Dec 2020 02:45:56 +0900 Subject: [PATCH 47/51] docs(readme): update the list to implement --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 66371b03c..f44cb1dc7 100644 --- a/README.md +++ b/README.md @@ -528,3 +528,5 @@ This project is [MIT](https://github.com/woowacourse/java-subway-map-precourse/b - [x] ๊ตฌ๊ฐ„ ์‚ญ์ œ ์‹œ ์ƒํ•˜ํ–‰ ์ข…์ ์—ญ์„ ๊ฐฑ์‹ ํ•œ๋‹ค. - [x] ์ง€ํ•˜์ฒ  ๋…ธ์„ ๋„ - [x] ๋ชจ๋“  ๋…ธ์„ ๊ณผ ์—ญ์„ ์ˆœ์„œ๋Œ€๋กœ ์ถœ๋ ฅํ•œ๋‹ค. +- [ ] ๋ฆฌํŒฉํ† ๋ง + - [ ] ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ UI ๋กœ์ง์„ ๋ถ„๋ฆฌํ•œ๋‹ค. \ No newline at end of file From 1e10619ced40e20fbd4b8e9bedf076868d734bb5 Mon Sep 17 00:00:00 2001 From: jiwoo-kimm Date: Tue, 15 Dec 2020 22:39:12 +0900 Subject: [PATCH 48/51] refactor: add views and move UI logic from service to view --- README.md | 4 +- src/main/java/subway/constant/Constant.java | 2 +- .../java/subway/constant/Information.java | 2 +- src/main/java/subway/service/CrudService.java | 36 +++--- src/main/java/subway/service/LineService.java | 63 ++-------- src/main/java/subway/service/LinkService.java | 59 ++------- src/main/java/subway/service/MainService.java | 42 +++---- .../java/subway/service/PrintService.java | 29 ++--- .../java/subway/service/StationService.java | 35 ++---- src/main/java/subway/view/InputView.java | 119 ++++++++++++++++++ src/main/java/subway/view/OutputView.java | 57 +++++++++ 11 files changed, 255 insertions(+), 193 deletions(-) create mode 100644 src/main/java/subway/view/InputView.java create mode 100644 src/main/java/subway/view/OutputView.java diff --git a/README.md b/README.md index f44cb1dc7..0378dce63 100644 --- a/README.md +++ b/README.md @@ -529,4 +529,6 @@ This project is [MIT](https://github.com/woowacourse/java-subway-map-precourse/b - [x] ์ง€ํ•˜์ฒ  ๋…ธ์„ ๋„ - [x] ๋ชจ๋“  ๋…ธ์„ ๊ณผ ์—ญ์„ ์ˆœ์„œ๋Œ€๋กœ ์ถœ๋ ฅํ•œ๋‹ค. - [ ] ๋ฆฌํŒฉํ† ๋ง - - [ ] ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ UI ๋กœ์ง์„ ๋ถ„๋ฆฌํ•œ๋‹ค. \ No newline at end of file + - [x] ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ UI ๋กœ์ง์„ ๋ถ„๋ฆฌํ•œ๋‹ค. + - [ ] InputView๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ๋ฐ›๋Š”๋‹ค. + - [ ] OutputView๋ฅผ ํ†ตํ•ด ์•ˆ๋‚ด ๋ฌธ๊ตฌ์™€ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. \ No newline at end of file diff --git a/src/main/java/subway/constant/Constant.java b/src/main/java/subway/constant/Constant.java index 1cffd535d..9930e8aba 100644 --- a/src/main/java/subway/constant/Constant.java +++ b/src/main/java/subway/constant/Constant.java @@ -5,5 +5,5 @@ public class Constant { public static final int MIN_NAME_LENGTH = 2; public static final int MIN_ORDER = 0; public static final int MIN_STATIONS_IN_LINE = 3; - public static final String LINE = "---"; + public static final String DIVIDER = "---"; } diff --git a/src/main/java/subway/constant/Information.java b/src/main/java/subway/constant/Information.java index ecb975e41..44005634d 100644 --- a/src/main/java/subway/constant/Information.java +++ b/src/main/java/subway/constant/Information.java @@ -2,7 +2,7 @@ public class Information { - public static final String INFO_HEADER = "\n[INFO] "; + public static final String INFO_HEADER = "[INFO] "; public static final String CHOOSE_FUNCTION = "\n## ์›ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์„ ํƒํ•˜์„ธ์š”."; public static final String MAIN_INFO = "\n## ๋ฉ”์ธ ํ™”๋ฉด\n1. ์—ญ ๊ด€๋ฆฌ\n2. ๋…ธ์„  ๊ด€๋ฆฌ\n3. ๊ตฌ๊ฐ„ ๊ด€๋ฆฌ\n4. ์ง€ํ•˜์ฒ  ๋…ธ์„ ๋„ ์ถœ๋ ฅ\nQ. ์ข…๋ฃŒ\n" + CHOOSE_FUNCTION; diff --git a/src/main/java/subway/service/CrudService.java b/src/main/java/subway/service/CrudService.java index cfd46fa28..3db5a26e7 100644 --- a/src/main/java/subway/service/CrudService.java +++ b/src/main/java/subway/service/CrudService.java @@ -2,40 +2,40 @@ import subway.constant.Function; import subway.exception.InvalidInputException; - -import java.util.Scanner; +import subway.view.InputView; +import subway.view.OutputView; public abstract class CrudService implements MapService { - private Scanner scanner; + private InputView inputView; + private OutputView outputView; private String information; - public CrudService(Scanner scanner, String information) { - this.scanner = scanner; + public CrudService(InputView inputView, OutputView outputView, String information) { + this.inputView = inputView; + this.outputView = outputView; this.information = information; } + public InputView getInputView() { + return inputView; + } + + public OutputView getOutputView() { + return outputView; + } + @Override public void run() { try { - String selectedFunction = selectFunction(); + String selectedFunction = inputView.getFunctionInput(information); + Function.validate(selectedFunction); runSelectedFunction(selectedFunction); } catch (InvalidInputException e) { - System.out.println(e.getMessage()); + outputView.printErrorMessage(e.getMessage()); } } - private String selectFunction() { - String input = getFunctionInput(); - Function.validate(input); - return input; - } - - private String getFunctionInput() { - System.out.println(information); - return scanner.nextLine(); - } - private void runSelectedFunction(String selectedFunction) { if (selectedFunction.equals(Function.ADD.getCode())) add(); diff --git a/src/main/java/subway/service/LineService.java b/src/main/java/subway/service/LineService.java index d4d51af89..13ffb4067 100644 --- a/src/main/java/subway/service/LineService.java +++ b/src/main/java/subway/service/LineService.java @@ -1,28 +1,20 @@ package subway.service; import subway.constant.Constant; -import subway.constant.Information; import subway.constant.InitialData; import subway.domain.Line; -import subway.domain.Station; import subway.exception.InvalidInputException; import subway.repository.LineRepository; import subway.repository.StationRepository; +import subway.view.InputView; +import subway.view.OutputView; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Scanner; - -import static subway.constant.Information.INFO_HEADER; +import static subway.constant.Information.*; public class LineService extends CrudService { - private Scanner scanner; - - public LineService(Scanner scanner) { - super(scanner, Information.LINE_INFO); - this.scanner = scanner; + public LineService(InputView inputView, OutputView outputView) { + super(inputView, outputView, LINE_INFO); initLines(); } @@ -33,37 +25,10 @@ private void initLines() { @Override public void add() { - Line newLine = getNewLineInput(); + Line newLine = getInputView().getNewLineInput(); validateNewLine(newLine); LineRepository.addLine(newLine); - System.out.println(Information.ADD_LINE_SUCCESS); - } - - private Line getNewLineInput() { - String name = getNewLineName(); - List endStations = getNewLineEndStations(); - return new Line(name, endStations); - } - - private String getNewLineName() { - System.out.println(Information.ADD_LINE_INFO); - return scanner.nextLine(); - } - - private List getNewLineEndStations() { - Station upEnd = getNewLineUpEnd(); - Station downEnd = getNewLineDownEnd(); - return new ArrayList<>(Arrays.asList(upEnd, downEnd)); - } - - private Station getNewLineUpEnd() { - System.out.println(Information.ADD_LINE_INFO_UP_END); - return new Station(scanner.nextLine()); - } - - private Station getNewLineDownEnd() { - System.out.println(Information.ADD_LINE_INFO_DOWN_END); - return new Station(scanner.nextLine()); + getOutputView().printInformation(ADD_LINE_SUCCESS); } private void validateNewLine(Line newLine) { @@ -91,15 +56,10 @@ private void validateEndStationsExist(Line newLine) { @Override public void delete() { - String targetLineName = getTargetLineName(); + String targetLineName = getInputView().getTargetLineNameInput(); validateTargetLine(targetLineName); LineRepository.deleteLineByName(targetLineName); - System.out.println(Information.DELETE_LINE_SUCCESS); - } - - private String getTargetLineName() { - System.out.println(Information.DELETE_LINE_INFO); - return scanner.nextLine(); + getOutputView().printInformation(DELETE_LINE_SUCCESS); } private void validateTargetLine(String targetLineName) { @@ -111,9 +71,6 @@ private void validateTargetLine(String targetLineName) { @Override public void show() { - System.out.print(Information.SHOW_LINE_INFO); - for (Line line : LineRepository.lines()) - System.out.print(INFO_HEADER + line.getName()); - System.out.println(); + getOutputView().printLineList(); } } diff --git a/src/main/java/subway/service/LinkService.java b/src/main/java/subway/service/LinkService.java index 4d5848705..59e73da93 100644 --- a/src/main/java/subway/service/LinkService.java +++ b/src/main/java/subway/service/LinkService.java @@ -1,61 +1,36 @@ package subway.service; -import subway.constant.Information; import subway.domain.Line; import subway.domain.Link; import subway.domain.Station; import subway.exception.InvalidInputException; import subway.repository.LineRepository; import subway.repository.StationRepository; - -import java.util.Scanner; +import subway.view.InputView; +import subway.view.OutputView; import static subway.constant.Constant.MIN_ORDER; import static subway.constant.Constant.MIN_STATIONS_IN_LINE; +import static subway.constant.Information.*; public class LinkService extends CrudService { - private Scanner scanner; - - public LinkService(Scanner scanner) { - super(scanner, Information.LINK_INFO); - this.scanner = scanner; + public LinkService(InputView inputView, OutputView outputView) { + super(inputView, outputView, LINK_INFO); } @Override public void add() { try { - Link newLink = getNewLinkInput(); + Link newLink = getInputView().getNewLinkInput(); validateNewLink(newLink); addNewLink(newLink); - System.out.println(Information.ADD_LINK_SUCCESS); + getOutputView().printInformation(ADD_LINK_SUCCESS); } catch (NumberFormatException e) { throw new InvalidInputException(InvalidInputException.ExceptionCode.NON_NUMBER_INPUT); } } - private Link getNewLinkInput() throws NumberFormatException { - String lineName = getLineNameOnAdd(); - String stationName = getStationNameOnAdd(); - int order = getOrderOnAdd(); - return new Link(lineName, stationName, order); - } - - private String getLineNameOnAdd() { - System.out.println(Information.ADD_LINK_INFO_LINE); - return scanner.nextLine(); - } - - private String getStationNameOnAdd() { - System.out.println(Information.ADD_LINK_INFO_STATION); - return scanner.nextLine(); - } - - private int getOrderOnAdd() throws NumberFormatException { - System.out.println(Information.ADD_LINK_INFO_ORDER); - return Integer.parseInt(scanner.nextLine()) - 1; - } - private void validateNewLink(Link newLink) { validateLineExists(newLink.getLineName()); validateStationExists(newLink.getStationName()); @@ -92,26 +67,10 @@ private void addNewLink(Link newLink) { @Override public void delete() { - Link targetLink = getTargetLinkInput(); + Link targetLink = getInputView().getTargetLinkInput(); validateTargetLink(targetLink); deleteTargetLink(targetLink); - System.out.println(Information.DELETE_LINK_SUCCESS); - } - - private Link getTargetLinkInput() { - String targetLineName = getTargetLineNameOnDelete(); - String targetStationName = getTargetStationNameOnDelete(); - return new Link(targetLineName, targetStationName); - } - - private String getTargetLineNameOnDelete() { - System.out.println(Information.DELETE_LINK_INFO_LINE); - return scanner.nextLine(); - } - - private String getTargetStationNameOnDelete() { - System.out.println(Information.DELETE_LINK_INFO_STATION); - return scanner.nextLine(); + getOutputView().printInformation(DELETE_LINK_SUCCESS); } private void validateTargetLink(Link targetLink) { diff --git a/src/main/java/subway/service/MainService.java b/src/main/java/subway/service/MainService.java index e9b06d74f..a0d53676c 100644 --- a/src/main/java/subway/service/MainService.java +++ b/src/main/java/subway/service/MainService.java @@ -1,31 +1,39 @@ package subway.service; -import subway.constant.Information; import subway.constant.Service; import subway.exception.InvalidInputException; +import subway.view.InputView; +import subway.view.OutputView; import java.util.Scanner; public class MainService { - private Scanner scanner; private boolean isContinue = true; + private InputView inputView; + private OutputView outputView; + private StationService stationService; private LineService lineService; private LinkService linkService; private PrintService printService; public MainService(Scanner scanner) { - this.scanner = scanner; - initServices(scanner); + initViews(scanner); + initServices(); + } + + private void initServices() { + stationService = new StationService(inputView, outputView); + lineService = new LineService(inputView, outputView); + linkService = new LinkService(inputView, outputView); + printService = new PrintService(outputView); } - private void initServices(Scanner scanner) { - stationService = new StationService(scanner); - lineService = new LineService(scanner); - linkService = new LinkService(scanner); - printService = new PrintService(); + private void initViews(Scanner scanner) { + this.inputView = new InputView(scanner); + this.outputView = new OutputView(); } @@ -36,24 +44,14 @@ public void start() { private void runService() { try { - String selectedService = selectService(); + String selectedService = inputView.getSelectedServiceInput(); + Service.validate(selectedService); runSelectedService(selectedService); } catch (InvalidInputException e) { - System.out.println(e.getMessage()); + outputView.printErrorMessage(e.getMessage()); } } - private String selectService() { - String line = getServiceInput(); - Service.validate(line); - return line; - } - - private String getServiceInput() { - System.out.println(Information.MAIN_INFO); - return scanner.nextLine(); - } - private void runSelectedService(String selectedService) { if (selectedService.equals(Service.STATION.getCode())) stationService.run(); diff --git a/src/main/java/subway/service/PrintService.java b/src/main/java/subway/service/PrintService.java index 374bb5c10..365565e93 100644 --- a/src/main/java/subway/service/PrintService.java +++ b/src/main/java/subway/service/PrintService.java @@ -1,32 +1,17 @@ package subway.service; -import subway.constant.Information; -import subway.domain.Line; -import subway.domain.Station; -import subway.repository.LineRepository; - -import static subway.constant.Constant.LINE; -import static subway.constant.Information.INFO_HEADER; +import subway.view.OutputView; public class PrintService implements MapService { - @Override - public void run() { - System.out.print(Information.PRINT_INFO); - printLines(); - } + private OutputView outputView; - private void printLines() { - for (Line line : LineRepository.lines()) { - printLine(line); - System.out.println(); - } + public PrintService(OutputView outputView) { + this.outputView = outputView; } - private void printLine(Line line) { - System.out.print(INFO_HEADER + line.getName()); - System.out.print(INFO_HEADER + LINE); - for (Station station : line.getStations()) - System.out.print(INFO_HEADER + station.getName()); + @Override + public void run() { + outputView.printMap(); } } diff --git a/src/main/java/subway/service/StationService.java b/src/main/java/subway/service/StationService.java index b6837ea3a..b82a59524 100644 --- a/src/main/java/subway/service/StationService.java +++ b/src/main/java/subway/service/StationService.java @@ -8,19 +8,16 @@ import subway.exception.InvalidInputException; import subway.repository.LineRepository; import subway.repository.StationRepository; +import subway.view.InputView; +import subway.view.OutputView; -import java.util.Scanner; - +import static subway.constant.Information.ADD_STATION_SUCCESS; import static subway.constant.Information.DELETE_STATION_SUCCESS; -import static subway.constant.Information.INFO_HEADER; public class StationService extends CrudService { - private Scanner scanner; - - public StationService(Scanner scanner) { - super(scanner, Information.STATION_INFO); - this.scanner = scanner; + public StationService(InputView inputView, OutputView outputView) { + super(inputView, outputView, Information.STATION_INFO); initStations(); } @@ -31,16 +28,12 @@ private void initStations() { @Override public void add() { - Station newStation = getNewStationInput(); + Station newStation = getInputView().getNewStationInput(); validateNewStation(newStation); StationRepository.addStation(newStation); - System.out.println(Information.ADD_STATION_SUCCESS); + getOutputView().printInformation(ADD_STATION_SUCCESS); } - private Station getNewStationInput() { - System.out.println(Information.ADD_STATION_INFO); - return new Station(scanner.nextLine()); - } private void validateNewStation(Station newStation) { validateNameLength(newStation); @@ -60,15 +53,10 @@ private void validateDuplicateStationExists(Station newStation) { @Override public void delete() { - Station targetStation = getTargetStationInput(); + Station targetStation = getInputView().getTargetStationInput(); validateTargetStation(targetStation); StationRepository.deleteStationByName(targetStation.getName()); - System.out.println(DELETE_STATION_SUCCESS); - } - - private Station getTargetStationInput() { - System.out.println(Information.DELETE_STATION_INFO); - return new Station(scanner.nextLine()); + getOutputView().printInformation(DELETE_STATION_SUCCESS); } private void validateTargetStation(Station targetStation) { @@ -94,9 +82,6 @@ private void validateTargetStationIsNotInLine(Line line, Station targetStation) @Override public void show() { - System.out.print(Information.SHOW_STATION_INFO); - for (Station station : StationRepository.stations()) - System.out.print(INFO_HEADER + station.getName()); - System.out.println(); + getOutputView().printStationList(); } } diff --git a/src/main/java/subway/view/InputView.java b/src/main/java/subway/view/InputView.java new file mode 100644 index 000000000..767dfa3a0 --- /dev/null +++ b/src/main/java/subway/view/InputView.java @@ -0,0 +1,119 @@ +package subway.view; + +import subway.domain.Line; +import subway.domain.Link; +import subway.domain.Station; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Scanner; + +import static subway.constant.Information.*; + +public class InputView { + + private final Scanner scanner; + + public InputView(Scanner scanner) { + this.scanner = scanner; + } + + public String getFunctionInput(String information) { + System.out.println(information); + return scanner.nextLine(); + } + + + public String getSelectedServiceInput() { + System.out.println(MAIN_INFO); + return scanner.nextLine(); + } + + + public Station getNewStationInput() { + System.out.println(ADD_STATION_INFO); + return new Station(scanner.nextLine()); + } + + + public Station getTargetStationInput() { + System.out.println(DELETE_STATION_INFO); + return new Station(scanner.nextLine()); + } + + + public Line getNewLineInput() { + String name = getNewLineName(); + List endStations = getNewLineEndStations(); + return new Line(name, endStations); + } + + private String getNewLineName() { + System.out.println(ADD_LINE_INFO); + return scanner.nextLine(); + } + + private List getNewLineEndStations() { + Station upEnd = getNewLineUpEnd(); + Station downEnd = getNewLineDownEnd(); + return new ArrayList<>(Arrays.asList(upEnd, downEnd)); + } + + private Station getNewLineUpEnd() { + System.out.println(ADD_LINE_INFO_UP_END); + return new Station(scanner.nextLine()); + } + + private Station getNewLineDownEnd() { + System.out.println(ADD_LINE_INFO_DOWN_END); + return new Station(scanner.nextLine()); + } + + + public String getTargetLineNameInput() { + System.out.println(DELETE_LINE_INFO); + return scanner.nextLine(); + } + + + public Link getNewLinkInput() throws NumberFormatException { + String lineName = getLineNameOnAdd(); + String stationName = getStationNameOnAdd(); + int order = getOrderOnAdd(); + return new Link(lineName, stationName, order); + } + + private String getLineNameOnAdd() { + System.out.println(ADD_LINK_INFO_LINE); + return scanner.nextLine(); + } + + private String getStationNameOnAdd() { + System.out.println(ADD_LINK_INFO_STATION); + return scanner.nextLine(); + } + + private int getOrderOnAdd() throws NumberFormatException { + System.out.println(ADD_LINK_INFO_ORDER); + return Integer.parseInt(scanner.nextLine()) - 1; + } + + + public Link getTargetLinkInput() { + String targetLineName = getTargetLineNameOnDelete(); + String targetStationName = getTargetStationNameOnDelete(); + return new Link(targetLineName, targetStationName); + } + + private String getTargetLineNameOnDelete() { + System.out.println(DELETE_LINK_INFO_LINE); + return scanner.nextLine(); + } + + private String getTargetStationNameOnDelete() { + System.out.println(DELETE_LINK_INFO_STATION); + return scanner.nextLine(); + } + +} diff --git a/src/main/java/subway/view/OutputView.java b/src/main/java/subway/view/OutputView.java new file mode 100644 index 000000000..482b21e3a --- /dev/null +++ b/src/main/java/subway/view/OutputView.java @@ -0,0 +1,57 @@ +package subway.view; + +import subway.domain.Line; +import subway.domain.Station; +import subway.repository.LineRepository; +import subway.repository.StationRepository; + +import static subway.constant.Constant.DIVIDER; +import static subway.constant.Information.*; + +public class OutputView { + + public void printErrorMessage(String message) { + print(message); + } + + public void printInformation(String information) { + printEmptyLine(); + print(information); + } + + private void print(String message) { + System.out.println(message); + } + + public void printStationList() { + print(SHOW_STATION_INFO); + for (Station station : StationRepository.stations()) + print(INFO_HEADER + station.getName()); + } + + private void printEmptyLine() { + print(""); + } + + public void printLineList() { + print(SHOW_LINE_INFO); + for (Line line : LineRepository.lines()) + print(INFO_HEADER + line.getName()); + } + + + public void printMap() { + print(PRINT_INFO); + for (Line line : LineRepository.lines()) { + printLineAndItsStations(line); + printEmptyLine(); + } + } + + private void printLineAndItsStations(Line line) { + print(INFO_HEADER + line.getName()); + print(INFO_HEADER + DIVIDER); + for (Station station : line.getStations()) + print(INFO_HEADER + station.getName()); + } +} From 0c9c82bfba4c1568f456eaae54bf7d827678ca7a Mon Sep 17 00:00:00 2001 From: jiwoo-kimm Date: Tue, 15 Dec 2020 22:59:03 +0900 Subject: [PATCH 49/51] style: realign code --- src/main/java/subway/Application.java | 2 +- src/main/java/subway/service/CrudService.java | 8 ++++---- src/main/java/subway/service/MainService.java | 5 +++-- src/main/java/subway/view/InputView.java | 8 ++++---- src/main/java/subway/view/OutputView.java | 8 ++++---- 5 files changed, 16 insertions(+), 15 deletions(-) diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java index e0f99c035..bf14ff136 100644 --- a/src/main/java/subway/Application.java +++ b/src/main/java/subway/Application.java @@ -9,6 +9,6 @@ public class Application { public static void main(String[] args) { final Scanner scanner = new Scanner(System.in); MainService mainService = new MainService(scanner); - mainService.start(); + mainService.run(); } } diff --git a/src/main/java/subway/service/CrudService.java b/src/main/java/subway/service/CrudService.java index 3db5a26e7..b79735c76 100644 --- a/src/main/java/subway/service/CrudService.java +++ b/src/main/java/subway/service/CrudService.java @@ -9,12 +9,12 @@ public abstract class CrudService implements MapService { private InputView inputView; private OutputView outputView; - private String information; + private String functionInformation; - public CrudService(InputView inputView, OutputView outputView, String information) { + public CrudService(InputView inputView, OutputView outputView, String functionInformation) { this.inputView = inputView; this.outputView = outputView; - this.information = information; + this.functionInformation = functionInformation; } public InputView getInputView() { @@ -28,7 +28,7 @@ public OutputView getOutputView() { @Override public void run() { try { - String selectedFunction = inputView.getFunctionInput(information); + String selectedFunction = inputView.getFunctionInput(functionInformation); Function.validate(selectedFunction); runSelectedFunction(selectedFunction); } catch (InvalidInputException e) { diff --git a/src/main/java/subway/service/MainService.java b/src/main/java/subway/service/MainService.java index a0d53676c..5975cb2da 100644 --- a/src/main/java/subway/service/MainService.java +++ b/src/main/java/subway/service/MainService.java @@ -7,7 +7,7 @@ import java.util.Scanner; -public class MainService { +public class MainService implements MapService { private boolean isContinue = true; @@ -37,7 +37,8 @@ private void initViews(Scanner scanner) { } - public void start() { + @Override + public void run() { while (isContinue) runService(); } diff --git a/src/main/java/subway/view/InputView.java b/src/main/java/subway/view/InputView.java index 767dfa3a0..b4aa4e9b6 100644 --- a/src/main/java/subway/view/InputView.java +++ b/src/main/java/subway/view/InputView.java @@ -19,14 +19,14 @@ public InputView(Scanner scanner) { this.scanner = scanner; } - public String getFunctionInput(String information) { - System.out.println(information); + public String getSelectedServiceInput() { + System.out.println(MAIN_INFO); return scanner.nextLine(); } - public String getSelectedServiceInput() { - System.out.println(MAIN_INFO); + public String getFunctionInput(String information) { + System.out.println(information); return scanner.nextLine(); } diff --git a/src/main/java/subway/view/OutputView.java b/src/main/java/subway/view/OutputView.java index 482b21e3a..3345bb2ff 100644 --- a/src/main/java/subway/view/OutputView.java +++ b/src/main/java/subway/view/OutputView.java @@ -19,6 +19,10 @@ public void printInformation(String information) { print(information); } + private void printEmptyLine() { + print(""); + } + private void print(String message) { System.out.println(message); } @@ -29,10 +33,6 @@ public void printStationList() { print(INFO_HEADER + station.getName()); } - private void printEmptyLine() { - print(""); - } - public void printLineList() { print(SHOW_LINE_INFO); for (Line line : LineRepository.lines()) From af18a44709d40c222d7aa6823a4fc087495e0ce1 Mon Sep 17 00:00:00 2001 From: jiwoo-kimm Date: Tue, 15 Dec 2020 23:25:35 +0900 Subject: [PATCH 50/51] refactor: seperate inputView and outputView functions --- src/main/java/subway/service/CrudService.java | 7 +- src/main/java/subway/service/LineService.java | 41 ++++++- src/main/java/subway/service/LinkService.java | 42 +++++++- src/main/java/subway/service/MainService.java | 9 +- .../java/subway/service/StationService.java | 16 ++- src/main/java/subway/view/InputView.java | 102 ++---------------- 6 files changed, 115 insertions(+), 102 deletions(-) diff --git a/src/main/java/subway/service/CrudService.java b/src/main/java/subway/service/CrudService.java index b79735c76..c10a01631 100644 --- a/src/main/java/subway/service/CrudService.java +++ b/src/main/java/subway/service/CrudService.java @@ -28,7 +28,7 @@ public OutputView getOutputView() { @Override public void run() { try { - String selectedFunction = inputView.getFunctionInput(functionInformation); + String selectedFunction = getSelectedFunction(); Function.validate(selectedFunction); runSelectedFunction(selectedFunction); } catch (InvalidInputException e) { @@ -36,6 +36,11 @@ public void run() { } } + private String getSelectedFunction() { + outputView.printInformation(functionInformation); + return inputView.getSelectedFunctionInput(); + } + private void runSelectedFunction(String selectedFunction) { if (selectedFunction.equals(Function.ADD.getCode())) add(); diff --git a/src/main/java/subway/service/LineService.java b/src/main/java/subway/service/LineService.java index 13ffb4067..0cac4bd38 100644 --- a/src/main/java/subway/service/LineService.java +++ b/src/main/java/subway/service/LineService.java @@ -3,12 +3,17 @@ import subway.constant.Constant; import subway.constant.InitialData; import subway.domain.Line; +import subway.domain.Station; import subway.exception.InvalidInputException; import subway.repository.LineRepository; import subway.repository.StationRepository; import subway.view.InputView; import subway.view.OutputView; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + import static subway.constant.Information.*; public class LineService extends CrudService { @@ -25,12 +30,39 @@ private void initLines() { @Override public void add() { - Line newLine = getInputView().getNewLineInput(); + Line newLine = getNewLine(); validateNewLine(newLine); LineRepository.addLine(newLine); getOutputView().printInformation(ADD_LINE_SUCCESS); } + private Line getNewLine() { + String name = getNewLineName(); + List endStations = getNewLineEndStations(); + return new Line(name, endStations); + } + + private String getNewLineName() { + getOutputView().printInformation(ADD_LINE_INFO); + return getInputView().getLineName(); + } + + private List getNewLineEndStations() { + Station upEnd = getNewLineUpEnd(); + Station downEnd = getNewLineDownEnd(); + return new ArrayList<>(Arrays.asList(upEnd, downEnd)); + } + + private Station getNewLineUpEnd() { + getOutputView().printInformation(ADD_LINE_INFO_UP_END); + return new Station(getInputView().getStationName()); + } + + private Station getNewLineDownEnd() { + getOutputView().printInformation(ADD_LINE_INFO_DOWN_END); + return new Station(getInputView().getStationName()); + } + private void validateNewLine(Line newLine) { validateNameLength(newLine); validateDuplicateLineExists(newLine); @@ -56,12 +88,17 @@ private void validateEndStationsExist(Line newLine) { @Override public void delete() { - String targetLineName = getInputView().getTargetLineNameInput(); + String targetLineName = getTargetLineName(); validateTargetLine(targetLineName); LineRepository.deleteLineByName(targetLineName); getOutputView().printInformation(DELETE_LINE_SUCCESS); } + private String getTargetLineName() { + getOutputView().printInformation(DELETE_STATION_INFO); + return getInputView().getLineName(); + } + private void validateTargetLine(String targetLineName) { Line targetLine = new Line(targetLineName); if (!LineRepository.lines().contains(targetLine)) diff --git a/src/main/java/subway/service/LinkService.java b/src/main/java/subway/service/LinkService.java index 59e73da93..978d8b786 100644 --- a/src/main/java/subway/service/LinkService.java +++ b/src/main/java/subway/service/LinkService.java @@ -22,7 +22,7 @@ public LinkService(InputView inputView, OutputView outputView) { @Override public void add() { try { - Link newLink = getInputView().getNewLinkInput(); + Link newLink = getNewLink(); validateNewLink(newLink); addNewLink(newLink); getOutputView().printInformation(ADD_LINK_SUCCESS); @@ -31,6 +31,28 @@ public void add() { } } + private Link getNewLink() throws NumberFormatException { + String lineName = getLineNameOnAdd(); + String stationName = getStationNameOnAdd(); + int order = getOrderOnAdd(); + return new Link(lineName, stationName, order); + } + + private String getLineNameOnAdd() { + getOutputView().printInformation(ADD_LINK_INFO_LINE); + return getInputView().getLineName(); + } + + private String getStationNameOnAdd() { + getOutputView().printInformation(ADD_LINK_INFO_STATION); + return getInputView().getStationName(); + } + + private int getOrderOnAdd() throws NumberFormatException { + getOutputView().printInformation(ADD_LINK_INFO_ORDER); + return getInputView().getOrder(); + } + private void validateNewLink(Link newLink) { validateLineExists(newLink.getLineName()); validateStationExists(newLink.getStationName()); @@ -67,12 +89,28 @@ private void addNewLink(Link newLink) { @Override public void delete() { - Link targetLink = getInputView().getTargetLinkInput(); + Link targetLink = getTargetLink(); validateTargetLink(targetLink); deleteTargetLink(targetLink); getOutputView().printInformation(DELETE_LINK_SUCCESS); } + private Link getTargetLink() { + String targetLineName = getTargetLineNameOnDelete(); + String targetStationName = getTargetStationNameOnDelete(); + return new Link(targetLineName, targetStationName); + } + + private String getTargetLineNameOnDelete() { + getOutputView().printInformation(DELETE_LINK_INFO_LINE); + return getInputView().getLineName(); + } + + private String getTargetStationNameOnDelete() { + getOutputView().printInformation(DELETE_LINK_INFO_STATION); + return getInputView().getStationName(); + } + private void validateTargetLink(Link targetLink) { validateLineExists(targetLink.getLineName()); validateStationExists(targetLink.getStationName()); diff --git a/src/main/java/subway/service/MainService.java b/src/main/java/subway/service/MainService.java index 5975cb2da..149121d64 100644 --- a/src/main/java/subway/service/MainService.java +++ b/src/main/java/subway/service/MainService.java @@ -7,6 +7,8 @@ import java.util.Scanner; +import static subway.constant.Information.MAIN_INFO; + public class MainService implements MapService { private boolean isContinue = true; @@ -45,7 +47,7 @@ public void run() { private void runService() { try { - String selectedService = inputView.getSelectedServiceInput(); + String selectedService = getSelectedService(); Service.validate(selectedService); runSelectedService(selectedService); } catch (InvalidInputException e) { @@ -53,6 +55,11 @@ private void runService() { } } + private String getSelectedService() { + outputView.printInformation(MAIN_INFO); + return inputView.getSelectedServiceInput(); + } + private void runSelectedService(String selectedService) { if (selectedService.equals(Service.STATION.getCode())) stationService.run(); diff --git a/src/main/java/subway/service/StationService.java b/src/main/java/subway/service/StationService.java index b82a59524..01380b5c3 100644 --- a/src/main/java/subway/service/StationService.java +++ b/src/main/java/subway/service/StationService.java @@ -11,8 +11,7 @@ import subway.view.InputView; import subway.view.OutputView; -import static subway.constant.Information.ADD_STATION_SUCCESS; -import static subway.constant.Information.DELETE_STATION_SUCCESS; +import static subway.constant.Information.*; public class StationService extends CrudService { @@ -28,12 +27,16 @@ private void initStations() { @Override public void add() { - Station newStation = getInputView().getNewStationInput(); + Station newStation = getNewStation(); validateNewStation(newStation); StationRepository.addStation(newStation); getOutputView().printInformation(ADD_STATION_SUCCESS); } + private Station getNewStation() { + getOutputView().printInformation(ADD_STATION_INFO); + return new Station(getInputView().getStationName()); + } private void validateNewStation(Station newStation) { validateNameLength(newStation); @@ -53,12 +56,17 @@ private void validateDuplicateStationExists(Station newStation) { @Override public void delete() { - Station targetStation = getInputView().getTargetStationInput(); + Station targetStation = getTargetStation(); validateTargetStation(targetStation); StationRepository.deleteStationByName(targetStation.getName()); getOutputView().printInformation(DELETE_STATION_SUCCESS); } + private Station getTargetStation() { + getOutputView().printInformation(DELETE_STATION_INFO); + return new Station(getInputView().getStationName()); + } + private void validateTargetStation(Station targetStation) { validateTargetStationExists(targetStation); validateTargetStationIsNotLinked(targetStation); diff --git a/src/main/java/subway/view/InputView.java b/src/main/java/subway/view/InputView.java index b4aa4e9b6..847d7a2ec 100644 --- a/src/main/java/subway/view/InputView.java +++ b/src/main/java/subway/view/InputView.java @@ -1,16 +1,7 @@ package subway.view; -import subway.domain.Line; -import subway.domain.Link; -import subway.domain.Station; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; import java.util.Scanner; -import static subway.constant.Information.*; - public class InputView { private final Scanner scanner; @@ -19,101 +10,28 @@ public InputView(Scanner scanner) { this.scanner = scanner; } - public String getSelectedServiceInput() { - System.out.println(MAIN_INFO); - return scanner.nextLine(); - } - - - public String getFunctionInput(String information) { - System.out.println(information); - return scanner.nextLine(); - } - - public Station getNewStationInput() { - System.out.println(ADD_STATION_INFO); - return new Station(scanner.nextLine()); - } - - - public Station getTargetStationInput() { - System.out.println(DELETE_STATION_INFO); - return new Station(scanner.nextLine()); - } - - - public Line getNewLineInput() { - String name = getNewLineName(); - List endStations = getNewLineEndStations(); - return new Line(name, endStations); - } - - private String getNewLineName() { - System.out.println(ADD_LINE_INFO); + private String userInputString() { return scanner.nextLine(); } - private List getNewLineEndStations() { - Station upEnd = getNewLineUpEnd(); - Station downEnd = getNewLineDownEnd(); - return new ArrayList<>(Arrays.asList(upEnd, downEnd)); - } - - private Station getNewLineUpEnd() { - System.out.println(ADD_LINE_INFO_UP_END); - return new Station(scanner.nextLine()); - } - - private Station getNewLineDownEnd() { - System.out.println(ADD_LINE_INFO_DOWN_END); - return new Station(scanner.nextLine()); - } - - - public String getTargetLineNameInput() { - System.out.println(DELETE_LINE_INFO); - return scanner.nextLine(); + public String getSelectedServiceInput() { + return userInputString(); } - - public Link getNewLinkInput() throws NumberFormatException { - String lineName = getLineNameOnAdd(); - String stationName = getStationNameOnAdd(); - int order = getOrderOnAdd(); - return new Link(lineName, stationName, order); + public String getSelectedFunctionInput() { + return userInputString(); } - private String getLineNameOnAdd() { - System.out.println(ADD_LINK_INFO_LINE); - return scanner.nextLine(); + public String getLineName() { + return userInputString(); } - private String getStationNameOnAdd() { - System.out.println(ADD_LINK_INFO_STATION); - return scanner.nextLine(); + public String getStationName() { + return userInputString(); } - private int getOrderOnAdd() throws NumberFormatException { - System.out.println(ADD_LINK_INFO_ORDER); + public int getOrder() throws NumberFormatException { return Integer.parseInt(scanner.nextLine()) - 1; } - - - public Link getTargetLinkInput() { - String targetLineName = getTargetLineNameOnDelete(); - String targetStationName = getTargetStationNameOnDelete(); - return new Link(targetLineName, targetStationName); - } - - private String getTargetLineNameOnDelete() { - System.out.println(DELETE_LINK_INFO_LINE); - return scanner.nextLine(); - } - - private String getTargetStationNameOnDelete() { - System.out.println(DELETE_LINK_INFO_STATION); - return scanner.nextLine(); - } - } From 9ff0fa5398c7c45f9571136140e7c56c109fd43a Mon Sep 17 00:00:00 2001 From: jiwoo-kimm Date: Tue, 15 Dec 2020 23:26:37 +0900 Subject: [PATCH 51/51] docs(readme): update the list to implement --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 0378dce63..62bce37c6 100644 --- a/README.md +++ b/README.md @@ -528,7 +528,7 @@ This project is [MIT](https://github.com/woowacourse/java-subway-map-precourse/b - [x] ๊ตฌ๊ฐ„ ์‚ญ์ œ ์‹œ ์ƒํ•˜ํ–‰ ์ข…์ ์—ญ์„ ๊ฐฑ์‹ ํ•œ๋‹ค. - [x] ์ง€ํ•˜์ฒ  ๋…ธ์„ ๋„ - [x] ๋ชจ๋“  ๋…ธ์„ ๊ณผ ์—ญ์„ ์ˆœ์„œ๋Œ€๋กœ ์ถœ๋ ฅํ•œ๋‹ค. -- [ ] ๋ฆฌํŒฉํ† ๋ง +- [x] ๋ฆฌํŒฉํ† ๋ง - [x] ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ UI ๋กœ์ง์„ ๋ถ„๋ฆฌํ•œ๋‹ค. - - [ ] InputView๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ๋ฐ›๋Š”๋‹ค. - - [ ] OutputView๋ฅผ ํ†ตํ•ด ์•ˆ๋‚ด ๋ฌธ๊ตฌ์™€ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. \ No newline at end of file + - [x] InputView๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ๋ฐ›๋Š”๋‹ค. + - [x] OutputView๋ฅผ ํ†ตํ•ด ์•ˆ๋‚ด ๋ฌธ๊ตฌ์™€ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. \ No newline at end of file