From 119cba8dfff1c0baf8853989c10c157025462180 Mon Sep 17 00:00:00 2001 From: daeun Date: Thu, 10 Dec 2020 02:28:35 +0900 Subject: [PATCH 01/98] docs(readme): update README.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 구현할 기능 목록 추가 --- docs/README.md | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 docs/README.md diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 000000000..ba88952f8 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,71 @@ +# 지하철 노선도 미션 +우아한테크코스 웹 백엔드 프리코스 3주차 미션 프로젝트입니다. + +
+ +## 👩‍💻 구현할 기능 목록 +### 초기 설정 +#### 지하철 역 +- [ ] 교대역, 강남역, 역삼역, 남부터미널역, 양재역, 양재시민의숲역, 매봉역을 등록한다. + +#### 지하철 노선 +- [ ] 2호선, 3호선, 신분당선을 등록한다. + +#### 지하철 노선도 +- [ ] 2호선에는 `상행 종점` 교대역 - 강남역 - 역삼역 `하행 종점`을 등록한다. +- [ ] 3호선에는 `상행 종점` 교대역 - 남부터미널역 - 양재역 - 매봉역 `하행 종점`을 등록한다. +- [ ] 신분당선에는 `상행 종점` 강남역 - 양재역 - 양재시민의숲역 `하행 종점`을 등록한다. + +### 지하철 역 +- [ ] 지하철 역을 등록한다. + - [ ] 지하철 역 이름은 중복될 수 없다. `예외` + - [ ] 지하철 역 이름은 2글자 이상이어야 한다. `예외` +- [ ] 지하철 역을 삭제한다. + - [ ] 지하철 역이 지하철 노선에 등록된 경우 삭제할 수 없다. `예외` +- [ ] 지하철 역의 목록을 조회한다. + +### 지하철 노선 +- [ ] 지하철 노선을 등록한다. + - [ ] 지하철 노선 이름은 중복될 수 없다. `예외` + - [ ] 지하철 노선 이름은 2글자 이상이어야 한다. `예외` + - [ ] 지하철 노선을 등록할 때 상행 종점역과 하행 종점역을 입력한다. +- [ ] 지하철 노선을 삭제한다. +- [ ] 지하철 노선의 목록을 조회한다. + +### 지하철 구간 +- [ ] 지하철 구간을 추가한다. + - [ ] 하나의 역은 여러 개의 노선에 추가될 수 있다. + - [ ] 새로운 역은 역과 역 사이에 추가될 수 있다. + - [ ] 지하철 노선에 갈래길은 생길 수 없다. +- [ ] 지하철 구간을 삭제한다. + - [ ] 지하철 노선에 등록된 역을 제거할 수 있다. + - [ ] 상행 종점역을 제거할 경우 다음 역이 종점이 된다. + - [ ] 하행 종점역을 제거할 경우 이전 역이 종점이 된다. + - [ ] 지하철 노선에 포함된 역이 2개 이하인 경우 역을 제거할 수 없다. `예외` + +### 지하철 노선도 +- [ ] 지하철 노선도를 조회한다. + - [ ] 지하철 노선의 상행 종점부터 하행 종점까지 연결된 순서대로 역 목록을 조회한다. + +### 입출력 +- [ ] 실행 결과는 `[INFO]`를 붙여서 출력한다. +- [ ] 에러 발생은 `[ERROR]`를 붙여서 출력한다. + +### 돌아가기 +- [ ] 관리/출력 화면에서 메인 화면으로 돌아간다. + - [ ] B 문자를 입력한다. + - [ ] 기능 실행이 완료되면 자동으로 돌아간다. + +### 종료 +- [ ] 메인 화면에서 프로그램을 종료한다. + - [ ] Q 문자를 입력한다. + +### 에러 +- [ ] 에러가 발생하면 다음 입력을 기다린다. + - [ ] 프로그램은 강제 종료되지 않는다. + +
+ +## 📝 License + +This project is [MIT](https://github.com/woowacourse/java-subway-map-precourse/blob/master/LICENSE.md) licensed. From 24f45e187c1d675c5a62177f18271f102956686e Mon Sep 17 00:00:00 2001 From: daeun Date: Thu, 10 Dec 2020 02:36:58 +0900 Subject: [PATCH 02/98] docs(readme): update README.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 확인할 프로그래밍 목록 추가 --- docs/README.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/docs/README.md b/docs/README.md index ba88952f8..f8ede8ac2 100644 --- a/docs/README.md +++ b/docs/README.md @@ -66,6 +66,25 @@
+## ✅ 확인할 프로그래밍 목록 +### 요구사항 +- [ ] 자바 코드 컨벤션을 지키면서 프로그래밍한다. + - [ ] 들여쓰기는 `4 spaces`로 한다. +- [ ] (1 <= indent depth) && (indent depth <= 2)이다. +- [ ] 3항 연산자를 쓰지 않는다. +- [ ] 함수의 길이는 `15라인`을 넘지 않는다. + - [ ] 함수가 한 가지 일만 하도록 최대한 작게 만든다. +- [ ] else 예약어를 쓰지 않는다. + - [ ] `early return`하는 코드를 작성한다. + - [ ] switch/case 문도 사용하지 않는다. + +### 추가사항 +- [ ] 코드 리팩토링을 진행한다. + - [ ] 1주차 피드백을 반영한다. + - [ ] 2주차 피드백을 반영한다. +- [ ] 주석은 Javadoc 형태로 작성한다. +- [ ] README 문서를 상세하게 작성한다. + ## 📝 License This project is [MIT](https://github.com/woowacourse/java-subway-map-precourse/blob/master/LICENSE.md) licensed. From 20e82b6827421aad054844c166ea6709cc1f7a03 Mon Sep 17 00:00:00 2001 From: daeun Date: Thu, 10 Dec 2020 20:17:36 +0900 Subject: [PATCH 03/98] chore(repository): change the path MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Station의 상태를 저장하는 StationRepository 경로 변경 - Line의 상태를 저장하는 LineRepository 경로 변경 --- .../java/subway/{domain => repository}/LineRepository.java | 4 +++- .../java/subway/{domain => repository}/StationRepository.java | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) rename src/main/java/subway/{domain => repository}/LineRepository.java (90%) rename src/main/java/subway/{domain => repository}/StationRepository.java (90%) 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; From d421f29c87f6d33700f9eaa083b4e365c7a46a80 Mon Sep 17 00:00:00 2001 From: daeun Date: Thu, 10 Dec 2020 23:06:49 +0900 Subject: [PATCH 04/98] docs(readme): update README.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 구현할 기능 목록 수정 --- docs/README.md | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/docs/README.md b/docs/README.md index f8ede8ac2..7d6a29bc7 100644 --- a/docs/README.md +++ b/docs/README.md @@ -48,8 +48,19 @@ - [ ] 지하철 노선의 상행 종점부터 하행 종점까지 연결된 순서대로 역 목록을 조회한다. ### 입출력 -- [ ] 실행 결과는 `[INFO]`를 붙여서 출력한다. -- [ ] 에러 발생은 `[ERROR]`를 붙여서 출력한다. +#### 입력 +- [ ] 메인 화면에서 1~4 숫자 또는 Q 문자만 입력한다. `예외` +- [ ] 역 관리 화면에서 1~3 숫자 또는 B 문자만 입력한다. `예외` +- [ ] 노선 관리 화면에서 1~3 숫자 또는 B 문자만 입력한다. `예외` +- [ ] 구간 관리 화면에서 1~2 숫자 또는 B 문자만 입력한다. `예외` + +#### 출력 +- [ ] 메인 화면을 출력한다. +- [ ] 역 관리 화면을 출력한다. +- [ ] 노선 관리 화면을 출력한다. +- [ ] 구간 관리 화면을 출력한다. +- [ ] 각 화면 기능에 대한 실행 결과는 `[INFO]`를 붙여서 출력한다. +- [ ] 각 화면 기능에 대한 에러 발생은 `[ERROR]`를 붙여서 출력한다. ### 돌아가기 - [ ] 관리/출력 화면에서 메인 화면으로 돌아간다. From 19c27185da724b2f9e012a80a486ef5cd0465c4f Mon Sep 17 00:00:00 2001 From: daeun Date: Fri, 11 Dec 2020 00:36:49 +0900 Subject: [PATCH 05/98] feat(subway): print the main screen MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - [입출력] 메인 화면을 출력하는 기능 구현 --- docs/README.md | 2 +- src/main/java/subway/Application.java | 3 +++ .../subway/controller/SubwayController.java | 9 +++++++ src/main/java/subway/type/ScreenType.java | 24 +++++++++++++++++++ src/main/java/subway/view/OutputView.java | 15 ++++++++++++ 5 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 src/main/java/subway/controller/SubwayController.java create mode 100644 src/main/java/subway/type/ScreenType.java create mode 100644 src/main/java/subway/view/OutputView.java diff --git a/docs/README.md b/docs/README.md index 7d6a29bc7..a2d7a41a1 100644 --- a/docs/README.md +++ b/docs/README.md @@ -55,7 +55,7 @@ - [ ] 구간 관리 화면에서 1~2 숫자 또는 B 문자만 입력한다. `예외` #### 출력 -- [ ] 메인 화면을 출력한다. +- [x] 메인 화면을 출력한다. - [ ] 역 관리 화면을 출력한다. - [ ] 노선 관리 화면을 출력한다. - [ ] 구간 관리 화면을 출력한다. diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java index 0bcf786cc..c838b3114 100644 --- a/src/main/java/subway/Application.java +++ b/src/main/java/subway/Application.java @@ -1,10 +1,13 @@ package subway; +import subway.controller.SubwayController; + import java.util.Scanner; public class Application { public static void main(String[] args) { final Scanner scanner = new Scanner(System.in); // TODO: 프로그램 구현 + SubwayController.runSubway(); } } diff --git a/src/main/java/subway/controller/SubwayController.java b/src/main/java/subway/controller/SubwayController.java new file mode 100644 index 000000000..7e055a005 --- /dev/null +++ b/src/main/java/subway/controller/SubwayController.java @@ -0,0 +1,9 @@ +package subway.controller; + +import subway.view.OutputView; + +public class SubwayController { + public static void runSubway() { + OutputView.printMainScreen(); + } +} diff --git a/src/main/java/subway/type/ScreenType.java b/src/main/java/subway/type/ScreenType.java new file mode 100644 index 000000000..00a7f1e64 --- /dev/null +++ b/src/main/java/subway/type/ScreenType.java @@ -0,0 +1,24 @@ +package subway.type; + +/** + * 각종 화면 출력 문구 상수를 모아둔 Enum 클래스 + */ +public enum ScreenType { + MAIN_SCREEN("## 메인 화면\n"), + STATION_MANAGEMENT("1. 역 관리\n"), + LINE_MANAGEMENT("2. 노선 관리\n"), + SECTION_MANAGEMENT("3. 구간 관리\n"), + SUBWAY_MAP_PRINT("4. 지하철 노선도 출력\n"), + QUITTING("Q. 종료\n\n"), + FEATURE_CHOICE("## 원하는 기능을 선택하세요."); + + private final String screen; + + ScreenType(String screen) { + this.screen = screen; + } + + public String getScreen() { + return screen; + } +} diff --git a/src/main/java/subway/view/OutputView.java b/src/main/java/subway/view/OutputView.java new file mode 100644 index 000000000..7b29af795 --- /dev/null +++ b/src/main/java/subway/view/OutputView.java @@ -0,0 +1,15 @@ +package subway.view; + +import subway.type.ScreenType; + +public class OutputView { + public static void printMainScreen() { + System.out.println(ScreenType.MAIN_SCREEN.getScreen() + + ScreenType.STATION_MANAGEMENT.getScreen() + + ScreenType.LINE_MANAGEMENT.getScreen() + + ScreenType.SECTION_MANAGEMENT.getScreen() + + ScreenType.SUBWAY_MAP_PRINT.getScreen() + + ScreenType.QUITTING.getScreen() + + ScreenType.FEATURE_CHOICE.getScreen()); + } +} From f68fa8d1f694a3c11fbb9346b2704109291c5b3a Mon Sep 17 00:00:00 2001 From: daeun Date: Fri, 11 Dec 2020 01:17:54 +0900 Subject: [PATCH 06/98] feat(station-service): initialize subway stations MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - [초기 설정] 지하철 역을 초기 설정하는 기능 구현 --- docs/README.md | 2 +- .../java/subway/service/StationService.java | 17 +++++++++++++++ src/main/java/subway/type/StationType.java | 21 +++++++++++++++++++ 3 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 src/main/java/subway/service/StationService.java create mode 100644 src/main/java/subway/type/StationType.java diff --git a/docs/README.md b/docs/README.md index a2d7a41a1..d3018afcb 100644 --- a/docs/README.md +++ b/docs/README.md @@ -6,7 +6,7 @@ ## 👩‍💻 구현할 기능 목록 ### 초기 설정 #### 지하철 역 -- [ ] 교대역, 강남역, 역삼역, 남부터미널역, 양재역, 양재시민의숲역, 매봉역을 등록한다. +- [x] 교대역, 강남역, 역삼역, 남부터미널역, 양재역, 양재시민의숲역, 매봉역을 등록한다. #### 지하철 노선 - [ ] 2호선, 3호선, 신분당선을 등록한다. diff --git a/src/main/java/subway/service/StationService.java b/src/main/java/subway/service/StationService.java new file mode 100644 index 000000000..8aa61cd3e --- /dev/null +++ b/src/main/java/subway/service/StationService.java @@ -0,0 +1,17 @@ +package subway.service; + +import subway.domain.Station; +import subway.repository.StationRepository; +import subway.type.StationType; + +public class StationService { + public static void initializeStations() { + StationRepository.addStation(new Station(StationType.EDUCATION_UNIVERSITY.getStation())); + StationRepository.addStation(new Station(StationType.GANGNAM.getStation())); + StationRepository.addStation(new Station(StationType.YEOKSAM.getStation())); + StationRepository.addStation(new Station(StationType.NAMBU_BUS_TERMINAL.getStation())); + StationRepository.addStation(new Station(StationType.YANGJAE.getStation())); + StationRepository.addStation(new Station(StationType.YANGJAE_CITIZENS_FOREST.getStation())); + StationRepository.addStation(new Station(StationType.MAEBONG.getStation())); + } +} diff --git a/src/main/java/subway/type/StationType.java b/src/main/java/subway/type/StationType.java new file mode 100644 index 000000000..209627531 --- /dev/null +++ b/src/main/java/subway/type/StationType.java @@ -0,0 +1,21 @@ +package subway.type; + +public enum StationType { + EDUCATION_UNIVERSITY("교대역"), + GANGNAM("강남역"), + YEOKSAM("역삼역"), + NAMBU_BUS_TERMINAL("남부터미널역"), + YANGJAE("양재역"), + YANGJAE_CITIZENS_FOREST("양재시민의숲역"), + MAEBONG("매봉역"); + + private final String station; + + StationType(String station) { + this.station = station; + } + + public String getStation() { + return station; + } +} From fa3c86746248662e673f613324c197dff6e954e7 Mon Sep 17 00:00:00 2001 From: daeun Date: Fri, 11 Dec 2020 01:19:10 +0900 Subject: [PATCH 07/98] feat(line-service): initialize subway lines MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - [초기 설정] 지하철 노선을 초기 설정하는 기능 구현 --- docs/README.md | 2 +- src/main/java/subway/service/LineService.java | 13 ++++++++++++ src/main/java/subway/type/LineType.java | 20 +++++++++++++++++++ 3 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 src/main/java/subway/service/LineService.java create mode 100644 src/main/java/subway/type/LineType.java diff --git a/docs/README.md b/docs/README.md index d3018afcb..30236f882 100644 --- a/docs/README.md +++ b/docs/README.md @@ -9,7 +9,7 @@ - [x] 교대역, 강남역, 역삼역, 남부터미널역, 양재역, 양재시민의숲역, 매봉역을 등록한다. #### 지하철 노선 -- [ ] 2호선, 3호선, 신분당선을 등록한다. +- [x] 2호선, 3호선, 신분당선을 등록한다. #### 지하철 노선도 - [ ] 2호선에는 `상행 종점` 교대역 - 강남역 - 역삼역 `하행 종점`을 등록한다. diff --git a/src/main/java/subway/service/LineService.java b/src/main/java/subway/service/LineService.java new file mode 100644 index 000000000..3491a80a7 --- /dev/null +++ b/src/main/java/subway/service/LineService.java @@ -0,0 +1,13 @@ +package subway.service; + +import subway.domain.Line; +import subway.repository.LineRepository; +import subway.type.LineType; + +public class LineService { + public static void initializeLines() { + LineRepository.addLine(new Line(LineType.TWO.getLine())); + LineRepository.addLine(new Line(LineType.THREE.getLine())); + LineRepository.addLine(new Line(LineType.SHINBUNDANG.getLine())); + } +} diff --git a/src/main/java/subway/type/LineType.java b/src/main/java/subway/type/LineType.java new file mode 100644 index 000000000..9cd3b6778 --- /dev/null +++ b/src/main/java/subway/type/LineType.java @@ -0,0 +1,20 @@ +package subway.type; + +/** + * 지하철 노선 초기 설정 상수를 모아둔 Enum 클래스 + */ +public enum LineType { + TWO("2호선"), + THREE("3호선"), + SHINBUNDANG("신분당선"); + + private final String line; + + LineType(String line) { + this.line = line; + } + + public String getLine() { + return line; + } +} From c413082470858d755fd672140683c8ba1122bf94 Mon Sep 17 00:00:00 2001 From: daeun Date: Fri, 11 Dec 2020 03:29:21 +0900 Subject: [PATCH 08/98] docs(readme): update README.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 구현할 기능 목록 수정 --- docs/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/README.md b/docs/README.md index 30236f882..7de930cfa 100644 --- a/docs/README.md +++ b/docs/README.md @@ -36,6 +36,7 @@ - [ ] 지하철 구간을 추가한다. - [ ] 하나의 역은 여러 개의 노선에 추가될 수 있다. - [ ] 새로운 역은 역과 역 사이에 추가될 수 있다. + - [ ] 새로운 역의 삽입 순서를 입력한다. `예외` - [ ] 지하철 노선에 갈래길은 생길 수 없다. - [ ] 지하철 구간을 삭제한다. - [ ] 지하철 노선에 등록된 역을 제거할 수 있다. From 38b451e8b40d240a69218d151a8d547b2ad1b9d9 Mon Sep 17 00:00:00 2001 From: daeun Date: Fri, 11 Dec 2020 03:46:49 +0900 Subject: [PATCH 09/98] feat(subway): print the screens MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - [입출력] 역 관리 화면을 출력하는 기능 구현 - [입출력] 노선 관리 화면을 출력하는 기능 구현 - [입출력] 구간 관리 화면을 출력하는 기능 구현 --- docs/README.md | 6 +++--- src/main/java/subway/type/ScreenType.java | 14 +++++++++++- src/main/java/subway/view/OutputView.java | 26 +++++++++++++++++++++++ 3 files changed, 42 insertions(+), 4 deletions(-) diff --git a/docs/README.md b/docs/README.md index 7de930cfa..64b45837f 100644 --- a/docs/README.md +++ b/docs/README.md @@ -57,9 +57,9 @@ #### 출력 - [x] 메인 화면을 출력한다. -- [ ] 역 관리 화면을 출력한다. -- [ ] 노선 관리 화면을 출력한다. -- [ ] 구간 관리 화면을 출력한다. +- [x] 역 관리 화면을 출력한다. +- [x] 노선 관리 화면을 출력한다. +- [x] 구간 관리 화면을 출력한다. - [ ] 각 화면 기능에 대한 실행 결과는 `[INFO]`를 붙여서 출력한다. - [ ] 각 화면 기능에 대한 에러 발생은 `[ERROR]`를 붙여서 출력한다. diff --git a/src/main/java/subway/type/ScreenType.java b/src/main/java/subway/type/ScreenType.java index 00a7f1e64..66d8906c0 100644 --- a/src/main/java/subway/type/ScreenType.java +++ b/src/main/java/subway/type/ScreenType.java @@ -10,7 +10,19 @@ public enum ScreenType { SECTION_MANAGEMENT("3. 구간 관리\n"), SUBWAY_MAP_PRINT("4. 지하철 노선도 출력\n"), QUITTING("Q. 종료\n\n"), - FEATURE_CHOICE("## 원하는 기능을 선택하세요."); + FEATURE_CHOICE("## 원하는 기능을 선택하세요."), + STATION_MANAGEMENT_SCREEN("## 역 관리 화면\n"), + STATION_ADDING("1. 역 등록\n"), + STATION_DELETION("2. 역 삭제\n"), + STATION_PRINT("3. 역 조회\n"), + BACK("B. 돌아가기\n\n"), + LINE_MANAGEMENT_SCREEN("## 노선 관리 화면\n"), + LINE_ADDING("1. 노선 등록\n"), + LINE_DELETION("2. 노선 삭제\n"), + LINE_PRINT("3. 노선 조회\n"), + SECTION_MANAGEMENT_SCREEN("## 구간 관리 화면\n"), + SECTION_ADDING("1. 구간 등록\n"), + SECTION_DELETION("2. 구간 삭제\n"); private final String screen; diff --git a/src/main/java/subway/view/OutputView.java b/src/main/java/subway/view/OutputView.java index 7b29af795..706f43463 100644 --- a/src/main/java/subway/view/OutputView.java +++ b/src/main/java/subway/view/OutputView.java @@ -12,4 +12,30 @@ public static void printMainScreen() { + ScreenType.QUITTING.getScreen() + ScreenType.FEATURE_CHOICE.getScreen()); } + + public static void printStationManagementScreen() { + System.out.println(ScreenType.STATION_MANAGEMENT_SCREEN.getScreen() + + ScreenType.STATION_ADDING.getScreen() + + ScreenType.STATION_DELETION.getScreen() + + ScreenType.STATION_PRINT.getScreen() + + ScreenType.BACK.getScreen() + + ScreenType.FEATURE_CHOICE.getScreen()); + } + + public static void printLineManagementScreen() { + System.out.println(ScreenType.LINE_MANAGEMENT_SCREEN.getScreen() + + ScreenType.LINE_ADDING.getScreen() + + ScreenType.LINE_DELETION.getScreen() + + ScreenType.LINE_PRINT.getScreen() + + ScreenType.BACK.getScreen() + + ScreenType.FEATURE_CHOICE.getScreen()); + } + + public static void printSectionManagementScreen() { + System.out.println(ScreenType.SECTION_MANAGEMENT_SCREEN.getScreen() + + ScreenType.SECTION_ADDING.getScreen() + + ScreenType.SECTION_DELETION.getScreen() + + ScreenType.BACK.getScreen() + + ScreenType.FEATURE_CHOICE.getScreen()); + } } From 9c77e8c72821d6305a3712af92c80fbd1d0f0c29 Mon Sep 17 00:00:00 2001 From: daeun Date: Fri, 11 Dec 2020 20:31:30 +0900 Subject: [PATCH 10/98] feat(controller): initialize stations, lines MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - [초기 설정] 지하철 역을 초기 설정하는 기능 구현 - [초기 설정] 지하철 노선을 초기 설정하는 기능 구현 --- src/main/java/subway/controller/SubwayController.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/java/subway/controller/SubwayController.java b/src/main/java/subway/controller/SubwayController.java index 7e055a005..bd985ef44 100644 --- a/src/main/java/subway/controller/SubwayController.java +++ b/src/main/java/subway/controller/SubwayController.java @@ -1,9 +1,17 @@ package subway.controller; +import subway.service.LineService; +import subway.service.StationService; import subway.view.OutputView; public class SubwayController { public static void runSubway() { + initializeSubway(); OutputView.printMainScreen(); } + + public static void initializeSubway() { + StationService.initializeStations(); + LineService.initializeLines(); + } } From ca5fc3a0e002c0e5219cba606b2cc581a667d74d Mon Sep 17 00:00:00 2001 From: daeun Date: Fri, 11 Dec 2020 22:39:07 +0900 Subject: [PATCH 11/98] feat(subway): scan a main input MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - [입출력] 메인 화면에서 1~4 숫자 또는 Q 문자만 입력하는 기능 구현 - [입출력] 메인 화면에서 1~4 숫자 또는 Q 문자 이외를 입력하면 예외 처리 --- docs/README.md | 2 +- src/main/java/subway/Application.java | 2 +- .../subway/controller/SubwayController.java | 42 ++++++++++++++++++- src/main/java/subway/type/ExceptionType.java | 16 +++++++ src/main/java/subway/type/InputType.java | 22 ++++++++++ src/main/java/subway/view/OutputView.java | 9 ++++ 6 files changed, 89 insertions(+), 4 deletions(-) create mode 100644 src/main/java/subway/type/ExceptionType.java create mode 100644 src/main/java/subway/type/InputType.java diff --git a/docs/README.md b/docs/README.md index 64b45837f..644e2b0ca 100644 --- a/docs/README.md +++ b/docs/README.md @@ -50,7 +50,7 @@ ### 입출력 #### 입력 -- [ ] 메인 화면에서 1~4 숫자 또는 Q 문자만 입력한다. `예외` +- [x] 메인 화면에서 1~4 숫자 또는 Q 문자만 입력한다. `예외` - [ ] 역 관리 화면에서 1~3 숫자 또는 B 문자만 입력한다. `예외` - [ ] 노선 관리 화면에서 1~3 숫자 또는 B 문자만 입력한다. `예외` - [ ] 구간 관리 화면에서 1~2 숫자 또는 B 문자만 입력한다. `예외` diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java index c838b3114..6e5b63021 100644 --- a/src/main/java/subway/Application.java +++ b/src/main/java/subway/Application.java @@ -8,6 +8,6 @@ public class Application { public static void main(String[] args) { final Scanner scanner = new Scanner(System.in); // TODO: 프로그램 구현 - SubwayController.runSubway(); + SubwayController.runSubway(scanner); } } diff --git a/src/main/java/subway/controller/SubwayController.java b/src/main/java/subway/controller/SubwayController.java index bd985ef44..715721535 100644 --- a/src/main/java/subway/controller/SubwayController.java +++ b/src/main/java/subway/controller/SubwayController.java @@ -2,16 +2,54 @@ import subway.service.LineService; import subway.service.StationService; +import subway.type.InputType; import subway.view.OutputView; +import java.util.Scanner; + public class SubwayController { - public static void runSubway() { + public static void runSubway(Scanner scanner) { initializeSubway(); - OutputView.printMainScreen(); + startSubway(scanner); } public static void initializeSubway() { StationService.initializeStations(); LineService.initializeLines(); } + + public static void startSubway(Scanner scanner) { + while (true) { + OutputView.printMainScreen(); + String mainInput = scanner.next(); + if (quitSubway(mainInput)) { + break; + } + chooseFeature(mainInput); + } + } + + public static boolean quitSubway(String mainInput) { + return mainInput.equals(InputType.SCREEN_QUITTING.getInput()); + } + + public static void chooseFeature(String mainInput) { + if (mainInput.equals(InputType.MAIN_STATION_MANAGEMENT.getInput())) { + OutputView.printStationManagementScreen(); + return; + } + if (mainInput.equals(InputType.MAIN_LINE_MANAGEMENT.getInput())) { + OutputView.printLineManagementScreen(); + return; + } + if (mainInput.equals(InputType.MAIN_SECTION_MANAGEMENT.getInput())) { + OutputView.printSectionManagementScreen(); + return; + } + if (mainInput.equals(InputType.MAIN_SUBWAY_MAP_PRINT.getInput())) { + // TODO: 지하철 노선도 출력 기능 구현 + return; + } + OutputView.printInvalidFeatureChoiceException(); + } } diff --git a/src/main/java/subway/type/ExceptionType.java b/src/main/java/subway/type/ExceptionType.java new file mode 100644 index 000000000..1ec8b543e --- /dev/null +++ b/src/main/java/subway/type/ExceptionType.java @@ -0,0 +1,16 @@ +package subway.type; + +public enum ExceptionType { + ERROR("[ERROR] "), + INVALID_FEATURE_CHOICE(ERROR.getException() + "선택할 수 없는 기능입니다.\n"); + + private final String exception; + + ExceptionType(String exception) { + this.exception = exception; + } + + public String getException() { + return exception; + } +} diff --git a/src/main/java/subway/type/InputType.java b/src/main/java/subway/type/InputType.java new file mode 100644 index 000000000..fd1baad05 --- /dev/null +++ b/src/main/java/subway/type/InputType.java @@ -0,0 +1,22 @@ +package subway.type; + +/** + * 기능 입력 문자 상수를 모아둔 Enum 클래스 + */ +public enum InputType { + MAIN_STATION_MANAGEMENT("1"), + MAIN_LINE_MANAGEMENT("2"), + MAIN_SECTION_MANAGEMENT("3"), + MAIN_SUBWAY_MAP_PRINT("4"), + SCREEN_QUITTING("Q"); + + private final String input; + + InputType(String input) { + this.input = input; + } + + public String getInput() { + return input; + } +} diff --git a/src/main/java/subway/view/OutputView.java b/src/main/java/subway/view/OutputView.java index 706f43463..d8ef6b4f3 100644 --- a/src/main/java/subway/view/OutputView.java +++ b/src/main/java/subway/view/OutputView.java @@ -1,5 +1,6 @@ package subway.view; +import subway.type.ExceptionType; import subway.type.ScreenType; public class OutputView { @@ -14,6 +15,7 @@ public static void printMainScreen() { } public static void printStationManagementScreen() { + System.out.println(); System.out.println(ScreenType.STATION_MANAGEMENT_SCREEN.getScreen() + ScreenType.STATION_ADDING.getScreen() + ScreenType.STATION_DELETION.getScreen() @@ -23,6 +25,7 @@ public static void printStationManagementScreen() { } public static void printLineManagementScreen() { + System.out.println(); System.out.println(ScreenType.LINE_MANAGEMENT_SCREEN.getScreen() + ScreenType.LINE_ADDING.getScreen() + ScreenType.LINE_DELETION.getScreen() @@ -32,10 +35,16 @@ public static void printLineManagementScreen() { } public static void printSectionManagementScreen() { + System.out.println(); System.out.println(ScreenType.SECTION_MANAGEMENT_SCREEN.getScreen() + ScreenType.SECTION_ADDING.getScreen() + ScreenType.SECTION_DELETION.getScreen() + ScreenType.BACK.getScreen() + ScreenType.FEATURE_CHOICE.getScreen()); } + + public static void printInvalidFeatureChoiceException() { + System.out.println(); + System.out.println(ExceptionType.INVALID_FEATURE_CHOICE.getException()); + } } From 0dd6a66a494d7d2ec3a6c6c6476280d7b42cd8ec Mon Sep 17 00:00:00 2001 From: daeun Date: Fri, 11 Dec 2020 23:09:59 +0900 Subject: [PATCH 12/98] refactor(subway): rename enums MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 기능 입력 문자 상수명 변경 --- src/main/java/subway/controller/SubwayController.java | 10 +++++----- src/main/java/subway/type/InputType.java | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/main/java/subway/controller/SubwayController.java b/src/main/java/subway/controller/SubwayController.java index 715721535..8f60ba36b 100644 --- a/src/main/java/subway/controller/SubwayController.java +++ b/src/main/java/subway/controller/SubwayController.java @@ -30,23 +30,23 @@ public static void startSubway(Scanner scanner) { } public static boolean quitSubway(String mainInput) { - return mainInput.equals(InputType.SCREEN_QUITTING.getInput()); + return mainInput.equals(InputType.INPUT_QUITTING.getInput()); } public static void chooseFeature(String mainInput) { - if (mainInput.equals(InputType.MAIN_STATION_MANAGEMENT.getInput())) { + if (mainInput.equals(InputType.INPUT_ONE.getInput())) { OutputView.printStationManagementScreen(); return; } - if (mainInput.equals(InputType.MAIN_LINE_MANAGEMENT.getInput())) { + if (mainInput.equals(InputType.INPUT_TWO.getInput())) { OutputView.printLineManagementScreen(); return; } - if (mainInput.equals(InputType.MAIN_SECTION_MANAGEMENT.getInput())) { + if (mainInput.equals(InputType.INPUT_THREE.getInput())) { OutputView.printSectionManagementScreen(); return; } - if (mainInput.equals(InputType.MAIN_SUBWAY_MAP_PRINT.getInput())) { + if (mainInput.equals(InputType.INPUT_FOUR.getInput())) { // TODO: 지하철 노선도 출력 기능 구현 return; } diff --git a/src/main/java/subway/type/InputType.java b/src/main/java/subway/type/InputType.java index fd1baad05..0aa5dba06 100644 --- a/src/main/java/subway/type/InputType.java +++ b/src/main/java/subway/type/InputType.java @@ -4,11 +4,11 @@ * 기능 입력 문자 상수를 모아둔 Enum 클래스 */ public enum InputType { - MAIN_STATION_MANAGEMENT("1"), - MAIN_LINE_MANAGEMENT("2"), - MAIN_SECTION_MANAGEMENT("3"), - MAIN_SUBWAY_MAP_PRINT("4"), - SCREEN_QUITTING("Q"); + INPUT_ONE("1"), + INPUT_TWO("2"), + INPUT_THREE("3"), + INPUT_FOUR("4"), + INPUT_QUITTING("Q"); private final String input; From 3864bbfcd03038398d8ceb5d31d6086c3502699e Mon Sep 17 00:00:00 2001 From: daeun Date: Fri, 11 Dec 2020 23:41:54 +0900 Subject: [PATCH 13/98] refactor(subway-controller): rename a function MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 기능 선택 함수명 변경 --- src/main/java/subway/controller/SubwayController.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/subway/controller/SubwayController.java b/src/main/java/subway/controller/SubwayController.java index 8f60ba36b..24c4df92b 100644 --- a/src/main/java/subway/controller/SubwayController.java +++ b/src/main/java/subway/controller/SubwayController.java @@ -25,7 +25,7 @@ public static void startSubway(Scanner scanner) { if (quitSubway(mainInput)) { break; } - chooseFeature(mainInput); + chooseSubwayFeature(mainInput); } } @@ -33,7 +33,7 @@ public static boolean quitSubway(String mainInput) { return mainInput.equals(InputType.INPUT_QUITTING.getInput()); } - public static void chooseFeature(String mainInput) { + public static void chooseSubwayFeature(String mainInput) { if (mainInput.equals(InputType.INPUT_ONE.getInput())) { OutputView.printStationManagementScreen(); return; From 9229eeacc93f9230a784392aa441e4e6db9b33a3 Mon Sep 17 00:00:00 2001 From: daeun Date: Sat, 12 Dec 2020 00:29:58 +0900 Subject: [PATCH 14/98] feat(subway): scan a station input MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - [입출력] 역 관리 화면에서 1~3 숫자 또는 B 문자만 입력하는 기능 구현 - [입출력] 역 관리 화면에서 1~3 숫자 또는 B 문자 이외를 입력하면 예외 처리 --- docs/README.md | 2 +- .../subway/controller/StationController.java | 36 +++++++++++++++++++ .../subway/controller/SubwayController.java | 6 ++-- .../java/subway/service/StationService.java | 14 ++++++++ src/main/java/subway/type/InputType.java | 3 +- 5 files changed, 56 insertions(+), 5 deletions(-) create mode 100644 src/main/java/subway/controller/StationController.java diff --git a/docs/README.md b/docs/README.md index 644e2b0ca..ec3221cd8 100644 --- a/docs/README.md +++ b/docs/README.md @@ -51,7 +51,7 @@ ### 입출력 #### 입력 - [x] 메인 화면에서 1~4 숫자 또는 Q 문자만 입력한다. `예외` -- [ ] 역 관리 화면에서 1~3 숫자 또는 B 문자만 입력한다. `예외` +- [x] 역 관리 화면에서 1~3 숫자 또는 B 문자만 입력한다. `예외` - [ ] 노선 관리 화면에서 1~3 숫자 또는 B 문자만 입력한다. `예외` - [ ] 구간 관리 화면에서 1~2 숫자 또는 B 문자만 입력한다. `예외` diff --git a/src/main/java/subway/controller/StationController.java b/src/main/java/subway/controller/StationController.java new file mode 100644 index 000000000..b6c8ab5d7 --- /dev/null +++ b/src/main/java/subway/controller/StationController.java @@ -0,0 +1,36 @@ +package subway.controller; + +import subway.service.StationService; +import subway.type.InputType; +import subway.view.OutputView; + +import java.util.Scanner; + +public class StationController { + public static void startStation(Scanner scanner) { + while (true) { + OutputView.printStationManagementScreen(); + String stationInput = scanner.next(); + if (StationService.isStationInput(stationInput)) { + chooseStationFeature(stationInput); + break; + } + OutputView.printInvalidFeatureChoiceException(); + } + } + + public static void chooseStationFeature(String stationInput) { + if (stationInput.equals(InputType.INPUT_ONE.getInput())) { + return; + } + if (stationInput.equals(InputType.INPUT_TWO.getInput())) { + return; + } + if (stationInput.equals(InputType.INPUT_THREE.getInput())) { + return; + } + if (stationInput.equals(InputType.INPUT_BACK.getInput())) { + return; + } + } +} diff --git a/src/main/java/subway/controller/SubwayController.java b/src/main/java/subway/controller/SubwayController.java index 24c4df92b..aa185efe7 100644 --- a/src/main/java/subway/controller/SubwayController.java +++ b/src/main/java/subway/controller/SubwayController.java @@ -25,7 +25,7 @@ public static void startSubway(Scanner scanner) { if (quitSubway(mainInput)) { break; } - chooseSubwayFeature(mainInput); + chooseSubwayFeature(mainInput, scanner); } } @@ -33,9 +33,9 @@ public static boolean quitSubway(String mainInput) { return mainInput.equals(InputType.INPUT_QUITTING.getInput()); } - public static void chooseSubwayFeature(String mainInput) { + public static void chooseSubwayFeature(String mainInput, Scanner scanner) { if (mainInput.equals(InputType.INPUT_ONE.getInput())) { - OutputView.printStationManagementScreen(); + StationController.startStation(scanner); return; } if (mainInput.equals(InputType.INPUT_TWO.getInput())) { diff --git a/src/main/java/subway/service/StationService.java b/src/main/java/subway/service/StationService.java index 8aa61cd3e..1410e73b8 100644 --- a/src/main/java/subway/service/StationService.java +++ b/src/main/java/subway/service/StationService.java @@ -2,6 +2,7 @@ import subway.domain.Station; import subway.repository.StationRepository; +import subway.type.InputType; import subway.type.StationType; public class StationService { @@ -14,4 +15,17 @@ public static void initializeStations() { StationRepository.addStation(new Station(StationType.YANGJAE_CITIZENS_FOREST.getStation())); StationRepository.addStation(new Station(StationType.MAEBONG.getStation())); } + + public static boolean isStationInput(String stationInput) { + if (stationInput.equals(InputType.INPUT_ONE.getInput())) { + return true; + } + if (stationInput.equals(InputType.INPUT_TWO.getInput())) { + return true; + } + if (stationInput.equals(InputType.INPUT_THREE.getInput())) { + return true; + } + return stationInput.equals(InputType.INPUT_BACK.getInput()); + } } diff --git a/src/main/java/subway/type/InputType.java b/src/main/java/subway/type/InputType.java index 0aa5dba06..daeb45d56 100644 --- a/src/main/java/subway/type/InputType.java +++ b/src/main/java/subway/type/InputType.java @@ -8,7 +8,8 @@ public enum InputType { INPUT_TWO("2"), INPUT_THREE("3"), INPUT_FOUR("4"), - INPUT_QUITTING("Q"); + INPUT_QUITTING("Q"), + INPUT_BACK("B"); private final String input; From 021f28d804df83c54b6b6784f7bf49e9e4f6f154 Mon Sep 17 00:00:00 2001 From: daeun Date: Sat, 12 Dec 2020 00:58:38 +0900 Subject: [PATCH 15/98] feat(subway): scan a line input MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - [입출력] 노선 관리 화면에서 1~3 숫자 또는 B 문자만 입력하는 기능 구현 - [입출력] 노선 관리 화면에서 1~3 숫자 또는 B 문자 이외를 입력하면 예외 처리 --- docs/README.md | 2 +- .../subway/controller/LineController.java | 36 +++++++++++++++++++ .../subway/controller/SubwayController.java | 4 ++- src/main/java/subway/service/LineService.java | 14 ++++++++ 4 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 src/main/java/subway/controller/LineController.java diff --git a/docs/README.md b/docs/README.md index ec3221cd8..32b306672 100644 --- a/docs/README.md +++ b/docs/README.md @@ -52,7 +52,7 @@ #### 입력 - [x] 메인 화면에서 1~4 숫자 또는 Q 문자만 입력한다. `예외` - [x] 역 관리 화면에서 1~3 숫자 또는 B 문자만 입력한다. `예외` -- [ ] 노선 관리 화면에서 1~3 숫자 또는 B 문자만 입력한다. `예외` +- [x] 노선 관리 화면에서 1~3 숫자 또는 B 문자만 입력한다. `예외` - [ ] 구간 관리 화면에서 1~2 숫자 또는 B 문자만 입력한다. `예외` #### 출력 diff --git a/src/main/java/subway/controller/LineController.java b/src/main/java/subway/controller/LineController.java new file mode 100644 index 000000000..ad67d2aa4 --- /dev/null +++ b/src/main/java/subway/controller/LineController.java @@ -0,0 +1,36 @@ +package subway.controller; + +import subway.service.LineService; +import subway.type.InputType; +import subway.view.OutputView; + +import java.util.Scanner; + +public class LineController { + public static void startLine(Scanner scanner) { + while (true) { + OutputView.printLineManagementScreen(); + String lineInput = scanner.next(); + if (LineService.isLineInput(lineInput)) { + chooseLineFeature(lineInput); + break; + } + OutputView.printInvalidFeatureChoiceException(); + } + } + + public static void chooseLineFeature(String lineInput) { + if (lineInput.equals(InputType.INPUT_ONE.getInput())) { + return; + } + if (lineInput.equals(InputType.INPUT_TWO.getInput())) { + return; + } + if (lineInput.equals(InputType.INPUT_THREE.getInput())) { + return; + } + if (lineInput.equals(InputType.INPUT_BACK.getInput())) { + return; + } + } +} diff --git a/src/main/java/subway/controller/SubwayController.java b/src/main/java/subway/controller/SubwayController.java index aa185efe7..4d6f6aa1b 100644 --- a/src/main/java/subway/controller/SubwayController.java +++ b/src/main/java/subway/controller/SubwayController.java @@ -39,7 +39,7 @@ public static void chooseSubwayFeature(String mainInput, Scanner scanner) { return; } if (mainInput.equals(InputType.INPUT_TWO.getInput())) { - OutputView.printLineManagementScreen(); + LineController.startLine(scanner); return; } if (mainInput.equals(InputType.INPUT_THREE.getInput())) { @@ -52,4 +52,6 @@ public static void chooseSubwayFeature(String mainInput, Scanner scanner) { } OutputView.printInvalidFeatureChoiceException(); } + + } diff --git a/src/main/java/subway/service/LineService.java b/src/main/java/subway/service/LineService.java index 3491a80a7..aa2f42255 100644 --- a/src/main/java/subway/service/LineService.java +++ b/src/main/java/subway/service/LineService.java @@ -2,6 +2,7 @@ import subway.domain.Line; import subway.repository.LineRepository; +import subway.type.InputType; import subway.type.LineType; public class LineService { @@ -10,4 +11,17 @@ public static void initializeLines() { LineRepository.addLine(new Line(LineType.THREE.getLine())); LineRepository.addLine(new Line(LineType.SHINBUNDANG.getLine())); } + + public static boolean isLineInput(String lineInput) { + if (lineInput.equals(InputType.INPUT_ONE.getInput())) { + return true; + } + if (lineInput.equals(InputType.INPUT_TWO.getInput())) { + return true; + } + if (lineInput.equals(InputType.INPUT_THREE.getInput())) { + return true; + } + return lineInput.equals(InputType.INPUT_BACK.getInput()); + } } From b7070bd06ff73c3761b8fbd4fd8a7af5a5f679ec Mon Sep 17 00:00:00 2001 From: daeun Date: Sat, 12 Dec 2020 01:04:29 +0900 Subject: [PATCH 16/98] feat(subway): scan a section input MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - [입출력] 구간 관리 화면에서 1~2 숫자 또는 B 문자만 입력하는 기능 구현 - [입출력] 구간 관리 화면에서 1~2 숫자 또는 B 문자 이외를 입력하면 예외 처리 --- docs/README.md | 2 +- .../subway/controller/SectionController.java | 33 +++++++++++++++++++ .../subway/controller/SubwayController.java | 4 +-- .../java/subway/service/SectionService.java | 15 +++++++++ 4 files changed, 50 insertions(+), 4 deletions(-) create mode 100644 src/main/java/subway/controller/SectionController.java create mode 100644 src/main/java/subway/service/SectionService.java diff --git a/docs/README.md b/docs/README.md index 32b306672..60d487425 100644 --- a/docs/README.md +++ b/docs/README.md @@ -53,7 +53,7 @@ - [x] 메인 화면에서 1~4 숫자 또는 Q 문자만 입력한다. `예외` - [x] 역 관리 화면에서 1~3 숫자 또는 B 문자만 입력한다. `예외` - [x] 노선 관리 화면에서 1~3 숫자 또는 B 문자만 입력한다. `예외` -- [ ] 구간 관리 화면에서 1~2 숫자 또는 B 문자만 입력한다. `예외` +- [x] 구간 관리 화면에서 1~2 숫자 또는 B 문자만 입력한다. `예외` #### 출력 - [x] 메인 화면을 출력한다. diff --git a/src/main/java/subway/controller/SectionController.java b/src/main/java/subway/controller/SectionController.java new file mode 100644 index 000000000..89aba36f8 --- /dev/null +++ b/src/main/java/subway/controller/SectionController.java @@ -0,0 +1,33 @@ +package subway.controller; + +import subway.service.SectionService; +import subway.type.InputType; +import subway.view.OutputView; + +import java.util.Scanner; + +public class SectionController { + public static void startSection(Scanner scanner) { + while (true) { + OutputView.printSectionManagementScreen(); + String sectionInput = scanner.next(); + if (SectionService.isSectionInput(sectionInput)) { + chooseSectionFeature(sectionInput); + break; + } + OutputView.printInvalidFeatureChoiceException(); + } + } + + public static void chooseSectionFeature(String sectionInput) { + if (sectionInput.equals(InputType.INPUT_ONE.getInput())) { + return; + } + if (sectionInput.equals(InputType.INPUT_TWO.getInput())) { + return; + } + if (sectionInput.equals(InputType.INPUT_BACK.getInput())) { + return; + } + } +} diff --git a/src/main/java/subway/controller/SubwayController.java b/src/main/java/subway/controller/SubwayController.java index 4d6f6aa1b..ef92c7888 100644 --- a/src/main/java/subway/controller/SubwayController.java +++ b/src/main/java/subway/controller/SubwayController.java @@ -43,7 +43,7 @@ public static void chooseSubwayFeature(String mainInput, Scanner scanner) { return; } if (mainInput.equals(InputType.INPUT_THREE.getInput())) { - OutputView.printSectionManagementScreen(); + SectionController.startSection(scanner); return; } if (mainInput.equals(InputType.INPUT_FOUR.getInput())) { @@ -52,6 +52,4 @@ public static void chooseSubwayFeature(String mainInput, Scanner scanner) { } OutputView.printInvalidFeatureChoiceException(); } - - } diff --git a/src/main/java/subway/service/SectionService.java b/src/main/java/subway/service/SectionService.java new file mode 100644 index 000000000..44b1aba30 --- /dev/null +++ b/src/main/java/subway/service/SectionService.java @@ -0,0 +1,15 @@ +package subway.service; + +import subway.type.InputType; + +public class SectionService { + public static boolean isSectionInput(String sectionInput) { + if (sectionInput.equals(InputType.INPUT_ONE.getInput())) { + return true; + } + if (sectionInput.equals(InputType.INPUT_TWO.getInput())) { + return true; + } + return sectionInput.equals(InputType.INPUT_BACK.getInput()); + } +} From fc47eb85e498c983d7d2209c94de10a137016c02 Mon Sep 17 00:00:00 2001 From: daeun Date: Sat, 12 Dec 2020 01:07:00 +0900 Subject: [PATCH 17/98] docs(readme): update README.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 구현할 기능 목록 체크 --- docs/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/README.md b/docs/README.md index 60d487425..55e9608ff 100644 --- a/docs/README.md +++ b/docs/README.md @@ -65,12 +65,12 @@ ### 돌아가기 - [ ] 관리/출력 화면에서 메인 화면으로 돌아간다. - - [ ] B 문자를 입력한다. + - [x] B 문자를 입력한다. - [ ] 기능 실행이 완료되면 자동으로 돌아간다. ### 종료 -- [ ] 메인 화면에서 프로그램을 종료한다. - - [ ] Q 문자를 입력한다. +- [x] 메인 화면에서 프로그램을 종료한다. + - [x] Q 문자를 입력한다. ### 에러 - [ ] 에러가 발생하면 다음 입력을 기다린다. From a2267b132c1b47e3023c08f6ab995b7fe5f0f78e Mon Sep 17 00:00:00 2001 From: daeun Date: Sat, 12 Dec 2020 03:16:52 +0900 Subject: [PATCH 18/98] refactor(subway): remove the code duplication MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - [입출력] 인터페이스를 통한 코드 중복 제거 --- src/main/java/subway/Application.java | 3 +- .../subway/controller/LineController.java | 27 +------- .../subway/controller/SectionController.java | 24 +------ .../subway/controller/StationController.java | 27 +------- .../subway/controller/SubwayController.java | 38 +----------- .../java/subway/service/FeatureInterface.java | 9 +++ .../java/subway/service/FeatureService.java | 62 +++++++++++++++++++ src/main/java/subway/service/LineService.java | 25 ++++---- .../java/subway/service/SectionService.java | 41 ++++++++++-- .../java/subway/service/StationService.java | 25 ++++---- .../java/subway/service/SubwayService.java | 25 ++++++++ 11 files changed, 168 insertions(+), 138 deletions(-) create mode 100644 src/main/java/subway/service/FeatureInterface.java create mode 100644 src/main/java/subway/service/FeatureService.java create mode 100644 src/main/java/subway/service/SubwayService.java diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java index 6e5b63021..12cb150fd 100644 --- a/src/main/java/subway/Application.java +++ b/src/main/java/subway/Application.java @@ -8,6 +8,7 @@ public class Application { public static void main(String[] args) { final Scanner scanner = new Scanner(System.in); // TODO: 프로그램 구현 - SubwayController.runSubway(scanner); + SubwayController subwayController = new SubwayController(); + subwayController.runSubway(scanner); } } diff --git a/src/main/java/subway/controller/LineController.java b/src/main/java/subway/controller/LineController.java index ad67d2aa4..fabf383f8 100644 --- a/src/main/java/subway/controller/LineController.java +++ b/src/main/java/subway/controller/LineController.java @@ -1,36 +1,11 @@ package subway.controller; import subway.service.LineService; -import subway.type.InputType; -import subway.view.OutputView; import java.util.Scanner; public class LineController { public static void startLine(Scanner scanner) { - while (true) { - OutputView.printLineManagementScreen(); - String lineInput = scanner.next(); - if (LineService.isLineInput(lineInput)) { - chooseLineFeature(lineInput); - break; - } - OutputView.printInvalidFeatureChoiceException(); - } - } - - public static void chooseLineFeature(String lineInput) { - if (lineInput.equals(InputType.INPUT_ONE.getInput())) { - return; - } - if (lineInput.equals(InputType.INPUT_TWO.getInput())) { - return; - } - if (lineInput.equals(InputType.INPUT_THREE.getInput())) { - return; - } - if (lineInput.equals(InputType.INPUT_BACK.getInput())) { - return; - } + LineService.manageLine(scanner); } } diff --git a/src/main/java/subway/controller/SectionController.java b/src/main/java/subway/controller/SectionController.java index 89aba36f8..d5648075d 100644 --- a/src/main/java/subway/controller/SectionController.java +++ b/src/main/java/subway/controller/SectionController.java @@ -1,33 +1,11 @@ package subway.controller; import subway.service.SectionService; -import subway.type.InputType; -import subway.view.OutputView; import java.util.Scanner; public class SectionController { public static void startSection(Scanner scanner) { - while (true) { - OutputView.printSectionManagementScreen(); - String sectionInput = scanner.next(); - if (SectionService.isSectionInput(sectionInput)) { - chooseSectionFeature(sectionInput); - break; - } - OutputView.printInvalidFeatureChoiceException(); - } - } - - public static void chooseSectionFeature(String sectionInput) { - if (sectionInput.equals(InputType.INPUT_ONE.getInput())) { - return; - } - if (sectionInput.equals(InputType.INPUT_TWO.getInput())) { - return; - } - if (sectionInput.equals(InputType.INPUT_BACK.getInput())) { - return; - } + SectionService.manageSection(scanner); } } diff --git a/src/main/java/subway/controller/StationController.java b/src/main/java/subway/controller/StationController.java index b6c8ab5d7..6b411392b 100644 --- a/src/main/java/subway/controller/StationController.java +++ b/src/main/java/subway/controller/StationController.java @@ -1,36 +1,11 @@ package subway.controller; import subway.service.StationService; -import subway.type.InputType; -import subway.view.OutputView; import java.util.Scanner; public class StationController { public static void startStation(Scanner scanner) { - while (true) { - OutputView.printStationManagementScreen(); - String stationInput = scanner.next(); - if (StationService.isStationInput(stationInput)) { - chooseStationFeature(stationInput); - break; - } - OutputView.printInvalidFeatureChoiceException(); - } - } - - public static void chooseStationFeature(String stationInput) { - if (stationInput.equals(InputType.INPUT_ONE.getInput())) { - return; - } - if (stationInput.equals(InputType.INPUT_TWO.getInput())) { - return; - } - if (stationInput.equals(InputType.INPUT_THREE.getInput())) { - return; - } - if (stationInput.equals(InputType.INPUT_BACK.getInput())) { - return; - } + StationService.manageStation(scanner); } } diff --git a/src/main/java/subway/controller/SubwayController.java b/src/main/java/subway/controller/SubwayController.java index ef92c7888..f9bb871cb 100644 --- a/src/main/java/subway/controller/SubwayController.java +++ b/src/main/java/subway/controller/SubwayController.java @@ -2,13 +2,12 @@ import subway.service.LineService; import subway.service.StationService; -import subway.type.InputType; -import subway.view.OutputView; +import subway.service.SubwayService; import java.util.Scanner; public class SubwayController { - public static void runSubway(Scanner scanner) { + public void runSubway(Scanner scanner) { initializeSubway(); startSubway(scanner); } @@ -19,37 +18,6 @@ public static void initializeSubway() { } public static void startSubway(Scanner scanner) { - while (true) { - OutputView.printMainScreen(); - String mainInput = scanner.next(); - if (quitSubway(mainInput)) { - break; - } - chooseSubwayFeature(mainInput, scanner); - } - } - - public static boolean quitSubway(String mainInput) { - return mainInput.equals(InputType.INPUT_QUITTING.getInput()); - } - - public static void chooseSubwayFeature(String mainInput, Scanner scanner) { - if (mainInput.equals(InputType.INPUT_ONE.getInput())) { - StationController.startStation(scanner); - return; - } - if (mainInput.equals(InputType.INPUT_TWO.getInput())) { - LineController.startLine(scanner); - return; - } - if (mainInput.equals(InputType.INPUT_THREE.getInput())) { - SectionController.startSection(scanner); - return; - } - if (mainInput.equals(InputType.INPUT_FOUR.getInput())) { - // TODO: 지하철 노선도 출력 기능 구현 - return; - } - OutputView.printInvalidFeatureChoiceException(); + SubwayService.manageSubway(scanner); } } diff --git a/src/main/java/subway/service/FeatureInterface.java b/src/main/java/subway/service/FeatureInterface.java new file mode 100644 index 000000000..de7e751d7 --- /dev/null +++ b/src/main/java/subway/service/FeatureInterface.java @@ -0,0 +1,9 @@ +package subway.service; + +import java.util.Scanner; + +public interface FeatureInterface { + boolean isInput(String input); + void chooseSubwayFeature(String input, Scanner scanner); + void chooseFeature(String input); +} diff --git a/src/main/java/subway/service/FeatureService.java b/src/main/java/subway/service/FeatureService.java new file mode 100644 index 000000000..9de98e209 --- /dev/null +++ b/src/main/java/subway/service/FeatureService.java @@ -0,0 +1,62 @@ +package subway.service; + +import subway.controller.LineController; +import subway.controller.SectionController; +import subway.controller.StationController; +import subway.type.InputType; +import subway.view.OutputView; + +import java.util.Scanner; + +public class FeatureService implements FeatureInterface { + @Override + public boolean isInput(String input) { + if (input.equals(InputType.INPUT_ONE.getInput())) { + return true; + } + if (input.equals(InputType.INPUT_TWO.getInput())) { + return true; + } + if (input.equals(InputType.INPUT_THREE.getInput())) { + return true; + } + return input.equals(InputType.INPUT_BACK.getInput()); + } + + @Override + public void chooseSubwayFeature(String input, Scanner scanner) { + if (input.equals(InputType.INPUT_ONE.getInput())) { + StationController.startStation(scanner); + return; + } + if (input.equals(InputType.INPUT_TWO.getInput())) { + LineController.startLine(scanner); + return; + } + if (input.equals(InputType.INPUT_THREE.getInput())) { + SectionController.startSection(scanner); + return; + } + if (input.equals(InputType.INPUT_FOUR.getInput())) { + // TODO: 지하철 노선도 출력 기능 구현 + return; + } + OutputView.printInvalidFeatureChoiceException(); + } + + @Override + public void chooseFeature(String input) { + if (input.equals(InputType.INPUT_ONE.getInput())) { + return; + } + if (input.equals(InputType.INPUT_TWO.getInput())) { + return; + } + if (input.equals(InputType.INPUT_THREE.getInput())) { + return; + } + if (input.equals(InputType.INPUT_BACK.getInput())) { + return; + } + } +} diff --git a/src/main/java/subway/service/LineService.java b/src/main/java/subway/service/LineService.java index aa2f42255..9e25f3adc 100644 --- a/src/main/java/subway/service/LineService.java +++ b/src/main/java/subway/service/LineService.java @@ -2,8 +2,10 @@ import subway.domain.Line; import subway.repository.LineRepository; -import subway.type.InputType; import subway.type.LineType; +import subway.view.OutputView; + +import java.util.Scanner; public class LineService { public static void initializeLines() { @@ -12,16 +14,17 @@ public static void initializeLines() { LineRepository.addLine(new Line(LineType.SHINBUNDANG.getLine())); } - public static boolean isLineInput(String lineInput) { - if (lineInput.equals(InputType.INPUT_ONE.getInput())) { - return true; - } - if (lineInput.equals(InputType.INPUT_TWO.getInput())) { - return true; - } - if (lineInput.equals(InputType.INPUT_THREE.getInput())) { - return true; + public static void manageLine(Scanner scanner){ + FeatureService featureService = new FeatureService(); + + while (true) { + OutputView.printLineManagementScreen(); + String lineInput = scanner.next(); + if (featureService.isInput(lineInput)) { + featureService.chooseFeature(lineInput); + break; + } + OutputView.printInvalidFeatureChoiceException(); } - return lineInput.equals(InputType.INPUT_BACK.getInput()); } } diff --git a/src/main/java/subway/service/SectionService.java b/src/main/java/subway/service/SectionService.java index 44b1aba30..10e9acfa1 100644 --- a/src/main/java/subway/service/SectionService.java +++ b/src/main/java/subway/service/SectionService.java @@ -1,15 +1,46 @@ package subway.service; import subway.type.InputType; +import subway.view.OutputView; -public class SectionService { - public static boolean isSectionInput(String sectionInput) { - if (sectionInput.equals(InputType.INPUT_ONE.getInput())) { +import java.util.Scanner; + +public class SectionService extends FeatureService { + public static void manageSection(Scanner scanner) { + SectionService sectionService = new SectionService(); + + while (true) { + OutputView.printSectionManagementScreen(); + String sectionInput = scanner.next(); + if (sectionService.isInput(sectionInput)) { + sectionService.chooseFeature(sectionInput); + break; + } + OutputView.printInvalidFeatureChoiceException(); + } + } + + @Override + public boolean isInput(String input) { + if (input.equals(InputType.INPUT_ONE.getInput())) { return true; } - if (sectionInput.equals(InputType.INPUT_TWO.getInput())) { + if (input.equals(InputType.INPUT_TWO.getInput())) { return true; } - return sectionInput.equals(InputType.INPUT_BACK.getInput()); + return input.equals(InputType.INPUT_BACK.getInput()); + } + + @Override + public void chooseFeature(String input) { + if (input.equals(InputType.INPUT_ONE.getInput())) { + return; + } + if (input.equals(InputType.INPUT_TWO.getInput())) { + return; + } + if (input.equals(InputType.INPUT_BACK.getInput())) { + return; + } } } diff --git a/src/main/java/subway/service/StationService.java b/src/main/java/subway/service/StationService.java index 1410e73b8..ac26d5a19 100644 --- a/src/main/java/subway/service/StationService.java +++ b/src/main/java/subway/service/StationService.java @@ -2,8 +2,10 @@ import subway.domain.Station; import subway.repository.StationRepository; -import subway.type.InputType; import subway.type.StationType; +import subway.view.OutputView; + +import java.util.Scanner; public class StationService { public static void initializeStations() { @@ -16,16 +18,17 @@ public static void initializeStations() { StationRepository.addStation(new Station(StationType.MAEBONG.getStation())); } - public static boolean isStationInput(String stationInput) { - if (stationInput.equals(InputType.INPUT_ONE.getInput())) { - return true; - } - if (stationInput.equals(InputType.INPUT_TWO.getInput())) { - return true; - } - if (stationInput.equals(InputType.INPUT_THREE.getInput())) { - return true; + public static void manageStation(Scanner scanner) { + FeatureService featureService = new FeatureService(); + + while (true) { + OutputView.printStationManagementScreen(); + String stationInput = scanner.next(); + if (featureService.isInput(stationInput)) { + featureService.chooseFeature(stationInput); + break; + } + OutputView.printInvalidFeatureChoiceException(); } - return stationInput.equals(InputType.INPUT_BACK.getInput()); } } diff --git a/src/main/java/subway/service/SubwayService.java b/src/main/java/subway/service/SubwayService.java new file mode 100644 index 000000000..8d84f86d3 --- /dev/null +++ b/src/main/java/subway/service/SubwayService.java @@ -0,0 +1,25 @@ +package subway.service; + +import subway.type.InputType; +import subway.view.OutputView; + +import java.util.Scanner; + +public class SubwayService { + public static void manageSubway(Scanner scanner) { + FeatureService featureService = new FeatureService(); + + while (true) { + OutputView.printMainScreen(); + String mainInput = scanner.next(); + if (quitSubway(mainInput)) { + break; + } + featureService.chooseSubwayFeature(mainInput, scanner); + } + } + + public static boolean quitSubway(String mainInput) { + return mainInput.equals(InputType.INPUT_QUITTING.getInput()); + } +} From 431bc6596993a4a39b9035ccc934c310d32142ef Mon Sep 17 00:00:00 2001 From: daeun Date: Sat, 12 Dec 2020 03:36:50 +0900 Subject: [PATCH 19/98] refactor(subway): modify the code structure MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - [입출력] 오버라이드를 통한 코드 구조 수정 --- .../java/subway/service/FeatureService.java | 2 -- .../java/subway/service/SubwayService.java | 23 +++++++++++++++++-- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/src/main/java/subway/service/FeatureService.java b/src/main/java/subway/service/FeatureService.java index 9de98e209..ad88db6fc 100644 --- a/src/main/java/subway/service/FeatureService.java +++ b/src/main/java/subway/service/FeatureService.java @@ -4,7 +4,6 @@ import subway.controller.SectionController; import subway.controller.StationController; import subway.type.InputType; -import subway.view.OutputView; import java.util.Scanner; @@ -41,7 +40,6 @@ public void chooseSubwayFeature(String input, Scanner scanner) { // TODO: 지하철 노선도 출력 기능 구현 return; } - OutputView.printInvalidFeatureChoiceException(); } @Override diff --git a/src/main/java/subway/service/SubwayService.java b/src/main/java/subway/service/SubwayService.java index 8d84f86d3..4dd506cbe 100644 --- a/src/main/java/subway/service/SubwayService.java +++ b/src/main/java/subway/service/SubwayService.java @@ -5,8 +5,9 @@ import java.util.Scanner; -public class SubwayService { +public class SubwayService extends FeatureService { public static void manageSubway(Scanner scanner) { + SubwayService subwayService = new SubwayService(); FeatureService featureService = new FeatureService(); while (true) { @@ -15,11 +16,29 @@ public static void manageSubway(Scanner scanner) { if (quitSubway(mainInput)) { break; } - featureService.chooseSubwayFeature(mainInput, scanner); + if (subwayService.isInput(mainInput)) { + featureService.chooseSubwayFeature(mainInput, scanner); + continue; + } + OutputView.printInvalidFeatureChoiceException(); } } public static boolean quitSubway(String mainInput) { return mainInput.equals(InputType.INPUT_QUITTING.getInput()); } + + @Override + public boolean isInput(String input) { + if (input.equals(InputType.INPUT_ONE.getInput())) { + return true; + } + if (input.equals(InputType.INPUT_TWO.getInput())) { + return true; + } + if (input.equals(InputType.INPUT_THREE.getInput())) { + return true; + } + return input.equals(InputType.INPUT_FOUR.getInput()); + } } From 8fac47e8eb19e31e5525810a73adff99f3a1685a Mon Sep 17 00:00:00 2001 From: daeun Date: Sat, 12 Dec 2020 03:51:00 +0900 Subject: [PATCH 20/98] style(feature): change the function arrangement MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 함수 배치 변경 --- .../java/subway/service/FeatureInterface.java | 2 +- src/main/java/subway/service/FeatureService.java | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/main/java/subway/service/FeatureInterface.java b/src/main/java/subway/service/FeatureInterface.java index de7e751d7..87a9a4974 100644 --- a/src/main/java/subway/service/FeatureInterface.java +++ b/src/main/java/subway/service/FeatureInterface.java @@ -4,6 +4,6 @@ public interface FeatureInterface { boolean isInput(String input); - void chooseSubwayFeature(String input, Scanner scanner); void chooseFeature(String input); + void chooseSubwayFeature(String input, Scanner scanner); } diff --git a/src/main/java/subway/service/FeatureService.java b/src/main/java/subway/service/FeatureService.java index ad88db6fc..f25d14766 100644 --- a/src/main/java/subway/service/FeatureService.java +++ b/src/main/java/subway/service/FeatureService.java @@ -23,37 +23,37 @@ public boolean isInput(String input) { } @Override - public void chooseSubwayFeature(String input, Scanner scanner) { + public void chooseFeature(String input) { if (input.equals(InputType.INPUT_ONE.getInput())) { - StationController.startStation(scanner); return; } if (input.equals(InputType.INPUT_TWO.getInput())) { - LineController.startLine(scanner); return; } if (input.equals(InputType.INPUT_THREE.getInput())) { - SectionController.startSection(scanner); return; } - if (input.equals(InputType.INPUT_FOUR.getInput())) { - // TODO: 지하철 노선도 출력 기능 구현 + if (input.equals(InputType.INPUT_BACK.getInput())) { return; } } @Override - public void chooseFeature(String input) { + public void chooseSubwayFeature(String input, Scanner scanner) { if (input.equals(InputType.INPUT_ONE.getInput())) { + StationController.startStation(scanner); return; } if (input.equals(InputType.INPUT_TWO.getInput())) { + LineController.startLine(scanner); return; } if (input.equals(InputType.INPUT_THREE.getInput())) { + SectionController.startSection(scanner); return; } - if (input.equals(InputType.INPUT_BACK.getInput())) { + if (input.equals(InputType.INPUT_FOUR.getInput())) { + // TODO: 지하철 노선도 출력 기능 구현 return; } } From 6220dddd0a1801a70297f763f93e2d62c152e283 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=A5=98=EC=84=B1=ED=98=84?= Date: Sat, 12 Dec 2020 10:26:07 +0900 Subject: [PATCH 21/98] Update README.md --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index e6ed1056f..450e7753a 100644 --- a/README.md +++ b/README.md @@ -397,7 +397,6 @@ B. 돌아가기 ### 프로그래밍 요구사항 - Application - Application 클래스를 활용해 구현해야 한다. - Application의 패키지 구조는 변경하지 않는다. -- 주석을 참고하여 구현할 수 있으며 주석대로 구현하지 않아도 되고 삭제해도 무관하다. ```java public class Application { public static void main(String[] args) { From ea8bf8c11a6000034e883a85c88f1a59e2deae49 Mon Sep 17 00:00:00 2001 From: daeun Date: Sat, 12 Dec 2020 18:30:58 +0900 Subject: [PATCH 22/98] style(subway): change the new line position MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 개행 문자 위치 변경 --- src/main/java/subway/service/LineService.java | 1 + src/main/java/subway/service/SectionService.java | 1 + src/main/java/subway/service/StationService.java | 1 + src/main/java/subway/view/OutputView.java | 3 --- 4 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/subway/service/LineService.java b/src/main/java/subway/service/LineService.java index 9e25f3adc..c08ac2764 100644 --- a/src/main/java/subway/service/LineService.java +++ b/src/main/java/subway/service/LineService.java @@ -17,6 +17,7 @@ public static void initializeLines() { public static void manageLine(Scanner scanner){ FeatureService featureService = new FeatureService(); + System.out.println(); while (true) { OutputView.printLineManagementScreen(); String lineInput = scanner.next(); diff --git a/src/main/java/subway/service/SectionService.java b/src/main/java/subway/service/SectionService.java index 10e9acfa1..f341cb75f 100644 --- a/src/main/java/subway/service/SectionService.java +++ b/src/main/java/subway/service/SectionService.java @@ -9,6 +9,7 @@ public class SectionService extends FeatureService { public static void manageSection(Scanner scanner) { SectionService sectionService = new SectionService(); + System.out.println(); while (true) { OutputView.printSectionManagementScreen(); String sectionInput = scanner.next(); diff --git a/src/main/java/subway/service/StationService.java b/src/main/java/subway/service/StationService.java index ac26d5a19..2f707e858 100644 --- a/src/main/java/subway/service/StationService.java +++ b/src/main/java/subway/service/StationService.java @@ -21,6 +21,7 @@ public static void initializeStations() { public static void manageStation(Scanner scanner) { FeatureService featureService = new FeatureService(); + System.out.println(); while (true) { OutputView.printStationManagementScreen(); String stationInput = scanner.next(); diff --git a/src/main/java/subway/view/OutputView.java b/src/main/java/subway/view/OutputView.java index d8ef6b4f3..15f705198 100644 --- a/src/main/java/subway/view/OutputView.java +++ b/src/main/java/subway/view/OutputView.java @@ -15,7 +15,6 @@ public static void printMainScreen() { } public static void printStationManagementScreen() { - System.out.println(); System.out.println(ScreenType.STATION_MANAGEMENT_SCREEN.getScreen() + ScreenType.STATION_ADDING.getScreen() + ScreenType.STATION_DELETION.getScreen() @@ -25,7 +24,6 @@ public static void printStationManagementScreen() { } public static void printLineManagementScreen() { - System.out.println(); System.out.println(ScreenType.LINE_MANAGEMENT_SCREEN.getScreen() + ScreenType.LINE_ADDING.getScreen() + ScreenType.LINE_DELETION.getScreen() @@ -35,7 +33,6 @@ public static void printLineManagementScreen() { } public static void printSectionManagementScreen() { - System.out.println(); System.out.println(ScreenType.SECTION_MANAGEMENT_SCREEN.getScreen() + ScreenType.SECTION_ADDING.getScreen() + ScreenType.SECTION_DELETION.getScreen() From da0ed6f4c99bb85e1f0480977a07e4573b8cc2de Mon Sep 17 00:00:00 2001 From: daeun Date: Sat, 12 Dec 2020 20:59:35 +0900 Subject: [PATCH 23/98] refactor(subway): modify the code structure MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - [입출력] 인터페이스를 통한 코드 구조 수정 --- .../java/subway/service/FeatureInterface.java | 9 --- .../java/subway/service/FeatureService.java | 60 ------------------- .../java/subway/service/InputService.java | 20 +++++++ src/main/java/subway/service/LineService.java | 30 ++++++++-- .../java/subway/service/SectionService.java | 6 +- .../java/subway/service/StationService.java | 30 ++++++++-- .../java/subway/service/SubwayService.java | 30 +++++++++- .../abstraction/feature/FeatureInterface.java | 5 ++ .../feature/SubwayFeatureInterface.java | 7 +++ .../abstraction/input/InputInterface.java | 5 ++ 10 files changed, 121 insertions(+), 81 deletions(-) delete mode 100644 src/main/java/subway/service/FeatureInterface.java delete mode 100644 src/main/java/subway/service/FeatureService.java create mode 100644 src/main/java/subway/service/InputService.java create mode 100644 src/main/java/subway/service/abstraction/feature/FeatureInterface.java create mode 100644 src/main/java/subway/service/abstraction/feature/SubwayFeatureInterface.java create mode 100644 src/main/java/subway/service/abstraction/input/InputInterface.java diff --git a/src/main/java/subway/service/FeatureInterface.java b/src/main/java/subway/service/FeatureInterface.java deleted file mode 100644 index 87a9a4974..000000000 --- a/src/main/java/subway/service/FeatureInterface.java +++ /dev/null @@ -1,9 +0,0 @@ -package subway.service; - -import java.util.Scanner; - -public interface FeatureInterface { - boolean isInput(String input); - void chooseFeature(String input); - void chooseSubwayFeature(String input, Scanner scanner); -} diff --git a/src/main/java/subway/service/FeatureService.java b/src/main/java/subway/service/FeatureService.java deleted file mode 100644 index f25d14766..000000000 --- a/src/main/java/subway/service/FeatureService.java +++ /dev/null @@ -1,60 +0,0 @@ -package subway.service; - -import subway.controller.LineController; -import subway.controller.SectionController; -import subway.controller.StationController; -import subway.type.InputType; - -import java.util.Scanner; - -public class FeatureService implements FeatureInterface { - @Override - public boolean isInput(String input) { - if (input.equals(InputType.INPUT_ONE.getInput())) { - return true; - } - if (input.equals(InputType.INPUT_TWO.getInput())) { - return true; - } - if (input.equals(InputType.INPUT_THREE.getInput())) { - return true; - } - return input.equals(InputType.INPUT_BACK.getInput()); - } - - @Override - public void chooseFeature(String input) { - if (input.equals(InputType.INPUT_ONE.getInput())) { - return; - } - if (input.equals(InputType.INPUT_TWO.getInput())) { - return; - } - if (input.equals(InputType.INPUT_THREE.getInput())) { - return; - } - if (input.equals(InputType.INPUT_BACK.getInput())) { - return; - } - } - - @Override - public void chooseSubwayFeature(String input, Scanner scanner) { - if (input.equals(InputType.INPUT_ONE.getInput())) { - StationController.startStation(scanner); - return; - } - if (input.equals(InputType.INPUT_TWO.getInput())) { - LineController.startLine(scanner); - return; - } - if (input.equals(InputType.INPUT_THREE.getInput())) { - SectionController.startSection(scanner); - return; - } - if (input.equals(InputType.INPUT_FOUR.getInput())) { - // TODO: 지하철 노선도 출력 기능 구현 - return; - } - } -} diff --git a/src/main/java/subway/service/InputService.java b/src/main/java/subway/service/InputService.java new file mode 100644 index 000000000..bbbfce0f8 --- /dev/null +++ b/src/main/java/subway/service/InputService.java @@ -0,0 +1,20 @@ +package subway.service; + +import subway.service.abstraction.input.InputInterface; +import subway.type.InputType; + +public class InputService implements InputInterface { + @Override + public boolean isInput(String input) { + if (input.equals(InputType.INPUT_ONE.getInput())) { + return true; + } + if (input.equals(InputType.INPUT_TWO.getInput())) { + return true; + } + if (input.equals(InputType.INPUT_THREE.getInput())) { + return true; + } + return input.equals(InputType.INPUT_BACK.getInput()); + } +} diff --git a/src/main/java/subway/service/LineService.java b/src/main/java/subway/service/LineService.java index c08ac2764..789ff4a45 100644 --- a/src/main/java/subway/service/LineService.java +++ b/src/main/java/subway/service/LineService.java @@ -2,12 +2,14 @@ import subway.domain.Line; import subway.repository.LineRepository; +import subway.service.abstraction.feature.FeatureInterface; +import subway.type.InputType; import subway.type.LineType; import subway.view.OutputView; import java.util.Scanner; -public class LineService { +public class LineService implements FeatureInterface { public static void initializeLines() { LineRepository.addLine(new Line(LineType.TWO.getLine())); LineRepository.addLine(new Line(LineType.THREE.getLine())); @@ -15,17 +17,37 @@ public static void initializeLines() { } public static void manageLine(Scanner scanner){ - FeatureService featureService = new FeatureService(); + InputService inputService = new InputService(); + LineService lineService = new LineService(); System.out.println(); while (true) { OutputView.printLineManagementScreen(); String lineInput = scanner.next(); - if (featureService.isInput(lineInput)) { - featureService.chooseFeature(lineInput); + if (inputService.isInput(lineInput)) { + lineService.chooseFeature(lineInput); break; } OutputView.printInvalidFeatureChoiceException(); } } + + @Override + public void chooseFeature(String input) { + if (input.equals(InputType.INPUT_ONE.getInput())) { + // TODO: 노선 등록 기능 구현 + return; + } + if (input.equals(InputType.INPUT_TWO.getInput())) { + // TODO: 노선 삭제 기능 구현 + return; + } + if (input.equals(InputType.INPUT_THREE.getInput())) { + // TODO: 노선 조회 기능 구현 + return; + } + if (input.equals(InputType.INPUT_BACK.getInput())) { + return; + } + } } diff --git a/src/main/java/subway/service/SectionService.java b/src/main/java/subway/service/SectionService.java index f341cb75f..2c739fc9a 100644 --- a/src/main/java/subway/service/SectionService.java +++ b/src/main/java/subway/service/SectionService.java @@ -1,11 +1,13 @@ package subway.service; +import subway.service.abstraction.feature.FeatureInterface; +import subway.service.abstraction.input.InputInterface; import subway.type.InputType; import subway.view.OutputView; import java.util.Scanner; -public class SectionService extends FeatureService { +public class SectionService implements InputInterface, FeatureInterface { public static void manageSection(Scanner scanner) { SectionService sectionService = new SectionService(); @@ -35,9 +37,11 @@ public boolean isInput(String input) { @Override public void chooseFeature(String input) { if (input.equals(InputType.INPUT_ONE.getInput())) { + // TODO: 구간 등록 기능 구현 return; } if (input.equals(InputType.INPUT_TWO.getInput())) { + // TODO: 구간 삭제 기능 구현 return; } if (input.equals(InputType.INPUT_BACK.getInput())) { diff --git a/src/main/java/subway/service/StationService.java b/src/main/java/subway/service/StationService.java index 2f707e858..dbd6359cd 100644 --- a/src/main/java/subway/service/StationService.java +++ b/src/main/java/subway/service/StationService.java @@ -2,12 +2,14 @@ import subway.domain.Station; import subway.repository.StationRepository; +import subway.service.abstraction.feature.FeatureInterface; +import subway.type.InputType; import subway.type.StationType; import subway.view.OutputView; import java.util.Scanner; -public class StationService { +public class StationService implements FeatureInterface { public static void initializeStations() { StationRepository.addStation(new Station(StationType.EDUCATION_UNIVERSITY.getStation())); StationRepository.addStation(new Station(StationType.GANGNAM.getStation())); @@ -19,17 +21,37 @@ public static void initializeStations() { } public static void manageStation(Scanner scanner) { - FeatureService featureService = new FeatureService(); + InputService inputService = new InputService(); + StationService stationService = new StationService(); System.out.println(); while (true) { OutputView.printStationManagementScreen(); String stationInput = scanner.next(); - if (featureService.isInput(stationInput)) { - featureService.chooseFeature(stationInput); + if (inputService.isInput(stationInput)) { + stationService.chooseFeature(stationInput); break; } OutputView.printInvalidFeatureChoiceException(); } } + + @Override + public void chooseFeature(String input) { + if (input.equals(InputType.INPUT_ONE.getInput())) { + // TODO: 역 등록 기능 구현 + return; + } + if (input.equals(InputType.INPUT_TWO.getInput())) { + // TODO: 역 삭제 기능 구현 + return; + } + if (input.equals(InputType.INPUT_THREE.getInput())) { + // TODO: 역 조회 기능 구현 + return; + } + if (input.equals(InputType.INPUT_BACK.getInput())) { + return; + } + } } diff --git a/src/main/java/subway/service/SubwayService.java b/src/main/java/subway/service/SubwayService.java index 4dd506cbe..72ec24537 100644 --- a/src/main/java/subway/service/SubwayService.java +++ b/src/main/java/subway/service/SubwayService.java @@ -1,14 +1,18 @@ package subway.service; +import subway.controller.LineController; +import subway.controller.SectionController; +import subway.controller.StationController; +import subway.service.abstraction.feature.SubwayFeatureInterface; +import subway.service.abstraction.input.InputInterface; import subway.type.InputType; import subway.view.OutputView; import java.util.Scanner; -public class SubwayService extends FeatureService { +public class SubwayService implements InputInterface, SubwayFeatureInterface { public static void manageSubway(Scanner scanner) { SubwayService subwayService = new SubwayService(); - FeatureService featureService = new FeatureService(); while (true) { OutputView.printMainScreen(); @@ -17,7 +21,7 @@ public static void manageSubway(Scanner scanner) { break; } if (subwayService.isInput(mainInput)) { - featureService.chooseSubwayFeature(mainInput, scanner); + subwayService.chooseSubwayFeature(mainInput, scanner); continue; } OutputView.printInvalidFeatureChoiceException(); @@ -41,4 +45,24 @@ public boolean isInput(String input) { } return input.equals(InputType.INPUT_FOUR.getInput()); } + + @Override + public void chooseSubwayFeature(String input, Scanner scanner) { + if (input.equals(InputType.INPUT_ONE.getInput())) { + StationController.startStation(scanner); + return; + } + if (input.equals(InputType.INPUT_TWO.getInput())) { + LineController.startLine(scanner); + return; + } + if (input.equals(InputType.INPUT_THREE.getInput())) { + SectionController.startSection(scanner); + return; + } + if (input.equals(InputType.INPUT_FOUR.getInput())) { + // TODO: 지하철 노선도 출력 기능 구현 + return; + } + } } diff --git a/src/main/java/subway/service/abstraction/feature/FeatureInterface.java b/src/main/java/subway/service/abstraction/feature/FeatureInterface.java new file mode 100644 index 000000000..2cebb9e13 --- /dev/null +++ b/src/main/java/subway/service/abstraction/feature/FeatureInterface.java @@ -0,0 +1,5 @@ +package subway.service.abstraction.feature; + +public interface FeatureInterface { + void chooseFeature(String input); +} diff --git a/src/main/java/subway/service/abstraction/feature/SubwayFeatureInterface.java b/src/main/java/subway/service/abstraction/feature/SubwayFeatureInterface.java new file mode 100644 index 000000000..9e67211a0 --- /dev/null +++ b/src/main/java/subway/service/abstraction/feature/SubwayFeatureInterface.java @@ -0,0 +1,7 @@ +package subway.service.abstraction.feature; + +import java.util.Scanner; + +public interface SubwayFeatureInterface { + void chooseSubwayFeature(String input, Scanner scanner); +} diff --git a/src/main/java/subway/service/abstraction/input/InputInterface.java b/src/main/java/subway/service/abstraction/input/InputInterface.java new file mode 100644 index 000000000..9710cbe0f --- /dev/null +++ b/src/main/java/subway/service/abstraction/input/InputInterface.java @@ -0,0 +1,5 @@ +package subway.service.abstraction.input; + +public interface InputInterface { + boolean isInput(String input); +} From 6c86c0284224edb987199254c3e1049b3c6396db Mon Sep 17 00:00:00 2001 From: daeun Date: Sat, 12 Dec 2020 21:32:16 +0900 Subject: [PATCH 24/98] refactor(subway): modify the code structure MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - [입출력] 인터페이스를 통한 코드 구조 수정 --- src/main/java/subway/service/LineService.java | 17 ++++++++++++++--- .../java/subway/service/SectionService.java | 17 ++++++++++++++--- .../java/subway/service/StationService.java | 17 ++++++++++++++--- src/main/java/subway/service/SubwayService.java | 8 ++++---- .../feature/FeatureChoiceInterface.java | 7 +++++++ .../abstraction/feature/FeatureInterface.java | 5 ++++- .../feature/SubwayFeatureInterface.java | 7 ------- 7 files changed, 57 insertions(+), 21 deletions(-) create mode 100644 src/main/java/subway/service/abstraction/feature/FeatureChoiceInterface.java delete mode 100644 src/main/java/subway/service/abstraction/feature/SubwayFeatureInterface.java diff --git a/src/main/java/subway/service/LineService.java b/src/main/java/subway/service/LineService.java index 789ff4a45..3940f7059 100644 --- a/src/main/java/subway/service/LineService.java +++ b/src/main/java/subway/service/LineService.java @@ -2,6 +2,7 @@ import subway.domain.Line; import subway.repository.LineRepository; +import subway.service.abstraction.feature.FeatureChoiceInterface; import subway.service.abstraction.feature.FeatureInterface; import subway.type.InputType; import subway.type.LineType; @@ -9,7 +10,7 @@ import java.util.Scanner; -public class LineService implements FeatureInterface { +public class LineService implements FeatureChoiceInterface, FeatureInterface { public static void initializeLines() { LineRepository.addLine(new Line(LineType.TWO.getLine())); LineRepository.addLine(new Line(LineType.THREE.getLine())); @@ -25,7 +26,7 @@ public static void manageLine(Scanner scanner){ OutputView.printLineManagementScreen(); String lineInput = scanner.next(); if (inputService.isInput(lineInput)) { - lineService.chooseFeature(lineInput); + lineService.chooseFeature(lineInput, scanner); break; } OutputView.printInvalidFeatureChoiceException(); @@ -33,7 +34,7 @@ public static void manageLine(Scanner scanner){ } @Override - public void chooseFeature(String input) { + public void chooseFeature(String input, Scanner scanner) { if (input.equals(InputType.INPUT_ONE.getInput())) { // TODO: 노선 등록 기능 구현 return; @@ -50,4 +51,14 @@ public void chooseFeature(String input) { return; } } + + @Override + public void add(Scanner scanner) { + + } + + @Override + public void delete(Scanner scanner) { + + } } diff --git a/src/main/java/subway/service/SectionService.java b/src/main/java/subway/service/SectionService.java index 2c739fc9a..91d0bd1ca 100644 --- a/src/main/java/subway/service/SectionService.java +++ b/src/main/java/subway/service/SectionService.java @@ -1,5 +1,6 @@ package subway.service; +import subway.service.abstraction.feature.FeatureChoiceInterface; import subway.service.abstraction.feature.FeatureInterface; import subway.service.abstraction.input.InputInterface; import subway.type.InputType; @@ -7,7 +8,7 @@ import java.util.Scanner; -public class SectionService implements InputInterface, FeatureInterface { +public class SectionService implements InputInterface, FeatureChoiceInterface, FeatureInterface { public static void manageSection(Scanner scanner) { SectionService sectionService = new SectionService(); @@ -16,7 +17,7 @@ public static void manageSection(Scanner scanner) { OutputView.printSectionManagementScreen(); String sectionInput = scanner.next(); if (sectionService.isInput(sectionInput)) { - sectionService.chooseFeature(sectionInput); + sectionService.chooseFeature(sectionInput, scanner); break; } OutputView.printInvalidFeatureChoiceException(); @@ -35,7 +36,7 @@ public boolean isInput(String input) { } @Override - public void chooseFeature(String input) { + public void chooseFeature(String input, Scanner scanner) { if (input.equals(InputType.INPUT_ONE.getInput())) { // TODO: 구간 등록 기능 구현 return; @@ -48,4 +49,14 @@ public void chooseFeature(String input) { return; } } + + @Override + public void add(Scanner scanner) { + + } + + @Override + public void delete(Scanner scanner) { + + } } diff --git a/src/main/java/subway/service/StationService.java b/src/main/java/subway/service/StationService.java index dbd6359cd..37114dc7e 100644 --- a/src/main/java/subway/service/StationService.java +++ b/src/main/java/subway/service/StationService.java @@ -2,6 +2,7 @@ import subway.domain.Station; import subway.repository.StationRepository; +import subway.service.abstraction.feature.FeatureChoiceInterface; import subway.service.abstraction.feature.FeatureInterface; import subway.type.InputType; import subway.type.StationType; @@ -9,7 +10,7 @@ import java.util.Scanner; -public class StationService implements FeatureInterface { +public class StationService implements FeatureChoiceInterface, FeatureInterface { public static void initializeStations() { StationRepository.addStation(new Station(StationType.EDUCATION_UNIVERSITY.getStation())); StationRepository.addStation(new Station(StationType.GANGNAM.getStation())); @@ -29,7 +30,7 @@ public static void manageStation(Scanner scanner) { OutputView.printStationManagementScreen(); String stationInput = scanner.next(); if (inputService.isInput(stationInput)) { - stationService.chooseFeature(stationInput); + stationService.chooseFeature(stationInput, scanner); break; } OutputView.printInvalidFeatureChoiceException(); @@ -37,7 +38,7 @@ public static void manageStation(Scanner scanner) { } @Override - public void chooseFeature(String input) { + public void chooseFeature(String input, Scanner scanner) { if (input.equals(InputType.INPUT_ONE.getInput())) { // TODO: 역 등록 기능 구현 return; @@ -54,4 +55,14 @@ public void chooseFeature(String input) { return; } } + + @Override + public void add(Scanner scanner) { + + } + + @Override + public void delete(Scanner scanner) { + + } } diff --git a/src/main/java/subway/service/SubwayService.java b/src/main/java/subway/service/SubwayService.java index 72ec24537..cb95125c8 100644 --- a/src/main/java/subway/service/SubwayService.java +++ b/src/main/java/subway/service/SubwayService.java @@ -3,14 +3,14 @@ import subway.controller.LineController; import subway.controller.SectionController; import subway.controller.StationController; -import subway.service.abstraction.feature.SubwayFeatureInterface; +import subway.service.abstraction.feature.FeatureChoiceInterface; import subway.service.abstraction.input.InputInterface; import subway.type.InputType; import subway.view.OutputView; import java.util.Scanner; -public class SubwayService implements InputInterface, SubwayFeatureInterface { +public class SubwayService implements InputInterface, FeatureChoiceInterface { public static void manageSubway(Scanner scanner) { SubwayService subwayService = new SubwayService(); @@ -21,7 +21,7 @@ public static void manageSubway(Scanner scanner) { break; } if (subwayService.isInput(mainInput)) { - subwayService.chooseSubwayFeature(mainInput, scanner); + subwayService.chooseFeature(mainInput, scanner); continue; } OutputView.printInvalidFeatureChoiceException(); @@ -47,7 +47,7 @@ public boolean isInput(String input) { } @Override - public void chooseSubwayFeature(String input, Scanner scanner) { + public void chooseFeature(String input, Scanner scanner) { if (input.equals(InputType.INPUT_ONE.getInput())) { StationController.startStation(scanner); return; diff --git a/src/main/java/subway/service/abstraction/feature/FeatureChoiceInterface.java b/src/main/java/subway/service/abstraction/feature/FeatureChoiceInterface.java new file mode 100644 index 000000000..5b5549d18 --- /dev/null +++ b/src/main/java/subway/service/abstraction/feature/FeatureChoiceInterface.java @@ -0,0 +1,7 @@ +package subway.service.abstraction.feature; + +import java.util.Scanner; + +public interface FeatureChoiceInterface { + void chooseFeature(String input, Scanner scanner); +} diff --git a/src/main/java/subway/service/abstraction/feature/FeatureInterface.java b/src/main/java/subway/service/abstraction/feature/FeatureInterface.java index 2cebb9e13..c51c2c8b9 100644 --- a/src/main/java/subway/service/abstraction/feature/FeatureInterface.java +++ b/src/main/java/subway/service/abstraction/feature/FeatureInterface.java @@ -1,5 +1,8 @@ package subway.service.abstraction.feature; +import java.util.Scanner; + public interface FeatureInterface { - void chooseFeature(String input); + void add(Scanner scanner); + void delete(Scanner scanner); } diff --git a/src/main/java/subway/service/abstraction/feature/SubwayFeatureInterface.java b/src/main/java/subway/service/abstraction/feature/SubwayFeatureInterface.java deleted file mode 100644 index 9e67211a0..000000000 --- a/src/main/java/subway/service/abstraction/feature/SubwayFeatureInterface.java +++ /dev/null @@ -1,7 +0,0 @@ -package subway.service.abstraction.feature; - -import java.util.Scanner; - -public interface SubwayFeatureInterface { - void chooseSubwayFeature(String input, Scanner scanner); -} From 9c907ef60d7f740c2f917c6bf604c2f71546ff84 Mon Sep 17 00:00:00 2001 From: daeun Date: Sat, 12 Dec 2020 21:48:10 +0900 Subject: [PATCH 25/98] feat(station-service): add a station MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - [지하철 역] 지하철 역을 등록하는 기능 구현 --- docs/README.md | 2 +- src/main/java/subway/service/StationService.java | 8 ++++++-- src/main/java/subway/type/InformationType.java | 16 ++++++++++++++++ src/main/java/subway/type/TextType.java | 15 +++++++++++++++ src/main/java/subway/view/OutputView.java | 12 ++++++++++++ 5 files changed, 50 insertions(+), 3 deletions(-) create mode 100644 src/main/java/subway/type/InformationType.java create mode 100644 src/main/java/subway/type/TextType.java diff --git a/docs/README.md b/docs/README.md index 55e9608ff..d4289c52a 100644 --- a/docs/README.md +++ b/docs/README.md @@ -17,7 +17,7 @@ - [ ] 신분당선에는 `상행 종점` 강남역 - 양재역 - 양재시민의숲역 `하행 종점`을 등록한다. ### 지하철 역 -- [ ] 지하철 역을 등록한다. +- [x] 지하철 역을 등록한다. - [ ] 지하철 역 이름은 중복될 수 없다. `예외` - [ ] 지하철 역 이름은 2글자 이상이어야 한다. `예외` - [ ] 지하철 역을 삭제한다. diff --git a/src/main/java/subway/service/StationService.java b/src/main/java/subway/service/StationService.java index 37114dc7e..e5cf7f505 100644 --- a/src/main/java/subway/service/StationService.java +++ b/src/main/java/subway/service/StationService.java @@ -40,7 +40,7 @@ public static void manageStation(Scanner scanner) { @Override public void chooseFeature(String input, Scanner scanner) { if (input.equals(InputType.INPUT_ONE.getInput())) { - // TODO: 역 등록 기능 구현 + add(scanner); return; } if (input.equals(InputType.INPUT_TWO.getInput())) { @@ -58,7 +58,11 @@ public void chooseFeature(String input, Scanner scanner) { @Override public void add(Scanner scanner) { - + OutputView.printStationAddingText(); + String stationName = scanner.next(); + StationRepository.addStation(new Station(stationName)); + OutputView.printStationAddingInformation(); + System.out.println(); } @Override diff --git a/src/main/java/subway/type/InformationType.java b/src/main/java/subway/type/InformationType.java new file mode 100644 index 000000000..1eeaf824f --- /dev/null +++ b/src/main/java/subway/type/InformationType.java @@ -0,0 +1,16 @@ +package subway.type; + +public enum InformationType { + INFORMATION("[INFO] "), + STATION_ADDING_INFORMATION(INFORMATION.getInformation() + "지하철 역이 등록되었습니다."); + + private final String information; + + InformationType(String information) { + this.information = information; + } + + public String getInformation() { + return information; + } +} diff --git a/src/main/java/subway/type/TextType.java b/src/main/java/subway/type/TextType.java new file mode 100644 index 000000000..c51fe6a79 --- /dev/null +++ b/src/main/java/subway/type/TextType.java @@ -0,0 +1,15 @@ +package subway.type; + +public enum TextType { + STATION_ADDING_TEXT("## 등록할 역 이름을 입력하세요."); + + private final String text; + + TextType(String text) { + this.text = text; + } + + public String getText() { + return text; + } +} diff --git a/src/main/java/subway/view/OutputView.java b/src/main/java/subway/view/OutputView.java index 15f705198..0345cc4f2 100644 --- a/src/main/java/subway/view/OutputView.java +++ b/src/main/java/subway/view/OutputView.java @@ -1,7 +1,9 @@ package subway.view; import subway.type.ExceptionType; +import subway.type.InformationType; import subway.type.ScreenType; +import subway.type.TextType; public class OutputView { public static void printMainScreen() { @@ -44,4 +46,14 @@ public static void printInvalidFeatureChoiceException() { System.out.println(); System.out.println(ExceptionType.INVALID_FEATURE_CHOICE.getException()); } + + public static void printStationAddingText() { + System.out.println(); + System.out.println(TextType.STATION_ADDING_TEXT.getText()); + } + + public static void printStationAddingInformation() { + System.out.println(); + System.out.println(InformationType.STATION_ADDING_INFORMATION.getInformation()); + } } From d8157637ade4d776627552db710bae2e64692c2f Mon Sep 17 00:00:00 2001 From: daeun Date: Sat, 12 Dec 2020 21:59:37 +0900 Subject: [PATCH 26/98] style(subway): separate the class MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 하나의 클래스를 여러 개의 클래스로 분리 --- src/main/java/subway/service/LineService.java | 7 +++--- .../java/subway/service/SectionService.java | 7 +++--- .../java/subway/service/StationService.java | 13 ++++++----- .../java/subway/service/SubwayService.java | 7 +++--- .../subway/view/output/ExceptionView.java | 10 +++++++++ .../subway/view/output/InformationView.java | 10 +++++++++ .../ScreenView.java} | 22 ++----------------- .../java/subway/view/output/TextView.java | 10 +++++++++ 8 files changed, 52 insertions(+), 34 deletions(-) create mode 100644 src/main/java/subway/view/output/ExceptionView.java create mode 100644 src/main/java/subway/view/output/InformationView.java rename src/main/java/subway/view/{OutputView.java => output/ScreenView.java} (71%) create mode 100644 src/main/java/subway/view/output/TextView.java diff --git a/src/main/java/subway/service/LineService.java b/src/main/java/subway/service/LineService.java index 3940f7059..c9f2d45a9 100644 --- a/src/main/java/subway/service/LineService.java +++ b/src/main/java/subway/service/LineService.java @@ -6,7 +6,8 @@ import subway.service.abstraction.feature.FeatureInterface; import subway.type.InputType; import subway.type.LineType; -import subway.view.OutputView; +import subway.view.output.ExceptionView; +import subway.view.output.ScreenView; import java.util.Scanner; @@ -23,13 +24,13 @@ public static void manageLine(Scanner scanner){ System.out.println(); while (true) { - OutputView.printLineManagementScreen(); + ScreenView.printLineManagementScreen(); String lineInput = scanner.next(); if (inputService.isInput(lineInput)) { lineService.chooseFeature(lineInput, scanner); break; } - OutputView.printInvalidFeatureChoiceException(); + ExceptionView.printInvalidFeatureChoiceException(); } } diff --git a/src/main/java/subway/service/SectionService.java b/src/main/java/subway/service/SectionService.java index 91d0bd1ca..ef589b412 100644 --- a/src/main/java/subway/service/SectionService.java +++ b/src/main/java/subway/service/SectionService.java @@ -4,7 +4,8 @@ import subway.service.abstraction.feature.FeatureInterface; import subway.service.abstraction.input.InputInterface; import subway.type.InputType; -import subway.view.OutputView; +import subway.view.output.ExceptionView; +import subway.view.output.ScreenView; import java.util.Scanner; @@ -14,13 +15,13 @@ public static void manageSection(Scanner scanner) { System.out.println(); while (true) { - OutputView.printSectionManagementScreen(); + ScreenView.printSectionManagementScreen(); String sectionInput = scanner.next(); if (sectionService.isInput(sectionInput)) { sectionService.chooseFeature(sectionInput, scanner); break; } - OutputView.printInvalidFeatureChoiceException(); + ExceptionView.printInvalidFeatureChoiceException(); } } diff --git a/src/main/java/subway/service/StationService.java b/src/main/java/subway/service/StationService.java index e5cf7f505..28e640921 100644 --- a/src/main/java/subway/service/StationService.java +++ b/src/main/java/subway/service/StationService.java @@ -6,7 +6,10 @@ import subway.service.abstraction.feature.FeatureInterface; import subway.type.InputType; import subway.type.StationType; -import subway.view.OutputView; +import subway.view.output.ExceptionView; +import subway.view.output.InformationView; +import subway.view.output.ScreenView; +import subway.view.output.TextView; import java.util.Scanner; @@ -27,13 +30,13 @@ public static void manageStation(Scanner scanner) { System.out.println(); while (true) { - OutputView.printStationManagementScreen(); + ScreenView.printStationManagementScreen(); String stationInput = scanner.next(); if (inputService.isInput(stationInput)) { stationService.chooseFeature(stationInput, scanner); break; } - OutputView.printInvalidFeatureChoiceException(); + ExceptionView.printInvalidFeatureChoiceException(); } } @@ -58,10 +61,10 @@ public void chooseFeature(String input, Scanner scanner) { @Override public void add(Scanner scanner) { - OutputView.printStationAddingText(); + TextView.printStationAddingText(); String stationName = scanner.next(); StationRepository.addStation(new Station(stationName)); - OutputView.printStationAddingInformation(); + InformationView.printStationAddingInformation(); System.out.println(); } diff --git a/src/main/java/subway/service/SubwayService.java b/src/main/java/subway/service/SubwayService.java index cb95125c8..936ff6d4b 100644 --- a/src/main/java/subway/service/SubwayService.java +++ b/src/main/java/subway/service/SubwayService.java @@ -6,7 +6,8 @@ import subway.service.abstraction.feature.FeatureChoiceInterface; import subway.service.abstraction.input.InputInterface; import subway.type.InputType; -import subway.view.OutputView; +import subway.view.output.ExceptionView; +import subway.view.output.ScreenView; import java.util.Scanner; @@ -15,7 +16,7 @@ public static void manageSubway(Scanner scanner) { SubwayService subwayService = new SubwayService(); while (true) { - OutputView.printMainScreen(); + ScreenView.printMainScreen(); String mainInput = scanner.next(); if (quitSubway(mainInput)) { break; @@ -24,7 +25,7 @@ public static void manageSubway(Scanner scanner) { subwayService.chooseFeature(mainInput, scanner); continue; } - OutputView.printInvalidFeatureChoiceException(); + ExceptionView.printInvalidFeatureChoiceException(); } } diff --git a/src/main/java/subway/view/output/ExceptionView.java b/src/main/java/subway/view/output/ExceptionView.java new file mode 100644 index 000000000..f012d3945 --- /dev/null +++ b/src/main/java/subway/view/output/ExceptionView.java @@ -0,0 +1,10 @@ +package subway.view.output; + +import subway.type.ExceptionType; + +public class ExceptionView { + public static void printInvalidFeatureChoiceException() { + System.out.println(); + System.out.println(ExceptionType.INVALID_FEATURE_CHOICE.getException()); + } +} diff --git a/src/main/java/subway/view/output/InformationView.java b/src/main/java/subway/view/output/InformationView.java new file mode 100644 index 000000000..1fc960c34 --- /dev/null +++ b/src/main/java/subway/view/output/InformationView.java @@ -0,0 +1,10 @@ +package subway.view.output; + +import subway.type.InformationType; + +public class InformationView { + public static void printStationAddingInformation() { + System.out.println(); + System.out.println(InformationType.STATION_ADDING_INFORMATION.getInformation()); + } +} diff --git a/src/main/java/subway/view/OutputView.java b/src/main/java/subway/view/output/ScreenView.java similarity index 71% rename from src/main/java/subway/view/OutputView.java rename to src/main/java/subway/view/output/ScreenView.java index 0345cc4f2..b710e0ca8 100644 --- a/src/main/java/subway/view/OutputView.java +++ b/src/main/java/subway/view/output/ScreenView.java @@ -1,11 +1,8 @@ -package subway.view; +package subway.view.output; -import subway.type.ExceptionType; -import subway.type.InformationType; import subway.type.ScreenType; -import subway.type.TextType; -public class OutputView { +public class ScreenView { public static void printMainScreen() { System.out.println(ScreenType.MAIN_SCREEN.getScreen() + ScreenType.STATION_MANAGEMENT.getScreen() @@ -41,19 +38,4 @@ public static void printSectionManagementScreen() { + ScreenType.BACK.getScreen() + ScreenType.FEATURE_CHOICE.getScreen()); } - - public static void printInvalidFeatureChoiceException() { - System.out.println(); - System.out.println(ExceptionType.INVALID_FEATURE_CHOICE.getException()); - } - - public static void printStationAddingText() { - System.out.println(); - System.out.println(TextType.STATION_ADDING_TEXT.getText()); - } - - public static void printStationAddingInformation() { - System.out.println(); - System.out.println(InformationType.STATION_ADDING_INFORMATION.getInformation()); - } } diff --git a/src/main/java/subway/view/output/TextView.java b/src/main/java/subway/view/output/TextView.java new file mode 100644 index 000000000..8bfbe76bf --- /dev/null +++ b/src/main/java/subway/view/output/TextView.java @@ -0,0 +1,10 @@ +package subway.view.output; + +import subway.type.TextType; + +public class TextView { + public static void printStationAddingText() { + System.out.println(); + System.out.println(TextType.STATION_ADDING_TEXT.getText()); + } +} From c19dc3913d262ad888c77e2444fa9cb844f1ee38 Mon Sep 17 00:00:00 2001 From: daeun Date: Sun, 13 Dec 2020 00:14:01 +0900 Subject: [PATCH 27/98] refactor(subway): change the return type MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 인터페이스 리턴 타입 변경 --- src/main/java/subway/service/InputService.java | 7 ++++++- src/main/java/subway/service/LineService.java | 15 ++++++++------- src/main/java/subway/service/SectionService.java | 13 +++++++------ .../feature/FeatureChoiceInterface.java | 2 +- .../abstraction/feature/FeatureInterface.java | 2 +- 5 files changed, 23 insertions(+), 16 deletions(-) diff --git a/src/main/java/subway/service/InputService.java b/src/main/java/subway/service/InputService.java index bbbfce0f8..39b55f0b9 100644 --- a/src/main/java/subway/service/InputService.java +++ b/src/main/java/subway/service/InputService.java @@ -2,6 +2,7 @@ import subway.service.abstraction.input.InputInterface; import subway.type.InputType; +import subway.view.output.ExceptionView; public class InputService implements InputInterface { @Override @@ -15,6 +16,10 @@ public boolean isInput(String input) { if (input.equals(InputType.INPUT_THREE.getInput())) { return true; } - return input.equals(InputType.INPUT_BACK.getInput()); + if (input.equals(InputType.INPUT_BACK.getInput())) { + return true; + } + ExceptionView.printInvalidFeatureChoiceException(); + return false; } } diff --git a/src/main/java/subway/service/LineService.java b/src/main/java/subway/service/LineService.java index c9f2d45a9..9dc17130f 100644 --- a/src/main/java/subway/service/LineService.java +++ b/src/main/java/subway/service/LineService.java @@ -35,27 +35,28 @@ public static void manageLine(Scanner scanner){ } @Override - public void chooseFeature(String input, Scanner scanner) { + public boolean chooseFeature(String input, Scanner scanner) { if (input.equals(InputType.INPUT_ONE.getInput())) { // TODO: 노선 등록 기능 구현 - return; + return false; } if (input.equals(InputType.INPUT_TWO.getInput())) { // TODO: 노선 삭제 기능 구현 - return; + return false; } if (input.equals(InputType.INPUT_THREE.getInput())) { // TODO: 노선 조회 기능 구현 - return; + return false; } if (input.equals(InputType.INPUT_BACK.getInput())) { - return; + return true; } + return false; } @Override - public void add(Scanner scanner) { - + public boolean add(Scanner scanner) { + return false; } @Override diff --git a/src/main/java/subway/service/SectionService.java b/src/main/java/subway/service/SectionService.java index ef589b412..c1a416673 100644 --- a/src/main/java/subway/service/SectionService.java +++ b/src/main/java/subway/service/SectionService.java @@ -37,23 +37,24 @@ public boolean isInput(String input) { } @Override - public void chooseFeature(String input, Scanner scanner) { + public boolean chooseFeature(String input, Scanner scanner) { if (input.equals(InputType.INPUT_ONE.getInput())) { // TODO: 구간 등록 기능 구현 - return; + return false; } if (input.equals(InputType.INPUT_TWO.getInput())) { // TODO: 구간 삭제 기능 구현 - return; + return false; } if (input.equals(InputType.INPUT_BACK.getInput())) { - return; + return true; } + return false; } @Override - public void add(Scanner scanner) { - + public boolean add(Scanner scanner) { + return false; } @Override diff --git a/src/main/java/subway/service/abstraction/feature/FeatureChoiceInterface.java b/src/main/java/subway/service/abstraction/feature/FeatureChoiceInterface.java index 5b5549d18..9223bab9f 100644 --- a/src/main/java/subway/service/abstraction/feature/FeatureChoiceInterface.java +++ b/src/main/java/subway/service/abstraction/feature/FeatureChoiceInterface.java @@ -3,5 +3,5 @@ import java.util.Scanner; public interface FeatureChoiceInterface { - void chooseFeature(String input, Scanner scanner); + boolean chooseFeature(String input, Scanner scanner); } diff --git a/src/main/java/subway/service/abstraction/feature/FeatureInterface.java b/src/main/java/subway/service/abstraction/feature/FeatureInterface.java index c51c2c8b9..12bbfa1b5 100644 --- a/src/main/java/subway/service/abstraction/feature/FeatureInterface.java +++ b/src/main/java/subway/service/abstraction/feature/FeatureInterface.java @@ -3,6 +3,6 @@ import java.util.Scanner; public interface FeatureInterface { - void add(Scanner scanner); + boolean add(Scanner scanner); void delete(Scanner scanner); } From 3280e26464f579089cb40fab6df34956d319d7f5 Mon Sep 17 00:00:00 2001 From: daeun Date: Sun, 13 Dec 2020 00:26:10 +0900 Subject: [PATCH 28/98] refactor(subway-service): modify the function MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - [입출력] 인터페이스 구현 함수에서 정적 함수로 수정 --- src/main/java/subway/service/SubwayService.java | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/src/main/java/subway/service/SubwayService.java b/src/main/java/subway/service/SubwayService.java index 936ff6d4b..3b8b942a9 100644 --- a/src/main/java/subway/service/SubwayService.java +++ b/src/main/java/subway/service/SubwayService.java @@ -3,7 +3,6 @@ import subway.controller.LineController; import subway.controller.SectionController; import subway.controller.StationController; -import subway.service.abstraction.feature.FeatureChoiceInterface; import subway.service.abstraction.input.InputInterface; import subway.type.InputType; import subway.view.output.ExceptionView; @@ -11,7 +10,7 @@ import java.util.Scanner; -public class SubwayService implements InputInterface, FeatureChoiceInterface { +public class SubwayService implements InputInterface { public static void manageSubway(Scanner scanner) { SubwayService subwayService = new SubwayService(); @@ -22,7 +21,7 @@ public static void manageSubway(Scanner scanner) { break; } if (subwayService.isInput(mainInput)) { - subwayService.chooseFeature(mainInput, scanner); + chooseSubwayFeature(mainInput, scanner); continue; } ExceptionView.printInvalidFeatureChoiceException(); @@ -47,23 +46,18 @@ public boolean isInput(String input) { return input.equals(InputType.INPUT_FOUR.getInput()); } - @Override - public void chooseFeature(String input, Scanner scanner) { + public static void chooseSubwayFeature(String input, Scanner scanner) { if (input.equals(InputType.INPUT_ONE.getInput())) { StationController.startStation(scanner); - return; } if (input.equals(InputType.INPUT_TWO.getInput())) { LineController.startLine(scanner); - return; } if (input.equals(InputType.INPUT_THREE.getInput())) { SectionController.startSection(scanner); - return; } if (input.equals(InputType.INPUT_FOUR.getInput())) { // TODO: 지하철 노선도 출력 기능 구현 - return; } } } From d7238b707e0f6e229435c81d341676c171794bd3 Mon Sep 17 00:00:00 2001 From: daeun Date: Sun, 13 Dec 2020 00:28:00 +0900 Subject: [PATCH 29/98] feat(station-service): throw an exception MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - [지하철 역] 지하철 역 이름이 중복되는 경우 예외 처리하는 기능 구현 - [지하철 역] 지하철 역 이름이 2글자 미만인 경우 예외 처리하는 기능 구현 --- docs/README.md | 4 +- .../subway/repository/StationRepository.java | 8 ++++ .../java/subway/service/StationService.java | 44 +++++++++++++------ .../exception/ExceptionInterface.java | 6 +++ .../service/validation/StationValidation.java | 20 +++++++++ src/main/java/subway/type/BoundaryType.java | 15 +++++++ src/main/java/subway/type/ExceptionType.java | 4 +- .../subway/view/output/ExceptionView.java | 10 +++++ 8 files changed, 95 insertions(+), 16 deletions(-) create mode 100644 src/main/java/subway/service/abstraction/exception/ExceptionInterface.java create mode 100644 src/main/java/subway/service/validation/StationValidation.java create mode 100644 src/main/java/subway/type/BoundaryType.java diff --git a/docs/README.md b/docs/README.md index d4289c52a..a1c942ada 100644 --- a/docs/README.md +++ b/docs/README.md @@ -18,8 +18,8 @@ ### 지하철 역 - [x] 지하철 역을 등록한다. - - [ ] 지하철 역 이름은 중복될 수 없다. `예외` - - [ ] 지하철 역 이름은 2글자 이상이어야 한다. `예외` + - [x] 지하철 역 이름은 중복될 수 없다. `예외` + - [x] 지하철 역 이름은 2글자 이상이어야 한다. `예외` - [ ] 지하철 역을 삭제한다. - [ ] 지하철 역이 지하철 노선에 등록된 경우 삭제할 수 없다. `예외` - [ ] 지하철 역의 목록을 조회한다. diff --git a/src/main/java/subway/repository/StationRepository.java b/src/main/java/subway/repository/StationRepository.java index 211b46558..ad0f135fb 100644 --- a/src/main/java/subway/repository/StationRepository.java +++ b/src/main/java/subway/repository/StationRepository.java @@ -9,6 +9,7 @@ public class StationRepository { private static final List stations = new ArrayList<>(); + private static final List stationNames = new ArrayList<>(); public static List stations() { return Collections.unmodifiableList(stations); @@ -21,4 +22,11 @@ public static void addStation(Station station) { public static boolean deleteStation(String name) { return stations.removeIf(station -> Objects.equals(station.getName(), name)); } + + public static List getStationNames() { + for (Station station : stations) { + stationNames.add(station.getName()); + } + return stationNames; + } } diff --git a/src/main/java/subway/service/StationService.java b/src/main/java/subway/service/StationService.java index 28e640921..2ab0b2872 100644 --- a/src/main/java/subway/service/StationService.java +++ b/src/main/java/subway/service/StationService.java @@ -4,6 +4,7 @@ import subway.repository.StationRepository; import subway.service.abstraction.feature.FeatureChoiceInterface; import subway.service.abstraction.feature.FeatureInterface; +import subway.service.validation.StationValidation; import subway.type.InputType; import subway.type.StationType; import subway.view.output.ExceptionView; @@ -32,40 +33,57 @@ public static void manageStation(Scanner scanner) { while (true) { ScreenView.printStationManagementScreen(); String stationInput = scanner.next(); - if (inputService.isInput(stationInput)) { - stationService.chooseFeature(stationInput, scanner); + if ((inputService.isInput(stationInput)) + && (stationService.chooseFeature(stationInput, scanner))) { break; } - ExceptionView.printInvalidFeatureChoiceException(); } } @Override - public void chooseFeature(String input, Scanner scanner) { + public boolean chooseFeature(String input, Scanner scanner) { if (input.equals(InputType.INPUT_ONE.getInput())) { - add(scanner); - return; + return add(scanner); } if (input.equals(InputType.INPUT_TWO.getInput())) { // TODO: 역 삭제 기능 구현 - return; + return false; } if (input.equals(InputType.INPUT_THREE.getInput())) { // TODO: 역 조회 기능 구현 - return; + return false; } if (input.equals(InputType.INPUT_BACK.getInput())) { - return; + return true; } + return false; } @Override - public void add(Scanner scanner) { + public boolean add(Scanner scanner) { TextView.printStationAddingText(); String stationName = scanner.next(); - StationRepository.addStation(new Station(stationName)); - InformationView.printStationAddingInformation(); - System.out.println(); + if (checkValidation(stationName)) { + StationRepository.addStation(new Station(stationName)); + InformationView.printStationAddingInformation(); + System.out.println(); + return true; + } + return false; + } + + public static boolean checkValidation(String stationName) { + StationValidation stationValidation = new StationValidation(); + + if (stationValidation.checkNameDuplication(stationName)) { + ExceptionView.printInvalidStationNameException(); + return false; + } + if (stationValidation.checkNameLength(stationName)) { + ExceptionView.printInvalidStationNameLengthException(); + return false; + } + return true; } @Override diff --git a/src/main/java/subway/service/abstraction/exception/ExceptionInterface.java b/src/main/java/subway/service/abstraction/exception/ExceptionInterface.java new file mode 100644 index 000000000..72d559ba4 --- /dev/null +++ b/src/main/java/subway/service/abstraction/exception/ExceptionInterface.java @@ -0,0 +1,6 @@ +package subway.service.abstraction.exception; + +public interface ExceptionInterface { + boolean checkNameDuplication(String name); + boolean checkNameLength(String name); +} diff --git a/src/main/java/subway/service/validation/StationValidation.java b/src/main/java/subway/service/validation/StationValidation.java new file mode 100644 index 000000000..f3668341a --- /dev/null +++ b/src/main/java/subway/service/validation/StationValidation.java @@ -0,0 +1,20 @@ +package subway.service.validation; + +import subway.repository.StationRepository; +import subway.service.abstraction.exception.ExceptionInterface; +import subway.type.BoundaryType; + +import java.util.List; + +public class StationValidation implements ExceptionInterface { + @Override + public boolean checkNameDuplication(String stationName) { + List stationNames = StationRepository.getStationNames(); + return stationNames.contains(stationName); + } + + @Override + public boolean checkNameLength(String stationName) { + return stationName.length() < BoundaryType.NAME_LENGTH_BOUNDARY.getBoundary(); + } +} diff --git a/src/main/java/subway/type/BoundaryType.java b/src/main/java/subway/type/BoundaryType.java new file mode 100644 index 000000000..80347455c --- /dev/null +++ b/src/main/java/subway/type/BoundaryType.java @@ -0,0 +1,15 @@ +package subway.type; + +public enum BoundaryType { + NAME_LENGTH_BOUNDARY(2); + + private final int boundary; + + BoundaryType(int boundary) { + this.boundary = boundary; + } + + public int getBoundary() { + return boundary; + } +} diff --git a/src/main/java/subway/type/ExceptionType.java b/src/main/java/subway/type/ExceptionType.java index 1ec8b543e..a38460ddd 100644 --- a/src/main/java/subway/type/ExceptionType.java +++ b/src/main/java/subway/type/ExceptionType.java @@ -2,7 +2,9 @@ public enum ExceptionType { ERROR("[ERROR] "), - INVALID_FEATURE_CHOICE(ERROR.getException() + "선택할 수 없는 기능입니다.\n"); + INVALID_FEATURE_CHOICE(ERROR.getException() + "선택할 수 없는 기능입니다.\n"), + INVALID_STATION_NAME(ERROR.getException() + "이미 등록된 역 이름입니다.\n"), + INVALID_STATION_NAME_LENGTH(ERROR.getException() + "2글자 이상의 역 이름을 입력해주세요.\n"); private final String exception; diff --git a/src/main/java/subway/view/output/ExceptionView.java b/src/main/java/subway/view/output/ExceptionView.java index f012d3945..a9e512f86 100644 --- a/src/main/java/subway/view/output/ExceptionView.java +++ b/src/main/java/subway/view/output/ExceptionView.java @@ -7,4 +7,14 @@ public static void printInvalidFeatureChoiceException() { System.out.println(); System.out.println(ExceptionType.INVALID_FEATURE_CHOICE.getException()); } + + public static void printInvalidStationNameException() { + System.out.println(); + System.out.println(ExceptionType.INVALID_STATION_NAME.getException()); + } + + public static void printInvalidStationNameLengthException() { + System.out.println(); + System.out.println(ExceptionType.INVALID_STATION_NAME_LENGTH.getException()); + } } From 4f5bd251f9e41bf86a39c6b9858a9036253f3aaa Mon Sep 17 00:00:00 2001 From: daeun Date: Sun, 13 Dec 2020 01:01:37 +0900 Subject: [PATCH 30/98] style(subway): change the input function MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 입력 함수 변경 --- src/main/java/subway/service/LineService.java | 2 +- src/main/java/subway/service/SectionService.java | 2 +- src/main/java/subway/service/StationService.java | 4 ++-- src/main/java/subway/service/SubwayService.java | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/subway/service/LineService.java b/src/main/java/subway/service/LineService.java index 9dc17130f..24fc5402b 100644 --- a/src/main/java/subway/service/LineService.java +++ b/src/main/java/subway/service/LineService.java @@ -25,7 +25,7 @@ public static void manageLine(Scanner scanner){ System.out.println(); while (true) { ScreenView.printLineManagementScreen(); - String lineInput = scanner.next(); + String lineInput = scanner.nextLine(); if (inputService.isInput(lineInput)) { lineService.chooseFeature(lineInput, scanner); break; diff --git a/src/main/java/subway/service/SectionService.java b/src/main/java/subway/service/SectionService.java index c1a416673..12c692574 100644 --- a/src/main/java/subway/service/SectionService.java +++ b/src/main/java/subway/service/SectionService.java @@ -16,7 +16,7 @@ public static void manageSection(Scanner scanner) { System.out.println(); while (true) { ScreenView.printSectionManagementScreen(); - String sectionInput = scanner.next(); + String sectionInput = scanner.nextLine(); if (sectionService.isInput(sectionInput)) { sectionService.chooseFeature(sectionInput, scanner); break; diff --git a/src/main/java/subway/service/StationService.java b/src/main/java/subway/service/StationService.java index 2ab0b2872..0d955ad9a 100644 --- a/src/main/java/subway/service/StationService.java +++ b/src/main/java/subway/service/StationService.java @@ -32,7 +32,7 @@ public static void manageStation(Scanner scanner) { System.out.println(); while (true) { ScreenView.printStationManagementScreen(); - String stationInput = scanner.next(); + String stationInput = scanner.nextLine(); if ((inputService.isInput(stationInput)) && (stationService.chooseFeature(stationInput, scanner))) { break; @@ -62,7 +62,7 @@ public boolean chooseFeature(String input, Scanner scanner) { @Override public boolean add(Scanner scanner) { TextView.printStationAddingText(); - String stationName = scanner.next(); + String stationName = scanner.nextLine(); if (checkValidation(stationName)) { StationRepository.addStation(new Station(stationName)); InformationView.printStationAddingInformation(); diff --git a/src/main/java/subway/service/SubwayService.java b/src/main/java/subway/service/SubwayService.java index 3b8b942a9..a5b66e865 100644 --- a/src/main/java/subway/service/SubwayService.java +++ b/src/main/java/subway/service/SubwayService.java @@ -16,7 +16,7 @@ public static void manageSubway(Scanner scanner) { while (true) { ScreenView.printMainScreen(); - String mainInput = scanner.next(); + String mainInput = scanner.nextLine(); if (quitSubway(mainInput)) { break; } From 4f43b79fa4124bacd224560e925bbba3f9ef7862 Mon Sep 17 00:00:00 2001 From: daeun Date: Sun, 13 Dec 2020 01:27:47 +0900 Subject: [PATCH 31/98] refactor(subway): change the return type MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 인터페이스 리턴 타입 변경 --- src/main/java/subway/service/LineService.java | 4 ++-- src/main/java/subway/service/SectionService.java | 4 ++-- src/main/java/subway/service/StationService.java | 7 +++---- .../service/abstraction/feature/FeatureInterface.java | 2 +- 4 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/main/java/subway/service/LineService.java b/src/main/java/subway/service/LineService.java index 24fc5402b..41176571c 100644 --- a/src/main/java/subway/service/LineService.java +++ b/src/main/java/subway/service/LineService.java @@ -60,7 +60,7 @@ public boolean add(Scanner scanner) { } @Override - public void delete(Scanner scanner) { - + public boolean delete(Scanner scanner) { + return false; } } diff --git a/src/main/java/subway/service/SectionService.java b/src/main/java/subway/service/SectionService.java index 12c692574..3cf008154 100644 --- a/src/main/java/subway/service/SectionService.java +++ b/src/main/java/subway/service/SectionService.java @@ -58,7 +58,7 @@ public boolean add(Scanner scanner) { } @Override - public void delete(Scanner scanner) { - + public boolean delete(Scanner scanner) { + return false; } } diff --git a/src/main/java/subway/service/StationService.java b/src/main/java/subway/service/StationService.java index 0d955ad9a..0fa233541 100644 --- a/src/main/java/subway/service/StationService.java +++ b/src/main/java/subway/service/StationService.java @@ -46,8 +46,7 @@ public boolean chooseFeature(String input, Scanner scanner) { return add(scanner); } if (input.equals(InputType.INPUT_TWO.getInput())) { - // TODO: 역 삭제 기능 구현 - return false; + return delete(scanner); } if (input.equals(InputType.INPUT_THREE.getInput())) { // TODO: 역 조회 기능 구현 @@ -87,7 +86,7 @@ public static boolean checkValidation(String stationName) { } @Override - public void delete(Scanner scanner) { - + public boolean delete(Scanner scanner) { + return false; } } diff --git a/src/main/java/subway/service/abstraction/feature/FeatureInterface.java b/src/main/java/subway/service/abstraction/feature/FeatureInterface.java index 12bbfa1b5..9a6625be1 100644 --- a/src/main/java/subway/service/abstraction/feature/FeatureInterface.java +++ b/src/main/java/subway/service/abstraction/feature/FeatureInterface.java @@ -4,5 +4,5 @@ public interface FeatureInterface { boolean add(Scanner scanner); - void delete(Scanner scanner); + boolean delete(Scanner scanner); } From 78f0c7346d5facda21cbee0e4a202f95afce7c22 Mon Sep 17 00:00:00 2001 From: daeun Date: Sun, 13 Dec 2020 01:59:28 +0900 Subject: [PATCH 32/98] feat(transit-map): organize the skeleton MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - [지하철 노선도] 지하철 노선도 골격 구성 --- src/main/java/subway/domain/TransitMap.java | 21 +++++++++++++++++++ .../repository/TransitMapRepository.java | 18 ++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 src/main/java/subway/domain/TransitMap.java create mode 100644 src/main/java/subway/repository/TransitMapRepository.java diff --git a/src/main/java/subway/domain/TransitMap.java b/src/main/java/subway/domain/TransitMap.java new file mode 100644 index 000000000..a22a72088 --- /dev/null +++ b/src/main/java/subway/domain/TransitMap.java @@ -0,0 +1,21 @@ +package subway.domain; + +import java.util.LinkedList; + +public class TransitMap { + private Line transitMapLine; + private LinkedList transitMapStations; + + public TransitMap(Line transitMapLine, LinkedList transitMapStations) { + this.transitMapLine = transitMapLine; + this.transitMapStations = transitMapStations; + } + + public Line getTransitMapLine() { + return transitMapLine; + } + + public LinkedList getTransitMapStations() { + return transitMapStations; + } +} diff --git a/src/main/java/subway/repository/TransitMapRepository.java b/src/main/java/subway/repository/TransitMapRepository.java new file mode 100644 index 000000000..75845883a --- /dev/null +++ b/src/main/java/subway/repository/TransitMapRepository.java @@ -0,0 +1,18 @@ +package subway.repository; + +import subway.domain.Line; +import subway.domain.Station; + +import java.util.*; + +public class TransitMapRepository { + private static final Map> transitMaps = new HashMap<>(); + + public static Map> transitMaps() { + return Collections.unmodifiableMap(transitMaps); + } + + public static void addTransitMap(Line line, LinkedList stationList) { + transitMaps.put(line, stationList); + } +} From bae5a6970b5fbd5acf2ee1b7bc1bc9e89c54d2d5 Mon Sep 17 00:00:00 2001 From: daeun Date: Sun, 13 Dec 2020 02:15:36 +0900 Subject: [PATCH 33/98] fix(transit-map): modify the skeleton MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - [지하철 노선도] 지하철 노선도 골격 수정 --- src/main/java/subway/repository/TransitMapRepository.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/subway/repository/TransitMapRepository.java b/src/main/java/subway/repository/TransitMapRepository.java index 75845883a..606ef3fe5 100644 --- a/src/main/java/subway/repository/TransitMapRepository.java +++ b/src/main/java/subway/repository/TransitMapRepository.java @@ -2,6 +2,7 @@ import subway.domain.Line; import subway.domain.Station; +import subway.domain.TransitMap; import java.util.*; @@ -12,7 +13,7 @@ public static Map> transitMaps() { return Collections.unmodifiableMap(transitMaps); } - public static void addTransitMap(Line line, LinkedList stationList) { - transitMaps.put(line, stationList); + public static void addTransitMap(TransitMap transitMap) { + transitMaps.put(transitMap.getTransitMapLine(), transitMap.getTransitMapStations()); } } From dd12abce73b890844b4dcdab4927b4083946370e Mon Sep 17 00:00:00 2001 From: daeun Date: Sun, 13 Dec 2020 03:47:07 +0900 Subject: [PATCH 34/98] feat(transit-map-service): initialize transit maps MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - [초기 설정] 지하철 노선도를 초기 설정하는 기능 구현 --- docs/README.md | 6 +- .../subway/controller/SubwayController.java | 2 + .../subway/service/TransitMapService.java | 91 +++++++++++++++++++ 3 files changed, 96 insertions(+), 3 deletions(-) create mode 100644 src/main/java/subway/service/TransitMapService.java diff --git a/docs/README.md b/docs/README.md index a1c942ada..07749cf06 100644 --- a/docs/README.md +++ b/docs/README.md @@ -12,9 +12,9 @@ - [x] 2호선, 3호선, 신분당선을 등록한다. #### 지하철 노선도 -- [ ] 2호선에는 `상행 종점` 교대역 - 강남역 - 역삼역 `하행 종점`을 등록한다. -- [ ] 3호선에는 `상행 종점` 교대역 - 남부터미널역 - 양재역 - 매봉역 `하행 종점`을 등록한다. -- [ ] 신분당선에는 `상행 종점` 강남역 - 양재역 - 양재시민의숲역 `하행 종점`을 등록한다. +- [x] 2호선에는 `상행 종점` 교대역 - 강남역 - 역삼역 `하행 종점`을 등록한다. +- [x] 3호선에는 `상행 종점` 교대역 - 남부터미널역 - 양재역 - 매봉역 `하행 종점`을 등록한다. +- [x] 신분당선에는 `상행 종점` 강남역 - 양재역 - 양재시민의숲역 `하행 종점`을 등록한다. ### 지하철 역 - [x] 지하철 역을 등록한다. diff --git a/src/main/java/subway/controller/SubwayController.java b/src/main/java/subway/controller/SubwayController.java index f9bb871cb..92837b60c 100644 --- a/src/main/java/subway/controller/SubwayController.java +++ b/src/main/java/subway/controller/SubwayController.java @@ -3,6 +3,7 @@ import subway.service.LineService; import subway.service.StationService; import subway.service.SubwayService; +import subway.service.TransitMapService; import java.util.Scanner; @@ -15,6 +16,7 @@ public void runSubway(Scanner scanner) { public static void initializeSubway() { StationService.initializeStations(); LineService.initializeLines(); + TransitMapService.initializeTransitMaps(); } public static void startSubway(Scanner scanner) { diff --git a/src/main/java/subway/service/TransitMapService.java b/src/main/java/subway/service/TransitMapService.java new file mode 100644 index 000000000..e9ceed4f0 --- /dev/null +++ b/src/main/java/subway/service/TransitMapService.java @@ -0,0 +1,91 @@ +package subway.service; + +import subway.domain.Line; +import subway.domain.Station; +import subway.domain.TransitMap; +import subway.repository.LineRepository; +import subway.repository.StationRepository; +import subway.repository.TransitMapRepository; +import subway.type.StationType; + +import java.util.*; + +public class TransitMapService { + private static final List stations = StationRepository.stations(); + + public static void initializeTransitMaps() { + List lines = getInitializationLines(); + List> lineStations = getInitializationStations(); + + for (int i = 0; i < lines.size(); i++) { + TransitMapRepository.addTransitMap(new TransitMap(lines.get(i), lineStations.get(i))); + } + } + + public static List getInitializationLines() { + return LineRepository.lines(); + } + + public static List> getInitializationStations() { + List> lineStations = new ArrayList<>(); + LinkedList lineTwoStations = new LinkedList<>(); + LinkedList lineThreeStations = new LinkedList<>(); + LinkedList lineShinbundangStations = new LinkedList<>(); + + for (Station station : stations) { + getLineTwoStations(station, lineTwoStations); + getLineThreeStations(station, lineThreeStations); + getLineShinbundangStations(station, lineShinbundangStations); + } + + lineStations.add(lineTwoStations); + lineStations.add(lineThreeStations); + lineStations.add(lineShinbundangStations); + return lineStations; + } + + public static void getLineTwoStations(Station station, List lineTwoStations) { + String stationName = station.getName(); + + if (stationName.equals(StationType.EDUCATION_UNIVERSITY.getStation())) { + lineTwoStations.add(station); + } + if (stationName.equals(StationType.GANGNAM.getStation())) { + lineTwoStations.add(station); + } + if (stationName.equals(StationType.YEOKSAM.getStation())) { + lineTwoStations.add(station); + } + } + + public static void getLineThreeStations(Station station, List lineThreeStations) { + String stationName = station.getName(); + + if (stationName.equals(StationType.EDUCATION_UNIVERSITY.getStation())) { + lineThreeStations.add(station); + } + if (stationName.equals(StationType.NAMBU_BUS_TERMINAL.getStation())) { + lineThreeStations.add(station); + } + if (stationName.equals(StationType.YANGJAE.getStation())) { + lineThreeStations.add(station); + } + if (stationName.equals(StationType.MAEBONG.getStation())) { + lineThreeStations.add(station); + } + } + + public static void getLineShinbundangStations(Station station, List lineShinbundangStations) { + String stationName = station.getName(); + + if (stationName.equals(StationType.GANGNAM.getStation())) { + lineShinbundangStations.add(station); + } + if (stationName.equals(StationType.YANGJAE.getStation())) { + lineShinbundangStations.add(station); + } + if (stationName.equals(StationType.YANGJAE_CITIZENS_FOREST.getStation())) { + lineShinbundangStations.add(station); + } + } +} From 23a271a075904e504afe0ad940a2be4175b75aa6 Mon Sep 17 00:00:00 2001 From: daeun Date: Sun, 13 Dec 2020 04:27:24 +0900 Subject: [PATCH 35/98] refactor(transit-map): change the data type MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 데이터 타입 변경 --- src/main/java/subway/repository/TransitMapRepository.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/subway/repository/TransitMapRepository.java b/src/main/java/subway/repository/TransitMapRepository.java index 606ef3fe5..06639e5b8 100644 --- a/src/main/java/subway/repository/TransitMapRepository.java +++ b/src/main/java/subway/repository/TransitMapRepository.java @@ -7,7 +7,7 @@ import java.util.*; public class TransitMapRepository { - private static final Map> transitMaps = new HashMap<>(); + private static final Map> transitMaps = new LinkedHashMap<>(); public static Map> transitMaps() { return Collections.unmodifiableMap(transitMaps); From c7bbf1e9c6b942eb64a7189ffe792d81a4780368 Mon Sep 17 00:00:00 2001 From: daeun Date: Sun, 13 Dec 2020 04:35:34 +0900 Subject: [PATCH 36/98] style(subway): separate each class MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 하나의 클래스를 다른 하나의 클래스로 분리 --- .../subway/controller/SubwayController.java | 10 ++++++---- src/main/java/subway/service/LineService.java | 6 ------ .../java/subway/service/StationService.java | 10 ---------- .../initialization/LineInitialization.java | 13 +++++++++++++ .../initialization/StationInitialization.java | 17 +++++++++++++++++ .../TransitMapInitialization.java} | 4 ++-- 6 files changed, 38 insertions(+), 22 deletions(-) create mode 100644 src/main/java/subway/service/initialization/LineInitialization.java create mode 100644 src/main/java/subway/service/initialization/StationInitialization.java rename src/main/java/subway/service/{TransitMapService.java => initialization/TransitMapInitialization.java} (97%) diff --git a/src/main/java/subway/controller/SubwayController.java b/src/main/java/subway/controller/SubwayController.java index 92837b60c..01c80e633 100644 --- a/src/main/java/subway/controller/SubwayController.java +++ b/src/main/java/subway/controller/SubwayController.java @@ -3,7 +3,9 @@ import subway.service.LineService; import subway.service.StationService; import subway.service.SubwayService; -import subway.service.TransitMapService; +import subway.service.initialization.LineInitialization; +import subway.service.initialization.StationInitialization; +import subway.service.initialization.TransitMapInitialization; import java.util.Scanner; @@ -14,9 +16,9 @@ public void runSubway(Scanner scanner) { } public static void initializeSubway() { - StationService.initializeStations(); - LineService.initializeLines(); - TransitMapService.initializeTransitMaps(); + StationInitialization.initializeStations(); + LineInitialization.initializeLines(); + TransitMapInitialization.initializeTransitMaps(); } public static void startSubway(Scanner scanner) { diff --git a/src/main/java/subway/service/LineService.java b/src/main/java/subway/service/LineService.java index 41176571c..15b6dd2d6 100644 --- a/src/main/java/subway/service/LineService.java +++ b/src/main/java/subway/service/LineService.java @@ -12,12 +12,6 @@ import java.util.Scanner; public class LineService implements FeatureChoiceInterface, FeatureInterface { - public static void initializeLines() { - LineRepository.addLine(new Line(LineType.TWO.getLine())); - LineRepository.addLine(new Line(LineType.THREE.getLine())); - LineRepository.addLine(new Line(LineType.SHINBUNDANG.getLine())); - } - public static void manageLine(Scanner scanner){ InputService inputService = new InputService(); LineService lineService = new LineService(); diff --git a/src/main/java/subway/service/StationService.java b/src/main/java/subway/service/StationService.java index 0fa233541..b51da3b24 100644 --- a/src/main/java/subway/service/StationService.java +++ b/src/main/java/subway/service/StationService.java @@ -15,16 +15,6 @@ import java.util.Scanner; public class StationService implements FeatureChoiceInterface, FeatureInterface { - public static void initializeStations() { - StationRepository.addStation(new Station(StationType.EDUCATION_UNIVERSITY.getStation())); - StationRepository.addStation(new Station(StationType.GANGNAM.getStation())); - StationRepository.addStation(new Station(StationType.YEOKSAM.getStation())); - StationRepository.addStation(new Station(StationType.NAMBU_BUS_TERMINAL.getStation())); - StationRepository.addStation(new Station(StationType.YANGJAE.getStation())); - StationRepository.addStation(new Station(StationType.YANGJAE_CITIZENS_FOREST.getStation())); - StationRepository.addStation(new Station(StationType.MAEBONG.getStation())); - } - public static void manageStation(Scanner scanner) { InputService inputService = new InputService(); StationService stationService = new StationService(); diff --git a/src/main/java/subway/service/initialization/LineInitialization.java b/src/main/java/subway/service/initialization/LineInitialization.java new file mode 100644 index 000000000..3a71a30b2 --- /dev/null +++ b/src/main/java/subway/service/initialization/LineInitialization.java @@ -0,0 +1,13 @@ +package subway.service.initialization; + +import subway.domain.Line; +import subway.repository.LineRepository; +import subway.type.LineType; + +public class LineInitialization { + public static void initializeLines() { + LineRepository.addLine(new Line(LineType.TWO.getLine())); + LineRepository.addLine(new Line(LineType.THREE.getLine())); + LineRepository.addLine(new Line(LineType.SHINBUNDANG.getLine())); + } +} diff --git a/src/main/java/subway/service/initialization/StationInitialization.java b/src/main/java/subway/service/initialization/StationInitialization.java new file mode 100644 index 000000000..3150f81c9 --- /dev/null +++ b/src/main/java/subway/service/initialization/StationInitialization.java @@ -0,0 +1,17 @@ +package subway.service.initialization; + +import subway.domain.Station; +import subway.repository.StationRepository; +import subway.type.StationType; + +public class StationInitialization { + public static void initializeStations() { + StationRepository.addStation(new Station(StationType.EDUCATION_UNIVERSITY.getStation())); + StationRepository.addStation(new Station(StationType.GANGNAM.getStation())); + StationRepository.addStation(new Station(StationType.YEOKSAM.getStation())); + StationRepository.addStation(new Station(StationType.NAMBU_BUS_TERMINAL.getStation())); + StationRepository.addStation(new Station(StationType.YANGJAE.getStation())); + StationRepository.addStation(new Station(StationType.YANGJAE_CITIZENS_FOREST.getStation())); + StationRepository.addStation(new Station(StationType.MAEBONG.getStation())); + } +} diff --git a/src/main/java/subway/service/TransitMapService.java b/src/main/java/subway/service/initialization/TransitMapInitialization.java similarity index 97% rename from src/main/java/subway/service/TransitMapService.java rename to src/main/java/subway/service/initialization/TransitMapInitialization.java index e9ceed4f0..2c6d2f232 100644 --- a/src/main/java/subway/service/TransitMapService.java +++ b/src/main/java/subway/service/initialization/TransitMapInitialization.java @@ -1,4 +1,4 @@ -package subway.service; +package subway.service.initialization; import subway.domain.Line; import subway.domain.Station; @@ -10,7 +10,7 @@ import java.util.*; -public class TransitMapService { +public class TransitMapInitialization { private static final List stations = StationRepository.stations(); public static void initializeTransitMaps() { From d278a4becdef596dfe7dcc1ea112e742f4934225 Mon Sep 17 00:00:00 2001 From: daeun Date: Sun, 13 Dec 2020 05:26:00 +0900 Subject: [PATCH 37/98] feat(transit-map): show the transit map MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - [지하철 노선도] 지하철 노선도를 조회하는 기능 구현 --- docs/README.md | 4 +- .../controller/TransitMapController.java | 19 +++++ .../java/subway/service/SubwayService.java | 3 +- .../subway/service/TransitMapService.java | 69 +++++++++++++++++++ src/main/java/subway/type/TextType.java | 5 +- 5 files changed, 96 insertions(+), 4 deletions(-) create mode 100644 src/main/java/subway/controller/TransitMapController.java create mode 100644 src/main/java/subway/service/TransitMapService.java diff --git a/docs/README.md b/docs/README.md index 07749cf06..c4eddcbf0 100644 --- a/docs/README.md +++ b/docs/README.md @@ -45,8 +45,8 @@ - [ ] 지하철 노선에 포함된 역이 2개 이하인 경우 역을 제거할 수 없다. `예외` ### 지하철 노선도 -- [ ] 지하철 노선도를 조회한다. - - [ ] 지하철 노선의 상행 종점부터 하행 종점까지 연결된 순서대로 역 목록을 조회한다. +- [x] 지하철 노선도를 조회한다. + - [x] 지하철 노선의 상행 종점부터 하행 종점까지 연결된 순서대로 역 목록을 조회한다. ### 입출력 #### 입력 diff --git a/src/main/java/subway/controller/TransitMapController.java b/src/main/java/subway/controller/TransitMapController.java new file mode 100644 index 000000000..85c9f2c1e --- /dev/null +++ b/src/main/java/subway/controller/TransitMapController.java @@ -0,0 +1,19 @@ +package subway.controller; + +import subway.domain.Line; +import subway.domain.Station; +import subway.repository.TransitMapRepository; +import subway.service.TransitMapService; + +import java.util.LinkedList; +import java.util.Map; + +public class TransitMapController { + public static void showTransitMap() { + StringBuilder stringBuilder = new StringBuilder(); + Map> transitMaps = TransitMapRepository.transitMaps(); + + TransitMapService.readTransitMap(stringBuilder, transitMaps); + System.out.println(stringBuilder); + } +} diff --git a/src/main/java/subway/service/SubwayService.java b/src/main/java/subway/service/SubwayService.java index a5b66e865..bcb5c92fe 100644 --- a/src/main/java/subway/service/SubwayService.java +++ b/src/main/java/subway/service/SubwayService.java @@ -3,6 +3,7 @@ import subway.controller.LineController; import subway.controller.SectionController; import subway.controller.StationController; +import subway.controller.TransitMapController; import subway.service.abstraction.input.InputInterface; import subway.type.InputType; import subway.view.output.ExceptionView; @@ -57,7 +58,7 @@ public static void chooseSubwayFeature(String input, Scanner scanner) { SectionController.startSection(scanner); } if (input.equals(InputType.INPUT_FOUR.getInput())) { - // TODO: 지하철 노선도 출력 기능 구현 + TransitMapController.showTransitMap(); } } } diff --git a/src/main/java/subway/service/TransitMapService.java b/src/main/java/subway/service/TransitMapService.java new file mode 100644 index 000000000..b0ac863d7 --- /dev/null +++ b/src/main/java/subway/service/TransitMapService.java @@ -0,0 +1,69 @@ +package subway.service; + +import org.w3c.dom.Text; +import subway.domain.Line; +import subway.domain.Station; +import subway.repository.TransitMapRepository; +import subway.type.InformationType; +import subway.type.TextType; + +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; + +public class TransitMapService { + public static void readTransitMap(StringBuilder stringBuilder, Map> transitMaps) { + appendTransitMapText(stringBuilder); + + for (Map.Entry> entry : transitMaps.entrySet()) { + Line key = entry.getKey(); + LinkedList values = entry.getValue(); + + appendKey(stringBuilder, key); + appendHorizontalLines(stringBuilder); + appendValues(stringBuilder, values); + + if (!isLastKey(key)) { + stringBuilder.append(TextType.NEW_LINE.getText()); + } + } + } + + public static void appendTransitMapText(StringBuilder stringBuilder) { + stringBuilder.append(TextType.NEW_LINE.getText()) + .append(TextType.TRANSIT_MAP_TEXT.getText()) + .append(TextType.NEW_LINE.getText()); + } + + public static void appendKey(StringBuilder stringBuilder, Line key) { + stringBuilder.append(InformationType.INFORMATION.getInformation()) + .append(key.getName()) + .append(TextType.NEW_LINE.getText()); + } + + public static void appendHorizontalLines(StringBuilder stringBuilder) { + stringBuilder.append(InformationType.INFORMATION.getInformation()) + .append(TextType.HORIZONTAL_LINES.getText()) + .append(TextType.NEW_LINE.getText()); + } + + public static void appendValues(StringBuilder stringBuilder, LinkedList values) { + for (Station value : values) { + stringBuilder.append(InformationType.INFORMATION.getInformation()) + .append(value.getName()) + .append(TextType.NEW_LINE.getText()); + } + } + + public static boolean isLastKey(Line key) { + Map> transitMaps = TransitMapRepository.transitMaps(); + Line lastKey = getLastKey(transitMaps); + return lastKey.equals(key); + } + + public static Line getLastKey(Map> transitMaps) { + List lineKeySet = new ArrayList<>(transitMaps.keySet()); + return lineKeySet.get(lineKeySet.size() - 1); + } +} diff --git a/src/main/java/subway/type/TextType.java b/src/main/java/subway/type/TextType.java index c51fe6a79..9c264beef 100644 --- a/src/main/java/subway/type/TextType.java +++ b/src/main/java/subway/type/TextType.java @@ -1,7 +1,10 @@ package subway.type; public enum TextType { - STATION_ADDING_TEXT("## 등록할 역 이름을 입력하세요."); + NEW_LINE("\n"), + HORIZONTAL_LINES("---"), + STATION_ADDING_TEXT("## 등록할 역 이름을 입력하세요."), + TRANSIT_MAP_TEXT("## 지하철 노선도"); private final String text; From 349b146e594c24f5dc6242209b201c2173c2644e Mon Sep 17 00:00:00 2001 From: daeun Date: Sun, 13 Dec 2020 05:38:59 +0900 Subject: [PATCH 38/98] docs(readme): update README.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 구현할 기능 목록 수정 --- docs/README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/README.md b/docs/README.md index c4eddcbf0..e7a4bc5fd 100644 --- a/docs/README.md +++ b/docs/README.md @@ -36,7 +36,10 @@ - [ ] 지하철 구간을 추가한다. - [ ] 하나의 역은 여러 개의 노선에 추가될 수 있다. - [ ] 새로운 역은 역과 역 사이에 추가될 수 있다. - - [ ] 새로운 역의 삽입 순서를 입력한다. `예외` + - [ ] 새로운 역의 삽입 순서를 입력한다. + - [ ] 삽입 순서는 음수일 수 없다. `예외` + - [ ] 삽입 순서는 문자일 수 없다. `예외` + - [ ] 삽입 순서는 노선의 길이보다 작거나 같은 수이어야 한다. `예외` - [ ] 지하철 노선에 갈래길은 생길 수 없다. - [ ] 지하철 구간을 삭제한다. - [ ] 지하철 노선에 등록된 역을 제거할 수 있다. From 2c59a08fa6d3d64ab4e2ca5ea1a5d518e1552464 Mon Sep 17 00:00:00 2001 From: daeun Date: Sun, 13 Dec 2020 15:28:05 +0900 Subject: [PATCH 39/98] docs(readme): update README.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 구현할 기능 목록 수정 --- docs/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/README.md b/docs/README.md index e7a4bc5fd..2a39ebe92 100644 --- a/docs/README.md +++ b/docs/README.md @@ -20,6 +20,7 @@ - [x] 지하철 역을 등록한다. - [x] 지하철 역 이름은 중복될 수 없다. `예외` - [x] 지하철 역 이름은 2글자 이상이어야 한다. `예외` + - [ ] 지하철 역 이름은 '역'으로 끝나야 한다. `예외` - [ ] 지하철 역을 삭제한다. - [ ] 지하철 역이 지하철 노선에 등록된 경우 삭제할 수 없다. `예외` - [ ] 지하철 역의 목록을 조회한다. @@ -28,6 +29,7 @@ - [ ] 지하철 노선을 등록한다. - [ ] 지하철 노선 이름은 중복될 수 없다. `예외` - [ ] 지하철 노선 이름은 2글자 이상이어야 한다. `예외` + - [ ] 지하철 노선 이름은 '선'으로 끝나야 한다. `예외` - [ ] 지하철 노선을 등록할 때 상행 종점역과 하행 종점역을 입력한다. - [ ] 지하철 노선을 삭제한다. - [ ] 지하철 노선의 목록을 조회한다. From b0fcd87f0ab629cef031223ca2c6d0e4343361d4 Mon Sep 17 00:00:00 2001 From: daeun Date: Sun, 13 Dec 2020 15:44:32 +0900 Subject: [PATCH 40/98] feat(station-service): throw an exception MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - [지하철 역] 지하철 역 이름이 '역'으로 끝나지 않는 경우 예외 처리하는 기능 구현 --- docs/README.md | 2 +- src/main/java/subway/service/StationService.java | 4 ++++ .../abstraction/exception/ExceptionInterface.java | 1 + .../service/validation/StationValidation.java | 7 +++++++ src/main/java/subway/type/CheckType.java | 15 +++++++++++++++ src/main/java/subway/type/ExceptionType.java | 3 ++- .../java/subway/view/output/ExceptionView.java | 5 +++++ 7 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 src/main/java/subway/type/CheckType.java diff --git a/docs/README.md b/docs/README.md index 2a39ebe92..90507df3c 100644 --- a/docs/README.md +++ b/docs/README.md @@ -20,7 +20,7 @@ - [x] 지하철 역을 등록한다. - [x] 지하철 역 이름은 중복될 수 없다. `예외` - [x] 지하철 역 이름은 2글자 이상이어야 한다. `예외` - - [ ] 지하철 역 이름은 '역'으로 끝나야 한다. `예외` + - [x] 지하철 역 이름은 '역'으로 끝나야 한다. `예외` - [ ] 지하철 역을 삭제한다. - [ ] 지하철 역이 지하철 노선에 등록된 경우 삭제할 수 없다. `예외` - [ ] 지하철 역의 목록을 조회한다. diff --git a/src/main/java/subway/service/StationService.java b/src/main/java/subway/service/StationService.java index b51da3b24..43b01e704 100644 --- a/src/main/java/subway/service/StationService.java +++ b/src/main/java/subway/service/StationService.java @@ -72,6 +72,10 @@ public static boolean checkValidation(String stationName) { ExceptionView.printInvalidStationNameLengthException(); return false; } + if (!stationValidation.checkNameLastCharacter(stationName)) { + ExceptionView.printInvalidStationNameLastCharacter(); + return false; + } return true; } diff --git a/src/main/java/subway/service/abstraction/exception/ExceptionInterface.java b/src/main/java/subway/service/abstraction/exception/ExceptionInterface.java index 72d559ba4..735ab276c 100644 --- a/src/main/java/subway/service/abstraction/exception/ExceptionInterface.java +++ b/src/main/java/subway/service/abstraction/exception/ExceptionInterface.java @@ -3,4 +3,5 @@ public interface ExceptionInterface { boolean checkNameDuplication(String name); boolean checkNameLength(String name); + boolean checkNameLastCharacter(String name); } diff --git a/src/main/java/subway/service/validation/StationValidation.java b/src/main/java/subway/service/validation/StationValidation.java index f3668341a..89a09c276 100644 --- a/src/main/java/subway/service/validation/StationValidation.java +++ b/src/main/java/subway/service/validation/StationValidation.java @@ -3,6 +3,7 @@ import subway.repository.StationRepository; import subway.service.abstraction.exception.ExceptionInterface; import subway.type.BoundaryType; +import subway.type.CheckType; import java.util.List; @@ -17,4 +18,10 @@ public boolean checkNameDuplication(String stationName) { public boolean checkNameLength(String stationName) { return stationName.length() < BoundaryType.NAME_LENGTH_BOUNDARY.getBoundary(); } + + @Override + public boolean checkNameLastCharacter(String stationName) { + String lastCharacter = stationName.substring(stationName.length() - 1); + return lastCharacter.equals(CheckType.STATION_CHECK.getCheck()); + } } diff --git a/src/main/java/subway/type/CheckType.java b/src/main/java/subway/type/CheckType.java new file mode 100644 index 000000000..c81929ccb --- /dev/null +++ b/src/main/java/subway/type/CheckType.java @@ -0,0 +1,15 @@ +package subway.type; + +public enum CheckType { + STATION_CHECK("역"); + + private final String check; + + CheckType(String check) { + this.check = check; + } + + public String getCheck() { + return check; + } +} diff --git a/src/main/java/subway/type/ExceptionType.java b/src/main/java/subway/type/ExceptionType.java index a38460ddd..a05602242 100644 --- a/src/main/java/subway/type/ExceptionType.java +++ b/src/main/java/subway/type/ExceptionType.java @@ -4,7 +4,8 @@ public enum ExceptionType { ERROR("[ERROR] "), INVALID_FEATURE_CHOICE(ERROR.getException() + "선택할 수 없는 기능입니다.\n"), INVALID_STATION_NAME(ERROR.getException() + "이미 등록된 역 이름입니다.\n"), - INVALID_STATION_NAME_LENGTH(ERROR.getException() + "2글자 이상의 역 이름을 입력해주세요.\n"); + INVALID_STATION_NAME_LENGTH(ERROR.getException() + "2글자 이상의 역 이름을 입력해주세요.\n"), + INVALID_STATION_NAME_LAST_CHARACTER(ERROR.getException() + "'역'으로 끝나는 역 이름을 입력해주세요.\n"); private final String exception; diff --git a/src/main/java/subway/view/output/ExceptionView.java b/src/main/java/subway/view/output/ExceptionView.java index a9e512f86..020453feb 100644 --- a/src/main/java/subway/view/output/ExceptionView.java +++ b/src/main/java/subway/view/output/ExceptionView.java @@ -17,4 +17,9 @@ public static void printInvalidStationNameLengthException() { System.out.println(); System.out.println(ExceptionType.INVALID_STATION_NAME_LENGTH.getException()); } + + public static void printInvalidStationNameLastCharacter() { + System.out.println(); + System.out.println(ExceptionType.INVALID_STATION_NAME_LAST_CHARACTER.getException());; + } } From d95d6ef1c633d279fac4006551d51bbc15730fff Mon Sep 17 00:00:00 2001 From: daeun Date: Sun, 13 Dec 2020 15:49:00 +0900 Subject: [PATCH 41/98] refactor(station-service): throw an exception MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - [지하철 역] 지하철 역 이름이 2글자 미만인 경우 예외 처리하는 기능 수정 --- src/main/java/subway/service/StationService.java | 2 +- src/main/java/subway/service/validation/StationValidation.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/subway/service/StationService.java b/src/main/java/subway/service/StationService.java index 43b01e704..db00fc69a 100644 --- a/src/main/java/subway/service/StationService.java +++ b/src/main/java/subway/service/StationService.java @@ -68,7 +68,7 @@ public static boolean checkValidation(String stationName) { ExceptionView.printInvalidStationNameException(); return false; } - if (stationValidation.checkNameLength(stationName)) { + if (!stationValidation.checkNameLength(stationName)) { ExceptionView.printInvalidStationNameLengthException(); return false; } diff --git a/src/main/java/subway/service/validation/StationValidation.java b/src/main/java/subway/service/validation/StationValidation.java index 89a09c276..10c28a4f1 100644 --- a/src/main/java/subway/service/validation/StationValidation.java +++ b/src/main/java/subway/service/validation/StationValidation.java @@ -16,7 +16,7 @@ public boolean checkNameDuplication(String stationName) { @Override public boolean checkNameLength(String stationName) { - return stationName.length() < BoundaryType.NAME_LENGTH_BOUNDARY.getBoundary(); + return stationName.length() >= BoundaryType.NAME_LENGTH_BOUNDARY.getBoundary(); } @Override From c42913ad8cfd6440366f79572ceaa3f8a133bbd8 Mon Sep 17 00:00:00 2001 From: daeun Date: Sun, 13 Dec 2020 15:58:49 +0900 Subject: [PATCH 42/98] style(validation): rename the interface MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 이름 검증 인터페이스명 변경 --- .../NameValidationInterface.java} | 4 ++-- .../java/subway/service/validation/StationValidation.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) rename src/main/java/subway/service/abstraction/{exception/ExceptionInterface.java => validation/NameValidationInterface.java} (61%) diff --git a/src/main/java/subway/service/abstraction/exception/ExceptionInterface.java b/src/main/java/subway/service/abstraction/validation/NameValidationInterface.java similarity index 61% rename from src/main/java/subway/service/abstraction/exception/ExceptionInterface.java rename to src/main/java/subway/service/abstraction/validation/NameValidationInterface.java index 735ab276c..05642ef97 100644 --- a/src/main/java/subway/service/abstraction/exception/ExceptionInterface.java +++ b/src/main/java/subway/service/abstraction/validation/NameValidationInterface.java @@ -1,6 +1,6 @@ -package subway.service.abstraction.exception; +package subway.service.abstraction.validation; -public interface ExceptionInterface { +public interface NameValidationInterface { boolean checkNameDuplication(String name); boolean checkNameLength(String name); boolean checkNameLastCharacter(String name); diff --git a/src/main/java/subway/service/validation/StationValidation.java b/src/main/java/subway/service/validation/StationValidation.java index 10c28a4f1..37f0637f3 100644 --- a/src/main/java/subway/service/validation/StationValidation.java +++ b/src/main/java/subway/service/validation/StationValidation.java @@ -1,13 +1,13 @@ package subway.service.validation; import subway.repository.StationRepository; -import subway.service.abstraction.exception.ExceptionInterface; +import subway.service.abstraction.validation.NameValidationInterface; import subway.type.BoundaryType; import subway.type.CheckType; import java.util.List; -public class StationValidation implements ExceptionInterface { +public class StationValidation implements NameValidationInterface { @Override public boolean checkNameDuplication(String stationName) { List stationNames = StationRepository.getStationNames(); From c5f7e8ea0a359884a5c28d95fc2c099d3b58b387 Mon Sep 17 00:00:00 2001 From: daeun Date: Sun, 13 Dec 2020 16:05:30 +0900 Subject: [PATCH 43/98] refactor(station): modify the code structure MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - [지하철 역] 인터페이스를 통한 코드 구조 수정 --- .../java/subway/service/StationService.java | 23 ++++--------------- .../validation/NameValidationInterface.java | 1 + .../service/validation/StationValidation.java | 18 +++++++++++++++ 3 files changed, 23 insertions(+), 19 deletions(-) diff --git a/src/main/java/subway/service/StationService.java b/src/main/java/subway/service/StationService.java index db00fc69a..4382e7e7e 100644 --- a/src/main/java/subway/service/StationService.java +++ b/src/main/java/subway/service/StationService.java @@ -50,9 +50,12 @@ public boolean chooseFeature(String input, Scanner scanner) { @Override public boolean add(Scanner scanner) { + StationValidation stationValidation = new StationValidation(); + TextView.printStationAddingText(); String stationName = scanner.nextLine(); - if (checkValidation(stationName)) { + + if (stationValidation.checkValidation(stationName)) { StationRepository.addStation(new Station(stationName)); InformationView.printStationAddingInformation(); System.out.println(); @@ -61,24 +64,6 @@ public boolean add(Scanner scanner) { return false; } - public static boolean checkValidation(String stationName) { - StationValidation stationValidation = new StationValidation(); - - if (stationValidation.checkNameDuplication(stationName)) { - ExceptionView.printInvalidStationNameException(); - return false; - } - if (!stationValidation.checkNameLength(stationName)) { - ExceptionView.printInvalidStationNameLengthException(); - return false; - } - if (!stationValidation.checkNameLastCharacter(stationName)) { - ExceptionView.printInvalidStationNameLastCharacter(); - return false; - } - return true; - } - @Override public boolean delete(Scanner scanner) { return false; diff --git a/src/main/java/subway/service/abstraction/validation/NameValidationInterface.java b/src/main/java/subway/service/abstraction/validation/NameValidationInterface.java index 05642ef97..9c7da7704 100644 --- a/src/main/java/subway/service/abstraction/validation/NameValidationInterface.java +++ b/src/main/java/subway/service/abstraction/validation/NameValidationInterface.java @@ -4,4 +4,5 @@ public interface NameValidationInterface { boolean checkNameDuplication(String name); boolean checkNameLength(String name); boolean checkNameLastCharacter(String name); + boolean checkValidation(String name); } diff --git a/src/main/java/subway/service/validation/StationValidation.java b/src/main/java/subway/service/validation/StationValidation.java index 37f0637f3..0aa636272 100644 --- a/src/main/java/subway/service/validation/StationValidation.java +++ b/src/main/java/subway/service/validation/StationValidation.java @@ -4,6 +4,7 @@ import subway.service.abstraction.validation.NameValidationInterface; import subway.type.BoundaryType; import subway.type.CheckType; +import subway.view.output.ExceptionView; import java.util.List; @@ -24,4 +25,21 @@ public boolean checkNameLastCharacter(String stationName) { String lastCharacter = stationName.substring(stationName.length() - 1); return lastCharacter.equals(CheckType.STATION_CHECK.getCheck()); } + + @Override + public boolean checkValidation(String stationName) { + if (checkNameDuplication(stationName)) { + ExceptionView.printInvalidStationNameException(); + return false; + } + if (!checkNameLength(stationName)) { + ExceptionView.printInvalidStationNameLengthException(); + return false; + } + if (!checkNameLastCharacter(stationName)) { + ExceptionView.printInvalidStationNameLastCharacter(); + return false; + } + return true; + } } From 4ce286562d18567e35a03bb852fb06eed79bd4e6 Mon Sep 17 00:00:00 2001 From: daeun Date: Sun, 13 Dec 2020 16:07:21 +0900 Subject: [PATCH 44/98] style(station): delete unused import statements MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 사용하지 않는 import 구문 삭제 --- src/main/java/subway/service/StationService.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/subway/service/StationService.java b/src/main/java/subway/service/StationService.java index 4382e7e7e..7ee33cee2 100644 --- a/src/main/java/subway/service/StationService.java +++ b/src/main/java/subway/service/StationService.java @@ -6,8 +6,6 @@ import subway.service.abstraction.feature.FeatureInterface; import subway.service.validation.StationValidation; import subway.type.InputType; -import subway.type.StationType; -import subway.view.output.ExceptionView; import subway.view.output.InformationView; import subway.view.output.ScreenView; import subway.view.output.TextView; From d88318a75f031e3059045dc67c2192547ff2ee59 Mon Sep 17 00:00:00 2001 From: daeun Date: Sun, 13 Dec 2020 16:27:10 +0900 Subject: [PATCH 45/98] feat(station-service): delete a station MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - [지하철 역] 지하철 역을 삭제하는 기능 구현 --- docs/README.md | 2 +- src/main/java/subway/service/StationService.java | 8 ++++++++ src/main/java/subway/type/InformationType.java | 3 ++- src/main/java/subway/type/TextType.java | 1 + src/main/java/subway/view/output/InformationView.java | 5 +++++ src/main/java/subway/view/output/TextView.java | 5 +++++ 6 files changed, 22 insertions(+), 2 deletions(-) diff --git a/docs/README.md b/docs/README.md index 90507df3c..714416b11 100644 --- a/docs/README.md +++ b/docs/README.md @@ -21,7 +21,7 @@ - [x] 지하철 역 이름은 중복될 수 없다. `예외` - [x] 지하철 역 이름은 2글자 이상이어야 한다. `예외` - [x] 지하철 역 이름은 '역'으로 끝나야 한다. `예외` -- [ ] 지하철 역을 삭제한다. +- [x] 지하철 역을 삭제한다. - [ ] 지하철 역이 지하철 노선에 등록된 경우 삭제할 수 없다. `예외` - [ ] 지하철 역의 목록을 조회한다. diff --git a/src/main/java/subway/service/StationService.java b/src/main/java/subway/service/StationService.java index 7ee33cee2..bcc5666d0 100644 --- a/src/main/java/subway/service/StationService.java +++ b/src/main/java/subway/service/StationService.java @@ -64,6 +64,14 @@ public boolean add(Scanner scanner) { @Override public boolean delete(Scanner scanner) { + TextView.printStationDeletionText(); + String stationName = scanner.nextLine(); + + if (StationRepository.deleteStation(stationName)) { + InformationView.printStationDeletionInformation(); + System.out.println(); + } + return false; } } diff --git a/src/main/java/subway/type/InformationType.java b/src/main/java/subway/type/InformationType.java index 1eeaf824f..9df7d5768 100644 --- a/src/main/java/subway/type/InformationType.java +++ b/src/main/java/subway/type/InformationType.java @@ -2,7 +2,8 @@ public enum InformationType { INFORMATION("[INFO] "), - STATION_ADDING_INFORMATION(INFORMATION.getInformation() + "지하철 역이 등록되었습니다."); + STATION_ADDING_INFORMATION(INFORMATION.getInformation() + "지하철 역이 등록되었습니다."), + STATION_DELETION_INFORMATION(INFORMATION.getInformation() + "지하철 역이 삭제되었습니다."); private final String information; diff --git a/src/main/java/subway/type/TextType.java b/src/main/java/subway/type/TextType.java index 9c264beef..0db9063ac 100644 --- a/src/main/java/subway/type/TextType.java +++ b/src/main/java/subway/type/TextType.java @@ -4,6 +4,7 @@ public enum TextType { NEW_LINE("\n"), HORIZONTAL_LINES("---"), STATION_ADDING_TEXT("## 등록할 역 이름을 입력하세요."), + STATION_DELETION_TEXT("## 삭제할 역 이름을 입력하세요."), TRANSIT_MAP_TEXT("## 지하철 노선도"); private final String text; diff --git a/src/main/java/subway/view/output/InformationView.java b/src/main/java/subway/view/output/InformationView.java index 1fc960c34..51858f672 100644 --- a/src/main/java/subway/view/output/InformationView.java +++ b/src/main/java/subway/view/output/InformationView.java @@ -7,4 +7,9 @@ public static void printStationAddingInformation() { System.out.println(); System.out.println(InformationType.STATION_ADDING_INFORMATION.getInformation()); } + + public static void printStationDeletionInformation() { + System.out.println(); + System.out.println(InformationType.STATION_DELETION_INFORMATION.getInformation()); + } } diff --git a/src/main/java/subway/view/output/TextView.java b/src/main/java/subway/view/output/TextView.java index 8bfbe76bf..aaf9ac548 100644 --- a/src/main/java/subway/view/output/TextView.java +++ b/src/main/java/subway/view/output/TextView.java @@ -7,4 +7,9 @@ public static void printStationAddingText() { System.out.println(); System.out.println(TextType.STATION_ADDING_TEXT.getText()); } + + public static void printStationDeletionText() { + System.out.println(); + System.out.println(TextType.STATION_DELETION_TEXT.getText()); + } } From eb6b7c11e5fef0eec7f98db2285209554ecb6b7d Mon Sep 17 00:00:00 2001 From: daeun Date: Sun, 13 Dec 2020 17:25:11 +0900 Subject: [PATCH 46/98] docs(readme): update README.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 구현할 기능 목록 수정 --- docs/README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/README.md b/docs/README.md index 714416b11..2644eda81 100644 --- a/docs/README.md +++ b/docs/README.md @@ -23,6 +23,7 @@ - [x] 지하철 역 이름은 '역'으로 끝나야 한다. `예외` - [x] 지하철 역을 삭제한다. - [ ] 지하철 역이 지하철 노선에 등록된 경우 삭제할 수 없다. `예외` + - [ ] 삭제할 역이 없는 경우 삭제할 수 없다. `예외` - [ ] 지하철 역의 목록을 조회한다. ### 지하철 노선 @@ -32,6 +33,8 @@ - [ ] 지하철 노선 이름은 '선'으로 끝나야 한다. `예외` - [ ] 지하철 노선을 등록할 때 상행 종점역과 하행 종점역을 입력한다. - [ ] 지하철 노선을 삭제한다. + - [ ] 지하철 노선이 지하철 노선도에 등록된 경우 삭제할 수 없다. `예외` + - [ ] 삭제할 노선이 없는 경우 삭제할 수 없다. `예외` - [ ] 지하철 노선의 목록을 조회한다. ### 지하철 구간 From ffb25e59327ca46e9f8d487d8df1bb8f36078fdb Mon Sep 17 00:00:00 2001 From: daeun Date: Sun, 13 Dec 2020 17:29:32 +0900 Subject: [PATCH 47/98] style(validation): rename the interface, class MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 이름 등록 검증 인터페이스명 변경 - 이름 등록 검증 클래스명 변경 --- src/main/java/subway/service/StationService.java | 6 +++--- ...ionInterface.java => NameAddingValidationInterface.java} | 2 +- .../{StationValidation.java => NameAddingValidation.java} | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) rename src/main/java/subway/service/abstraction/validation/{NameValidationInterface.java => NameAddingValidationInterface.java} (82%) rename src/main/java/subway/service/validation/{StationValidation.java => NameAddingValidation.java} (89%) diff --git a/src/main/java/subway/service/StationService.java b/src/main/java/subway/service/StationService.java index bcc5666d0..7f36cb11b 100644 --- a/src/main/java/subway/service/StationService.java +++ b/src/main/java/subway/service/StationService.java @@ -4,7 +4,7 @@ import subway.repository.StationRepository; import subway.service.abstraction.feature.FeatureChoiceInterface; import subway.service.abstraction.feature.FeatureInterface; -import subway.service.validation.StationValidation; +import subway.service.validation.NameAddingValidation; import subway.type.InputType; import subway.view.output.InformationView; import subway.view.output.ScreenView; @@ -48,12 +48,12 @@ public boolean chooseFeature(String input, Scanner scanner) { @Override public boolean add(Scanner scanner) { - StationValidation stationValidation = new StationValidation(); + NameAddingValidation nameAddingValidation = new NameAddingValidation(); TextView.printStationAddingText(); String stationName = scanner.nextLine(); - if (stationValidation.checkValidation(stationName)) { + if (nameAddingValidation.checkValidation(stationName)) { StationRepository.addStation(new Station(stationName)); InformationView.printStationAddingInformation(); System.out.println(); diff --git a/src/main/java/subway/service/abstraction/validation/NameValidationInterface.java b/src/main/java/subway/service/abstraction/validation/NameAddingValidationInterface.java similarity index 82% rename from src/main/java/subway/service/abstraction/validation/NameValidationInterface.java rename to src/main/java/subway/service/abstraction/validation/NameAddingValidationInterface.java index 9c7da7704..aa19a4b05 100644 --- a/src/main/java/subway/service/abstraction/validation/NameValidationInterface.java +++ b/src/main/java/subway/service/abstraction/validation/NameAddingValidationInterface.java @@ -1,6 +1,6 @@ package subway.service.abstraction.validation; -public interface NameValidationInterface { +public interface NameAddingValidationInterface { boolean checkNameDuplication(String name); boolean checkNameLength(String name); boolean checkNameLastCharacter(String name); diff --git a/src/main/java/subway/service/validation/StationValidation.java b/src/main/java/subway/service/validation/NameAddingValidation.java similarity index 89% rename from src/main/java/subway/service/validation/StationValidation.java rename to src/main/java/subway/service/validation/NameAddingValidation.java index 0aa636272..11da3f927 100644 --- a/src/main/java/subway/service/validation/StationValidation.java +++ b/src/main/java/subway/service/validation/NameAddingValidation.java @@ -1,14 +1,14 @@ package subway.service.validation; import subway.repository.StationRepository; -import subway.service.abstraction.validation.NameValidationInterface; +import subway.service.abstraction.validation.NameAddingValidationInterface; import subway.type.BoundaryType; import subway.type.CheckType; import subway.view.output.ExceptionView; import java.util.List; -public class StationValidation implements NameValidationInterface { +public class NameAddingValidation implements NameAddingValidationInterface { @Override public boolean checkNameDuplication(String stationName) { List stationNames = StationRepository.getStationNames(); From b71879d485f3d3d5514204b95f7b5f4b5c10cc8f Mon Sep 17 00:00:00 2001 From: daeun Date: Sun, 13 Dec 2020 18:30:17 +0900 Subject: [PATCH 48/98] refactor(subway): rename functions, classes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 함수명 변경 - 클래스명 변경 --- src/main/java/subway/service/LineService.java | 9 ++------- .../java/subway/service/StationService.java | 14 ++++++------- .../NameAddingValidationInterface.java | 2 +- .../validation/NameAddingValidation.java | 10 +++++----- .../subway/view/output/ExceptionView.java | 15 -------------- .../output/station/StationExceptionView.java | 20 +++++++++++++++++++ .../StationInformationView.java} | 4 ++-- .../StationTextView.java} | 4 ++-- 8 files changed, 39 insertions(+), 39 deletions(-) create mode 100644 src/main/java/subway/view/output/station/StationExceptionView.java rename src/main/java/subway/view/output/{InformationView.java => station/StationInformationView.java} (84%) rename src/main/java/subway/view/output/{TextView.java => station/StationTextView.java} (83%) diff --git a/src/main/java/subway/service/LineService.java b/src/main/java/subway/service/LineService.java index 15b6dd2d6..22c05d760 100644 --- a/src/main/java/subway/service/LineService.java +++ b/src/main/java/subway/service/LineService.java @@ -1,12 +1,8 @@ package subway.service; -import subway.domain.Line; -import subway.repository.LineRepository; import subway.service.abstraction.feature.FeatureChoiceInterface; import subway.service.abstraction.feature.FeatureInterface; import subway.type.InputType; -import subway.type.LineType; -import subway.view.output.ExceptionView; import subway.view.output.ScreenView; import java.util.Scanner; @@ -20,11 +16,10 @@ public static void manageLine(Scanner scanner){ while (true) { ScreenView.printLineManagementScreen(); String lineInput = scanner.nextLine(); - if (inputService.isInput(lineInput)) { - lineService.chooseFeature(lineInput, scanner); + if (inputService.isInput(lineInput) + && lineService.chooseFeature(lineInput, scanner)) { break; } - ExceptionView.printInvalidFeatureChoiceException(); } } diff --git a/src/main/java/subway/service/StationService.java b/src/main/java/subway/service/StationService.java index 7f36cb11b..557a59002 100644 --- a/src/main/java/subway/service/StationService.java +++ b/src/main/java/subway/service/StationService.java @@ -6,9 +6,9 @@ import subway.service.abstraction.feature.FeatureInterface; import subway.service.validation.NameAddingValidation; import subway.type.InputType; -import subway.view.output.InformationView; +import subway.view.output.station.StationInformationView; import subway.view.output.ScreenView; -import subway.view.output.TextView; +import subway.view.output.station.StationTextView; import java.util.Scanner; @@ -50,12 +50,12 @@ public boolean chooseFeature(String input, Scanner scanner) { public boolean add(Scanner scanner) { NameAddingValidation nameAddingValidation = new NameAddingValidation(); - TextView.printStationAddingText(); + StationTextView.printStationAddingText(); String stationName = scanner.nextLine(); - if (nameAddingValidation.checkValidation(stationName)) { + if (nameAddingValidation.checkAddingValidation(stationName)) { StationRepository.addStation(new Station(stationName)); - InformationView.printStationAddingInformation(); + StationInformationView.printStationAddingInformation(); System.out.println(); return true; } @@ -64,11 +64,11 @@ public boolean add(Scanner scanner) { @Override public boolean delete(Scanner scanner) { - TextView.printStationDeletionText(); + StationTextView.printStationDeletionText(); String stationName = scanner.nextLine(); if (StationRepository.deleteStation(stationName)) { - InformationView.printStationDeletionInformation(); + StationInformationView.printStationDeletionInformation(); System.out.println(); } diff --git a/src/main/java/subway/service/abstraction/validation/NameAddingValidationInterface.java b/src/main/java/subway/service/abstraction/validation/NameAddingValidationInterface.java index aa19a4b05..18d3b346b 100644 --- a/src/main/java/subway/service/abstraction/validation/NameAddingValidationInterface.java +++ b/src/main/java/subway/service/abstraction/validation/NameAddingValidationInterface.java @@ -4,5 +4,5 @@ public interface NameAddingValidationInterface { boolean checkNameDuplication(String name); boolean checkNameLength(String name); boolean checkNameLastCharacter(String name); - boolean checkValidation(String name); + boolean checkAddingValidation(String name); } diff --git a/src/main/java/subway/service/validation/NameAddingValidation.java b/src/main/java/subway/service/validation/NameAddingValidation.java index 11da3f927..01a934da4 100644 --- a/src/main/java/subway/service/validation/NameAddingValidation.java +++ b/src/main/java/subway/service/validation/NameAddingValidation.java @@ -4,7 +4,7 @@ import subway.service.abstraction.validation.NameAddingValidationInterface; import subway.type.BoundaryType; import subway.type.CheckType; -import subway.view.output.ExceptionView; +import subway.view.output.station.StationExceptionView; import java.util.List; @@ -27,17 +27,17 @@ public boolean checkNameLastCharacter(String stationName) { } @Override - public boolean checkValidation(String stationName) { + public boolean checkAddingValidation(String stationName) { if (checkNameDuplication(stationName)) { - ExceptionView.printInvalidStationNameException(); + StationExceptionView.printInvalidStationNameException(); return false; } if (!checkNameLength(stationName)) { - ExceptionView.printInvalidStationNameLengthException(); + StationExceptionView.printInvalidStationNameLengthException(); return false; } if (!checkNameLastCharacter(stationName)) { - ExceptionView.printInvalidStationNameLastCharacter(); + StationExceptionView.printInvalidStationNameLastCharacterException(); return false; } return true; diff --git a/src/main/java/subway/view/output/ExceptionView.java b/src/main/java/subway/view/output/ExceptionView.java index 020453feb..f012d3945 100644 --- a/src/main/java/subway/view/output/ExceptionView.java +++ b/src/main/java/subway/view/output/ExceptionView.java @@ -7,19 +7,4 @@ public static void printInvalidFeatureChoiceException() { System.out.println(); System.out.println(ExceptionType.INVALID_FEATURE_CHOICE.getException()); } - - public static void printInvalidStationNameException() { - System.out.println(); - System.out.println(ExceptionType.INVALID_STATION_NAME.getException()); - } - - public static void printInvalidStationNameLengthException() { - System.out.println(); - System.out.println(ExceptionType.INVALID_STATION_NAME_LENGTH.getException()); - } - - public static void printInvalidStationNameLastCharacter() { - System.out.println(); - System.out.println(ExceptionType.INVALID_STATION_NAME_LAST_CHARACTER.getException());; - } } diff --git a/src/main/java/subway/view/output/station/StationExceptionView.java b/src/main/java/subway/view/output/station/StationExceptionView.java new file mode 100644 index 000000000..dcc447192 --- /dev/null +++ b/src/main/java/subway/view/output/station/StationExceptionView.java @@ -0,0 +1,20 @@ +package subway.view.output.station; + +import subway.type.ExceptionType; + +public class StationExceptionView { + public static void printInvalidStationNameException() { + System.out.println(); + System.out.println(ExceptionType.INVALID_STATION_NAME.getException()); + } + + public static void printInvalidStationNameLengthException() { + System.out.println(); + System.out.println(ExceptionType.INVALID_STATION_NAME_LENGTH.getException()); + } + + public static void printInvalidStationNameLastCharacterException() { + System.out.println(); + System.out.println(ExceptionType.INVALID_STATION_NAME_LAST_CHARACTER.getException());; + } +} diff --git a/src/main/java/subway/view/output/InformationView.java b/src/main/java/subway/view/output/station/StationInformationView.java similarity index 84% rename from src/main/java/subway/view/output/InformationView.java rename to src/main/java/subway/view/output/station/StationInformationView.java index 51858f672..9a5df6589 100644 --- a/src/main/java/subway/view/output/InformationView.java +++ b/src/main/java/subway/view/output/station/StationInformationView.java @@ -1,8 +1,8 @@ -package subway.view.output; +package subway.view.output.station; import subway.type.InformationType; -public class InformationView { +public class StationInformationView { public static void printStationAddingInformation() { System.out.println(); System.out.println(InformationType.STATION_ADDING_INFORMATION.getInformation()); diff --git a/src/main/java/subway/view/output/TextView.java b/src/main/java/subway/view/output/station/StationTextView.java similarity index 83% rename from src/main/java/subway/view/output/TextView.java rename to src/main/java/subway/view/output/station/StationTextView.java index aaf9ac548..208f9f0ac 100644 --- a/src/main/java/subway/view/output/TextView.java +++ b/src/main/java/subway/view/output/station/StationTextView.java @@ -1,8 +1,8 @@ -package subway.view.output; +package subway.view.output.station; import subway.type.TextType; -public class TextView { +public class StationTextView { public static void printStationAddingText() { System.out.println(); System.out.println(TextType.STATION_ADDING_TEXT.getText()); From 8e49bf86780d88df2f5b5729ac15bc6732641b5a Mon Sep 17 00:00:00 2001 From: daeun Date: Sun, 13 Dec 2020 18:39:32 +0900 Subject: [PATCH 49/98] feat(station-service): throw an exception MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - [지하철 역] 삭제할 역이 없는 경우 예외 처리하는 기능 구현 --- docs/README.md | 2 +- .../java/subway/service/StationService.java | 8 +++++-- .../NameDeletionValidationInterface.java | 6 +++++ .../validation/NameDeletionValidation.java | 22 +++++++++++++++++++ src/main/java/subway/type/ExceptionType.java | 3 ++- .../output/station/StationExceptionView.java | 5 +++++ 6 files changed, 42 insertions(+), 4 deletions(-) create mode 100644 src/main/java/subway/service/abstraction/validation/NameDeletionValidationInterface.java create mode 100644 src/main/java/subway/service/validation/NameDeletionValidation.java diff --git a/docs/README.md b/docs/README.md index 2644eda81..139fbe1e8 100644 --- a/docs/README.md +++ b/docs/README.md @@ -23,7 +23,7 @@ - [x] 지하철 역 이름은 '역'으로 끝나야 한다. `예외` - [x] 지하철 역을 삭제한다. - [ ] 지하철 역이 지하철 노선에 등록된 경우 삭제할 수 없다. `예외` - - [ ] 삭제할 역이 없는 경우 삭제할 수 없다. `예외` + - [x] 삭제할 역이 없는 경우 삭제할 수 없다. `예외` - [ ] 지하철 역의 목록을 조회한다. ### 지하철 노선 diff --git a/src/main/java/subway/service/StationService.java b/src/main/java/subway/service/StationService.java index 557a59002..32f4b11af 100644 --- a/src/main/java/subway/service/StationService.java +++ b/src/main/java/subway/service/StationService.java @@ -5,11 +5,13 @@ import subway.service.abstraction.feature.FeatureChoiceInterface; import subway.service.abstraction.feature.FeatureInterface; import subway.service.validation.NameAddingValidation; +import subway.service.validation.NameDeletionValidation; import subway.type.InputType; import subway.view.output.station.StationInformationView; import subway.view.output.ScreenView; import subway.view.output.station.StationTextView; +import java.util.List; import java.util.Scanner; public class StationService implements FeatureChoiceInterface, FeatureInterface { @@ -64,14 +66,16 @@ public boolean add(Scanner scanner) { @Override public boolean delete(Scanner scanner) { + NameDeletionValidation nameDeletionValidation = new NameDeletionValidation(); + StationTextView.printStationDeletionText(); String stationName = scanner.nextLine(); - if (StationRepository.deleteStation(stationName)) { + if (nameDeletionValidation.checkDeletionValidation(stationName)) { StationInformationView.printStationDeletionInformation(); System.out.println(); + return true; } - return false; } } diff --git a/src/main/java/subway/service/abstraction/validation/NameDeletionValidationInterface.java b/src/main/java/subway/service/abstraction/validation/NameDeletionValidationInterface.java new file mode 100644 index 000000000..791791aa6 --- /dev/null +++ b/src/main/java/subway/service/abstraction/validation/NameDeletionValidationInterface.java @@ -0,0 +1,6 @@ +package subway.service.abstraction.validation; + +public interface NameDeletionValidationInterface { + boolean checkNameInTransitMap(String name); + boolean checkDeletionValidation(String name); +} diff --git a/src/main/java/subway/service/validation/NameDeletionValidation.java b/src/main/java/subway/service/validation/NameDeletionValidation.java new file mode 100644 index 000000000..4d531b904 --- /dev/null +++ b/src/main/java/subway/service/validation/NameDeletionValidation.java @@ -0,0 +1,22 @@ +package subway.service.validation; + +import subway.repository.StationRepository; +import subway.service.abstraction.validation.NameDeletionValidationInterface; +import subway.view.output.station.StationExceptionView; + +public class NameDeletionValidation implements NameDeletionValidationInterface { + @Override + public boolean checkNameInTransitMap(String stationName) { + + return false; + } + + @Override + public boolean checkDeletionValidation(String stationName) { + if (!StationRepository.deleteStation(stationName)) { + StationExceptionView.printInvalidStationNameExistenceException(); + return false; + } + return true; + } +} diff --git a/src/main/java/subway/type/ExceptionType.java b/src/main/java/subway/type/ExceptionType.java index a05602242..86b7f0070 100644 --- a/src/main/java/subway/type/ExceptionType.java +++ b/src/main/java/subway/type/ExceptionType.java @@ -5,7 +5,8 @@ public enum ExceptionType { INVALID_FEATURE_CHOICE(ERROR.getException() + "선택할 수 없는 기능입니다.\n"), INVALID_STATION_NAME(ERROR.getException() + "이미 등록된 역 이름입니다.\n"), INVALID_STATION_NAME_LENGTH(ERROR.getException() + "2글자 이상의 역 이름을 입력해주세요.\n"), - INVALID_STATION_NAME_LAST_CHARACTER(ERROR.getException() + "'역'으로 끝나는 역 이름을 입력해주세요.\n"); + INVALID_STATION_NAME_LAST_CHARACTER(ERROR.getException() + "'역'으로 끝나는 역 이름을 입력해주세요.\n"), + INVALID_STATION_NAME_EXISTENCE(ERROR.getException() + "해당 역이 존재하지 않습니다.\n"); private final String exception; diff --git a/src/main/java/subway/view/output/station/StationExceptionView.java b/src/main/java/subway/view/output/station/StationExceptionView.java index dcc447192..38aa9df60 100644 --- a/src/main/java/subway/view/output/station/StationExceptionView.java +++ b/src/main/java/subway/view/output/station/StationExceptionView.java @@ -17,4 +17,9 @@ public static void printInvalidStationNameLastCharacterException() { System.out.println(); System.out.println(ExceptionType.INVALID_STATION_NAME_LAST_CHARACTER.getException());; } + + public static void printInvalidStationNameExistenceException() { + System.out.println(); + System.out.println(ExceptionType.INVALID_STATION_NAME_EXISTENCE.getException()); + } } From 46733e53ae9a873d274a0cf767bf327f5f7a76e0 Mon Sep 17 00:00:00 2001 From: daeun Date: Sun, 13 Dec 2020 20:02:32 +0900 Subject: [PATCH 50/98] feat(station-service): throw an exception MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - [지하철 역] 지하철 역이 지하철 노선에 등록된 경우 예외 처리하는 기능 구현 --- docs/README.md | 2 +- .../subway/repository/TransitMapRepository.java | 14 ++++++++++++++ src/main/java/subway/service/StationService.java | 1 - .../validation/NameDeletionValidation.java | 15 +++++++++++++++ src/main/java/subway/type/ExceptionType.java | 1 + .../view/output/station/StationExceptionView.java | 5 +++++ 6 files changed, 36 insertions(+), 2 deletions(-) diff --git a/docs/README.md b/docs/README.md index 139fbe1e8..012e21c0a 100644 --- a/docs/README.md +++ b/docs/README.md @@ -22,7 +22,7 @@ - [x] 지하철 역 이름은 2글자 이상이어야 한다. `예외` - [x] 지하철 역 이름은 '역'으로 끝나야 한다. `예외` - [x] 지하철 역을 삭제한다. - - [ ] 지하철 역이 지하철 노선에 등록된 경우 삭제할 수 없다. `예외` + - [x] 지하철 역이 지하철 노선에 등록된 경우 삭제할 수 없다. `예외` - [x] 삭제할 역이 없는 경우 삭제할 수 없다. `예외` - [ ] 지하철 역의 목록을 조회한다. diff --git a/src/main/java/subway/repository/TransitMapRepository.java b/src/main/java/subway/repository/TransitMapRepository.java index 06639e5b8..644c446cd 100644 --- a/src/main/java/subway/repository/TransitMapRepository.java +++ b/src/main/java/subway/repository/TransitMapRepository.java @@ -8,11 +8,25 @@ public class TransitMapRepository { private static final Map> transitMaps = new LinkedHashMap<>(); + private static final List> transitMapsStationNames = new ArrayList<>(); public static Map> transitMaps() { return Collections.unmodifiableMap(transitMaps); } + public static List> transitMapsStationNames() { + for (Map.Entry> entry : transitMaps.entrySet()) { + LinkedList transitMapStationNames = new LinkedList<>(); + LinkedList values = entry.getValue(); + + for (Station value : values) { + transitMapStationNames.add(value.getName()); + } + transitMapsStationNames.add(transitMapStationNames); + } + return transitMapsStationNames; + } + public static void addTransitMap(TransitMap transitMap) { transitMaps.put(transitMap.getTransitMapLine(), transitMap.getTransitMapStations()); } diff --git a/src/main/java/subway/service/StationService.java b/src/main/java/subway/service/StationService.java index 32f4b11af..9d30ecd45 100644 --- a/src/main/java/subway/service/StationService.java +++ b/src/main/java/subway/service/StationService.java @@ -11,7 +11,6 @@ import subway.view.output.ScreenView; import subway.view.output.station.StationTextView; -import java.util.List; import java.util.Scanner; public class StationService implements FeatureChoiceInterface, FeatureInterface { diff --git a/src/main/java/subway/service/validation/NameDeletionValidation.java b/src/main/java/subway/service/validation/NameDeletionValidation.java index 4d531b904..c5c2b90a3 100644 --- a/src/main/java/subway/service/validation/NameDeletionValidation.java +++ b/src/main/java/subway/service/validation/NameDeletionValidation.java @@ -1,18 +1,33 @@ package subway.service.validation; import subway.repository.StationRepository; +import subway.repository.TransitMapRepository; import subway.service.abstraction.validation.NameDeletionValidationInterface; import subway.view.output.station.StationExceptionView; +import java.util.LinkedList; +import java.util.List; + public class NameDeletionValidation implements NameDeletionValidationInterface { @Override public boolean checkNameInTransitMap(String stationName) { + List> transitMapsStationsNames + = TransitMapRepository.transitMapsStationNames(); + for (LinkedList transitMapStationNames : transitMapsStationsNames) { + if (transitMapStationNames.contains(stationName)) { + return true; + } + } return false; } @Override public boolean checkDeletionValidation(String stationName) { + if (checkNameInTransitMap(stationName)) { + StationExceptionView.printInvalidStationNameInTransitMapException(); + return false; + } if (!StationRepository.deleteStation(stationName)) { StationExceptionView.printInvalidStationNameExistenceException(); return false; diff --git a/src/main/java/subway/type/ExceptionType.java b/src/main/java/subway/type/ExceptionType.java index 86b7f0070..8c5475acf 100644 --- a/src/main/java/subway/type/ExceptionType.java +++ b/src/main/java/subway/type/ExceptionType.java @@ -6,6 +6,7 @@ public enum ExceptionType { INVALID_STATION_NAME(ERROR.getException() + "이미 등록된 역 이름입니다.\n"), INVALID_STATION_NAME_LENGTH(ERROR.getException() + "2글자 이상의 역 이름을 입력해주세요.\n"), INVALID_STATION_NAME_LAST_CHARACTER(ERROR.getException() + "'역'으로 끝나는 역 이름을 입력해주세요.\n"), + INVALID_STATION_NAME_IN_TRANSIT_MAP(ERROR.getException() + "해당 역은 지하철 노선에 등록되어 있어 삭제할 수 없습니다.\n"), INVALID_STATION_NAME_EXISTENCE(ERROR.getException() + "해당 역이 존재하지 않습니다.\n"); private final String exception; diff --git a/src/main/java/subway/view/output/station/StationExceptionView.java b/src/main/java/subway/view/output/station/StationExceptionView.java index 38aa9df60..193147ee6 100644 --- a/src/main/java/subway/view/output/station/StationExceptionView.java +++ b/src/main/java/subway/view/output/station/StationExceptionView.java @@ -18,6 +18,11 @@ public static void printInvalidStationNameLastCharacterException() { System.out.println(ExceptionType.INVALID_STATION_NAME_LAST_CHARACTER.getException());; } + public static void printInvalidStationNameInTransitMapException() { + System.out.println(); + System.out.println(ExceptionType.INVALID_STATION_NAME_IN_TRANSIT_MAP.getException()); + } + public static void printInvalidStationNameExistenceException() { System.out.println(); System.out.println(ExceptionType.INVALID_STATION_NAME_EXISTENCE.getException()); From 9bded62cdba318e6371127f7b1b09473d018f9a7 Mon Sep 17 00:00:00 2001 From: daeun Date: Sun, 13 Dec 2020 20:32:08 +0900 Subject: [PATCH 51/98] refactor(subway): change the inheritance structure MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 상속 구조 변경 --- src/main/java/subway/service/SectionService.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/subway/service/SectionService.java b/src/main/java/subway/service/SectionService.java index 3cf008154..c2c76fec2 100644 --- a/src/main/java/subway/service/SectionService.java +++ b/src/main/java/subway/service/SectionService.java @@ -1,7 +1,5 @@ package subway.service; -import subway.service.abstraction.feature.FeatureChoiceInterface; -import subway.service.abstraction.feature.FeatureInterface; import subway.service.abstraction.input.InputInterface; import subway.type.InputType; import subway.view.output.ExceptionView; @@ -9,7 +7,7 @@ import java.util.Scanner; -public class SectionService implements InputInterface, FeatureChoiceInterface, FeatureInterface { +public class SectionService extends StationService implements InputInterface { public static void manageSection(Scanner scanner) { SectionService sectionService = new SectionService(); From 8b1e506463ef9fbc5f32461b23867bd854f6b471 Mon Sep 17 00:00:00 2001 From: daeun Date: Sun, 13 Dec 2020 21:15:43 +0900 Subject: [PATCH 52/98] feat(feature-interface): organize the skeleton MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - [지하철 역] 지하철 역의 목록을 조회하는 기능 골격 구성 - [지하철 노선] 지하철 노선의 목록을 조회하는 기능 골격 구성 --- src/main/java/subway/service/LineService.java | 5 +++++ src/main/java/subway/service/StationService.java | 5 +++++ .../subway/service/abstraction/feature/FeatureInterface.java | 1 + 3 files changed, 11 insertions(+) diff --git a/src/main/java/subway/service/LineService.java b/src/main/java/subway/service/LineService.java index 22c05d760..060f1374a 100644 --- a/src/main/java/subway/service/LineService.java +++ b/src/main/java/subway/service/LineService.java @@ -52,4 +52,9 @@ public boolean add(Scanner scanner) { public boolean delete(Scanner scanner) { return false; } + + @Override + public boolean show() { + return false; + } } diff --git a/src/main/java/subway/service/StationService.java b/src/main/java/subway/service/StationService.java index 9d30ecd45..66036cf46 100644 --- a/src/main/java/subway/service/StationService.java +++ b/src/main/java/subway/service/StationService.java @@ -77,4 +77,9 @@ public boolean delete(Scanner scanner) { } return false; } + + @Override + public boolean show() { + return false; + } } diff --git a/src/main/java/subway/service/abstraction/feature/FeatureInterface.java b/src/main/java/subway/service/abstraction/feature/FeatureInterface.java index 9a6625be1..c39d850a7 100644 --- a/src/main/java/subway/service/abstraction/feature/FeatureInterface.java +++ b/src/main/java/subway/service/abstraction/feature/FeatureInterface.java @@ -5,4 +5,5 @@ public interface FeatureInterface { boolean add(Scanner scanner); boolean delete(Scanner scanner); + boolean show(); } From 34fc22ffbb9d9baa51d1b0a978ee8a1617a3da68 Mon Sep 17 00:00:00 2001 From: daeun Date: Sun, 13 Dec 2020 21:21:03 +0900 Subject: [PATCH 53/98] style(subway): delete unused import statements MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 사용하지 않는 import 구문 삭제 --- src/main/java/subway/controller/SubwayController.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/subway/controller/SubwayController.java b/src/main/java/subway/controller/SubwayController.java index 01c80e633..b1318513f 100644 --- a/src/main/java/subway/controller/SubwayController.java +++ b/src/main/java/subway/controller/SubwayController.java @@ -1,7 +1,5 @@ package subway.controller; -import subway.service.LineService; -import subway.service.StationService; import subway.service.SubwayService; import subway.service.initialization.LineInitialization; import subway.service.initialization.StationInitialization; From ba49d471415d22dbc2871651be94d0cea84fac4d Mon Sep 17 00:00:00 2001 From: daeun Date: Sun, 13 Dec 2020 21:25:37 +0900 Subject: [PATCH 54/98] style(transit-map): modify the function structure MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 함수 구조 수정 --- .../subway/controller/TransitMapController.java | 14 ++------------ src/main/java/subway/service/SubwayService.java | 2 +- .../java/subway/service/TransitMapService.java | 9 ++++++++- 3 files changed, 11 insertions(+), 14 deletions(-) diff --git a/src/main/java/subway/controller/TransitMapController.java b/src/main/java/subway/controller/TransitMapController.java index 85c9f2c1e..1d86c6f0b 100644 --- a/src/main/java/subway/controller/TransitMapController.java +++ b/src/main/java/subway/controller/TransitMapController.java @@ -1,19 +1,9 @@ package subway.controller; -import subway.domain.Line; -import subway.domain.Station; -import subway.repository.TransitMapRepository; import subway.service.TransitMapService; -import java.util.LinkedList; -import java.util.Map; - public class TransitMapController { - public static void showTransitMap() { - StringBuilder stringBuilder = new StringBuilder(); - Map> transitMaps = TransitMapRepository.transitMaps(); - - TransitMapService.readTransitMap(stringBuilder, transitMaps); - System.out.println(stringBuilder); + public static void startTransitMap() { + TransitMapService.showTransitMap(); } } diff --git a/src/main/java/subway/service/SubwayService.java b/src/main/java/subway/service/SubwayService.java index bcb5c92fe..efbad6d10 100644 --- a/src/main/java/subway/service/SubwayService.java +++ b/src/main/java/subway/service/SubwayService.java @@ -58,7 +58,7 @@ public static void chooseSubwayFeature(String input, Scanner scanner) { SectionController.startSection(scanner); } if (input.equals(InputType.INPUT_FOUR.getInput())) { - TransitMapController.showTransitMap(); + TransitMapController.startTransitMap(); } } } diff --git a/src/main/java/subway/service/TransitMapService.java b/src/main/java/subway/service/TransitMapService.java index b0ac863d7..023440848 100644 --- a/src/main/java/subway/service/TransitMapService.java +++ b/src/main/java/subway/service/TransitMapService.java @@ -1,6 +1,5 @@ package subway.service; -import org.w3c.dom.Text; import subway.domain.Line; import subway.domain.Station; import subway.repository.TransitMapRepository; @@ -13,6 +12,14 @@ import java.util.Map; public class TransitMapService { + public static void showTransitMap() { + StringBuilder stringBuilder = new StringBuilder(); + Map> transitMaps = TransitMapRepository.transitMaps(); + + TransitMapService.readTransitMap(stringBuilder, transitMaps); + System.out.println(stringBuilder); + } + public static void readTransitMap(StringBuilder stringBuilder, Map> transitMaps) { appendTransitMapText(stringBuilder); From e6b5dcdc5b3ce5d8b74b767bfae3b10f93d63f8a Mon Sep 17 00:00:00 2001 From: daeun Date: Sun, 13 Dec 2020 21:37:59 +0900 Subject: [PATCH 55/98] style(station): change the package structure MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 패키지 구조 변경 --- src/main/java/subway/controller/StationController.java | 2 +- src/main/java/subway/service/SectionService.java | 1 + src/main/java/subway/service/{ => station}/StationService.java | 3 ++- 3 files changed, 4 insertions(+), 2 deletions(-) rename src/main/java/subway/service/{ => station}/StationService.java (97%) diff --git a/src/main/java/subway/controller/StationController.java b/src/main/java/subway/controller/StationController.java index 6b411392b..6835a8397 100644 --- a/src/main/java/subway/controller/StationController.java +++ b/src/main/java/subway/controller/StationController.java @@ -1,6 +1,6 @@ package subway.controller; -import subway.service.StationService; +import subway.service.station.StationService; import java.util.Scanner; diff --git a/src/main/java/subway/service/SectionService.java b/src/main/java/subway/service/SectionService.java index c2c76fec2..a4375781b 100644 --- a/src/main/java/subway/service/SectionService.java +++ b/src/main/java/subway/service/SectionService.java @@ -1,6 +1,7 @@ package subway.service; import subway.service.abstraction.input.InputInterface; +import subway.service.station.StationService; import subway.type.InputType; import subway.view.output.ExceptionView; import subway.view.output.ScreenView; diff --git a/src/main/java/subway/service/StationService.java b/src/main/java/subway/service/station/StationService.java similarity index 97% rename from src/main/java/subway/service/StationService.java rename to src/main/java/subway/service/station/StationService.java index 66036cf46..820f9df9f 100644 --- a/src/main/java/subway/service/StationService.java +++ b/src/main/java/subway/service/station/StationService.java @@ -1,7 +1,8 @@ -package subway.service; +package subway.service.station; import subway.domain.Station; import subway.repository.StationRepository; +import subway.service.InputService; import subway.service.abstraction.feature.FeatureChoiceInterface; import subway.service.abstraction.feature.FeatureInterface; import subway.service.validation.NameAddingValidation; From b354a893835494698c95ab8c91b59c1db9313327 Mon Sep 17 00:00:00 2001 From: daeun Date: Sun, 13 Dec 2020 21:52:10 +0900 Subject: [PATCH 56/98] feat(station-service): show the station name MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - [지하철 역] 지하철 역의 목록을 조회하는 기능 구현 --- docs/README.md | 2 +- .../service/station/StationNameService.java | 27 +++++++++++++++++++ .../service/station/StationService.java | 17 +++++++----- src/main/java/subway/type/TextType.java | 1 + 4 files changed, 39 insertions(+), 8 deletions(-) create mode 100644 src/main/java/subway/service/station/StationNameService.java diff --git a/docs/README.md b/docs/README.md index 012e21c0a..b092e048c 100644 --- a/docs/README.md +++ b/docs/README.md @@ -24,7 +24,7 @@ - [x] 지하철 역을 삭제한다. - [x] 지하철 역이 지하철 노선에 등록된 경우 삭제할 수 없다. `예외` - [x] 삭제할 역이 없는 경우 삭제할 수 없다. `예외` -- [ ] 지하철 역의 목록을 조회한다. +- [x] 지하철 역의 목록을 조회한다. ### 지하철 노선 - [ ] 지하철 노선을 등록한다. diff --git a/src/main/java/subway/service/station/StationNameService.java b/src/main/java/subway/service/station/StationNameService.java new file mode 100644 index 000000000..52de3aeb6 --- /dev/null +++ b/src/main/java/subway/service/station/StationNameService.java @@ -0,0 +1,27 @@ +package subway.service.station; + +import subway.type.InformationType; +import subway.type.TextType; + +import java.util.List; + +public class StationNameService { + public static void readStationName(StringBuilder stringBuilder, List stationNames) { + appendStationNameText(stringBuilder); + appendStationNames(stringBuilder, stationNames); + } + + public static void appendStationNameText(StringBuilder stringBuilder) { + stringBuilder.append(TextType.NEW_LINE.getText()) + .append(TextType.STATION_NAME_TEXT.getText()) + .append(TextType.NEW_LINE.getText()); + } + + public static void appendStationNames(StringBuilder stringBuilder, List stationNames) { + for (String stationName : stationNames) { + stringBuilder.append(InformationType.INFORMATION.getInformation()) + .append(stationName) + .append(TextType.NEW_LINE.getText()); + } + } +} diff --git a/src/main/java/subway/service/station/StationService.java b/src/main/java/subway/service/station/StationService.java index 820f9df9f..cd53133db 100644 --- a/src/main/java/subway/service/station/StationService.java +++ b/src/main/java/subway/service/station/StationService.java @@ -3,6 +3,7 @@ import subway.domain.Station; import subway.repository.StationRepository; import subway.service.InputService; +import subway.service.StringBuilderService; import subway.service.abstraction.feature.FeatureChoiceInterface; import subway.service.abstraction.feature.FeatureInterface; import subway.service.validation.NameAddingValidation; @@ -12,6 +13,7 @@ import subway.view.output.ScreenView; import subway.view.output.station.StationTextView; +import java.util.List; import java.util.Scanner; public class StationService implements FeatureChoiceInterface, FeatureInterface { @@ -39,13 +41,9 @@ public boolean chooseFeature(String input, Scanner scanner) { return delete(scanner); } if (input.equals(InputType.INPUT_THREE.getInput())) { - // TODO: 역 조회 기능 구현 - return false; + return show(); } - if (input.equals(InputType.INPUT_BACK.getInput())) { - return true; - } - return false; + return input.equals(InputType.INPUT_BACK.getInput()); } @Override @@ -81,6 +79,11 @@ public boolean delete(Scanner scanner) { @Override public boolean show() { - return false; + StringBuilder stringBuilder = new StringBuilder(); + List stationNames = StationRepository.getStationNames(); + + StationNameService.readStationName(stringBuilder, stationNames); + System.out.println(stringBuilder); + return true; } } diff --git a/src/main/java/subway/type/TextType.java b/src/main/java/subway/type/TextType.java index 0db9063ac..8c79c8397 100644 --- a/src/main/java/subway/type/TextType.java +++ b/src/main/java/subway/type/TextType.java @@ -5,6 +5,7 @@ public enum TextType { HORIZONTAL_LINES("---"), STATION_ADDING_TEXT("## 등록할 역 이름을 입력하세요."), STATION_DELETION_TEXT("## 삭제할 역 이름을 입력하세요."), + STATION_NAME_TEXT("## 역 목록"), TRANSIT_MAP_TEXT("## 지하철 노선도"); private final String text; From c0262eb726efc8ace9ddff7dc4acea1de1f14cbb Mon Sep 17 00:00:00 2001 From: daeun Date: Sun, 13 Dec 2020 23:14:33 +0900 Subject: [PATCH 57/98] fix(station-service): show the station name MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - [지하철 역] 지하철 역의 목록을 조회하는 기능 수정 - [지하철 역] 지하철 역의 목록을 중복 생성하는 문제 해결 --- .../service/station/StationNameService.java | 1 + .../subway/service/station/StationService.java | 15 +++++++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/main/java/subway/service/station/StationNameService.java b/src/main/java/subway/service/station/StationNameService.java index 52de3aeb6..69177e602 100644 --- a/src/main/java/subway/service/station/StationNameService.java +++ b/src/main/java/subway/service/station/StationNameService.java @@ -1,5 +1,6 @@ package subway.service.station; +import subway.domain.Station; import subway.type.InformationType; import subway.type.TextType; diff --git a/src/main/java/subway/service/station/StationService.java b/src/main/java/subway/service/station/StationService.java index cd53133db..a6f350dd2 100644 --- a/src/main/java/subway/service/station/StationService.java +++ b/src/main/java/subway/service/station/StationService.java @@ -3,7 +3,6 @@ import subway.domain.Station; import subway.repository.StationRepository; import subway.service.InputService; -import subway.service.StringBuilderService; import subway.service.abstraction.feature.FeatureChoiceInterface; import subway.service.abstraction.feature.FeatureInterface; import subway.service.validation.NameAddingValidation; @@ -13,6 +12,7 @@ import subway.view.output.ScreenView; import subway.view.output.station.StationTextView; +import java.util.LinkedList; import java.util.List; import java.util.Scanner; @@ -80,10 +80,21 @@ public boolean delete(Scanner scanner) { @Override public boolean show() { StringBuilder stringBuilder = new StringBuilder(); - List stationNames = StationRepository.getStationNames(); + + List stations = StationRepository.stations(); + List stationNames = getStationNames(stations); StationNameService.readStationName(stringBuilder, stationNames); System.out.println(stringBuilder); return true; } + + public static List getStationNames(List stations) { + List stationNames = new LinkedList<>(); + + for (Station station : stations) { + stationNames.add(station.getName()); + } + return stationNames; + } } From 3d58d4c3890dad131c29a9fa389b09c83173a506 Mon Sep 17 00:00:00 2001 From: daeun Date: Sun, 13 Dec 2020 23:27:00 +0900 Subject: [PATCH 58/98] refactor(station): modify the function MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - [지하철 역] 지하철 역 이름을 가져오는 함수 수정 --- .../java/subway/repository/StationRepository.java | 5 +++-- .../java/subway/service/station/StationService.java | 13 +------------ .../service/validation/NameAddingValidation.java | 2 +- 3 files changed, 5 insertions(+), 15 deletions(-) diff --git a/src/main/java/subway/repository/StationRepository.java b/src/main/java/subway/repository/StationRepository.java index ad0f135fb..66ddb2d68 100644 --- a/src/main/java/subway/repository/StationRepository.java +++ b/src/main/java/subway/repository/StationRepository.java @@ -9,7 +9,6 @@ public class StationRepository { private static final List stations = new ArrayList<>(); - private static final List stationNames = new ArrayList<>(); public static List stations() { return Collections.unmodifiableList(stations); @@ -23,7 +22,9 @@ public static boolean deleteStation(String name) { return stations.removeIf(station -> Objects.equals(station.getName(), name)); } - public static List getStationNames() { + public static List stationNames() { + List stationNames = new ArrayList<>(); + for (Station station : stations) { stationNames.add(station.getName()); } diff --git a/src/main/java/subway/service/station/StationService.java b/src/main/java/subway/service/station/StationService.java index a6f350dd2..b2c222577 100644 --- a/src/main/java/subway/service/station/StationService.java +++ b/src/main/java/subway/service/station/StationService.java @@ -80,21 +80,10 @@ public boolean delete(Scanner scanner) { @Override public boolean show() { StringBuilder stringBuilder = new StringBuilder(); - - List stations = StationRepository.stations(); - List stationNames = getStationNames(stations); + List stationNames = StationRepository.stationNames(); StationNameService.readStationName(stringBuilder, stationNames); System.out.println(stringBuilder); return true; } - - public static List getStationNames(List stations) { - List stationNames = new LinkedList<>(); - - for (Station station : stations) { - stationNames.add(station.getName()); - } - return stationNames; - } } diff --git a/src/main/java/subway/service/validation/NameAddingValidation.java b/src/main/java/subway/service/validation/NameAddingValidation.java index 01a934da4..04ece0698 100644 --- a/src/main/java/subway/service/validation/NameAddingValidation.java +++ b/src/main/java/subway/service/validation/NameAddingValidation.java @@ -11,7 +11,7 @@ public class NameAddingValidation implements NameAddingValidationInterface { @Override public boolean checkNameDuplication(String stationName) { - List stationNames = StationRepository.getStationNames(); + List stationNames = StationRepository.stationNames(); return stationNames.contains(stationName); } From b20b6da68182654a9df15a6dbf0803128fe613fc Mon Sep 17 00:00:00 2001 From: daeun Date: Sun, 13 Dec 2020 23:29:10 +0900 Subject: [PATCH 59/98] refactor(transit-map): modify the function MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - [지하철 노선도] 지하철 노선도의 지하철 역 이름을 가져오는 함수 수정 --- src/main/java/subway/repository/TransitMapRepository.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/subway/repository/TransitMapRepository.java b/src/main/java/subway/repository/TransitMapRepository.java index 644c446cd..8d7d6515f 100644 --- a/src/main/java/subway/repository/TransitMapRepository.java +++ b/src/main/java/subway/repository/TransitMapRepository.java @@ -8,13 +8,14 @@ public class TransitMapRepository { private static final Map> transitMaps = new LinkedHashMap<>(); - private static final List> transitMapsStationNames = new ArrayList<>(); public static Map> transitMaps() { return Collections.unmodifiableMap(transitMaps); } public static List> transitMapsStationNames() { + List> transitMapsStationNames = new ArrayList<>(); + for (Map.Entry> entry : transitMaps.entrySet()) { LinkedList transitMapStationNames = new LinkedList<>(); LinkedList values = entry.getValue(); From ca460ad67dba95d7217c150b5be1b8fcd13b1b56 Mon Sep 17 00:00:00 2001 From: daeun Date: Mon, 14 Dec 2020 00:28:42 +0900 Subject: [PATCH 60/98] style(station): delete unused import statements MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 사용하지 않는 import 구문 삭제 --- src/main/java/subway/service/station/StationNameService.java | 1 - src/main/java/subway/service/station/StationService.java | 1 - 2 files changed, 2 deletions(-) diff --git a/src/main/java/subway/service/station/StationNameService.java b/src/main/java/subway/service/station/StationNameService.java index 69177e602..52de3aeb6 100644 --- a/src/main/java/subway/service/station/StationNameService.java +++ b/src/main/java/subway/service/station/StationNameService.java @@ -1,6 +1,5 @@ package subway.service.station; -import subway.domain.Station; import subway.type.InformationType; import subway.type.TextType; diff --git a/src/main/java/subway/service/station/StationService.java b/src/main/java/subway/service/station/StationService.java index b2c222577..108c5ddf9 100644 --- a/src/main/java/subway/service/station/StationService.java +++ b/src/main/java/subway/service/station/StationService.java @@ -12,7 +12,6 @@ import subway.view.output.ScreenView; import subway.view.output.station.StationTextView; -import java.util.LinkedList; import java.util.List; import java.util.Scanner; From 1a304489b0274a1352578731737d1e346344607d Mon Sep 17 00:00:00 2001 From: daeun Date: Mon, 14 Dec 2020 00:35:01 +0900 Subject: [PATCH 61/98] refactor(station): rename classes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 클래스명 변경 --- src/main/java/subway/service/LineService.java | 60 ------------------- .../StationNameAddingValidation.java} | 4 +- .../StationNameDeletionValidation.java} | 4 +- 3 files changed, 4 insertions(+), 64 deletions(-) delete mode 100644 src/main/java/subway/service/LineService.java rename src/main/java/subway/service/{validation/NameAddingValidation.java => station/StationNameAddingValidation.java} (92%) rename src/main/java/subway/service/{validation/NameDeletionValidation.java => station/StationNameDeletionValidation.java} (90%) diff --git a/src/main/java/subway/service/LineService.java b/src/main/java/subway/service/LineService.java deleted file mode 100644 index 060f1374a..000000000 --- a/src/main/java/subway/service/LineService.java +++ /dev/null @@ -1,60 +0,0 @@ -package subway.service; - -import subway.service.abstraction.feature.FeatureChoiceInterface; -import subway.service.abstraction.feature.FeatureInterface; -import subway.type.InputType; -import subway.view.output.ScreenView; - -import java.util.Scanner; - -public class LineService implements FeatureChoiceInterface, FeatureInterface { - public static void manageLine(Scanner scanner){ - InputService inputService = new InputService(); - LineService lineService = new LineService(); - - System.out.println(); - while (true) { - ScreenView.printLineManagementScreen(); - String lineInput = scanner.nextLine(); - if (inputService.isInput(lineInput) - && lineService.chooseFeature(lineInput, scanner)) { - break; - } - } - } - - @Override - public boolean chooseFeature(String input, Scanner scanner) { - if (input.equals(InputType.INPUT_ONE.getInput())) { - // TODO: 노선 등록 기능 구현 - return false; - } - if (input.equals(InputType.INPUT_TWO.getInput())) { - // TODO: 노선 삭제 기능 구현 - return false; - } - if (input.equals(InputType.INPUT_THREE.getInput())) { - // TODO: 노선 조회 기능 구현 - return false; - } - if (input.equals(InputType.INPUT_BACK.getInput())) { - return true; - } - return false; - } - - @Override - public boolean add(Scanner scanner) { - return false; - } - - @Override - public boolean delete(Scanner scanner) { - return false; - } - - @Override - public boolean show() { - return false; - } -} diff --git a/src/main/java/subway/service/validation/NameAddingValidation.java b/src/main/java/subway/service/station/StationNameAddingValidation.java similarity index 92% rename from src/main/java/subway/service/validation/NameAddingValidation.java rename to src/main/java/subway/service/station/StationNameAddingValidation.java index 04ece0698..e83ae1256 100644 --- a/src/main/java/subway/service/validation/NameAddingValidation.java +++ b/src/main/java/subway/service/station/StationNameAddingValidation.java @@ -1,4 +1,4 @@ -package subway.service.validation; +package subway.service.station; import subway.repository.StationRepository; import subway.service.abstraction.validation.NameAddingValidationInterface; @@ -8,7 +8,7 @@ import java.util.List; -public class NameAddingValidation implements NameAddingValidationInterface { +public class StationNameAddingValidation implements NameAddingValidationInterface { @Override public boolean checkNameDuplication(String stationName) { List stationNames = StationRepository.stationNames(); diff --git a/src/main/java/subway/service/validation/NameDeletionValidation.java b/src/main/java/subway/service/station/StationNameDeletionValidation.java similarity index 90% rename from src/main/java/subway/service/validation/NameDeletionValidation.java rename to src/main/java/subway/service/station/StationNameDeletionValidation.java index c5c2b90a3..bf4e4c439 100644 --- a/src/main/java/subway/service/validation/NameDeletionValidation.java +++ b/src/main/java/subway/service/station/StationNameDeletionValidation.java @@ -1,4 +1,4 @@ -package subway.service.validation; +package subway.service.station; import subway.repository.StationRepository; import subway.repository.TransitMapRepository; @@ -8,7 +8,7 @@ import java.util.LinkedList; import java.util.List; -public class NameDeletionValidation implements NameDeletionValidationInterface { +public class StationNameDeletionValidation implements NameDeletionValidationInterface { @Override public boolean checkNameInTransitMap(String stationName) { List> transitMapsStationsNames From 16e8b5a6eb8a6d4e8091c372e3307df2fd50b651 Mon Sep 17 00:00:00 2001 From: daeun Date: Mon, 14 Dec 2020 00:49:47 +0900 Subject: [PATCH 62/98] feat(line-service): add a line MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - [지하철 노선] 지하철 노선을 등록하는 기능 구현 --- docs/README.md | 8 +- .../subway/controller/LineController.java | 2 +- .../subway/repository/LineRepository.java | 9 +++ .../line/LineNameAddingValidation.java | 45 +++++++++++ .../java/subway/service/line/LineService.java | 75 +++++++++++++++++++ .../service/station/StationService.java | 6 +- src/main/java/subway/type/CheckType.java | 3 +- src/main/java/subway/type/ExceptionType.java | 5 +- .../java/subway/type/InformationType.java | 3 +- src/main/java/subway/type/TextType.java | 1 + .../view/output/line/LineExceptionView.java | 20 +++++ .../view/output/line/LineInformationView.java | 10 +++ .../subway/view/output/line/LineTextView.java | 10 +++ 13 files changed, 185 insertions(+), 12 deletions(-) create mode 100644 src/main/java/subway/service/line/LineNameAddingValidation.java create mode 100644 src/main/java/subway/service/line/LineService.java create mode 100644 src/main/java/subway/view/output/line/LineExceptionView.java create mode 100644 src/main/java/subway/view/output/line/LineInformationView.java create mode 100644 src/main/java/subway/view/output/line/LineTextView.java diff --git a/docs/README.md b/docs/README.md index b092e048c..533ecc445 100644 --- a/docs/README.md +++ b/docs/README.md @@ -27,10 +27,10 @@ - [x] 지하철 역의 목록을 조회한다. ### 지하철 노선 -- [ ] 지하철 노선을 등록한다. - - [ ] 지하철 노선 이름은 중복될 수 없다. `예외` - - [ ] 지하철 노선 이름은 2글자 이상이어야 한다. `예외` - - [ ] 지하철 노선 이름은 '선'으로 끝나야 한다. `예외` +- [x] 지하철 노선을 등록한다. + - [x] 지하철 노선 이름은 중복될 수 없다. `예외` + - [x] 지하철 노선 이름은 2글자 이상이어야 한다. `예외` + - [x] 지하철 노선 이름은 '선'으로 끝나야 한다. `예외` - [ ] 지하철 노선을 등록할 때 상행 종점역과 하행 종점역을 입력한다. - [ ] 지하철 노선을 삭제한다. - [ ] 지하철 노선이 지하철 노선도에 등록된 경우 삭제할 수 없다. `예외` diff --git a/src/main/java/subway/controller/LineController.java b/src/main/java/subway/controller/LineController.java index fabf383f8..6dcebadb0 100644 --- a/src/main/java/subway/controller/LineController.java +++ b/src/main/java/subway/controller/LineController.java @@ -1,6 +1,6 @@ package subway.controller; -import subway.service.LineService; +import subway.service.line.LineService; import java.util.Scanner; diff --git a/src/main/java/subway/repository/LineRepository.java b/src/main/java/subway/repository/LineRepository.java index 2cf84c862..481037bfd 100644 --- a/src/main/java/subway/repository/LineRepository.java +++ b/src/main/java/subway/repository/LineRepository.java @@ -21,4 +21,13 @@ public static void addLine(Line line) { public static boolean deleteLineByName(String name) { return lines.removeIf(line -> Objects.equals(line.getName(), name)); } + + public static List lineNames() { + List lineNames = new ArrayList<>(); + + for (Line line : lines) { + lineNames.add(line.getName()); + } + return lineNames; + } } diff --git a/src/main/java/subway/service/line/LineNameAddingValidation.java b/src/main/java/subway/service/line/LineNameAddingValidation.java new file mode 100644 index 000000000..9b73122ab --- /dev/null +++ b/src/main/java/subway/service/line/LineNameAddingValidation.java @@ -0,0 +1,45 @@ +package subway.service.line; + +import subway.repository.LineRepository; +import subway.service.abstraction.validation.NameAddingValidationInterface; +import subway.type.BoundaryType; +import subway.type.CheckType; +import subway.view.output.line.LineExceptionView; + +import java.util.List; + +public class LineNameAddingValidation implements NameAddingValidationInterface { + @Override + public boolean checkNameDuplication(String lineName) { + List lineNames = LineRepository.lineNames(); + return lineNames.contains(lineName); + } + + @Override + public boolean checkNameLength(String lineName) { + return lineName.length() >= BoundaryType.NAME_LENGTH_BOUNDARY.getBoundary(); + } + + @Override + public boolean checkNameLastCharacter(String lineName) { + String lastCharacter = lineName.substring(lineName.length() - 1); + return lastCharacter.equals(CheckType.LINE_CHECK.getCheck()); + } + + @Override + public boolean checkAddingValidation(String lineName) { + if (checkNameDuplication(lineName)) { + LineExceptionView.printInvalidLineNameException(); + return false; + } + if (!checkNameLength(lineName)) { + LineExceptionView.printInvalidLineNameLengthException(); + return false; + } + if (!checkNameLastCharacter(lineName)) { + LineExceptionView.printInvalidLineNameLastCharacterException(); + return false; + } + return true; + } +} diff --git a/src/main/java/subway/service/line/LineService.java b/src/main/java/subway/service/line/LineService.java new file mode 100644 index 000000000..a95cc8395 --- /dev/null +++ b/src/main/java/subway/service/line/LineService.java @@ -0,0 +1,75 @@ +package subway.service.line; + +import subway.domain.Line; +import subway.repository.LineRepository; +import subway.service.InputService; +import subway.service.abstraction.feature.FeatureChoiceInterface; +import subway.service.abstraction.feature.FeatureInterface; +import subway.type.InputType; +import subway.view.output.ScreenView; +import subway.view.output.line.LineInformationView; +import subway.view.output.line.LineTextView; + +import java.util.Scanner; + +public class LineService implements FeatureChoiceInterface, FeatureInterface { + public static void manageLine(Scanner scanner){ + InputService inputService = new InputService(); + LineService lineService = new LineService(); + + System.out.println(); + while (true) { + ScreenView.printLineManagementScreen(); + String lineInput = scanner.nextLine(); + if (inputService.isInput(lineInput) + && lineService.chooseFeature(lineInput, scanner)) { + break; + } + } + } + + @Override + public boolean chooseFeature(String input, Scanner scanner) { + if (input.equals(InputType.INPUT_ONE.getInput())) { + return add(scanner); + } + if (input.equals(InputType.INPUT_TWO.getInput())) { + // TODO: 노선 삭제 기능 구현 + return false; + } + if (input.equals(InputType.INPUT_THREE.getInput())) { + // TODO: 노선 조회 기능 구현 + return false; + } + if (input.equals(InputType.INPUT_BACK.getInput())) { + return true; + } + return false; + } + + @Override + public boolean add(Scanner scanner) { + LineNameAddingValidation lineNameAddingValidation = new LineNameAddingValidation(); + + LineTextView.printLineAddingText(); + String lineName = scanner.nextLine(); + + if (lineNameAddingValidation.checkAddingValidation(lineName)) { + LineRepository.addLine(new Line(lineName)); + LineInformationView.printLineAddingInformation(); + System.out.println(); + return true; + } + return false; + } + + @Override + public boolean delete(Scanner scanner) { + return false; + } + + @Override + public boolean show() { + return false; + } +} diff --git a/src/main/java/subway/service/station/StationService.java b/src/main/java/subway/service/station/StationService.java index 108c5ddf9..1ba430e44 100644 --- a/src/main/java/subway/service/station/StationService.java +++ b/src/main/java/subway/service/station/StationService.java @@ -5,8 +5,6 @@ import subway.service.InputService; import subway.service.abstraction.feature.FeatureChoiceInterface; import subway.service.abstraction.feature.FeatureInterface; -import subway.service.validation.NameAddingValidation; -import subway.service.validation.NameDeletionValidation; import subway.type.InputType; import subway.view.output.station.StationInformationView; import subway.view.output.ScreenView; @@ -47,7 +45,7 @@ public boolean chooseFeature(String input, Scanner scanner) { @Override public boolean add(Scanner scanner) { - NameAddingValidation nameAddingValidation = new NameAddingValidation(); + StationNameAddingValidation nameAddingValidation = new StationNameAddingValidation(); StationTextView.printStationAddingText(); String stationName = scanner.nextLine(); @@ -63,7 +61,7 @@ public boolean add(Scanner scanner) { @Override public boolean delete(Scanner scanner) { - NameDeletionValidation nameDeletionValidation = new NameDeletionValidation(); + StationNameDeletionValidation nameDeletionValidation = new StationNameDeletionValidation(); StationTextView.printStationDeletionText(); String stationName = scanner.nextLine(); diff --git a/src/main/java/subway/type/CheckType.java b/src/main/java/subway/type/CheckType.java index c81929ccb..13e1ac1ec 100644 --- a/src/main/java/subway/type/CheckType.java +++ b/src/main/java/subway/type/CheckType.java @@ -1,7 +1,8 @@ package subway.type; public enum CheckType { - STATION_CHECK("역"); + STATION_CHECK("역"), + LINE_CHECK("선"); private final String check; diff --git a/src/main/java/subway/type/ExceptionType.java b/src/main/java/subway/type/ExceptionType.java index 8c5475acf..9b59db43d 100644 --- a/src/main/java/subway/type/ExceptionType.java +++ b/src/main/java/subway/type/ExceptionType.java @@ -7,7 +7,10 @@ public enum ExceptionType { INVALID_STATION_NAME_LENGTH(ERROR.getException() + "2글자 이상의 역 이름을 입력해주세요.\n"), INVALID_STATION_NAME_LAST_CHARACTER(ERROR.getException() + "'역'으로 끝나는 역 이름을 입력해주세요.\n"), INVALID_STATION_NAME_IN_TRANSIT_MAP(ERROR.getException() + "해당 역은 지하철 노선에 등록되어 있어 삭제할 수 없습니다.\n"), - INVALID_STATION_NAME_EXISTENCE(ERROR.getException() + "해당 역이 존재하지 않습니다.\n"); + INVALID_STATION_NAME_EXISTENCE(ERROR.getException() + "해당 역이 존재하지 않습니다.\n"), + INVALID_LINE_NAME(ERROR.getException() + "이미 등록된 노선 이름입니다.\n"), + INVALID_LINE_NAME_LENGTH(ERROR.getException() + "2글자 이상의 노선 이름을 입력해주세요.\n"), + INVALID_LINE_NAME_LAST_CHARACTER(ERROR.getException() + "'선'으로 끝나는 노선 이름을 입력해주세요.\n"); private final String exception; diff --git a/src/main/java/subway/type/InformationType.java b/src/main/java/subway/type/InformationType.java index 9df7d5768..a7d9ffdcb 100644 --- a/src/main/java/subway/type/InformationType.java +++ b/src/main/java/subway/type/InformationType.java @@ -3,7 +3,8 @@ public enum InformationType { INFORMATION("[INFO] "), STATION_ADDING_INFORMATION(INFORMATION.getInformation() + "지하철 역이 등록되었습니다."), - STATION_DELETION_INFORMATION(INFORMATION.getInformation() + "지하철 역이 삭제되었습니다."); + STATION_DELETION_INFORMATION(INFORMATION.getInformation() + "지하철 역이 삭제되었습니다."), + LINE_ADDING_INFORMATION(INFORMATION.getInformation() + "지하철 노선이 등록되었습니다."); private final String information; diff --git a/src/main/java/subway/type/TextType.java b/src/main/java/subway/type/TextType.java index 8c79c8397..963a83d08 100644 --- a/src/main/java/subway/type/TextType.java +++ b/src/main/java/subway/type/TextType.java @@ -6,6 +6,7 @@ public enum TextType { STATION_ADDING_TEXT("## 등록할 역 이름을 입력하세요."), STATION_DELETION_TEXT("## 삭제할 역 이름을 입력하세요."), STATION_NAME_TEXT("## 역 목록"), + LINE_ADDING_TEXT("## 등록할 노선 이름을 입력하세요."), TRANSIT_MAP_TEXT("## 지하철 노선도"); private final String text; diff --git a/src/main/java/subway/view/output/line/LineExceptionView.java b/src/main/java/subway/view/output/line/LineExceptionView.java new file mode 100644 index 000000000..ffea982c7 --- /dev/null +++ b/src/main/java/subway/view/output/line/LineExceptionView.java @@ -0,0 +1,20 @@ +package subway.view.output.line; + +import subway.type.ExceptionType; + +public class LineExceptionView { + public static void printInvalidLineNameException() { + System.out.println(); + System.out.println(ExceptionType.INVALID_LINE_NAME.getException()); + } + + public static void printInvalidLineNameLengthException() { + System.out.println(); + System.out.println(ExceptionType.INVALID_LINE_NAME_LENGTH.getException()); + } + + public static void printInvalidLineNameLastCharacterException() { + System.out.println(); + System.out.println(ExceptionType.INVALID_LINE_NAME_LAST_CHARACTER.getException()); + } +} diff --git a/src/main/java/subway/view/output/line/LineInformationView.java b/src/main/java/subway/view/output/line/LineInformationView.java new file mode 100644 index 000000000..d968f134b --- /dev/null +++ b/src/main/java/subway/view/output/line/LineInformationView.java @@ -0,0 +1,10 @@ +package subway.view.output.line; + +import subway.type.InformationType; + +public class LineInformationView { + public static void printLineAddingInformation() { + System.out.println(); + System.out.println(InformationType.LINE_ADDING_INFORMATION.getInformation()); + } +} diff --git a/src/main/java/subway/view/output/line/LineTextView.java b/src/main/java/subway/view/output/line/LineTextView.java new file mode 100644 index 000000000..0c7324e5c --- /dev/null +++ b/src/main/java/subway/view/output/line/LineTextView.java @@ -0,0 +1,10 @@ +package subway.view.output.line; + +import subway.type.TextType; + +public class LineTextView { + public static void printLineAddingText() { + System.out.println(); + System.out.println(TextType.LINE_ADDING_TEXT.getText()); + } +} From 4fe007776151f2ffd8ceab611f4a1cd12cd96da0 Mon Sep 17 00:00:00 2001 From: daeun Date: Mon, 14 Dec 2020 01:12:11 +0900 Subject: [PATCH 63/98] feat(line-service): organize the skeleton MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - [지하철 노선] 지하철 노선을 등록할 때 상행 종점역과 하행 종점역을 입력하는 기능 골격 구성 --- .../line/LineNameAddingValidation.java | 4 ++++ .../java/subway/service/line/LineService.java | 23 ++++++++++++++++--- src/main/java/subway/type/TextType.java | 2 ++ .../subway/view/output/line/LineTextView.java | 10 ++++++++ 4 files changed, 36 insertions(+), 3 deletions(-) diff --git a/src/main/java/subway/service/line/LineNameAddingValidation.java b/src/main/java/subway/service/line/LineNameAddingValidation.java index 9b73122ab..02148b8bd 100644 --- a/src/main/java/subway/service/line/LineNameAddingValidation.java +++ b/src/main/java/subway/service/line/LineNameAddingValidation.java @@ -42,4 +42,8 @@ public boolean checkAddingValidation(String lineName) { } return true; } + + public boolean checkStationNamesAddingValidation(String upStationName, String downStationName) { + return false; + } } diff --git a/src/main/java/subway/service/line/LineService.java b/src/main/java/subway/service/line/LineService.java index a95cc8395..8bc4f228e 100644 --- a/src/main/java/subway/service/line/LineService.java +++ b/src/main/java/subway/service/line/LineService.java @@ -51,10 +51,12 @@ public boolean chooseFeature(String input, Scanner scanner) { public boolean add(Scanner scanner) { LineNameAddingValidation lineNameAddingValidation = new LineNameAddingValidation(); - LineTextView.printLineAddingText(); - String lineName = scanner.nextLine(); + String lineName = scanLineName(scanner); + String upStationName = scanUpStationName(scanner); + String downStationName = scanDownStationName(scanner); - if (lineNameAddingValidation.checkAddingValidation(lineName)) { + if ((lineNameAddingValidation.checkAddingValidation(lineName)) + && (lineNameAddingValidation.checkStationNamesAddingValidation(upStationName, downStationName))) { LineRepository.addLine(new Line(lineName)); LineInformationView.printLineAddingInformation(); System.out.println(); @@ -63,6 +65,21 @@ public boolean add(Scanner scanner) { return false; } + public static String scanLineName(Scanner scanner) { + LineTextView.printLineAddingText(); + return scanner.nextLine(); + } + + public static String scanUpStationName(Scanner scanner) { + LineTextView.printLineUpStationNameText(); + return scanner.nextLine(); + } + + public static String scanDownStationName(Scanner scanner) { + LineTextView.printLineDownStationNameText(); + return scanner.nextLine(); + } + @Override public boolean delete(Scanner scanner) { return false; diff --git a/src/main/java/subway/type/TextType.java b/src/main/java/subway/type/TextType.java index 963a83d08..05451dc20 100644 --- a/src/main/java/subway/type/TextType.java +++ b/src/main/java/subway/type/TextType.java @@ -7,6 +7,8 @@ public enum TextType { STATION_DELETION_TEXT("## 삭제할 역 이름을 입력하세요."), STATION_NAME_TEXT("## 역 목록"), LINE_ADDING_TEXT("## 등록할 노선 이름을 입력하세요."), + LINE_UP_STATION_NAME_TEXT("## 등록할 노선의 상행 종점역 이름을 입력하세요."), + LINE_DOWN_STATION_NAME_TEXT("## 등록할 노선의 하행 종점역 이름을 입력하세요."), TRANSIT_MAP_TEXT("## 지하철 노선도"); private final String text; diff --git a/src/main/java/subway/view/output/line/LineTextView.java b/src/main/java/subway/view/output/line/LineTextView.java index 0c7324e5c..7da402adb 100644 --- a/src/main/java/subway/view/output/line/LineTextView.java +++ b/src/main/java/subway/view/output/line/LineTextView.java @@ -7,4 +7,14 @@ public static void printLineAddingText() { System.out.println(); System.out.println(TextType.LINE_ADDING_TEXT.getText()); } + + public static void printLineUpStationNameText() { + System.out.println(); + System.out.println(TextType.LINE_UP_STATION_NAME_TEXT.getText()); + } + + public static void printLineDownStationNameText() { + System.out.println(); + System.out.println(TextType.LINE_DOWN_STATION_NAME_TEXT.getText()); + } } From ce3eb71538c3998a694bc1d7e50b0751140ee350 Mon Sep 17 00:00:00 2001 From: daeun Date: Mon, 14 Dec 2020 01:26:59 +0900 Subject: [PATCH 64/98] docs(readme): update README.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 구현할 기능 목록 수정 --- docs/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/README.md b/docs/README.md index 533ecc445..52b71912a 100644 --- a/docs/README.md +++ b/docs/README.md @@ -32,6 +32,8 @@ - [x] 지하철 노선 이름은 2글자 이상이어야 한다. `예외` - [x] 지하철 노선 이름은 '선'으로 끝나야 한다. `예외` - [ ] 지하철 노선을 등록할 때 상행 종점역과 하행 종점역을 입력한다. + - [ ] 상행 종점역과 하행 종점역은 달라야 한다. `예외` + - [ ] 상행 종점역과 하행 종점역은 지하철 역에 존재해야 한다. `예외` - [ ] 지하철 노선을 삭제한다. - [ ] 지하철 노선이 지하철 노선도에 등록된 경우 삭제할 수 없다. `예외` - [ ] 삭제할 노선이 없는 경우 삭제할 수 없다. `예외` From f65b4e0f76163dadb9916608412169157a3f3238 Mon Sep 17 00:00:00 2001 From: daeun Date: Mon, 14 Dec 2020 03:15:16 +0900 Subject: [PATCH 65/98] feat(line-service): scan up and down station names MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - [지하철 노선] 지하철 노선을 등록할 때 상행 종점역과 하행 종점역을 입력하는 기능 구현 - [지하철 노선] 상행 종점역과 하행 종점역이 지하철 역에 존재하지 않는 경우 예외 처리하는 기능 구현 - [지하철 노선] 상행 종점역과 하행 종점역이 같은 경우 예외 처리하는 기능 구현 --- docs/README.md | 6 +-- .../service/line/LineNameAddingService.java | 52 +++++++++++++++++++ .../line/LineNameAddingValidation.java | 20 ++++++- .../java/subway/service/line/LineService.java | 40 +++++--------- src/main/java/subway/type/ExceptionType.java | 4 +- .../view/output/line/LineExceptionView.java | 10 ++++ 6 files changed, 100 insertions(+), 32 deletions(-) create mode 100644 src/main/java/subway/service/line/LineNameAddingService.java diff --git a/docs/README.md b/docs/README.md index 52b71912a..cc0286d85 100644 --- a/docs/README.md +++ b/docs/README.md @@ -31,9 +31,9 @@ - [x] 지하철 노선 이름은 중복될 수 없다. `예외` - [x] 지하철 노선 이름은 2글자 이상이어야 한다. `예외` - [x] 지하철 노선 이름은 '선'으로 끝나야 한다. `예외` - - [ ] 지하철 노선을 등록할 때 상행 종점역과 하행 종점역을 입력한다. - - [ ] 상행 종점역과 하행 종점역은 달라야 한다. `예외` - - [ ] 상행 종점역과 하행 종점역은 지하철 역에 존재해야 한다. `예외` + - [x] 지하철 노선을 등록할 때 상행 종점역과 하행 종점역을 입력한다. + - [x] 상행 종점역과 하행 종점역은 지하철 역에 존재해야 한다. `예외` + - [x] 상행 종점역과 하행 종점역은 달라야 한다. `예외` - [ ] 지하철 노선을 삭제한다. - [ ] 지하철 노선이 지하철 노선도에 등록된 경우 삭제할 수 없다. `예외` - [ ] 삭제할 노선이 없는 경우 삭제할 수 없다. `예외` diff --git a/src/main/java/subway/service/line/LineNameAddingService.java b/src/main/java/subway/service/line/LineNameAddingService.java new file mode 100644 index 000000000..92284b888 --- /dev/null +++ b/src/main/java/subway/service/line/LineNameAddingService.java @@ -0,0 +1,52 @@ +package subway.service.line; + +import subway.domain.Line; +import subway.domain.Station; +import subway.domain.TransitMap; +import subway.repository.LineRepository; +import subway.repository.TransitMapRepository; +import subway.view.output.line.LineInformationView; +import subway.view.output.line.LineTextView; + +import java.util.LinkedList; +import java.util.Scanner; + +public class LineNameAddingService { + public static String scanLineName(Scanner scanner) { + LineTextView.printLineAddingText(); + return scanner.nextLine(); + } + + public static String scanUpStationName(Scanner scanner) { + LineTextView.printLineUpStationNameText(); + return scanner.nextLine(); + } + + public static String scanDownStationName(Scanner scanner) { + LineTextView.printLineDownStationNameText(); + return scanner.nextLine(); + } + + public static LinkedList addStationNames(String upStationName, String downStationName) { + LinkedList stationNames = new LinkedList<>(); + + stationNames.add(new Station(upStationName)); + stationNames.add(new Station(downStationName)); + return stationNames; + } + + public static Line addLineName(String lineName) { + Line line = new Line(lineName); + + LineRepository.addLine(line); + return line; + } + + public static void addNames(String lineName, LinkedList stationNames) { + Line line = addLineName(lineName); + + TransitMapRepository.addTransitMap(new TransitMap(line, stationNames)); + LineInformationView.printLineAddingInformation(); + System.out.println(); + } +} diff --git a/src/main/java/subway/service/line/LineNameAddingValidation.java b/src/main/java/subway/service/line/LineNameAddingValidation.java index 02148b8bd..340acb78c 100644 --- a/src/main/java/subway/service/line/LineNameAddingValidation.java +++ b/src/main/java/subway/service/line/LineNameAddingValidation.java @@ -1,6 +1,7 @@ package subway.service.line; import subway.repository.LineRepository; +import subway.repository.StationRepository; import subway.service.abstraction.validation.NameAddingValidationInterface; import subway.type.BoundaryType; import subway.type.CheckType; @@ -43,7 +44,24 @@ public boolean checkAddingValidation(String lineName) { return true; } + public static boolean checkExistingStationNames(String upStationName, String downStationName) { + List stationNames = StationRepository.stationNames(); + return (stationNames.contains(upStationName)) && (stationNames.contains(downStationName)); + } + + public static boolean checkSameStationNames(String upStationName, String downStationName) { + return upStationName.equals(downStationName); + } + public boolean checkStationNamesAddingValidation(String upStationName, String downStationName) { - return false; + if (!checkExistingStationNames(upStationName, downStationName)) { + LineExceptionView.printInvalidLineExistingStationNamesException(); + return false; + } + if (checkSameStationNames(upStationName, downStationName)) { + LineExceptionView.printInvalidLineSameStationNamesException(); + return false; + } + return true; } } diff --git a/src/main/java/subway/service/line/LineService.java b/src/main/java/subway/service/line/LineService.java index 8bc4f228e..87e75b91f 100644 --- a/src/main/java/subway/service/line/LineService.java +++ b/src/main/java/subway/service/line/LineService.java @@ -1,15 +1,15 @@ package subway.service.line; import subway.domain.Line; +import subway.domain.Station; import subway.repository.LineRepository; import subway.service.InputService; import subway.service.abstraction.feature.FeatureChoiceInterface; import subway.service.abstraction.feature.FeatureInterface; import subway.type.InputType; import subway.view.output.ScreenView; -import subway.view.output.line.LineInformationView; -import subway.view.output.line.LineTextView; +import java.util.LinkedList; import java.util.Scanner; public class LineService implements FeatureChoiceInterface, FeatureInterface { @@ -51,33 +51,19 @@ public boolean chooseFeature(String input, Scanner scanner) { public boolean add(Scanner scanner) { LineNameAddingValidation lineNameAddingValidation = new LineNameAddingValidation(); - String lineName = scanLineName(scanner); - String upStationName = scanUpStationName(scanner); - String downStationName = scanDownStationName(scanner); - - if ((lineNameAddingValidation.checkAddingValidation(lineName)) - && (lineNameAddingValidation.checkStationNamesAddingValidation(upStationName, downStationName))) { - LineRepository.addLine(new Line(lineName)); - LineInformationView.printLineAddingInformation(); - System.out.println(); - return true; + String lineName = LineNameAddingService.scanLineName(scanner); + if (!lineNameAddingValidation.checkAddingValidation(lineName)) { + return false; + } + String upStationName = LineNameAddingService.scanUpStationName(scanner); + String downStationName = LineNameAddingService.scanDownStationName(scanner); + if (!lineNameAddingValidation.checkStationNamesAddingValidation(upStationName, downStationName)) { + return false; } - return false; - } - - public static String scanLineName(Scanner scanner) { - LineTextView.printLineAddingText(); - return scanner.nextLine(); - } - - public static String scanUpStationName(Scanner scanner) { - LineTextView.printLineUpStationNameText(); - return scanner.nextLine(); - } - public static String scanDownStationName(Scanner scanner) { - LineTextView.printLineDownStationNameText(); - return scanner.nextLine(); + LinkedList stationNames = LineNameAddingService.addStationNames(upStationName, downStationName); + LineNameAddingService.addNames(lineName, stationNames); + return true; } @Override diff --git a/src/main/java/subway/type/ExceptionType.java b/src/main/java/subway/type/ExceptionType.java index 9b59db43d..9c6c20efb 100644 --- a/src/main/java/subway/type/ExceptionType.java +++ b/src/main/java/subway/type/ExceptionType.java @@ -10,7 +10,9 @@ public enum ExceptionType { INVALID_STATION_NAME_EXISTENCE(ERROR.getException() + "해당 역이 존재하지 않습니다.\n"), INVALID_LINE_NAME(ERROR.getException() + "이미 등록된 노선 이름입니다.\n"), INVALID_LINE_NAME_LENGTH(ERROR.getException() + "2글자 이상의 노선 이름을 입력해주세요.\n"), - INVALID_LINE_NAME_LAST_CHARACTER(ERROR.getException() + "'선'으로 끝나는 노선 이름을 입력해주세요.\n"); + INVALID_LINE_NAME_LAST_CHARACTER(ERROR.getException() + "'선'으로 끝나는 노선 이름을 입력해주세요.\n"), + INVALID_LINE_EXISTING_STATION_NAMES(ERROR.getException() + "상행 종점역과 하행 종점역은 지하철 역 목록에 존재해야 합니다.\n"), + INVALID_LINE_SAME_STATION_NAMES(ERROR.getException() + "상행 종점역과 하행 종점역은 서로 달라야 합니다.\n"); private final String exception; diff --git a/src/main/java/subway/view/output/line/LineExceptionView.java b/src/main/java/subway/view/output/line/LineExceptionView.java index ffea982c7..a9083d76a 100644 --- a/src/main/java/subway/view/output/line/LineExceptionView.java +++ b/src/main/java/subway/view/output/line/LineExceptionView.java @@ -17,4 +17,14 @@ public static void printInvalidLineNameLastCharacterException() { System.out.println(); System.out.println(ExceptionType.INVALID_LINE_NAME_LAST_CHARACTER.getException()); } + + public static void printInvalidLineExistingStationNamesException() { + System.out.println(); + System.out.println(ExceptionType.INVALID_LINE_EXISTING_STATION_NAMES.getException()); + } + + public static void printInvalidLineSameStationNamesException() { + System.out.println(); + System.out.println(ExceptionType.INVALID_LINE_SAME_STATION_NAMES.getException()); + } } From a8493d6c62e27090a19ea766756d5cfed4194d19 Mon Sep 17 00:00:00 2001 From: daeun Date: Mon, 14 Dec 2020 03:24:18 +0900 Subject: [PATCH 66/98] style(subway): add a new line MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 개행 문자 추가 --- src/main/java/subway/service/SectionService.java | 6 +++++- src/main/java/subway/service/line/LineService.java | 1 + src/main/java/subway/service/station/StationService.java | 6 +++++- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/main/java/subway/service/SectionService.java b/src/main/java/subway/service/SectionService.java index a4375781b..d79797e27 100644 --- a/src/main/java/subway/service/SectionService.java +++ b/src/main/java/subway/service/SectionService.java @@ -32,7 +32,11 @@ public boolean isInput(String input) { if (input.equals(InputType.INPUT_TWO.getInput())) { return true; } - return input.equals(InputType.INPUT_BACK.getInput()); + if (input.equals(InputType.INPUT_BACK.getInput())) { + System.out.println(); + return true; + } + return false; } @Override diff --git a/src/main/java/subway/service/line/LineService.java b/src/main/java/subway/service/line/LineService.java index 87e75b91f..31bf204ad 100644 --- a/src/main/java/subway/service/line/LineService.java +++ b/src/main/java/subway/service/line/LineService.java @@ -42,6 +42,7 @@ public boolean chooseFeature(String input, Scanner scanner) { return false; } if (input.equals(InputType.INPUT_BACK.getInput())) { + System.out.println(); return true; } return false; diff --git a/src/main/java/subway/service/station/StationService.java b/src/main/java/subway/service/station/StationService.java index 1ba430e44..abcf1a3fe 100644 --- a/src/main/java/subway/service/station/StationService.java +++ b/src/main/java/subway/service/station/StationService.java @@ -40,7 +40,11 @@ public boolean chooseFeature(String input, Scanner scanner) { if (input.equals(InputType.INPUT_THREE.getInput())) { return show(); } - return input.equals(InputType.INPUT_BACK.getInput()); + if (input.equals(InputType.INPUT_BACK.getInput())) { + System.out.println(); + return true; + } + return false; } @Override From 0dab703bc9eb51a9405d12428de6740ba8ef4098 Mon Sep 17 00:00:00 2001 From: daeun Date: Mon, 14 Dec 2020 03:46:08 +0900 Subject: [PATCH 67/98] docs(readme): update README.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 구현할 기능 목록 수정 --- docs/README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/README.md b/docs/README.md index cc0286d85..813194077 100644 --- a/docs/README.md +++ b/docs/README.md @@ -35,7 +35,6 @@ - [x] 상행 종점역과 하행 종점역은 지하철 역에 존재해야 한다. `예외` - [x] 상행 종점역과 하행 종점역은 달라야 한다. `예외` - [ ] 지하철 노선을 삭제한다. - - [ ] 지하철 노선이 지하철 노선도에 등록된 경우 삭제할 수 없다. `예외` - [ ] 삭제할 노선이 없는 경우 삭제할 수 없다. `예외` - [ ] 지하철 노선의 목록을 조회한다. From b421b15244418236ad5c69e30e569621c8e6b32c Mon Sep 17 00:00:00 2001 From: daeun Date: Mon, 14 Dec 2020 04:14:43 +0900 Subject: [PATCH 68/98] feat(line-service): delete a line MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - [지하철 노선] 지하철 노선을 삭제하는 기능 구현 - [지하철 노선] 삭제할 노선이 없는 경우 예외 처리하는 기능 구현 --- docs/README.md | 4 ++-- .../repository/TransitMapRepository.java | 14 ++++++++----- .../service/line/LineNameDeletionService.java | 21 +++++++++++++++++++ .../line/LineNameDeletionValidation.java | 16 ++++++++++++++ .../java/subway/service/line/LineService.java | 16 ++++++++++++-- src/main/java/subway/type/ExceptionType.java | 3 ++- .../java/subway/type/InformationType.java | 3 ++- src/main/java/subway/type/TextType.java | 1 + .../view/output/line/LineExceptionView.java | 5 +++++ .../view/output/line/LineInformationView.java | 5 +++++ .../subway/view/output/line/LineTextView.java | 5 +++++ 11 files changed, 82 insertions(+), 11 deletions(-) create mode 100644 src/main/java/subway/service/line/LineNameDeletionService.java create mode 100644 src/main/java/subway/service/line/LineNameDeletionValidation.java diff --git a/docs/README.md b/docs/README.md index 813194077..5a54579ae 100644 --- a/docs/README.md +++ b/docs/README.md @@ -34,8 +34,8 @@ - [x] 지하철 노선을 등록할 때 상행 종점역과 하행 종점역을 입력한다. - [x] 상행 종점역과 하행 종점역은 지하철 역에 존재해야 한다. `예외` - [x] 상행 종점역과 하행 종점역은 달라야 한다. `예외` -- [ ] 지하철 노선을 삭제한다. - - [ ] 삭제할 노선이 없는 경우 삭제할 수 없다. `예외` +- [x] 지하철 노선을 삭제한다. + - [x] 삭제할 노선이 없는 경우 삭제할 수 없다. `예외` - [ ] 지하철 노선의 목록을 조회한다. ### 지하철 구간 diff --git a/src/main/java/subway/repository/TransitMapRepository.java b/src/main/java/subway/repository/TransitMapRepository.java index 8d7d6515f..758a58f80 100644 --- a/src/main/java/subway/repository/TransitMapRepository.java +++ b/src/main/java/subway/repository/TransitMapRepository.java @@ -7,12 +7,20 @@ import java.util.*; public class TransitMapRepository { - private static final Map> transitMaps = new LinkedHashMap<>(); + private static Map> transitMaps = new LinkedHashMap<>(); public static Map> transitMaps() { return Collections.unmodifiableMap(transitMaps); } + public static void addTransitMap(TransitMap transitMap) { + transitMaps.put(transitMap.getTransitMapLine(), transitMap.getTransitMapStations()); + } + + public static void deleteTransitMap(Line line) { + transitMaps.remove(line); + } + public static List> transitMapsStationNames() { List> transitMapsStationNames = new ArrayList<>(); @@ -27,8 +35,4 @@ public static List> transitMapsStationNames() { } return transitMapsStationNames; } - - public static void addTransitMap(TransitMap transitMap) { - transitMaps.put(transitMap.getTransitMapLine(), transitMap.getTransitMapStations()); - } } diff --git a/src/main/java/subway/service/line/LineNameDeletionService.java b/src/main/java/subway/service/line/LineNameDeletionService.java new file mode 100644 index 000000000..833c960fe --- /dev/null +++ b/src/main/java/subway/service/line/LineNameDeletionService.java @@ -0,0 +1,21 @@ +package subway.service.line; + +import subway.domain.Line; +import subway.repository.LineRepository; +import subway.repository.TransitMapRepository; + +import java.util.List; + +public class LineNameDeletionService { + public static void deleteLineName(String lineName) { + List lines = LineRepository.lines(); + + for (Line lineForDeletion : lines) { + String lineNameForDeletion = lineForDeletion.getName(); + + if (lineNameForDeletion.equals(lineName)) { + TransitMapRepository.deleteTransitMap(lineForDeletion); + } + } + } +} diff --git a/src/main/java/subway/service/line/LineNameDeletionValidation.java b/src/main/java/subway/service/line/LineNameDeletionValidation.java new file mode 100644 index 000000000..1e32620de --- /dev/null +++ b/src/main/java/subway/service/line/LineNameDeletionValidation.java @@ -0,0 +1,16 @@ +package subway.service.line; + +import subway.repository.LineRepository; +import subway.service.station.StationNameDeletionValidation; +import subway.view.output.line.LineExceptionView; + +public class LineNameDeletionValidation extends StationNameDeletionValidation { + @Override + public boolean checkDeletionValidation(String lineName) { + if (!LineRepository.deleteLineByName(lineName)) { + LineExceptionView.printInvalidLineNameExistenceException(); + return false; + } + return true; + } +} diff --git a/src/main/java/subway/service/line/LineService.java b/src/main/java/subway/service/line/LineService.java index 31bf204ad..f2117f2e6 100644 --- a/src/main/java/subway/service/line/LineService.java +++ b/src/main/java/subway/service/line/LineService.java @@ -8,6 +8,8 @@ import subway.service.abstraction.feature.FeatureInterface; import subway.type.InputType; import subway.view.output.ScreenView; +import subway.view.output.line.LineInformationView; +import subway.view.output.line.LineTextView; import java.util.LinkedList; import java.util.Scanner; @@ -34,8 +36,7 @@ public boolean chooseFeature(String input, Scanner scanner) { return add(scanner); } if (input.equals(InputType.INPUT_TWO.getInput())) { - // TODO: 노선 삭제 기능 구현 - return false; + return delete(scanner); } if (input.equals(InputType.INPUT_THREE.getInput())) { // TODO: 노선 조회 기능 구현 @@ -69,6 +70,17 @@ public boolean add(Scanner scanner) { @Override public boolean delete(Scanner scanner) { + LineNameDeletionValidation lineNameDeletionValidation = new LineNameDeletionValidation(); + + LineTextView.printLineDeletionText(); + String lineName = scanner.nextLine(); + + if (lineNameDeletionValidation.checkDeletionValidation(lineName)) { + LineNameDeletionService.deleteLineName(lineName); + LineInformationView.printLineDeletionInformation(); + System.out.println(); + return true; + } return false; } diff --git a/src/main/java/subway/type/ExceptionType.java b/src/main/java/subway/type/ExceptionType.java index 9c6c20efb..4d5ab59a0 100644 --- a/src/main/java/subway/type/ExceptionType.java +++ b/src/main/java/subway/type/ExceptionType.java @@ -12,7 +12,8 @@ public enum ExceptionType { INVALID_LINE_NAME_LENGTH(ERROR.getException() + "2글자 이상의 노선 이름을 입력해주세요.\n"), INVALID_LINE_NAME_LAST_CHARACTER(ERROR.getException() + "'선'으로 끝나는 노선 이름을 입력해주세요.\n"), INVALID_LINE_EXISTING_STATION_NAMES(ERROR.getException() + "상행 종점역과 하행 종점역은 지하철 역 목록에 존재해야 합니다.\n"), - INVALID_LINE_SAME_STATION_NAMES(ERROR.getException() + "상행 종점역과 하행 종점역은 서로 달라야 합니다.\n"); + INVALID_LINE_SAME_STATION_NAMES(ERROR.getException() + "상행 종점역과 하행 종점역은 서로 달라야 합니다.\n"), + INVALID_LINE_NAME_EXISTENCE(ERROR.getException() + "해당 노선이 존재하지 않습니다.\n"); private final String exception; diff --git a/src/main/java/subway/type/InformationType.java b/src/main/java/subway/type/InformationType.java index a7d9ffdcb..e4f7ed887 100644 --- a/src/main/java/subway/type/InformationType.java +++ b/src/main/java/subway/type/InformationType.java @@ -4,7 +4,8 @@ public enum InformationType { INFORMATION("[INFO] "), STATION_ADDING_INFORMATION(INFORMATION.getInformation() + "지하철 역이 등록되었습니다."), STATION_DELETION_INFORMATION(INFORMATION.getInformation() + "지하철 역이 삭제되었습니다."), - LINE_ADDING_INFORMATION(INFORMATION.getInformation() + "지하철 노선이 등록되었습니다."); + LINE_ADDING_INFORMATION(INFORMATION.getInformation() + "지하철 노선이 등록되었습니다."), + LINE_DELETION_INFORMATION(INFORMATION.getInformation() + "지하철 노선이 삭제되었습니다."); private final String information; diff --git a/src/main/java/subway/type/TextType.java b/src/main/java/subway/type/TextType.java index 05451dc20..6fe038719 100644 --- a/src/main/java/subway/type/TextType.java +++ b/src/main/java/subway/type/TextType.java @@ -9,6 +9,7 @@ public enum TextType { LINE_ADDING_TEXT("## 등록할 노선 이름을 입력하세요."), LINE_UP_STATION_NAME_TEXT("## 등록할 노선의 상행 종점역 이름을 입력하세요."), LINE_DOWN_STATION_NAME_TEXT("## 등록할 노선의 하행 종점역 이름을 입력하세요."), + LINE_DELETION_TEXT("## 삭제할 노선 이름을 입력하세요."), TRANSIT_MAP_TEXT("## 지하철 노선도"); private final String text; diff --git a/src/main/java/subway/view/output/line/LineExceptionView.java b/src/main/java/subway/view/output/line/LineExceptionView.java index a9083d76a..a686835e2 100644 --- a/src/main/java/subway/view/output/line/LineExceptionView.java +++ b/src/main/java/subway/view/output/line/LineExceptionView.java @@ -27,4 +27,9 @@ public static void printInvalidLineSameStationNamesException() { System.out.println(); System.out.println(ExceptionType.INVALID_LINE_SAME_STATION_NAMES.getException()); } + + public static void printInvalidLineNameExistenceException() { + System.out.println(); + System.out.println(ExceptionType.INVALID_LINE_NAME_EXISTENCE.getException()); + } } diff --git a/src/main/java/subway/view/output/line/LineInformationView.java b/src/main/java/subway/view/output/line/LineInformationView.java index d968f134b..76e849820 100644 --- a/src/main/java/subway/view/output/line/LineInformationView.java +++ b/src/main/java/subway/view/output/line/LineInformationView.java @@ -7,4 +7,9 @@ public static void printLineAddingInformation() { System.out.println(); System.out.println(InformationType.LINE_ADDING_INFORMATION.getInformation()); } + + public static void printLineDeletionInformation() { + System.out.println(); + System.out.println(InformationType.LINE_DELETION_INFORMATION.getInformation()); + } } diff --git a/src/main/java/subway/view/output/line/LineTextView.java b/src/main/java/subway/view/output/line/LineTextView.java index 7da402adb..0d080438f 100644 --- a/src/main/java/subway/view/output/line/LineTextView.java +++ b/src/main/java/subway/view/output/line/LineTextView.java @@ -17,4 +17,9 @@ public static void printLineDownStationNameText() { System.out.println(); System.out.println(TextType.LINE_DOWN_STATION_NAME_TEXT.getText()); } + + public static void printLineDeletionText() { + System.out.println(); + System.out.println(TextType.LINE_DELETION_TEXT.getText()); + } } From 4cfd145ef0cf1535f1fe0f40f435aff2dce78ae9 Mon Sep 17 00:00:00 2001 From: daeun Date: Mon, 14 Dec 2020 04:20:17 +0900 Subject: [PATCH 69/98] feat(line-service): show the line name MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - [지하철 노선] 지하철 노선의 목록을 조회하는 기능 구현 --- docs/README.md | 2 +- .../subway/service/line/LineNameService.java | 27 +++++++++++++++++++ .../java/subway/service/line/LineService.java | 11 +++++--- src/main/java/subway/type/TextType.java | 1 + 4 files changed, 37 insertions(+), 4 deletions(-) create mode 100644 src/main/java/subway/service/line/LineNameService.java diff --git a/docs/README.md b/docs/README.md index 5a54579ae..ea7531e3e 100644 --- a/docs/README.md +++ b/docs/README.md @@ -36,7 +36,7 @@ - [x] 상행 종점역과 하행 종점역은 달라야 한다. `예외` - [x] 지하철 노선을 삭제한다. - [x] 삭제할 노선이 없는 경우 삭제할 수 없다. `예외` -- [ ] 지하철 노선의 목록을 조회한다. +- [x] 지하철 노선의 목록을 조회한다. ### 지하철 구간 - [ ] 지하철 구간을 추가한다. diff --git a/src/main/java/subway/service/line/LineNameService.java b/src/main/java/subway/service/line/LineNameService.java new file mode 100644 index 000000000..7f81201f6 --- /dev/null +++ b/src/main/java/subway/service/line/LineNameService.java @@ -0,0 +1,27 @@ +package subway.service.line; + +import subway.type.InformationType; +import subway.type.TextType; + +import java.util.List; + +public class LineNameService { + public static void readLineNames(StringBuilder stringBuilder, List lineNames) { + appendLineNameText(stringBuilder); + appendLineNames(stringBuilder, lineNames); + } + + public static void appendLineNameText(StringBuilder stringBuilder) { + stringBuilder.append(TextType.NEW_LINE.getText()) + .append(TextType.LINE_NAME_TEXT.getText()) + .append(TextType.NEW_LINE.getText()); + } + + public static void appendLineNames(StringBuilder stringBuilder, List lineNames) { + for (String lineName : lineNames) { + stringBuilder.append(InformationType.INFORMATION.getInformation()) + .append(lineName) + .append(TextType.NEW_LINE.getText()); + } + } +} diff --git a/src/main/java/subway/service/line/LineService.java b/src/main/java/subway/service/line/LineService.java index f2117f2e6..4fb2a4748 100644 --- a/src/main/java/subway/service/line/LineService.java +++ b/src/main/java/subway/service/line/LineService.java @@ -12,6 +12,7 @@ import subway.view.output.line.LineTextView; import java.util.LinkedList; +import java.util.List; import java.util.Scanner; public class LineService implements FeatureChoiceInterface, FeatureInterface { @@ -39,8 +40,7 @@ public boolean chooseFeature(String input, Scanner scanner) { return delete(scanner); } if (input.equals(InputType.INPUT_THREE.getInput())) { - // TODO: 노선 조회 기능 구현 - return false; + return show(); } if (input.equals(InputType.INPUT_BACK.getInput())) { System.out.println(); @@ -86,6 +86,11 @@ public boolean delete(Scanner scanner) { @Override public boolean show() { - return false; + StringBuilder stringBuilder = new StringBuilder(); + List lineNames = LineRepository.lineNames(); + + LineNameService.readLineNames(stringBuilder, lineNames); + System.out.println(stringBuilder); + return true; } } diff --git a/src/main/java/subway/type/TextType.java b/src/main/java/subway/type/TextType.java index 6fe038719..f4503771d 100644 --- a/src/main/java/subway/type/TextType.java +++ b/src/main/java/subway/type/TextType.java @@ -10,6 +10,7 @@ public enum TextType { LINE_UP_STATION_NAME_TEXT("## 등록할 노선의 상행 종점역 이름을 입력하세요."), LINE_DOWN_STATION_NAME_TEXT("## 등록할 노선의 하행 종점역 이름을 입력하세요."), LINE_DELETION_TEXT("## 삭제할 노선 이름을 입력하세요."), + LINE_NAME_TEXT("## 노선 목록"), TRANSIT_MAP_TEXT("## 지하철 노선도"); private final String text; From 3277f942e9f199f9d41f4ca4d50dd068fd924754 Mon Sep 17 00:00:00 2001 From: daeun Date: Mon, 14 Dec 2020 04:22:55 +0900 Subject: [PATCH 70/98] style(subway): modify the code format MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 코드 형식 수정 --- src/main/java/subway/service/station/StationService.java | 4 ++-- src/main/java/subway/type/BoundaryType.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/subway/service/station/StationService.java b/src/main/java/subway/service/station/StationService.java index abcf1a3fe..767d07acd 100644 --- a/src/main/java/subway/service/station/StationService.java +++ b/src/main/java/subway/service/station/StationService.java @@ -65,12 +65,12 @@ public boolean add(Scanner scanner) { @Override public boolean delete(Scanner scanner) { - StationNameDeletionValidation nameDeletionValidation = new StationNameDeletionValidation(); + StationNameDeletionValidation stationNameDeletionValidation = new StationNameDeletionValidation(); StationTextView.printStationDeletionText(); String stationName = scanner.nextLine(); - if (nameDeletionValidation.checkDeletionValidation(stationName)) { + if (stationNameDeletionValidation.checkDeletionValidation(stationName)) { StationInformationView.printStationDeletionInformation(); System.out.println(); return true; diff --git a/src/main/java/subway/type/BoundaryType.java b/src/main/java/subway/type/BoundaryType.java index 80347455c..b14f7aa3e 100644 --- a/src/main/java/subway/type/BoundaryType.java +++ b/src/main/java/subway/type/BoundaryType.java @@ -1,6 +1,6 @@ package subway.type; -public enum BoundaryType { +public enum BoundaryType { NAME_LENGTH_BOUNDARY(2); private final int boundary; From 37776ce18eaf44102ae3a5c00ab3cd4b8e932117 Mon Sep 17 00:00:00 2001 From: daeun Date: Mon, 14 Dec 2020 04:56:59 +0900 Subject: [PATCH 71/98] fix(line-service): delete a line MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - [지하철 노선] 지하철 노선을 삭제하는 기능 수정 - [지하철 노선도] 지하철 노선이 삭제되지 않는 문제 해결 --- .../repository/TransitMapRepository.java | 2 +- .../service/line/LineNameDeletionService.java | 20 +++++++++++++------ .../java/subway/service/line/LineService.java | 7 ++++--- 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/src/main/java/subway/repository/TransitMapRepository.java b/src/main/java/subway/repository/TransitMapRepository.java index 758a58f80..141b0e31c 100644 --- a/src/main/java/subway/repository/TransitMapRepository.java +++ b/src/main/java/subway/repository/TransitMapRepository.java @@ -7,7 +7,7 @@ import java.util.*; public class TransitMapRepository { - private static Map> transitMaps = new LinkedHashMap<>(); + private static final Map> transitMaps = new LinkedHashMap<>(); public static Map> transitMaps() { return Collections.unmodifiableMap(transitMaps); diff --git a/src/main/java/subway/service/line/LineNameDeletionService.java b/src/main/java/subway/service/line/LineNameDeletionService.java index 833c960fe..c297cda48 100644 --- a/src/main/java/subway/service/line/LineNameDeletionService.java +++ b/src/main/java/subway/service/line/LineNameDeletionService.java @@ -3,19 +3,27 @@ import subway.domain.Line; import subway.repository.LineRepository; import subway.repository.TransitMapRepository; +import subway.view.output.line.LineInformationView; import java.util.List; public class LineNameDeletionService { - public static void deleteLineName(String lineName) { + public static Line getLineForDeletion(String lineName) { + Line lineForDeletion = new Line(lineName); List lines = LineRepository.lines(); - for (Line lineForDeletion : lines) { - String lineNameForDeletion = lineForDeletion.getName(); - - if (lineNameForDeletion.equals(lineName)) { - TransitMapRepository.deleteTransitMap(lineForDeletion); + for (Line line : lines) { + if (line.getName().equals(lineName)) { + lineForDeletion = line; + break; } } + return lineForDeletion; + } + + public static void deleteName(Line lineForDeletion) { + TransitMapRepository.deleteTransitMap(lineForDeletion); + LineInformationView.printLineDeletionInformation(); + System.out.println(); } } diff --git a/src/main/java/subway/service/line/LineService.java b/src/main/java/subway/service/line/LineService.java index 4fb2a4748..fe518ffcc 100644 --- a/src/main/java/subway/service/line/LineService.java +++ b/src/main/java/subway/service/line/LineService.java @@ -71,14 +71,15 @@ public boolean add(Scanner scanner) { @Override public boolean delete(Scanner scanner) { LineNameDeletionValidation lineNameDeletionValidation = new LineNameDeletionValidation(); + List lines = LineRepository.lines(); LineTextView.printLineDeletionText(); String lineName = scanner.nextLine(); + Line lineForDeletion = LineNameDeletionService.getLineForDeletion(lineName); + if (lineNameDeletionValidation.checkDeletionValidation(lineName)) { - LineNameDeletionService.deleteLineName(lineName); - LineInformationView.printLineDeletionInformation(); - System.out.println(); + LineNameDeletionService.deleteName(lineForDeletion); return true; } return false; From 82b212f19a9b4039757fb60cf4dddf579de97f48 Mon Sep 17 00:00:00 2001 From: daeun Date: Mon, 14 Dec 2020 05:11:55 +0900 Subject: [PATCH 72/98] style(section): change the function position MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 함수 위치 변경 --- .../subway/controller/SectionController.java | 2 +- .../service/section/SectionInputService.java | 17 +++++++++++++ .../service/{ => section}/SectionService.java | 25 +++++-------------- 3 files changed, 24 insertions(+), 20 deletions(-) create mode 100644 src/main/java/subway/service/section/SectionInputService.java rename src/main/java/subway/service/{ => section}/SectionService.java (69%) diff --git a/src/main/java/subway/controller/SectionController.java b/src/main/java/subway/controller/SectionController.java index d5648075d..74415ab19 100644 --- a/src/main/java/subway/controller/SectionController.java +++ b/src/main/java/subway/controller/SectionController.java @@ -1,6 +1,6 @@ package subway.controller; -import subway.service.SectionService; +import subway.service.section.SectionService; import java.util.Scanner; diff --git a/src/main/java/subway/service/section/SectionInputService.java b/src/main/java/subway/service/section/SectionInputService.java new file mode 100644 index 000000000..b2652c797 --- /dev/null +++ b/src/main/java/subway/service/section/SectionInputService.java @@ -0,0 +1,17 @@ +package subway.service.section; + +import subway.service.abstraction.input.InputInterface; +import subway.type.InputType; + +public class SectionInputService implements InputInterface { + @Override + public boolean isInput(String input) { + if (input.equals(InputType.INPUT_ONE.getInput())) { + return true; + } + if (input.equals(InputType.INPUT_TWO.getInput())) { + return true; + } + return input.equals(InputType.INPUT_BACK.getInput()); + } +} diff --git a/src/main/java/subway/service/SectionService.java b/src/main/java/subway/service/section/SectionService.java similarity index 69% rename from src/main/java/subway/service/SectionService.java rename to src/main/java/subway/service/section/SectionService.java index d79797e27..827007d9c 100644 --- a/src/main/java/subway/service/SectionService.java +++ b/src/main/java/subway/service/section/SectionService.java @@ -1,6 +1,5 @@ -package subway.service; +package subway.service.section; -import subway.service.abstraction.input.InputInterface; import subway.service.station.StationService; import subway.type.InputType; import subway.view.output.ExceptionView; @@ -8,15 +7,17 @@ import java.util.Scanner; -public class SectionService extends StationService implements InputInterface { +public class SectionService extends StationService { public static void manageSection(Scanner scanner) { SectionService sectionService = new SectionService(); + SectionInputService sectionInputService = new SectionInputService(); System.out.println(); while (true) { ScreenView.printSectionManagementScreen(); String sectionInput = scanner.nextLine(); - if (sectionService.isInput(sectionInput)) { + + if (sectionInputService.isInput(sectionInput)) { sectionService.chooseFeature(sectionInput, scanner); break; } @@ -24,21 +25,6 @@ public static void manageSection(Scanner scanner) { } } - @Override - public boolean isInput(String input) { - if (input.equals(InputType.INPUT_ONE.getInput())) { - return true; - } - if (input.equals(InputType.INPUT_TWO.getInput())) { - return true; - } - if (input.equals(InputType.INPUT_BACK.getInput())) { - System.out.println(); - return true; - } - return false; - } - @Override public boolean chooseFeature(String input, Scanner scanner) { if (input.equals(InputType.INPUT_ONE.getInput())) { @@ -50,6 +36,7 @@ public boolean chooseFeature(String input, Scanner scanner) { return false; } if (input.equals(InputType.INPUT_BACK.getInput())) { + System.out.println(); return true; } return false; From 1d5cc9ffacfff40151eb8f5c676d888fed5b3676 Mon Sep 17 00:00:00 2001 From: daeun Date: Mon, 14 Dec 2020 05:22:41 +0900 Subject: [PATCH 73/98] feat(section-service): organize the skeleton MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - [지하철 구간] 지하철 구간을 추가하는 기능 골격 구성 - [지하철 구간] 지하철 구간을 삭제하는 기능 골격 구성 --- .../service/section/SectionService.java | 23 ++++++++++---- src/main/java/subway/type/TextType.java | 5 ++++ .../view/output/section/SectionTextView.java | 30 +++++++++++++++++++ 3 files changed, 52 insertions(+), 6 deletions(-) create mode 100644 src/main/java/subway/view/output/section/SectionTextView.java diff --git a/src/main/java/subway/service/section/SectionService.java b/src/main/java/subway/service/section/SectionService.java index 827007d9c..9dbdd66fe 100644 --- a/src/main/java/subway/service/section/SectionService.java +++ b/src/main/java/subway/service/section/SectionService.java @@ -4,6 +4,7 @@ import subway.type.InputType; import subway.view.output.ExceptionView; import subway.view.output.ScreenView; +import subway.view.output.section.SectionTextView; import java.util.Scanner; @@ -28,12 +29,10 @@ public static void manageSection(Scanner scanner) { @Override public boolean chooseFeature(String input, Scanner scanner) { if (input.equals(InputType.INPUT_ONE.getInput())) { - // TODO: 구간 등록 기능 구현 - return false; + return add(scanner); } if (input.equals(InputType.INPUT_TWO.getInput())) { - // TODO: 구간 삭제 기능 구현 - return false; + return delete(scanner); } if (input.equals(InputType.INPUT_BACK.getInput())) { System.out.println(); @@ -44,11 +43,23 @@ public boolean chooseFeature(String input, Scanner scanner) { @Override public boolean add(Scanner scanner) { - return false; + SectionTextView.printSectionAddingLineText(); + String lineName = scanner.nextLine(); + SectionTextView.printSectionAddingStationText(); + String stationName = scanner.nextLine(); + SectionTextView.printSectionAddingOrderText(); + String order = scanner.nextLine(); + + return true; } @Override public boolean delete(Scanner scanner) { - return false; + SectionTextView.printSectionDeletionLineText(); + String lineName = scanner.nextLine(); + SectionTextView.printSectionDeletionStationText(); + String stationName = scanner.nextLine(); + + return true; } } diff --git a/src/main/java/subway/type/TextType.java b/src/main/java/subway/type/TextType.java index f4503771d..36404627f 100644 --- a/src/main/java/subway/type/TextType.java +++ b/src/main/java/subway/type/TextType.java @@ -11,6 +11,11 @@ public enum TextType { LINE_DOWN_STATION_NAME_TEXT("## 등록할 노선의 하행 종점역 이름을 입력하세요."), LINE_DELETION_TEXT("## 삭제할 노선 이름을 입력하세요."), LINE_NAME_TEXT("## 노선 목록"), + SECTION_ADDING_LINE_TEXT("## 노선을 입력하세요."), + SECTION_ADDING_STATION_TEXT("## 역이름을 입력하세요."), + SECTION_ADDING_ORDER_TEXT("## 순서를 입력하세요."), + SECTION_DELETION_LINE_TEXT("## 삭제할 구간의 노선을 입력하세요."), + SECTION_DELETION_STATION_TEXT("## 삭제할 구간의 역을 입력하세요."), TRANSIT_MAP_TEXT("## 지하철 노선도"); private final String text; diff --git a/src/main/java/subway/view/output/section/SectionTextView.java b/src/main/java/subway/view/output/section/SectionTextView.java new file mode 100644 index 000000000..e0cbb5069 --- /dev/null +++ b/src/main/java/subway/view/output/section/SectionTextView.java @@ -0,0 +1,30 @@ +package subway.view.output.section; + +import subway.type.TextType; + +public class SectionTextView { + public static void printSectionAddingLineText() { + System.out.println(); + System.out.println(TextType.SECTION_ADDING_LINE_TEXT.getText()); + } + + public static void printSectionAddingStationText() { + System.out.println(); + System.out.println(TextType.SECTION_ADDING_STATION_TEXT.getText()); + } + + public static void printSectionAddingOrderText() { + System.out.println(); + System.out.println(TextType.SECTION_ADDING_ORDER_TEXT.getText()); + } + + public static void printSectionDeletionLineText() { + System.out.println(); + System.out.println(TextType.SECTION_DELETION_LINE_TEXT.getText()); + } + + public static void printSectionDeletionStationText() { + System.out.println(); + System.out.println(TextType.SECTION_DELETION_STATION_TEXT.getText()); + } +} From 500f257257f4c6bb6099044939678def08b6295e Mon Sep 17 00:00:00 2001 From: daeun Date: Mon, 14 Dec 2020 16:49:59 +0900 Subject: [PATCH 74/98] docs(readme): update README.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 구현할 기능 목록 수정 --- docs/README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/README.md b/docs/README.md index ea7531e3e..90d2e573d 100644 --- a/docs/README.md +++ b/docs/README.md @@ -42,8 +42,12 @@ - [ ] 지하철 구간을 추가한다. - [ ] 하나의 역은 여러 개의 노선에 추가될 수 있다. - [ ] 새로운 역은 역과 역 사이에 추가될 수 있다. + - [ ] 새로운 역을 삽입할 노선을 입력한다. + - [ ] 삽입할 노선이 없는 경우 삽입할 수 없다. `예외` + - [ ] 새로운 역의 이름을 입력한다. + - [ ] 해당 역이 없는 경우 삽입할 수 없다. `예외` - [ ] 새로운 역의 삽입 순서를 입력한다. - - [ ] 삽입 순서는 음수일 수 없다. `예외` + - [ ] 삽입 순서는 음수 또는 0일 수 없다. `예외` - [ ] 삽입 순서는 문자일 수 없다. `예외` - [ ] 삽입 순서는 노선의 길이보다 작거나 같은 수이어야 한다. `예외` - [ ] 지하철 노선에 갈래길은 생길 수 없다. From d7297e158c9817abc0505c0d78ecdb4edb9d16ca Mon Sep 17 00:00:00 2001 From: daeun Date: Mon, 14 Dec 2020 18:50:21 +0900 Subject: [PATCH 75/98] refactor(subway): rename functions, classes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 함수명 변경 - 클래스명 변경 --- ...ingService.java => LineAddingService.java} | 2 +- ...idation.java => LineAddingValidation.java} | 2 +- ...nService.java => LineDeletionService.java} | 2 +- ...ation.java => LineDeletionValidation.java} | 4 ++-- .../subway/service/line/LineNameService.java | 16 ++++++++----- .../java/subway/service/line/LineService.java | 23 ++++++++++--------- ...tion.java => StationAddingValidation.java} | 2 +- ...on.java => StationDeletionValidation.java} | 2 +- .../service/station/StationNameService.java | 10 ++++---- .../service/station/StationService.java | 8 ++++--- 10 files changed, 39 insertions(+), 32 deletions(-) rename src/main/java/subway/service/line/{LineNameAddingService.java => LineAddingService.java} (97%) rename src/main/java/subway/service/line/{LineNameAddingValidation.java => LineAddingValidation.java} (96%) rename src/main/java/subway/service/line/{LineNameDeletionService.java => LineDeletionService.java} (95%) rename src/main/java/subway/service/line/{LineNameDeletionValidation.java => LineDeletionValidation.java} (73%) rename src/main/java/subway/service/station/{StationNameAddingValidation.java => StationAddingValidation.java} (94%) rename src/main/java/subway/service/station/{StationNameDeletionValidation.java => StationDeletionValidation.java} (93%) diff --git a/src/main/java/subway/service/line/LineNameAddingService.java b/src/main/java/subway/service/line/LineAddingService.java similarity index 97% rename from src/main/java/subway/service/line/LineNameAddingService.java rename to src/main/java/subway/service/line/LineAddingService.java index 92284b888..61c46f217 100644 --- a/src/main/java/subway/service/line/LineNameAddingService.java +++ b/src/main/java/subway/service/line/LineAddingService.java @@ -11,7 +11,7 @@ import java.util.LinkedList; import java.util.Scanner; -public class LineNameAddingService { +public class LineAddingService { public static String scanLineName(Scanner scanner) { LineTextView.printLineAddingText(); return scanner.nextLine(); diff --git a/src/main/java/subway/service/line/LineNameAddingValidation.java b/src/main/java/subway/service/line/LineAddingValidation.java similarity index 96% rename from src/main/java/subway/service/line/LineNameAddingValidation.java rename to src/main/java/subway/service/line/LineAddingValidation.java index 340acb78c..a39b25d7c 100644 --- a/src/main/java/subway/service/line/LineNameAddingValidation.java +++ b/src/main/java/subway/service/line/LineAddingValidation.java @@ -9,7 +9,7 @@ import java.util.List; -public class LineNameAddingValidation implements NameAddingValidationInterface { +public class LineAddingValidation implements NameAddingValidationInterface { @Override public boolean checkNameDuplication(String lineName) { List lineNames = LineRepository.lineNames(); diff --git a/src/main/java/subway/service/line/LineNameDeletionService.java b/src/main/java/subway/service/line/LineDeletionService.java similarity index 95% rename from src/main/java/subway/service/line/LineNameDeletionService.java rename to src/main/java/subway/service/line/LineDeletionService.java index c297cda48..ed48278c8 100644 --- a/src/main/java/subway/service/line/LineNameDeletionService.java +++ b/src/main/java/subway/service/line/LineDeletionService.java @@ -7,7 +7,7 @@ import java.util.List; -public class LineNameDeletionService { +public class LineDeletionService { public static Line getLineForDeletion(String lineName) { Line lineForDeletion = new Line(lineName); List lines = LineRepository.lines(); diff --git a/src/main/java/subway/service/line/LineNameDeletionValidation.java b/src/main/java/subway/service/line/LineDeletionValidation.java similarity index 73% rename from src/main/java/subway/service/line/LineNameDeletionValidation.java rename to src/main/java/subway/service/line/LineDeletionValidation.java index 1e32620de..4b8709c9a 100644 --- a/src/main/java/subway/service/line/LineNameDeletionValidation.java +++ b/src/main/java/subway/service/line/LineDeletionValidation.java @@ -1,10 +1,10 @@ package subway.service.line; import subway.repository.LineRepository; -import subway.service.station.StationNameDeletionValidation; +import subway.service.station.StationDeletionValidation; import subway.view.output.line.LineExceptionView; -public class LineNameDeletionValidation extends StationNameDeletionValidation { +public class LineDeletionValidation extends StationDeletionValidation { @Override public boolean checkDeletionValidation(String lineName) { if (!LineRepository.deleteLineByName(lineName)) { diff --git a/src/main/java/subway/service/line/LineNameService.java b/src/main/java/subway/service/line/LineNameService.java index 7f81201f6..60b12a0cf 100644 --- a/src/main/java/subway/service/line/LineNameService.java +++ b/src/main/java/subway/service/line/LineNameService.java @@ -1,23 +1,27 @@ package subway.service.line; +import subway.service.station.StationNameService; import subway.type.InformationType; import subway.type.TextType; import java.util.List; -public class LineNameService { - public static void readLineNames(StringBuilder stringBuilder, List lineNames) { - appendLineNameText(stringBuilder); - appendLineNames(stringBuilder, lineNames); +public class LineNameService extends StationNameService { + @Override + public void readNames(StringBuilder stringBuilder, List lineNames) { + appendNameText(stringBuilder); + appendNames(stringBuilder, lineNames); } - public static void appendLineNameText(StringBuilder stringBuilder) { + @Override + public void appendNameText(StringBuilder stringBuilder) { stringBuilder.append(TextType.NEW_LINE.getText()) .append(TextType.LINE_NAME_TEXT.getText()) .append(TextType.NEW_LINE.getText()); } - public static void appendLineNames(StringBuilder stringBuilder, List lineNames) { + @Override + public void appendNames(StringBuilder stringBuilder, List lineNames) { for (String lineName : lineNames) { stringBuilder.append(InformationType.INFORMATION.getInformation()) .append(lineName) diff --git a/src/main/java/subway/service/line/LineService.java b/src/main/java/subway/service/line/LineService.java index fe518ffcc..59654f520 100644 --- a/src/main/java/subway/service/line/LineService.java +++ b/src/main/java/subway/service/line/LineService.java @@ -8,7 +8,6 @@ import subway.service.abstraction.feature.FeatureInterface; import subway.type.InputType; import subway.view.output.ScreenView; -import subway.view.output.line.LineInformationView; import subway.view.output.line.LineTextView; import java.util.LinkedList; @@ -51,35 +50,35 @@ public boolean chooseFeature(String input, Scanner scanner) { @Override public boolean add(Scanner scanner) { - LineNameAddingValidation lineNameAddingValidation = new LineNameAddingValidation(); + LineAddingValidation lineNameAddingValidation = new LineAddingValidation(); - String lineName = LineNameAddingService.scanLineName(scanner); + String lineName = LineAddingService.scanLineName(scanner); if (!lineNameAddingValidation.checkAddingValidation(lineName)) { return false; } - String upStationName = LineNameAddingService.scanUpStationName(scanner); - String downStationName = LineNameAddingService.scanDownStationName(scanner); + String upStationName = LineAddingService.scanUpStationName(scanner); + String downStationName = LineAddingService.scanDownStationName(scanner); if (!lineNameAddingValidation.checkStationNamesAddingValidation(upStationName, downStationName)) { return false; } - LinkedList stationNames = LineNameAddingService.addStationNames(upStationName, downStationName); - LineNameAddingService.addNames(lineName, stationNames); + LinkedList stationNames = LineAddingService.addStationNames(upStationName, downStationName); + LineAddingService.addNames(lineName, stationNames); return true; } @Override public boolean delete(Scanner scanner) { - LineNameDeletionValidation lineNameDeletionValidation = new LineNameDeletionValidation(); + LineDeletionValidation lineNameDeletionValidation = new LineDeletionValidation(); List lines = LineRepository.lines(); LineTextView.printLineDeletionText(); String lineName = scanner.nextLine(); - Line lineForDeletion = LineNameDeletionService.getLineForDeletion(lineName); + Line lineForDeletion = LineDeletionService.getLineForDeletion(lineName); if (lineNameDeletionValidation.checkDeletionValidation(lineName)) { - LineNameDeletionService.deleteName(lineForDeletion); + LineDeletionService.deleteName(lineForDeletion); return true; } return false; @@ -87,10 +86,12 @@ public boolean delete(Scanner scanner) { @Override public boolean show() { + LineNameService lineNameService = new LineNameService(); + StringBuilder stringBuilder = new StringBuilder(); List lineNames = LineRepository.lineNames(); - LineNameService.readLineNames(stringBuilder, lineNames); + lineNameService.readNames(stringBuilder, lineNames); System.out.println(stringBuilder); return true; } diff --git a/src/main/java/subway/service/station/StationNameAddingValidation.java b/src/main/java/subway/service/station/StationAddingValidation.java similarity index 94% rename from src/main/java/subway/service/station/StationNameAddingValidation.java rename to src/main/java/subway/service/station/StationAddingValidation.java index e83ae1256..fcced98e5 100644 --- a/src/main/java/subway/service/station/StationNameAddingValidation.java +++ b/src/main/java/subway/service/station/StationAddingValidation.java @@ -8,7 +8,7 @@ import java.util.List; -public class StationNameAddingValidation implements NameAddingValidationInterface { +public class StationAddingValidation implements NameAddingValidationInterface { @Override public boolean checkNameDuplication(String stationName) { List stationNames = StationRepository.stationNames(); diff --git a/src/main/java/subway/service/station/StationNameDeletionValidation.java b/src/main/java/subway/service/station/StationDeletionValidation.java similarity index 93% rename from src/main/java/subway/service/station/StationNameDeletionValidation.java rename to src/main/java/subway/service/station/StationDeletionValidation.java index bf4e4c439..38b1ea65a 100644 --- a/src/main/java/subway/service/station/StationNameDeletionValidation.java +++ b/src/main/java/subway/service/station/StationDeletionValidation.java @@ -8,7 +8,7 @@ import java.util.LinkedList; import java.util.List; -public class StationNameDeletionValidation implements NameDeletionValidationInterface { +public class StationDeletionValidation implements NameDeletionValidationInterface { @Override public boolean checkNameInTransitMap(String stationName) { List> transitMapsStationsNames diff --git a/src/main/java/subway/service/station/StationNameService.java b/src/main/java/subway/service/station/StationNameService.java index 52de3aeb6..4c23f844a 100644 --- a/src/main/java/subway/service/station/StationNameService.java +++ b/src/main/java/subway/service/station/StationNameService.java @@ -6,18 +6,18 @@ import java.util.List; public class StationNameService { - public static void readStationName(StringBuilder stringBuilder, List stationNames) { - appendStationNameText(stringBuilder); - appendStationNames(stringBuilder, stationNames); + public void readNames(StringBuilder stringBuilder, List stationNames) { + appendNameText(stringBuilder); + appendNames(stringBuilder, stationNames); } - public static void appendStationNameText(StringBuilder stringBuilder) { + public void appendNameText(StringBuilder stringBuilder) { stringBuilder.append(TextType.NEW_LINE.getText()) .append(TextType.STATION_NAME_TEXT.getText()) .append(TextType.NEW_LINE.getText()); } - public static void appendStationNames(StringBuilder stringBuilder, List stationNames) { + public void appendNames(StringBuilder stringBuilder, List stationNames) { for (String stationName : stationNames) { stringBuilder.append(InformationType.INFORMATION.getInformation()) .append(stationName) diff --git a/src/main/java/subway/service/station/StationService.java b/src/main/java/subway/service/station/StationService.java index 767d07acd..3886bc985 100644 --- a/src/main/java/subway/service/station/StationService.java +++ b/src/main/java/subway/service/station/StationService.java @@ -49,7 +49,7 @@ public boolean chooseFeature(String input, Scanner scanner) { @Override public boolean add(Scanner scanner) { - StationNameAddingValidation nameAddingValidation = new StationNameAddingValidation(); + StationAddingValidation nameAddingValidation = new StationAddingValidation(); StationTextView.printStationAddingText(); String stationName = scanner.nextLine(); @@ -65,7 +65,7 @@ public boolean add(Scanner scanner) { @Override public boolean delete(Scanner scanner) { - StationNameDeletionValidation stationNameDeletionValidation = new StationNameDeletionValidation(); + StationDeletionValidation stationNameDeletionValidation = new StationDeletionValidation(); StationTextView.printStationDeletionText(); String stationName = scanner.nextLine(); @@ -80,10 +80,12 @@ public boolean delete(Scanner scanner) { @Override public boolean show() { + StationNameService stationNameService = new StationNameService(); + StringBuilder stringBuilder = new StringBuilder(); List stationNames = StationRepository.stationNames(); - StationNameService.readStationName(stringBuilder, stationNames); + stationNameService.readNames(stringBuilder, stationNames); System.out.println(stringBuilder); return true; } From 9cccaf5989a1c9ed4c7464d458bac322525d1a8e Mon Sep 17 00:00:00 2001 From: daeun Date: Mon, 14 Dec 2020 18:51:56 +0900 Subject: [PATCH 76/98] style(feature): change the function position MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 함수 위치 변경 --- .../abstraction/feature/FeatureChoiceInterface.java | 7 ------- .../service/abstraction/feature/FeatureInterface.java | 1 + src/main/java/subway/service/line/LineService.java | 3 +-- src/main/java/subway/service/station/StationService.java | 3 +-- 4 files changed, 3 insertions(+), 11 deletions(-) delete mode 100644 src/main/java/subway/service/abstraction/feature/FeatureChoiceInterface.java diff --git a/src/main/java/subway/service/abstraction/feature/FeatureChoiceInterface.java b/src/main/java/subway/service/abstraction/feature/FeatureChoiceInterface.java deleted file mode 100644 index 9223bab9f..000000000 --- a/src/main/java/subway/service/abstraction/feature/FeatureChoiceInterface.java +++ /dev/null @@ -1,7 +0,0 @@ -package subway.service.abstraction.feature; - -import java.util.Scanner; - -public interface FeatureChoiceInterface { - boolean chooseFeature(String input, Scanner scanner); -} diff --git a/src/main/java/subway/service/abstraction/feature/FeatureInterface.java b/src/main/java/subway/service/abstraction/feature/FeatureInterface.java index c39d850a7..0d4f5354b 100644 --- a/src/main/java/subway/service/abstraction/feature/FeatureInterface.java +++ b/src/main/java/subway/service/abstraction/feature/FeatureInterface.java @@ -3,6 +3,7 @@ import java.util.Scanner; public interface FeatureInterface { + boolean chooseFeature(String input, Scanner scanner); boolean add(Scanner scanner); boolean delete(Scanner scanner); boolean show(); diff --git a/src/main/java/subway/service/line/LineService.java b/src/main/java/subway/service/line/LineService.java index 59654f520..64209d587 100644 --- a/src/main/java/subway/service/line/LineService.java +++ b/src/main/java/subway/service/line/LineService.java @@ -4,7 +4,6 @@ import subway.domain.Station; import subway.repository.LineRepository; import subway.service.InputService; -import subway.service.abstraction.feature.FeatureChoiceInterface; import subway.service.abstraction.feature.FeatureInterface; import subway.type.InputType; import subway.view.output.ScreenView; @@ -14,7 +13,7 @@ import java.util.List; import java.util.Scanner; -public class LineService implements FeatureChoiceInterface, FeatureInterface { +public class LineService implements FeatureInterface { public static void manageLine(Scanner scanner){ InputService inputService = new InputService(); LineService lineService = new LineService(); diff --git a/src/main/java/subway/service/station/StationService.java b/src/main/java/subway/service/station/StationService.java index 3886bc985..4101afcbd 100644 --- a/src/main/java/subway/service/station/StationService.java +++ b/src/main/java/subway/service/station/StationService.java @@ -3,7 +3,6 @@ import subway.domain.Station; import subway.repository.StationRepository; import subway.service.InputService; -import subway.service.abstraction.feature.FeatureChoiceInterface; import subway.service.abstraction.feature.FeatureInterface; import subway.type.InputType; import subway.view.output.station.StationInformationView; @@ -13,7 +12,7 @@ import java.util.List; import java.util.Scanner; -public class StationService implements FeatureChoiceInterface, FeatureInterface { +public class StationService implements FeatureInterface { public static void manageStation(Scanner scanner) { InputService inputService = new InputService(); StationService stationService = new StationService(); From 96a555d711ec09843fc61d7b9b09a0a902671d5b Mon Sep 17 00:00:00 2001 From: daeun Date: Mon, 14 Dec 2020 19:13:34 +0900 Subject: [PATCH 77/98] feat(section-service): scan names MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - [지하철 구간] 새로운 역을 삽입할 노선을 입력하는 기능 구현 - [지하철 구간] 삽입할 노선이 없는 경우 예외 처리하는 기능 구현 - [지하철 구간] 새로운 역의 이름을 입력하는 기능 구현 - [지하철 구간] 해당 역이 없는 경우 예외 처리하는 기능 구현 --- docs/README.md | 8 ++--- .../service/section/SectionAddingService.java | 22 ++++++++++++++ .../section/SectionAddingValidation.java | 30 +++++++++++++++++++ .../service/section/SectionService.java | 17 +++++++---- 4 files changed, 67 insertions(+), 10 deletions(-) create mode 100644 src/main/java/subway/service/section/SectionAddingService.java create mode 100644 src/main/java/subway/service/section/SectionAddingValidation.java diff --git a/docs/README.md b/docs/README.md index 90d2e573d..2357c8dee 100644 --- a/docs/README.md +++ b/docs/README.md @@ -42,10 +42,10 @@ - [ ] 지하철 구간을 추가한다. - [ ] 하나의 역은 여러 개의 노선에 추가될 수 있다. - [ ] 새로운 역은 역과 역 사이에 추가될 수 있다. - - [ ] 새로운 역을 삽입할 노선을 입력한다. - - [ ] 삽입할 노선이 없는 경우 삽입할 수 없다. `예외` - - [ ] 새로운 역의 이름을 입력한다. - - [ ] 해당 역이 없는 경우 삽입할 수 없다. `예외` + - [x] 새로운 역을 삽입할 노선을 입력한다. + - [x] 삽입할 노선이 없는 경우 삽입할 수 없다. `예외` + - [x] 새로운 역의 이름을 입력한다. + - [x] 해당 역이 없는 경우 삽입할 수 없다. `예외` - [ ] 새로운 역의 삽입 순서를 입력한다. - [ ] 삽입 순서는 음수 또는 0일 수 없다. `예외` - [ ] 삽입 순서는 문자일 수 없다. `예외` diff --git a/src/main/java/subway/service/section/SectionAddingService.java b/src/main/java/subway/service/section/SectionAddingService.java new file mode 100644 index 000000000..b262139e0 --- /dev/null +++ b/src/main/java/subway/service/section/SectionAddingService.java @@ -0,0 +1,22 @@ +package subway.service.section; + +import subway.view.output.section.SectionTextView; + +import java.util.Scanner; + +public class SectionAddingService { + public static String scanLineName(Scanner scanner) { + SectionTextView.printSectionAddingLineText(); + return scanner.nextLine(); + } + + public static String scanStationName(Scanner scanner) { + SectionTextView.printSectionAddingStationText(); + return scanner.nextLine(); + } + + public static String scanOrder(Scanner scanner) { + SectionTextView.printSectionAddingOrderText(); + return scanner.nextLine(); + } +} diff --git a/src/main/java/subway/service/section/SectionAddingValidation.java b/src/main/java/subway/service/section/SectionAddingValidation.java new file mode 100644 index 000000000..efc1ac8bb --- /dev/null +++ b/src/main/java/subway/service/section/SectionAddingValidation.java @@ -0,0 +1,30 @@ +package subway.service.section; + +import subway.repository.LineRepository; +import subway.repository.StationRepository; +import subway.view.output.line.LineExceptionView; +import subway.view.output.station.StationExceptionView; + +import java.util.List; + +public class SectionAddingValidation { + public boolean checkLineNameValidation(String lineName) { + List lineNames = LineRepository.lineNames(); + + if (!lineNames.contains(lineName)) { + LineExceptionView.printInvalidLineNameExistenceException(); + return false; + } + return true; + } + + public boolean checkStationNameValidation(String stationName) { + List stationNames = StationRepository.stationNames(); + + if (!stationNames.contains(stationName)) { + StationExceptionView.printInvalidStationNameExistenceException(); + return false; + } + return true; + } +} diff --git a/src/main/java/subway/service/section/SectionService.java b/src/main/java/subway/service/section/SectionService.java index 9dbdd66fe..2997d4cff 100644 --- a/src/main/java/subway/service/section/SectionService.java +++ b/src/main/java/subway/service/section/SectionService.java @@ -43,12 +43,17 @@ public boolean chooseFeature(String input, Scanner scanner) { @Override public boolean add(Scanner scanner) { - SectionTextView.printSectionAddingLineText(); - String lineName = scanner.nextLine(); - SectionTextView.printSectionAddingStationText(); - String stationName = scanner.nextLine(); - SectionTextView.printSectionAddingOrderText(); - String order = scanner.nextLine(); + SectionAddingValidation sectionAddingValidation = new SectionAddingValidation(); + + String lineName = SectionAddingService.scanLineName(scanner); + if (!sectionAddingValidation.checkLineNameValidation(lineName)) { + return false; + } + String stationName = SectionAddingService.scanStationName(scanner); + if (!sectionAddingValidation.checkStationNameValidation(stationName)) { + return false; + } + String order = SectionAddingService.scanOrder(scanner); return true; } From 839f690cfb75af978ef65454fb095a65f49de498 Mon Sep 17 00:00:00 2001 From: daeun Date: Mon, 14 Dec 2020 19:46:11 +0900 Subject: [PATCH 78/98] feat(section-service): throw an exception MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - [지하철 구간] 해당 역이 이미 노선에 존재하는 경우 예외 처리하는 기능 구현 --- docs/README.md | 1 + .../section/SectionAddingValidation.java | 44 ++++++++++++++++++- .../service/section/SectionService.java | 2 +- src/main/java/subway/type/ExceptionType.java | 3 +- .../output/section/SectionExceptionView.java | 10 +++++ 5 files changed, 56 insertions(+), 4 deletions(-) create mode 100644 src/main/java/subway/view/output/section/SectionExceptionView.java diff --git a/docs/README.md b/docs/README.md index 2357c8dee..a8f848aac 100644 --- a/docs/README.md +++ b/docs/README.md @@ -46,6 +46,7 @@ - [x] 삽입할 노선이 없는 경우 삽입할 수 없다. `예외` - [x] 새로운 역의 이름을 입력한다. - [x] 해당 역이 없는 경우 삽입할 수 없다. `예외` + - [x] 해당 역이 이미 노선에 존재하는 경우 삽입할 수 없다. `예외` - [ ] 새로운 역의 삽입 순서를 입력한다. - [ ] 삽입 순서는 음수 또는 0일 수 없다. `예외` - [ ] 삽입 순서는 문자일 수 없다. `예외` diff --git a/src/main/java/subway/service/section/SectionAddingValidation.java b/src/main/java/subway/service/section/SectionAddingValidation.java index efc1ac8bb..4a00c4d13 100644 --- a/src/main/java/subway/service/section/SectionAddingValidation.java +++ b/src/main/java/subway/service/section/SectionAddingValidation.java @@ -1,11 +1,18 @@ package subway.service.section; +import subway.domain.Line; +import subway.domain.Station; import subway.repository.LineRepository; import subway.repository.StationRepository; +import subway.repository.TransitMapRepository; import subway.view.output.line.LineExceptionView; +import subway.view.output.section.SectionExceptionView; import subway.view.output.station.StationExceptionView; +import java.util.ArrayList; +import java.util.LinkedList; import java.util.List; +import java.util.Map; public class SectionAddingValidation { public boolean checkLineNameValidation(String lineName) { @@ -18,13 +25,46 @@ public boolean checkLineNameValidation(String lineName) { return true; } - public boolean checkStationNameValidation(String stationName) { + public static boolean checkExistingStationName(String stationName) { List stationNames = StationRepository.stationNames(); + return stationNames.contains(stationName); + } + + public static boolean checkExistingStationNameInLine(String lineName, String stationName) { + List stationNameValues = new ArrayList<>(); + LinkedList stationValues = getStationValuesInLine(lineName); + + for (Station stationValue : stationValues) { + stationNameValues.add(stationValue.getName()); + } + return stationNameValues.contains(stationName); + } + + public static LinkedList getStationValuesInLine(String lineName) { + Map> transitMaps = TransitMapRepository.transitMaps(); + LinkedList stationValues = new LinkedList<>(); - if (!stationNames.contains(stationName)) { + for (Map.Entry> entry : transitMaps.entrySet()) { + Line key = entry.getKey(); + String keyName = key.getName(); + LinkedList values = entry.getValue(); + + if (keyName.equals(lineName)) { + stationValues = values; + } + } + return stationValues; + } + + public boolean checkStationNameValidation(String lineName, String stationName) { + if (!checkExistingStationName(stationName)) { StationExceptionView.printInvalidStationNameExistenceException(); return false; } + if (checkExistingStationNameInLine(lineName, stationName)) { + SectionExceptionView.printInvalidSectionExistingStationNameInLine(); + return false; + } return true; } } diff --git a/src/main/java/subway/service/section/SectionService.java b/src/main/java/subway/service/section/SectionService.java index 2997d4cff..5f66a1278 100644 --- a/src/main/java/subway/service/section/SectionService.java +++ b/src/main/java/subway/service/section/SectionService.java @@ -50,7 +50,7 @@ public boolean add(Scanner scanner) { return false; } String stationName = SectionAddingService.scanStationName(scanner); - if (!sectionAddingValidation.checkStationNameValidation(stationName)) { + if (!sectionAddingValidation.checkStationNameValidation(lineName, stationName)) { return false; } String order = SectionAddingService.scanOrder(scanner); diff --git a/src/main/java/subway/type/ExceptionType.java b/src/main/java/subway/type/ExceptionType.java index 4d5ab59a0..38cf3abb7 100644 --- a/src/main/java/subway/type/ExceptionType.java +++ b/src/main/java/subway/type/ExceptionType.java @@ -13,7 +13,8 @@ public enum ExceptionType { INVALID_LINE_NAME_LAST_CHARACTER(ERROR.getException() + "'선'으로 끝나는 노선 이름을 입력해주세요.\n"), INVALID_LINE_EXISTING_STATION_NAMES(ERROR.getException() + "상행 종점역과 하행 종점역은 지하철 역 목록에 존재해야 합니다.\n"), INVALID_LINE_SAME_STATION_NAMES(ERROR.getException() + "상행 종점역과 하행 종점역은 서로 달라야 합니다.\n"), - INVALID_LINE_NAME_EXISTENCE(ERROR.getException() + "해당 노선이 존재하지 않습니다.\n"); + INVALID_LINE_NAME_EXISTENCE(ERROR.getException() + "해당 노선이 존재하지 않습니다.\n"), + INVALID_SECTION_EXISTING_STATION_NAME_IN_LINE(ERROR.getException() + "해당 역은 이미 노선에 존재합니다.\n"); private final String exception; diff --git a/src/main/java/subway/view/output/section/SectionExceptionView.java b/src/main/java/subway/view/output/section/SectionExceptionView.java new file mode 100644 index 000000000..8d8247dd5 --- /dev/null +++ b/src/main/java/subway/view/output/section/SectionExceptionView.java @@ -0,0 +1,10 @@ +package subway.view.output.section; + +import subway.type.ExceptionType; + +public class SectionExceptionView { + public static void printInvalidSectionExistingStationNameInLine() { + System.out.println(); + System.out.println(ExceptionType.INVALID_SECTION_EXISTING_STATION_NAME_IN_LINE.getException()); + } +} From 88fb0aadcbb98b76351b12bb3d7602198f54d24b Mon Sep 17 00:00:00 2001 From: daeun Date: Mon, 14 Dec 2020 19:49:42 +0900 Subject: [PATCH 79/98] style(section): change the function position MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 함수 위치 변경 --- .../service/section/SectionAddingService.java | 37 ++++++++++++++++++- .../section/SectionAddingValidation.java | 35 +----------------- 2 files changed, 38 insertions(+), 34 deletions(-) diff --git a/src/main/java/subway/service/section/SectionAddingService.java b/src/main/java/subway/service/section/SectionAddingService.java index b262139e0..e09fa06f5 100644 --- a/src/main/java/subway/service/section/SectionAddingService.java +++ b/src/main/java/subway/service/section/SectionAddingService.java @@ -1,8 +1,12 @@ package subway.service.section; +import subway.domain.Line; +import subway.domain.Station; +import subway.repository.StationRepository; +import subway.repository.TransitMapRepository; import subway.view.output.section.SectionTextView; -import java.util.Scanner; +import java.util.*; public class SectionAddingService { public static String scanLineName(Scanner scanner) { @@ -19,4 +23,35 @@ public static String scanOrder(Scanner scanner) { SectionTextView.printSectionAddingOrderText(); return scanner.nextLine(); } + + public static boolean checkExistingStationName(String stationName) { + List stationNames = StationRepository.stationNames(); + return stationNames.contains(stationName); + } + + public static boolean checkExistingStationNameInLine(String lineName, String stationName) { + List stationNameValues = new ArrayList<>(); + LinkedList stationValues = getStationValuesInLine(lineName); + + for (Station stationValue : stationValues) { + stationNameValues.add(stationValue.getName()); + } + return stationNameValues.contains(stationName); + } + + public static LinkedList getStationValuesInLine(String lineName) { + Map> transitMaps = TransitMapRepository.transitMaps(); + LinkedList stationValues = new LinkedList<>(); + + for (Map.Entry> entry : transitMaps.entrySet()) { + Line key = entry.getKey(); + String keyName = key.getName(); + LinkedList values = entry.getValue(); + + if (keyName.equals(lineName)) { + stationValues = values; + } + } + return stationValues; + } } diff --git a/src/main/java/subway/service/section/SectionAddingValidation.java b/src/main/java/subway/service/section/SectionAddingValidation.java index 4a00c4d13..21543b3af 100644 --- a/src/main/java/subway/service/section/SectionAddingValidation.java +++ b/src/main/java/subway/service/section/SectionAddingValidation.java @@ -25,43 +25,12 @@ public boolean checkLineNameValidation(String lineName) { return true; } - public static boolean checkExistingStationName(String stationName) { - List stationNames = StationRepository.stationNames(); - return stationNames.contains(stationName); - } - - public static boolean checkExistingStationNameInLine(String lineName, String stationName) { - List stationNameValues = new ArrayList<>(); - LinkedList stationValues = getStationValuesInLine(lineName); - - for (Station stationValue : stationValues) { - stationNameValues.add(stationValue.getName()); - } - return stationNameValues.contains(stationName); - } - - public static LinkedList getStationValuesInLine(String lineName) { - Map> transitMaps = TransitMapRepository.transitMaps(); - LinkedList stationValues = new LinkedList<>(); - - for (Map.Entry> entry : transitMaps.entrySet()) { - Line key = entry.getKey(); - String keyName = key.getName(); - LinkedList values = entry.getValue(); - - if (keyName.equals(lineName)) { - stationValues = values; - } - } - return stationValues; - } - public boolean checkStationNameValidation(String lineName, String stationName) { - if (!checkExistingStationName(stationName)) { + if (!SectionAddingService.checkExistingStationName(stationName)) { StationExceptionView.printInvalidStationNameExistenceException(); return false; } - if (checkExistingStationNameInLine(lineName, stationName)) { + if (SectionAddingService.checkExistingStationNameInLine(lineName, stationName)) { SectionExceptionView.printInvalidSectionExistingStationNameInLine(); return false; } From 3d0fe2d104601964182ebf3dc71c47d571138503 Mon Sep 17 00:00:00 2001 From: daeun Date: Mon, 14 Dec 2020 20:57:03 +0900 Subject: [PATCH 80/98] feat(section-service): throw an exception MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - [지하철 구간] 새로운 역의 삽입 순서를 입력하는 기능 구현 - [지하철 구간] 삽입 순서가 문자인 경우 예외 처리하는 기능 구현 - [지하철 구간] 삽입 순서가 음수 또는 0인 경우 예외 처리하는 기능 구현 - [지하철 구간] 삽입 순서가 노선에 있는 역 개수보다 큰 수인 경우 예외 처리하는 기능 구현 --- docs/README.md | 8 +++---- .../service/section/SectionAddingService.java | 11 +++++++++ .../section/SectionAddingValidation.java | 24 +++++++++++++------ .../service/section/SectionService.java | 4 +++- src/main/java/subway/type/BoundaryType.java | 4 +++- src/main/java/subway/type/ExceptionType.java | 6 ++++- .../output/section/SectionExceptionView.java | 15 ++++++++++++ 7 files changed, 58 insertions(+), 14 deletions(-) diff --git a/docs/README.md b/docs/README.md index a8f848aac..c4a60c0ec 100644 --- a/docs/README.md +++ b/docs/README.md @@ -47,10 +47,10 @@ - [x] 새로운 역의 이름을 입력한다. - [x] 해당 역이 없는 경우 삽입할 수 없다. `예외` - [x] 해당 역이 이미 노선에 존재하는 경우 삽입할 수 없다. `예외` - - [ ] 새로운 역의 삽입 순서를 입력한다. - - [ ] 삽입 순서는 음수 또는 0일 수 없다. `예외` - - [ ] 삽입 순서는 문자일 수 없다. `예외` - - [ ] 삽입 순서는 노선의 길이보다 작거나 같은 수이어야 한다. `예외` + - [x] 새로운 역의 삽입 순서를 입력한다. + - [x] 삽입 순서는 문자일 수 없다. `예외` + - [x] 삽입 순서는 음수 또는 0일 수 없다. `예외` + - [x] 삽입 순서는 노선에 있는 역 개수보다 큰 수일 수 없다. `예외` - [ ] 지하철 노선에 갈래길은 생길 수 없다. - [ ] 지하철 구간을 삭제한다. - [ ] 지하철 노선에 등록된 역을 제거할 수 있다. diff --git a/src/main/java/subway/service/section/SectionAddingService.java b/src/main/java/subway/service/section/SectionAddingService.java index e09fa06f5..b3758a56d 100644 --- a/src/main/java/subway/service/section/SectionAddingService.java +++ b/src/main/java/subway/service/section/SectionAddingService.java @@ -4,6 +4,7 @@ import subway.domain.Station; import subway.repository.StationRepository; import subway.repository.TransitMapRepository; +import subway.type.BoundaryType; import subway.view.output.section.SectionTextView; import java.util.*; @@ -54,4 +55,14 @@ public static LinkedList getStationValuesInLine(String lineName) { } return stationValues; } + + public static boolean checkOrderReplacementLength(String order) { + return order.replaceAll("[^0-9]", "").length() + == BoundaryType.ORDER_REPLACEMENT_LENGTH_BOUNDARY.getBoundary(); + } + + public static boolean checkOrderNumberByStations(String lineName, int orderNumber) { + LinkedList stationValues = getStationValuesInLine(lineName); + return stationValues.size() < orderNumber; + } } diff --git a/src/main/java/subway/service/section/SectionAddingValidation.java b/src/main/java/subway/service/section/SectionAddingValidation.java index 21543b3af..46414d7bd 100644 --- a/src/main/java/subway/service/section/SectionAddingValidation.java +++ b/src/main/java/subway/service/section/SectionAddingValidation.java @@ -1,18 +1,12 @@ package subway.service.section; -import subway.domain.Line; -import subway.domain.Station; import subway.repository.LineRepository; -import subway.repository.StationRepository; -import subway.repository.TransitMapRepository; +import subway.type.BoundaryType; import subway.view.output.line.LineExceptionView; import subway.view.output.section.SectionExceptionView; import subway.view.output.station.StationExceptionView; -import java.util.ArrayList; -import java.util.LinkedList; import java.util.List; -import java.util.Map; public class SectionAddingValidation { public boolean checkLineNameValidation(String lineName) { @@ -36,4 +30,20 @@ public boolean checkStationNameValidation(String lineName, String stationName) { } return true; } + + public boolean checkOrderValidation(String lineName, String order) { + if (SectionAddingService.checkOrderReplacementLength(order)) { + SectionExceptionView.printInvalidSectionOrderReplacementLengthException(); + return false; + } + if (Integer.parseInt(order) < BoundaryType.ORDER_NUMBER_BOUNDARY.getBoundary()) { + SectionExceptionView.printInvalidSectionOrderNumberException(); + return false; + } + if (SectionAddingService.checkOrderNumberByStations(lineName, Integer.parseInt(order))) { + SectionExceptionView.printInvalidSectionOrderNumberByStationsException(); + return false; + } + return true; + } } diff --git a/src/main/java/subway/service/section/SectionService.java b/src/main/java/subway/service/section/SectionService.java index 5f66a1278..8a6c6beaf 100644 --- a/src/main/java/subway/service/section/SectionService.java +++ b/src/main/java/subway/service/section/SectionService.java @@ -54,7 +54,9 @@ public boolean add(Scanner scanner) { return false; } String order = SectionAddingService.scanOrder(scanner); - + if (!sectionAddingValidation.checkOrderValidation(lineName, order)) { + return false; + } return true; } diff --git a/src/main/java/subway/type/BoundaryType.java b/src/main/java/subway/type/BoundaryType.java index b14f7aa3e..34dc3dc93 100644 --- a/src/main/java/subway/type/BoundaryType.java +++ b/src/main/java/subway/type/BoundaryType.java @@ -1,7 +1,9 @@ package subway.type; public enum BoundaryType { - NAME_LENGTH_BOUNDARY(2); + NAME_LENGTH_BOUNDARY(2), + ORDER_NUMBER_BOUNDARY(1), + ORDER_REPLACEMENT_LENGTH_BOUNDARY(0); private final int boundary; diff --git a/src/main/java/subway/type/ExceptionType.java b/src/main/java/subway/type/ExceptionType.java index 38cf3abb7..7a37bc78c 100644 --- a/src/main/java/subway/type/ExceptionType.java +++ b/src/main/java/subway/type/ExceptionType.java @@ -14,7 +14,11 @@ public enum ExceptionType { INVALID_LINE_EXISTING_STATION_NAMES(ERROR.getException() + "상행 종점역과 하행 종점역은 지하철 역 목록에 존재해야 합니다.\n"), INVALID_LINE_SAME_STATION_NAMES(ERROR.getException() + "상행 종점역과 하행 종점역은 서로 달라야 합니다.\n"), INVALID_LINE_NAME_EXISTENCE(ERROR.getException() + "해당 노선이 존재하지 않습니다.\n"), - INVALID_SECTION_EXISTING_STATION_NAME_IN_LINE(ERROR.getException() + "해당 역은 이미 노선에 존재합니다.\n"); + INVALID_SECTION_EXISTING_STATION_NAME_IN_LINE(ERROR.getException() + "해당 역은 이미 노선에 존재합니다.\n"), + INVALID_SECTION_ORDER_REPLACEMENT_LENGTH(ERROR.getException() + "삽입 순서는 숫자로 입력해주세요.\n"), + INVALID_SECTION_ORDER_NUMBER(ERROR.getException() + "삽입 순서는 양의 정수로 입력해주세요.\n"), + INVALID_SECTION_ORDER_NUMBER_BY_STATIONS( + ERROR.getException() + "삽입 순서는 노선에 있는 역 개수보다 작거나 같은 수로 입력해주세요.\n"); private final String exception; diff --git a/src/main/java/subway/view/output/section/SectionExceptionView.java b/src/main/java/subway/view/output/section/SectionExceptionView.java index 8d8247dd5..2ad26ec58 100644 --- a/src/main/java/subway/view/output/section/SectionExceptionView.java +++ b/src/main/java/subway/view/output/section/SectionExceptionView.java @@ -7,4 +7,19 @@ public static void printInvalidSectionExistingStationNameInLine() { System.out.println(); System.out.println(ExceptionType.INVALID_SECTION_EXISTING_STATION_NAME_IN_LINE.getException()); } + + public static void printInvalidSectionOrderReplacementLengthException() { + System.out.println(); + System.out.println(ExceptionType.INVALID_SECTION_ORDER_REPLACEMENT_LENGTH.getException()); + } + + public static void printInvalidSectionOrderNumberException() { + System.out.println(); + System.out.println(ExceptionType.INVALID_SECTION_ORDER_NUMBER.getException()); + } + + public static void printInvalidSectionOrderNumberByStationsException() { + System.out.println(); + System.out.println(ExceptionType.INVALID_SECTION_ORDER_NUMBER_BY_STATIONS.getException()); + } } From 4d0fea32aa1ba13e88a747fdd5658d079b910230 Mon Sep 17 00:00:00 2001 From: daeun Date: Mon, 14 Dec 2020 21:58:48 +0900 Subject: [PATCH 81/98] refactor(section): modify the code structure MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 코드 구조 수정 --- src/main/java/subway/domain/Section.java | 25 +++++++++++++++++++ .../service/section/SectionAddingService.java | 7 ++++++ .../section/SectionAddingValidation.java | 20 ++++++++------- .../service/section/SectionService.java | 15 +++++------ 4 files changed, 49 insertions(+), 18 deletions(-) create mode 100644 src/main/java/subway/domain/Section.java diff --git a/src/main/java/subway/domain/Section.java b/src/main/java/subway/domain/Section.java new file mode 100644 index 000000000..3deb9e54c --- /dev/null +++ b/src/main/java/subway/domain/Section.java @@ -0,0 +1,25 @@ +package subway.domain; + +public class Section { + private final String lineName; + private final String stationName; + private final String order; + + public Section(String lineName, String stationName, String order) { + this.lineName = lineName; + this.stationName = stationName; + this.order = order; + } + + public String getLineName() { + return lineName; + } + + public String getStationName() { + return stationName; + } + + public String getOrder() { + return order; + } +} diff --git a/src/main/java/subway/service/section/SectionAddingService.java b/src/main/java/subway/service/section/SectionAddingService.java index b3758a56d..725e35484 100644 --- a/src/main/java/subway/service/section/SectionAddingService.java +++ b/src/main/java/subway/service/section/SectionAddingService.java @@ -2,9 +2,11 @@ import subway.domain.Line; import subway.domain.Station; +import subway.repository.LineRepository; import subway.repository.StationRepository; import subway.repository.TransitMapRepository; import subway.type.BoundaryType; +import subway.view.output.line.LineExceptionView; import subway.view.output.section.SectionTextView; import java.util.*; @@ -25,6 +27,11 @@ public static String scanOrder(Scanner scanner) { return scanner.nextLine(); } + public static boolean checkExistingLineName(String lineName) { + List lineNames = LineRepository.lineNames(); + return lineNames.contains(lineName); + } + public static boolean checkExistingStationName(String stationName) { List stationNames = StationRepository.stationNames(); return stationNames.contains(stationName); diff --git a/src/main/java/subway/service/section/SectionAddingValidation.java b/src/main/java/subway/service/section/SectionAddingValidation.java index 46414d7bd..0828caf46 100644 --- a/src/main/java/subway/service/section/SectionAddingValidation.java +++ b/src/main/java/subway/service/section/SectionAddingValidation.java @@ -1,25 +1,27 @@ package subway.service.section; -import subway.repository.LineRepository; +import subway.domain.Section; import subway.type.BoundaryType; import subway.view.output.line.LineExceptionView; import subway.view.output.section.SectionExceptionView; import subway.view.output.station.StationExceptionView; -import java.util.List; - public class SectionAddingValidation { - public boolean checkLineNameValidation(String lineName) { - List lineNames = LineRepository.lineNames(); - - if (!lineNames.contains(lineName)) { - LineExceptionView.printInvalidLineNameExistenceException(); + public boolean checkSectionAddingValidation(Section section) { + if (!checkNamesValidation(section.getLineName(), section.getStationName())) { + return false; + } + if (!checkOrderValidation(section.getLineName(), section.getOrder())) { return false; } return true; } - public boolean checkStationNameValidation(String lineName, String stationName) { + public boolean checkNamesValidation(String lineName, String stationName) { + if (!SectionAddingService.checkExistingLineName(lineName)) { + LineExceptionView.printInvalidLineNameExistenceException(); + return false; + } if (!SectionAddingService.checkExistingStationName(stationName)) { StationExceptionView.printInvalidStationNameExistenceException(); return false; diff --git a/src/main/java/subway/service/section/SectionService.java b/src/main/java/subway/service/section/SectionService.java index 8a6c6beaf..db587f5ff 100644 --- a/src/main/java/subway/service/section/SectionService.java +++ b/src/main/java/subway/service/section/SectionService.java @@ -1,5 +1,6 @@ package subway.service.section; +import subway.domain.Section; import subway.service.station.StationService; import subway.type.InputType; import subway.view.output.ExceptionView; @@ -46,18 +47,14 @@ public boolean add(Scanner scanner) { SectionAddingValidation sectionAddingValidation = new SectionAddingValidation(); String lineName = SectionAddingService.scanLineName(scanner); - if (!sectionAddingValidation.checkLineNameValidation(lineName)) { - return false; - } String stationName = SectionAddingService.scanStationName(scanner); - if (!sectionAddingValidation.checkStationNameValidation(lineName, stationName)) { - return false; - } String order = SectionAddingService.scanOrder(scanner); - if (!sectionAddingValidation.checkOrderValidation(lineName, order)) { - return false; + + if (sectionAddingValidation + .checkSectionAddingValidation(new Section(lineName, stationName, order))) { + return true; } - return true; + return false; } @Override From 23d1d4a64e48c7771b9c4b0d0bbcadb806faa534 Mon Sep 17 00:00:00 2001 From: daeun Date: Mon, 14 Dec 2020 22:03:18 +0900 Subject: [PATCH 82/98] refactor(subway): rename classes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 클래스명 변경 --- .../service/line/LineAddingService.java | 17 -------------- .../service/line/LineScannerService.java | 22 +++++++++++++++++++ .../java/subway/service/line/LineService.java | 6 ++--- .../service/section/SectionAddingService.java | 17 -------------- .../section/SectionScannerService.java | 22 +++++++++++++++++++ .../service/section/SectionService.java | 6 ++--- 6 files changed, 50 insertions(+), 40 deletions(-) create mode 100644 src/main/java/subway/service/line/LineScannerService.java create mode 100644 src/main/java/subway/service/section/SectionScannerService.java diff --git a/src/main/java/subway/service/line/LineAddingService.java b/src/main/java/subway/service/line/LineAddingService.java index 61c46f217..5afc133ec 100644 --- a/src/main/java/subway/service/line/LineAddingService.java +++ b/src/main/java/subway/service/line/LineAddingService.java @@ -6,27 +6,10 @@ import subway.repository.LineRepository; import subway.repository.TransitMapRepository; import subway.view.output.line.LineInformationView; -import subway.view.output.line.LineTextView; import java.util.LinkedList; -import java.util.Scanner; public class LineAddingService { - public static String scanLineName(Scanner scanner) { - LineTextView.printLineAddingText(); - return scanner.nextLine(); - } - - public static String scanUpStationName(Scanner scanner) { - LineTextView.printLineUpStationNameText(); - return scanner.nextLine(); - } - - public static String scanDownStationName(Scanner scanner) { - LineTextView.printLineDownStationNameText(); - return scanner.nextLine(); - } - public static LinkedList addStationNames(String upStationName, String downStationName) { LinkedList stationNames = new LinkedList<>(); diff --git a/src/main/java/subway/service/line/LineScannerService.java b/src/main/java/subway/service/line/LineScannerService.java new file mode 100644 index 000000000..191915822 --- /dev/null +++ b/src/main/java/subway/service/line/LineScannerService.java @@ -0,0 +1,22 @@ +package subway.service.line; + +import subway.view.output.line.LineTextView; + +import java.util.Scanner; + +public class LineScannerService { + public static String scanLineName(Scanner scanner) { + LineTextView.printLineAddingText(); + return scanner.nextLine(); + } + + public static String scanUpStationName(Scanner scanner) { + LineTextView.printLineUpStationNameText(); + return scanner.nextLine(); + } + + public static String scanDownStationName(Scanner scanner) { + LineTextView.printLineDownStationNameText(); + return scanner.nextLine(); + } +} diff --git a/src/main/java/subway/service/line/LineService.java b/src/main/java/subway/service/line/LineService.java index 64209d587..8377230c4 100644 --- a/src/main/java/subway/service/line/LineService.java +++ b/src/main/java/subway/service/line/LineService.java @@ -51,12 +51,12 @@ public boolean chooseFeature(String input, Scanner scanner) { public boolean add(Scanner scanner) { LineAddingValidation lineNameAddingValidation = new LineAddingValidation(); - String lineName = LineAddingService.scanLineName(scanner); + String lineName = LineScannerService.scanLineName(scanner); if (!lineNameAddingValidation.checkAddingValidation(lineName)) { return false; } - String upStationName = LineAddingService.scanUpStationName(scanner); - String downStationName = LineAddingService.scanDownStationName(scanner); + String upStationName = LineScannerService.scanUpStationName(scanner); + String downStationName = LineScannerService.scanDownStationName(scanner); if (!lineNameAddingValidation.checkStationNamesAddingValidation(upStationName, downStationName)) { return false; } diff --git a/src/main/java/subway/service/section/SectionAddingService.java b/src/main/java/subway/service/section/SectionAddingService.java index 725e35484..8d623a847 100644 --- a/src/main/java/subway/service/section/SectionAddingService.java +++ b/src/main/java/subway/service/section/SectionAddingService.java @@ -6,27 +6,10 @@ import subway.repository.StationRepository; import subway.repository.TransitMapRepository; import subway.type.BoundaryType; -import subway.view.output.line.LineExceptionView; -import subway.view.output.section.SectionTextView; import java.util.*; public class SectionAddingService { - public static String scanLineName(Scanner scanner) { - SectionTextView.printSectionAddingLineText(); - return scanner.nextLine(); - } - - public static String scanStationName(Scanner scanner) { - SectionTextView.printSectionAddingStationText(); - return scanner.nextLine(); - } - - public static String scanOrder(Scanner scanner) { - SectionTextView.printSectionAddingOrderText(); - return scanner.nextLine(); - } - public static boolean checkExistingLineName(String lineName) { List lineNames = LineRepository.lineNames(); return lineNames.contains(lineName); diff --git a/src/main/java/subway/service/section/SectionScannerService.java b/src/main/java/subway/service/section/SectionScannerService.java new file mode 100644 index 000000000..a4638e602 --- /dev/null +++ b/src/main/java/subway/service/section/SectionScannerService.java @@ -0,0 +1,22 @@ +package subway.service.section; + +import subway.view.output.section.SectionTextView; + +import java.util.Scanner; + +public class SectionScannerService { + public static String scanLineName(Scanner scanner) { + SectionTextView.printSectionAddingLineText(); + return scanner.nextLine(); + } + + public static String scanStationName(Scanner scanner) { + SectionTextView.printSectionAddingStationText(); + return scanner.nextLine(); + } + + public static String scanOrder(Scanner scanner) { + SectionTextView.printSectionAddingOrderText(); + return scanner.nextLine(); + } +} diff --git a/src/main/java/subway/service/section/SectionService.java b/src/main/java/subway/service/section/SectionService.java index db587f5ff..429883ed8 100644 --- a/src/main/java/subway/service/section/SectionService.java +++ b/src/main/java/subway/service/section/SectionService.java @@ -46,9 +46,9 @@ public boolean chooseFeature(String input, Scanner scanner) { public boolean add(Scanner scanner) { SectionAddingValidation sectionAddingValidation = new SectionAddingValidation(); - String lineName = SectionAddingService.scanLineName(scanner); - String stationName = SectionAddingService.scanStationName(scanner); - String order = SectionAddingService.scanOrder(scanner); + String lineName = SectionScannerService.scanLineName(scanner); + String stationName = SectionScannerService.scanStationName(scanner); + String order = SectionScannerService.scanOrder(scanner); if (sectionAddingValidation .checkSectionAddingValidation(new Section(lineName, stationName, order))) { From f103dd75a4953a1d82eff2f563a1a826c2d34491 Mon Sep 17 00:00:00 2001 From: daeun Date: Mon, 14 Dec 2020 22:38:27 +0900 Subject: [PATCH 83/98] feat(section-service): add a section MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - [지하철 구간] 지하철 구간을 추가하는 기능 구현 --- docs/README.md | 16 ++++++++-------- .../service/section/SectionAddingService.java | 18 +++++++++++++++++- .../subway/service/section/SectionService.java | 8 ++++++-- src/main/java/subway/type/ExceptionType.java | 6 +++--- src/main/java/subway/type/InformationType.java | 3 ++- .../output/section/SectionInformationView.java | 10 ++++++++++ 6 files changed, 46 insertions(+), 15 deletions(-) create mode 100644 src/main/java/subway/view/output/section/SectionInformationView.java diff --git a/docs/README.md b/docs/README.md index c4a60c0ec..a7aa7c177 100644 --- a/docs/README.md +++ b/docs/README.md @@ -39,19 +39,19 @@ - [x] 지하철 노선의 목록을 조회한다. ### 지하철 구간 -- [ ] 지하철 구간을 추가한다. - - [ ] 하나의 역은 여러 개의 노선에 추가될 수 있다. - - [ ] 새로운 역은 역과 역 사이에 추가될 수 있다. +- [x] 지하철 구간을 추가한다. + - [x] 하나의 역은 여러 개의 노선에 추가될 수 있다. + - [x] 새로운 역은 역과 역 사이에 추가될 수 있다. - [x] 새로운 역을 삽입할 노선을 입력한다. - [x] 삽입할 노선이 없는 경우 삽입할 수 없다. `예외` - [x] 새로운 역의 이름을 입력한다. - [x] 해당 역이 없는 경우 삽입할 수 없다. `예외` - [x] 해당 역이 이미 노선에 존재하는 경우 삽입할 수 없다. `예외` - - [x] 새로운 역의 삽입 순서를 입력한다. - - [x] 삽입 순서는 문자일 수 없다. `예외` - - [x] 삽입 순서는 음수 또는 0일 수 없다. `예외` - - [x] 삽입 순서는 노선에 있는 역 개수보다 큰 수일 수 없다. `예외` - - [ ] 지하철 노선에 갈래길은 생길 수 없다. + - [x] 새로운 역의 순서를 입력한다. + - [x] 순서는 문자일 수 없다. `예외` + - [x] 순서는 음수 또는 0일 수 없다. `예외` + - [x] 순서는 노선에 있는 역 개수보다 하나 큰 수까지만 가능하다. `예외` + - [x] 지하철 노선에 갈래길은 생길 수 없다. - [ ] 지하철 구간을 삭제한다. - [ ] 지하철 노선에 등록된 역을 제거할 수 있다. - [ ] 상행 종점역을 제거할 경우 다음 역이 종점이 된다. diff --git a/src/main/java/subway/service/section/SectionAddingService.java b/src/main/java/subway/service/section/SectionAddingService.java index 8d623a847..5410a32d5 100644 --- a/src/main/java/subway/service/section/SectionAddingService.java +++ b/src/main/java/subway/service/section/SectionAddingService.java @@ -1,6 +1,7 @@ package subway.service.section; import subway.domain.Line; +import subway.domain.Section; import subway.domain.Station; import subway.repository.LineRepository; import subway.repository.StationRepository; @@ -53,6 +54,21 @@ public static boolean checkOrderReplacementLength(String order) { public static boolean checkOrderNumberByStations(String lineName, int orderNumber) { LinkedList stationValues = getStationValuesInLine(lineName); - return stationValues.size() < orderNumber; + return stationValues.size() + 1 < orderNumber; + } + + public static void addSection(Section section) { + Map> transitMaps = TransitMapRepository.transitMaps(); + int orderNumber = Integer.parseInt(section.getOrder()) - 1; + + for (Map.Entry> entry : transitMaps.entrySet()) { + Line key = entry.getKey(); + String keyName = key.getName(); + LinkedList values = entry.getValue(); + + if (keyName.equals(section.getLineName())) { + values.add(orderNumber, new Station(section.getStationName())); + } + } } } diff --git a/src/main/java/subway/service/section/SectionService.java b/src/main/java/subway/service/section/SectionService.java index 429883ed8..14bc117ff 100644 --- a/src/main/java/subway/service/section/SectionService.java +++ b/src/main/java/subway/service/section/SectionService.java @@ -5,6 +5,7 @@ import subway.type.InputType; import subway.view.output.ExceptionView; import subway.view.output.ScreenView; +import subway.view.output.section.SectionInformationView; import subway.view.output.section.SectionTextView; import java.util.Scanner; @@ -49,9 +50,12 @@ public boolean add(Scanner scanner) { String lineName = SectionScannerService.scanLineName(scanner); String stationName = SectionScannerService.scanStationName(scanner); String order = SectionScannerService.scanOrder(scanner); + Section section = new Section(lineName, stationName, order); - if (sectionAddingValidation - .checkSectionAddingValidation(new Section(lineName, stationName, order))) { + if (sectionAddingValidation.checkSectionAddingValidation(section)) { + SectionAddingService.addSection(section); + SectionInformationView.printSectionAddingInformation(); + System.out.println(); return true; } return false; diff --git a/src/main/java/subway/type/ExceptionType.java b/src/main/java/subway/type/ExceptionType.java index 7a37bc78c..6fc105ac1 100644 --- a/src/main/java/subway/type/ExceptionType.java +++ b/src/main/java/subway/type/ExceptionType.java @@ -15,10 +15,10 @@ public enum ExceptionType { INVALID_LINE_SAME_STATION_NAMES(ERROR.getException() + "상행 종점역과 하행 종점역은 서로 달라야 합니다.\n"), INVALID_LINE_NAME_EXISTENCE(ERROR.getException() + "해당 노선이 존재하지 않습니다.\n"), INVALID_SECTION_EXISTING_STATION_NAME_IN_LINE(ERROR.getException() + "해당 역은 이미 노선에 존재합니다.\n"), - INVALID_SECTION_ORDER_REPLACEMENT_LENGTH(ERROR.getException() + "삽입 순서는 숫자로 입력해주세요.\n"), - INVALID_SECTION_ORDER_NUMBER(ERROR.getException() + "삽입 순서는 양의 정수로 입력해주세요.\n"), + INVALID_SECTION_ORDER_REPLACEMENT_LENGTH(ERROR.getException() + "순서는 숫자로 입력해주세요.\n"), + INVALID_SECTION_ORDER_NUMBER(ERROR.getException() + "순서는 양의 정수로 입력해주세요.\n"), INVALID_SECTION_ORDER_NUMBER_BY_STATIONS( - ERROR.getException() + "삽입 순서는 노선에 있는 역 개수보다 작거나 같은 수로 입력해주세요.\n"); + ERROR.getException() + "순서는 노선에 있는 역 개수보다 하나 큰 수까지만 입력해주세요.\n"); private final String exception; diff --git a/src/main/java/subway/type/InformationType.java b/src/main/java/subway/type/InformationType.java index e4f7ed887..48b5f3620 100644 --- a/src/main/java/subway/type/InformationType.java +++ b/src/main/java/subway/type/InformationType.java @@ -5,7 +5,8 @@ public enum InformationType { STATION_ADDING_INFORMATION(INFORMATION.getInformation() + "지하철 역이 등록되었습니다."), STATION_DELETION_INFORMATION(INFORMATION.getInformation() + "지하철 역이 삭제되었습니다."), LINE_ADDING_INFORMATION(INFORMATION.getInformation() + "지하철 노선이 등록되었습니다."), - LINE_DELETION_INFORMATION(INFORMATION.getInformation() + "지하철 노선이 삭제되었습니다."); + LINE_DELETION_INFORMATION(INFORMATION.getInformation() + "지하철 노선이 삭제되었습니다."), + SECTION_ADDING_INFORMATION(INFORMATION.getInformation() + "지하철 노선이 등록되었습니다."); private final String information; diff --git a/src/main/java/subway/view/output/section/SectionInformationView.java b/src/main/java/subway/view/output/section/SectionInformationView.java new file mode 100644 index 000000000..ba1462a8f --- /dev/null +++ b/src/main/java/subway/view/output/section/SectionInformationView.java @@ -0,0 +1,10 @@ +package subway.view.output.section; + +import subway.type.InformationType; + +public class SectionInformationView { + public static void printSectionAddingInformation() { + System.out.println(); + System.out.println(InformationType.SECTION_ADDING_INFORMATION.getInformation()); + } +} From c96cdf131632af856a2eebee66784a78f8eae780 Mon Sep 17 00:00:00 2001 From: daeun Date: Mon, 14 Dec 2020 23:06:13 +0900 Subject: [PATCH 84/98] refactor(subway): rename classes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 클래스명 변경 --- src/main/java/subway/service/line/LineService.java | 7 ++++--- src/main/java/subway/service/section/SectionService.java | 7 ++++--- .../input/line/LineInputView.java} | 4 ++-- .../input/section/SectionInputView.java} | 4 ++-- 4 files changed, 12 insertions(+), 10 deletions(-) rename src/main/java/subway/{service/line/LineScannerService.java => view/input/line/LineInputView.java} (89%) rename src/main/java/subway/{service/section/SectionScannerService.java => view/input/section/SectionInputView.java} (88%) diff --git a/src/main/java/subway/service/line/LineService.java b/src/main/java/subway/service/line/LineService.java index 8377230c4..34f2f8673 100644 --- a/src/main/java/subway/service/line/LineService.java +++ b/src/main/java/subway/service/line/LineService.java @@ -6,6 +6,7 @@ import subway.service.InputService; import subway.service.abstraction.feature.FeatureInterface; import subway.type.InputType; +import subway.view.input.line.LineInputView; import subway.view.output.ScreenView; import subway.view.output.line.LineTextView; @@ -51,12 +52,12 @@ public boolean chooseFeature(String input, Scanner scanner) { public boolean add(Scanner scanner) { LineAddingValidation lineNameAddingValidation = new LineAddingValidation(); - String lineName = LineScannerService.scanLineName(scanner); + String lineName = LineInputView.scanLineName(scanner); if (!lineNameAddingValidation.checkAddingValidation(lineName)) { return false; } - String upStationName = LineScannerService.scanUpStationName(scanner); - String downStationName = LineScannerService.scanDownStationName(scanner); + String upStationName = LineInputView.scanUpStationName(scanner); + String downStationName = LineInputView.scanDownStationName(scanner); if (!lineNameAddingValidation.checkStationNamesAddingValidation(upStationName, downStationName)) { return false; } diff --git a/src/main/java/subway/service/section/SectionService.java b/src/main/java/subway/service/section/SectionService.java index 14bc117ff..e5257845b 100644 --- a/src/main/java/subway/service/section/SectionService.java +++ b/src/main/java/subway/service/section/SectionService.java @@ -3,6 +3,7 @@ import subway.domain.Section; import subway.service.station.StationService; import subway.type.InputType; +import subway.view.input.section.SectionInputView; import subway.view.output.ExceptionView; import subway.view.output.ScreenView; import subway.view.output.section.SectionInformationView; @@ -47,9 +48,9 @@ public boolean chooseFeature(String input, Scanner scanner) { public boolean add(Scanner scanner) { SectionAddingValidation sectionAddingValidation = new SectionAddingValidation(); - String lineName = SectionScannerService.scanLineName(scanner); - String stationName = SectionScannerService.scanStationName(scanner); - String order = SectionScannerService.scanOrder(scanner); + String lineName = SectionInputView.scanLineName(scanner); + String stationName = SectionInputView.scanStationName(scanner); + String order = SectionInputView.scanOrder(scanner); Section section = new Section(lineName, stationName, order); if (sectionAddingValidation.checkSectionAddingValidation(section)) { diff --git a/src/main/java/subway/service/line/LineScannerService.java b/src/main/java/subway/view/input/line/LineInputView.java similarity index 89% rename from src/main/java/subway/service/line/LineScannerService.java rename to src/main/java/subway/view/input/line/LineInputView.java index 191915822..27e33d95f 100644 --- a/src/main/java/subway/service/line/LineScannerService.java +++ b/src/main/java/subway/view/input/line/LineInputView.java @@ -1,10 +1,10 @@ -package subway.service.line; +package subway.view.input.line; import subway.view.output.line.LineTextView; import java.util.Scanner; -public class LineScannerService { +public class LineInputView { public static String scanLineName(Scanner scanner) { LineTextView.printLineAddingText(); return scanner.nextLine(); diff --git a/src/main/java/subway/service/section/SectionScannerService.java b/src/main/java/subway/view/input/section/SectionInputView.java similarity index 88% rename from src/main/java/subway/service/section/SectionScannerService.java rename to src/main/java/subway/view/input/section/SectionInputView.java index a4638e602..980309a36 100644 --- a/src/main/java/subway/service/section/SectionScannerService.java +++ b/src/main/java/subway/view/input/section/SectionInputView.java @@ -1,10 +1,10 @@ -package subway.service.section; +package subway.view.input.section; import subway.view.output.section.SectionTextView; import java.util.Scanner; -public class SectionScannerService { +public class SectionInputView { public static String scanLineName(Scanner scanner) { SectionTextView.printSectionAddingLineText(); return scanner.nextLine(); From cce526285cb4cc70bb187fcf4b31e7a394b45a23 Mon Sep 17 00:00:00 2001 From: daeun Date: Mon, 14 Dec 2020 23:24:37 +0900 Subject: [PATCH 85/98] docs(readme): update README.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 구현할 기능 목록 수정 --- docs/README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/README.md b/docs/README.md index a7aa7c177..44c69538a 100644 --- a/docs/README.md +++ b/docs/README.md @@ -54,6 +54,10 @@ - [x] 지하철 노선에 갈래길은 생길 수 없다. - [ ] 지하철 구간을 삭제한다. - [ ] 지하철 노선에 등록된 역을 제거할 수 있다. + - [ ] 삭제할 구간의 노선을 입력한다. + - [ ] 지하철 노선도에 해당 노선이 없는 경우 삭제할 수 없다. `예외` + - [ ] 삭제할 구간의 역을 입력한다. + - [ ] 지하철 노선에 해당 역이 없는 경우 삭제할 수 없다. `예외` - [ ] 상행 종점역을 제거할 경우 다음 역이 종점이 된다. - [ ] 하행 종점역을 제거할 경우 이전 역이 종점이 된다. - [ ] 지하철 노선에 포함된 역이 2개 이하인 경우 역을 제거할 수 없다. `예외` From a605393288639a53071f2d3cd7d54de0cef56cde Mon Sep 17 00:00:00 2001 From: daeun Date: Mon, 14 Dec 2020 23:39:40 +0900 Subject: [PATCH 86/98] refactor(section-service): modify the skeleton MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - [지하철 구간] 지하철 구간을 삭제하는 기능 골격 수정 --- .../section/SectionDeletionService.java | 10 +++++ .../section/SectionDeletionValidation.java | 40 +++++++++++++++++++ .../service/section/SectionService.java | 8 +++- .../java/subway/type/InformationType.java | 3 +- .../section/SectionInformationView.java | 5 +++ 5 files changed, 64 insertions(+), 2 deletions(-) create mode 100644 src/main/java/subway/service/section/SectionDeletionService.java create mode 100644 src/main/java/subway/service/section/SectionDeletionValidation.java diff --git a/src/main/java/subway/service/section/SectionDeletionService.java b/src/main/java/subway/service/section/SectionDeletionService.java new file mode 100644 index 000000000..c0c935075 --- /dev/null +++ b/src/main/java/subway/service/section/SectionDeletionService.java @@ -0,0 +1,10 @@ +package subway.service.section; + +import subway.view.output.section.SectionInformationView; + +public class SectionDeletionService { + public static void deleteSection() { + SectionInformationView.printSectionDeletionInformation(); + System.out.println(); + } +} diff --git a/src/main/java/subway/service/section/SectionDeletionValidation.java b/src/main/java/subway/service/section/SectionDeletionValidation.java new file mode 100644 index 000000000..8bfef09ff --- /dev/null +++ b/src/main/java/subway/service/section/SectionDeletionValidation.java @@ -0,0 +1,40 @@ +package subway.service.section; + +import subway.view.output.line.LineExceptionView; +import subway.view.output.station.StationExceptionView; + +public class SectionDeletionValidation { + public boolean checkSectionDeletionValidation(String lineName, String stationName) { + if (!checkLineNameValidation(lineName)) { + return false; + } + if (!checkStationNameValidation(stationName)) { + return false; + } + return true; + } + + public boolean checkLineNameValidation(String lineName) { + if (!checkExistingLineNameInTransitMap(lineName)) { + LineExceptionView.printInvalidLineNameExistenceException(); + return false; + } + return true; + } + + public boolean checkStationNameValidation(String stationName) { + if (!checkExistingStationNameInTransitMap(stationName)) { + StationExceptionView.printInvalidStationNameExistenceException(); + return false; + } + return true; + } + + public static boolean checkExistingLineNameInTransitMap(String lineName) { + return false; + } + + public static boolean checkExistingStationNameInTransitMap(String stationName) { + return false; + } +} diff --git a/src/main/java/subway/service/section/SectionService.java b/src/main/java/subway/service/section/SectionService.java index e5257845b..038a5a4f8 100644 --- a/src/main/java/subway/service/section/SectionService.java +++ b/src/main/java/subway/service/section/SectionService.java @@ -64,11 +64,17 @@ public boolean add(Scanner scanner) { @Override public boolean delete(Scanner scanner) { + SectionDeletionValidation sectionDeletionValidation = new SectionDeletionValidation(); + SectionTextView.printSectionDeletionLineText(); String lineName = scanner.nextLine(); SectionTextView.printSectionDeletionStationText(); String stationName = scanner.nextLine(); - return true; + if (sectionDeletionValidation.checkSectionDeletionValidation(lineName, stationName)) { + SectionDeletionService.deleteSection(); + return true; + } + return false; } } diff --git a/src/main/java/subway/type/InformationType.java b/src/main/java/subway/type/InformationType.java index 48b5f3620..6825115ce 100644 --- a/src/main/java/subway/type/InformationType.java +++ b/src/main/java/subway/type/InformationType.java @@ -6,7 +6,8 @@ public enum InformationType { STATION_DELETION_INFORMATION(INFORMATION.getInformation() + "지하철 역이 삭제되었습니다."), LINE_ADDING_INFORMATION(INFORMATION.getInformation() + "지하철 노선이 등록되었습니다."), LINE_DELETION_INFORMATION(INFORMATION.getInformation() + "지하철 노선이 삭제되었습니다."), - SECTION_ADDING_INFORMATION(INFORMATION.getInformation() + "지하철 노선이 등록되었습니다."); + SECTION_ADDING_INFORMATION(INFORMATION.getInformation() + "구간이 등록되었습니다."), + SECTION_DELETION_INFORMATION(INFORMATION.getInformation() + "구간이 삭제되었습니다."); private final String information; diff --git a/src/main/java/subway/view/output/section/SectionInformationView.java b/src/main/java/subway/view/output/section/SectionInformationView.java index ba1462a8f..c9845514c 100644 --- a/src/main/java/subway/view/output/section/SectionInformationView.java +++ b/src/main/java/subway/view/output/section/SectionInformationView.java @@ -7,4 +7,9 @@ public static void printSectionAddingInformation() { System.out.println(); System.out.println(InformationType.SECTION_ADDING_INFORMATION.getInformation()); } + + public static void printSectionDeletionInformation() { + System.out.println(); + System.out.println(InformationType.SECTION_DELETION_INFORMATION.getInformation()); + } } From 0f94530c1e7068a0552ed4e3582d4aa1508a8c75 Mon Sep 17 00:00:00 2001 From: daeun Date: Tue, 15 Dec 2020 00:27:05 +0900 Subject: [PATCH 87/98] feat(section-service): delete a section MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - [지하철 구간] 삭제할 구간의 노선을 입력하는 기능 구현 - [지하철 구간] 해당 노선이 없는 경우 예외 처리하는 기능 구현 - [지하철 구간] 삭제할 구간의 역을 입력하는 기능 구현 - [지하철 구간] 해당 역이 없는 경우 예외 처리하는 기능 구현 --- docs/README.md | 8 ++--- .../repository/TransitMapRepository.java | 34 +++++++++++++++++++ .../section/SectionDeletionValidation.java | 17 ++++++---- 3 files changed, 49 insertions(+), 10 deletions(-) diff --git a/docs/README.md b/docs/README.md index 44c69538a..5836483ff 100644 --- a/docs/README.md +++ b/docs/README.md @@ -54,10 +54,10 @@ - [x] 지하철 노선에 갈래길은 생길 수 없다. - [ ] 지하철 구간을 삭제한다. - [ ] 지하철 노선에 등록된 역을 제거할 수 있다. - - [ ] 삭제할 구간의 노선을 입력한다. - - [ ] 지하철 노선도에 해당 노선이 없는 경우 삭제할 수 없다. `예외` - - [ ] 삭제할 구간의 역을 입력한다. - - [ ] 지하철 노선에 해당 역이 없는 경우 삭제할 수 없다. `예외` + - [x] 삭제할 구간의 노선을 입력한다. + - [x] 해당 노선이 없는 경우 삭제할 수 없다. `예외` + - [x] 삭제할 구간의 역을 입력한다. + - [x] 해당 역이 없는 경우 삭제할 수 없다. `예외` - [ ] 상행 종점역을 제거할 경우 다음 역이 종점이 된다. - [ ] 하행 종점역을 제거할 경우 이전 역이 종점이 된다. - [ ] 지하철 노선에 포함된 역이 2개 이하인 경우 역을 제거할 수 없다. `예외` diff --git a/src/main/java/subway/repository/TransitMapRepository.java b/src/main/java/subway/repository/TransitMapRepository.java index 141b0e31c..1858e4674 100644 --- a/src/main/java/subway/repository/TransitMapRepository.java +++ b/src/main/java/subway/repository/TransitMapRepository.java @@ -21,6 +21,16 @@ public static void deleteTransitMap(Line line) { transitMaps.remove(line); } + public static List transitMapsLineNames() { + List transitMapsLineNames = new ArrayList<>(); + + for (Map.Entry> entry : transitMaps.entrySet()) { + Line key = entry.getKey(); + transitMapsLineNames.add(key.getName()); + } + return transitMapsLineNames; + } + public static List> transitMapsStationNames() { List> transitMapsStationNames = new ArrayList<>(); @@ -35,4 +45,28 @@ public static List> transitMapsStationNames() { } return transitMapsStationNames; } + + public static List transitMapStationsByLine(String lineName) { + List transitMapStations = new ArrayList<>(); + + for (Map.Entry> entry : transitMaps.entrySet()) { + Line key = entry.getKey(); + String keyName = key.getName(); + LinkedList values = entry.getValue(); + + if (keyName.equals(lineName)) { + transitMapStations = transitMapStations(values); + } + } + return transitMapStations; + } + + public static List transitMapStations(LinkedList values) { + List transitMapStations = new ArrayList<>(); + + for (Station value : values) { + transitMapStations.add(value.getName()); + } + return transitMapStations; + } } diff --git a/src/main/java/subway/service/section/SectionDeletionValidation.java b/src/main/java/subway/service/section/SectionDeletionValidation.java index 8bfef09ff..3815dfda5 100644 --- a/src/main/java/subway/service/section/SectionDeletionValidation.java +++ b/src/main/java/subway/service/section/SectionDeletionValidation.java @@ -1,14 +1,17 @@ package subway.service.section; +import subway.repository.TransitMapRepository; import subway.view.output.line.LineExceptionView; import subway.view.output.station.StationExceptionView; +import java.util.List; + public class SectionDeletionValidation { public boolean checkSectionDeletionValidation(String lineName, String stationName) { if (!checkLineNameValidation(lineName)) { return false; } - if (!checkStationNameValidation(stationName)) { + if (!checkStationNameValidation(lineName, stationName)) { return false; } return true; @@ -22,8 +25,8 @@ public boolean checkLineNameValidation(String lineName) { return true; } - public boolean checkStationNameValidation(String stationName) { - if (!checkExistingStationNameInTransitMap(stationName)) { + public boolean checkStationNameValidation(String lineName, String stationName) { + if (!checkExistingStationNameInTransitMap(lineName, stationName)) { StationExceptionView.printInvalidStationNameExistenceException(); return false; } @@ -31,10 +34,12 @@ public boolean checkStationNameValidation(String stationName) { } public static boolean checkExistingLineNameInTransitMap(String lineName) { - return false; + List transitMapsLineNames = TransitMapRepository.transitMapsLineNames(); + return transitMapsLineNames.contains(lineName); } - public static boolean checkExistingStationNameInTransitMap(String stationName) { - return false; + public static boolean checkExistingStationNameInTransitMap(String lienName, String stationName) { + List transitMapStations = TransitMapRepository.transitMapStationsByLine(lienName); + return transitMapStations.contains(stationName); } } From 384ae1d6b704e594374706a056cfbd6bf50dbf6f Mon Sep 17 00:00:00 2001 From: daeun Date: Tue, 15 Dec 2020 00:57:32 +0900 Subject: [PATCH 88/98] feat(section-service): delete a section MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - [지하철 구간] 지하철 구간을 삭제하는 기능 구현 --- docs/README.md | 8 ++--- .../repository/TransitMapRepository.java | 5 +++ .../section/SectionDeletionService.java | 36 ++++++++++++++++--- .../service/section/SectionService.java | 4 ++- 4 files changed, 44 insertions(+), 9 deletions(-) diff --git a/docs/README.md b/docs/README.md index 5836483ff..b9ad96ca0 100644 --- a/docs/README.md +++ b/docs/README.md @@ -52,14 +52,14 @@ - [x] 순서는 음수 또는 0일 수 없다. `예외` - [x] 순서는 노선에 있는 역 개수보다 하나 큰 수까지만 가능하다. `예외` - [x] 지하철 노선에 갈래길은 생길 수 없다. -- [ ] 지하철 구간을 삭제한다. - - [ ] 지하철 노선에 등록된 역을 제거할 수 있다. +- [x] 지하철 구간을 삭제한다. + - [x] 지하철 노선에 등록된 역을 제거할 수 있다. - [x] 삭제할 구간의 노선을 입력한다. - [x] 해당 노선이 없는 경우 삭제할 수 없다. `예외` - [x] 삭제할 구간의 역을 입력한다. - [x] 해당 역이 없는 경우 삭제할 수 없다. `예외` - - [ ] 상행 종점역을 제거할 경우 다음 역이 종점이 된다. - - [ ] 하행 종점역을 제거할 경우 이전 역이 종점이 된다. + - [x] 상행 종점역을 제거할 경우 다음 역이 종점이 된다. + - [x] 하행 종점역을 제거할 경우 이전 역이 종점이 된다. - [ ] 지하철 노선에 포함된 역이 2개 이하인 경우 역을 제거할 수 없다. `예외` ### 지하철 노선도 diff --git a/src/main/java/subway/repository/TransitMapRepository.java b/src/main/java/subway/repository/TransitMapRepository.java index 1858e4674..bdb248f23 100644 --- a/src/main/java/subway/repository/TransitMapRepository.java +++ b/src/main/java/subway/repository/TransitMapRepository.java @@ -21,6 +21,11 @@ public static void deleteTransitMap(Line line) { transitMaps.remove(line); } + public static void deleteTransitMapStation(String lineName, String stationName) { + List transitMapStations = transitMapStationsByLine(lineName); + transitMapStations.remove(stationName); + } + public static List transitMapsLineNames() { List transitMapsLineNames = new ArrayList<>(); diff --git a/src/main/java/subway/service/section/SectionDeletionService.java b/src/main/java/subway/service/section/SectionDeletionService.java index c0c935075..39dfed93e 100644 --- a/src/main/java/subway/service/section/SectionDeletionService.java +++ b/src/main/java/subway/service/section/SectionDeletionService.java @@ -1,10 +1,38 @@ package subway.service.section; -import subway.view.output.section.SectionInformationView; +import subway.domain.Line; +import subway.domain.Station; +import subway.repository.TransitMapRepository; + +import java.util.LinkedList; +import java.util.Map; public class SectionDeletionService { - public static void deleteSection() { - SectionInformationView.printSectionDeletionInformation(); - System.out.println(); + public static void deleteSection(String lineName, String stationName) { + Map> transitMaps = TransitMapRepository.transitMaps(); + + for (Map.Entry> entry : transitMaps.entrySet()) { + Line key = entry.getKey(); + String keyName = key.getName(); + LinkedList values = entry.getValue(); + + if (keyName.equals(lineName)) { + int order = findOrder(values, stationName); + values.remove(order); + } + } + } + + public static int findOrder(LinkedList values, String stationName) { + int order = 0; + + for (Station value : values) { + String valueName = value.getName(); + + if (valueName.equals(stationName)) { + order = values.indexOf(value); + } + } + return order; } } diff --git a/src/main/java/subway/service/section/SectionService.java b/src/main/java/subway/service/section/SectionService.java index 038a5a4f8..b9064c556 100644 --- a/src/main/java/subway/service/section/SectionService.java +++ b/src/main/java/subway/service/section/SectionService.java @@ -72,7 +72,9 @@ public boolean delete(Scanner scanner) { String stationName = scanner.nextLine(); if (sectionDeletionValidation.checkSectionDeletionValidation(lineName, stationName)) { - SectionDeletionService.deleteSection(); + SectionDeletionService.deleteSection(lineName, stationName); + SectionInformationView.printSectionDeletionInformation(); + System.out.println(); return true; } return false; From 416013add95449f5e56d7d82120ccc83c8442f1c Mon Sep 17 00:00:00 2001 From: daeun Date: Tue, 15 Dec 2020 01:29:44 +0900 Subject: [PATCH 89/98] feat(section-service): delete a section MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - [지하철 구간] 지하철 노선에 포함된 역이 2개 이하인 경우 예외 처리하는 기능 구현 --- docs/README.md | 2 +- .../repository/TransitMapRepository.java | 5 ----- .../section/SectionDeletionValidation.java | 18 ++++++++++++++++++ src/main/java/subway/type/BoundaryType.java | 3 ++- src/main/java/subway/type/ExceptionType.java | 3 ++- .../output/section/SectionExceptionView.java | 5 +++++ 6 files changed, 28 insertions(+), 8 deletions(-) diff --git a/docs/README.md b/docs/README.md index b9ad96ca0..0cf351574 100644 --- a/docs/README.md +++ b/docs/README.md @@ -60,7 +60,7 @@ - [x] 해당 역이 없는 경우 삭제할 수 없다. `예외` - [x] 상행 종점역을 제거할 경우 다음 역이 종점이 된다. - [x] 하행 종점역을 제거할 경우 이전 역이 종점이 된다. - - [ ] 지하철 노선에 포함된 역이 2개 이하인 경우 역을 제거할 수 없다. `예외` + - [x] 지하철 노선에 포함된 역이 2개 이하인 경우 역을 제거할 수 없다. `예외` ### 지하철 노선도 - [x] 지하철 노선도를 조회한다. diff --git a/src/main/java/subway/repository/TransitMapRepository.java b/src/main/java/subway/repository/TransitMapRepository.java index bdb248f23..1858e4674 100644 --- a/src/main/java/subway/repository/TransitMapRepository.java +++ b/src/main/java/subway/repository/TransitMapRepository.java @@ -21,11 +21,6 @@ public static void deleteTransitMap(Line line) { transitMaps.remove(line); } - public static void deleteTransitMapStation(String lineName, String stationName) { - List transitMapStations = transitMapStationsByLine(lineName); - transitMapStations.remove(stationName); - } - public static List transitMapsLineNames() { List transitMapsLineNames = new ArrayList<>(); diff --git a/src/main/java/subway/service/section/SectionDeletionValidation.java b/src/main/java/subway/service/section/SectionDeletionValidation.java index 3815dfda5..e1012ae6e 100644 --- a/src/main/java/subway/service/section/SectionDeletionValidation.java +++ b/src/main/java/subway/service/section/SectionDeletionValidation.java @@ -1,7 +1,9 @@ package subway.service.section; import subway.repository.TransitMapRepository; +import subway.type.BoundaryType; import subway.view.output.line.LineExceptionView; +import subway.view.output.section.SectionExceptionView; import subway.view.output.station.StationExceptionView; import java.util.List; @@ -14,6 +16,9 @@ public boolean checkSectionDeletionValidation(String lineName, String stationNam if (!checkStationNameValidation(lineName, stationName)) { return false; } + if (!checkStationsInLineValidation(lineName)) { + return false; + } return true; } @@ -33,6 +38,14 @@ public boolean checkStationNameValidation(String lineName, String stationName) { return true; } + private boolean checkStationsInLineValidation(String lineName) { + if (checkExistingStationsInLine(lineName)) { + SectionExceptionView.printInvalidSectionStationsInLineException(); + return false; + } + return true; + } + public static boolean checkExistingLineNameInTransitMap(String lineName) { List transitMapsLineNames = TransitMapRepository.transitMapsLineNames(); return transitMapsLineNames.contains(lineName); @@ -42,4 +55,9 @@ public static boolean checkExistingStationNameInTransitMap(String lienName, Stri List transitMapStations = TransitMapRepository.transitMapStationsByLine(lienName); return transitMapStations.contains(stationName); } + + public static boolean checkExistingStationsInLine(String lineName) { + List transitMapStations = TransitMapRepository.transitMapStationsByLine(lineName); + return transitMapStations.size() <= BoundaryType.STATIONS_IN_LINE_BOUNDARY.getBoundary(); + } } diff --git a/src/main/java/subway/type/BoundaryType.java b/src/main/java/subway/type/BoundaryType.java index 34dc3dc93..e14bd6878 100644 --- a/src/main/java/subway/type/BoundaryType.java +++ b/src/main/java/subway/type/BoundaryType.java @@ -3,7 +3,8 @@ public enum BoundaryType { NAME_LENGTH_BOUNDARY(2), ORDER_NUMBER_BOUNDARY(1), - ORDER_REPLACEMENT_LENGTH_BOUNDARY(0); + ORDER_REPLACEMENT_LENGTH_BOUNDARY(0), + STATIONS_IN_LINE_BOUNDARY(2); private final int boundary; diff --git a/src/main/java/subway/type/ExceptionType.java b/src/main/java/subway/type/ExceptionType.java index 6fc105ac1..5d63435d9 100644 --- a/src/main/java/subway/type/ExceptionType.java +++ b/src/main/java/subway/type/ExceptionType.java @@ -18,7 +18,8 @@ public enum ExceptionType { INVALID_SECTION_ORDER_REPLACEMENT_LENGTH(ERROR.getException() + "순서는 숫자로 입력해주세요.\n"), INVALID_SECTION_ORDER_NUMBER(ERROR.getException() + "순서는 양의 정수로 입력해주세요.\n"), INVALID_SECTION_ORDER_NUMBER_BY_STATIONS( - ERROR.getException() + "순서는 노선에 있는 역 개수보다 하나 큰 수까지만 입력해주세요.\n"); + ERROR.getException() + "순서는 노선에 있는 역 개수보다 하나 큰 수까지만 입력해주세요.\n"), + INVALID_SECTION_STATIONS_IN_LINE(ERROR.getException() + "해당 노선에 포함된 역이 2개 이하이기 때문에 삭제할 수 없습니다.\n"); private final String exception; diff --git a/src/main/java/subway/view/output/section/SectionExceptionView.java b/src/main/java/subway/view/output/section/SectionExceptionView.java index 2ad26ec58..8f4be0ae1 100644 --- a/src/main/java/subway/view/output/section/SectionExceptionView.java +++ b/src/main/java/subway/view/output/section/SectionExceptionView.java @@ -22,4 +22,9 @@ public static void printInvalidSectionOrderNumberByStationsException() { System.out.println(); System.out.println(ExceptionType.INVALID_SECTION_ORDER_NUMBER_BY_STATIONS.getException()); } + + public static void printInvalidSectionStationsInLineException() { + System.out.println(); + System.out.println(ExceptionType.INVALID_SECTION_STATIONS_IN_LINE.getException()); + } } From 645ea2869a4ec7b0d0ecb2a3789ca5bb98e8e3dd Mon Sep 17 00:00:00 2001 From: daeun Date: Tue, 15 Dec 2020 01:30:32 +0900 Subject: [PATCH 90/98] docs(readme): update README.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 구현할 기능 목록 체크 --- docs/README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/README.md b/docs/README.md index 0cf351574..2b1b8e525 100644 --- a/docs/README.md +++ b/docs/README.md @@ -78,21 +78,21 @@ - [x] 역 관리 화면을 출력한다. - [x] 노선 관리 화면을 출력한다. - [x] 구간 관리 화면을 출력한다. -- [ ] 각 화면 기능에 대한 실행 결과는 `[INFO]`를 붙여서 출력한다. -- [ ] 각 화면 기능에 대한 에러 발생은 `[ERROR]`를 붙여서 출력한다. +- [x] 각 화면 기능에 대한 실행 결과는 `[INFO]`를 붙여서 출력한다. +- [x] 각 화면 기능에 대한 에러 발생은 `[ERROR]`를 붙여서 출력한다. ### 돌아가기 -- [ ] 관리/출력 화면에서 메인 화면으로 돌아간다. +- [x] 관리/출력 화면에서 메인 화면으로 돌아간다. - [x] B 문자를 입력한다. - - [ ] 기능 실행이 완료되면 자동으로 돌아간다. + - [x] 기능 실행이 완료되면 자동으로 돌아간다. ### 종료 - [x] 메인 화면에서 프로그램을 종료한다. - [x] Q 문자를 입력한다. ### 에러 -- [ ] 에러가 발생하면 다음 입력을 기다린다. - - [ ] 프로그램은 강제 종료되지 않는다. +- [x] 에러가 발생하면 다음 입력을 기다린다. + - [x] 프로그램은 강제 종료되지 않는다.
From 5357161b27a102d870e1ea3318db179d1c4e0aec Mon Sep 17 00:00:00 2001 From: daeun Date: Tue, 15 Dec 2020 04:51:47 +0900 Subject: [PATCH 91/98] refactor(subway): follow Java Code Conventions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 코드 형식 변경 - 함수명 변경 - 클래스명 변경 --- .../subway/controller/LineController.java | 3 +- .../subway/controller/SectionController.java | 3 +- .../subway/controller/StationController.java | 3 +- .../subway/controller/SubwayController.java | 3 +- .../repository/TransitMapRepository.java | 6 +-- .../java/subway/service/InputService.java | 25 --------- .../java/subway/service/SubwayService.java | 22 ++++---- .../subway/service/TransitMapService.java | 4 +- ...ce.java => AddingValidationInterface.java} | 6 +-- ....java => DeletionValidationInterface.java} | 4 +- .../{feature => }/FeatureInterface.java | 3 +- .../service/abstraction/SubwayInterface.java | 9 ++++ .../abstraction/input/InputInterface.java | 5 -- .../service/line/LineAddingValidation.java | 54 +++++++++---------- .../java/subway/service/line/LineService.java | 20 +++---- .../section/SectionAddingValidation.java | 5 +- .../section/SectionDeletionValidation.java | 27 +++++----- .../service/section/SectionInputService.java | 17 ------ .../service/section/SectionService.java | 21 ++++++-- .../station/StationAddingValidation.java | 42 +++++++-------- .../station/StationDeletionValidation.java | 4 +- .../service/station/StationService.java | 36 ++++++++++--- src/main/java/subway/type/ExceptionType.java | 4 ++ .../java/subway/type/InformationType.java | 3 ++ src/main/java/subway/type/ScreenType.java | 13 +++-- src/main/java/subway/type/TextType.java | 4 ++ 26 files changed, 179 insertions(+), 167 deletions(-) delete mode 100644 src/main/java/subway/service/InputService.java rename src/main/java/subway/service/abstraction/{validation/NameAddingValidationInterface.java => AddingValidationInterface.java} (66%) rename src/main/java/subway/service/abstraction/{validation/NameDeletionValidationInterface.java => DeletionValidationInterface.java} (50%) rename src/main/java/subway/service/abstraction/{feature => }/FeatureInterface.java (60%) create mode 100644 src/main/java/subway/service/abstraction/SubwayInterface.java delete mode 100644 src/main/java/subway/service/abstraction/input/InputInterface.java delete mode 100644 src/main/java/subway/service/section/SectionInputService.java diff --git a/src/main/java/subway/controller/LineController.java b/src/main/java/subway/controller/LineController.java index 6dcebadb0..da2446825 100644 --- a/src/main/java/subway/controller/LineController.java +++ b/src/main/java/subway/controller/LineController.java @@ -6,6 +6,7 @@ public class LineController { public static void startLine(Scanner scanner) { - LineService.manageLine(scanner); + LineService lineService = new LineService(); + lineService.manage(scanner); } } diff --git a/src/main/java/subway/controller/SectionController.java b/src/main/java/subway/controller/SectionController.java index 74415ab19..0eefc1089 100644 --- a/src/main/java/subway/controller/SectionController.java +++ b/src/main/java/subway/controller/SectionController.java @@ -6,6 +6,7 @@ public class SectionController { public static void startSection(Scanner scanner) { - SectionService.manageSection(scanner); + SectionService sectionService = new SectionService(); + sectionService.manage(scanner); } } diff --git a/src/main/java/subway/controller/StationController.java b/src/main/java/subway/controller/StationController.java index 6835a8397..622ba8384 100644 --- a/src/main/java/subway/controller/StationController.java +++ b/src/main/java/subway/controller/StationController.java @@ -6,6 +6,7 @@ public class StationController { public static void startStation(Scanner scanner) { - StationService.manageStation(scanner); + StationService stationService = new StationService(); + stationService.manage(scanner); } } diff --git a/src/main/java/subway/controller/SubwayController.java b/src/main/java/subway/controller/SubwayController.java index b1318513f..e2d78ac4d 100644 --- a/src/main/java/subway/controller/SubwayController.java +++ b/src/main/java/subway/controller/SubwayController.java @@ -20,6 +20,7 @@ public static void initializeSubway() { } public static void startSubway(Scanner scanner) { - SubwayService.manageSubway(scanner); + SubwayService subwayService = new SubwayService(); + subwayService.manage(scanner); } } diff --git a/src/main/java/subway/repository/TransitMapRepository.java b/src/main/java/subway/repository/TransitMapRepository.java index 1858e4674..f4dd2ef75 100644 --- a/src/main/java/subway/repository/TransitMapRepository.java +++ b/src/main/java/subway/repository/TransitMapRepository.java @@ -46,7 +46,7 @@ public static List> transitMapsStationNames() { return transitMapsStationNames; } - public static List transitMapStationsByLine(String lineName) { + public static List transitMapStations(String lineName) { List transitMapStations = new ArrayList<>(); for (Map.Entry> entry : transitMaps.entrySet()) { @@ -55,13 +55,13 @@ public static List transitMapStationsByLine(String lineName) { LinkedList values = entry.getValue(); if (keyName.equals(lineName)) { - transitMapStations = transitMapStations(values); + transitMapStations = getTransitMapStations(values); } } return transitMapStations; } - public static List transitMapStations(LinkedList values) { + public static List getTransitMapStations(LinkedList values) { List transitMapStations = new ArrayList<>(); for (Station value : values) { diff --git a/src/main/java/subway/service/InputService.java b/src/main/java/subway/service/InputService.java deleted file mode 100644 index 39b55f0b9..000000000 --- a/src/main/java/subway/service/InputService.java +++ /dev/null @@ -1,25 +0,0 @@ -package subway.service; - -import subway.service.abstraction.input.InputInterface; -import subway.type.InputType; -import subway.view.output.ExceptionView; - -public class InputService implements InputInterface { - @Override - public boolean isInput(String input) { - if (input.equals(InputType.INPUT_ONE.getInput())) { - return true; - } - if (input.equals(InputType.INPUT_TWO.getInput())) { - return true; - } - if (input.equals(InputType.INPUT_THREE.getInput())) { - return true; - } - if (input.equals(InputType.INPUT_BACK.getInput())) { - return true; - } - ExceptionView.printInvalidFeatureChoiceException(); - return false; - } -} diff --git a/src/main/java/subway/service/SubwayService.java b/src/main/java/subway/service/SubwayService.java index efbad6d10..e5215f8ce 100644 --- a/src/main/java/subway/service/SubwayService.java +++ b/src/main/java/subway/service/SubwayService.java @@ -4,37 +4,39 @@ import subway.controller.SectionController; import subway.controller.StationController; import subway.controller.TransitMapController; -import subway.service.abstraction.input.InputInterface; +import subway.service.abstraction.SubwayInterface; import subway.type.InputType; import subway.view.output.ExceptionView; import subway.view.output.ScreenView; import java.util.Scanner; -public class SubwayService implements InputInterface { - public static void manageSubway(Scanner scanner) { +public class SubwayService implements SubwayInterface { + @Override + public void manage(Scanner scanner) { SubwayService subwayService = new SubwayService(); while (true) { ScreenView.printMainScreen(); String mainInput = scanner.nextLine(); - if (quitSubway(mainInput)) { + + if (quit(mainInput)) { break; } - if (subwayService.isInput(mainInput)) { - chooseSubwayFeature(mainInput, scanner); + if (subwayService.check(mainInput)) { + subwayService.choose(mainInput, scanner); continue; } ExceptionView.printInvalidFeatureChoiceException(); } } - public static boolean quitSubway(String mainInput) { + public static boolean quit(String mainInput) { return mainInput.equals(InputType.INPUT_QUITTING.getInput()); } @Override - public boolean isInput(String input) { + public boolean check(String input) { if (input.equals(InputType.INPUT_ONE.getInput())) { return true; } @@ -47,7 +49,8 @@ public boolean isInput(String input) { return input.equals(InputType.INPUT_FOUR.getInput()); } - public static void chooseSubwayFeature(String input, Scanner scanner) { + @Override + public boolean choose(String input, Scanner scanner) { if (input.equals(InputType.INPUT_ONE.getInput())) { StationController.startStation(scanner); } @@ -60,5 +63,6 @@ public static void chooseSubwayFeature(String input, Scanner scanner) { if (input.equals(InputType.INPUT_FOUR.getInput())) { TransitMapController.startTransitMap(); } + return true; } } diff --git a/src/main/java/subway/service/TransitMapService.java b/src/main/java/subway/service/TransitMapService.java index 023440848..744954c82 100644 --- a/src/main/java/subway/service/TransitMapService.java +++ b/src/main/java/subway/service/TransitMapService.java @@ -31,7 +31,7 @@ public static void readTransitMap(StringBuilder stringBuilder, Map } } - public static boolean isLastKey(Line key) { + public static boolean checkLastKey(Line key) { Map> transitMaps = TransitMapRepository.transitMaps(); Line lastKey = getLastKey(transitMaps); return lastKey.equals(key); diff --git a/src/main/java/subway/service/abstraction/validation/NameAddingValidationInterface.java b/src/main/java/subway/service/abstraction/AddingValidationInterface.java similarity index 66% rename from src/main/java/subway/service/abstraction/validation/NameAddingValidationInterface.java rename to src/main/java/subway/service/abstraction/AddingValidationInterface.java index 18d3b346b..581d30269 100644 --- a/src/main/java/subway/service/abstraction/validation/NameAddingValidationInterface.java +++ b/src/main/java/subway/service/abstraction/AddingValidationInterface.java @@ -1,8 +1,8 @@ -package subway.service.abstraction.validation; +package subway.service.abstraction; -public interface NameAddingValidationInterface { +public interface AddingValidationInterface { + boolean checkAddingValidation(String name); boolean checkNameDuplication(String name); boolean checkNameLength(String name); boolean checkNameLastCharacter(String name); - boolean checkAddingValidation(String name); } diff --git a/src/main/java/subway/service/abstraction/validation/NameDeletionValidationInterface.java b/src/main/java/subway/service/abstraction/DeletionValidationInterface.java similarity index 50% rename from src/main/java/subway/service/abstraction/validation/NameDeletionValidationInterface.java rename to src/main/java/subway/service/abstraction/DeletionValidationInterface.java index 791791aa6..1925ea0ae 100644 --- a/src/main/java/subway/service/abstraction/validation/NameDeletionValidationInterface.java +++ b/src/main/java/subway/service/abstraction/DeletionValidationInterface.java @@ -1,6 +1,6 @@ -package subway.service.abstraction.validation; +package subway.service.abstraction; -public interface NameDeletionValidationInterface { +public interface DeletionValidationInterface { boolean checkNameInTransitMap(String name); boolean checkDeletionValidation(String name); } diff --git a/src/main/java/subway/service/abstraction/feature/FeatureInterface.java b/src/main/java/subway/service/abstraction/FeatureInterface.java similarity index 60% rename from src/main/java/subway/service/abstraction/feature/FeatureInterface.java rename to src/main/java/subway/service/abstraction/FeatureInterface.java index 0d4f5354b..6e839ee84 100644 --- a/src/main/java/subway/service/abstraction/feature/FeatureInterface.java +++ b/src/main/java/subway/service/abstraction/FeatureInterface.java @@ -1,9 +1,8 @@ -package subway.service.abstraction.feature; +package subway.service.abstraction; import java.util.Scanner; public interface FeatureInterface { - boolean chooseFeature(String input, Scanner scanner); boolean add(Scanner scanner); boolean delete(Scanner scanner); boolean show(); diff --git a/src/main/java/subway/service/abstraction/SubwayInterface.java b/src/main/java/subway/service/abstraction/SubwayInterface.java new file mode 100644 index 000000000..d224af1cc --- /dev/null +++ b/src/main/java/subway/service/abstraction/SubwayInterface.java @@ -0,0 +1,9 @@ +package subway.service.abstraction; + +import java.util.Scanner; + +public interface SubwayInterface { + void manage(Scanner scanner); + boolean check(String input); + boolean choose(String input, Scanner scanner); +} diff --git a/src/main/java/subway/service/abstraction/input/InputInterface.java b/src/main/java/subway/service/abstraction/input/InputInterface.java deleted file mode 100644 index 9710cbe0f..000000000 --- a/src/main/java/subway/service/abstraction/input/InputInterface.java +++ /dev/null @@ -1,5 +0,0 @@ -package subway.service.abstraction.input; - -public interface InputInterface { - boolean isInput(String input); -} diff --git a/src/main/java/subway/service/line/LineAddingValidation.java b/src/main/java/subway/service/line/LineAddingValidation.java index a39b25d7c..4850f829b 100644 --- a/src/main/java/subway/service/line/LineAddingValidation.java +++ b/src/main/java/subway/service/line/LineAddingValidation.java @@ -2,59 +2,50 @@ import subway.repository.LineRepository; import subway.repository.StationRepository; -import subway.service.abstraction.validation.NameAddingValidationInterface; +import subway.service.abstraction.AddingValidationInterface; import subway.type.BoundaryType; import subway.type.CheckType; import subway.view.output.line.LineExceptionView; import java.util.List; -public class LineAddingValidation implements NameAddingValidationInterface { - @Override - public boolean checkNameDuplication(String lineName) { - List lineNames = LineRepository.lineNames(); - return lineNames.contains(lineName); - } - - @Override - public boolean checkNameLength(String lineName) { - return lineName.length() >= BoundaryType.NAME_LENGTH_BOUNDARY.getBoundary(); - } - - @Override - public boolean checkNameLastCharacter(String lineName) { - String lastCharacter = lineName.substring(lineName.length() - 1); - return lastCharacter.equals(CheckType.LINE_CHECK.getCheck()); - } - +public class LineAddingValidation implements AddingValidationInterface { @Override public boolean checkAddingValidation(String lineName) { if (checkNameDuplication(lineName)) { LineExceptionView.printInvalidLineNameException(); return false; } - if (!checkNameLength(lineName)) { + if (checkNameLength(lineName)) { LineExceptionView.printInvalidLineNameLengthException(); return false; } - if (!checkNameLastCharacter(lineName)) { + if (checkNameLastCharacter(lineName)) { LineExceptionView.printInvalidLineNameLastCharacterException(); return false; } return true; } - public static boolean checkExistingStationNames(String upStationName, String downStationName) { - List stationNames = StationRepository.stationNames(); - return (stationNames.contains(upStationName)) && (stationNames.contains(downStationName)); + @Override + public boolean checkNameDuplication(String lineName) { + List lineNames = LineRepository.lineNames(); + return lineNames.contains(lineName); } - public static boolean checkSameStationNames(String upStationName, String downStationName) { - return upStationName.equals(downStationName); + @Override + public boolean checkNameLength(String lineName) { + return lineName.length() < BoundaryType.NAME_LENGTH_BOUNDARY.getBoundary(); + } + + @Override + public boolean checkNameLastCharacter(String lineName) { + String lastCharacter = lineName.substring(lineName.length() - 1); + return !lastCharacter.equals(CheckType.LINE_CHECK.getCheck()); } public boolean checkStationNamesAddingValidation(String upStationName, String downStationName) { - if (!checkExistingStationNames(upStationName, downStationName)) { + if (checkExistingStationNames(upStationName, downStationName)) { LineExceptionView.printInvalidLineExistingStationNamesException(); return false; } @@ -64,4 +55,13 @@ public boolean checkStationNamesAddingValidation(String upStationName, String do } return true; } + + public static boolean checkExistingStationNames(String upStationName, String downStationName) { + List stationNames = StationRepository.stationNames(); + return !((stationNames.contains(upStationName)) && (stationNames.contains(downStationName))); + } + + public static boolean checkSameStationNames(String upStationName, String downStationName) { + return upStationName.equals(downStationName); + } } diff --git a/src/main/java/subway/service/line/LineService.java b/src/main/java/subway/service/line/LineService.java index 34f2f8673..073a712d2 100644 --- a/src/main/java/subway/service/line/LineService.java +++ b/src/main/java/subway/service/line/LineService.java @@ -3,8 +3,9 @@ import subway.domain.Line; import subway.domain.Station; import subway.repository.LineRepository; -import subway.service.InputService; -import subway.service.abstraction.feature.FeatureInterface; +import subway.service.SubwayService; +import subway.service.abstraction.FeatureInterface; +import subway.service.station.StationService; import subway.type.InputType; import subway.view.input.line.LineInputView; import subway.view.output.ScreenView; @@ -14,24 +15,26 @@ import java.util.List; import java.util.Scanner; -public class LineService implements FeatureInterface { - public static void manageLine(Scanner scanner){ - InputService inputService = new InputService(); +public class LineService extends SubwayService implements FeatureInterface { + @Override + public void manage(Scanner scanner){ + StationService stationService = new StationService(); LineService lineService = new LineService(); System.out.println(); while (true) { ScreenView.printLineManagementScreen(); String lineInput = scanner.nextLine(); - if (inputService.isInput(lineInput) - && lineService.chooseFeature(lineInput, scanner)) { + + if ((stationService.check(lineInput)) + && (lineService.choose(lineInput, scanner))) { break; } } } @Override - public boolean chooseFeature(String input, Scanner scanner) { + public boolean choose(String input, Scanner scanner) { if (input.equals(InputType.INPUT_ONE.getInput())) { return add(scanner); } @@ -70,7 +73,6 @@ public boolean add(Scanner scanner) { @Override public boolean delete(Scanner scanner) { LineDeletionValidation lineNameDeletionValidation = new LineDeletionValidation(); - List lines = LineRepository.lines(); LineTextView.printLineDeletionText(); String lineName = scanner.nextLine(); diff --git a/src/main/java/subway/service/section/SectionAddingValidation.java b/src/main/java/subway/service/section/SectionAddingValidation.java index 0828caf46..c4510c205 100644 --- a/src/main/java/subway/service/section/SectionAddingValidation.java +++ b/src/main/java/subway/service/section/SectionAddingValidation.java @@ -11,10 +11,7 @@ public boolean checkSectionAddingValidation(Section section) { if (!checkNamesValidation(section.getLineName(), section.getStationName())) { return false; } - if (!checkOrderValidation(section.getLineName(), section.getOrder())) { - return false; - } - return true; + return checkOrderValidation(section.getLineName(), section.getOrder()); } public boolean checkNamesValidation(String lineName, String stationName) { diff --git a/src/main/java/subway/service/section/SectionDeletionValidation.java b/src/main/java/subway/service/section/SectionDeletionValidation.java index e1012ae6e..53cc2fbcd 100644 --- a/src/main/java/subway/service/section/SectionDeletionValidation.java +++ b/src/main/java/subway/service/section/SectionDeletionValidation.java @@ -16,10 +16,7 @@ public boolean checkSectionDeletionValidation(String lineName, String stationNam if (!checkStationNameValidation(lineName, stationName)) { return false; } - if (!checkStationsInLineValidation(lineName)) { - return false; - } - return true; + return checkStationsInLineValidation(lineName); } public boolean checkLineNameValidation(String lineName) { @@ -30,6 +27,11 @@ public boolean checkLineNameValidation(String lineName) { return true; } + public static boolean checkExistingLineNameInTransitMap(String lineName) { + List transitMapsLineNames = TransitMapRepository.transitMapsLineNames(); + return transitMapsLineNames.contains(lineName); + } + public boolean checkStationNameValidation(String lineName, String stationName) { if (!checkExistingStationNameInTransitMap(lineName, stationName)) { StationExceptionView.printInvalidStationNameExistenceException(); @@ -38,6 +40,11 @@ public boolean checkStationNameValidation(String lineName, String stationName) { return true; } + public static boolean checkExistingStationNameInTransitMap(String lienName, String stationName) { + List transitMapStations = TransitMapRepository.transitMapStations(lienName); + return transitMapStations.contains(stationName); + } + private boolean checkStationsInLineValidation(String lineName) { if (checkExistingStationsInLine(lineName)) { SectionExceptionView.printInvalidSectionStationsInLineException(); @@ -46,18 +53,8 @@ private boolean checkStationsInLineValidation(String lineName) { return true; } - public static boolean checkExistingLineNameInTransitMap(String lineName) { - List transitMapsLineNames = TransitMapRepository.transitMapsLineNames(); - return transitMapsLineNames.contains(lineName); - } - - public static boolean checkExistingStationNameInTransitMap(String lienName, String stationName) { - List transitMapStations = TransitMapRepository.transitMapStationsByLine(lienName); - return transitMapStations.contains(stationName); - } - public static boolean checkExistingStationsInLine(String lineName) { - List transitMapStations = TransitMapRepository.transitMapStationsByLine(lineName); + List transitMapStations = TransitMapRepository.transitMapStations(lineName); return transitMapStations.size() <= BoundaryType.STATIONS_IN_LINE_BOUNDARY.getBoundary(); } } diff --git a/src/main/java/subway/service/section/SectionInputService.java b/src/main/java/subway/service/section/SectionInputService.java deleted file mode 100644 index b2652c797..000000000 --- a/src/main/java/subway/service/section/SectionInputService.java +++ /dev/null @@ -1,17 +0,0 @@ -package subway.service.section; - -import subway.service.abstraction.input.InputInterface; -import subway.type.InputType; - -public class SectionInputService implements InputInterface { - @Override - public boolean isInput(String input) { - if (input.equals(InputType.INPUT_ONE.getInput())) { - return true; - } - if (input.equals(InputType.INPUT_TWO.getInput())) { - return true; - } - return input.equals(InputType.INPUT_BACK.getInput()); - } -} diff --git a/src/main/java/subway/service/section/SectionService.java b/src/main/java/subway/service/section/SectionService.java index b9064c556..c5dca78ed 100644 --- a/src/main/java/subway/service/section/SectionService.java +++ b/src/main/java/subway/service/section/SectionService.java @@ -12,17 +12,17 @@ import java.util.Scanner; public class SectionService extends StationService { - public static void manageSection(Scanner scanner) { + @Override + public void manage(Scanner scanner) { SectionService sectionService = new SectionService(); - SectionInputService sectionInputService = new SectionInputService(); System.out.println(); while (true) { ScreenView.printSectionManagementScreen(); String sectionInput = scanner.nextLine(); - if (sectionInputService.isInput(sectionInput)) { - sectionService.chooseFeature(sectionInput, scanner); + if (sectionService.check(sectionInput)) { + sectionService.choose(sectionInput, scanner); break; } ExceptionView.printInvalidFeatureChoiceException(); @@ -30,7 +30,18 @@ public static void manageSection(Scanner scanner) { } @Override - public boolean chooseFeature(String input, Scanner scanner) { + public boolean check(String input) { + if (input.equals(InputType.INPUT_ONE.getInput())) { + return true; + } + if (input.equals(InputType.INPUT_TWO.getInput())) { + return true; + } + return input.equals(InputType.INPUT_BACK.getInput()); + } + + @Override + public boolean choose(String input, Scanner scanner) { if (input.equals(InputType.INPUT_ONE.getInput())) { return add(scanner); } diff --git a/src/main/java/subway/service/station/StationAddingValidation.java b/src/main/java/subway/service/station/StationAddingValidation.java index fcced98e5..e045f2eec 100644 --- a/src/main/java/subway/service/station/StationAddingValidation.java +++ b/src/main/java/subway/service/station/StationAddingValidation.java @@ -1,45 +1,45 @@ package subway.service.station; import subway.repository.StationRepository; -import subway.service.abstraction.validation.NameAddingValidationInterface; +import subway.service.abstraction.AddingValidationInterface; import subway.type.BoundaryType; import subway.type.CheckType; import subway.view.output.station.StationExceptionView; import java.util.List; -public class StationAddingValidation implements NameAddingValidationInterface { - @Override - public boolean checkNameDuplication(String stationName) { - List stationNames = StationRepository.stationNames(); - return stationNames.contains(stationName); - } - - @Override - public boolean checkNameLength(String stationName) { - return stationName.length() >= BoundaryType.NAME_LENGTH_BOUNDARY.getBoundary(); - } - - @Override - public boolean checkNameLastCharacter(String stationName) { - String lastCharacter = stationName.substring(stationName.length() - 1); - return lastCharacter.equals(CheckType.STATION_CHECK.getCheck()); - } - +public class StationAddingValidation implements AddingValidationInterface { @Override public boolean checkAddingValidation(String stationName) { if (checkNameDuplication(stationName)) { StationExceptionView.printInvalidStationNameException(); return false; } - if (!checkNameLength(stationName)) { + if (checkNameLength(stationName)) { StationExceptionView.printInvalidStationNameLengthException(); return false; } - if (!checkNameLastCharacter(stationName)) { + if (checkNameLastCharacter(stationName)) { StationExceptionView.printInvalidStationNameLastCharacterException(); return false; } return true; } + + @Override + public boolean checkNameDuplication(String stationName) { + List stationNames = StationRepository.stationNames(); + return stationNames.contains(stationName); + } + + @Override + public boolean checkNameLength(String stationName) { + return stationName.length() < BoundaryType.NAME_LENGTH_BOUNDARY.getBoundary(); + } + + @Override + public boolean checkNameLastCharacter(String stationName) { + String lastCharacter = stationName.substring(stationName.length() - 1); + return !lastCharacter.equals(CheckType.STATION_CHECK.getCheck()); + } } diff --git a/src/main/java/subway/service/station/StationDeletionValidation.java b/src/main/java/subway/service/station/StationDeletionValidation.java index 38b1ea65a..e63e391e5 100644 --- a/src/main/java/subway/service/station/StationDeletionValidation.java +++ b/src/main/java/subway/service/station/StationDeletionValidation.java @@ -2,13 +2,13 @@ import subway.repository.StationRepository; import subway.repository.TransitMapRepository; -import subway.service.abstraction.validation.NameDeletionValidationInterface; +import subway.service.abstraction.DeletionValidationInterface; import subway.view.output.station.StationExceptionView; import java.util.LinkedList; import java.util.List; -public class StationDeletionValidation implements NameDeletionValidationInterface { +public class StationDeletionValidation implements DeletionValidationInterface { @Override public boolean checkNameInTransitMap(String stationName) { List> transitMapsStationsNames diff --git a/src/main/java/subway/service/station/StationService.java b/src/main/java/subway/service/station/StationService.java index 4101afcbd..6de9e54a8 100644 --- a/src/main/java/subway/service/station/StationService.java +++ b/src/main/java/subway/service/station/StationService.java @@ -2,9 +2,10 @@ import subway.domain.Station; import subway.repository.StationRepository; -import subway.service.InputService; -import subway.service.abstraction.feature.FeatureInterface; +import subway.service.SubwayService; +import subway.service.abstraction.FeatureInterface; import subway.type.InputType; +import subway.view.output.ExceptionView; import subway.view.output.station.StationInformationView; import subway.view.output.ScreenView; import subway.view.output.station.StationTextView; @@ -12,24 +13,43 @@ import java.util.List; import java.util.Scanner; -public class StationService implements FeatureInterface { - public static void manageStation(Scanner scanner) { - InputService inputService = new InputService(); +public class StationService extends SubwayService implements FeatureInterface { + @Override + public void manage(Scanner scanner) { StationService stationService = new StationService(); System.out.println(); while (true) { ScreenView.printStationManagementScreen(); String stationInput = scanner.nextLine(); - if ((inputService.isInput(stationInput)) - && (stationService.chooseFeature(stationInput, scanner))) { + + if ((stationService.check(stationInput)) + && (stationService.choose(stationInput, scanner))) { break; } } } @Override - public boolean chooseFeature(String input, Scanner scanner) { + public boolean check(String input) { + if (input.equals(InputType.INPUT_ONE.getInput())) { + return true; + } + if (input.equals(InputType.INPUT_TWO.getInput())) { + return true; + } + if (input.equals(InputType.INPUT_THREE.getInput())) { + return true; + } + if (input.equals(InputType.INPUT_BACK.getInput())) { + return true; + } + ExceptionView.printInvalidFeatureChoiceException(); + return false; + } + + @Override + public boolean choose(String input, Scanner scanner) { if (input.equals(InputType.INPUT_ONE.getInput())) { return add(scanner); } diff --git a/src/main/java/subway/type/ExceptionType.java b/src/main/java/subway/type/ExceptionType.java index 5d63435d9..094c9d74f 100644 --- a/src/main/java/subway/type/ExceptionType.java +++ b/src/main/java/subway/type/ExceptionType.java @@ -2,18 +2,22 @@ public enum ExceptionType { ERROR("[ERROR] "), + INVALID_FEATURE_CHOICE(ERROR.getException() + "선택할 수 없는 기능입니다.\n"), + INVALID_STATION_NAME(ERROR.getException() + "이미 등록된 역 이름입니다.\n"), INVALID_STATION_NAME_LENGTH(ERROR.getException() + "2글자 이상의 역 이름을 입력해주세요.\n"), INVALID_STATION_NAME_LAST_CHARACTER(ERROR.getException() + "'역'으로 끝나는 역 이름을 입력해주세요.\n"), INVALID_STATION_NAME_IN_TRANSIT_MAP(ERROR.getException() + "해당 역은 지하철 노선에 등록되어 있어 삭제할 수 없습니다.\n"), INVALID_STATION_NAME_EXISTENCE(ERROR.getException() + "해당 역이 존재하지 않습니다.\n"), + INVALID_LINE_NAME(ERROR.getException() + "이미 등록된 노선 이름입니다.\n"), INVALID_LINE_NAME_LENGTH(ERROR.getException() + "2글자 이상의 노선 이름을 입력해주세요.\n"), INVALID_LINE_NAME_LAST_CHARACTER(ERROR.getException() + "'선'으로 끝나는 노선 이름을 입력해주세요.\n"), INVALID_LINE_EXISTING_STATION_NAMES(ERROR.getException() + "상행 종점역과 하행 종점역은 지하철 역 목록에 존재해야 합니다.\n"), INVALID_LINE_SAME_STATION_NAMES(ERROR.getException() + "상행 종점역과 하행 종점역은 서로 달라야 합니다.\n"), INVALID_LINE_NAME_EXISTENCE(ERROR.getException() + "해당 노선이 존재하지 않습니다.\n"), + INVALID_SECTION_EXISTING_STATION_NAME_IN_LINE(ERROR.getException() + "해당 역은 이미 노선에 존재합니다.\n"), INVALID_SECTION_ORDER_REPLACEMENT_LENGTH(ERROR.getException() + "순서는 숫자로 입력해주세요.\n"), INVALID_SECTION_ORDER_NUMBER(ERROR.getException() + "순서는 양의 정수로 입력해주세요.\n"), diff --git a/src/main/java/subway/type/InformationType.java b/src/main/java/subway/type/InformationType.java index 6825115ce..594eb716a 100644 --- a/src/main/java/subway/type/InformationType.java +++ b/src/main/java/subway/type/InformationType.java @@ -2,10 +2,13 @@ public enum InformationType { INFORMATION("[INFO] "), + STATION_ADDING_INFORMATION(INFORMATION.getInformation() + "지하철 역이 등록되었습니다."), STATION_DELETION_INFORMATION(INFORMATION.getInformation() + "지하철 역이 삭제되었습니다."), + LINE_ADDING_INFORMATION(INFORMATION.getInformation() + "지하철 노선이 등록되었습니다."), LINE_DELETION_INFORMATION(INFORMATION.getInformation() + "지하철 노선이 삭제되었습니다."), + SECTION_ADDING_INFORMATION(INFORMATION.getInformation() + "구간이 등록되었습니다."), SECTION_DELETION_INFORMATION(INFORMATION.getInformation() + "구간이 삭제되었습니다."); diff --git a/src/main/java/subway/type/ScreenType.java b/src/main/java/subway/type/ScreenType.java index 66d8906c0..b3cacd03c 100644 --- a/src/main/java/subway/type/ScreenType.java +++ b/src/main/java/subway/type/ScreenType.java @@ -9,20 +9,25 @@ public enum ScreenType { LINE_MANAGEMENT("2. 노선 관리\n"), SECTION_MANAGEMENT("3. 구간 관리\n"), SUBWAY_MAP_PRINT("4. 지하철 노선도 출력\n"), - QUITTING("Q. 종료\n\n"), - FEATURE_CHOICE("## 원하는 기능을 선택하세요."), + STATION_MANAGEMENT_SCREEN("## 역 관리 화면\n"), STATION_ADDING("1. 역 등록\n"), STATION_DELETION("2. 역 삭제\n"), STATION_PRINT("3. 역 조회\n"), - BACK("B. 돌아가기\n\n"), + LINE_MANAGEMENT_SCREEN("## 노선 관리 화면\n"), LINE_ADDING("1. 노선 등록\n"), LINE_DELETION("2. 노선 삭제\n"), LINE_PRINT("3. 노선 조회\n"), + SECTION_MANAGEMENT_SCREEN("## 구간 관리 화면\n"), SECTION_ADDING("1. 구간 등록\n"), - SECTION_DELETION("2. 구간 삭제\n"); + SECTION_DELETION("2. 구간 삭제\n"), + + QUITTING("Q. 종료\n\n"), + BACK("B. 돌아가기\n\n"), + + FEATURE_CHOICE("## 원하는 기능을 선택하세요."); private final String screen; diff --git a/src/main/java/subway/type/TextType.java b/src/main/java/subway/type/TextType.java index 36404627f..f2fb81913 100644 --- a/src/main/java/subway/type/TextType.java +++ b/src/main/java/subway/type/TextType.java @@ -3,19 +3,23 @@ public enum TextType { NEW_LINE("\n"), HORIZONTAL_LINES("---"), + STATION_ADDING_TEXT("## 등록할 역 이름을 입력하세요."), STATION_DELETION_TEXT("## 삭제할 역 이름을 입력하세요."), STATION_NAME_TEXT("## 역 목록"), + LINE_ADDING_TEXT("## 등록할 노선 이름을 입력하세요."), LINE_UP_STATION_NAME_TEXT("## 등록할 노선의 상행 종점역 이름을 입력하세요."), LINE_DOWN_STATION_NAME_TEXT("## 등록할 노선의 하행 종점역 이름을 입력하세요."), LINE_DELETION_TEXT("## 삭제할 노선 이름을 입력하세요."), LINE_NAME_TEXT("## 노선 목록"), + SECTION_ADDING_LINE_TEXT("## 노선을 입력하세요."), SECTION_ADDING_STATION_TEXT("## 역이름을 입력하세요."), SECTION_ADDING_ORDER_TEXT("## 순서를 입력하세요."), SECTION_DELETION_LINE_TEXT("## 삭제할 구간의 노선을 입력하세요."), SECTION_DELETION_STATION_TEXT("## 삭제할 구간의 역을 입력하세요."), + TRANSIT_MAP_TEXT("## 지하철 노선도"); private final String text; From 608045e46af7202d738320c183c82576da98e420 Mon Sep 17 00:00:00 2001 From: daeun Date: Tue, 15 Dec 2020 05:04:51 +0900 Subject: [PATCH 92/98] docs(readme): update README.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 확인할 프로그래밍 목록 체크 --- docs/README.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/README.md b/docs/README.md index 2b1b8e525..aab28192e 100644 --- a/docs/README.md +++ b/docs/README.md @@ -98,15 +98,15 @@ ## ✅ 확인할 프로그래밍 목록 ### 요구사항 -- [ ] 자바 코드 컨벤션을 지키면서 프로그래밍한다. - - [ ] 들여쓰기는 `4 spaces`로 한다. -- [ ] (1 <= indent depth) && (indent depth <= 2)이다. -- [ ] 3항 연산자를 쓰지 않는다. -- [ ] 함수의 길이는 `15라인`을 넘지 않는다. - - [ ] 함수가 한 가지 일만 하도록 최대한 작게 만든다. -- [ ] else 예약어를 쓰지 않는다. - - [ ] `early return`하는 코드를 작성한다. - - [ ] switch/case 문도 사용하지 않는다. +- [x] 자바 코드 컨벤션을 지키면서 프로그래밍한다. + - [x] 들여쓰기는 `4 spaces`로 한다. +- [x] (1 <= indent depth) && (indent depth <= 2)이다. +- [x] 3항 연산자를 쓰지 않는다. +- [x] 함수의 길이는 `15라인`을 넘지 않는다. + - [x] 함수가 한 가지 일만 하도록 최대한 작게 만든다. +- [x] else 예약어를 쓰지 않는다. + - [x] `early return`하는 코드를 작성한다. + - [x] switch/case 문도 사용하지 않는다. ### 추가사항 - [ ] 코드 리팩토링을 진행한다. From 9a9445738b7e853cc2a8acca8199bf8d039515f4 Mon Sep 17 00:00:00 2001 From: daeun Date: Tue, 15 Dec 2020 05:42:45 +0900 Subject: [PATCH 93/98] docs(readme): update README.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 구현할 기능 목록 수정 --- docs/README.md | 105 ++++++++++++++++++++++++++++++++----------------- 1 file changed, 70 insertions(+), 35 deletions(-) diff --git a/docs/README.md b/docs/README.md index aab28192e..481f175c1 100644 --- a/docs/README.md +++ b/docs/README.md @@ -17,50 +17,30 @@ - [x] 신분당선에는 `상행 종점` 강남역 - 양재역 - 양재시민의숲역 `하행 종점`을 등록한다. ### 지하철 역 -- [x] 지하철 역을 등록한다. - - [x] 지하철 역 이름은 중복될 수 없다. `예외` - - [x] 지하철 역 이름은 2글자 이상이어야 한다. `예외` - - [x] 지하철 역 이름은 '역'으로 끝나야 한다. `예외` -- [x] 지하철 역을 삭제한다. - - [x] 지하철 역이 지하철 노선에 등록된 경우 삭제할 수 없다. `예외` - - [x] 삭제할 역이 없는 경우 삭제할 수 없다. `예외` +- [x] 지하철 역을 등록한다. [`예외 1`](#exception1) +- [x] 지하철 역을 삭제한다. [`예외 2`](#exception2) - [x] 지하철 역의 목록을 조회한다. ### 지하철 노선 -- [x] 지하철 노선을 등록한다. - - [x] 지하철 노선 이름은 중복될 수 없다. `예외` - - [x] 지하철 노선 이름은 2글자 이상이어야 한다. `예외` - - [x] 지하철 노선 이름은 '선'으로 끝나야 한다. `예외` - - [x] 지하철 노선을 등록할 때 상행 종점역과 하행 종점역을 입력한다. - - [x] 상행 종점역과 하행 종점역은 지하철 역에 존재해야 한다. `예외` - - [x] 상행 종점역과 하행 종점역은 달라야 한다. `예외` -- [x] 지하철 노선을 삭제한다. - - [x] 삭제할 노선이 없는 경우 삭제할 수 없다. `예외` +- [x] 지하철 노선을 등록한다. [`예외 3`](#exception3) + - [x] 지하철 노선 등록 시 상행 종점역과 하행 종점역을 입력한다. [`예외 4`](#exception4) +- [x] 지하철 노선을 삭제한다. [`예외 5`](#exception5) - [x] 지하철 노선의 목록을 조회한다. ### 지하철 구간 - [x] 지하철 구간을 추가한다. - [x] 하나의 역은 여러 개의 노선에 추가될 수 있다. - [x] 새로운 역은 역과 역 사이에 추가될 수 있다. - - [x] 새로운 역을 삽입할 노선을 입력한다. - - [x] 삽입할 노선이 없는 경우 삽입할 수 없다. `예외` - - [x] 새로운 역의 이름을 입력한다. - - [x] 해당 역이 없는 경우 삽입할 수 없다. `예외` - - [x] 해당 역이 이미 노선에 존재하는 경우 삽입할 수 없다. `예외` - - [x] 새로운 역의 순서를 입력한다. - - [x] 순서는 문자일 수 없다. `예외` - - [x] 순서는 음수 또는 0일 수 없다. `예외` - - [x] 순서는 노선에 있는 역 개수보다 하나 큰 수까지만 가능하다. `예외` + - [x] 새로운 역을 삽입할 노선을 입력한다. [`예외 6`](#exception6) + - [x] 새로운 역의 이름을 입력한다. [`예외 7`](#exception7) + - [x] 새로운 역의 순서를 입력한다. [`예외 8`](#exception8) - [x] 지하철 노선에 갈래길은 생길 수 없다. - [x] 지하철 구간을 삭제한다. - - [x] 지하철 노선에 등록된 역을 제거할 수 있다. - - [x] 삭제할 구간의 노선을 입력한다. - - [x] 해당 노선이 없는 경우 삭제할 수 없다. `예외` - - [x] 삭제할 구간의 역을 입력한다. - - [x] 해당 역이 없는 경우 삭제할 수 없다. `예외` + - [x] 지하철 노선에 등록된 역을 제거할 수 있다. [`예외 9`](#exception9) + - [x] 삭제할 구간의 노선을 입력한다. [`예외 10`](#exception10) + - [x] 삭제할 구간의 역을 입력한다. [`예외 11`](#exception11) - [x] 상행 종점역을 제거할 경우 다음 역이 종점이 된다. - [x] 하행 종점역을 제거할 경우 이전 역이 종점이 된다. - - [x] 지하철 노선에 포함된 역이 2개 이하인 경우 역을 제거할 수 없다. `예외` ### 지하철 노선도 - [x] 지하철 노선도를 조회한다. @@ -68,10 +48,10 @@ ### 입출력 #### 입력 -- [x] 메인 화면에서 1~4 숫자 또는 Q 문자만 입력한다. `예외` -- [x] 역 관리 화면에서 1~3 숫자 또는 B 문자만 입력한다. `예외` -- [x] 노선 관리 화면에서 1~3 숫자 또는 B 문자만 입력한다. `예외` -- [x] 구간 관리 화면에서 1~2 숫자 또는 B 문자만 입력한다. `예외` +- [x] 메인 화면에서 1~4 숫자 또는 Q 문자만 입력한다. [`예외 12`](#exception12) +- [x] 역 관리 화면에서 1~3 숫자 또는 B 문자만 입력한다. [`예외 13`](#exception13) +- [x] 노선 관리 화면에서 1~3 숫자 또는 B 문자만 입력한다. [`예외 14`](#exception14) +- [x] 구간 관리 화면에서 1~2 숫자 또는 B 문자만 입력한다. [`예외 15`](#exception15) #### 출력 - [x] 메인 화면을 출력한다. @@ -94,6 +74,61 @@ - [x] 에러가 발생하면 다음 입력을 기다린다. - [x] 프로그램은 강제 종료되지 않는다. +### 예외 처리 +#### `예외 1` +- [x] 지하철 역 이름이 중복되는 경우 +- [x] 지하철 역 이름은 2글자 미만인 경우 +- [x] 지하철 역 이름이 '역'으로 끝나지 않는 경우 + +#### `예외 2` +- [x] 지하철 역이 지하철 노선에 등록된 경우 +- [x] 삭제할 역이 없는 경우 + +#### `예외 3` +- [x] 지하철 노선 이름이 중복되는 경우 +- [x] 지하철 노선 이름이 2글자 미만인 경우 +- [x] 지하철 노선 이름이 '선'으로 끝나지 않는 경우 + +#### `예외 4` +- [x] 상행 종점역과 하행 종점역이 지하철 역에 존재하지 않는 경우 +- [x] 상행 종점역과 하행 종점역이 같은 경우 + +#### `예외 5` +- [x] 삭제할 노선이 없는 경우 + +#### `예외 6` +- [x] 삽입할 노선이 없는 경우 + +#### `에외 7` +- [x] 해당 역이 없는 경우 +- [x] 해당 역이 이미 노선에 존재하는 경우 + +#### `예외 8` +- [x] 순서가 문자인 경우 +- [x] 순서가 음수 또는 0인 경우 +- [x] 순서가 노선에 있는 역 개수+1 보다 큰 수인 경우 + +#### `예외 9` +- [x] 지하철 노선에 포함된 역이 2개 이하인 경우 + +#### `예외 10` +- [x] 해당 노선이 없는 경우 + +#### `예외 11` +- [x] 해당 역이 없는 경우 + +#### `예외 12` +- [x] 메인 화면에서 1~4 숫자 또는 Q 문자 이외를 입력하는 경우 + +#### `예외 13` +- [x] 역 관리 화면에서 1~3 숫자 또는 B 문자 이외를 입력하는 경우 + +#### `예외 14` +- [x] 노선 관리 화면에서 1~3 숫자 또는 B 문자 이외를 입력하는 경우 + +#### `예외 15` +- [x] 구간 관리 화면에서 1~2 숫자 또는 B 문자 이외를 입력하는 경우 +
## ✅ 확인할 프로그래밍 목록 From 01e0b67125c0ea47083659ebf1b01457270a18b6 Mon Sep 17 00:00:00 2001 From: daeun Date: Tue, 15 Dec 2020 14:54:36 +0900 Subject: [PATCH 94/98] refactor(subway): follow the feedback MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 코드 형식 변경 - 함수명 변경 - 함수 분리 - 클래스명 변경 - 클래스 분리 --- .../subway/controller/SubwayController.java | 2 +- .../controller/TransitMapController.java | 2 +- src/main/java/subway/domain/Stations.java | 19 ++++ .../AddingValidationInterface.java | 8 -- .../DeletionValidationInterface.java | 6 -- .../java/subway/service/line/LineService.java | 57 ++++++------ .../LineAdditionService.java} | 21 +++-- .../LineAdditionValidation.java} | 26 ++++-- .../{ => deletion}/LineDeletionService.java | 4 +- .../LineDeletionValidation.java | 6 +- .../LineShowService.java} | 12 +-- .../service/section/SectionAddingService.java | 74 ---------------- .../section/SectionAddingValidation.java | 48 ----------- .../service/section/SectionService.java | 30 ++++--- .../addition/SectionAdditionService.java | 41 +++++++++ .../addition/SectionAdditionValidation.java | 86 +++++++++++++++++++ .../SectionDeletionService.java | 2 +- .../SectionDeletionValidation.java | 16 ++-- .../service/station/StationService.java | 66 ++++---------- .../StationAdditionValidation.java} | 7 +- .../StationAdditionValidationInterface.java | 8 ++ .../StationDeletionValidation.java | 31 ++++--- .../StationDeletionValidationInterface.java | 6 ++ .../station/show/StationShowInterface.java | 9 ++ .../StationShowService.java} | 13 +-- .../service/subway/SubwayInterface.java | 7 ++ .../service/{ => subway}/SubwayService.java | 26 +++--- .../service/transitmap/TransitMapService.java | 19 ++++ .../show/TransitMapShowService.java} | 12 +-- .../FeatureInterface.java | 2 +- .../StateInterface.java} | 5 +- .../subway/service/util/StateService.java | 47 ++++++++++ src/main/java/subway/type/BoundaryType.java | 2 + src/main/java/subway/type/ExceptionType.java | 12 ++- .../java/subway/type/InformationType.java | 6 +- src/main/java/subway/type/ScreenType.java | 12 +-- src/main/java/subway/type/TextType.java | 14 +-- .../{LineInputView.java => LineScanView.java} | 2 +- ...ionInputView.java => SectionScanView.java} | 2 +- .../view/output/line/LineExceptionView.java | 4 +- .../view/output/line/LineInformationView.java | 4 +- .../subway/view/output/line/LineTextView.java | 2 +- .../output/section/SectionExceptionView.java | 9 +- .../section/SectionInformationView.java | 4 +- .../view/output/section/SectionTextView.java | 6 +- .../station/StationInformationView.java | 4 +- .../view/output/station/StationTextView.java | 2 +- .../FeatureExceptionView.java} | 4 +- .../view/output/{ => util}/ScreenView.java | 14 +-- .../subway/view/output/util/StateView.java | 8 ++ 50 files changed, 462 insertions(+), 367 deletions(-) create mode 100644 src/main/java/subway/domain/Stations.java delete mode 100644 src/main/java/subway/service/abstraction/AddingValidationInterface.java delete mode 100644 src/main/java/subway/service/abstraction/DeletionValidationInterface.java rename src/main/java/subway/service/line/{LineAddingService.java => addition/LineAdditionService.java} (70%) rename src/main/java/subway/service/line/{LineAddingValidation.java => addition/LineAdditionValidation.java} (67%) rename src/main/java/subway/service/line/{ => deletion}/LineDeletionService.java (87%) rename src/main/java/subway/service/line/{ => deletion}/LineDeletionValidation.java (68%) rename src/main/java/subway/service/line/{LineNameService.java => show/LineShowService.java} (69%) delete mode 100644 src/main/java/subway/service/section/SectionAddingService.java delete mode 100644 src/main/java/subway/service/section/SectionAddingValidation.java create mode 100644 src/main/java/subway/service/section/addition/SectionAdditionService.java create mode 100644 src/main/java/subway/service/section/addition/SectionAdditionValidation.java rename src/main/java/subway/service/section/{ => deletion}/SectionDeletionService.java (96%) rename src/main/java/subway/service/section/{ => deletion}/SectionDeletionValidation.java (74%) rename src/main/java/subway/service/station/{StationAddingValidation.java => addition/StationAdditionValidation.java} (85%) create mode 100644 src/main/java/subway/service/station/addition/StationAdditionValidationInterface.java rename src/main/java/subway/service/station/{ => deletion}/StationDeletionValidation.java (80%) create mode 100644 src/main/java/subway/service/station/deletion/StationDeletionValidationInterface.java create mode 100644 src/main/java/subway/service/station/show/StationShowInterface.java rename src/main/java/subway/service/station/{StationNameService.java => show/StationShowService.java} (68%) create mode 100644 src/main/java/subway/service/subway/SubwayInterface.java rename src/main/java/subway/service/{ => subway}/SubwayService.java (85%) create mode 100644 src/main/java/subway/service/transitmap/TransitMapService.java rename src/main/java/subway/service/{TransitMapService.java => transitmap/show/TransitMapShowService.java} (86%) rename src/main/java/subway/service/{abstraction => util}/FeatureInterface.java (81%) rename src/main/java/subway/service/{abstraction/SubwayInterface.java => util/StateInterface.java} (52%) create mode 100644 src/main/java/subway/service/util/StateService.java rename src/main/java/subway/view/input/line/{LineInputView.java => LineScanView.java} (95%) rename src/main/java/subway/view/input/section/{SectionInputView.java => SectionScanView.java} (94%) rename src/main/java/subway/view/output/{ExceptionView.java => util/FeatureExceptionView.java} (75%) rename src/main/java/subway/view/output/{ => util}/ScreenView.java (78%) create mode 100644 src/main/java/subway/view/output/util/StateView.java diff --git a/src/main/java/subway/controller/SubwayController.java b/src/main/java/subway/controller/SubwayController.java index e2d78ac4d..e890e8e31 100644 --- a/src/main/java/subway/controller/SubwayController.java +++ b/src/main/java/subway/controller/SubwayController.java @@ -1,6 +1,6 @@ package subway.controller; -import subway.service.SubwayService; +import subway.service.subway.SubwayService; import subway.service.initialization.LineInitialization; import subway.service.initialization.StationInitialization; import subway.service.initialization.TransitMapInitialization; diff --git a/src/main/java/subway/controller/TransitMapController.java b/src/main/java/subway/controller/TransitMapController.java index 1d86c6f0b..7158d2f02 100644 --- a/src/main/java/subway/controller/TransitMapController.java +++ b/src/main/java/subway/controller/TransitMapController.java @@ -1,6 +1,6 @@ package subway.controller; -import subway.service.TransitMapService; +import subway.service.transitmap.TransitMapService; public class TransitMapController { public static void startTransitMap() { diff --git a/src/main/java/subway/domain/Stations.java b/src/main/java/subway/domain/Stations.java new file mode 100644 index 000000000..6498dc9b9 --- /dev/null +++ b/src/main/java/subway/domain/Stations.java @@ -0,0 +1,19 @@ +package subway.domain; + +public class Stations { + private final String upStationName; + private final String downStationName; + + public Stations(String upStationName, String downStationName) { + this.upStationName = upStationName; + this.downStationName = downStationName; + } + + public String getUpStationName() { + return upStationName; + } + + public String getDownStationName() { + return downStationName; + } +} diff --git a/src/main/java/subway/service/abstraction/AddingValidationInterface.java b/src/main/java/subway/service/abstraction/AddingValidationInterface.java deleted file mode 100644 index 581d30269..000000000 --- a/src/main/java/subway/service/abstraction/AddingValidationInterface.java +++ /dev/null @@ -1,8 +0,0 @@ -package subway.service.abstraction; - -public interface AddingValidationInterface { - boolean checkAddingValidation(String name); - boolean checkNameDuplication(String name); - boolean checkNameLength(String name); - boolean checkNameLastCharacter(String name); -} diff --git a/src/main/java/subway/service/abstraction/DeletionValidationInterface.java b/src/main/java/subway/service/abstraction/DeletionValidationInterface.java deleted file mode 100644 index 1925ea0ae..000000000 --- a/src/main/java/subway/service/abstraction/DeletionValidationInterface.java +++ /dev/null @@ -1,6 +0,0 @@ -package subway.service.abstraction; - -public interface DeletionValidationInterface { - boolean checkNameInTransitMap(String name); - boolean checkDeletionValidation(String name); -} diff --git a/src/main/java/subway/service/line/LineService.java b/src/main/java/subway/service/line/LineService.java index 073a712d2..00a482082 100644 --- a/src/main/java/subway/service/line/LineService.java +++ b/src/main/java/subway/service/line/LineService.java @@ -2,13 +2,20 @@ import subway.domain.Line; import subway.domain.Station; +import subway.domain.Stations; import subway.repository.LineRepository; -import subway.service.SubwayService; -import subway.service.abstraction.FeatureInterface; -import subway.service.station.StationService; +import subway.service.util.StateService; +import subway.service.subway.SubwayService; +import subway.service.util.FeatureInterface; +import subway.service.line.addition.LineAdditionService; +import subway.service.line.addition.LineAdditionValidation; +import subway.service.line.deletion.LineDeletionService; +import subway.service.line.deletion.LineDeletionValidation; +import subway.service.line.show.LineShowService; import subway.type.InputType; -import subway.view.input.line.LineInputView; -import subway.view.output.ScreenView; +import subway.view.input.line.LineScanView; +import subway.view.output.util.ScreenView; +import subway.view.output.util.StateView; import subway.view.output.line.LineTextView; import java.util.LinkedList; @@ -18,7 +25,7 @@ public class LineService extends SubwayService implements FeatureInterface { @Override public void manage(Scanner scanner){ - StationService stationService = new StationService(); + StateService stateService = new StateService(); LineService lineService = new LineService(); System.out.println(); @@ -26,7 +33,7 @@ public void manage(Scanner scanner){ ScreenView.printLineManagementScreen(); String lineInput = scanner.nextLine(); - if ((stationService.check(lineInput)) + if ((stateService.check(lineInput)) && (lineService.choose(lineInput, scanner))) { break; } @@ -45,29 +52,27 @@ public boolean choose(String input, Scanner scanner) { return show(); } if (input.equals(InputType.INPUT_BACK.getInput())) { - System.out.println(); - return true; + return StateView.printNewLine(); } return false; } @Override public boolean add(Scanner scanner) { - LineAddingValidation lineNameAddingValidation = new LineAddingValidation(); + LineAdditionValidation lineAdditionValidation = new LineAdditionValidation(); - String lineName = LineInputView.scanLineName(scanner); - if (!lineNameAddingValidation.checkAddingValidation(lineName)) { - return false; - } - String upStationName = LineInputView.scanUpStationName(scanner); - String downStationName = LineInputView.scanDownStationName(scanner); - if (!lineNameAddingValidation.checkStationNamesAddingValidation(upStationName, downStationName)) { - return false; - } + String lineName = LineScanView.scanLineName(scanner); + String upStationName = LineScanView.scanUpStationName(scanner); + String downStationName = LineScanView.scanDownStationName(scanner); - LinkedList stationNames = LineAddingService.addStationNames(upStationName, downStationName); - LineAddingService.addNames(lineName, stationNames); - return true; + if (lineAdditionValidation.checkNameAdditionValidation( + lineName, new Stations(upStationName, downStationName))) { + LinkedList stationNames = + LineAdditionService.addStationNames(upStationName, downStationName); + LineAdditionService.addLineByStationNames(lineName, stationNames); + return true; + } + return false; } @Override @@ -79,8 +84,8 @@ public boolean delete(Scanner scanner) { Line lineForDeletion = LineDeletionService.getLineForDeletion(lineName); - if (lineNameDeletionValidation.checkDeletionValidation(lineName)) { - LineDeletionService.deleteName(lineForDeletion); + if (lineNameDeletionValidation.checkNameDeletionValidation(lineName)) { + LineDeletionService.deleteLineInTransitMap(lineForDeletion); return true; } return false; @@ -88,12 +93,12 @@ public boolean delete(Scanner scanner) { @Override public boolean show() { - LineNameService lineNameService = new LineNameService(); + LineShowService lineShowService = new LineShowService(); StringBuilder stringBuilder = new StringBuilder(); List lineNames = LineRepository.lineNames(); - lineNameService.readNames(stringBuilder, lineNames); + lineShowService.readNames(stringBuilder, lineNames); System.out.println(stringBuilder); return true; } diff --git a/src/main/java/subway/service/line/LineAddingService.java b/src/main/java/subway/service/line/addition/LineAdditionService.java similarity index 70% rename from src/main/java/subway/service/line/LineAddingService.java rename to src/main/java/subway/service/line/addition/LineAdditionService.java index 5afc133ec..0cdf0c59f 100644 --- a/src/main/java/subway/service/line/LineAddingService.java +++ b/src/main/java/subway/service/line/addition/LineAdditionService.java @@ -1,4 +1,4 @@ -package subway.service.line; +package subway.service.line.addition; import subway.domain.Line; import subway.domain.Station; @@ -9,7 +9,7 @@ import java.util.LinkedList; -public class LineAddingService { +public class LineAdditionService { public static LinkedList addStationNames(String upStationName, String downStationName) { LinkedList stationNames = new LinkedList<>(); @@ -18,18 +18,17 @@ public static LinkedList addStationNames(String upStationName, String d return stationNames; } - public static Line addLineName(String lineName) { + public static void addLineByStationNames(String lineName, LinkedList stationNames) { + Line line = addLineByLineName(lineName); + TransitMapRepository.addTransitMap(new TransitMap(line, stationNames)); + LineInformationView.printLineAdditionInformation(); + System.out.println(); + } + + public static Line addLineByLineName(String lineName) { Line line = new Line(lineName); LineRepository.addLine(line); return line; } - - public static void addNames(String lineName, LinkedList stationNames) { - Line line = addLineName(lineName); - - TransitMapRepository.addTransitMap(new TransitMap(line, stationNames)); - LineInformationView.printLineAddingInformation(); - System.out.println(); - } } diff --git a/src/main/java/subway/service/line/LineAddingValidation.java b/src/main/java/subway/service/line/addition/LineAdditionValidation.java similarity index 67% rename from src/main/java/subway/service/line/LineAddingValidation.java rename to src/main/java/subway/service/line/addition/LineAdditionValidation.java index 4850f829b..1bc06b356 100644 --- a/src/main/java/subway/service/line/LineAddingValidation.java +++ b/src/main/java/subway/service/line/addition/LineAdditionValidation.java @@ -1,17 +1,25 @@ -package subway.service.line; +package subway.service.line.addition; +import subway.domain.Stations; import subway.repository.LineRepository; import subway.repository.StationRepository; -import subway.service.abstraction.AddingValidationInterface; +import subway.service.station.addition.StationAdditionValidation; import subway.type.BoundaryType; import subway.type.CheckType; import subway.view.output.line.LineExceptionView; import java.util.List; -public class LineAddingValidation implements AddingValidationInterface { - @Override - public boolean checkAddingValidation(String lineName) { +public class LineAdditionValidation extends StationAdditionValidation { + public boolean checkNameAdditionValidation(String lineName, Stations stations) { + if (!checkLineNameAdditionValidation(lineName)) { + return false; + } + return checkStationNamesAdditionValidation( + stations.getUpStationName(),stations.getDownStationName()); + } + + public boolean checkLineNameAdditionValidation(String lineName) { if (checkNameDuplication(lineName)) { LineExceptionView.printInvalidLineNameException(); return false; @@ -44,9 +52,9 @@ public boolean checkNameLastCharacter(String lineName) { return !lastCharacter.equals(CheckType.LINE_CHECK.getCheck()); } - public boolean checkStationNamesAddingValidation(String upStationName, String downStationName) { - if (checkExistingStationNames(upStationName, downStationName)) { - LineExceptionView.printInvalidLineExistingStationNamesException(); + public boolean checkStationNamesAdditionValidation(String upStationName, String downStationName) { + if (checkStationNamesExistence(upStationName, downStationName)) { + LineExceptionView.printInvalidLineStationNamesExistenceException(); return false; } if (checkSameStationNames(upStationName, downStationName)) { @@ -56,7 +64,7 @@ public boolean checkStationNamesAddingValidation(String upStationName, String do return true; } - public static boolean checkExistingStationNames(String upStationName, String downStationName) { + public static boolean checkStationNamesExistence(String upStationName, String downStationName) { List stationNames = StationRepository.stationNames(); return !((stationNames.contains(upStationName)) && (stationNames.contains(downStationName))); } diff --git a/src/main/java/subway/service/line/LineDeletionService.java b/src/main/java/subway/service/line/deletion/LineDeletionService.java similarity index 87% rename from src/main/java/subway/service/line/LineDeletionService.java rename to src/main/java/subway/service/line/deletion/LineDeletionService.java index ed48278c8..42c7e36bf 100644 --- a/src/main/java/subway/service/line/LineDeletionService.java +++ b/src/main/java/subway/service/line/deletion/LineDeletionService.java @@ -1,4 +1,4 @@ -package subway.service.line; +package subway.service.line.deletion; import subway.domain.Line; import subway.repository.LineRepository; @@ -21,7 +21,7 @@ public static Line getLineForDeletion(String lineName) { return lineForDeletion; } - public static void deleteName(Line lineForDeletion) { + public static void deleteLineInTransitMap(Line lineForDeletion) { TransitMapRepository.deleteTransitMap(lineForDeletion); LineInformationView.printLineDeletionInformation(); System.out.println(); diff --git a/src/main/java/subway/service/line/LineDeletionValidation.java b/src/main/java/subway/service/line/deletion/LineDeletionValidation.java similarity index 68% rename from src/main/java/subway/service/line/LineDeletionValidation.java rename to src/main/java/subway/service/line/deletion/LineDeletionValidation.java index 4b8709c9a..ca15442a6 100644 --- a/src/main/java/subway/service/line/LineDeletionValidation.java +++ b/src/main/java/subway/service/line/deletion/LineDeletionValidation.java @@ -1,12 +1,12 @@ -package subway.service.line; +package subway.service.line.deletion; import subway.repository.LineRepository; -import subway.service.station.StationDeletionValidation; +import subway.service.station.deletion.StationDeletionValidation; import subway.view.output.line.LineExceptionView; public class LineDeletionValidation extends StationDeletionValidation { @Override - public boolean checkDeletionValidation(String lineName) { + public boolean checkNameDeletionValidation(String lineName) { if (!LineRepository.deleteLineByName(lineName)) { LineExceptionView.printInvalidLineNameExistenceException(); return false; diff --git a/src/main/java/subway/service/line/LineNameService.java b/src/main/java/subway/service/line/show/LineShowService.java similarity index 69% rename from src/main/java/subway/service/line/LineNameService.java rename to src/main/java/subway/service/line/show/LineShowService.java index 60b12a0cf..d63348d8d 100644 --- a/src/main/java/subway/service/line/LineNameService.java +++ b/src/main/java/subway/service/line/show/LineShowService.java @@ -1,22 +1,22 @@ -package subway.service.line; +package subway.service.line.show; -import subway.service.station.StationNameService; +import subway.service.station.show.StationShowService; import subway.type.InformationType; import subway.type.TextType; import java.util.List; -public class LineNameService extends StationNameService { +public class LineShowService extends StationShowService { @Override public void readNames(StringBuilder stringBuilder, List lineNames) { - appendNameText(stringBuilder); + appendListText(stringBuilder); appendNames(stringBuilder, lineNames); } @Override - public void appendNameText(StringBuilder stringBuilder) { + public void appendListText(StringBuilder stringBuilder) { stringBuilder.append(TextType.NEW_LINE.getText()) - .append(TextType.LINE_NAME_TEXT.getText()) + .append(TextType.LINE_LIST_TEXT.getText()) .append(TextType.NEW_LINE.getText()); } diff --git a/src/main/java/subway/service/section/SectionAddingService.java b/src/main/java/subway/service/section/SectionAddingService.java deleted file mode 100644 index 5410a32d5..000000000 --- a/src/main/java/subway/service/section/SectionAddingService.java +++ /dev/null @@ -1,74 +0,0 @@ -package subway.service.section; - -import subway.domain.Line; -import subway.domain.Section; -import subway.domain.Station; -import subway.repository.LineRepository; -import subway.repository.StationRepository; -import subway.repository.TransitMapRepository; -import subway.type.BoundaryType; - -import java.util.*; - -public class SectionAddingService { - public static boolean checkExistingLineName(String lineName) { - List lineNames = LineRepository.lineNames(); - return lineNames.contains(lineName); - } - - public static boolean checkExistingStationName(String stationName) { - List stationNames = StationRepository.stationNames(); - return stationNames.contains(stationName); - } - - public static boolean checkExistingStationNameInLine(String lineName, String stationName) { - List stationNameValues = new ArrayList<>(); - LinkedList stationValues = getStationValuesInLine(lineName); - - for (Station stationValue : stationValues) { - stationNameValues.add(stationValue.getName()); - } - return stationNameValues.contains(stationName); - } - - public static LinkedList getStationValuesInLine(String lineName) { - Map> transitMaps = TransitMapRepository.transitMaps(); - LinkedList stationValues = new LinkedList<>(); - - for (Map.Entry> entry : transitMaps.entrySet()) { - Line key = entry.getKey(); - String keyName = key.getName(); - LinkedList values = entry.getValue(); - - if (keyName.equals(lineName)) { - stationValues = values; - } - } - return stationValues; - } - - public static boolean checkOrderReplacementLength(String order) { - return order.replaceAll("[^0-9]", "").length() - == BoundaryType.ORDER_REPLACEMENT_LENGTH_BOUNDARY.getBoundary(); - } - - public static boolean checkOrderNumberByStations(String lineName, int orderNumber) { - LinkedList stationValues = getStationValuesInLine(lineName); - return stationValues.size() + 1 < orderNumber; - } - - public static void addSection(Section section) { - Map> transitMaps = TransitMapRepository.transitMaps(); - int orderNumber = Integer.parseInt(section.getOrder()) - 1; - - for (Map.Entry> entry : transitMaps.entrySet()) { - Line key = entry.getKey(); - String keyName = key.getName(); - LinkedList values = entry.getValue(); - - if (keyName.equals(section.getLineName())) { - values.add(orderNumber, new Station(section.getStationName())); - } - } - } -} diff --git a/src/main/java/subway/service/section/SectionAddingValidation.java b/src/main/java/subway/service/section/SectionAddingValidation.java deleted file mode 100644 index c4510c205..000000000 --- a/src/main/java/subway/service/section/SectionAddingValidation.java +++ /dev/null @@ -1,48 +0,0 @@ -package subway.service.section; - -import subway.domain.Section; -import subway.type.BoundaryType; -import subway.view.output.line.LineExceptionView; -import subway.view.output.section.SectionExceptionView; -import subway.view.output.station.StationExceptionView; - -public class SectionAddingValidation { - public boolean checkSectionAddingValidation(Section section) { - if (!checkNamesValidation(section.getLineName(), section.getStationName())) { - return false; - } - return checkOrderValidation(section.getLineName(), section.getOrder()); - } - - public boolean checkNamesValidation(String lineName, String stationName) { - if (!SectionAddingService.checkExistingLineName(lineName)) { - LineExceptionView.printInvalidLineNameExistenceException(); - return false; - } - if (!SectionAddingService.checkExistingStationName(stationName)) { - StationExceptionView.printInvalidStationNameExistenceException(); - return false; - } - if (SectionAddingService.checkExistingStationNameInLine(lineName, stationName)) { - SectionExceptionView.printInvalidSectionExistingStationNameInLine(); - return false; - } - return true; - } - - public boolean checkOrderValidation(String lineName, String order) { - if (SectionAddingService.checkOrderReplacementLength(order)) { - SectionExceptionView.printInvalidSectionOrderReplacementLengthException(); - return false; - } - if (Integer.parseInt(order) < BoundaryType.ORDER_NUMBER_BOUNDARY.getBoundary()) { - SectionExceptionView.printInvalidSectionOrderNumberException(); - return false; - } - if (SectionAddingService.checkOrderNumberByStations(lineName, Integer.parseInt(order))) { - SectionExceptionView.printInvalidSectionOrderNumberByStationsException(); - return false; - } - return true; - } -} diff --git a/src/main/java/subway/service/section/SectionService.java b/src/main/java/subway/service/section/SectionService.java index c5dca78ed..74863f597 100644 --- a/src/main/java/subway/service/section/SectionService.java +++ b/src/main/java/subway/service/section/SectionService.java @@ -1,11 +1,16 @@ package subway.service.section; import subway.domain.Section; +import subway.service.section.addition.SectionAdditionService; +import subway.service.section.addition.SectionAdditionValidation; +import subway.service.section.deletion.SectionDeletionService; +import subway.service.section.deletion.SectionDeletionValidation; import subway.service.station.StationService; import subway.type.InputType; -import subway.view.input.section.SectionInputView; -import subway.view.output.ExceptionView; -import subway.view.output.ScreenView; +import subway.view.input.section.SectionScanView; +import subway.view.output.util.FeatureExceptionView; +import subway.view.output.util.ScreenView; +import subway.view.output.util.StateView; import subway.view.output.section.SectionInformationView; import subway.view.output.section.SectionTextView; @@ -25,7 +30,7 @@ public void manage(Scanner scanner) { sectionService.choose(sectionInput, scanner); break; } - ExceptionView.printInvalidFeatureChoiceException(); + FeatureExceptionView.printInvalidFeatureChoiceException(); } } @@ -49,24 +54,23 @@ public boolean choose(String input, Scanner scanner) { return delete(scanner); } if (input.equals(InputType.INPUT_BACK.getInput())) { - System.out.println(); - return true; + return StateView.printNewLine(); } return false; } @Override public boolean add(Scanner scanner) { - SectionAddingValidation sectionAddingValidation = new SectionAddingValidation(); + SectionAdditionValidation sectionAdditionValidation = new SectionAdditionValidation(); - String lineName = SectionInputView.scanLineName(scanner); - String stationName = SectionInputView.scanStationName(scanner); - String order = SectionInputView.scanOrder(scanner); + String lineName = SectionScanView.scanLineName(scanner); + String stationName = SectionScanView.scanStationName(scanner); + String order = SectionScanView.scanOrder(scanner); Section section = new Section(lineName, stationName, order); - if (sectionAddingValidation.checkSectionAddingValidation(section)) { - SectionAddingService.addSection(section); - SectionInformationView.printSectionAddingInformation(); + if (sectionAdditionValidation.checkSectionAdditionValidation(section)) { + SectionAdditionService.addSection(section); + SectionInformationView.printSectionAdditionInformation(); System.out.println(); return true; } diff --git a/src/main/java/subway/service/section/addition/SectionAdditionService.java b/src/main/java/subway/service/section/addition/SectionAdditionService.java new file mode 100644 index 000000000..dc6dd7f71 --- /dev/null +++ b/src/main/java/subway/service/section/addition/SectionAdditionService.java @@ -0,0 +1,41 @@ +package subway.service.section.addition; + +import subway.domain.Line; +import subway.domain.Section; +import subway.domain.Station; +import subway.repository.TransitMapRepository; + +import java.util.*; + +public class SectionAdditionService { + public static LinkedList getStationValuesInLine(String lineName) { + Map> transitMaps = TransitMapRepository.transitMaps(); + LinkedList stationValues = new LinkedList<>(); + + for (Map.Entry> entry : transitMaps.entrySet()) { + Line key = entry.getKey(); + String keyName = key.getName(); + LinkedList values = entry.getValue(); + + if (keyName.equals(lineName)) { + stationValues = values; + } + } + return stationValues; + } + + public static void addSection(Section section) { + Map> transitMaps = TransitMapRepository.transitMaps(); + int orderNumber = Integer.parseInt(section.getOrder()) - 1; + + for (Map.Entry> entry : transitMaps.entrySet()) { + Line key = entry.getKey(); + String keyName = key.getName(); + LinkedList values = entry.getValue(); + + if (keyName.equals(section.getLineName())) { + values.add(orderNumber, new Station(section.getStationName())); + } + } + } +} diff --git a/src/main/java/subway/service/section/addition/SectionAdditionValidation.java b/src/main/java/subway/service/section/addition/SectionAdditionValidation.java new file mode 100644 index 000000000..78133af3f --- /dev/null +++ b/src/main/java/subway/service/section/addition/SectionAdditionValidation.java @@ -0,0 +1,86 @@ +package subway.service.section.addition; + +import subway.domain.Section; +import subway.domain.Station; +import subway.repository.LineRepository; +import subway.repository.StationRepository; +import subway.type.BoundaryType; +import subway.view.output.line.LineExceptionView; +import subway.view.output.section.SectionExceptionView; +import subway.view.output.station.StationExceptionView; + +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; + +public class SectionAdditionValidation { + public boolean checkSectionAdditionValidation(Section section) { + if (!checkNamesValidation(section.getLineName(), section.getStationName())) { + return false; + } + return checkOrderValidation(section.getLineName(), section.getOrder()); + } + + public boolean checkNamesValidation(String lineName, String stationName) { + if (!checkLineNameExistence(lineName)) { + LineExceptionView.printInvalidLineNameExistenceException(); + return false; + } + if (!checkStationNameExistence(stationName)) { + StationExceptionView.printInvalidStationNameExistenceException(); + return false; + } + if (checkStationNameInLineExistence(lineName, stationName)) { + SectionExceptionView.printInvalidSectionStationNameInLineExistenceException(); + return false; + } + return true; + } + + public static boolean checkLineNameExistence(String lineName) { + List lineNames = LineRepository.lineNames(); + return lineNames.contains(lineName); + } + + public static boolean checkStationNameExistence(String stationName) { + List stationNames = StationRepository.stationNames(); + return stationNames.contains(stationName); + } + + public static boolean checkStationNameInLineExistence(String lineName, String stationName) { + List stationNameValues = new ArrayList<>(); + LinkedList stationValues + = SectionAdditionService.getStationValuesInLine(lineName); + + for (Station stationValue : stationValues) { + stationNameValues.add(stationValue.getName()); + } + return stationNameValues.contains(stationName); + } + + public boolean checkOrderValidation(String lineName, String order) { + if (checkOrderReplacementLength(order)) { + SectionExceptionView.printInvalidSectionOrderReplacementLengthException(); + return false; + } + if (Integer.parseInt(order) < BoundaryType.ORDER_NUMBER_BOUNDARY.getBoundary()) { + SectionExceptionView.printInvalidSectionOrderNumberException(); + return false; + } + if (checkOrderNumberByStations(lineName, Integer.parseInt(order))) { + SectionExceptionView.printInvalidSectionOrderNumberByStationsException(); + return false; + } + return true; + } + + public static boolean checkOrderReplacementLength(String order) { + return order.replaceAll("[^0-9]", "").length() + == BoundaryType.ORDER_REPLACEMENT_LENGTH_BOUNDARY.getBoundary(); + } + + public static boolean checkOrderNumberByStations(String lineName, int orderNumber) { + LinkedList stationValues = SectionAdditionService.getStationValuesInLine(lineName); + return stationValues.size() + 1 < orderNumber; + } +} diff --git a/src/main/java/subway/service/section/SectionDeletionService.java b/src/main/java/subway/service/section/deletion/SectionDeletionService.java similarity index 96% rename from src/main/java/subway/service/section/SectionDeletionService.java rename to src/main/java/subway/service/section/deletion/SectionDeletionService.java index 39dfed93e..2e7fc6228 100644 --- a/src/main/java/subway/service/section/SectionDeletionService.java +++ b/src/main/java/subway/service/section/deletion/SectionDeletionService.java @@ -1,4 +1,4 @@ -package subway.service.section; +package subway.service.section.deletion; import subway.domain.Line; import subway.domain.Station; diff --git a/src/main/java/subway/service/section/SectionDeletionValidation.java b/src/main/java/subway/service/section/deletion/SectionDeletionValidation.java similarity index 74% rename from src/main/java/subway/service/section/SectionDeletionValidation.java rename to src/main/java/subway/service/section/deletion/SectionDeletionValidation.java index 53cc2fbcd..dfd00085e 100644 --- a/src/main/java/subway/service/section/SectionDeletionValidation.java +++ b/src/main/java/subway/service/section/deletion/SectionDeletionValidation.java @@ -1,4 +1,4 @@ -package subway.service.section; +package subway.service.section.deletion; import subway.repository.TransitMapRepository; import subway.type.BoundaryType; @@ -20,40 +20,40 @@ public boolean checkSectionDeletionValidation(String lineName, String stationNam } public boolean checkLineNameValidation(String lineName) { - if (!checkExistingLineNameInTransitMap(lineName)) { + if (!checkLineNameInTransitMapExistence(lineName)) { LineExceptionView.printInvalidLineNameExistenceException(); return false; } return true; } - public static boolean checkExistingLineNameInTransitMap(String lineName) { + public static boolean checkLineNameInTransitMapExistence(String lineName) { List transitMapsLineNames = TransitMapRepository.transitMapsLineNames(); return transitMapsLineNames.contains(lineName); } public boolean checkStationNameValidation(String lineName, String stationName) { - if (!checkExistingStationNameInTransitMap(lineName, stationName)) { + if (!checkStationNameInTransitMapExistence(lineName, stationName)) { StationExceptionView.printInvalidStationNameExistenceException(); return false; } return true; } - public static boolean checkExistingStationNameInTransitMap(String lienName, String stationName) { + public static boolean checkStationNameInTransitMapExistence(String lienName, String stationName) { List transitMapStations = TransitMapRepository.transitMapStations(lienName); return transitMapStations.contains(stationName); } private boolean checkStationsInLineValidation(String lineName) { - if (checkExistingStationsInLine(lineName)) { - SectionExceptionView.printInvalidSectionStationsInLineException(); + if (checkStationsInLineExistence(lineName)) { + SectionExceptionView.printInvalidNumberOfSectionStationsInLineException(); return false; } return true; } - public static boolean checkExistingStationsInLine(String lineName) { + public static boolean checkStationsInLineExistence(String lineName) { List transitMapStations = TransitMapRepository.transitMapStations(lineName); return transitMapStations.size() <= BoundaryType.STATIONS_IN_LINE_BOUNDARY.getBoundary(); } diff --git a/src/main/java/subway/service/station/StationService.java b/src/main/java/subway/service/station/StationService.java index 6de9e54a8..be7226e91 100644 --- a/src/main/java/subway/service/station/StationService.java +++ b/src/main/java/subway/service/station/StationService.java @@ -2,12 +2,14 @@ import subway.domain.Station; import subway.repository.StationRepository; -import subway.service.SubwayService; -import subway.service.abstraction.FeatureInterface; -import subway.type.InputType; -import subway.view.output.ExceptionView; +import subway.service.util.StateService; +import subway.service.subway.SubwayService; +import subway.service.util.FeatureInterface; +import subway.service.station.addition.StationAdditionValidation; +import subway.service.station.deletion.StationDeletionValidation; +import subway.service.station.show.StationShowService; import subway.view.output.station.StationInformationView; -import subway.view.output.ScreenView; +import subway.view.output.util.ScreenView; import subway.view.output.station.StationTextView; import java.util.List; @@ -16,66 +18,30 @@ public class StationService extends SubwayService implements FeatureInterface { @Override public void manage(Scanner scanner) { - StationService stationService = new StationService(); + StateService stateService = new StateService(); System.out.println(); while (true) { ScreenView.printStationManagementScreen(); String stationInput = scanner.nextLine(); - if ((stationService.check(stationInput)) - && (stationService.choose(stationInput, scanner))) { + if ((stateService.check(stationInput)) + && (stateService.choose(stationInput, scanner))) { break; } } } - @Override - public boolean check(String input) { - if (input.equals(InputType.INPUT_ONE.getInput())) { - return true; - } - if (input.equals(InputType.INPUT_TWO.getInput())) { - return true; - } - if (input.equals(InputType.INPUT_THREE.getInput())) { - return true; - } - if (input.equals(InputType.INPUT_BACK.getInput())) { - return true; - } - ExceptionView.printInvalidFeatureChoiceException(); - return false; - } - - @Override - public boolean choose(String input, Scanner scanner) { - if (input.equals(InputType.INPUT_ONE.getInput())) { - return add(scanner); - } - if (input.equals(InputType.INPUT_TWO.getInput())) { - return delete(scanner); - } - if (input.equals(InputType.INPUT_THREE.getInput())) { - return show(); - } - if (input.equals(InputType.INPUT_BACK.getInput())) { - System.out.println(); - return true; - } - return false; - } - @Override public boolean add(Scanner scanner) { - StationAddingValidation nameAddingValidation = new StationAddingValidation(); + StationAdditionValidation stationAdditionValidation = new StationAdditionValidation(); StationTextView.printStationAddingText(); String stationName = scanner.nextLine(); - if (nameAddingValidation.checkAddingValidation(stationName)) { + if (stationAdditionValidation.checkNameAdditionValidation(stationName)) { StationRepository.addStation(new Station(stationName)); - StationInformationView.printStationAddingInformation(); + StationInformationView.printStationAdditionInformation(); System.out.println(); return true; } @@ -89,7 +55,7 @@ public boolean delete(Scanner scanner) { StationTextView.printStationDeletionText(); String stationName = scanner.nextLine(); - if (stationNameDeletionValidation.checkDeletionValidation(stationName)) { + if (stationNameDeletionValidation.checkNameDeletionValidation(stationName)) { StationInformationView.printStationDeletionInformation(); System.out.println(); return true; @@ -99,12 +65,12 @@ public boolean delete(Scanner scanner) { @Override public boolean show() { - StationNameService stationNameService = new StationNameService(); + StationShowService stationShowService = new StationShowService(); StringBuilder stringBuilder = new StringBuilder(); List stationNames = StationRepository.stationNames(); - stationNameService.readNames(stringBuilder, stationNames); + stationShowService.readNames(stringBuilder, stationNames); System.out.println(stringBuilder); return true; } diff --git a/src/main/java/subway/service/station/StationAddingValidation.java b/src/main/java/subway/service/station/addition/StationAdditionValidation.java similarity index 85% rename from src/main/java/subway/service/station/StationAddingValidation.java rename to src/main/java/subway/service/station/addition/StationAdditionValidation.java index e045f2eec..cc4738e8e 100644 --- a/src/main/java/subway/service/station/StationAddingValidation.java +++ b/src/main/java/subway/service/station/addition/StationAdditionValidation.java @@ -1,16 +1,15 @@ -package subway.service.station; +package subway.service.station.addition; import subway.repository.StationRepository; -import subway.service.abstraction.AddingValidationInterface; import subway.type.BoundaryType; import subway.type.CheckType; import subway.view.output.station.StationExceptionView; import java.util.List; -public class StationAddingValidation implements AddingValidationInterface { +public class StationAdditionValidation implements StationAdditionValidationInterface { @Override - public boolean checkAddingValidation(String stationName) { + public boolean checkNameAdditionValidation(String stationName) { if (checkNameDuplication(stationName)) { StationExceptionView.printInvalidStationNameException(); return false; diff --git a/src/main/java/subway/service/station/addition/StationAdditionValidationInterface.java b/src/main/java/subway/service/station/addition/StationAdditionValidationInterface.java new file mode 100644 index 000000000..c323a484d --- /dev/null +++ b/src/main/java/subway/service/station/addition/StationAdditionValidationInterface.java @@ -0,0 +1,8 @@ +package subway.service.station.addition; + +public interface StationAdditionValidationInterface { + boolean checkNameAdditionValidation(String name); + boolean checkNameDuplication(String name); + boolean checkNameLength(String name); + boolean checkNameLastCharacter(String name); +} diff --git a/src/main/java/subway/service/station/StationDeletionValidation.java b/src/main/java/subway/service/station/deletion/StationDeletionValidation.java similarity index 80% rename from src/main/java/subway/service/station/StationDeletionValidation.java rename to src/main/java/subway/service/station/deletion/StationDeletionValidation.java index e63e391e5..f263e5c98 100644 --- a/src/main/java/subway/service/station/StationDeletionValidation.java +++ b/src/main/java/subway/service/station/deletion/StationDeletionValidation.java @@ -1,14 +1,26 @@ -package subway.service.station; +package subway.service.station.deletion; import subway.repository.StationRepository; import subway.repository.TransitMapRepository; -import subway.service.abstraction.DeletionValidationInterface; import subway.view.output.station.StationExceptionView; import java.util.LinkedList; import java.util.List; -public class StationDeletionValidation implements DeletionValidationInterface { +public class StationDeletionValidation implements StationDeletionValidationInterface { + @Override + public boolean checkNameDeletionValidation(String stationName) { + if (checkNameInTransitMap(stationName)) { + StationExceptionView.printInvalidStationNameInTransitMapException(); + return false; + } + if (!StationRepository.deleteStation(stationName)) { + StationExceptionView.printInvalidStationNameExistenceException(); + return false; + } + return true; + } + @Override public boolean checkNameInTransitMap(String stationName) { List> transitMapsStationsNames @@ -21,17 +33,4 @@ public boolean checkNameInTransitMap(String stationName) { } return false; } - - @Override - public boolean checkDeletionValidation(String stationName) { - if (checkNameInTransitMap(stationName)) { - StationExceptionView.printInvalidStationNameInTransitMapException(); - return false; - } - if (!StationRepository.deleteStation(stationName)) { - StationExceptionView.printInvalidStationNameExistenceException(); - return false; - } - return true; - } } diff --git a/src/main/java/subway/service/station/deletion/StationDeletionValidationInterface.java b/src/main/java/subway/service/station/deletion/StationDeletionValidationInterface.java new file mode 100644 index 000000000..cdd47b8ec --- /dev/null +++ b/src/main/java/subway/service/station/deletion/StationDeletionValidationInterface.java @@ -0,0 +1,6 @@ +package subway.service.station.deletion; + +public interface StationDeletionValidationInterface { + boolean checkNameDeletionValidation(String name); + boolean checkNameInTransitMap(String name); +} diff --git a/src/main/java/subway/service/station/show/StationShowInterface.java b/src/main/java/subway/service/station/show/StationShowInterface.java new file mode 100644 index 000000000..5cb5c209d --- /dev/null +++ b/src/main/java/subway/service/station/show/StationShowInterface.java @@ -0,0 +1,9 @@ +package subway.service.station.show; + +import java.util.List; + +public interface StationShowInterface { + void readNames(StringBuilder stringBuilder, List stationNames); + void appendListText(StringBuilder stringBuilder); + void appendNames(StringBuilder stringBuilder, List stationNames); +} diff --git a/src/main/java/subway/service/station/StationNameService.java b/src/main/java/subway/service/station/show/StationShowService.java similarity index 68% rename from src/main/java/subway/service/station/StationNameService.java rename to src/main/java/subway/service/station/show/StationShowService.java index 4c23f844a..5d22c27ad 100644 --- a/src/main/java/subway/service/station/StationNameService.java +++ b/src/main/java/subway/service/station/show/StationShowService.java @@ -1,22 +1,25 @@ -package subway.service.station; +package subway.service.station.show; import subway.type.InformationType; import subway.type.TextType; import java.util.List; -public class StationNameService { +public class StationShowService implements StationShowInterface { + @Override public void readNames(StringBuilder stringBuilder, List stationNames) { - appendNameText(stringBuilder); + appendListText(stringBuilder); appendNames(stringBuilder, stationNames); } - public void appendNameText(StringBuilder stringBuilder) { + @Override + public void appendListText(StringBuilder stringBuilder) { stringBuilder.append(TextType.NEW_LINE.getText()) - .append(TextType.STATION_NAME_TEXT.getText()) + .append(TextType.STATION_LIST_TEXT.getText()) .append(TextType.NEW_LINE.getText()); } + @Override public void appendNames(StringBuilder stringBuilder, List stationNames) { for (String stationName : stationNames) { stringBuilder.append(InformationType.INFORMATION.getInformation()) diff --git a/src/main/java/subway/service/subway/SubwayInterface.java b/src/main/java/subway/service/subway/SubwayInterface.java new file mode 100644 index 000000000..98e015d40 --- /dev/null +++ b/src/main/java/subway/service/subway/SubwayInterface.java @@ -0,0 +1,7 @@ +package subway.service.subway; + +import java.util.Scanner; + +public interface SubwayInterface { + void manage(Scanner scanner); +} diff --git a/src/main/java/subway/service/SubwayService.java b/src/main/java/subway/service/subway/SubwayService.java similarity index 85% rename from src/main/java/subway/service/SubwayService.java rename to src/main/java/subway/service/subway/SubwayService.java index e5215f8ce..7123c8aac 100644 --- a/src/main/java/subway/service/SubwayService.java +++ b/src/main/java/subway/service/subway/SubwayService.java @@ -1,17 +1,17 @@ -package subway.service; +package subway.service.subway; import subway.controller.LineController; import subway.controller.SectionController; import subway.controller.StationController; import subway.controller.TransitMapController; -import subway.service.abstraction.SubwayInterface; +import subway.service.util.StateService; import subway.type.InputType; -import subway.view.output.ExceptionView; -import subway.view.output.ScreenView; +import subway.view.output.util.FeatureExceptionView; +import subway.view.output.util.ScreenView; import java.util.Scanner; -public class SubwayService implements SubwayInterface { +public class SubwayService extends StateService implements SubwayInterface { @Override public void manage(Scanner scanner) { SubwayService subwayService = new SubwayService(); @@ -20,21 +20,17 @@ public void manage(Scanner scanner) { ScreenView.printMainScreen(); String mainInput = scanner.nextLine(); - if (quit(mainInput)) { - break; - } if (subwayService.check(mainInput)) { subwayService.choose(mainInput, scanner); continue; } - ExceptionView.printInvalidFeatureChoiceException(); + if (quit(mainInput)) { + break; + } + FeatureExceptionView.printInvalidFeatureChoiceException(); } } - public static boolean quit(String mainInput) { - return mainInput.equals(InputType.INPUT_QUITTING.getInput()); - } - @Override public boolean check(String input) { if (input.equals(InputType.INPUT_ONE.getInput())) { @@ -65,4 +61,8 @@ public boolean choose(String input, Scanner scanner) { } return true; } + + public static boolean quit(String mainInput) { + return mainInput.equals(InputType.INPUT_QUITTING.getInput()); + } } diff --git a/src/main/java/subway/service/transitmap/TransitMapService.java b/src/main/java/subway/service/transitmap/TransitMapService.java new file mode 100644 index 000000000..98f85cd73 --- /dev/null +++ b/src/main/java/subway/service/transitmap/TransitMapService.java @@ -0,0 +1,19 @@ +package subway.service.transitmap; + +import subway.domain.Line; +import subway.domain.Station; +import subway.repository.TransitMapRepository; +import subway.service.transitmap.show.TransitMapShowService; + +import java.util.LinkedList; +import java.util.Map; + +public class TransitMapService { + public static void showTransitMap() { + StringBuilder stringBuilder = new StringBuilder(); + Map> transitMaps = TransitMapRepository.transitMaps(); + + TransitMapShowService.readTransitMap(stringBuilder, transitMaps); + System.out.println(stringBuilder); + } +} diff --git a/src/main/java/subway/service/TransitMapService.java b/src/main/java/subway/service/transitmap/show/TransitMapShowService.java similarity index 86% rename from src/main/java/subway/service/TransitMapService.java rename to src/main/java/subway/service/transitmap/show/TransitMapShowService.java index 744954c82..8c686667b 100644 --- a/src/main/java/subway/service/TransitMapService.java +++ b/src/main/java/subway/service/transitmap/show/TransitMapShowService.java @@ -1,4 +1,4 @@ -package subway.service; +package subway.service.transitmap.show; import subway.domain.Line; import subway.domain.Station; @@ -11,15 +11,7 @@ import java.util.List; import java.util.Map; -public class TransitMapService { - public static void showTransitMap() { - StringBuilder stringBuilder = new StringBuilder(); - Map> transitMaps = TransitMapRepository.transitMaps(); - - TransitMapService.readTransitMap(stringBuilder, transitMaps); - System.out.println(stringBuilder); - } - +public class TransitMapShowService { public static void readTransitMap(StringBuilder stringBuilder, Map> transitMaps) { appendTransitMapText(stringBuilder); diff --git a/src/main/java/subway/service/abstraction/FeatureInterface.java b/src/main/java/subway/service/util/FeatureInterface.java similarity index 81% rename from src/main/java/subway/service/abstraction/FeatureInterface.java rename to src/main/java/subway/service/util/FeatureInterface.java index 6e839ee84..b44614891 100644 --- a/src/main/java/subway/service/abstraction/FeatureInterface.java +++ b/src/main/java/subway/service/util/FeatureInterface.java @@ -1,4 +1,4 @@ -package subway.service.abstraction; +package subway.service.util; import java.util.Scanner; diff --git a/src/main/java/subway/service/abstraction/SubwayInterface.java b/src/main/java/subway/service/util/StateInterface.java similarity index 52% rename from src/main/java/subway/service/abstraction/SubwayInterface.java rename to src/main/java/subway/service/util/StateInterface.java index d224af1cc..32f6965d2 100644 --- a/src/main/java/subway/service/abstraction/SubwayInterface.java +++ b/src/main/java/subway/service/util/StateInterface.java @@ -1,9 +1,8 @@ -package subway.service.abstraction; +package subway.service.util; import java.util.Scanner; -public interface SubwayInterface { - void manage(Scanner scanner); +public interface StateInterface { boolean check(String input); boolean choose(String input, Scanner scanner); } diff --git a/src/main/java/subway/service/util/StateService.java b/src/main/java/subway/service/util/StateService.java new file mode 100644 index 000000000..b2bd7c4e9 --- /dev/null +++ b/src/main/java/subway/service/util/StateService.java @@ -0,0 +1,47 @@ +package subway.service.util; + +import subway.service.station.StationService; +import subway.type.InputType; +import subway.view.output.util.FeatureExceptionView; +import subway.view.output.util.StateView; + +import java.util.Scanner; + +public class StateService implements StateInterface { + @Override + public boolean check(String input) { + if (input.equals(InputType.INPUT_ONE.getInput())) { + return true; + } + if (input.equals(InputType.INPUT_TWO.getInput())) { + return true; + } + if (input.equals(InputType.INPUT_THREE.getInput())) { + return true; + } + if (input.equals(InputType.INPUT_BACK.getInput())) { + return true; + } + FeatureExceptionView.printInvalidFeatureChoiceException(); + return false; + } + + @Override + public boolean choose(String input, Scanner scanner) { + StationService stationService = new StationService(); + + if (input.equals(InputType.INPUT_ONE.getInput())) { + return stationService.add(scanner); + } + if (input.equals(InputType.INPUT_TWO.getInput())) { + return stationService.delete(scanner); + } + if (input.equals(InputType.INPUT_THREE.getInput())) { + return stationService.show(); + } + if (input.equals(InputType.INPUT_BACK.getInput())) { + return StateView.printNewLine(); + } + return false; + } +} diff --git a/src/main/java/subway/type/BoundaryType.java b/src/main/java/subway/type/BoundaryType.java index e14bd6878..7f9bb639d 100644 --- a/src/main/java/subway/type/BoundaryType.java +++ b/src/main/java/subway/type/BoundaryType.java @@ -2,8 +2,10 @@ public enum BoundaryType { NAME_LENGTH_BOUNDARY(2), + ORDER_NUMBER_BOUNDARY(1), ORDER_REPLACEMENT_LENGTH_BOUNDARY(0), + STATIONS_IN_LINE_BOUNDARY(2); private final int boundary; diff --git a/src/main/java/subway/type/ExceptionType.java b/src/main/java/subway/type/ExceptionType.java index 094c9d74f..a16492e7f 100644 --- a/src/main/java/subway/type/ExceptionType.java +++ b/src/main/java/subway/type/ExceptionType.java @@ -8,22 +8,26 @@ public enum ExceptionType { INVALID_STATION_NAME(ERROR.getException() + "이미 등록된 역 이름입니다.\n"), INVALID_STATION_NAME_LENGTH(ERROR.getException() + "2글자 이상의 역 이름을 입력해주세요.\n"), INVALID_STATION_NAME_LAST_CHARACTER(ERROR.getException() + "'역'으로 끝나는 역 이름을 입력해주세요.\n"), - INVALID_STATION_NAME_IN_TRANSIT_MAP(ERROR.getException() + "해당 역은 지하철 노선에 등록되어 있어 삭제할 수 없습니다.\n"), + INVALID_STATION_NAME_IN_TRANSIT_MAP(ERROR.getException() + + "해당 역은 지하철 노선에 등록되어 있어 삭제할 수 없습니다.\n"), INVALID_STATION_NAME_EXISTENCE(ERROR.getException() + "해당 역이 존재하지 않습니다.\n"), INVALID_LINE_NAME(ERROR.getException() + "이미 등록된 노선 이름입니다.\n"), INVALID_LINE_NAME_LENGTH(ERROR.getException() + "2글자 이상의 노선 이름을 입력해주세요.\n"), INVALID_LINE_NAME_LAST_CHARACTER(ERROR.getException() + "'선'으로 끝나는 노선 이름을 입력해주세요.\n"), - INVALID_LINE_EXISTING_STATION_NAMES(ERROR.getException() + "상행 종점역과 하행 종점역은 지하철 역 목록에 존재해야 합니다.\n"), + INVALID_LINE_STATION_NAMES_EXISTENCE(ERROR.getException() + + "상행 종점역과 하행 종점역은 지하철 역 목록에 존재해야 합니다.\n"), INVALID_LINE_SAME_STATION_NAMES(ERROR.getException() + "상행 종점역과 하행 종점역은 서로 달라야 합니다.\n"), INVALID_LINE_NAME_EXISTENCE(ERROR.getException() + "해당 노선이 존재하지 않습니다.\n"), - INVALID_SECTION_EXISTING_STATION_NAME_IN_LINE(ERROR.getException() + "해당 역은 이미 노선에 존재합니다.\n"), + INVALID_SECTION_STATION_NAME_IN_LINE_ALREADY_EXISTENCE(ERROR.getException() + + "해당 역은 이미 노선에 존재합니다.\n"), INVALID_SECTION_ORDER_REPLACEMENT_LENGTH(ERROR.getException() + "순서는 숫자로 입력해주세요.\n"), INVALID_SECTION_ORDER_NUMBER(ERROR.getException() + "순서는 양의 정수로 입력해주세요.\n"), INVALID_SECTION_ORDER_NUMBER_BY_STATIONS( ERROR.getException() + "순서는 노선에 있는 역 개수보다 하나 큰 수까지만 입력해주세요.\n"), - INVALID_SECTION_STATIONS_IN_LINE(ERROR.getException() + "해당 노선에 포함된 역이 2개 이하이기 때문에 삭제할 수 없습니다.\n"); + INVALID_NUMBER_OF_SECTION_STATIONS_IN_LINE(ERROR.getException() + + "해당 노선에 포함된 역이 2개 이하이기 때문에 삭제할 수 없습니다.\n"); private final String exception; diff --git a/src/main/java/subway/type/InformationType.java b/src/main/java/subway/type/InformationType.java index 594eb716a..97e560e1d 100644 --- a/src/main/java/subway/type/InformationType.java +++ b/src/main/java/subway/type/InformationType.java @@ -3,13 +3,13 @@ public enum InformationType { INFORMATION("[INFO] "), - STATION_ADDING_INFORMATION(INFORMATION.getInformation() + "지하철 역이 등록되었습니다."), + STATION_ADDITION_INFORMATION(INFORMATION.getInformation() + "지하철 역이 등록되었습니다."), STATION_DELETION_INFORMATION(INFORMATION.getInformation() + "지하철 역이 삭제되었습니다."), - LINE_ADDING_INFORMATION(INFORMATION.getInformation() + "지하철 노선이 등록되었습니다."), + LINE_ADDITION_INFORMATION(INFORMATION.getInformation() + "지하철 노선이 등록되었습니다."), LINE_DELETION_INFORMATION(INFORMATION.getInformation() + "지하철 노선이 삭제되었습니다."), - SECTION_ADDING_INFORMATION(INFORMATION.getInformation() + "구간이 등록되었습니다."), + SECTION_ADDITION_INFORMATION(INFORMATION.getInformation() + "구간이 등록되었습니다."), SECTION_DELETION_INFORMATION(INFORMATION.getInformation() + "구간이 삭제되었습니다."); private final String information; diff --git a/src/main/java/subway/type/ScreenType.java b/src/main/java/subway/type/ScreenType.java index b3cacd03c..f7f22273a 100644 --- a/src/main/java/subway/type/ScreenType.java +++ b/src/main/java/subway/type/ScreenType.java @@ -8,20 +8,20 @@ public enum ScreenType { STATION_MANAGEMENT("1. 역 관리\n"), LINE_MANAGEMENT("2. 노선 관리\n"), SECTION_MANAGEMENT("3. 구간 관리\n"), - SUBWAY_MAP_PRINT("4. 지하철 노선도 출력\n"), + SUBWAY_MAP_SHOW("4. 지하철 노선도 출력\n"), STATION_MANAGEMENT_SCREEN("## 역 관리 화면\n"), - STATION_ADDING("1. 역 등록\n"), + STATION_ADDITION("1. 역 등록\n"), STATION_DELETION("2. 역 삭제\n"), - STATION_PRINT("3. 역 조회\n"), + STATION_SHOW("3. 역 조회\n"), LINE_MANAGEMENT_SCREEN("## 노선 관리 화면\n"), - LINE_ADDING("1. 노선 등록\n"), + LINE_ADDITION("1. 노선 등록\n"), LINE_DELETION("2. 노선 삭제\n"), - LINE_PRINT("3. 노선 조회\n"), + LINE_SHOW("3. 노선 조회\n"), SECTION_MANAGEMENT_SCREEN("## 구간 관리 화면\n"), - SECTION_ADDING("1. 구간 등록\n"), + SECTION_ADDITION("1. 구간 등록\n"), SECTION_DELETION("2. 구간 삭제\n"), QUITTING("Q. 종료\n\n"), diff --git a/src/main/java/subway/type/TextType.java b/src/main/java/subway/type/TextType.java index f2fb81913..61e28bad4 100644 --- a/src/main/java/subway/type/TextType.java +++ b/src/main/java/subway/type/TextType.java @@ -4,19 +4,19 @@ public enum TextType { NEW_LINE("\n"), HORIZONTAL_LINES("---"), - STATION_ADDING_TEXT("## 등록할 역 이름을 입력하세요."), + STATION_ADDITION_TEXT("## 등록할 역 이름을 입력하세요."), STATION_DELETION_TEXT("## 삭제할 역 이름을 입력하세요."), - STATION_NAME_TEXT("## 역 목록"), + STATION_LIST_TEXT("## 역 목록"), - LINE_ADDING_TEXT("## 등록할 노선 이름을 입력하세요."), + LINE_ADDITION_TEXT("## 등록할 노선 이름을 입력하세요."), LINE_UP_STATION_NAME_TEXT("## 등록할 노선의 상행 종점역 이름을 입력하세요."), LINE_DOWN_STATION_NAME_TEXT("## 등록할 노선의 하행 종점역 이름을 입력하세요."), LINE_DELETION_TEXT("## 삭제할 노선 이름을 입력하세요."), - LINE_NAME_TEXT("## 노선 목록"), + LINE_LIST_TEXT("## 노선 목록"), - SECTION_ADDING_LINE_TEXT("## 노선을 입력하세요."), - SECTION_ADDING_STATION_TEXT("## 역이름을 입력하세요."), - SECTION_ADDING_ORDER_TEXT("## 순서를 입력하세요."), + SECTION_ADDITION_LINE_TEXT("## 노선을 입력하세요."), + SECTION_ADDITION_STATION_TEXT("## 역이름을 입력하세요."), + SECTION_ADDITION_ORDER_TEXT("## 순서를 입력하세요."), SECTION_DELETION_LINE_TEXT("## 삭제할 구간의 노선을 입력하세요."), SECTION_DELETION_STATION_TEXT("## 삭제할 구간의 역을 입력하세요."), diff --git a/src/main/java/subway/view/input/line/LineInputView.java b/src/main/java/subway/view/input/line/LineScanView.java similarity index 95% rename from src/main/java/subway/view/input/line/LineInputView.java rename to src/main/java/subway/view/input/line/LineScanView.java index 27e33d95f..289b4a3c0 100644 --- a/src/main/java/subway/view/input/line/LineInputView.java +++ b/src/main/java/subway/view/input/line/LineScanView.java @@ -4,7 +4,7 @@ import java.util.Scanner; -public class LineInputView { +public class LineScanView { public static String scanLineName(Scanner scanner) { LineTextView.printLineAddingText(); return scanner.nextLine(); diff --git a/src/main/java/subway/view/input/section/SectionInputView.java b/src/main/java/subway/view/input/section/SectionScanView.java similarity index 94% rename from src/main/java/subway/view/input/section/SectionInputView.java rename to src/main/java/subway/view/input/section/SectionScanView.java index 980309a36..bcf0c7216 100644 --- a/src/main/java/subway/view/input/section/SectionInputView.java +++ b/src/main/java/subway/view/input/section/SectionScanView.java @@ -4,7 +4,7 @@ import java.util.Scanner; -public class SectionInputView { +public class SectionScanView { public static String scanLineName(Scanner scanner) { SectionTextView.printSectionAddingLineText(); return scanner.nextLine(); diff --git a/src/main/java/subway/view/output/line/LineExceptionView.java b/src/main/java/subway/view/output/line/LineExceptionView.java index a686835e2..2339acd4b 100644 --- a/src/main/java/subway/view/output/line/LineExceptionView.java +++ b/src/main/java/subway/view/output/line/LineExceptionView.java @@ -18,9 +18,9 @@ public static void printInvalidLineNameLastCharacterException() { System.out.println(ExceptionType.INVALID_LINE_NAME_LAST_CHARACTER.getException()); } - public static void printInvalidLineExistingStationNamesException() { + public static void printInvalidLineStationNamesExistenceException() { System.out.println(); - System.out.println(ExceptionType.INVALID_LINE_EXISTING_STATION_NAMES.getException()); + System.out.println(ExceptionType.INVALID_LINE_STATION_NAMES_EXISTENCE.getException()); } public static void printInvalidLineSameStationNamesException() { diff --git a/src/main/java/subway/view/output/line/LineInformationView.java b/src/main/java/subway/view/output/line/LineInformationView.java index 76e849820..2f776a273 100644 --- a/src/main/java/subway/view/output/line/LineInformationView.java +++ b/src/main/java/subway/view/output/line/LineInformationView.java @@ -3,9 +3,9 @@ import subway.type.InformationType; public class LineInformationView { - public static void printLineAddingInformation() { + public static void printLineAdditionInformation() { System.out.println(); - System.out.println(InformationType.LINE_ADDING_INFORMATION.getInformation()); + System.out.println(InformationType.LINE_ADDITION_INFORMATION.getInformation()); } public static void printLineDeletionInformation() { diff --git a/src/main/java/subway/view/output/line/LineTextView.java b/src/main/java/subway/view/output/line/LineTextView.java index 0d080438f..d2092f765 100644 --- a/src/main/java/subway/view/output/line/LineTextView.java +++ b/src/main/java/subway/view/output/line/LineTextView.java @@ -5,7 +5,7 @@ public class LineTextView { public static void printLineAddingText() { System.out.println(); - System.out.println(TextType.LINE_ADDING_TEXT.getText()); + System.out.println(TextType.LINE_ADDITION_TEXT.getText()); } public static void printLineUpStationNameText() { diff --git a/src/main/java/subway/view/output/section/SectionExceptionView.java b/src/main/java/subway/view/output/section/SectionExceptionView.java index 8f4be0ae1..8bb6e94dd 100644 --- a/src/main/java/subway/view/output/section/SectionExceptionView.java +++ b/src/main/java/subway/view/output/section/SectionExceptionView.java @@ -3,9 +3,10 @@ import subway.type.ExceptionType; public class SectionExceptionView { - public static void printInvalidSectionExistingStationNameInLine() { + public static void printInvalidSectionStationNameInLineExistenceException() { System.out.println(); - System.out.println(ExceptionType.INVALID_SECTION_EXISTING_STATION_NAME_IN_LINE.getException()); + System.out.println( + ExceptionType.INVALID_SECTION_STATION_NAME_IN_LINE_ALREADY_EXISTENCE.getException()); } public static void printInvalidSectionOrderReplacementLengthException() { @@ -23,8 +24,8 @@ public static void printInvalidSectionOrderNumberByStationsException() { System.out.println(ExceptionType.INVALID_SECTION_ORDER_NUMBER_BY_STATIONS.getException()); } - public static void printInvalidSectionStationsInLineException() { + public static void printInvalidNumberOfSectionStationsInLineException() { System.out.println(); - System.out.println(ExceptionType.INVALID_SECTION_STATIONS_IN_LINE.getException()); + System.out.println(ExceptionType.INVALID_NUMBER_OF_SECTION_STATIONS_IN_LINE.getException()); } } diff --git a/src/main/java/subway/view/output/section/SectionInformationView.java b/src/main/java/subway/view/output/section/SectionInformationView.java index c9845514c..852d52e0a 100644 --- a/src/main/java/subway/view/output/section/SectionInformationView.java +++ b/src/main/java/subway/view/output/section/SectionInformationView.java @@ -3,9 +3,9 @@ import subway.type.InformationType; public class SectionInformationView { - public static void printSectionAddingInformation() { + public static void printSectionAdditionInformation() { System.out.println(); - System.out.println(InformationType.SECTION_ADDING_INFORMATION.getInformation()); + System.out.println(InformationType.SECTION_ADDITION_INFORMATION.getInformation()); } public static void printSectionDeletionInformation() { diff --git a/src/main/java/subway/view/output/section/SectionTextView.java b/src/main/java/subway/view/output/section/SectionTextView.java index e0cbb5069..9a06777ca 100644 --- a/src/main/java/subway/view/output/section/SectionTextView.java +++ b/src/main/java/subway/view/output/section/SectionTextView.java @@ -5,17 +5,17 @@ public class SectionTextView { public static void printSectionAddingLineText() { System.out.println(); - System.out.println(TextType.SECTION_ADDING_LINE_TEXT.getText()); + System.out.println(TextType.SECTION_ADDITION_LINE_TEXT.getText()); } public static void printSectionAddingStationText() { System.out.println(); - System.out.println(TextType.SECTION_ADDING_STATION_TEXT.getText()); + System.out.println(TextType.SECTION_ADDITION_STATION_TEXT.getText()); } public static void printSectionAddingOrderText() { System.out.println(); - System.out.println(TextType.SECTION_ADDING_ORDER_TEXT.getText()); + System.out.println(TextType.SECTION_ADDITION_ORDER_TEXT.getText()); } public static void printSectionDeletionLineText() { diff --git a/src/main/java/subway/view/output/station/StationInformationView.java b/src/main/java/subway/view/output/station/StationInformationView.java index 9a5df6589..18f8dae86 100644 --- a/src/main/java/subway/view/output/station/StationInformationView.java +++ b/src/main/java/subway/view/output/station/StationInformationView.java @@ -3,9 +3,9 @@ import subway.type.InformationType; public class StationInformationView { - public static void printStationAddingInformation() { + public static void printStationAdditionInformation() { System.out.println(); - System.out.println(InformationType.STATION_ADDING_INFORMATION.getInformation()); + System.out.println(InformationType.STATION_ADDITION_INFORMATION.getInformation()); } public static void printStationDeletionInformation() { diff --git a/src/main/java/subway/view/output/station/StationTextView.java b/src/main/java/subway/view/output/station/StationTextView.java index 208f9f0ac..f31b4b66e 100644 --- a/src/main/java/subway/view/output/station/StationTextView.java +++ b/src/main/java/subway/view/output/station/StationTextView.java @@ -5,7 +5,7 @@ public class StationTextView { public static void printStationAddingText() { System.out.println(); - System.out.println(TextType.STATION_ADDING_TEXT.getText()); + System.out.println(TextType.STATION_ADDITION_TEXT.getText()); } public static void printStationDeletionText() { diff --git a/src/main/java/subway/view/output/ExceptionView.java b/src/main/java/subway/view/output/util/FeatureExceptionView.java similarity index 75% rename from src/main/java/subway/view/output/ExceptionView.java rename to src/main/java/subway/view/output/util/FeatureExceptionView.java index f012d3945..25dcdb7f0 100644 --- a/src/main/java/subway/view/output/ExceptionView.java +++ b/src/main/java/subway/view/output/util/FeatureExceptionView.java @@ -1,8 +1,8 @@ -package subway.view.output; +package subway.view.output.util; import subway.type.ExceptionType; -public class ExceptionView { +public class FeatureExceptionView { public static void printInvalidFeatureChoiceException() { System.out.println(); System.out.println(ExceptionType.INVALID_FEATURE_CHOICE.getException()); diff --git a/src/main/java/subway/view/output/ScreenView.java b/src/main/java/subway/view/output/util/ScreenView.java similarity index 78% rename from src/main/java/subway/view/output/ScreenView.java rename to src/main/java/subway/view/output/util/ScreenView.java index b710e0ca8..66a91fb34 100644 --- a/src/main/java/subway/view/output/ScreenView.java +++ b/src/main/java/subway/view/output/util/ScreenView.java @@ -1,4 +1,4 @@ -package subway.view.output; +package subway.view.output.util; import subway.type.ScreenType; @@ -8,32 +8,32 @@ public static void printMainScreen() { + ScreenType.STATION_MANAGEMENT.getScreen() + ScreenType.LINE_MANAGEMENT.getScreen() + ScreenType.SECTION_MANAGEMENT.getScreen() - + ScreenType.SUBWAY_MAP_PRINT.getScreen() + + ScreenType.SUBWAY_MAP_SHOW.getScreen() + ScreenType.QUITTING.getScreen() + ScreenType.FEATURE_CHOICE.getScreen()); } public static void printStationManagementScreen() { System.out.println(ScreenType.STATION_MANAGEMENT_SCREEN.getScreen() - + ScreenType.STATION_ADDING.getScreen() + + ScreenType.STATION_ADDITION.getScreen() + ScreenType.STATION_DELETION.getScreen() - + ScreenType.STATION_PRINT.getScreen() + + ScreenType.STATION_SHOW.getScreen() + ScreenType.BACK.getScreen() + ScreenType.FEATURE_CHOICE.getScreen()); } public static void printLineManagementScreen() { System.out.println(ScreenType.LINE_MANAGEMENT_SCREEN.getScreen() - + ScreenType.LINE_ADDING.getScreen() + + ScreenType.LINE_ADDITION.getScreen() + ScreenType.LINE_DELETION.getScreen() - + ScreenType.LINE_PRINT.getScreen() + + ScreenType.LINE_SHOW.getScreen() + ScreenType.BACK.getScreen() + ScreenType.FEATURE_CHOICE.getScreen()); } public static void printSectionManagementScreen() { System.out.println(ScreenType.SECTION_MANAGEMENT_SCREEN.getScreen() - + ScreenType.SECTION_ADDING.getScreen() + + ScreenType.SECTION_ADDITION.getScreen() + ScreenType.SECTION_DELETION.getScreen() + ScreenType.BACK.getScreen() + ScreenType.FEATURE_CHOICE.getScreen()); diff --git a/src/main/java/subway/view/output/util/StateView.java b/src/main/java/subway/view/output/util/StateView.java new file mode 100644 index 000000000..72073ffec --- /dev/null +++ b/src/main/java/subway/view/output/util/StateView.java @@ -0,0 +1,8 @@ +package subway.view.output.util; + +public class StateView { + public static boolean printNewLine() { + System.out.println(); + return true; + } +} From 02d098ceb3948183d83a04142bc5734f96c34f0b Mon Sep 17 00:00:00 2001 From: daeun Date: Tue, 15 Dec 2020 16:41:36 +0900 Subject: [PATCH 95/98] refactor(subway): follow Java Code Conventions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 코드 형식 변경 - 함수명 변경 - 클래스명 변경 - 주석 추가 --- docs/README.md | 8 ++-- src/main/java/subway/Application.java | 6 +++ .../subway/controller/LineController.java | 6 +++ .../subway/controller/SectionController.java | 6 +++ .../subway/controller/StationController.java | 6 +++ .../subway/controller/SubwayController.java | 6 +++ .../controller/TransitMapController.java | 6 +++ src/main/java/subway/domain/Line.java | 6 +++ src/main/java/subway/domain/Section.java | 6 +++ src/main/java/subway/domain/Station.java | 6 +++ src/main/java/subway/domain/Stations.java | 6 +++ src/main/java/subway/domain/TransitMap.java | 6 +++ .../subway/repository/LineRepository.java | 3 ++ .../subway/repository/StationRepository.java | 6 +++ .../repository/TransitMapRepository.java | 6 +++ .../initialization/LineInitialization.java | 6 +++ .../initialization/StationInitialization.java | 6 +++ .../TransitMapInitialization.java | 6 +++ .../java/subway/service/line/LineService.java | 30 ++++++------ .../line/addition/LineAdditionService.java | 6 +++ .../line/addition/LineAdditionValidation.java | 6 +++ .../line/deletion/LineDeletionService.java | 6 +++ .../line/deletion/LineDeletionValidation.java | 6 +++ .../service/line/show/LineShowService.java | 6 +++ .../service/section/SectionService.java | 44 +++++++---------- .../addition/SectionAdditionService.java | 6 +++ .../addition/SectionAdditionValidation.java | 6 +++ .../deletion/SectionDeletionService.java | 6 +++ .../deletion/SectionDeletionValidation.java | 6 +++ .../service/station/StationService.java | 25 +++++----- .../addition/StationAdditionValidation.java | 6 +++ .../StationAdditionValidationInterface.java | 6 +++ .../deletion/StationDeletionValidation.java | 6 +++ .../StationDeletionValidationInterface.java | 6 +++ .../station/show/StationShowInterface.java | 6 +++ .../station/show/StationShowService.java | 6 +++ .../service/subway/SubwayInterface.java | 6 +++ .../subway/service/subway/SubwayService.java | 24 ++++++---- .../service/transitmap/TransitMapService.java | 6 +++ .../show/TransitMapShowService.java | 6 +++ .../subway/service/util/ChoiceInterface.java | 13 +++++ .../subway/service/util/ChoiceService.java | 35 ++++++++++++++ .../subway/service/util/FeatureInterface.java | 6 +++ .../subway/service/util/StateInterface.java | 8 ---- .../subway/service/util/StateService.java | 47 ------------------- src/main/java/subway/type/BoundaryType.java | 6 +++ src/main/java/subway/type/CheckType.java | 6 +++ src/main/java/subway/type/ExceptionType.java | 6 +++ .../java/subway/type/InformationType.java | 6 +++ src/main/java/subway/type/InputType.java | 5 +- src/main/java/subway/type/LineType.java | 5 +- src/main/java/subway/type/ScreenType.java | 5 +- src/main/java/subway/type/StationType.java | 6 +++ src/main/java/subway/type/TextType.java | 6 +++ .../subway/view/input/line/LineScanView.java | 25 ++++++++-- .../view/input/section/SectionScanView.java | 34 +++++++++++--- .../view/input/station/StationScanView.java | 30 ++++++++++++ .../view/input/subway/SubwayScanView.java | 18 +++++++ .../view/output/line/LineExceptionView.java | 6 +++ .../view/output/line/LineInformationView.java | 6 +++ .../subway/view/output/line/LineTextView.java | 8 +++- .../output/section/SectionExceptionView.java | 6 +++ .../section/SectionInformationView.java | 6 +++ .../view/output/section/SectionTextView.java | 12 +++-- .../output/station/StationExceptionView.java | 6 +++ .../station/StationInformationView.java | 6 +++ .../view/output/station/StationTextView.java | 8 +++- .../util/FeatureChoiceExceptionView.java | 22 +++++++++ .../output/util/FeatureExceptionView.java | 10 ---- .../subway/view/output/util/ScreenView.java | 11 +++++ .../subway/view/output/util/StateView.java | 8 ---- 71 files changed, 560 insertions(+), 160 deletions(-) create mode 100644 src/main/java/subway/service/util/ChoiceInterface.java create mode 100644 src/main/java/subway/service/util/ChoiceService.java delete mode 100644 src/main/java/subway/service/util/StateInterface.java delete mode 100644 src/main/java/subway/service/util/StateService.java create mode 100644 src/main/java/subway/view/input/station/StationScanView.java create mode 100644 src/main/java/subway/view/input/subway/SubwayScanView.java create mode 100644 src/main/java/subway/view/output/util/FeatureChoiceExceptionView.java delete mode 100644 src/main/java/subway/view/output/util/FeatureExceptionView.java delete mode 100644 src/main/java/subway/view/output/util/StateView.java diff --git a/docs/README.md b/docs/README.md index 481f175c1..009de3272 100644 --- a/docs/README.md +++ b/docs/README.md @@ -144,10 +144,10 @@ - [x] switch/case 문도 사용하지 않는다. ### 추가사항 -- [ ] 코드 리팩토링을 진행한다. - - [ ] 1주차 피드백을 반영한다. - - [ ] 2주차 피드백을 반영한다. -- [ ] 주석은 Javadoc 형태로 작성한다. +- [x] 코드 리팩토링을 진행한다. + - [x] 1주차 피드백을 반영한다. + - [x] 2주차 피드백을 반영한다. +- [x] 주석은 Javadoc 형태로 작성한다. - [ ] README 문서를 상세하게 작성한다. ## 📝 License diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java index 12cb150fd..f7c314346 100644 --- a/src/main/java/subway/Application.java +++ b/src/main/java/subway/Application.java @@ -4,6 +4,12 @@ import java.util.Scanner; +/** + * Application.java : 메인 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ public class Application { public static void main(String[] args) { final Scanner scanner = new Scanner(System.in); diff --git a/src/main/java/subway/controller/LineController.java b/src/main/java/subway/controller/LineController.java index da2446825..0bd7e492a 100644 --- a/src/main/java/subway/controller/LineController.java +++ b/src/main/java/subway/controller/LineController.java @@ -4,6 +4,12 @@ import java.util.Scanner; +/** + * LineController.java : 지하철 노선에 대한 컨트롤러 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ public class LineController { public static void startLine(Scanner scanner) { LineService lineService = new LineService(); diff --git a/src/main/java/subway/controller/SectionController.java b/src/main/java/subway/controller/SectionController.java index 0eefc1089..69d95e236 100644 --- a/src/main/java/subway/controller/SectionController.java +++ b/src/main/java/subway/controller/SectionController.java @@ -4,6 +4,12 @@ import java.util.Scanner; +/** + * SectionController.java : 지하철 구간에 대한 컨트롤러 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ public class SectionController { public static void startSection(Scanner scanner) { SectionService sectionService = new SectionService(); diff --git a/src/main/java/subway/controller/StationController.java b/src/main/java/subway/controller/StationController.java index 622ba8384..ad53272eb 100644 --- a/src/main/java/subway/controller/StationController.java +++ b/src/main/java/subway/controller/StationController.java @@ -4,6 +4,12 @@ import java.util.Scanner; +/** + * StationController.java : 지하철 역에 대한 컨트롤러 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ public class StationController { public static void startStation(Scanner scanner) { StationService stationService = new StationService(); diff --git a/src/main/java/subway/controller/SubwayController.java b/src/main/java/subway/controller/SubwayController.java index e890e8e31..30a3815d2 100644 --- a/src/main/java/subway/controller/SubwayController.java +++ b/src/main/java/subway/controller/SubwayController.java @@ -7,6 +7,12 @@ import java.util.Scanner; +/** + * SubwayController.java : 지하철에 대한 컨트롤러 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ public class SubwayController { public void runSubway(Scanner scanner) { initializeSubway(); diff --git a/src/main/java/subway/controller/TransitMapController.java b/src/main/java/subway/controller/TransitMapController.java index 7158d2f02..fb6097bf6 100644 --- a/src/main/java/subway/controller/TransitMapController.java +++ b/src/main/java/subway/controller/TransitMapController.java @@ -2,6 +2,12 @@ import subway.service.transitmap.TransitMapService; +/** + * TransitMapController.java : 지하철 노선도에 대한 컨트롤러 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ public class TransitMapController { public static void startTransitMap() { TransitMapService.showTransitMap(); diff --git a/src/main/java/subway/domain/Line.java b/src/main/java/subway/domain/Line.java index f4d738d5a..fc35f0d9d 100644 --- a/src/main/java/subway/domain/Line.java +++ b/src/main/java/subway/domain/Line.java @@ -1,5 +1,11 @@ package subway.domain; +/** + * Line.java : 지하철 노선에 대한 도메인 모델 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ public class Line { private String name; diff --git a/src/main/java/subway/domain/Section.java b/src/main/java/subway/domain/Section.java index 3deb9e54c..6de80bc01 100644 --- a/src/main/java/subway/domain/Section.java +++ b/src/main/java/subway/domain/Section.java @@ -1,5 +1,11 @@ package subway.domain; +/** + * Section.java : 지하철 구간에 대한 도메인 모델 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ public class Section { private final String lineName; private final String stationName; diff --git a/src/main/java/subway/domain/Station.java b/src/main/java/subway/domain/Station.java index bdb142590..6ff94caf8 100644 --- a/src/main/java/subway/domain/Station.java +++ b/src/main/java/subway/domain/Station.java @@ -1,5 +1,11 @@ package subway.domain; +/** + * Station.java : 지하철 역에 대한 도메인 모델 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ public class Station { private String name; diff --git a/src/main/java/subway/domain/Stations.java b/src/main/java/subway/domain/Stations.java index 6498dc9b9..dc60bc64e 100644 --- a/src/main/java/subway/domain/Stations.java +++ b/src/main/java/subway/domain/Stations.java @@ -1,5 +1,11 @@ package subway.domain; +/** + * Stations.java : 지하철 상행 종점역, 하행 종점역에 대한 도메인 모델 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ public class Stations { private final String upStationName; private final String downStationName; diff --git a/src/main/java/subway/domain/TransitMap.java b/src/main/java/subway/domain/TransitMap.java index a22a72088..72d9dec3d 100644 --- a/src/main/java/subway/domain/TransitMap.java +++ b/src/main/java/subway/domain/TransitMap.java @@ -2,6 +2,12 @@ import java.util.LinkedList; +/** + * TransitMap.java : 지하철 노선도에 대한 도메인 모델 클래스 + * + * @author Daeun lee + * @version 1.0 + */ public class TransitMap { private Line transitMapLine; private LinkedList transitMapStations; diff --git a/src/main/java/subway/repository/LineRepository.java b/src/main/java/subway/repository/LineRepository.java index 481037bfd..89d703b28 100644 --- a/src/main/java/subway/repository/LineRepository.java +++ b/src/main/java/subway/repository/LineRepository.java @@ -7,6 +7,9 @@ import java.util.List; import java.util.Objects; +/** + * LineRepository.java : 지하철 노선에 대한 저장소 클래스 + */ public class LineRepository { private static final List lines = new ArrayList<>(); diff --git a/src/main/java/subway/repository/StationRepository.java b/src/main/java/subway/repository/StationRepository.java index 66ddb2d68..71088adc1 100644 --- a/src/main/java/subway/repository/StationRepository.java +++ b/src/main/java/subway/repository/StationRepository.java @@ -7,6 +7,12 @@ import java.util.List; import java.util.Objects; +/** + * StationRepository.java : 지하철 역에 대한 저장소 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ public class StationRepository { private static final List stations = new ArrayList<>(); diff --git a/src/main/java/subway/repository/TransitMapRepository.java b/src/main/java/subway/repository/TransitMapRepository.java index f4dd2ef75..7ceb07069 100644 --- a/src/main/java/subway/repository/TransitMapRepository.java +++ b/src/main/java/subway/repository/TransitMapRepository.java @@ -6,6 +6,12 @@ import java.util.*; +/** + * TransitMapRepository.java : 지하철 노선도에 대한 저장소 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ public class TransitMapRepository { private static final Map> transitMaps = new LinkedHashMap<>(); diff --git a/src/main/java/subway/service/initialization/LineInitialization.java b/src/main/java/subway/service/initialization/LineInitialization.java index 3a71a30b2..ff32e0f62 100644 --- a/src/main/java/subway/service/initialization/LineInitialization.java +++ b/src/main/java/subway/service/initialization/LineInitialization.java @@ -4,6 +4,12 @@ import subway.repository.LineRepository; import subway.type.LineType; +/** + * LineInitialization.java : 지하철 노선 초기화에 대한 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ public class LineInitialization { public static void initializeLines() { LineRepository.addLine(new Line(LineType.TWO.getLine())); diff --git a/src/main/java/subway/service/initialization/StationInitialization.java b/src/main/java/subway/service/initialization/StationInitialization.java index 3150f81c9..14e5d05fe 100644 --- a/src/main/java/subway/service/initialization/StationInitialization.java +++ b/src/main/java/subway/service/initialization/StationInitialization.java @@ -4,6 +4,12 @@ import subway.repository.StationRepository; import subway.type.StationType; +/** + * StationInitialization.java : 지하철 역 초기화에 대한 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ public class StationInitialization { public static void initializeStations() { StationRepository.addStation(new Station(StationType.EDUCATION_UNIVERSITY.getStation())); diff --git a/src/main/java/subway/service/initialization/TransitMapInitialization.java b/src/main/java/subway/service/initialization/TransitMapInitialization.java index 2c6d2f232..19830e2a7 100644 --- a/src/main/java/subway/service/initialization/TransitMapInitialization.java +++ b/src/main/java/subway/service/initialization/TransitMapInitialization.java @@ -10,6 +10,12 @@ import java.util.*; +/** + * TransitMapInitialization.java : 지하철 노선도 초기화에 대한 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ public class TransitMapInitialization { private static final List stations = StationRepository.stations(); diff --git a/src/main/java/subway/service/line/LineService.java b/src/main/java/subway/service/line/LineService.java index 00a482082..bf3d7e68c 100644 --- a/src/main/java/subway/service/line/LineService.java +++ b/src/main/java/subway/service/line/LineService.java @@ -4,7 +4,6 @@ import subway.domain.Station; import subway.domain.Stations; import subway.repository.LineRepository; -import subway.service.util.StateService; import subway.service.subway.SubwayService; import subway.service.util.FeatureInterface; import subway.service.line.addition.LineAdditionService; @@ -14,27 +13,29 @@ import subway.service.line.show.LineShowService; import subway.type.InputType; import subway.view.input.line.LineScanView; +import subway.view.output.util.FeatureChoiceExceptionView; import subway.view.output.util.ScreenView; -import subway.view.output.util.StateView; -import subway.view.output.line.LineTextView; import java.util.LinkedList; import java.util.List; import java.util.Scanner; +/** + * LineService.java : 지하철 노선 비즈니스 로직에 대한 서비스 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ public class LineService extends SubwayService implements FeatureInterface { @Override public void manage(Scanner scanner){ - StateService stateService = new StateService(); LineService lineService = new LineService(); System.out.println(); while (true) { - ScreenView.printLineManagementScreen(); - String lineInput = scanner.nextLine(); + String lineInput = LineScanView.scanLineInputForManagement(scanner); - if ((stateService.check(lineInput)) - && (lineService.choose(lineInput, scanner))) { + if (lineService.choose(lineInput, scanner)) { break; } } @@ -52,18 +53,18 @@ public boolean choose(String input, Scanner scanner) { return show(); } if (input.equals(InputType.INPUT_BACK.getInput())) { - return StateView.printNewLine(); + return ScreenView.printNewLine(); } - return false; + return FeatureChoiceExceptionView.printInvalidChoiceException(); } @Override public boolean add(Scanner scanner) { LineAdditionValidation lineAdditionValidation = new LineAdditionValidation(); - String lineName = LineScanView.scanLineName(scanner); - String upStationName = LineScanView.scanUpStationName(scanner); - String downStationName = LineScanView.scanDownStationName(scanner); + String lineName = LineScanView.scanLineNameForAddition(scanner); + String upStationName = LineScanView.scanUpStationNameForAddition(scanner); + String downStationName = LineScanView.scanDownStationNameForAddition(scanner); if (lineAdditionValidation.checkNameAdditionValidation( lineName, new Stations(upStationName, downStationName))) { @@ -79,8 +80,7 @@ lineName, new Stations(upStationName, downStationName))) { public boolean delete(Scanner scanner) { LineDeletionValidation lineNameDeletionValidation = new LineDeletionValidation(); - LineTextView.printLineDeletionText(); - String lineName = scanner.nextLine(); + String lineName = LineScanView.scanLineNameForDeletion(scanner); Line lineForDeletion = LineDeletionService.getLineForDeletion(lineName); diff --git a/src/main/java/subway/service/line/addition/LineAdditionService.java b/src/main/java/subway/service/line/addition/LineAdditionService.java index 0cdf0c59f..5d7ad0dc5 100644 --- a/src/main/java/subway/service/line/addition/LineAdditionService.java +++ b/src/main/java/subway/service/line/addition/LineAdditionService.java @@ -9,6 +9,12 @@ import java.util.LinkedList; +/** + * LineAdditionService.java : 지하철 노선 추가 로직에 대한 서비스 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ public class LineAdditionService { public static LinkedList addStationNames(String upStationName, String downStationName) { LinkedList stationNames = new LinkedList<>(); diff --git a/src/main/java/subway/service/line/addition/LineAdditionValidation.java b/src/main/java/subway/service/line/addition/LineAdditionValidation.java index 1bc06b356..37ef6c591 100644 --- a/src/main/java/subway/service/line/addition/LineAdditionValidation.java +++ b/src/main/java/subway/service/line/addition/LineAdditionValidation.java @@ -10,6 +10,12 @@ import java.util.List; +/** + * LineAdditionValidation.java : 지하철 노선 추가 로직 검증에 대한 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ public class LineAdditionValidation extends StationAdditionValidation { public boolean checkNameAdditionValidation(String lineName, Stations stations) { if (!checkLineNameAdditionValidation(lineName)) { diff --git a/src/main/java/subway/service/line/deletion/LineDeletionService.java b/src/main/java/subway/service/line/deletion/LineDeletionService.java index 42c7e36bf..a0e183b69 100644 --- a/src/main/java/subway/service/line/deletion/LineDeletionService.java +++ b/src/main/java/subway/service/line/deletion/LineDeletionService.java @@ -7,6 +7,12 @@ import java.util.List; +/** + * LineDeletionService.java : 지하철 노선 삭제 로직에 대한 서비스 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ public class LineDeletionService { public static Line getLineForDeletion(String lineName) { Line lineForDeletion = new Line(lineName); diff --git a/src/main/java/subway/service/line/deletion/LineDeletionValidation.java b/src/main/java/subway/service/line/deletion/LineDeletionValidation.java index ca15442a6..79e0ed5da 100644 --- a/src/main/java/subway/service/line/deletion/LineDeletionValidation.java +++ b/src/main/java/subway/service/line/deletion/LineDeletionValidation.java @@ -4,6 +4,12 @@ import subway.service.station.deletion.StationDeletionValidation; import subway.view.output.line.LineExceptionView; +/** + * LineDeletionValidation.java : 지하철 노선 삭제 로직 검증에 대한 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ public class LineDeletionValidation extends StationDeletionValidation { @Override public boolean checkNameDeletionValidation(String lineName) { diff --git a/src/main/java/subway/service/line/show/LineShowService.java b/src/main/java/subway/service/line/show/LineShowService.java index d63348d8d..2e800524f 100644 --- a/src/main/java/subway/service/line/show/LineShowService.java +++ b/src/main/java/subway/service/line/show/LineShowService.java @@ -6,6 +6,12 @@ import java.util.List; +/** + * LineShowService.java : 지하철 노선 조회 로직에 대한 서비스 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ public class LineShowService extends StationShowService { @Override public void readNames(StringBuilder stringBuilder, List lineNames) { diff --git a/src/main/java/subway/service/section/SectionService.java b/src/main/java/subway/service/section/SectionService.java index 74863f597..044f9fb3d 100644 --- a/src/main/java/subway/service/section/SectionService.java +++ b/src/main/java/subway/service/section/SectionService.java @@ -8,14 +8,18 @@ import subway.service.station.StationService; import subway.type.InputType; import subway.view.input.section.SectionScanView; -import subway.view.output.util.FeatureExceptionView; +import subway.view.output.util.FeatureChoiceExceptionView; import subway.view.output.util.ScreenView; -import subway.view.output.util.StateView; import subway.view.output.section.SectionInformationView; -import subway.view.output.section.SectionTextView; import java.util.Scanner; +/** + * SectionService.java : 지하철 구간 비즈니스 로직에 대한 서비스 클래스 + * * + * @author Daeun Lee + * @version 1.0 + */ public class SectionService extends StationService { @Override public void manage(Scanner scanner) { @@ -23,28 +27,14 @@ public void manage(Scanner scanner) { System.out.println(); while (true) { - ScreenView.printSectionManagementScreen(); - String sectionInput = scanner.nextLine(); + String sectionInput = SectionScanView.scanSectionInputForManagement(scanner); - if (sectionService.check(sectionInput)) { - sectionService.choose(sectionInput, scanner); + if (sectionService.choose(sectionInput, scanner)) { break; } - FeatureExceptionView.printInvalidFeatureChoiceException(); } } - @Override - public boolean check(String input) { - if (input.equals(InputType.INPUT_ONE.getInput())) { - return true; - } - if (input.equals(InputType.INPUT_TWO.getInput())) { - return true; - } - return input.equals(InputType.INPUT_BACK.getInput()); - } - @Override public boolean choose(String input, Scanner scanner) { if (input.equals(InputType.INPUT_ONE.getInput())) { @@ -54,18 +44,18 @@ public boolean choose(String input, Scanner scanner) { return delete(scanner); } if (input.equals(InputType.INPUT_BACK.getInput())) { - return StateView.printNewLine(); + return ScreenView.printNewLine(); } - return false; + return FeatureChoiceExceptionView.printInvalidChoiceException(); } @Override public boolean add(Scanner scanner) { SectionAdditionValidation sectionAdditionValidation = new SectionAdditionValidation(); - String lineName = SectionScanView.scanLineName(scanner); - String stationName = SectionScanView.scanStationName(scanner); - String order = SectionScanView.scanOrder(scanner); + String lineName = SectionScanView.scanLineNameForAddition(scanner); + String stationName = SectionScanView.scanStationNameForAddition(scanner); + String order = SectionScanView.scanOrderForAddition(scanner); Section section = new Section(lineName, stationName, order); if (sectionAdditionValidation.checkSectionAdditionValidation(section)) { @@ -81,10 +71,8 @@ public boolean add(Scanner scanner) { public boolean delete(Scanner scanner) { SectionDeletionValidation sectionDeletionValidation = new SectionDeletionValidation(); - SectionTextView.printSectionDeletionLineText(); - String lineName = scanner.nextLine(); - SectionTextView.printSectionDeletionStationText(); - String stationName = scanner.nextLine(); + String lineName = SectionScanView.scanLineNameForDeletion(scanner); + String stationName = SectionScanView.scanStationNameForDeletion(scanner); if (sectionDeletionValidation.checkSectionDeletionValidation(lineName, stationName)) { SectionDeletionService.deleteSection(lineName, stationName); diff --git a/src/main/java/subway/service/section/addition/SectionAdditionService.java b/src/main/java/subway/service/section/addition/SectionAdditionService.java index dc6dd7f71..37bf7212f 100644 --- a/src/main/java/subway/service/section/addition/SectionAdditionService.java +++ b/src/main/java/subway/service/section/addition/SectionAdditionService.java @@ -7,6 +7,12 @@ import java.util.*; +/** + * SectionAdditionService.java : 지하철 구간 추가 로직에 대한 서비스 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ public class SectionAdditionService { public static LinkedList getStationValuesInLine(String lineName) { Map> transitMaps = TransitMapRepository.transitMaps(); diff --git a/src/main/java/subway/service/section/addition/SectionAdditionValidation.java b/src/main/java/subway/service/section/addition/SectionAdditionValidation.java index 78133af3f..2ae821184 100644 --- a/src/main/java/subway/service/section/addition/SectionAdditionValidation.java +++ b/src/main/java/subway/service/section/addition/SectionAdditionValidation.java @@ -13,6 +13,12 @@ import java.util.LinkedList; import java.util.List; +/** + * SectionAdditionValidation.java : 지하철 구간 추가 로직 검증에 대한 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ public class SectionAdditionValidation { public boolean checkSectionAdditionValidation(Section section) { if (!checkNamesValidation(section.getLineName(), section.getStationName())) { diff --git a/src/main/java/subway/service/section/deletion/SectionDeletionService.java b/src/main/java/subway/service/section/deletion/SectionDeletionService.java index 2e7fc6228..f5630d549 100644 --- a/src/main/java/subway/service/section/deletion/SectionDeletionService.java +++ b/src/main/java/subway/service/section/deletion/SectionDeletionService.java @@ -7,6 +7,12 @@ import java.util.LinkedList; import java.util.Map; +/** + * SectionDeletionService.java : 지하철 구간 삭제 로직에 대한 서비스 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ public class SectionDeletionService { public static void deleteSection(String lineName, String stationName) { Map> transitMaps = TransitMapRepository.transitMaps(); diff --git a/src/main/java/subway/service/section/deletion/SectionDeletionValidation.java b/src/main/java/subway/service/section/deletion/SectionDeletionValidation.java index dfd00085e..0cbc53948 100644 --- a/src/main/java/subway/service/section/deletion/SectionDeletionValidation.java +++ b/src/main/java/subway/service/section/deletion/SectionDeletionValidation.java @@ -8,6 +8,12 @@ import java.util.List; +/** + * SectionDeletionValidation.java : 지하철 구간 삭제 로직 검증에 대한 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ public class SectionDeletionValidation { public boolean checkSectionDeletionValidation(String lineName, String stationName) { if (!checkLineNameValidation(lineName)) { diff --git a/src/main/java/subway/service/station/StationService.java b/src/main/java/subway/service/station/StationService.java index be7226e91..187e4b433 100644 --- a/src/main/java/subway/service/station/StationService.java +++ b/src/main/java/subway/service/station/StationService.java @@ -2,31 +2,34 @@ import subway.domain.Station; import subway.repository.StationRepository; -import subway.service.util.StateService; +import subway.service.util.ChoiceService; import subway.service.subway.SubwayService; import subway.service.util.FeatureInterface; import subway.service.station.addition.StationAdditionValidation; import subway.service.station.deletion.StationDeletionValidation; import subway.service.station.show.StationShowService; +import subway.view.input.station.StationScanView; import subway.view.output.station.StationInformationView; -import subway.view.output.util.ScreenView; -import subway.view.output.station.StationTextView; import java.util.List; import java.util.Scanner; +/** + * StationService.java : 지하철 역 비즈니스 로직에 대한 서비스 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ public class StationService extends SubwayService implements FeatureInterface { @Override public void manage(Scanner scanner) { - StateService stateService = new StateService(); + ChoiceService stateService = new ChoiceService(); System.out.println(); while (true) { - ScreenView.printStationManagementScreen(); - String stationInput = scanner.nextLine(); + String stationInput = StationScanView.scanStationInputForManagement(scanner); - if ((stateService.check(stationInput)) - && (stateService.choose(stationInput, scanner))) { + if (stateService.choose(stationInput, scanner)) { break; } } @@ -36,8 +39,7 @@ public void manage(Scanner scanner) { public boolean add(Scanner scanner) { StationAdditionValidation stationAdditionValidation = new StationAdditionValidation(); - StationTextView.printStationAddingText(); - String stationName = scanner.nextLine(); + String stationName = StationScanView.scanStationNameForAddition(scanner); if (stationAdditionValidation.checkNameAdditionValidation(stationName)) { StationRepository.addStation(new Station(stationName)); @@ -52,8 +54,7 @@ public boolean add(Scanner scanner) { public boolean delete(Scanner scanner) { StationDeletionValidation stationNameDeletionValidation = new StationDeletionValidation(); - StationTextView.printStationDeletionText(); - String stationName = scanner.nextLine(); + String stationName = StationScanView.scanStationNameForDeletion(scanner); if (stationNameDeletionValidation.checkNameDeletionValidation(stationName)) { StationInformationView.printStationDeletionInformation(); diff --git a/src/main/java/subway/service/station/addition/StationAdditionValidation.java b/src/main/java/subway/service/station/addition/StationAdditionValidation.java index cc4738e8e..73eaf68f0 100644 --- a/src/main/java/subway/service/station/addition/StationAdditionValidation.java +++ b/src/main/java/subway/service/station/addition/StationAdditionValidation.java @@ -7,6 +7,12 @@ import java.util.List; +/** + * StationAdditionValidation.java : 지하철 역 추가 로직 검증에 대한 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ public class StationAdditionValidation implements StationAdditionValidationInterface { @Override public boolean checkNameAdditionValidation(String stationName) { diff --git a/src/main/java/subway/service/station/addition/StationAdditionValidationInterface.java b/src/main/java/subway/service/station/addition/StationAdditionValidationInterface.java index c323a484d..d451dd1b0 100644 --- a/src/main/java/subway/service/station/addition/StationAdditionValidationInterface.java +++ b/src/main/java/subway/service/station/addition/StationAdditionValidationInterface.java @@ -1,5 +1,11 @@ package subway.service.station.addition; +/** + * StationAdditionValidationInterface.java : 지하철 역 추가 로직 검증에 대한 인터페이스 + * + * @author Daeun Lee + * @version 1.0 + */ public interface StationAdditionValidationInterface { boolean checkNameAdditionValidation(String name); boolean checkNameDuplication(String name); diff --git a/src/main/java/subway/service/station/deletion/StationDeletionValidation.java b/src/main/java/subway/service/station/deletion/StationDeletionValidation.java index f263e5c98..7055401d3 100644 --- a/src/main/java/subway/service/station/deletion/StationDeletionValidation.java +++ b/src/main/java/subway/service/station/deletion/StationDeletionValidation.java @@ -7,6 +7,12 @@ import java.util.LinkedList; import java.util.List; +/** + * StationDeletionValidation.java : 지하철 역 삭제 로직 검증에 대한 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ public class StationDeletionValidation implements StationDeletionValidationInterface { @Override public boolean checkNameDeletionValidation(String stationName) { diff --git a/src/main/java/subway/service/station/deletion/StationDeletionValidationInterface.java b/src/main/java/subway/service/station/deletion/StationDeletionValidationInterface.java index cdd47b8ec..e2a0fd80c 100644 --- a/src/main/java/subway/service/station/deletion/StationDeletionValidationInterface.java +++ b/src/main/java/subway/service/station/deletion/StationDeletionValidationInterface.java @@ -1,5 +1,11 @@ package subway.service.station.deletion; +/** + * StationDeletionValidationInterface.java : 지하철 역 삭제 로직 검증에 대한 인터페이스 + * + * @author Daeun Lee + * @version 1.0 + */ public interface StationDeletionValidationInterface { boolean checkNameDeletionValidation(String name); boolean checkNameInTransitMap(String name); diff --git a/src/main/java/subway/service/station/show/StationShowInterface.java b/src/main/java/subway/service/station/show/StationShowInterface.java index 5cb5c209d..26db013f7 100644 --- a/src/main/java/subway/service/station/show/StationShowInterface.java +++ b/src/main/java/subway/service/station/show/StationShowInterface.java @@ -2,6 +2,12 @@ import java.util.List; +/** + * StationShowInterface.java : 지하철 역 조회 로직에 대한 인터페이스 + * + * @author Daeun Lee + * @version 1.0 + */ public interface StationShowInterface { void readNames(StringBuilder stringBuilder, List stationNames); void appendListText(StringBuilder stringBuilder); diff --git a/src/main/java/subway/service/station/show/StationShowService.java b/src/main/java/subway/service/station/show/StationShowService.java index 5d22c27ad..a73eef1b9 100644 --- a/src/main/java/subway/service/station/show/StationShowService.java +++ b/src/main/java/subway/service/station/show/StationShowService.java @@ -5,6 +5,12 @@ import java.util.List; +/** + * StationShowService.java : 지하철 역 조회 로직에 대한 서비스 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ public class StationShowService implements StationShowInterface { @Override public void readNames(StringBuilder stringBuilder, List stationNames) { diff --git a/src/main/java/subway/service/subway/SubwayInterface.java b/src/main/java/subway/service/subway/SubwayInterface.java index 98e015d40..a51aa017c 100644 --- a/src/main/java/subway/service/subway/SubwayInterface.java +++ b/src/main/java/subway/service/subway/SubwayInterface.java @@ -2,6 +2,12 @@ import java.util.Scanner; +/** + * SubwayInterface.java : 지하철 비즈니스 로직에 대한 인터페이스 + * + * @author Daeun Lee + * @version 1.0 + */ public interface SubwayInterface { void manage(Scanner scanner); } diff --git a/src/main/java/subway/service/subway/SubwayService.java b/src/main/java/subway/service/subway/SubwayService.java index 7123c8aac..b5c77f336 100644 --- a/src/main/java/subway/service/subway/SubwayService.java +++ b/src/main/java/subway/service/subway/SubwayService.java @@ -4,35 +4,39 @@ import subway.controller.SectionController; import subway.controller.StationController; import subway.controller.TransitMapController; -import subway.service.util.StateService; +import subway.service.util.ChoiceService; import subway.type.InputType; -import subway.view.output.util.FeatureExceptionView; -import subway.view.output.util.ScreenView; +import subway.view.input.subway.SubwayScanView; +import subway.view.output.util.FeatureChoiceExceptionView; import java.util.Scanner; -public class SubwayService extends StateService implements SubwayInterface { +/** + * SubwayService.java : 지하철 비즈니스 로직에 대한 서비스 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ +public class SubwayService extends ChoiceService implements SubwayInterface { @Override public void manage(Scanner scanner) { SubwayService subwayService = new SubwayService(); while (true) { - ScreenView.printMainScreen(); - String mainInput = scanner.nextLine(); + String mainInput = SubwayScanView.scanMainInputForManagement(scanner); - if (subwayService.check(mainInput)) { + if (check(mainInput)) { subwayService.choose(mainInput, scanner); continue; } if (quit(mainInput)) { break; } - FeatureExceptionView.printInvalidFeatureChoiceException(); + FeatureChoiceExceptionView.printInvalidFeatureChoiceException(); } } - @Override - public boolean check(String input) { + public static boolean check(String input) { if (input.equals(InputType.INPUT_ONE.getInput())) { return true; } diff --git a/src/main/java/subway/service/transitmap/TransitMapService.java b/src/main/java/subway/service/transitmap/TransitMapService.java index 98f85cd73..d53a51d86 100644 --- a/src/main/java/subway/service/transitmap/TransitMapService.java +++ b/src/main/java/subway/service/transitmap/TransitMapService.java @@ -8,6 +8,12 @@ import java.util.LinkedList; import java.util.Map; +/** + * TransitMapService.java : 지하철 노선도 비즈니스 로직에 대한 서비스 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ public class TransitMapService { public static void showTransitMap() { StringBuilder stringBuilder = new StringBuilder(); diff --git a/src/main/java/subway/service/transitmap/show/TransitMapShowService.java b/src/main/java/subway/service/transitmap/show/TransitMapShowService.java index 8c686667b..d20be5532 100644 --- a/src/main/java/subway/service/transitmap/show/TransitMapShowService.java +++ b/src/main/java/subway/service/transitmap/show/TransitMapShowService.java @@ -11,6 +11,12 @@ import java.util.List; import java.util.Map; +/** + * TransitMapShowService.java : 지하철 노선도 출력 로직에 대한 서비스 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ public class TransitMapShowService { public static void readTransitMap(StringBuilder stringBuilder, Map> transitMaps) { appendTransitMapText(stringBuilder); diff --git a/src/main/java/subway/service/util/ChoiceInterface.java b/src/main/java/subway/service/util/ChoiceInterface.java new file mode 100644 index 000000000..7e2d26687 --- /dev/null +++ b/src/main/java/subway/service/util/ChoiceInterface.java @@ -0,0 +1,13 @@ +package subway.service.util; + +import java.util.Scanner; + +/** + * StateInterface.java : 지하철 역, 지하철 노선 기능 선택에 대한 인터페이스 + * + * @author Daeun Lee + * @version 1.0 + */ +public interface ChoiceInterface { + boolean choose(String input, Scanner scanner); +} diff --git a/src/main/java/subway/service/util/ChoiceService.java b/src/main/java/subway/service/util/ChoiceService.java new file mode 100644 index 000000000..5bca42d67 --- /dev/null +++ b/src/main/java/subway/service/util/ChoiceService.java @@ -0,0 +1,35 @@ +package subway.service.util; + +import subway.service.station.StationService; +import subway.type.InputType; +import subway.view.output.util.FeatureChoiceExceptionView; +import subway.view.output.util.ScreenView; + +import java.util.Scanner; + +/** + * StateService.java : 지하철 역, 지하철 노선 기능 선택에 대한 서비스 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ +public class ChoiceService implements ChoiceInterface { + @Override + public boolean choose(String input, Scanner scanner) { + StationService stationService = new StationService(); + + if (input.equals(InputType.INPUT_ONE.getInput())) { + return stationService.add(scanner); + } + if (input.equals(InputType.INPUT_TWO.getInput())) { + return stationService.delete(scanner); + } + if (input.equals(InputType.INPUT_THREE.getInput())) { + return stationService.show(); + } + if (input.equals(InputType.INPUT_BACK.getInput())) { + return ScreenView.printNewLine(); + } + return FeatureChoiceExceptionView.printInvalidChoiceException(); + } +} diff --git a/src/main/java/subway/service/util/FeatureInterface.java b/src/main/java/subway/service/util/FeatureInterface.java index b44614891..847f08667 100644 --- a/src/main/java/subway/service/util/FeatureInterface.java +++ b/src/main/java/subway/service/util/FeatureInterface.java @@ -2,6 +2,12 @@ import java.util.Scanner; +/** + * FeatureInterface.java : 지하철 역, 지하철 노선 기능에 대한 인터페이스 + * + * @author Daeun Lee + * @version 1.0 + */ public interface FeatureInterface { boolean add(Scanner scanner); boolean delete(Scanner scanner); diff --git a/src/main/java/subway/service/util/StateInterface.java b/src/main/java/subway/service/util/StateInterface.java deleted file mode 100644 index 32f6965d2..000000000 --- a/src/main/java/subway/service/util/StateInterface.java +++ /dev/null @@ -1,8 +0,0 @@ -package subway.service.util; - -import java.util.Scanner; - -public interface StateInterface { - boolean check(String input); - boolean choose(String input, Scanner scanner); -} diff --git a/src/main/java/subway/service/util/StateService.java b/src/main/java/subway/service/util/StateService.java deleted file mode 100644 index b2bd7c4e9..000000000 --- a/src/main/java/subway/service/util/StateService.java +++ /dev/null @@ -1,47 +0,0 @@ -package subway.service.util; - -import subway.service.station.StationService; -import subway.type.InputType; -import subway.view.output.util.FeatureExceptionView; -import subway.view.output.util.StateView; - -import java.util.Scanner; - -public class StateService implements StateInterface { - @Override - public boolean check(String input) { - if (input.equals(InputType.INPUT_ONE.getInput())) { - return true; - } - if (input.equals(InputType.INPUT_TWO.getInput())) { - return true; - } - if (input.equals(InputType.INPUT_THREE.getInput())) { - return true; - } - if (input.equals(InputType.INPUT_BACK.getInput())) { - return true; - } - FeatureExceptionView.printInvalidFeatureChoiceException(); - return false; - } - - @Override - public boolean choose(String input, Scanner scanner) { - StationService stationService = new StationService(); - - if (input.equals(InputType.INPUT_ONE.getInput())) { - return stationService.add(scanner); - } - if (input.equals(InputType.INPUT_TWO.getInput())) { - return stationService.delete(scanner); - } - if (input.equals(InputType.INPUT_THREE.getInput())) { - return stationService.show(); - } - if (input.equals(InputType.INPUT_BACK.getInput())) { - return StateView.printNewLine(); - } - return false; - } -} diff --git a/src/main/java/subway/type/BoundaryType.java b/src/main/java/subway/type/BoundaryType.java index 7f9bb639d..d8fda20af 100644 --- a/src/main/java/subway/type/BoundaryType.java +++ b/src/main/java/subway/type/BoundaryType.java @@ -1,5 +1,11 @@ package subway.type; +/** + * BoundaryType.java : 경계 값 상수를 모아둔 Enum 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ public enum BoundaryType { NAME_LENGTH_BOUNDARY(2), diff --git a/src/main/java/subway/type/CheckType.java b/src/main/java/subway/type/CheckType.java index 13e1ac1ec..9726f1520 100644 --- a/src/main/java/subway/type/CheckType.java +++ b/src/main/java/subway/type/CheckType.java @@ -1,5 +1,11 @@ package subway.type; +/** + * CheckType.java : 입력 값 마지막 문자 확인용 상수를 모아둔 Enum 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ public enum CheckType { STATION_CHECK("역"), LINE_CHECK("선"); diff --git a/src/main/java/subway/type/ExceptionType.java b/src/main/java/subway/type/ExceptionType.java index a16492e7f..b6e4e65b2 100644 --- a/src/main/java/subway/type/ExceptionType.java +++ b/src/main/java/subway/type/ExceptionType.java @@ -1,5 +1,11 @@ package subway.type; +/** + * ExceptionType.java : 예외 처리 문구 상수를 모아둔 Enum 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ public enum ExceptionType { ERROR("[ERROR] "), diff --git a/src/main/java/subway/type/InformationType.java b/src/main/java/subway/type/InformationType.java index 97e560e1d..977c34caf 100644 --- a/src/main/java/subway/type/InformationType.java +++ b/src/main/java/subway/type/InformationType.java @@ -1,5 +1,11 @@ package subway.type; +/** + * InformationType.java : 실행 결과 문구 상수를 모아둔 Enum 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ public enum InformationType { INFORMATION("[INFO] "), diff --git a/src/main/java/subway/type/InputType.java b/src/main/java/subway/type/InputType.java index daeb45d56..e93250fca 100644 --- a/src/main/java/subway/type/InputType.java +++ b/src/main/java/subway/type/InputType.java @@ -1,7 +1,10 @@ package subway.type; /** - * 기능 입력 문자 상수를 모아둔 Enum 클래스 + * InputType.java : 화면 기능 입력 값 상수를 모아둔 Enum 클래스 + * + * @author Daeun Lee + * @version 1.0 */ public enum InputType { INPUT_ONE("1"), diff --git a/src/main/java/subway/type/LineType.java b/src/main/java/subway/type/LineType.java index 9cd3b6778..3706190bb 100644 --- a/src/main/java/subway/type/LineType.java +++ b/src/main/java/subway/type/LineType.java @@ -1,7 +1,10 @@ package subway.type; /** - * 지하철 노선 초기 설정 상수를 모아둔 Enum 클래스 + * LineType.java : 지하철 노선 초기화용 상수를 모아둔 Enum 클래스 + * + * @author Daeun Lee + * @version 1.0 */ public enum LineType { TWO("2호선"), diff --git a/src/main/java/subway/type/ScreenType.java b/src/main/java/subway/type/ScreenType.java index f7f22273a..b8cc7d4e9 100644 --- a/src/main/java/subway/type/ScreenType.java +++ b/src/main/java/subway/type/ScreenType.java @@ -1,7 +1,10 @@ package subway.type; /** - * 각종 화면 출력 문구 상수를 모아둔 Enum 클래스 + * ScreenType.java : 화면 문구 상수를 모아둔 Enum 클래스 + * + * @author Daeun Lee + * @version 1.0 */ public enum ScreenType { MAIN_SCREEN("## 메인 화면\n"), diff --git a/src/main/java/subway/type/StationType.java b/src/main/java/subway/type/StationType.java index 209627531..a62fc7b18 100644 --- a/src/main/java/subway/type/StationType.java +++ b/src/main/java/subway/type/StationType.java @@ -1,5 +1,11 @@ package subway.type; +/** + * StationType.java : 지하철 역 초기화용 상수를 모아둔 Enum 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ public enum StationType { EDUCATION_UNIVERSITY("교대역"), GANGNAM("강남역"), diff --git a/src/main/java/subway/type/TextType.java b/src/main/java/subway/type/TextType.java index 61e28bad4..7d60bb7a9 100644 --- a/src/main/java/subway/type/TextType.java +++ b/src/main/java/subway/type/TextType.java @@ -1,5 +1,11 @@ package subway.type; +/** + * TextType.java : 화면 출력 문구 상수를 모아둔 Enum 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ public enum TextType { NEW_LINE("\n"), HORIZONTAL_LINES("---"), diff --git a/src/main/java/subway/view/input/line/LineScanView.java b/src/main/java/subway/view/input/line/LineScanView.java index 289b4a3c0..cb1be29aa 100644 --- a/src/main/java/subway/view/input/line/LineScanView.java +++ b/src/main/java/subway/view/input/line/LineScanView.java @@ -1,22 +1,39 @@ package subway.view.input.line; import subway.view.output.line.LineTextView; +import subway.view.output.util.ScreenView; import java.util.Scanner; +/** + * LineScanView.java : 지하철 노선 기능 입력에 대한 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ public class LineScanView { - public static String scanLineName(Scanner scanner) { - LineTextView.printLineAddingText(); + public static String scanLineInputForManagement(Scanner scanner) { + ScreenView.printLineManagementScreen(); return scanner.nextLine(); } - public static String scanUpStationName(Scanner scanner) { + public static String scanLineNameForAddition(Scanner scanner) { + LineTextView.printLineAdditionText(); + return scanner.nextLine(); + } + + public static String scanUpStationNameForAddition(Scanner scanner) { LineTextView.printLineUpStationNameText(); return scanner.nextLine(); } - public static String scanDownStationName(Scanner scanner) { + public static String scanDownStationNameForAddition(Scanner scanner) { LineTextView.printLineDownStationNameText(); return scanner.nextLine(); } + + public static String scanLineNameForDeletion(Scanner scanner) { + LineTextView.printLineDeletionText(); + return scanner.nextLine(); + } } diff --git a/src/main/java/subway/view/input/section/SectionScanView.java b/src/main/java/subway/view/input/section/SectionScanView.java index bcf0c7216..50a825ccf 100644 --- a/src/main/java/subway/view/input/section/SectionScanView.java +++ b/src/main/java/subway/view/input/section/SectionScanView.java @@ -1,22 +1,44 @@ package subway.view.input.section; import subway.view.output.section.SectionTextView; +import subway.view.output.util.ScreenView; import java.util.Scanner; +/** + * SectionScanView.java : 지하철 구간 기능 입력에 대한 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ public class SectionScanView { - public static String scanLineName(Scanner scanner) { - SectionTextView.printSectionAddingLineText(); + public static String scanSectionInputForManagement(Scanner scanner) { + ScreenView.printSectionManagementScreen(); return scanner.nextLine(); } - public static String scanStationName(Scanner scanner) { - SectionTextView.printSectionAddingStationText(); + public static String scanLineNameForAddition(Scanner scanner) { + SectionTextView.printSectionAdditionLineText(); return scanner.nextLine(); } - public static String scanOrder(Scanner scanner) { - SectionTextView.printSectionAddingOrderText(); + public static String scanStationNameForAddition(Scanner scanner) { + SectionTextView.printSectionAdditionStationText(); + return scanner.nextLine(); + } + + public static String scanOrderForAddition(Scanner scanner) { + SectionTextView.printSectionAdditionOrderText(); + return scanner.nextLine(); + } + + public static String scanLineNameForDeletion(Scanner scanner) { + SectionTextView.printSectionDeletionLineText(); + return scanner.nextLine(); + } + + public static String scanStationNameForDeletion(Scanner scanner) { + SectionTextView.printSectionDeletionStationText(); return scanner.nextLine(); } } diff --git a/src/main/java/subway/view/input/station/StationScanView.java b/src/main/java/subway/view/input/station/StationScanView.java new file mode 100644 index 000000000..0241d112c --- /dev/null +++ b/src/main/java/subway/view/input/station/StationScanView.java @@ -0,0 +1,30 @@ +package subway.view.input.station; + +import subway.view.output.station.StationTextView; +import subway.view.output.util.ScreenView; + +import java.util.Scanner; + +/** + * StationScanView.java : 지하철 역 기능 입력에 대한 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ +public class StationScanView { + public static String scanStationInputForManagement(Scanner scanner) { + ScreenView.printStationManagementScreen(); + return scanner.nextLine(); + + } + + public static String scanStationNameForAddition(Scanner scanner) { + StationTextView.printStationAdditionText(); + return scanner.nextLine(); + } + + public static String scanStationNameForDeletion(Scanner scanner) { + StationTextView.printStationDeletionText(); + return scanner.nextLine(); + } +} diff --git a/src/main/java/subway/view/input/subway/SubwayScanView.java b/src/main/java/subway/view/input/subway/SubwayScanView.java new file mode 100644 index 000000000..cae31e8e7 --- /dev/null +++ b/src/main/java/subway/view/input/subway/SubwayScanView.java @@ -0,0 +1,18 @@ +package subway.view.input.subway; + +import subway.view.output.util.ScreenView; + +import java.util.Scanner; + +/** + * SubwayScanView.java : 지하철 기능 입력에 대한 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ +public class SubwayScanView { + public static String scanMainInputForManagement(Scanner scanner) { + ScreenView.printMainScreen(); + return scanner.nextLine(); + } +} diff --git a/src/main/java/subway/view/output/line/LineExceptionView.java b/src/main/java/subway/view/output/line/LineExceptionView.java index 2339acd4b..140e394bf 100644 --- a/src/main/java/subway/view/output/line/LineExceptionView.java +++ b/src/main/java/subway/view/output/line/LineExceptionView.java @@ -2,6 +2,12 @@ import subway.type.ExceptionType; +/** + * LineExceptionView.java : 지하철 노선 예외 처리 문구 출력에 대한 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ public class LineExceptionView { public static void printInvalidLineNameException() { System.out.println(); diff --git a/src/main/java/subway/view/output/line/LineInformationView.java b/src/main/java/subway/view/output/line/LineInformationView.java index 2f776a273..3d4b9933e 100644 --- a/src/main/java/subway/view/output/line/LineInformationView.java +++ b/src/main/java/subway/view/output/line/LineInformationView.java @@ -2,6 +2,12 @@ import subway.type.InformationType; +/** + * LineInformationView.java : 지하철 노선 실행 결과 문구 출력에 대한 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ public class LineInformationView { public static void printLineAdditionInformation() { System.out.println(); diff --git a/src/main/java/subway/view/output/line/LineTextView.java b/src/main/java/subway/view/output/line/LineTextView.java index d2092f765..e76f03eba 100644 --- a/src/main/java/subway/view/output/line/LineTextView.java +++ b/src/main/java/subway/view/output/line/LineTextView.java @@ -2,8 +2,14 @@ import subway.type.TextType; +/** + * LineTextView.java : 지하철 노선 화면 출력 문구 출력에 대한 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ public class LineTextView { - public static void printLineAddingText() { + public static void printLineAdditionText() { System.out.println(); System.out.println(TextType.LINE_ADDITION_TEXT.getText()); } diff --git a/src/main/java/subway/view/output/section/SectionExceptionView.java b/src/main/java/subway/view/output/section/SectionExceptionView.java index 8bb6e94dd..d69269653 100644 --- a/src/main/java/subway/view/output/section/SectionExceptionView.java +++ b/src/main/java/subway/view/output/section/SectionExceptionView.java @@ -2,6 +2,12 @@ import subway.type.ExceptionType; +/** + * SectionExceptionView.java : 지하철 구간 예외 처리 문구 출력에 대한 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ public class SectionExceptionView { public static void printInvalidSectionStationNameInLineExistenceException() { System.out.println(); diff --git a/src/main/java/subway/view/output/section/SectionInformationView.java b/src/main/java/subway/view/output/section/SectionInformationView.java index 852d52e0a..9e97a0043 100644 --- a/src/main/java/subway/view/output/section/SectionInformationView.java +++ b/src/main/java/subway/view/output/section/SectionInformationView.java @@ -2,6 +2,12 @@ import subway.type.InformationType; +/** + * SectionInformationView.java : 지하철 구간 실행 결과 문구 출력에 대한 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ public class SectionInformationView { public static void printSectionAdditionInformation() { System.out.println(); diff --git a/src/main/java/subway/view/output/section/SectionTextView.java b/src/main/java/subway/view/output/section/SectionTextView.java index 9a06777ca..aadfc5ff6 100644 --- a/src/main/java/subway/view/output/section/SectionTextView.java +++ b/src/main/java/subway/view/output/section/SectionTextView.java @@ -2,18 +2,24 @@ import subway.type.TextType; +/** + * SectionTextView.java : 지하철 구간 화면 출력 문구 출력에 대한 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ public class SectionTextView { - public static void printSectionAddingLineText() { + public static void printSectionAdditionLineText() { System.out.println(); System.out.println(TextType.SECTION_ADDITION_LINE_TEXT.getText()); } - public static void printSectionAddingStationText() { + public static void printSectionAdditionStationText() { System.out.println(); System.out.println(TextType.SECTION_ADDITION_STATION_TEXT.getText()); } - public static void printSectionAddingOrderText() { + public static void printSectionAdditionOrderText() { System.out.println(); System.out.println(TextType.SECTION_ADDITION_ORDER_TEXT.getText()); } diff --git a/src/main/java/subway/view/output/station/StationExceptionView.java b/src/main/java/subway/view/output/station/StationExceptionView.java index 193147ee6..e17fad4c0 100644 --- a/src/main/java/subway/view/output/station/StationExceptionView.java +++ b/src/main/java/subway/view/output/station/StationExceptionView.java @@ -2,6 +2,12 @@ import subway.type.ExceptionType; +/** + * StationExceptionView.java : 지하철 역 예외 처리 문구 출력에 대한 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ public class StationExceptionView { public static void printInvalidStationNameException() { System.out.println(); diff --git a/src/main/java/subway/view/output/station/StationInformationView.java b/src/main/java/subway/view/output/station/StationInformationView.java index 18f8dae86..4db9db2f9 100644 --- a/src/main/java/subway/view/output/station/StationInformationView.java +++ b/src/main/java/subway/view/output/station/StationInformationView.java @@ -2,6 +2,12 @@ import subway.type.InformationType; +/** + * StationInformationView.java : 지하철 역 실행 결과 문구 출력에 대한 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ public class StationInformationView { public static void printStationAdditionInformation() { System.out.println(); diff --git a/src/main/java/subway/view/output/station/StationTextView.java b/src/main/java/subway/view/output/station/StationTextView.java index f31b4b66e..b3badb6bf 100644 --- a/src/main/java/subway/view/output/station/StationTextView.java +++ b/src/main/java/subway/view/output/station/StationTextView.java @@ -2,8 +2,14 @@ import subway.type.TextType; +/** + * StationTextView.java : 지하철 역 화면 출력 문구 출력에 대한 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ public class StationTextView { - public static void printStationAddingText() { + public static void printStationAdditionText() { System.out.println(); System.out.println(TextType.STATION_ADDITION_TEXT.getText()); } diff --git a/src/main/java/subway/view/output/util/FeatureChoiceExceptionView.java b/src/main/java/subway/view/output/util/FeatureChoiceExceptionView.java new file mode 100644 index 000000000..4afd358d8 --- /dev/null +++ b/src/main/java/subway/view/output/util/FeatureChoiceExceptionView.java @@ -0,0 +1,22 @@ +package subway.view.output.util; + +import subway.type.ExceptionType; + +/** + * FeatureExceptionView.java : 화면 기능 선택 예외 처리 문구 출력에 대한 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ +public class FeatureChoiceExceptionView { + public static void printInvalidFeatureChoiceException() { + System.out.println(); + System.out.println(ExceptionType.INVALID_FEATURE_CHOICE.getException()); + } + + public static boolean printInvalidChoiceException() { + System.out.println(); + System.out.println(ExceptionType.INVALID_FEATURE_CHOICE.getException()); + return false; + } +} diff --git a/src/main/java/subway/view/output/util/FeatureExceptionView.java b/src/main/java/subway/view/output/util/FeatureExceptionView.java deleted file mode 100644 index 25dcdb7f0..000000000 --- a/src/main/java/subway/view/output/util/FeatureExceptionView.java +++ /dev/null @@ -1,10 +0,0 @@ -package subway.view.output.util; - -import subway.type.ExceptionType; - -public class FeatureExceptionView { - public static void printInvalidFeatureChoiceException() { - System.out.println(); - System.out.println(ExceptionType.INVALID_FEATURE_CHOICE.getException()); - } -} diff --git a/src/main/java/subway/view/output/util/ScreenView.java b/src/main/java/subway/view/output/util/ScreenView.java index 66a91fb34..1b0e8298c 100644 --- a/src/main/java/subway/view/output/util/ScreenView.java +++ b/src/main/java/subway/view/output/util/ScreenView.java @@ -2,6 +2,12 @@ import subway.type.ScreenType; +/** + * ScreenView.java : 화면 출력에 대한 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ public class ScreenView { public static void printMainScreen() { System.out.println(ScreenType.MAIN_SCREEN.getScreen() @@ -38,4 +44,9 @@ public static void printSectionManagementScreen() { + ScreenType.BACK.getScreen() + ScreenType.FEATURE_CHOICE.getScreen()); } + + public static boolean printNewLine() { + System.out.println(); + return true; + } } diff --git a/src/main/java/subway/view/output/util/StateView.java b/src/main/java/subway/view/output/util/StateView.java deleted file mode 100644 index 72073ffec..000000000 --- a/src/main/java/subway/view/output/util/StateView.java +++ /dev/null @@ -1,8 +0,0 @@ -package subway.view.output.util; - -public class StateView { - public static boolean printNewLine() { - System.out.println(); - return true; - } -} From f981bd8aec3ef02d8b6aa83bad9b413020f7a2b1 Mon Sep 17 00:00:00 2001 From: daeun Date: Tue, 15 Dec 2020 17:06:29 +0900 Subject: [PATCH 96/98] docs(readme): update README.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 완성된 디렉토리 구조 추가 --- docs/README.md | 113 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 112 insertions(+), 1 deletion(-) diff --git a/docs/README.md b/docs/README.md index 009de3272..3a948069e 100644 --- a/docs/README.md +++ b/docs/README.md @@ -148,7 +148,118 @@ - [x] 1주차 피드백을 반영한다. - [x] 2주차 피드백을 반영한다. - [x] 주석은 Javadoc 형태로 작성한다. -- [ ] README 문서를 상세하게 작성한다. +- [x] README 문서를 상세하게 작성한다. + +## 📂 완성된 디렉토리 구조 +``` +└─java-subway-map-precourse + │ + ├─docs + │ └─README.md + │ + └─src + └─main + └─java + └─subway + ├─controller + │ ├─LineController.java + │ ├─SectionController.java + │ ├─StationController.java + │ ├─SubwayController.java + │ └─TransitMapController.java + ├─domain + │ ├─Line.java + │ ├─Section.java + │ ├─Station.java + │ ├─Stations.java + │ └─TransitMap.java + ├─repository + │ ├─LineRepository.java + │ ├─StataionRepository.java + │ └─TransitMapRepository.java + ├─service + │ ├─initialization + │ │ ├─LineInitialization.java + │ │ ├─StationInitialization.java + │ │ └─TransitMapInitialization.java + │ ├─line + │ │ ├─addition + │ │ │ ├─LineAdditionService.java + │ │ │ └─LineAdditionValidation.java + │ │ ├─deletion + │ │ │ ├─LineDeletionService.java + │ │ │ └─LineDeletionValidation.java + │ │ ├─show + │ │ │ └─LineShowService.java + │ │ └─LineService.java + │ ├─section + │ │ ├─addition + │ │ │ ├─SectionAdditionService.java + │ │ │ └─SectionAdditionValidation.java + │ │ ├─deletion + │ │ │ ├─SectionDeletionService.java + │ │ │ └─SectionDeletionValidation.java + │ │ └─SectionService.java + │ ├─station + │ │ ├─addition + │ │ │ ├─StationAdditionValidation.java + │ │ │ └─StationAdditionValidationInterface.java + │ │ ├─deletion + │ │ │ ├─StationDeletionValidation.java + │ │ │ └─StationDeletionValidationInterface.java + │ │ ├─show + │ │ │ ├─StationShowInterface.java + │ │ │ └─StationShowService.java + │ │ └─StationService.java + │ ├─subway + │ │ ├─SubwayInterface.java + │ │ └─SubwayService.java + │ ├─transitmap + │ │ ├─show + │ │ │ └─TransitMapShowService.java + │ │ └─TransitMapService.java + │ └─util + │ ├─ChoiceInterface.java + │ ├─ChoiceService.java + │ └─FeatureInterface.java + ├─type + │ ├─BoundaryType.java + │ ├─CheckType.java + │ ├─ExceptionType.java + │ ├─InformationType.java + │ ├─InputType.java + │ ├─LineType.java + │ ├─ScreenType.java + │ ├─StationType.java + │ └─TextType.java + ├─view + │ ├─input + │ │ ├─line + │ │ │ └─LineScanView.java + │ │ ├─section + │ │ │ └─SectionScanView.java + │ │ ├─station + │ │ │ └─StationScanView.java + │ │ └─subway + │ │ └─SubwayScanView.java + │ └─output + │ ├─line + │ │ ├─LineExceptionView.java + │ │ ├─LineInformationView.java + │ │ └─LineTextView.java + │ ├─section + │ │ ├─SectionExceptionView.java + │ │ ├─SectionInformationView.java + │ │ └─SectionTextView.java + │ ├─station + │ │ ├─StationExceptionView.java + │ │ ├─StationInformationView.java + │ │ └─StationTextView.java + │ └─util + │ ├─FeatureChoiceExceptionView.java + │ └─ScreenView.java + └─Application.java +``` ## 📝 License From a71a2581f6ee53b0cdfa8e7225b92ac04f118ecf Mon Sep 17 00:00:00 2001 From: daeun Date: Tue, 15 Dec 2020 17:21:44 +0900 Subject: [PATCH 97/98] docs(subway): follow Javadoc MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 주석 수정 --- src/main/java/subway/service/section/SectionService.java | 2 +- src/main/java/subway/service/util/ChoiceInterface.java | 2 +- src/main/java/subway/service/util/ChoiceService.java | 2 +- .../subway/view/output/util/FeatureChoiceExceptionView.java | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/subway/service/section/SectionService.java b/src/main/java/subway/service/section/SectionService.java index 044f9fb3d..c8c3e73dd 100644 --- a/src/main/java/subway/service/section/SectionService.java +++ b/src/main/java/subway/service/section/SectionService.java @@ -16,7 +16,7 @@ /** * SectionService.java : 지하철 구간 비즈니스 로직에 대한 서비스 클래스 - * * + * * @author Daeun Lee * @version 1.0 */ diff --git a/src/main/java/subway/service/util/ChoiceInterface.java b/src/main/java/subway/service/util/ChoiceInterface.java index 7e2d26687..aa07e8245 100644 --- a/src/main/java/subway/service/util/ChoiceInterface.java +++ b/src/main/java/subway/service/util/ChoiceInterface.java @@ -3,7 +3,7 @@ import java.util.Scanner; /** - * StateInterface.java : 지하철 역, 지하철 노선 기능 선택에 대한 인터페이스 + * ChoiceInterface.java : 지하철 역, 지하철 노선 기능 선택에 대한 인터페이스 * * @author Daeun Lee * @version 1.0 diff --git a/src/main/java/subway/service/util/ChoiceService.java b/src/main/java/subway/service/util/ChoiceService.java index 5bca42d67..325001e6c 100644 --- a/src/main/java/subway/service/util/ChoiceService.java +++ b/src/main/java/subway/service/util/ChoiceService.java @@ -8,7 +8,7 @@ import java.util.Scanner; /** - * StateService.java : 지하철 역, 지하철 노선 기능 선택에 대한 서비스 클래스 + * ChoiceService.java : 지하철 역, 지하철 노선 기능 선택에 대한 서비스 클래스 * * @author Daeun Lee * @version 1.0 diff --git a/src/main/java/subway/view/output/util/FeatureChoiceExceptionView.java b/src/main/java/subway/view/output/util/FeatureChoiceExceptionView.java index 4afd358d8..e9ee57a28 100644 --- a/src/main/java/subway/view/output/util/FeatureChoiceExceptionView.java +++ b/src/main/java/subway/view/output/util/FeatureChoiceExceptionView.java @@ -3,7 +3,7 @@ import subway.type.ExceptionType; /** - * FeatureExceptionView.java : 화면 기능 선택 예외 처리 문구 출력에 대한 클래스 + * FeatureChoiceExceptionView.java : 화면 기능 선택 예외 처리 문구 출력에 대한 클래스 * * @author Daeun Lee * @version 1.0 From 40cca965182263ff42f58e5c8886ad45f55a810d Mon Sep 17 00:00:00 2001 From: daeun Date: Tue, 15 Dec 2020 17:22:17 +0900 Subject: [PATCH 98/98] docs(readme): update README.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 완성된 디렉토리 구조 수정 --- docs/README.md | 98 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 97 insertions(+), 1 deletion(-) diff --git a/docs/README.md b/docs/README.md index 3a948069e..af0f300a2 100644 --- a/docs/README.md +++ b/docs/README.md @@ -156,7 +156,6 @@ │ ├─docs │ └─README.md - │ └─src └─main └─java @@ -260,6 +259,103 @@ │ └─ScreenView.java └─Application.java ``` +### subwaymap +- Application.java : 메인 클래스 + +#### controller +- LineController.java : 지하철 노선에 대한 컨트롤러 클래스 +- SectionController.java : 지하철 구간에 대한 컨트롤러 클래스 +- StationController.java : 지하철 역에 대한 컨트롤러 클래스 +- SubwayController.java : 지하철에 대한 컨트롤러 클래스 +- TransitMapController.java : 지하철 노선도에 대한 컨트롤러 클래스 + +#### domain +- Line.java : 지하철 노선에 대한 도메인 모델 클래스 +- Section.java : 지하철 구간에 대한 도메인 모델 클래스 +- Station.java : 지하철 역에 대한 도메인 모델 클래스 +- Stations.java : 지하철 상행 종점역, 하행 종점역에 대한 도메인 모델 클래스 +- TransitMap.java : 지하철 노선도에 대한 도메인 모델 클래스 + +#### repository +- LineRepository.java : 지하철 노선에 대한 저장소 클래스 +- StationRepository.java : 지하철 역에 대한 저장소 클래스 +- TransitMapRepository.java : 지하철 노선도에 대한 저장소 클래스 + +#### service +##### initialization +- LineInitialization.java : 지하철 노선 초기화에 대한 클래스 +- StationInitialization.java : 지하철 역 초기화에 대한 클래스 +- TransitMapInitialization.java : 지하철 노선도 초기화에 대한 클래스 + +##### line +- addition/LineAdditionService.java : 지하철 노선 추가 로직에 대한 서비스 클래스 +- addition/LineAdditionValidation.java : 지하철 노선 추가 로직 검증에 대한 클래스 +- deletion/LineDeletionService.java : 지하철 노선 삭제 로직에 대한 서비스 클래스 +- deletion/LineDeletionValidation.java : 지하철 노선 삭제 로직 검증에 대한 클래스 +- show/LineShowService.java : 지하철 노선 조회 로직에 대한 서비스 클래스 +- LineService.java : 지하철 노선 비즈니스 로직에 대한 서비스 클래스 + +##### section +- addition/SectionAdditionService.java : 지하철 구간 추가 로직에 대한 서비스 클래스 +- addition/SectionAdditionValidation.java : 지하철 구간 추가 로직 검증에 대한 클래스 +- deletion/SectionDeletionService.java : 지하철 구간 삭제 로직에 대한 서비스 클래스 +- deletion/SectionDeletionValidation.java : 지하철 구간 삭제 로직 검증에 대한 클래스 +- SectionService.java : 지하철 구간 비즈니스 로직에 대한 서비스 클래스 + +##### station +- addition/StationAdditionValidation.java : 지하철 역 추가 로직 검증에 대한 클래스 +- addition/StationAdditionValidationInterface.java : 지하철 역 추가 로직 검증에 대한 인터페이스 +- deletion/StationDeletionValidation.java : 지하철 역 삭제 로직 검증에 대한 클래스 +- deletion/StationDeletionValidationInterface.java : 지하철 역 삭제 로직 검증에 대한 인터페이스 +- show/StationShowInterface.java : 지하철 역 조회 로직에 대한 인터페이스 +- show/StationShowService.java : 지하철 역 조회 로직에 대한 서비스 클래스 +- StationService.java : 지하철 역 비즈니스 로직에 대한 서비스 클래스 + +##### subway +- SubwayInterface.java : 지하철 비즈니스 로직에 대한 인터페이스 +- SubwayService.java : 지하철 비즈니스 로직에 대한 서비스 클래스 + +##### transitmap +- show/TransitMapShowService.java : 지하철 노선도 출력 로직에 대한 서비스 클래스 +- TransitMapService.java : 지하철 노선도 비즈니스 로직에 대한 서비스 클래스 + +##### util +- ChoiceInterface.java : 지하철 역, 지하철 노선 기능 선택에 대한 인터페이스 +- ChoiceService.java : 지하철 역, 지하철 노선 기능 선택에 대한 서비스 클래스 +- FeatureInterface.java : 지하철 역, 지하철 노선 기능에 대한 인터페이스 + +#### type +- BoundaryType.java : 경계 값 상수를 모아둔 Enum 클래스 +- CheckType.java : 입력 값 마지막 문자 확인용 상수를 모아둔 Enum 클래스 +- ExceptionType.java : 예외 처리 문구 상수를 모아둔 Enum 클래스 +- InformationType.java : 실행 결과 문구 상수를 모아둔 Enum 클래스 +- InputType.java : 화면 기능 입력 값 상수를 모아둔 Enum 클래스 +- LineType.java : 지하철 노선 초기화용 상수를 모아둔 Enum 클래스 +- ScreenType.java : 화면 문구 상수를 모아둔 Enum 클래스 +- StationType.java : 지하철 역 초기화용 상수를 모아둔 Enum 클래스 +- TextType.java : 화면 출력 문구 상수를 모아둔 Enum 클래스 + +#### view +##### input +- line/LineScanView.java : 지하철 노선 기능 입력에 대한 클래스 +- section/SectionScanView.java : 지하철 구간 기능 입력에 대한 클래스 +- station/StationScanView.java : 지하철 역 기능 입력에 대한 클래스 +- subway/SubwayScanView.java : 지하철 기능 입력에 대한 클래스 + +##### output +- line/LineExceptionView.java : 지하철 노선 예외 처리 문구 출력에 대한 클래스 +- line/LineInformationView.java : 지하철 노선 실행 결과 문구 출력에 대한 클래스 +- line/LineTextView.java : 지하철 노선 화면 출력 문구 출력에 대한 클래스 +- section/SectionExceptionView.java : 지하철 구간 예외 처리 문구 출력에 대한 클래스 +- section/SectionInformationView.java : 지하철 구간 실행 결과 문구 출력에 대한 클래스 +- section/SectionTextView.java : 지하철 구간 화면 출력 문구 출력에 대한 클래스 +- station/StationExceptionView.java : 지하철 역 예외 처리 문구 출력에 대한 클래스 +- station/StationInformationView.java : 지하철 역 실행 결과 문구 출력에 대한 클래스 +- station/StationTextView.java : 지하철 역 화면 출력 문구 출력에 대한 클래스 +- util/FeatureChoiceExceptionView.java : 화면 기능 선택 예외 처리 문구 출력에 대한 클래스 +- util/ScreenView.java : 화면 출력에 대한 클래스 + +
## 📝 License