From e503375f7d05d3ee6cba6c69651725738dc935d0 Mon Sep 17 00:00:00 2001 From: byungwook Date: Mon, 14 Dec 2020 21:01:03 +0900 Subject: [PATCH 01/25] =?UTF-8?q?docs:=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84=20=EB=AA=A9=EB=A1=9D=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 469 ------------------------------------------------- docs/README.md | 87 +++++++++ 2 files changed, 87 insertions(+), 469 deletions(-) delete mode 100644 README.md create mode 100644 docs/README.md diff --git a/README.md b/README.md deleted file mode 100644 index 597ae6f36..000000000 --- a/README.md +++ /dev/null @@ -1,469 +0,0 @@ -# 지하철 노선도 미션 -- 지하철 역과 노선을 관리하는 지하철 노선도 기능을 구현한다. - -
- -## 🚀 기능 요구사항 - -### 초기 설정 -- 프로그램 시작 시 역, 노선 등 필요한 정보를 미리 셋팅할 수 있다. - -> 아래의 사전 등록 정보로 반드시 초기 설정을 하기 -> -``` - 1. 지하철역으로 교대역, 강남역, 역삼역, 남부터미널역, 양재역, 양재시민의숲역, 매봉역이 등록되어 있다. - 2. 지하철 노선으로 2호선, 3호선, 신분당선이 등록되어 있다. - 3. 노선에 역이 아래와 같이 등록되어 있다.(왼쪽 끝이 상행 종점) - - 2호선: 교대역 - 강남역 - 역삼역 - - 3호선: 교대역 - 남부터미널역 - 양재역 - 매봉역 - - 신분당선: 강남역 - 양재역 - 양재시민의숲역 - ``` - - - -### 지하철 역 관련 기능 -- 지하철 역을 등록하고 삭제할 수 있다. (단, 노선에 등록된 역은 삭제할 수 없다) -- 중복된 지하철 역 이름이 등록될 수 없다. -- 지하철 역 이름은 2글자 이상이어야 한다. -- 지하철 역의 목록을 조회할 수 있다. - -### 지하철 노선 관련 기능 -- 지하철 노선을 등록하고 삭제할 수 있다. -- 중복된 지하철 노선 이름이 등록될 수 없다. -- 지하철 노선 이름은 2글자 이상이어야 한다. -- 노선 등록 시 상행 종점역과 하행 종점역을 입력받는다. -- 지하철 노선의 목록을 조회할 수 있다. - -### 지하철 구간 추가 기능 -- 지하철 노선에 구간을 추가하는 기능은 노선에 역을 추가하는 기능이라고도 할 수 있다. - - 역과 역사이를 구간이라 하고 이 구간들의 모음이 노선이다. -- 하나의 역은 여러개의 노선에 추가될 수 있다. -- 역과 역 사이에 새로운 역이 추가 될 수 있다. -- 노선에서 갈래길은 생길 수 없다. - - - -### 지하철 구간 삭제 기능 -- 노선에 등록된 역을 제거할 수 있다. -- 종점을 제거할 경우 다음 역이 종점이 된다. -- 노선에 포함된 역이 두개 이하일 때는 역을 제거할 수 없다. - - - -### 지하철 노선에 등록된 역 조회 기능 -- 노선의 상행 종점부터 하행 종점까지 연결된 순서대로 역 목록을 조회할 수 있다. - -
- -## ✍🏻 입출력 요구사항 -- `프로그래밍 실행 결과 예시`를 참고하여 입출력을 구현한다. -- 기대하는 출력 결과는 `[INFO]`를 붙여서 출력한다. 출력값의 형식은 예시와 동일하게 한다. -- 에러 발생 시 `[ERROR]`를 붙여서 출력한다. (에러의 문구는 자유롭게 작성한다.) - -### 💻 프로그래밍 실행 결과 -#### 역 관리 -``` -## 메인 화면 -1. 역 관리 -2. 노선 관리 -3. 구간 관리 -4. 지하철 노선도 출력 -Q. 종료 - -## 원하는 기능을 선택하세요. -1 - -## 역 관리 화면 -1. 역 등록 -2. 역 삭제 -3. 역 조회 -B. 돌아가기 - -## 원하는 기능을 선택하세요. -1 - -## 등록할 역 이름을 입력하세요. -잠실역 - -[INFO] 지하철 역이 등록되었습니다. - -## 메인 화면 -1. 역 관리 -2. 노선 관리 -3. 구간 관리 -4. 지하철 노선도 출력 -Q. 종료 - -## 원하는 기능을 선택하세요. -1 - -## 역 관리 화면 -1. 역 등록 -2. 역 삭제 -3. 역 조회 -B. 돌아가기 - -## 원하는 기능을 선택하세요. -3 - -## 역 목록 -[INFO] 교대역 -[INFO] 강남역 -[INFO] 역삼역 -[INFO] 남부터미널역 -[INFO] 양재역 -[INFO] 양재시민의숲역 -[INFO] 매봉역 -[INFO] 잠실역 - -## 메인 화면 -1. 역 관리 -2. 노선 관리 -3. 구간 관리 -4. 지하철 노선도 출력 -Q. 종료 - -## 원하는 기능을 선택하세요. -1 - -## 역 관리 화면 -1. 역 등록 -2. 역 삭제 -3. 역 조회 -B. 돌아가기 - -## 원하는 기능을 선택하세요. -2 - -## 삭제할 역 이름을 입력하세요. -잠실역 - -[INFO] 지하철 역이 삭제되었습니다. - -... -``` - -### 노선 관리 - -``` - -... - -## 메인 화면 -1. 역 관리 -2. 노선 관리 -3. 구간 관리 -4. 지하철 노선도 출력 -Q. 종료 - -## 원하는 기능을 선택하세요. -2 - -## 노선 관리 화면 -1. 노선 등록 -2. 노선 삭제 -3. 노선 조회 -B. 돌아가기 - -## 원하는 기능을 선택하세요. -1 - -## 등록할 노선 이름을 입력하세요. -1호선 - -## 등록할 노선의 상행 종점역 이름을 입력하세요. -강남역 - -## 등록할 노선의 하행 종점역 이름을 입력하세요. -잠실역 - -[INFO] 지하철 노선이 등록되었습니다. - -## 메인 화면 -1. 역 관리 -2. 노선 관리 -3. 구간 관리 -4. 지하철 노선도 출력 -Q. 종료 - -## 원하는 기능을 선택하세요. -2 - -## 노선 관리 화면 -1. 노선 등록 -2. 노선 삭제 -3. 노선 조회 -B. 돌아가기 - -## 원하는 기능을 선택하세요. -3 - -## 노선 목록 -[INFO] 2호선 -[INFO] 3호선 -[INFO] 신분당선 -[INFO] 1호선 - -## 메인 화면 -1. 역 관리 -2. 노선 관리 -3. 구간 관리 -4. 지하철 노선도 출력 -Q. 종료 - -## 원하는 기능을 선택하세요. -2 - -## 노선 관리 화면 -1. 노선 등록 -2. 노선 삭제 -3. 노선 조회 -B. 돌아가기 - -## 원하는 기능을 선택하세요. -2 - -## 삭제할 노선 이름을 입력하세요. -1호선 - -[INFO] 지하철 노선이 삭제되었습니다. - -... - -``` - -### 구간 관리 - -``` -... - -## 메인 화면 -1. 역 관리 -2. 노선 관리 -3. 구간 관리 -4. 지하철 노선도 출력 -Q. 종료 - -## 원하는 기능을 선택하세요. -3 - -## 구간 관리 화면 -1. 구간 등록 -2. 구간 삭제 -B. 돌아가기 - -## 원하는 기능을 선택하세요. -1 - -## 노선을 입력하세요. -2호선 - -## 역이름을 입력하세요. -잠실역 - -## 순서를 입력하세요. -2 - -[INFO] 구간이 등록되었습니다. - -## 메인 화면 -1. 역 관리 -2. 노선 관리 -3. 구간 관리 -4. 지하철 노선도 출력 -Q. 종료 - -## 원하는 기능을 선택하세요. -3 - -## 구간 관리 화면 -1. 구간 등록 -2. 구간 삭제 -B. 돌아가기 - -## 원하는 기능을 선택하세요. -2 - -## 삭제할 구간의 노선을 입력하세요. -2호선 - -## 삭제할 구간의 역을 입력하세요. -잠실역 - -[INFO] 구간이 삭제되었습니다. - -... - -``` - -### 지하철 노선도 출력 - -``` -## 메인 화면 -1. 역 관리 -2. 노선 관리 -3. 구간 관리 -4. 지하철 노선도 출력 -Q. 종료 - -## 원하는 기능을 선택하세요. -4 - -## 지하철 노선도 -[INFO] 2호선 -[INFO] --- -[INFO] 교대역 -[INFO] 강남역 -[INFO] 역삼역 - -[INFO] 3호선 -[INFO] --- -[INFO] 교대역 -[INFO] 남부터미널역 -[INFO] 양재역 -[INFO] 매봉역 - -[INFO] 신분당선 -[INFO] --- -[INFO] 강남역 -[INFO] 양재역 -[INFO] 양재시민의숲역 - -``` - -#### 에러 출력 예시 - -``` -## 메인 화면 -1. 역 관리 -2. 노선 관리 -3. 구간 관리 -4. 지하철 노선도 출력 -Q. 종료 - -## 원하는 기능을 선택하세요. -5 - -[ERROR] 선택할 수 없는 기능입니다. - -## 원하는 기능을 선택하세요. -1 - -## 역 관리 화면 -1. 역 등록 -2. 역 삭제 -3. 역 조회 -B. 돌아가기 - -## 원하는 기능을 선택하세요. -1 - -## 등록할 역 이름을 입력하세요. -강남역 - -[ERROR] 이미 등록된 역 이름입니다. - -## 역 관리 화면 -1. 역 등록 -2. 역 삭제 -3. 역 조회 -B. 돌아가기 - -## 원하는 기능을 선택하세요. - -... - -``` - -
- -## 🎱 프로그래밍 요구사항 -- 자바 코드 컨벤션을 지키면서 프로그래밍한다. - - 기본적으로 [Google Java Style Guide](https://google.github.io/styleguide/javaguide.html)을 원칙으로 한다. - - 단, 들여쓰기는 '2 spaces'가 아닌 '4 spaces'로 한다. -- indent(인덴트, 들여쓰기) depth를 3이 넘지 않도록 구현한다. 2까지만 허용한다. - - 예를 들어 while문 안에 if문이 있으면 들여쓰기는 2이다. - - 힌트: indent(인덴트, 들여쓰기) depth를 줄이는 좋은 방법은 함수(또는 메소드)를 분리하면 된다. -- 3항 연산자를 쓰지 않는다. -- 함수(또는 메소드)의 길이가 15라인을 넘어가지 않도록 구현한다. - - 함수(또는 메소드)가 한 가지 일만 잘 하도록 구현한다. -- else 예약어를 쓰지 않는다. - - 힌트: if 조건절에서 값을 return하는 방식으로 구현하면 else를 사용하지 않아도 된다. - - else를 쓰지 말라고 하니 switch/case로 구현하는 경우가 있는데 switch/case도 허용하지 않는다. -- 프로그래밍 요구사항에서 별도로 변경 불가 안내가 없는 경우 파일 수정과 패키지 이동을 자유롭게 할 수 있다. -- 예외 상황 시 에러 문구를 출력해야 한다. 단, 에러 문구는 `[ERROR]` 로 시작해야 한다. - -### 프로그래밍 요구사항 - Application -- Application 클래스를 활용해 구현해야 한다. -- Application의 패키지 구조는 변경하지 않는다. -- 주석을 참고하여 구현할 수 있으며 주석대로 구현하지 않아도 되고 삭제해도 무관하다. -```java -public class Application { - public static void main(String[] args) { - ... - } -} -``` - -### 프로그래밍 요구사항 - Station, Line -- Station, Line 클래스를 활용하여 지하철역과 노선을 구현해야 한다. -- 제공하는 각 클래스의 기본 생성자를 추가할 수 없다. -- 필드(인스턴스 변수)인 name의 접근 제어자 private을 변경할 수 없다. -- 가능하면 setter 메소드(ex. setXXX)를 추가하지 않고 구현한다. - -```java -public class Station { - private String name; - - public Station(String name) { - this.name = name; - } - - public String getName() { - return name; - } - - // 추가 기능 구현 -} - -``` - -### 프로그래밍 요구사항 - StationRepository, LineRepository -- Station과 Line의 상태를 저장할 수 있는 StationRepository, LineRepository를 제공한다. -- 필요 시 StationRepository, LineRepository 이 외 추가로 Repository를 만들 수 있다. -- 추가로 생성되는 객체에 대해서 XXXRepository 네이밍으로 저장 클래스를 추가할 수 있다. -- 객체들의 상태를 관리하기 위해서 XXXRepository 클래스를 활용해 저장 로직을 구현해야 한다. -- 필요에 따라 자유롭게 수정이 가능하다. - -```java -public class StationRepository { - private static final List stations = new ArrayList<>(); - - public static List stations() { - return Collections.unmodifiableList(stations); - } - - public static void addStation(Station station) { - stations.add(station); - } - - public static boolean deleteStation(String name) { - return stations.removeIf(station -> Objects.equals(station.getName(), name)); - } -} -``` - -
- -## 📈 진행 요구사항 -- 미션은 [java-subway-map-precourse 저장소](https://github.com/woowacourse/java-subway-map-precourse) 를 fork/clone해 시작한다. -- 기능을 구현하기 전에 java-subway-map-precourse/docs/README.md 파일에 구현할 기능 목록을 정리해 추가한다. -- git의 commit 단위는 앞 단계에서 README.md 파일에 정리한 기능 목록 단위로 추가한다. - - [AngularJS Commit Message Conventions](https://gist.github.com/stephenparish/9941e89d80e2bc58a153) 참고해 commit log를 남긴다. -- [프리코스 과제 제출 문서](https://github.com/woowacourse/woowacourse-docs/tree/master/precourse) 절차를 따라 미션을 제출한다. - - [프리코스 과제 FAQ](https://github.com/woowacourse/woowacourse-docs/tree/master/precourse/faq) 문서를 참고하여 진행할 수 있다. -
- -## 📝 License - -This project is [MIT](https://github.com/woowacourse/java-subway-map-precourse/blob/master/LICENSE.md) licensed. diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 000000000..2c8ab750a --- /dev/null +++ b/docs/README.md @@ -0,0 +1,87 @@ +## **📃 프로젝트 소개** + +## **🛠️ 프로그램 기능 목록** + +#### 초기 설정 + +``` + 1. 지하철역으로 교대역, 강남역, 역삼역, 남부터미널역, 양재역, 양재시민의숲역, 매봉역이 등록되어 있다. + 2. 지하철 노선으로 2호선, 3호선, 신분당선이 등록되어 있다. + 3. 노선에 역이 아래와 같이 등록되어 있다.(왼쪽 끝이 상행 종점) + - 2호선: 교대역 - 강남역 - 역삼역 + - 3호선: 교대역 - 남부터미널역 - 양재역 - 매봉역 + - 신분당선: 강남역 - 양재역 - 양재시민의숲역 +``` + + + +#### 메뉴 관련 기능 + +- **메뉴 항목을 조회한다.** + + - ``` + ## 메인 화면 + 1. 역 관리 + 2. 노선 관리 + 3. 구간 관리 + 4. 지하철 노선도 출력 + Q. 종료메뉴의 번호를 입력받으면 해당하는 기능이 실행된다. + ``` + +- **메뉴 항목 선택을 선택하고 실행한다.** + + - 항목 번호를 입력받으면 해당 항목이 실행된다. + - 하위 항목이 있을 경우에는 항목을 조회하고 실행할 수 있어야한다. + - **[예외] 입력값이 항목 번호가 아닐 경우** + + + +#### 지하철 역 관련 기능 + +- **지하철 역을 등록한다.** + - **[예외]** 중복된 지하철 역 이름이 등록될 수 없다. + - **[예외]** 지하철 역 이름은 2글자 이상이어야 한다. +- **지하철 역을 삭제한다.** + - **[예외]** 노선에 등록된 역은 삭제할 수 없다. +- **지하철 역 목록을 조회한다.** + + + +#### 지하철 노선 관련 기능 + +- **지하철 노선을 등록한다. ** + - 노선 등록 시 상행 종점역과 하행 종점역을 입력받는다. + - **[예외]** 중복된 지하철 노선 이름이 등록될 수 없다. + - **[예외]** 지하철 노선 이름은 2글자 이상이어야 한다. +- **지하철 노선을 삭제 한다.** +- **지하철 노선 목록을 조회한다.** + + + +#### 지하철 구간 관련 기능 + +- **지하철 노선에 역을 추가한다.** + - 하나의 역은 여러개의 노선에 추가될 수 있다. + - **[예외]** 역과 역 사이에 새로운 역이 추가될 수 있다. + - **[예외]** 노선에서 갈래길은 생길 수 없다. + +- **지하철 노선에 등록된 역을 제거한다.** + - 종점을 제거할 경우 다음 역이 종점이 된다. + - **[예외]** 노선에 포함된 역이 두개 이하일 때는 역을 제거할 수 없다. + + + +#### 지하철 노선도 관련 기능 + +- **모든 지하철 노선을 조회한다.** + + - 각 노선의 상행 종점부터 하행 종점까지 연결된 순서대로 역 목록을 조회한다. + + + +------ + +### 📝메모 + +- 기대하는 출력 결과는 `[INFO]`를 붙여서 출력한다. 출력값의 형식은 예시와 동일하게 한다. +- 에러 발생 시 `[ERROR]`를 붙여서 출력한다. (에러의 문구는 자유롭게 작성한다.) \ No newline at end of file From a9411b193a66d86d17c8896be1715c2cdae03752 Mon Sep 17 00:00:00 2001 From: byungwook Date: Tue, 15 Dec 2020 09:01:10 +0900 Subject: [PATCH 02/25] =?UTF-8?q?docs:=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84=20=EB=AA=A9=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 37 +++++++++++++++++++++++++------------ 1 file changed, 25 insertions(+), 12 deletions(-) diff --git a/docs/README.md b/docs/README.md index 2c8ab750a..32f939c7b 100644 --- a/docs/README.md +++ b/docs/README.md @@ -17,22 +17,33 @@ #### 메뉴 관련 기능 -- **메뉴 항목을 조회한다.** +- **메뉴 UI가 출력되고 동작한다.** - ``` - ## 메인 화면 - 1. 역 관리 - 2. 노선 관리 - 3. 구간 관리 - 4. 지하철 노선도 출력 - Q. 종료메뉴의 번호를 입력받으면 해당하는 기능이 실행된다. + ## 메인 화면 ## 역 관리 화면 + 1. 역 관리 1. 역 등록 + 2. 노선 관리 2. 역 삭제 + 3. 구간 관리 3. 역 조회 + 4. 지하철 노선도 출력 B. 돌아가기 + Q. 종료 ``` -- **메뉴 항목 선택을 선택하고 실행한다.** + - 위와 같은 UI의 메뉴를 화면에 출력한다. (왼쪽 메인 화면, 오른쪽 역 관리 화면) - - 항목 번호를 입력받으면 해당 항목이 실행된다. - - 하위 항목이 있을 경우에는 항목을 조회하고 실행할 수 있어야한다. - - **[예외] 입력값이 항목 번호가 아닐 경우** + - 메뉴에서 선택할 수 있는 목록 종류로는 하위 메뉴(sub menu)와 항목(item)이 있다. 각 목록 맨 앞에는 id가 출력된다. + + - 사용자로부터 화면에 보이는 id 중 하나를 입력받으면 그에 따라서 동작해야한다. + + - 하위 메뉴 id를 입력 받았을 경우 하위 메뉴 화면을 출력한다. + - 항목 id를 입력 받았을 경우 해당 항목의 기능을 실행한다. + - 기능 실행이 끝나면 실행 결과를 화면에 출력하고, 메인 화면으로 돌아간다. + - ex0) `## 메인화면`에서 `2`를 입력 받으면 `노선 관리` 메뉴 화면을 출력한다. + - ex1) `## 메인화면`에서 `4`를 입력 받으면 `지하철 노선도 출력 기능`을 실행한다. + - ex2) `## 메인화면`에서 `Q`를 입력 받으면 `프로그램 종료 기능`이 실행된다. + - ex3) `## 역 관리 화면`에서 `3`을 입력 받으면 `역 조회 기능`이 실행된다. + - ex4) `## 역 관리 화면`에서 `B`를 입력 받으면 `이전 화면으로 돌아가는 기능`이 실행된다. + + - **[예외]** 현재 화면에 없는 id를 입력했을 경우 @@ -43,6 +54,7 @@ - **[예외]** 지하철 역 이름은 2글자 이상이어야 한다. - **지하철 역을 삭제한다.** - **[예외]** 노선에 등록된 역은 삭제할 수 없다. + - **[예외]** 아예 등록되지 않은 역이 입력으로 들어오는 경우 - **지하철 역 목록을 조회한다.** @@ -54,6 +66,7 @@ - **[예외]** 중복된 지하철 노선 이름이 등록될 수 없다. - **[예외]** 지하철 노선 이름은 2글자 이상이어야 한다. - **지하철 노선을 삭제 한다.** + - **[예외]** 등록되지 않은 노선 이름이 입력으로 들어올 경우 - **지하철 노선 목록을 조회한다.** @@ -62,7 +75,7 @@ - **지하철 노선에 역을 추가한다.** - 하나의 역은 여러개의 노선에 추가될 수 있다. - - **[예외]** 역과 역 사이에 새로운 역이 추가될 수 있다. + - **[예외]** 역과 역 사이에만 새로운 역이 추가될 수 있다. - **[예외]** 노선에서 갈래길은 생길 수 없다. - **지하철 노선에 등록된 역을 제거한다.** From de464ac1cafc618672977fb3ccda9a627ff75681 Mon Sep 17 00:00:00 2001 From: byungwook Date: Tue, 15 Dec 2020 09:08:52 +0900 Subject: [PATCH 03/25] =?UTF-8?q?feat:=20=EB=A9=94=EB=89=B4=20UI=EC=99=80?= =?UTF-8?q?=20=EB=A9=94=EB=89=B4=20=EB=8F=99=EC=9E=91=20=EA=B8=B0=EB=8A=A5?= =?UTF-8?q?=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/Application.java | 12 ++- .../controller/SubwayManageController.java | 80 +++++++++++++++++++ src/main/java/subway/domain/Line.java | 15 ---- src/main/java/subway/domain/line/Line.java | 32 ++++++++ .../domain/{ => line}/LineRepository.java | 3 +- .../subway/domain/selector/Manipulable.java | 6 ++ .../java/subway/domain/selector/Selector.java | 28 +++++++ .../domain/selector/lineitem/AddLineItem.java | 18 +++++ .../domain/selector/lineitem/GetLineItem.java | 17 ++++ .../selector/lineitem/RemoveLineItem.java | 18 +++++ .../subway/domain/selector/menu/Menu.java | 31 +++++++ .../domain/selector/menu/MenuRepository.java | 53 ++++++++++++ .../selector/sectionitem/AddSectionItem.java | 18 +++++ .../sectionitem/RemoveSectionItem.java | 18 +++++ .../selector/stationitem/AddStationItem.java | 18 +++++ .../selector/stationitem/GetStationItem.java | 18 +++++ .../stationitem/RemoveStationItem.java | 18 +++++ .../selector/utilitem/BackWardItem.java | 18 +++++ .../domain/selector/utilitem/ExitItem.java | 18 +++++ .../utilitem/PrintSubwayLineItem.java | 18 +++++ .../subway/domain/{ => station}/Station.java | 6 +- .../{ => station}/StationRepository.java | 7 +- .../java/subway/domain/util/DataFactory.java | 44 ++++++++++ src/main/java/subway/view/InputValidator.java | 13 +++ src/main/java/subway/view/InputView.java | 28 +++++++ src/main/java/subway/view/MessageView.java | 11 +++ src/main/java/subway/view/OutputView.java | 26 ++++++ 27 files changed, 569 insertions(+), 23 deletions(-) create mode 100644 src/main/java/subway/controller/SubwayManageController.java delete mode 100644 src/main/java/subway/domain/Line.java create mode 100644 src/main/java/subway/domain/line/Line.java rename src/main/java/subway/domain/{ => line}/LineRepository.java (94%) create mode 100644 src/main/java/subway/domain/selector/Manipulable.java create mode 100644 src/main/java/subway/domain/selector/Selector.java create mode 100644 src/main/java/subway/domain/selector/lineitem/AddLineItem.java create mode 100644 src/main/java/subway/domain/selector/lineitem/GetLineItem.java create mode 100644 src/main/java/subway/domain/selector/lineitem/RemoveLineItem.java create mode 100644 src/main/java/subway/domain/selector/menu/Menu.java create mode 100644 src/main/java/subway/domain/selector/menu/MenuRepository.java create mode 100644 src/main/java/subway/domain/selector/sectionitem/AddSectionItem.java create mode 100644 src/main/java/subway/domain/selector/sectionitem/RemoveSectionItem.java create mode 100644 src/main/java/subway/domain/selector/stationitem/AddStationItem.java create mode 100644 src/main/java/subway/domain/selector/stationitem/GetStationItem.java create mode 100644 src/main/java/subway/domain/selector/stationitem/RemoveStationItem.java create mode 100644 src/main/java/subway/domain/selector/utilitem/BackWardItem.java create mode 100644 src/main/java/subway/domain/selector/utilitem/ExitItem.java create mode 100644 src/main/java/subway/domain/selector/utilitem/PrintSubwayLineItem.java rename src/main/java/subway/domain/{ => station}/Station.java (66%) rename src/main/java/subway/domain/{ => station}/StationRepository.java (79%) create mode 100644 src/main/java/subway/domain/util/DataFactory.java create mode 100644 src/main/java/subway/view/InputValidator.java create mode 100644 src/main/java/subway/view/InputView.java create mode 100644 src/main/java/subway/view/MessageView.java create mode 100644 src/main/java/subway/view/OutputView.java diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java index 0bcf786cc..18f976841 100644 --- a/src/main/java/subway/Application.java +++ b/src/main/java/subway/Application.java @@ -1,10 +1,16 @@ package subway; -import java.util.Scanner; +import subway.controller.SubwayManageController; +import subway.domain.util.DataFactory; public class Application { + public static void main(String[] args) { - final Scanner scanner = new Scanner(System.in); - // TODO: 프로그램 구현 + DataFactory dataFactory = new DataFactory(); + dataFactory.makeData(); + + SubwayManageController subwayManageController = new SubwayManageController(); + subwayManageController.run(); } + } diff --git a/src/main/java/subway/controller/SubwayManageController.java b/src/main/java/subway/controller/SubwayManageController.java new file mode 100644 index 000000000..dd658886e --- /dev/null +++ b/src/main/java/subway/controller/SubwayManageController.java @@ -0,0 +1,80 @@ +package subway.controller; + +import java.util.LinkedHashMap; +import subway.domain.selector.Manipulable; +import subway.domain.selector.Selector; +import subway.domain.selector.menu.Menu; +import subway.domain.selector.menu.MenuRepository; +import subway.domain.selector.utilitem.BackWardItem; +import subway.domain.selector.utilitem.ExitItem; +import subway.view.InputView; +import subway.view.OutputView; + +public class SubwayManageController { + + private static final InputView inputView = new InputView(); + private static final OutputView outputView = new OutputView(); + private static final String MAIN_MENU_ID = "0"; + private String previousMenuId = MAIN_MENU_ID; + private String currentMenuId = MAIN_MENU_ID; + private boolean isRun; + + public void run() { + isRun = true; + LinkedHashMap menus = MenuRepository.menus(); + + while (isRun) { + Menu menu = menus.get(currentMenuId); + outputView.printScreen(menu); + + Selector selector = inputView.getSelector(menu); + if (isExitItem(selector) + || isBackWardItem(selector) + || isSubMenu(selector)) { + continue; + } + executeItem(selector); + } + } + + private boolean isExitItem(Selector selector) { + if (selector instanceof ExitItem) { + isRun = false; + return true; + } + return false; + } + + private boolean isBackWardItem(Selector selector) { + if (selector instanceof BackWardItem) { + this.currentMenuId = this.previousMenuId; + return true; + } + return false; + } + + private boolean isSubMenu(Selector selector) { + if (selector instanceof Manipulable) { + setMenuIdInformation(MAIN_MENU_ID, MAIN_MENU_ID); + return false; + } + setMenuIdInformation(currentMenuId, selector.getId()); + return true; + } + + private void setMenuIdInformation(String previousMenuId, String currentMenuId) { + this.previousMenuId = previousMenuId; + this.currentMenuId = currentMenuId; + } + + private void executeItem(Selector selector) { + try { + Manipulable item = (Manipulable) selector; + item.execute(); + } catch (Exception e) { + System.out.println(e.getMessage()); + setMenuIdInformation(MAIN_MENU_ID, MAIN_MENU_ID); + } + } + +} diff --git a/src/main/java/subway/domain/Line.java b/src/main/java/subway/domain/Line.java deleted file mode 100644 index f4d738d5a..000000000 --- a/src/main/java/subway/domain/Line.java +++ /dev/null @@ -1,15 +0,0 @@ -package subway.domain; - -public class Line { - private String name; - - public Line(String name) { - this.name = name; - } - - public String getName() { - return name; - } - - // 추가 기능 구현 -} diff --git a/src/main/java/subway/domain/line/Line.java b/src/main/java/subway/domain/line/Line.java new file mode 100644 index 000000000..522297307 --- /dev/null +++ b/src/main/java/subway/domain/line/Line.java @@ -0,0 +1,32 @@ +package subway.domain.line; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import subway.domain.station.Station; + +public class Line { + + private String name; + private static final List stations = new ArrayList<>(); + + public Line(String name) { + this.name = name; + } + + public String getName() { + return name; + } + + public void addStation(Station station) { + stations.add(station); + } + + public void addAllStation(List stationsList) { + stations.addAll(stationsList); + } + + public List stations() { + return Collections.unmodifiableList(stations); + } +} diff --git a/src/main/java/subway/domain/LineRepository.java b/src/main/java/subway/domain/line/LineRepository.java similarity index 94% rename from src/main/java/subway/domain/LineRepository.java rename to src/main/java/subway/domain/line/LineRepository.java index 49132ddb6..09a008f86 100644 --- a/src/main/java/subway/domain/LineRepository.java +++ b/src/main/java/subway/domain/line/LineRepository.java @@ -1,4 +1,4 @@ -package subway.domain; +package subway.domain.line; import java.util.ArrayList; import java.util.Collections; @@ -6,6 +6,7 @@ import java.util.Objects; public class LineRepository { + private static final List lines = new ArrayList<>(); public static List lines() { diff --git a/src/main/java/subway/domain/selector/Manipulable.java b/src/main/java/subway/domain/selector/Manipulable.java new file mode 100644 index 000000000..9fa9b3e69 --- /dev/null +++ b/src/main/java/subway/domain/selector/Manipulable.java @@ -0,0 +1,6 @@ +package subway.domain.selector; + +public interface Manipulable { + + void execute(); +} diff --git a/src/main/java/subway/domain/selector/Selector.java b/src/main/java/subway/domain/selector/Selector.java new file mode 100644 index 000000000..d17cb61fd --- /dev/null +++ b/src/main/java/subway/domain/selector/Selector.java @@ -0,0 +1,28 @@ +package subway.domain.selector; + +import subway.view.InputView; +import subway.view.MessageView; +import subway.view.OutputView; + +public abstract class Selector { + + protected String id; + protected String name; + protected InputView inputView = new InputView(); + protected OutputView outputView = new OutputView(); + protected MessageView messageView = new MessageView(); + + public String getId() { + return id; + } + + public String getName() { + return name; + } + + @Override + public String toString() { + return name; + } + +} diff --git a/src/main/java/subway/domain/selector/lineitem/AddLineItem.java b/src/main/java/subway/domain/selector/lineitem/AddLineItem.java new file mode 100644 index 000000000..8bd69f4cd --- /dev/null +++ b/src/main/java/subway/domain/selector/lineitem/AddLineItem.java @@ -0,0 +1,18 @@ +package subway.domain.selector.lineitem; + +import subway.domain.selector.Manipulable; +import subway.domain.selector.Selector; + +public class AddLineItem extends Selector implements Manipulable { + + public AddLineItem(String id, String name){ + this.id = id; + this.name = name; + } + + @Override + public void execute() { + + } + +} diff --git a/src/main/java/subway/domain/selector/lineitem/GetLineItem.java b/src/main/java/subway/domain/selector/lineitem/GetLineItem.java new file mode 100644 index 000000000..9ccf44113 --- /dev/null +++ b/src/main/java/subway/domain/selector/lineitem/GetLineItem.java @@ -0,0 +1,17 @@ +package subway.domain.selector.lineitem; + +import subway.domain.selector.Manipulable; +import subway.domain.selector.Selector; + +public class GetLineItem extends Selector implements Manipulable { + + public GetLineItem(String id, String name){ + this.id = id; + this.name = name; + } + + @Override + public void execute() { + + } +} diff --git a/src/main/java/subway/domain/selector/lineitem/RemoveLineItem.java b/src/main/java/subway/domain/selector/lineitem/RemoveLineItem.java new file mode 100644 index 000000000..9e97d359f --- /dev/null +++ b/src/main/java/subway/domain/selector/lineitem/RemoveLineItem.java @@ -0,0 +1,18 @@ +package subway.domain.selector.lineitem; + +import subway.domain.selector.Manipulable; +import subway.domain.selector.Selector; + +public class RemoveLineItem extends Selector implements Manipulable { + + public RemoveLineItem(String id, String name){ + this.id = id; + this.name = name; + } + + @Override + public void execute() { + + } + +} diff --git a/src/main/java/subway/domain/selector/menu/Menu.java b/src/main/java/subway/domain/selector/menu/Menu.java new file mode 100644 index 000000000..8b8f640e9 --- /dev/null +++ b/src/main/java/subway/domain/selector/menu/Menu.java @@ -0,0 +1,31 @@ +package subway.domain.selector.menu; + +import java.util.LinkedHashMap; +import subway.domain.selector.Selector; + +public class Menu extends Selector { + + private final LinkedHashMap subMenus = new LinkedHashMap<>(); + private final LinkedHashMap items = new LinkedHashMap<>(); + + public Menu(String id, String name) { + this.id = id; + this.name = name; + } + + public void addMenus(String key, Menu menu) { + subMenus.put(key, menu); + } + + public void addMenuItems(String key, Selector item) { + items.put(key, item); + } + + public LinkedHashMap getMenus() { + return subMenus; + } + + public LinkedHashMap getItems() { + return items; + } +} diff --git a/src/main/java/subway/domain/selector/menu/MenuRepository.java b/src/main/java/subway/domain/selector/menu/MenuRepository.java new file mode 100644 index 000000000..9d3204895 --- /dev/null +++ b/src/main/java/subway/domain/selector/menu/MenuRepository.java @@ -0,0 +1,53 @@ +package subway.domain.selector.menu; + +import java.util.LinkedHashMap; +import subway.domain.selector.lineitem.AddLineItem; +import subway.domain.selector.lineitem.GetLineItem; +import subway.domain.selector.lineitem.RemoveLineItem; +import subway.domain.selector.sectionitem.AddSectionItem; +import subway.domain.selector.sectionitem.RemoveSectionItem; +import subway.domain.selector.stationitem.AddStationItem; +import subway.domain.selector.stationitem.GetStationItem; +import subway.domain.selector.stationitem.RemoveStationItem; +import subway.domain.selector.utilitem.BackWardItem; +import subway.domain.selector.utilitem.ExitItem; +import subway.domain.selector.utilitem.PrintSubwayLineItem; + +public class MenuRepository { + + private static final LinkedHashMap menus = new LinkedHashMap<>(); + + static { + Menu stationMenu = new Menu("1", "역 관리"); + stationMenu.addMenuItems("1", new AddStationItem("1","역 등록")); + stationMenu.addMenuItems("2", new RemoveStationItem("2","역 삭제")); + stationMenu.addMenuItems("3", new GetStationItem("3", "역 조회")); + stationMenu.addMenuItems("B", new BackWardItem("B", "돌아가기")); + menus.put("1", stationMenu); + + Menu lineMenu = new Menu("2", "노선 관리"); + lineMenu.addMenuItems("1", new AddLineItem("1","노선 등록")); + lineMenu.addMenuItems("2", new RemoveLineItem("2","노선 삭제")); + lineMenu.addMenuItems("3", new GetLineItem("3", "노선 조회")); + lineMenu.addMenuItems("B", new BackWardItem("B","돌아가기")); + menus.put("2", lineMenu); + + Menu sectionMenu = new Menu("3", "구간 관리"); + sectionMenu.addMenuItems("1", new AddSectionItem("1","구간 등록")); + sectionMenu.addMenuItems("2", new RemoveSectionItem("2", "구간 삭제")); + sectionMenu.addMenuItems("B", new BackWardItem("B", "돌아가기")); + menus.put("3", sectionMenu); + + Menu mainMenu = new Menu("0", "메인"); + mainMenu.addMenus("1", stationMenu); + mainMenu.addMenus("2", lineMenu); + mainMenu.addMenus("3", sectionMenu); + mainMenu.addMenuItems("4", new PrintSubwayLineItem("4","지하철 노선도 출력")); + mainMenu.addMenuItems("Q", new ExitItem("Q","종료")); + menus.put("0", mainMenu); + } + + public static LinkedHashMap menus() { + return menus; + } +} diff --git a/src/main/java/subway/domain/selector/sectionitem/AddSectionItem.java b/src/main/java/subway/domain/selector/sectionitem/AddSectionItem.java new file mode 100644 index 000000000..c821ba00b --- /dev/null +++ b/src/main/java/subway/domain/selector/sectionitem/AddSectionItem.java @@ -0,0 +1,18 @@ +package subway.domain.selector.sectionitem; + +import subway.domain.selector.Manipulable; +import subway.domain.selector.Selector; + +public class AddSectionItem extends Selector implements Manipulable { + + public AddSectionItem(String id, String name){ + this.id = id; + this.name = name; + } + + @Override + public void execute() { + + } + +} diff --git a/src/main/java/subway/domain/selector/sectionitem/RemoveSectionItem.java b/src/main/java/subway/domain/selector/sectionitem/RemoveSectionItem.java new file mode 100644 index 000000000..a2bbbf380 --- /dev/null +++ b/src/main/java/subway/domain/selector/sectionitem/RemoveSectionItem.java @@ -0,0 +1,18 @@ +package subway.domain.selector.sectionitem; + +import subway.domain.selector.Manipulable; +import subway.domain.selector.Selector; + +public class RemoveSectionItem extends Selector implements Manipulable { + + public RemoveSectionItem(String id, String name) { + this.id = id; + this.name = name; + } + + @Override + public void execute() { + + } + +} diff --git a/src/main/java/subway/domain/selector/stationitem/AddStationItem.java b/src/main/java/subway/domain/selector/stationitem/AddStationItem.java new file mode 100644 index 000000000..9cd936904 --- /dev/null +++ b/src/main/java/subway/domain/selector/stationitem/AddStationItem.java @@ -0,0 +1,18 @@ +package subway.domain.selector.stationitem; + +import subway.domain.selector.Manipulable; +import subway.domain.selector.Selector; + +public class AddStationItem extends Selector implements Manipulable { + + public AddStationItem(String id, String name) { + this.id = id; + this.name = name; + } + + @Override + public void execute() { + + } + +} diff --git a/src/main/java/subway/domain/selector/stationitem/GetStationItem.java b/src/main/java/subway/domain/selector/stationitem/GetStationItem.java new file mode 100644 index 000000000..766d76e7a --- /dev/null +++ b/src/main/java/subway/domain/selector/stationitem/GetStationItem.java @@ -0,0 +1,18 @@ +package subway.domain.selector.stationitem; + +import subway.domain.selector.Manipulable; +import subway.domain.selector.Selector; + +public class GetStationItem extends Selector implements Manipulable { + + public GetStationItem(String id, String name) { + this.id = id; + this.name = name; + } + + @Override + public void execute() { + + } + +} diff --git a/src/main/java/subway/domain/selector/stationitem/RemoveStationItem.java b/src/main/java/subway/domain/selector/stationitem/RemoveStationItem.java new file mode 100644 index 000000000..8a6edc4a5 --- /dev/null +++ b/src/main/java/subway/domain/selector/stationitem/RemoveStationItem.java @@ -0,0 +1,18 @@ +package subway.domain.selector.stationitem; + +import subway.domain.selector.Manipulable; +import subway.domain.selector.Selector; + +public class RemoveStationItem extends Selector implements Manipulable { + + public RemoveStationItem(String id, String name) { + this.id = id; + this.name = name; + } + + @Override + public void execute() { + + } + +} diff --git a/src/main/java/subway/domain/selector/utilitem/BackWardItem.java b/src/main/java/subway/domain/selector/utilitem/BackWardItem.java new file mode 100644 index 000000000..471a7a66d --- /dev/null +++ b/src/main/java/subway/domain/selector/utilitem/BackWardItem.java @@ -0,0 +1,18 @@ +package subway.domain.selector.utilitem; + +import subway.domain.selector.Manipulable; +import subway.domain.selector.Selector; + +public class BackWardItem extends Selector implements Manipulable { + + public BackWardItem(String id, String name){ + this.id = id; + this.name = name; + } + + @Override + public void execute() { + + } + +} diff --git a/src/main/java/subway/domain/selector/utilitem/ExitItem.java b/src/main/java/subway/domain/selector/utilitem/ExitItem.java new file mode 100644 index 000000000..a201cf589 --- /dev/null +++ b/src/main/java/subway/domain/selector/utilitem/ExitItem.java @@ -0,0 +1,18 @@ +package subway.domain.selector.utilitem; + +import subway.domain.selector.Manipulable; +import subway.domain.selector.Selector; + +public class ExitItem extends Selector implements Manipulable { + + public ExitItem(String id, String name){ + this.id = id; + this.name = name; + } + + @Override + public void execute() { + + } + +} diff --git a/src/main/java/subway/domain/selector/utilitem/PrintSubwayLineItem.java b/src/main/java/subway/domain/selector/utilitem/PrintSubwayLineItem.java new file mode 100644 index 000000000..2b42d6f33 --- /dev/null +++ b/src/main/java/subway/domain/selector/utilitem/PrintSubwayLineItem.java @@ -0,0 +1,18 @@ +package subway.domain.selector.utilitem; + +import subway.domain.selector.Manipulable; +import subway.domain.selector.Selector; + +public class PrintSubwayLineItem extends Selector implements Manipulable { + + public PrintSubwayLineItem(String id, String name){ + this.id = id; + this.name = name; + } + + @Override + public void execute() { + + } + +} diff --git a/src/main/java/subway/domain/Station.java b/src/main/java/subway/domain/station/Station.java similarity index 66% rename from src/main/java/subway/domain/Station.java rename to src/main/java/subway/domain/station/Station.java index bdb142590..1508c2e36 100644 --- a/src/main/java/subway/domain/Station.java +++ b/src/main/java/subway/domain/station/Station.java @@ -1,7 +1,8 @@ -package subway.domain; +package subway.domain.station; public class Station { - private String name; + + private final String name; public Station(String name) { this.name = name; @@ -11,5 +12,4 @@ public String getName() { return name; } - // 추가 기능 구현 } diff --git a/src/main/java/subway/domain/StationRepository.java b/src/main/java/subway/domain/station/StationRepository.java similarity index 79% rename from src/main/java/subway/domain/StationRepository.java rename to src/main/java/subway/domain/station/StationRepository.java index b7245c0f3..6974d751c 100644 --- a/src/main/java/subway/domain/StationRepository.java +++ b/src/main/java/subway/domain/station/StationRepository.java @@ -1,4 +1,4 @@ -package subway.domain; +package subway.domain.station; import java.util.ArrayList; import java.util.Collections; @@ -6,6 +6,7 @@ import java.util.Objects; public class StationRepository { + private static final List stations = new ArrayList<>(); public static List stations() { @@ -16,6 +17,10 @@ public static void addStation(Station station) { stations.add(station); } + public static void addAllStation(List stationsList) { + stations.addAll(stationsList); + } + public static boolean deleteStation(String name) { return stations.removeIf(station -> Objects.equals(station.getName(), name)); } diff --git a/src/main/java/subway/domain/util/DataFactory.java b/src/main/java/subway/domain/util/DataFactory.java new file mode 100644 index 000000000..4665ce52f --- /dev/null +++ b/src/main/java/subway/domain/util/DataFactory.java @@ -0,0 +1,44 @@ +package subway.domain.util; + +import java.util.Arrays; +import java.util.List; +import subway.domain.line.Line; +import subway.domain.line.LineRepository; +import subway.domain.station.Station; +import subway.domain.station.StationRepository; + +public class DataFactory { + + public void makeData() { + Station station1 = new Station("교대역"); + Station station2 = new Station("강남역"); + Station station3 = new Station("역삼역"); + Station station4 = new Station("남부터미널역"); + Station station5 = new Station("양재역"); + Station station6 = new Station("양재시민의숲역"); + Station station7 = new Station("매봉역"); + + List stations = Arrays.asList(station1, station2, station3, station4, station5, station6, station7); + + makeStationData(stations); + makeLineData(stations); + } + + private void makeStationData(List stations){ + StationRepository.addAllStation(stations); + } + + private void makeLineData(List stations){ + Line line1 = new Line("2호선"); + line1.addAllStation(Arrays.asList(stations.get(0), stations.get(1), stations.get(2))); + LineRepository.addLine(line1); + + Line line2 = new Line("3호선"); + line1.addAllStation(Arrays.asList(stations.get(0), stations.get(3), stations.get(4), stations.get(6))); + LineRepository.addLine(line2); + + Line line3 = new Line("신분당선"); + line1.addAllStation(Arrays.asList(stations.get(1), stations.get(4), stations.get(5))); + LineRepository.addLine(line3); + } +} diff --git a/src/main/java/subway/view/InputValidator.java b/src/main/java/subway/view/InputValidator.java new file mode 100644 index 000000000..eb71dcd6b --- /dev/null +++ b/src/main/java/subway/view/InputValidator.java @@ -0,0 +1,13 @@ +package subway.view; + +import subway.domain.selector.menu.Menu; + +public class InputValidator { + + private static final String INVALID_SELECTOR_ID_ERROR = "[ERROR] 유효한 기능을 선택하세요.\n"; + + public void validateSelectorNumber(Menu menu, String number){ + if(menu.getMenus().get(number) == null && menu.getItems().get(number) == null) + throw new IllegalArgumentException(INVALID_SELECTOR_ID_ERROR); + } +} diff --git a/src/main/java/subway/view/InputView.java b/src/main/java/subway/view/InputView.java new file mode 100644 index 000000000..fa7de3b79 --- /dev/null +++ b/src/main/java/subway/view/InputView.java @@ -0,0 +1,28 @@ +package subway.view; + +import java.util.Scanner; +import subway.domain.selector.Selector; +import subway.domain.selector.menu.Menu; + +public class InputView { + + private static final Scanner scanner = new Scanner(System.in); + private static final InputValidator inputValidator = new InputValidator(); + private static final MessageView messageView = new MessageView(); + + public Selector getSelector(Menu menu) { + try { + messageView.printSelectSelectorMessage(); + String input = scanner.nextLine(); + inputValidator.validateSelectorNumber(menu, input); + if (menu.getMenus().get(input) != null) { + return menu.getMenus().get(input); + } + return menu.getItems().get(input); + } catch (Exception e) { + System.out.println(e.getMessage()); + return getSelector(menu); + } + } + +} diff --git a/src/main/java/subway/view/MessageView.java b/src/main/java/subway/view/MessageView.java new file mode 100644 index 000000000..6ae91ab2d --- /dev/null +++ b/src/main/java/subway/view/MessageView.java @@ -0,0 +1,11 @@ +package subway.view; + +public class MessageView { + + public static final String SELECT_SELECTOR = "## 원하는 기능을 선택하세요."; + + public void printSelectSelectorMessage() { + System.out.println(SELECT_SELECTOR); + } + +} diff --git a/src/main/java/subway/view/OutputView.java b/src/main/java/subway/view/OutputView.java new file mode 100644 index 000000000..71435fa17 --- /dev/null +++ b/src/main/java/subway/view/OutputView.java @@ -0,0 +1,26 @@ +package subway.view; + +import subway.domain.selector.menu.Menu; + +public class OutputView { + + public void printScreen(Menu menu) { + System.out.println("\n## " + menu + " 화면"); + printMenus(menu); + printItems(menu); + System.out.println(); + } + + private void printMenus(Menu menu) { + for (String key : menu.getMenus().keySet()) { + System.out.println(key + ". " + menu.getMenus().get(key)); + } + } + + private void printItems(Menu menu) { + for (String key : menu.getItems().keySet()) { + System.out.println(key + ". " + menu.getItems().get(key)); + } + } + +} From b97c74d3a07ddea0cedcb316768250c8e750bd4a Mon Sep 17 00:00:00 2001 From: byungwook Date: Tue, 15 Dec 2020 09:40:12 +0900 Subject: [PATCH 04/25] =?UTF-8?q?refactor:=20=EC=A0=91=EA=B7=BC=20?= =?UTF-8?q?=EC=88=98=EC=A4=80=20=EC=A7=80=EC=8B=9C=EC=9E=90=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/domain/station/Station.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/subway/domain/station/Station.java b/src/main/java/subway/domain/station/Station.java index 1508c2e36..6aaecb076 100644 --- a/src/main/java/subway/domain/station/Station.java +++ b/src/main/java/subway/domain/station/Station.java @@ -2,7 +2,7 @@ public class Station { - private final String name; + private String name; public Station(String name) { this.name = name; From 385a875f7a1acda9463683748982d0af2eabb475 Mon Sep 17 00:00:00 2001 From: byungwook Date: Tue, 15 Dec 2020 09:45:55 +0900 Subject: [PATCH 05/25] =?UTF-8?q?feat:=20=EC=A7=80=ED=95=98=EC=B2=A0=20?= =?UTF-8?q?=EC=97=AD=20=EB=93=B1=EB=A1=9D=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../selector/stationitem/AddStationItem.java | 10 ++++++ .../stationitem/StationValidator.java | 33 +++++++++++++++++++ src/main/java/subway/view/InputView.java | 4 +++ src/main/java/subway/view/MessageView.java | 10 ++++++ 4 files changed, 57 insertions(+) create mode 100644 src/main/java/subway/domain/selector/stationitem/StationValidator.java diff --git a/src/main/java/subway/domain/selector/stationitem/AddStationItem.java b/src/main/java/subway/domain/selector/stationitem/AddStationItem.java index 9cd936904..1cf4b1224 100644 --- a/src/main/java/subway/domain/selector/stationitem/AddStationItem.java +++ b/src/main/java/subway/domain/selector/stationitem/AddStationItem.java @@ -2,9 +2,13 @@ import subway.domain.selector.Manipulable; import subway.domain.selector.Selector; +import subway.domain.station.Station; +import subway.domain.station.StationRepository; public class AddStationItem extends Selector implements Manipulable { + StationValidator stationValidator = new StationValidator(); + public AddStationItem(String id, String name) { this.id = id; this.name = name; @@ -12,7 +16,13 @@ public AddStationItem(String id, String name) { @Override public void execute() { + messageView.printAddStationMessage(); + + String stationName = inputView.getStationName(); + stationValidator.validateAddStation(stationName); + StationRepository.addStation(new Station(stationName)); + messageView.printAddSuccessMessage(); } } diff --git a/src/main/java/subway/domain/selector/stationitem/StationValidator.java b/src/main/java/subway/domain/selector/stationitem/StationValidator.java new file mode 100644 index 000000000..e7b366596 --- /dev/null +++ b/src/main/java/subway/domain/selector/stationitem/StationValidator.java @@ -0,0 +1,33 @@ +package subway.domain.selector.stationitem; + +import java.util.List; +import subway.domain.station.Station; +import subway.domain.station.StationRepository; + +public class StationValidator { + + public static final int MIN_NAME_LENGTH = 2; + public static final String DUPLICATE_STATION_NAME_ERROR = "[ERROR] 이미 등록되어있는 역 입니다."; + public static final String UNDER_NAME_LENGTH_ERROR = "[ERROR] 역 이름은 2글자 이상이어야 합니다."; + + public void validateAddStation(String name) { + validateNameDuplication(name); + validateNameLength(name); + } + + private void validateNameDuplication(String name) { + List stations = StationRepository.stations(); + for (Station station : stations) { + if (station.getName().equals(name)) { + throw new IllegalArgumentException(DUPLICATE_STATION_NAME_ERROR); + } + } + } + + private void validateNameLength(String name) { + if (name.length() < MIN_NAME_LENGTH) { + throw new IllegalArgumentException(UNDER_NAME_LENGTH_ERROR); + } + } + +} diff --git a/src/main/java/subway/view/InputView.java b/src/main/java/subway/view/InputView.java index fa7de3b79..420ccd895 100644 --- a/src/main/java/subway/view/InputView.java +++ b/src/main/java/subway/view/InputView.java @@ -25,4 +25,8 @@ public Selector getSelector(Menu menu) { } } + public String getStationName() { + return scanner.nextLine(); + } + } diff --git a/src/main/java/subway/view/MessageView.java b/src/main/java/subway/view/MessageView.java index 6ae91ab2d..75c9e18ce 100644 --- a/src/main/java/subway/view/MessageView.java +++ b/src/main/java/subway/view/MessageView.java @@ -2,8 +2,18 @@ public class MessageView { + public static final String ADD_STATION = "## 등록할 역 이름을 입력하세요."; + public static final String ADD_STATION_SUCCESS = "[INFO] 지하철 역이 등록되었습니다."; public static final String SELECT_SELECTOR = "## 원하는 기능을 선택하세요."; + public void printAddStationMessage() { + System.out.println(ADD_STATION); + } + + public void printAddSuccessMessage() { + System.out.println(ADD_STATION_SUCCESS); + } + public void printSelectSelectorMessage() { System.out.println(SELECT_SELECTOR); } From 29e3750d07c33f22cfba790f2960dc909f0460b3 Mon Sep 17 00:00:00 2001 From: byungwook Date: Tue, 15 Dec 2020 09:48:50 +0900 Subject: [PATCH 06/25] =?UTF-8?q?feat:=20=EC=A7=80=ED=95=98=EC=B2=A0=20?= =?UTF-8?q?=EC=97=AD=20=EB=AA=A9=EB=A1=9D=20=EC=A1=B0=ED=9A=8C=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/selector/stationitem/GetStationItem.java | 5 +++-- src/main/java/subway/view/MessageView.java | 5 +++++ src/main/java/subway/view/OutputView.java | 8 ++++++++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/main/java/subway/domain/selector/stationitem/GetStationItem.java b/src/main/java/subway/domain/selector/stationitem/GetStationItem.java index 766d76e7a..431f31a41 100644 --- a/src/main/java/subway/domain/selector/stationitem/GetStationItem.java +++ b/src/main/java/subway/domain/selector/stationitem/GetStationItem.java @@ -2,6 +2,7 @@ import subway.domain.selector.Manipulable; import subway.domain.selector.Selector; +import subway.domain.station.StationRepository; public class GetStationItem extends Selector implements Manipulable { @@ -12,7 +13,7 @@ public GetStationItem(String id, String name) { @Override public void execute() { - + messageView.printGetStationsMessage(); + outputView.printStations(StationRepository.stations()); } - } diff --git a/src/main/java/subway/view/MessageView.java b/src/main/java/subway/view/MessageView.java index 75c9e18ce..c13381c28 100644 --- a/src/main/java/subway/view/MessageView.java +++ b/src/main/java/subway/view/MessageView.java @@ -4,6 +4,7 @@ public class MessageView { public static final String ADD_STATION = "## 등록할 역 이름을 입력하세요."; public static final String ADD_STATION_SUCCESS = "[INFO] 지하철 역이 등록되었습니다."; + public static final String GET_STATIONS_SUCCESS = "\n## 역 목록"; public static final String SELECT_SELECTOR = "## 원하는 기능을 선택하세요."; public void printAddStationMessage() { @@ -14,6 +15,10 @@ public void printAddSuccessMessage() { System.out.println(ADD_STATION_SUCCESS); } + public void printGetStationsMessage() { + System.out.println(GET_STATIONS_SUCCESS); + } + public void printSelectSelectorMessage() { System.out.println(SELECT_SELECTOR); } diff --git a/src/main/java/subway/view/OutputView.java b/src/main/java/subway/view/OutputView.java index 71435fa17..58e3b79d0 100644 --- a/src/main/java/subway/view/OutputView.java +++ b/src/main/java/subway/view/OutputView.java @@ -1,6 +1,8 @@ package subway.view; +import java.util.List; import subway.domain.selector.menu.Menu; +import subway.domain.station.Station; public class OutputView { @@ -23,4 +25,10 @@ private void printItems(Menu menu) { } } + public void printStations(List stations) { + for (Station station : stations) { + System.out.println("[INFO] " + station.getName()); + } + } + } From 07921b4d1a8959a00864641fa2d03e21fe476411 Mon Sep 17 00:00:00 2001 From: byungwook Date: Tue, 15 Dec 2020 09:51:24 +0900 Subject: [PATCH 07/25] =?UTF-8?q?feat:=20=EC=A7=80=ED=95=98=EC=B2=A0=20?= =?UTF-8?q?=EC=97=AD=20=EC=82=AD=EC=A0=9C=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../stationitem/RemoveStationItem.java | 9 +++++ .../stationitem/StationValidator.java | 37 +++++++++++++++++++ src/main/java/subway/view/MessageView.java | 10 +++++ 3 files changed, 56 insertions(+) diff --git a/src/main/java/subway/domain/selector/stationitem/RemoveStationItem.java b/src/main/java/subway/domain/selector/stationitem/RemoveStationItem.java index 8a6edc4a5..1647790e8 100644 --- a/src/main/java/subway/domain/selector/stationitem/RemoveStationItem.java +++ b/src/main/java/subway/domain/selector/stationitem/RemoveStationItem.java @@ -2,9 +2,12 @@ import subway.domain.selector.Manipulable; import subway.domain.selector.Selector; +import subway.domain.station.StationRepository; public class RemoveStationItem extends Selector implements Manipulable { + StationValidator stationValidator = new StationValidator(); + public RemoveStationItem(String id, String name) { this.id = id; this.name = name; @@ -12,7 +15,13 @@ public RemoveStationItem(String id, String name) { @Override public void execute() { + messageView.printRemoveStationMessage(); + + String stationName = inputView.getStationName(); + stationValidator.validateRemoveStation(stationName); + StationRepository.deleteStation(stationName); + messageView.printRemoveStationSuccessMessage(); } } diff --git a/src/main/java/subway/domain/selector/stationitem/StationValidator.java b/src/main/java/subway/domain/selector/stationitem/StationValidator.java index e7b366596..08db818da 100644 --- a/src/main/java/subway/domain/selector/stationitem/StationValidator.java +++ b/src/main/java/subway/domain/selector/stationitem/StationValidator.java @@ -1,6 +1,8 @@ package subway.domain.selector.stationitem; import java.util.List; +import subway.domain.line.Line; +import subway.domain.line.LineRepository; import subway.domain.station.Station; import subway.domain.station.StationRepository; @@ -9,12 +11,19 @@ public class StationValidator { public static final int MIN_NAME_LENGTH = 2; public static final String DUPLICATE_STATION_NAME_ERROR = "[ERROR] 이미 등록되어있는 역 입니다."; public static final String UNDER_NAME_LENGTH_ERROR = "[ERROR] 역 이름은 2글자 이상이어야 합니다."; + public static final String CONTAINS_LINE_ERROR = "[ERROR] 노선에 등록된 역은 삭제할 수 없습니다."; + public static final String NOT_CONTAINS_ERROR = "[ERROR] 등록되지 않은 역 입니다."; public void validateAddStation(String name) { validateNameDuplication(name); validateNameLength(name); } + public void validateRemoveStation(String name) { + validateContain(name); + validateContainsLines(name); + } + private void validateNameDuplication(String name) { List stations = StationRepository.stations(); for (Station station : stations) { @@ -30,4 +39,32 @@ private void validateNameLength(String name) { } } + private void validateContainsLines(String name) { + List lines = LineRepository.lines(); + for (Line line : lines) { + validateContainsLine(line, name); + } + } + + private static void validateContainsLine(Line line, String name) { + List stations = line.stations(); + + for (Station station : stations) { + if (station.getName().equals(name)) { + throw new IllegalArgumentException(CONTAINS_LINE_ERROR); + } + } + } + + private static void validateContain(String name) { + List stations = StationRepository.stations(); + + for (Station station : stations) { + if (name.equals(station.getName())) { + return; + } + } + throw new IllegalArgumentException(NOT_CONTAINS_ERROR); + } + } diff --git a/src/main/java/subway/view/MessageView.java b/src/main/java/subway/view/MessageView.java index c13381c28..2511f606d 100644 --- a/src/main/java/subway/view/MessageView.java +++ b/src/main/java/subway/view/MessageView.java @@ -5,6 +5,8 @@ public class MessageView { public static final String ADD_STATION = "## 등록할 역 이름을 입력하세요."; public static final String ADD_STATION_SUCCESS = "[INFO] 지하철 역이 등록되었습니다."; public static final String GET_STATIONS_SUCCESS = "\n## 역 목록"; + public static final String REMOVE_STATION_INPUT = "## 삭제할 역 이름을 입력하세요."; + public static final String REMOVE_STATION_SUCCESS = "[INFO] 지하철 역이 삭제되었습니다."; public static final String SELECT_SELECTOR = "## 원하는 기능을 선택하세요."; public void printAddStationMessage() { @@ -19,6 +21,14 @@ public void printGetStationsMessage() { System.out.println(GET_STATIONS_SUCCESS); } + public void printRemoveStationMessage() { + System.out.println(REMOVE_STATION_INPUT); + } + + public void printRemoveStationSuccessMessage() { + System.out.println(REMOVE_STATION_SUCCESS); + } + public void printSelectSelectorMessage() { System.out.println(SELECT_SELECTOR); } From 020d42f272ef28d697f6edfe3de45240ba40d895 Mon Sep 17 00:00:00 2001 From: byungwook Date: Tue, 15 Dec 2020 10:09:18 +0900 Subject: [PATCH 08/25] =?UTF-8?q?refactor:=20=EB=A9=94=EC=84=9C=EB=93=9C?= =?UTF-8?q?=EB=AA=85=EC=9D=84=20=EB=B2=94=EC=9A=A9=EC=A0=81=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/subway/domain/selector/stationitem/AddStationItem.java | 2 +- src/main/java/subway/view/InputView.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/subway/domain/selector/stationitem/AddStationItem.java b/src/main/java/subway/domain/selector/stationitem/AddStationItem.java index 1cf4b1224..e22f61f16 100644 --- a/src/main/java/subway/domain/selector/stationitem/AddStationItem.java +++ b/src/main/java/subway/domain/selector/stationitem/AddStationItem.java @@ -18,7 +18,7 @@ public AddStationItem(String id, String name) { public void execute() { messageView.printAddStationMessage(); - String stationName = inputView.getStationName(); + String stationName = inputView.getName(); stationValidator.validateAddStation(stationName); StationRepository.addStation(new Station(stationName)); diff --git a/src/main/java/subway/view/InputView.java b/src/main/java/subway/view/InputView.java index 420ccd895..f4829338d 100644 --- a/src/main/java/subway/view/InputView.java +++ b/src/main/java/subway/view/InputView.java @@ -25,7 +25,7 @@ public Selector getSelector(Menu menu) { } } - public String getStationName() { + public String getName() { return scanner.nextLine(); } From 038ba459dd58a1922be9a94d3151fb8675e8120a Mon Sep 17 00:00:00 2001 From: byungwook Date: Tue, 15 Dec 2020 11:47:37 +0900 Subject: [PATCH 09/25] =?UTF-8?q?feat:=20=EC=A7=80=ED=95=98=EC=B2=A0=20?= =?UTF-8?q?=EB=85=B8=EC=84=A0=20=EB=93=B1=EB=A1=9D=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/selector/lineitem/AddLineItem.java | 36 ++++++++++++++++++- .../selector/lineitem/LineValidator.java | 33 +++++++++++++++++ src/main/java/subway/view/MessageView.java | 22 +++++++++++- 3 files changed, 89 insertions(+), 2 deletions(-) create mode 100644 src/main/java/subway/domain/selector/lineitem/LineValidator.java diff --git a/src/main/java/subway/domain/selector/lineitem/AddLineItem.java b/src/main/java/subway/domain/selector/lineitem/AddLineItem.java index 8bd69f4cd..610ae9891 100644 --- a/src/main/java/subway/domain/selector/lineitem/AddLineItem.java +++ b/src/main/java/subway/domain/selector/lineitem/AddLineItem.java @@ -1,18 +1,52 @@ package subway.domain.selector.lineitem; +import java.util.LinkedList; +import java.util.List; +import subway.domain.line.Line; +import subway.domain.line.LineRepository; import subway.domain.selector.Manipulable; import subway.domain.selector.Selector; +import subway.domain.selector.stationitem.StationValidator; +import subway.domain.station.Station; +import subway.domain.station.StationRepository; public class AddLineItem extends Selector implements Manipulable { - public AddLineItem(String id, String name){ + LineValidator lineValidator = new LineValidator(); + StationValidator stationValidator = new StationValidator(); + + public AddLineItem(String id, String name) { this.id = id; this.name = name; } + public List makeStations() { + messageView.printUpwardTerminalStationInputMessage(); + String UpwardTerminalStationName = inputView.getName(); + messageView.printDownTerminalStationInputMessage(); + String DownTerminalStationName = inputView.getName(); + + stationValidator.validateContainsStations(UpwardTerminalStationName); + stationValidator.validateContainsStations(DownTerminalStationName); + + List stations = new LinkedList<>(); + stations.add(new Station(UpwardTerminalStationName)); + stations.add(new Station(DownTerminalStationName)); + return stations; + } + @Override public void execute() { + messageView.printAddLineMessage(); + + String lineName = inputView.getName(); + lineValidator.validateAddLine(lineName); + + Line line = new Line(lineName); + line.addAllStation(makeStations()); + LineRepository.addLine(line); + messageView.printAddLineSuccessMessage(); } } diff --git a/src/main/java/subway/domain/selector/lineitem/LineValidator.java b/src/main/java/subway/domain/selector/lineitem/LineValidator.java new file mode 100644 index 000000000..ed395bfcc --- /dev/null +++ b/src/main/java/subway/domain/selector/lineitem/LineValidator.java @@ -0,0 +1,33 @@ +package subway.domain.selector.lineitem; + +import java.util.List; +import subway.domain.line.Line; +import subway.domain.line.LineRepository; + +public class LineValidator { + + public static final int MIN_NAME_LENGTH = 2; + public static final String DUPLICATE_STATION_NAME_ERROR = "[ERROR] 이미 등록되어있는 노선 입니다."; + public static final String UNDER_NAME_LENGTH_ERROR = "[ERROR] 노선 이름은 2글자 이상이어야 합니다."; + + public void validateAddLine(String name) { + validateNameDuplication(name); + validateNameLength(name); + } + + private void validateNameDuplication(String name) { + List lines = LineRepository.lines(); + for (Line line : lines) { + if (line.getName().equals(name)) { + throw new IllegalArgumentException(DUPLICATE_STATION_NAME_ERROR); + } + } + } + + private void validateNameLength(String name) { + if (name.length() < MIN_NAME_LENGTH) { + throw new IllegalArgumentException(UNDER_NAME_LENGTH_ERROR); + } + } + +} diff --git a/src/main/java/subway/view/MessageView.java b/src/main/java/subway/view/MessageView.java index 2511f606d..c5f48a59f 100644 --- a/src/main/java/subway/view/MessageView.java +++ b/src/main/java/subway/view/MessageView.java @@ -8,12 +8,16 @@ public class MessageView { public static final String REMOVE_STATION_INPUT = "## 삭제할 역 이름을 입력하세요."; public static final String REMOVE_STATION_SUCCESS = "[INFO] 지하철 역이 삭제되었습니다."; public static final String SELECT_SELECTOR = "## 원하는 기능을 선택하세요."; + public static final String ADD_LINE = "## 등록할 노선 이름을 입력하세요."; + public static final String ADD_LINE_SUCCESS = "[INFO] 지하철 노선이 등록되었습니다."; + public static final String UPWARD_TERMINAL_STATION_NAME_INPUT = "## 등록할 노선의 상행 종점역 이름을 입력하세요."; + public static final String DOWN_TERMINAL_STATION_NAME_INPUT = "## 등록할 노선의 하행 종점역 이름을 입력하세요."; public void printAddStationMessage() { System.out.println(ADD_STATION); } - public void printAddSuccessMessage() { + public void printAddStationSuccessMessage() { System.out.println(ADD_STATION_SUCCESS); } @@ -33,4 +37,20 @@ public void printSelectSelectorMessage() { System.out.println(SELECT_SELECTOR); } + public void printAddLineSuccessMessage() { + System.out.println(ADD_LINE_SUCCESS); + } + + public void printAddLineMessage() { + System.out.println(ADD_LINE); + } + + public void printUpwardTerminalStationInputMessage() { + System.out.println(UPWARD_TERMINAL_STATION_NAME_INPUT); + } + + public void printDownTerminalStationInputMessage() { + System.out.println(DOWN_TERMINAL_STATION_NAME_INPUT); + } + } From df04f272da8f6442d90a04d0db720382e4990bbb Mon Sep 17 00:00:00 2001 From: byungwook Date: Tue, 15 Dec 2020 11:52:46 +0900 Subject: [PATCH 10/25] =?UTF-8?q?feat:=20=EC=A7=80=ED=95=98=EC=B2=A0=20?= =?UTF-8?q?=EB=85=B8=EC=84=A0=20=EB=AA=A9=EB=A1=9D=20=EC=A1=B0=ED=9A=8C=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../subway/domain/selector/lineitem/GetLineItem.java | 6 ++++-- src/main/java/subway/view/MessageView.java | 4 ++++ src/main/java/subway/view/OutputView.java | 11 ++++++++++- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/main/java/subway/domain/selector/lineitem/GetLineItem.java b/src/main/java/subway/domain/selector/lineitem/GetLineItem.java index 9ccf44113..260765b98 100644 --- a/src/main/java/subway/domain/selector/lineitem/GetLineItem.java +++ b/src/main/java/subway/domain/selector/lineitem/GetLineItem.java @@ -1,17 +1,19 @@ package subway.domain.selector.lineitem; +import subway.domain.line.LineRepository; import subway.domain.selector.Manipulable; import subway.domain.selector.Selector; public class GetLineItem extends Selector implements Manipulable { - public GetLineItem(String id, String name){ + public GetLineItem(String id, String name) { this.id = id; this.name = name; } @Override public void execute() { - + messageView.printGetLinesMessage(); + outputView.printLines(LineRepository.lines()); } } diff --git a/src/main/java/subway/view/MessageView.java b/src/main/java/subway/view/MessageView.java index c5f48a59f..5cb41464b 100644 --- a/src/main/java/subway/view/MessageView.java +++ b/src/main/java/subway/view/MessageView.java @@ -12,6 +12,7 @@ public class MessageView { public static final String ADD_LINE_SUCCESS = "[INFO] 지하철 노선이 등록되었습니다."; public static final String UPWARD_TERMINAL_STATION_NAME_INPUT = "## 등록할 노선의 상행 종점역 이름을 입력하세요."; public static final String DOWN_TERMINAL_STATION_NAME_INPUT = "## 등록할 노선의 하행 종점역 이름을 입력하세요."; + public static final String GET_LINES_SUCCESS = "\n## 노선 목록"; public void printAddStationMessage() { System.out.println(ADD_STATION); @@ -53,4 +54,7 @@ public void printDownTerminalStationInputMessage() { System.out.println(DOWN_TERMINAL_STATION_NAME_INPUT); } + public void printGetLinesMessage() { + System.out.println(GET_LINES_SUCCESS); + } } diff --git a/src/main/java/subway/view/OutputView.java b/src/main/java/subway/view/OutputView.java index 58e3b79d0..7b36c8573 100644 --- a/src/main/java/subway/view/OutputView.java +++ b/src/main/java/subway/view/OutputView.java @@ -1,11 +1,14 @@ package subway.view; import java.util.List; +import subway.domain.line.Line; import subway.domain.selector.menu.Menu; import subway.domain.station.Station; public class OutputView { + private static final String INFORMATION_TAG = "[INFO]"; + public void printScreen(Menu menu) { System.out.println("\n## " + menu + " 화면"); printMenus(menu); @@ -27,7 +30,13 @@ private void printItems(Menu menu) { public void printStations(List stations) { for (Station station : stations) { - System.out.println("[INFO] " + station.getName()); + System.out.println(INFORMATION_TAG + " " + station.getName()); + } + } + + public void printLines(List lines) { + for (Line line : lines) { + System.out.println(INFORMATION_TAG + " " + line.getName()); } } From 4d729af1b49100651d2745a3f0992d862217ab29 Mon Sep 17 00:00:00 2001 From: byungwook Date: Tue, 15 Dec 2020 12:08:29 +0900 Subject: [PATCH 11/25] =?UTF-8?q?feat:=20=EC=A7=80=ED=95=98=EC=B2=A0=20?= =?UTF-8?q?=EB=85=B8=EC=84=A0=20=EC=82=AD=EC=A0=9C=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/selector/lineitem/LineValidator.java | 12 ++++++++++++ .../domain/selector/lineitem/RemoveLineItem.java | 12 ++++++++++-- src/main/java/subway/view/MessageView.java | 10 ++++++++++ 3 files changed, 32 insertions(+), 2 deletions(-) diff --git a/src/main/java/subway/domain/selector/lineitem/LineValidator.java b/src/main/java/subway/domain/selector/lineitem/LineValidator.java index ed395bfcc..d389bd0eb 100644 --- a/src/main/java/subway/domain/selector/lineitem/LineValidator.java +++ b/src/main/java/subway/domain/selector/lineitem/LineValidator.java @@ -9,6 +9,7 @@ public class LineValidator { public static final int MIN_NAME_LENGTH = 2; public static final String DUPLICATE_STATION_NAME_ERROR = "[ERROR] 이미 등록되어있는 노선 입니다."; public static final String UNDER_NAME_LENGTH_ERROR = "[ERROR] 노선 이름은 2글자 이상이어야 합니다."; + public static final String NOT_CONTAINS_ERROR = "[ERROR] 입력하신 노선은 등록되지 않았습니다."; public void validateAddLine(String name) { validateNameDuplication(name); @@ -30,4 +31,15 @@ private void validateNameLength(String name) { } } + public void validateContainsLines(String name) { + List lines = LineRepository.lines(); + + for (Line line : lines) { + if (name.equals(line.getName())) { + return; + } + } + throw new IllegalArgumentException(NOT_CONTAINS_ERROR); + } + } diff --git a/src/main/java/subway/domain/selector/lineitem/RemoveLineItem.java b/src/main/java/subway/domain/selector/lineitem/RemoveLineItem.java index 9e97d359f..52d752175 100644 --- a/src/main/java/subway/domain/selector/lineitem/RemoveLineItem.java +++ b/src/main/java/subway/domain/selector/lineitem/RemoveLineItem.java @@ -1,18 +1,26 @@ package subway.domain.selector.lineitem; +import subway.domain.line.LineRepository; import subway.domain.selector.Manipulable; import subway.domain.selector.Selector; public class RemoveLineItem extends Selector implements Manipulable { - public RemoveLineItem(String id, String name){ + LineValidator lineValidator = new LineValidator(); + + public RemoveLineItem(String id, String name) { this.id = id; this.name = name; } @Override public void execute() { + messageView.printRemoveLineInputMessage(); - } + String lineName = inputView.getName(); + lineValidator.validateContainsLines(lineName); + LineRepository.deleteLineByName(lineName); + messageView.printRemoveLineSuccessMessage(); + } } diff --git a/src/main/java/subway/view/MessageView.java b/src/main/java/subway/view/MessageView.java index 5cb41464b..d3e86905c 100644 --- a/src/main/java/subway/view/MessageView.java +++ b/src/main/java/subway/view/MessageView.java @@ -13,6 +13,8 @@ public class MessageView { public static final String UPWARD_TERMINAL_STATION_NAME_INPUT = "## 등록할 노선의 상행 종점역 이름을 입력하세요."; public static final String DOWN_TERMINAL_STATION_NAME_INPUT = "## 등록할 노선의 하행 종점역 이름을 입력하세요."; public static final String GET_LINES_SUCCESS = "\n## 노선 목록"; + public static final String REMOVE_LINE_INPUT = "## 삭제할 노선 이름을 입력하세요."; + public static final String REMOVE_LINE_SUCCESS = "[INFO] 지하철 노선이 삭제되었습니다."; public void printAddStationMessage() { System.out.println(ADD_STATION); @@ -57,4 +59,12 @@ public void printDownTerminalStationInputMessage() { public void printGetLinesMessage() { System.out.println(GET_LINES_SUCCESS); } + + public void printRemoveLineInputMessage() { + System.out.println(REMOVE_LINE_INPUT); + } + + public void printRemoveLineSuccessMessage() { + System.out.println(REMOVE_LINE_SUCCESS); + } } From 1b76dfa662e422d9a779e71adb7ffd096865c234 Mon Sep 17 00:00:00 2001 From: byungwook Date: Tue, 15 Dec 2020 12:10:33 +0900 Subject: [PATCH 12/25] =?UTF-8?q?refactor:=20=EB=A9=94=EC=84=9C=EB=93=9C?= =?UTF-8?q?=EB=AA=85=EA=B3=BC=20=EC=98=A4=EB=A5=98=20=EB=A9=94=EC=84=B8?= =?UTF-8?q?=EC=A7=80=20=EC=83=81=EC=88=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/selector/stationitem/AddStationItem.java | 2 +- .../domain/selector/stationitem/RemoveStationItem.java | 2 +- .../domain/selector/stationitem/StationValidator.java | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/subway/domain/selector/stationitem/AddStationItem.java b/src/main/java/subway/domain/selector/stationitem/AddStationItem.java index e22f61f16..4e8ad8a90 100644 --- a/src/main/java/subway/domain/selector/stationitem/AddStationItem.java +++ b/src/main/java/subway/domain/selector/stationitem/AddStationItem.java @@ -22,7 +22,7 @@ public void execute() { stationValidator.validateAddStation(stationName); StationRepository.addStation(new Station(stationName)); - messageView.printAddSuccessMessage(); + messageView.printAddStationSuccessMessage(); } } diff --git a/src/main/java/subway/domain/selector/stationitem/RemoveStationItem.java b/src/main/java/subway/domain/selector/stationitem/RemoveStationItem.java index 1647790e8..02a130dcb 100644 --- a/src/main/java/subway/domain/selector/stationitem/RemoveStationItem.java +++ b/src/main/java/subway/domain/selector/stationitem/RemoveStationItem.java @@ -17,7 +17,7 @@ public RemoveStationItem(String id, String name) { public void execute() { messageView.printRemoveStationMessage(); - String stationName = inputView.getStationName(); + String stationName = inputView.getName(); stationValidator.validateRemoveStation(stationName); StationRepository.deleteStation(stationName); diff --git a/src/main/java/subway/domain/selector/stationitem/StationValidator.java b/src/main/java/subway/domain/selector/stationitem/StationValidator.java index 08db818da..a8e8fb1cc 100644 --- a/src/main/java/subway/domain/selector/stationitem/StationValidator.java +++ b/src/main/java/subway/domain/selector/stationitem/StationValidator.java @@ -12,7 +12,7 @@ public class StationValidator { public static final String DUPLICATE_STATION_NAME_ERROR = "[ERROR] 이미 등록되어있는 역 입니다."; public static final String UNDER_NAME_LENGTH_ERROR = "[ERROR] 역 이름은 2글자 이상이어야 합니다."; public static final String CONTAINS_LINE_ERROR = "[ERROR] 노선에 등록된 역은 삭제할 수 없습니다."; - public static final String NOT_CONTAINS_ERROR = "[ERROR] 등록되지 않은 역 입니다."; + public static final String NOT_CONTAINS_ERROR = "[ERROR] 입력하신 역은 등록되지 않았습니다."; public void validateAddStation(String name) { validateNameDuplication(name); @@ -20,7 +20,7 @@ public void validateAddStation(String name) { } public void validateRemoveStation(String name) { - validateContain(name); + validateContainsStations(name); validateContainsLines(name); } @@ -46,7 +46,7 @@ private void validateContainsLines(String name) { } } - private static void validateContainsLine(Line line, String name) { + private void validateContainsLine(Line line, String name) { List stations = line.stations(); for (Station station : stations) { @@ -56,7 +56,7 @@ private static void validateContainsLine(Line line, String name) { } } - private static void validateContain(String name) { + public void validateContainsStations(String name) { List stations = StationRepository.stations(); for (Station station : stations) { From 76a9f548168c65973d7ef63d432d2f24b301323a Mon Sep 17 00:00:00 2001 From: byungwook Date: Tue, 15 Dec 2020 15:11:39 +0900 Subject: [PATCH 13/25] =?UTF-8?q?fix:=20=EC=9E=98=EB=AA=BB=EB=90=9C=20?= =?UTF-8?q?=EC=B4=88=EA=B8=B0=20=EB=8D=B0=EC=9D=B4=ED=84=B0=20=EC=A0=80?= =?UTF-8?q?=EC=9E=A5=20=EB=A1=9C=EC=A7=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/domain/util/DataFactory.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/subway/domain/util/DataFactory.java b/src/main/java/subway/domain/util/DataFactory.java index 4665ce52f..cd26e3db3 100644 --- a/src/main/java/subway/domain/util/DataFactory.java +++ b/src/main/java/subway/domain/util/DataFactory.java @@ -34,11 +34,11 @@ private void makeLineData(List stations){ LineRepository.addLine(line1); Line line2 = new Line("3호선"); - line1.addAllStation(Arrays.asList(stations.get(0), stations.get(3), stations.get(4), stations.get(6))); + line2.addAllStation(Arrays.asList(stations.get(0), stations.get(3), stations.get(4), stations.get(6))); LineRepository.addLine(line2); Line line3 = new Line("신분당선"); - line1.addAllStation(Arrays.asList(stations.get(1), stations.get(4), stations.get(5))); + line3.addAllStation(Arrays.asList(stations.get(1), stations.get(4), stations.get(5))); LineRepository.addLine(line3); } } From 30f761fa70d8e8ecc125236dd8b0d5c8f5c30c56 Mon Sep 17 00:00:00 2001 From: byungwook Date: Tue, 15 Dec 2020 16:26:43 +0900 Subject: [PATCH 14/25] =?UTF-8?q?feat:=20=EB=AA=A8=EB=93=A0=20=EC=A7=80?= =?UTF-8?q?=ED=95=98=EC=B2=A0=20=EB=85=B8=EC=84=A0=EC=9D=84=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=ED=95=98=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../selector/utilitem/PrintSubwayLineItem.java | 3 ++- src/main/java/subway/view/MessageView.java | 5 +++++ src/main/java/subway/view/OutputView.java | 14 ++++++++++++++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/main/java/subway/domain/selector/utilitem/PrintSubwayLineItem.java b/src/main/java/subway/domain/selector/utilitem/PrintSubwayLineItem.java index 2b42d6f33..d69b0fff6 100644 --- a/src/main/java/subway/domain/selector/utilitem/PrintSubwayLineItem.java +++ b/src/main/java/subway/domain/selector/utilitem/PrintSubwayLineItem.java @@ -12,7 +12,8 @@ public PrintSubwayLineItem(String id, String name){ @Override public void execute() { - + messageView.printSubwayLineMapMessage(); + outputView.printSubwayLineMap(); } } diff --git a/src/main/java/subway/view/MessageView.java b/src/main/java/subway/view/MessageView.java index d3e86905c..cfbf415b4 100644 --- a/src/main/java/subway/view/MessageView.java +++ b/src/main/java/subway/view/MessageView.java @@ -15,6 +15,7 @@ public class MessageView { public static final String GET_LINES_SUCCESS = "\n## 노선 목록"; public static final String REMOVE_LINE_INPUT = "## 삭제할 노선 이름을 입력하세요."; public static final String REMOVE_LINE_SUCCESS = "[INFO] 지하철 노선이 삭제되었습니다."; + public static final String SUBWAY_LINE_MAP = "## 지하철 노선도"; public void printAddStationMessage() { System.out.println(ADD_STATION); @@ -67,4 +68,8 @@ public void printRemoveLineInputMessage() { public void printRemoveLineSuccessMessage() { System.out.println(REMOVE_LINE_SUCCESS); } + + public void printSubwayLineMapMessage() { + System.out.println(SUBWAY_LINE_MAP); + } } diff --git a/src/main/java/subway/view/OutputView.java b/src/main/java/subway/view/OutputView.java index 7b36c8573..b8688e429 100644 --- a/src/main/java/subway/view/OutputView.java +++ b/src/main/java/subway/view/OutputView.java @@ -2,6 +2,7 @@ import java.util.List; import subway.domain.line.Line; +import subway.domain.line.LineRepository; import subway.domain.selector.menu.Menu; import subway.domain.station.Station; @@ -40,4 +41,17 @@ public void printLines(List lines) { } } + public void printSubwayLineMap(){ + List lines = LineRepository.lines(); + + for(Line line : lines){ + System.out.println("[INFO] " + line.getName()); + System.out.println("[INFO] ---"); + for(Station station : line.stations()){ + System.out.println("[INFO] " + station.getName()); + } + System.out.println(); + } + } + } From 7c35c1c09371b39358e0327aafd1b81947b585af Mon Sep 17 00:00:00 2001 From: byungwook Date: Tue, 15 Dec 2020 16:28:51 +0900 Subject: [PATCH 15/25] =?UTF-8?q?docs:=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84=20=EB=AA=A9=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 예외 처리 상황 추가 2. 구간 기능 문구 수정 --- docs/README.md | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/docs/README.md b/docs/README.md index 32f939c7b..9fd1446f1 100644 --- a/docs/README.md +++ b/docs/README.md @@ -52,6 +52,7 @@ - **지하철 역을 등록한다.** - **[예외]** 중복된 지하철 역 이름이 등록될 수 없다. - **[예외]** 지하철 역 이름은 2글자 이상이어야 한다. + - **[예외]** 지하철 역 이름에 특수 문자가 포함되는 경우 - **지하철 역을 삭제한다.** - **[예외]** 노선에 등록된 역은 삭제할 수 없다. - **[예외]** 아예 등록되지 않은 역이 입력으로 들어오는 경우 @@ -61,10 +62,12 @@ #### 지하철 노선 관련 기능 -- **지하철 노선을 등록한다. ** +- **지하철 노선을 등록한다.** - 노선 등록 시 상행 종점역과 하행 종점역을 입력받는다. - **[예외]** 중복된 지하철 노선 이름이 등록될 수 없다. - **[예외]** 지하철 노선 이름은 2글자 이상이어야 한다. + - **[예외]** 지하철 노선 이름에 특수 문자가 포함되는 경우 + - **[예외]** 입력받은 상행/하행 종점역이 등록되지 않은 역일 경우 - **지하철 노선을 삭제 한다.** - **[예외]** 등록되지 않은 노선 이름이 입력으로 들어올 경우 - **지하철 노선 목록을 조회한다.** @@ -73,12 +76,13 @@ #### 지하철 구간 관련 기능 -- **지하철 노선에 역을 추가한다.** +- **지하철 노선에 구간을 추가한다.** - 하나의 역은 여러개의 노선에 추가될 수 있다. - - **[예외]** 역과 역 사이에만 새로운 역이 추가될 수 있다. - - **[예외]** 노선에서 갈래길은 생길 수 없다. - -- **지하철 노선에 등록된 역을 제거한다.** + - **[예외]** 노선에서 갈래길은 생길 수 없다. (하나의 노선에 같은 역이 중복되는 경우) + - **[예외]** 등록되지 않은 역 이름이 입력으로 들어올 경우 +- **[예외]** 지하철 노선 이름에 특수 문자가 포함되는 경우 + +- **지하철 노선의 구간을 제거한다.** - 종점을 제거할 경우 다음 역이 종점이 된다. - **[예외]** 노선에 포함된 역이 두개 이하일 때는 역을 제거할 수 없다. From ac5ede78d06b7ff13460c3437903f4368390be9e Mon Sep 17 00:00:00 2001 From: byungwook Date: Tue, 15 Dec 2020 17:07:27 +0900 Subject: [PATCH 16/25] =?UTF-8?q?feat:=20=EC=A7=80=ED=95=98=EC=B2=A0=20?= =?UTF-8?q?=EB=85=B8=EC=84=A0=20=EA=B5=AC=EA=B0=84=20=EC=B6=94=EA=B0=80=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/domain/line/Line.java | 15 +++++- .../selector/sectionitem/AddSectionItem.java | 46 ++++++++++++++++++- .../sectionitem/SectionValidator.java | 22 +++++++++ src/main/java/subway/view/MessageView.java | 20 ++++++++ 4 files changed, 101 insertions(+), 2 deletions(-) create mode 100644 src/main/java/subway/domain/selector/sectionitem/SectionValidator.java diff --git a/src/main/java/subway/domain/line/Line.java b/src/main/java/subway/domain/line/Line.java index 522297307..5ba0b1d7a 100644 --- a/src/main/java/subway/domain/line/Line.java +++ b/src/main/java/subway/domain/line/Line.java @@ -8,7 +8,7 @@ public class Line { private String name; - private static final List stations = new ArrayList<>(); + private final List stations = new ArrayList<>(); public Line(String name) { this.name = name; @@ -26,6 +26,19 @@ public void addAllStation(List stationsList) { stations.addAll(stationsList); } + public void addStationByIndex(Station station, int index) { + stations.add(index, station); + } + + public boolean isContainsStation(Station station) { + for (Station each : stations) { + if (each.getName().equals(station.getName())) { + return true; + } + } + return false; + } + public List stations() { return Collections.unmodifiableList(stations); } diff --git a/src/main/java/subway/domain/selector/sectionitem/AddSectionItem.java b/src/main/java/subway/domain/selector/sectionitem/AddSectionItem.java index c821ba00b..d603bdafd 100644 --- a/src/main/java/subway/domain/selector/sectionitem/AddSectionItem.java +++ b/src/main/java/subway/domain/selector/sectionitem/AddSectionItem.java @@ -1,18 +1,62 @@ package subway.domain.selector.sectionitem; +import java.util.List; +import subway.domain.line.Line; +import subway.domain.line.LineRepository; import subway.domain.selector.Manipulable; import subway.domain.selector.Selector; +import subway.domain.selector.lineitem.LineValidator; +import subway.domain.selector.stationitem.StationValidator; +import subway.domain.station.Station; public class AddSectionItem extends Selector implements Manipulable { - public AddSectionItem(String id, String name){ + LineValidator lineValidator = new LineValidator(); + StationValidator stationValidator = new StationValidator(); + SectionValidator sectionValidator = new SectionValidator(); + + public AddSectionItem(String id, String name) { this.id = id; this.name = name; } @Override public void execute() { + messageView.printSectionLineInputMessage(); + String lineName = inputView.getName(); + lineValidator.validateContainsLines(lineName); + + messageView.printSectionStationNameInputMessage(); + String stationName = inputView.getName(); + stationValidator.validateContainsStations(stationName); + + messageView.printSectionOrderInputMessage(); + int order = inputView.getNumber(); + addStation(lineName, stationName, order); + + messageView.printSectionRegisterSuccessMessage(); + } + private void addStation(String lineName, String stationName, int order) { + Line line = getLine(lineName); + List stations = line.stations(); + sectionValidator.validateSectionOrder(order, stations.size()); + Station station = new Station(stationName); + sectionValidator.validateStationsDuplication(line, station); + line.addStationByIndex(station, order - 1); + } + + private Line getLine(String lineName) { + List lines = LineRepository.lines(); + + for (Line line : lines) { + if (line.getName().equals(lineName)) { + return line; + } + } + return null; } } + + diff --git a/src/main/java/subway/domain/selector/sectionitem/SectionValidator.java b/src/main/java/subway/domain/selector/sectionitem/SectionValidator.java new file mode 100644 index 000000000..38ed5f8b3 --- /dev/null +++ b/src/main/java/subway/domain/selector/sectionitem/SectionValidator.java @@ -0,0 +1,22 @@ +package subway.domain.selector.sectionitem; + +import subway.domain.line.Line; +import subway.domain.station.Station; + +public class SectionValidator { + + private static final String SECTION_ORDER_ERROR = "[ERROR] 입력한 구간 순서가 올바르지 않습니다."; + private static final String SECTION_FORK_LOAD_ERROR = "[ERROR] 노선에 갈래길은 허용되지 않습니다."; + + public void validateSectionOrder(int order, int size) { + if (order <= 0 || order > size + 1) { + throw new IllegalArgumentException(SECTION_ORDER_ERROR); + } + } + + public void validateStationsDuplication(Line line, Station station) { + if (line.isContainsStation(station)) { + throw new IllegalArgumentException(SECTION_FORK_LOAD_ERROR); + } + } +} diff --git a/src/main/java/subway/view/MessageView.java b/src/main/java/subway/view/MessageView.java index cfbf415b4..067d4debf 100644 --- a/src/main/java/subway/view/MessageView.java +++ b/src/main/java/subway/view/MessageView.java @@ -16,6 +16,10 @@ public class MessageView { public static final String REMOVE_LINE_INPUT = "## 삭제할 노선 이름을 입력하세요."; public static final String REMOVE_LINE_SUCCESS = "[INFO] 지하철 노선이 삭제되었습니다."; public static final String SUBWAY_LINE_MAP = "## 지하철 노선도"; + public static final String SECTION_LINE_INPUT = "## 노선을 입력하세요."; + public static final String SECTION_STATION_NAME_INPUT = "## 역 이름을 입력하세요."; + public static final String SECTION_ORDER_INPUT = "## 순서를 입력하세요."; + public static final String SECTION_REGISTER_SUCCESS = "## 구간이 등록되었습니다."; public void printAddStationMessage() { System.out.println(ADD_STATION); @@ -72,4 +76,20 @@ public void printRemoveLineSuccessMessage() { public void printSubwayLineMapMessage() { System.out.println(SUBWAY_LINE_MAP); } + + public void printSectionLineInputMessage() { + System.out.println(SECTION_LINE_INPUT); + } + + public void printSectionStationNameInputMessage() { + System.out.println(SECTION_STATION_NAME_INPUT); + } + + public void printSectionOrderInputMessage() { + System.out.println(SECTION_ORDER_INPUT); + } + + public void printSectionRegisterSuccessMessage() { + System.out.println(SECTION_REGISTER_SUCCESS); + } } From 0bb328efffdf82ade94aadb07052b9ef88206793 Mon Sep 17 00:00:00 2001 From: byungwook Date: Tue, 15 Dec 2020 18:19:16 +0900 Subject: [PATCH 17/25] =?UTF-8?q?feat:=20=EC=A7=80=ED=95=98=EC=B2=A0=20?= =?UTF-8?q?=EB=85=B8=EC=84=A0=20=EA=B5=AC=EA=B0=84=20=EC=82=AD=EC=A0=9C=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/domain/line/Line.java | 4 ++++ .../subway/domain/line/LineRepository.java | 9 ++++++++ .../sectionitem/RemoveSectionItem.java | 21 +++++++++++++++++++ .../sectionitem/SectionValidator.java | 10 +++++++++ .../domain/station/StationRepository.java | 2 +- src/main/java/subway/view/MessageView.java | 16 ++++++++++++++ 6 files changed, 61 insertions(+), 1 deletion(-) diff --git a/src/main/java/subway/domain/line/Line.java b/src/main/java/subway/domain/line/Line.java index 5ba0b1d7a..b8248dea7 100644 --- a/src/main/java/subway/domain/line/Line.java +++ b/src/main/java/subway/domain/line/Line.java @@ -30,6 +30,10 @@ public void addStationByIndex(Station station, int index) { stations.add(index, station); } + public void deleteStationByName(String name) { + stations.removeIf(station -> station.getName().equals(name)); + } + public boolean isContainsStation(Station station) { for (Station each : stations) { if (each.getName().equals(station.getName())) { diff --git a/src/main/java/subway/domain/line/LineRepository.java b/src/main/java/subway/domain/line/LineRepository.java index 09a008f86..a4919d003 100644 --- a/src/main/java/subway/domain/line/LineRepository.java +++ b/src/main/java/subway/domain/line/LineRepository.java @@ -17,6 +17,15 @@ public static void addLine(Line line) { lines.add(line); } + public static Line getLineByName(String name) { + for (Line line : lines) { + if (line.getName().equals(name)) { + return line; + } + } + return null; + } + public static boolean deleteLineByName(String name) { return lines.removeIf(line -> Objects.equals(line.getName(), name)); } diff --git a/src/main/java/subway/domain/selector/sectionitem/RemoveSectionItem.java b/src/main/java/subway/domain/selector/sectionitem/RemoveSectionItem.java index a2bbbf380..b729be166 100644 --- a/src/main/java/subway/domain/selector/sectionitem/RemoveSectionItem.java +++ b/src/main/java/subway/domain/selector/sectionitem/RemoveSectionItem.java @@ -1,10 +1,19 @@ package subway.domain.selector.sectionitem; +import java.util.List; +import subway.domain.line.Line; +import subway.domain.line.LineRepository; import subway.domain.selector.Manipulable; import subway.domain.selector.Selector; +import subway.domain.selector.lineitem.LineValidator; +import subway.domain.selector.stationitem.StationValidator; public class RemoveSectionItem extends Selector implements Manipulable { + SectionValidator sectionValidator = new SectionValidator(); + LineValidator lineValidator = new LineValidator(); + StationValidator stationValidator = new StationValidator(); + public RemoveSectionItem(String id, String name) { this.id = id; this.name = name; @@ -12,7 +21,19 @@ public RemoveSectionItem(String id, String name) { @Override public void execute() { + messageView.printSectionRemoveLineInputMessage(); + + String lineName = inputView.getName(); + Line line = LineRepository.getLineByName(lineName); + lineValidator.validateContainsLines(lineName); + + messageView.printSectionRemoveStationInputMessage(); + String stationName = inputView.getName(); + stationValidator.validateContainsStations(stationName); + sectionValidator.validateStationCount(line); + line.deleteStationByName(stationName); + messageView.printSectionRemoveSuccessMessage(); } } diff --git a/src/main/java/subway/domain/selector/sectionitem/SectionValidator.java b/src/main/java/subway/domain/selector/sectionitem/SectionValidator.java index 38ed5f8b3..adbcff2da 100644 --- a/src/main/java/subway/domain/selector/sectionitem/SectionValidator.java +++ b/src/main/java/subway/domain/selector/sectionitem/SectionValidator.java @@ -1,5 +1,6 @@ package subway.domain.selector.sectionitem; +import java.util.List; import subway.domain.line.Line; import subway.domain.station.Station; @@ -7,6 +8,7 @@ public class SectionValidator { private static final String SECTION_ORDER_ERROR = "[ERROR] 입력한 구간 순서가 올바르지 않습니다."; private static final String SECTION_FORK_LOAD_ERROR = "[ERROR] 노선에 갈래길은 허용되지 않습니다."; + private static final String SECTION_STATION_COUNT_ERROR = "[ERROR] 노선에 포함된 역이 두개 이하일 때는 역을 제거할 수 없습니다."; public void validateSectionOrder(int order, int size) { if (order <= 0 || order > size + 1) { @@ -19,4 +21,12 @@ public void validateStationsDuplication(Line line, Station station) { throw new IllegalArgumentException(SECTION_FORK_LOAD_ERROR); } } + + public void validateStationCount(Line line) { + List stations = line.stations(); + if (stations.size() <= 2) { + throw new IllegalArgumentException(SECTION_STATION_COUNT_ERROR); + } + } + } diff --git a/src/main/java/subway/domain/station/StationRepository.java b/src/main/java/subway/domain/station/StationRepository.java index 6974d751c..65cbe56cb 100644 --- a/src/main/java/subway/domain/station/StationRepository.java +++ b/src/main/java/subway/domain/station/StationRepository.java @@ -21,7 +21,7 @@ public static void addAllStation(List stationsList) { stations.addAll(stationsList); } - public static boolean deleteStation(String name) { + public static boolean deleteStationByName(String name) { return stations.removeIf(station -> Objects.equals(station.getName(), name)); } } diff --git a/src/main/java/subway/view/MessageView.java b/src/main/java/subway/view/MessageView.java index 067d4debf..97e589f5e 100644 --- a/src/main/java/subway/view/MessageView.java +++ b/src/main/java/subway/view/MessageView.java @@ -20,6 +20,9 @@ public class MessageView { public static final String SECTION_STATION_NAME_INPUT = "## 역 이름을 입력하세요."; public static final String SECTION_ORDER_INPUT = "## 순서를 입력하세요."; public static final String SECTION_REGISTER_SUCCESS = "## 구간이 등록되었습니다."; + public static final String SECTION_REMOVE_LINE_INPUT = "## 삭제할 구간의 노선을 입력하세요."; + public static final String SECTION_REMOVE_STATION_INPUT = "## 삭제할 구간의 역을 입력하세요."; + public static final String SECTION_REMOVE_SUCCESS = "[INFO] 구간이 삭제되었습니다."; public void printAddStationMessage() { System.out.println(ADD_STATION); @@ -92,4 +95,17 @@ public void printSectionOrderInputMessage() { public void printSectionRegisterSuccessMessage() { System.out.println(SECTION_REGISTER_SUCCESS); } + + public void printSectionRemoveLineInputMessage() { + System.out.println(SECTION_REMOVE_LINE_INPUT); + } + + public void printSectionRemoveStationInputMessage() { + System.out.println(SECTION_REMOVE_STATION_INPUT); + } + + public void printSectionRemoveSuccessMessage() { + System.out.println(SECTION_REMOVE_SUCCESS); + } + } From 432abdffd791336df30263f6a3c2e6d27d649700 Mon Sep 17 00:00:00 2001 From: byungwook Date: Tue, 15 Dec 2020 18:20:10 +0900 Subject: [PATCH 18/25] =?UTF-8?q?docs:=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84=20=EB=AA=A9=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 구간 기능 예외 처리사항 추가 --- docs/README.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/docs/README.md b/docs/README.md index 9fd1446f1..8827a60ff 100644 --- a/docs/README.md +++ b/docs/README.md @@ -78,13 +78,18 @@ - **지하철 노선에 구간을 추가한다.** - 하나의 역은 여러개의 노선에 추가될 수 있다. + - 노선, 추가할 역, 구간 위치를 입력 받는다. + - **[예외]** 등록되지 않은 노선이 입력으로 들어올 경우 + - **[예외]** 등록되지 않은 역이 입력으로 들어올 경우 + - **[예외]** 구간 위치가 잘못된 값일 경우(음수거나 노선의 범위보다 큰 값일 경우) - **[예외]** 노선에서 갈래길은 생길 수 없다. (하나의 노선에 같은 역이 중복되는 경우) - - **[예외]** 등록되지 않은 역 이름이 입력으로 들어올 경우 -- **[예외]** 지하철 노선 이름에 특수 문자가 포함되는 경우 + - **[예외]** 지하철 노선 이름에 특수 문자가 포함되는 경우 - **지하철 노선의 구간을 제거한다.** - 종점을 제거할 경우 다음 역이 종점이 된다. - **[예외]** 노선에 포함된 역이 두개 이하일 때는 역을 제거할 수 없다. + - **[예외]** 등록되지 않은 노선이 입력으로 들어올 경우 + - **[예외]** 등록되지 않은 역이 입력으로 들어올 경우 From eed7ac19445965f216eb81205d34fdb45e723eae Mon Sep 17 00:00:00 2001 From: byungwook Date: Tue, 15 Dec 2020 20:15:59 +0900 Subject: [PATCH 19/25] =?UTF-8?q?refactor:=20=EC=A0=84=EC=B2=B4=EC=A0=81?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EB=A9=94=EC=84=9C=EB=93=9C,=20=EB=B3=80?= =?UTF-8?q?=EC=88=98=EB=AA=85=20=EA=B0=80=EB=8F=85=EC=84=B1=20=EC=A2=8B?= =?UTF-8?q?=EA=B2=8C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 불필요한 코드 삭제 2. 전체적으로 코드 포멧팅 수정 --- src/main/java/subway/Application.java | 2 +- src/main/java/subway/domain/line/Line.java | 4 -- .../subway/domain/selector/Manipulable.java | 3 +- .../domain/selector/lineitem/AddLineItem.java | 1 - .../domain/selector/menu/MenuRepository.java | 16 ++--- .../stationitem/RemoveStationItem.java | 2 +- .../selector/utilitem/BackWardItem.java | 7 +- .../domain/selector/utilitem/ExitItem.java | 7 +- .../utilitem/PrintSubwayLineItem.java | 3 +- .../java/subway/domain/util/DataFactory.java | 13 ++-- src/main/java/subway/view/InputValidator.java | 7 +- src/main/java/subway/view/InputView.java | 4 ++ src/main/java/subway/view/MessageView.java | 72 +++++++++---------- src/main/java/subway/view/OutputView.java | 26 ++++--- 14 files changed, 81 insertions(+), 86 deletions(-) diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java index 18f976841..19a92f29a 100644 --- a/src/main/java/subway/Application.java +++ b/src/main/java/subway/Application.java @@ -7,7 +7,7 @@ public class Application { public static void main(String[] args) { DataFactory dataFactory = new DataFactory(); - dataFactory.makeData(); + dataFactory.makeSubwayData(); SubwayManageController subwayManageController = new SubwayManageController(); subwayManageController.run(); diff --git a/src/main/java/subway/domain/line/Line.java b/src/main/java/subway/domain/line/Line.java index b8248dea7..466b502c8 100644 --- a/src/main/java/subway/domain/line/Line.java +++ b/src/main/java/subway/domain/line/Line.java @@ -18,10 +18,6 @@ public String getName() { return name; } - public void addStation(Station station) { - stations.add(station); - } - public void addAllStation(List stationsList) { stations.addAll(stationsList); } diff --git a/src/main/java/subway/domain/selector/Manipulable.java b/src/main/java/subway/domain/selector/Manipulable.java index 9fa9b3e69..24841cf3d 100644 --- a/src/main/java/subway/domain/selector/Manipulable.java +++ b/src/main/java/subway/domain/selector/Manipulable.java @@ -2,5 +2,6 @@ public interface Manipulable { - void execute(); + default void execute(){}; + } diff --git a/src/main/java/subway/domain/selector/lineitem/AddLineItem.java b/src/main/java/subway/domain/selector/lineitem/AddLineItem.java index 610ae9891..e7a6147c9 100644 --- a/src/main/java/subway/domain/selector/lineitem/AddLineItem.java +++ b/src/main/java/subway/domain/selector/lineitem/AddLineItem.java @@ -8,7 +8,6 @@ import subway.domain.selector.Selector; import subway.domain.selector.stationitem.StationValidator; import subway.domain.station.Station; -import subway.domain.station.StationRepository; public class AddLineItem extends Selector implements Manipulable { diff --git a/src/main/java/subway/domain/selector/menu/MenuRepository.java b/src/main/java/subway/domain/selector/menu/MenuRepository.java index 9d3204895..077d378a8 100644 --- a/src/main/java/subway/domain/selector/menu/MenuRepository.java +++ b/src/main/java/subway/domain/selector/menu/MenuRepository.java @@ -19,21 +19,21 @@ public class MenuRepository { static { Menu stationMenu = new Menu("1", "역 관리"); - stationMenu.addMenuItems("1", new AddStationItem("1","역 등록")); - stationMenu.addMenuItems("2", new RemoveStationItem("2","역 삭제")); + stationMenu.addMenuItems("1", new AddStationItem("1", "역 등록")); + stationMenu.addMenuItems("2", new RemoveStationItem("2", "역 삭제")); stationMenu.addMenuItems("3", new GetStationItem("3", "역 조회")); stationMenu.addMenuItems("B", new BackWardItem("B", "돌아가기")); menus.put("1", stationMenu); Menu lineMenu = new Menu("2", "노선 관리"); - lineMenu.addMenuItems("1", new AddLineItem("1","노선 등록")); - lineMenu.addMenuItems("2", new RemoveLineItem("2","노선 삭제")); + lineMenu.addMenuItems("1", new AddLineItem("1", "노선 등록")); + lineMenu.addMenuItems("2", new RemoveLineItem("2", "노선 삭제")); lineMenu.addMenuItems("3", new GetLineItem("3", "노선 조회")); - lineMenu.addMenuItems("B", new BackWardItem("B","돌아가기")); + lineMenu.addMenuItems("B", new BackWardItem("B", "돌아가기")); menus.put("2", lineMenu); Menu sectionMenu = new Menu("3", "구간 관리"); - sectionMenu.addMenuItems("1", new AddSectionItem("1","구간 등록")); + sectionMenu.addMenuItems("1", new AddSectionItem("1", "구간 등록")); sectionMenu.addMenuItems("2", new RemoveSectionItem("2", "구간 삭제")); sectionMenu.addMenuItems("B", new BackWardItem("B", "돌아가기")); menus.put("3", sectionMenu); @@ -42,8 +42,8 @@ public class MenuRepository { mainMenu.addMenus("1", stationMenu); mainMenu.addMenus("2", lineMenu); mainMenu.addMenus("3", sectionMenu); - mainMenu.addMenuItems("4", new PrintSubwayLineItem("4","지하철 노선도 출력")); - mainMenu.addMenuItems("Q", new ExitItem("Q","종료")); + mainMenu.addMenuItems("4", new PrintSubwayLineItem("4", "지하철 노선도 출력")); + mainMenu.addMenuItems("Q", new ExitItem("Q", "종료")); menus.put("0", mainMenu); } diff --git a/src/main/java/subway/domain/selector/stationitem/RemoveStationItem.java b/src/main/java/subway/domain/selector/stationitem/RemoveStationItem.java index 02a130dcb..e11a51ebe 100644 --- a/src/main/java/subway/domain/selector/stationitem/RemoveStationItem.java +++ b/src/main/java/subway/domain/selector/stationitem/RemoveStationItem.java @@ -19,7 +19,7 @@ public void execute() { String stationName = inputView.getName(); stationValidator.validateRemoveStation(stationName); - StationRepository.deleteStation(stationName); + StationRepository.deleteStationByName(stationName); messageView.printRemoveStationSuccessMessage(); } diff --git a/src/main/java/subway/domain/selector/utilitem/BackWardItem.java b/src/main/java/subway/domain/selector/utilitem/BackWardItem.java index 471a7a66d..725aa0ee7 100644 --- a/src/main/java/subway/domain/selector/utilitem/BackWardItem.java +++ b/src/main/java/subway/domain/selector/utilitem/BackWardItem.java @@ -5,14 +5,9 @@ public class BackWardItem extends Selector implements Manipulable { - public BackWardItem(String id, String name){ + public BackWardItem(String id, String name) { this.id = id; this.name = name; } - @Override - public void execute() { - - } - } diff --git a/src/main/java/subway/domain/selector/utilitem/ExitItem.java b/src/main/java/subway/domain/selector/utilitem/ExitItem.java index a201cf589..0758b710b 100644 --- a/src/main/java/subway/domain/selector/utilitem/ExitItem.java +++ b/src/main/java/subway/domain/selector/utilitem/ExitItem.java @@ -5,14 +5,9 @@ public class ExitItem extends Selector implements Manipulable { - public ExitItem(String id, String name){ + public ExitItem(String id, String name) { this.id = id; this.name = name; } - @Override - public void execute() { - - } - } diff --git a/src/main/java/subway/domain/selector/utilitem/PrintSubwayLineItem.java b/src/main/java/subway/domain/selector/utilitem/PrintSubwayLineItem.java index d69b0fff6..29a597f81 100644 --- a/src/main/java/subway/domain/selector/utilitem/PrintSubwayLineItem.java +++ b/src/main/java/subway/domain/selector/utilitem/PrintSubwayLineItem.java @@ -5,14 +5,13 @@ public class PrintSubwayLineItem extends Selector implements Manipulable { - public PrintSubwayLineItem(String id, String name){ + public PrintSubwayLineItem(String id, String name) { this.id = id; this.name = name; } @Override public void execute() { - messageView.printSubwayLineMapMessage(); outputView.printSubwayLineMap(); } diff --git a/src/main/java/subway/domain/util/DataFactory.java b/src/main/java/subway/domain/util/DataFactory.java index cd26e3db3..4165f8041 100644 --- a/src/main/java/subway/domain/util/DataFactory.java +++ b/src/main/java/subway/domain/util/DataFactory.java @@ -9,7 +9,7 @@ public class DataFactory { - public void makeData() { + public void makeSubwayData() { Station station1 = new Station("교대역"); Station station2 = new Station("강남역"); Station station3 = new Station("역삼역"); @@ -18,23 +18,24 @@ public void makeData() { Station station6 = new Station("양재시민의숲역"); Station station7 = new Station("매봉역"); - List stations = Arrays.asList(station1, station2, station3, station4, station5, station6, station7); - + List stations = Arrays + .asList(station1, station2, station3, station4, station5, station6, station7); makeStationData(stations); makeLineData(stations); } - private void makeStationData(List stations){ + private void makeStationData(List stations) { StationRepository.addAllStation(stations); } - private void makeLineData(List stations){ + private void makeLineData(List stations) { Line line1 = new Line("2호선"); line1.addAllStation(Arrays.asList(stations.get(0), stations.get(1), stations.get(2))); LineRepository.addLine(line1); Line line2 = new Line("3호선"); - line2.addAllStation(Arrays.asList(stations.get(0), stations.get(3), stations.get(4), stations.get(6))); + line2.addAllStation( + Arrays.asList(stations.get(0), stations.get(3), stations.get(4), stations.get(6))); LineRepository.addLine(line2); Line line3 = new Line("신분당선"); diff --git a/src/main/java/subway/view/InputValidator.java b/src/main/java/subway/view/InputValidator.java index eb71dcd6b..670366a61 100644 --- a/src/main/java/subway/view/InputValidator.java +++ b/src/main/java/subway/view/InputValidator.java @@ -4,10 +4,11 @@ public class InputValidator { - private static final String INVALID_SELECTOR_ID_ERROR = "[ERROR] 유효한 기능을 선택하세요.\n"; + private static final String INVALID_SELECTOR_ID_ERROR = "[ERROR] 선택할 수 없는 기능입니다.\n"; - public void validateSelectorNumber(Menu menu, String number){ - if(menu.getMenus().get(number) == null && menu.getItems().get(number) == null) + public void validateSelectorNumber(Menu menu, String number) { + if (menu.getMenus().get(number) == null && menu.getItems().get(number) == null) { throw new IllegalArgumentException(INVALID_SELECTOR_ID_ERROR); + } } } diff --git a/src/main/java/subway/view/InputView.java b/src/main/java/subway/view/InputView.java index f4829338d..9dd24658b 100644 --- a/src/main/java/subway/view/InputView.java +++ b/src/main/java/subway/view/InputView.java @@ -29,4 +29,8 @@ public String getName() { return scanner.nextLine(); } + public int getNumber() { + return Integer.parseInt(scanner.nextLine()); + } + } diff --git a/src/main/java/subway/view/MessageView.java b/src/main/java/subway/view/MessageView.java index 97e589f5e..8256af418 100644 --- a/src/main/java/subway/view/MessageView.java +++ b/src/main/java/subway/view/MessageView.java @@ -2,20 +2,18 @@ public class MessageView { - public static final String ADD_STATION = "## 등록할 역 이름을 입력하세요."; - public static final String ADD_STATION_SUCCESS = "[INFO] 지하철 역이 등록되었습니다."; - public static final String GET_STATIONS_SUCCESS = "\n## 역 목록"; - public static final String REMOVE_STATION_INPUT = "## 삭제할 역 이름을 입력하세요."; - public static final String REMOVE_STATION_SUCCESS = "[INFO] 지하철 역이 삭제되었습니다."; - public static final String SELECT_SELECTOR = "## 원하는 기능을 선택하세요."; - public static final String ADD_LINE = "## 등록할 노선 이름을 입력하세요."; - public static final String ADD_LINE_SUCCESS = "[INFO] 지하철 노선이 등록되었습니다."; + public static final String STATION_ADD = "## 등록할 역 이름을 입력하세요."; + public static final String STATION_ADD_SUCCESS = "[INFO] 지하철 역이 등록되었습니다."; + public static final String STATION_GET_SUCCESS = "\n## 역 목록"; + public static final String STATION_REMOVE_INPUT = "## 삭제할 역 이름을 입력하세요."; + public static final String STATION_REMOVE_SUCCESS = "[INFO] 지하철 역이 삭제되었습니다."; + public static final String LINE_ADD = "## 등록할 노선 이름을 입력하세요."; + public static final String LINE_ADD_SUCCESS = "[INFO] 지하철 노선이 등록되었습니다."; + public static final String LINE_GET_SUCCESS = "\n## 노선 목록"; + public static final String LINE_REMOVE_INPUT = "## 삭제할 노선 이름을 입력하세요."; + public static final String LINE_REMOVE_SUCCESS = "[INFO] 지하철 노선이 삭제되었습니다."; public static final String UPWARD_TERMINAL_STATION_NAME_INPUT = "## 등록할 노선의 상행 종점역 이름을 입력하세요."; public static final String DOWN_TERMINAL_STATION_NAME_INPUT = "## 등록할 노선의 하행 종점역 이름을 입력하세요."; - public static final String GET_LINES_SUCCESS = "\n## 노선 목록"; - public static final String REMOVE_LINE_INPUT = "## 삭제할 노선 이름을 입력하세요."; - public static final String REMOVE_LINE_SUCCESS = "[INFO] 지하철 노선이 삭제되었습니다."; - public static final String SUBWAY_LINE_MAP = "## 지하철 노선도"; public static final String SECTION_LINE_INPUT = "## 노선을 입력하세요."; public static final String SECTION_STATION_NAME_INPUT = "## 역 이름을 입력하세요."; public static final String SECTION_ORDER_INPUT = "## 순서를 입력하세요."; @@ -23,37 +21,43 @@ public class MessageView { public static final String SECTION_REMOVE_LINE_INPUT = "## 삭제할 구간의 노선을 입력하세요."; public static final String SECTION_REMOVE_STATION_INPUT = "## 삭제할 구간의 역을 입력하세요."; public static final String SECTION_REMOVE_SUCCESS = "[INFO] 구간이 삭제되었습니다."; + public static final String SELECT_SELECTOR = "## 원하는 기능을 선택하세요."; + public static final String SUBWAY_LINE_MAP = "## 지하철 노선도"; public void printAddStationMessage() { - System.out.println(ADD_STATION); + System.out.println(STATION_ADD); } public void printAddStationSuccessMessage() { - System.out.println(ADD_STATION_SUCCESS); + System.out.println(STATION_ADD_SUCCESS); } public void printGetStationsMessage() { - System.out.println(GET_STATIONS_SUCCESS); + System.out.println(STATION_GET_SUCCESS); } public void printRemoveStationMessage() { - System.out.println(REMOVE_STATION_INPUT); + System.out.println(STATION_REMOVE_INPUT); } public void printRemoveStationSuccessMessage() { - System.out.println(REMOVE_STATION_SUCCESS); + System.out.println(STATION_REMOVE_SUCCESS); } - public void printSelectSelectorMessage() { - System.out.println(SELECT_SELECTOR); + public void printAddLineMessage() { + System.out.println(LINE_ADD); } public void printAddLineSuccessMessage() { - System.out.println(ADD_LINE_SUCCESS); + System.out.println(LINE_ADD_SUCCESS); } - public void printAddLineMessage() { - System.out.println(ADD_LINE); + public void printRemoveLineInputMessage() { + System.out.println(LINE_REMOVE_INPUT); + } + + public void printGetLinesMessage() { + System.out.println(LINE_GET_SUCCESS); } public void printUpwardTerminalStationInputMessage() { @@ -64,20 +68,8 @@ public void printDownTerminalStationInputMessage() { System.out.println(DOWN_TERMINAL_STATION_NAME_INPUT); } - public void printGetLinesMessage() { - System.out.println(GET_LINES_SUCCESS); - } - - public void printRemoveLineInputMessage() { - System.out.println(REMOVE_LINE_INPUT); - } - public void printRemoveLineSuccessMessage() { - System.out.println(REMOVE_LINE_SUCCESS); - } - - public void printSubwayLineMapMessage() { - System.out.println(SUBWAY_LINE_MAP); + System.out.println(LINE_REMOVE_SUCCESS); } public void printSectionLineInputMessage() { @@ -108,4 +100,12 @@ public void printSectionRemoveSuccessMessage() { System.out.println(SECTION_REMOVE_SUCCESS); } -} + public void printSelectSelectorMessage() { + System.out.println(SELECT_SELECTOR); + } + + public void printSubwayLineMapMessage() { + System.out.println(SUBWAY_LINE_MAP); + } + +} \ No newline at end of file diff --git a/src/main/java/subway/view/OutputView.java b/src/main/java/subway/view/OutputView.java index b8688e429..46970bccc 100644 --- a/src/main/java/subway/view/OutputView.java +++ b/src/main/java/subway/view/OutputView.java @@ -9,9 +9,14 @@ public class OutputView { private static final String INFORMATION_TAG = "[INFO]"; + private static final String LINE_STATION_SEPARATOR = "---"; + private static final String SCREEN_MESSAGE_START = "\n## "; + private static final String SCREEN_MESSAGE_END = " 화면"; + private static final String ID_SEPARATOR = ". "; + MessageView messageView = new MessageView(); public void printScreen(Menu menu) { - System.out.println("\n## " + menu + " 화면"); + System.out.println(SCREEN_MESSAGE_START + menu + SCREEN_MESSAGE_END); printMenus(menu); printItems(menu); System.out.println(); @@ -19,13 +24,13 @@ public void printScreen(Menu menu) { private void printMenus(Menu menu) { for (String key : menu.getMenus().keySet()) { - System.out.println(key + ". " + menu.getMenus().get(key)); + System.out.println(key + ID_SEPARATOR + menu.getMenus().get(key)); } } private void printItems(Menu menu) { for (String key : menu.getItems().keySet()) { - System.out.println(key + ". " + menu.getItems().get(key)); + System.out.println(key + ID_SEPARATOR + menu.getItems().get(key)); } } @@ -41,15 +46,14 @@ public void printLines(List lines) { } } - public void printSubwayLineMap(){ - List lines = LineRepository.lines(); + public void printSubwayLineMap() { + List lines = LineRepository.lines(); + messageView.printSubwayLineMapMessage(); - for(Line line : lines){ - System.out.println("[INFO] " + line.getName()); - System.out.println("[INFO] ---"); - for(Station station : line.stations()){ - System.out.println("[INFO] " + station.getName()); - } + for (Line line : lines) { + System.out.println(INFORMATION_TAG + " " + line.getName()); + System.out.println(INFORMATION_TAG + " " + LINE_STATION_SEPARATOR); + printStations(line.stations()); System.out.println(); } } From e651119a47f44d0ff48d513ca0a035af07ac906c Mon Sep 17 00:00:00 2001 From: byungwook Date: Tue, 15 Dec 2020 20:47:54 +0900 Subject: [PATCH 20/25] =?UTF-8?q?refactor:=20=EB=A9=94=EB=89=B4=20?= =?UTF-8?q?=EC=A1=B0=EC=9E=91=EC=8B=9C=20=ED=99=94=EB=A9=B4=20=EC=A0=84?= =?UTF-8?q?=ED=99=98=20=EB=B0=A9=EB=B2=95=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 메뉴에서 없는 기능 id를 입력하면, 해당 메뉴로 다시 돌아간다. 2. 메뉴에서 기능을 정상적으로 끝마지치 않았다면 해당 메뉴로 다시 돌아간다. 3. 메뉴에서 기능을 정상적으로 끝마친다면, 메인화면으로 돌아간다. 4. 매개변수명 수정, 출력 메세지 포멧 수정 --- .../java/subway/controller/SubwayManageController.java | 8 +++++--- .../domain/selector/stationitem/StationValidator.java | 2 +- src/main/java/subway/view/InputValidator.java | 6 +++--- src/main/java/subway/view/InputView.java | 4 +++- src/main/java/subway/view/MessageView.java | 2 +- 5 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/main/java/subway/controller/SubwayManageController.java b/src/main/java/subway/controller/SubwayManageController.java index dd658886e..da4bf06d9 100644 --- a/src/main/java/subway/controller/SubwayManageController.java +++ b/src/main/java/subway/controller/SubwayManageController.java @@ -33,7 +33,8 @@ public void run() { || isSubMenu(selector)) { continue; } - executeItem(selector); + executeItem(selector, menu); + setMenuIdInformation(MAIN_MENU_ID, MAIN_MENU_ID); } } @@ -67,13 +68,14 @@ private void setMenuIdInformation(String previousMenuId, String currentMenuId) { this.currentMenuId = currentMenuId; } - private void executeItem(Selector selector) { + private void executeItem(Selector selector, Menu menu) { try { Manipulable item = (Manipulable) selector; item.execute(); } catch (Exception e) { System.out.println(e.getMessage()); - setMenuIdInformation(MAIN_MENU_ID, MAIN_MENU_ID); + outputView.printScreen(menu); + executeItem(selector, menu); } } diff --git a/src/main/java/subway/domain/selector/stationitem/StationValidator.java b/src/main/java/subway/domain/selector/stationitem/StationValidator.java index a8e8fb1cc..ca134c216 100644 --- a/src/main/java/subway/domain/selector/stationitem/StationValidator.java +++ b/src/main/java/subway/domain/selector/stationitem/StationValidator.java @@ -9,7 +9,7 @@ public class StationValidator { public static final int MIN_NAME_LENGTH = 2; - public static final String DUPLICATE_STATION_NAME_ERROR = "[ERROR] 이미 등록되어있는 역 입니다."; + public static final String DUPLICATE_STATION_NAME_ERROR = "\n[ERROR] 이미 등록되어있는 역 입니다."; public static final String UNDER_NAME_LENGTH_ERROR = "[ERROR] 역 이름은 2글자 이상이어야 합니다."; public static final String CONTAINS_LINE_ERROR = "[ERROR] 노선에 등록된 역은 삭제할 수 없습니다."; public static final String NOT_CONTAINS_ERROR = "[ERROR] 입력하신 역은 등록되지 않았습니다."; diff --git a/src/main/java/subway/view/InputValidator.java b/src/main/java/subway/view/InputValidator.java index 670366a61..289c114df 100644 --- a/src/main/java/subway/view/InputValidator.java +++ b/src/main/java/subway/view/InputValidator.java @@ -4,10 +4,10 @@ public class InputValidator { - private static final String INVALID_SELECTOR_ID_ERROR = "[ERROR] 선택할 수 없는 기능입니다.\n"; + private static final String INVALID_SELECTOR_ID_ERROR = "[ERROR] 선택할 수 없는 기능입니다."; - public void validateSelectorNumber(Menu menu, String number) { - if (menu.getMenus().get(number) == null && menu.getItems().get(number) == null) { + public void validateSelectorId(Menu menu, String Id) { + if (menu.getMenus().get(Id) == null && menu.getItems().get(Id) == null) { throw new IllegalArgumentException(INVALID_SELECTOR_ID_ERROR); } } diff --git a/src/main/java/subway/view/InputView.java b/src/main/java/subway/view/InputView.java index 9dd24658b..fc0e0886a 100644 --- a/src/main/java/subway/view/InputView.java +++ b/src/main/java/subway/view/InputView.java @@ -9,18 +9,20 @@ public class InputView { private static final Scanner scanner = new Scanner(System.in); private static final InputValidator inputValidator = new InputValidator(); private static final MessageView messageView = new MessageView(); + private static final OutputView outputView = new OutputView(); public Selector getSelector(Menu menu) { try { messageView.printSelectSelectorMessage(); String input = scanner.nextLine(); - inputValidator.validateSelectorNumber(menu, input); + inputValidator.validateSelectorId(menu, input); if (menu.getMenus().get(input) != null) { return menu.getMenus().get(input); } return menu.getItems().get(input); } catch (Exception e) { System.out.println(e.getMessage()); + outputView.printScreen(menu); return getSelector(menu); } } diff --git a/src/main/java/subway/view/MessageView.java b/src/main/java/subway/view/MessageView.java index 8256af418..d622bf873 100644 --- a/src/main/java/subway/view/MessageView.java +++ b/src/main/java/subway/view/MessageView.java @@ -3,7 +3,7 @@ public class MessageView { public static final String STATION_ADD = "## 등록할 역 이름을 입력하세요."; - public static final String STATION_ADD_SUCCESS = "[INFO] 지하철 역이 등록되었습니다."; + public static final String STATION_ADD_SUCCESS = "\n[INFO] 지하철 역이 등록되었습니다."; public static final String STATION_GET_SUCCESS = "\n## 역 목록"; public static final String STATION_REMOVE_INPUT = "## 삭제할 역 이름을 입력하세요."; public static final String STATION_REMOVE_SUCCESS = "[INFO] 지하철 역이 삭제되었습니다."; From d550a73e836884e1c06dfacc618809d917b7fa84 Mon Sep 17 00:00:00 2001 From: byungwook Date: Tue, 15 Dec 2020 21:02:54 +0900 Subject: [PATCH 21/25] =?UTF-8?q?refactor:=20=EB=85=B8=EC=84=A0,=20?= =?UTF-8?q?=EC=97=AD=20=EC=9D=B4=EB=A6=84=20=EC=9E=85=EB=A0=A5=EC=8B=9C=20?= =?UTF-8?q?=ED=8A=B9=EC=88=98=EB=AC=B8=EC=9E=90=EC=9D=BC=20=EA=B2=BD?= =?UTF-8?q?=EC=9A=B0=20=EC=98=88=EC=99=B8=EC=B2=98=EB=A6=AC=20=ED=95=98?= =?UTF-8?q?=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/view/InputValidator.java | 9 +++++++++ src/main/java/subway/view/InputView.java | 9 ++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/main/java/subway/view/InputValidator.java b/src/main/java/subway/view/InputValidator.java index 289c114df..43b78486d 100644 --- a/src/main/java/subway/view/InputValidator.java +++ b/src/main/java/subway/view/InputValidator.java @@ -1,14 +1,23 @@ package subway.view; +import java.util.regex.Pattern; import subway.domain.selector.menu.Menu; public class InputValidator { private static final String INVALID_SELECTOR_ID_ERROR = "[ERROR] 선택할 수 없는 기능입니다."; + private static final String SPECIAL_CHARACTER_PATTERN = "[0-9|a-z |A-Z|ㄱ-ㅎ|ㅏ-ㅣ|가-힝 ]*"; + private static final String SPECIAL_CHARACTER_ERROR_MESSAGE = "[ERROR] 이름에 특수문자가 포함 되어있습니다."; public void validateSelectorId(Menu menu, String Id) { if (menu.getMenus().get(Id) == null && menu.getItems().get(Id) == null) { throw new IllegalArgumentException(INVALID_SELECTOR_ID_ERROR); } } + + public static void validateContainSpecialCharacters(String name) { + if (!Pattern.matches(SPECIAL_CHARACTER_PATTERN, name)) { + throw new IllegalArgumentException(SPECIAL_CHARACTER_ERROR_MESSAGE); + } + } } diff --git a/src/main/java/subway/view/InputView.java b/src/main/java/subway/view/InputView.java index fc0e0886a..1dfbbc14d 100644 --- a/src/main/java/subway/view/InputView.java +++ b/src/main/java/subway/view/InputView.java @@ -28,7 +28,14 @@ public Selector getSelector(Menu menu) { } public String getName() { - return scanner.nextLine(); + try { + String name = scanner.nextLine(); + inputValidator.validateContainSpecialCharacters(name); + return name; + } catch (Exception e){ + System.out.println(e.getMessage()); + return getName(); + } } public int getNumber() { From 171b3116b5b698f5260cf30c6bc4bdf7bcf9a5de Mon Sep 17 00:00:00 2001 From: byungwook Date: Tue, 15 Dec 2020 21:03:38 +0900 Subject: [PATCH 22/25] =?UTF-8?q?docs:=20=ED=94=84=EB=A1=9C=EC=A0=9D?= =?UTF-8?q?=ED=8A=B8=20=EC=86=8C=EA=B0=9C=20=EB=AC=B8=EA=B5=AC=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/docs/README.md b/docs/README.md index 8827a60ff..3245f893c 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,5 +1,14 @@ ## **📃 프로젝트 소개** +- 지하철 노선도 관리 프로그램 입니다. +- 콘솔창에 보여지는 메뉴 UI를 통해서 지하철 노선도를 관리할 수 있습니다. +- "역 관리" 메뉴에서는 지하철 역을 등록하고, 삭제하고, 조회할 수 있습니다. +- "노선 관리" 메뉴에서는 지하철 노선을 등록하고, 삭제하고, 조회할 수 있습니다. +- "구간 관리" 메뉴에서는 지하철 노선을 등록하고, 삭제할 수 있습니다. +- "지하철 노선도 출력" 기능을 통해 모든 지하철 노선들을 조회할 수 있습니다. + + + ## **🛠️ 프로그램 기능 목록** #### 초기 설정 From 39b50c0b2c93581cc3239811b360f7c80c140db4 Mon Sep 17 00:00:00 2001 From: byungwook Date: Tue, 15 Dec 2020 21:09:02 +0900 Subject: [PATCH 23/25] =?UTF-8?q?style:=20=EA=B5=AC=ED=98=84=20=EC=88=9C?= =?UTF-8?q?=EC=84=9C=20convention=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/domain/line/Line.java | 2 +- src/main/java/subway/view/InputValidator.java | 11 ++++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/main/java/subway/domain/line/Line.java b/src/main/java/subway/domain/line/Line.java index 466b502c8..c934d85d4 100644 --- a/src/main/java/subway/domain/line/Line.java +++ b/src/main/java/subway/domain/line/Line.java @@ -7,8 +7,8 @@ public class Line { - private String name; private final List stations = new ArrayList<>(); + private String name; public Line(String name) { this.name = name; diff --git a/src/main/java/subway/view/InputValidator.java b/src/main/java/subway/view/InputValidator.java index 43b78486d..34701d326 100644 --- a/src/main/java/subway/view/InputValidator.java +++ b/src/main/java/subway/view/InputValidator.java @@ -9,15 +9,16 @@ public class InputValidator { private static final String SPECIAL_CHARACTER_PATTERN = "[0-9|a-z |A-Z|ㄱ-ㅎ|ㅏ-ㅣ|가-힝 ]*"; private static final String SPECIAL_CHARACTER_ERROR_MESSAGE = "[ERROR] 이름에 특수문자가 포함 되어있습니다."; + public static void validateContainSpecialCharacters(String name) { + if (!Pattern.matches(SPECIAL_CHARACTER_PATTERN, name)) { + throw new IllegalArgumentException(SPECIAL_CHARACTER_ERROR_MESSAGE); + } + } + public void validateSelectorId(Menu menu, String Id) { if (menu.getMenus().get(Id) == null && menu.getItems().get(Id) == null) { throw new IllegalArgumentException(INVALID_SELECTOR_ID_ERROR); } } - public static void validateContainSpecialCharacters(String name) { - if (!Pattern.matches(SPECIAL_CHARACTER_PATTERN, name)) { - throw new IllegalArgumentException(SPECIAL_CHARACTER_ERROR_MESSAGE); - } - } } From 35df2ceb914ab8ed3811224f9a4531416a6767d7 Mon Sep 17 00:00:00 2001 From: byungwook Date: Tue, 15 Dec 2020 21:18:24 +0900 Subject: [PATCH 24/25] =?UTF-8?q?refactor:=20=EC=A4=91=EB=B3=B5=20?= =?UTF-8?q?=EB=90=98=EB=8A=94=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=A0=9C?= =?UTF-8?q?=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. getLine 메서드를 LineRepository 클래스의 동일한 기능을 하는 메서드로 교체 --- .../domain/selector/sectionitem/AddSectionItem.java | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/src/main/java/subway/domain/selector/sectionitem/AddSectionItem.java b/src/main/java/subway/domain/selector/sectionitem/AddSectionItem.java index d603bdafd..09a0c5457 100644 --- a/src/main/java/subway/domain/selector/sectionitem/AddSectionItem.java +++ b/src/main/java/subway/domain/selector/sectionitem/AddSectionItem.java @@ -38,7 +38,7 @@ public void execute() { } private void addStation(String lineName, String stationName, int order) { - Line line = getLine(lineName); + Line line = LineRepository.getLineByName(lineName); List stations = line.stations(); sectionValidator.validateSectionOrder(order, stations.size()); Station station = new Station(stationName); @@ -46,17 +46,6 @@ private void addStation(String lineName, String stationName, int order) { line.addStationByIndex(station, order - 1); } - private Line getLine(String lineName) { - List lines = LineRepository.lines(); - - for (Line line : lines) { - if (line.getName().equals(lineName)) { - return line; - } - } - return null; - } - } From f9e1986072390a042a918bcf71cadc681cb9ebbb Mon Sep 17 00:00:00 2001 From: byungwook Date: Thu, 17 Dec 2020 23:50:12 +0900 Subject: [PATCH 25/25] =?UTF-8?q?refactor:=20=EC=9D=98=EB=AF=B8=EA=B0=80?= =?UTF-8?q?=20=EB=AA=85=ED=99=95=ED=95=98=EA=B2=8C=20=EB=93=9C=EB=9F=AC?= =?UTF-8?q?=EB=82=98=EB=8F=84=EB=A1=9D=20=ED=81=B4=EB=9E=98=EC=8A=A4?= =?UTF-8?q?=EB=AA=85=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../{AddLineItem.java => LineAdder.java} | 4 +-- .../{GetLineItem.java => LineGetter.java} | 4 +-- .../{RemoveLineItem.java => LineRemover.java} | 4 +-- .../domain/selector/menu/MenuRepository.java | 32 +++++++++---------- ...{AddSectionItem.java => SectionAdder.java} | 4 +-- ...veSectionItem.java => SectionRemover.java} | 4 +-- ...{AddStationItem.java => StationAdder.java} | 4 +-- ...GetStationItem.java => StationGetter.java} | 4 +-- ...veStationItem.java => StationRemover.java} | 4 +-- 9 files changed, 32 insertions(+), 32 deletions(-) rename src/main/java/subway/domain/selector/lineitem/{AddLineItem.java => LineAdder.java} (93%) rename src/main/java/subway/domain/selector/lineitem/{GetLineItem.java => LineGetter.java} (76%) rename src/main/java/subway/domain/selector/lineitem/{RemoveLineItem.java => LineRemover.java} (82%) rename src/main/java/subway/domain/selector/sectionitem/{AddSectionItem.java => SectionAdder.java} (93%) rename src/main/java/subway/domain/selector/sectionitem/{RemoveSectionItem.java => SectionRemover.java} (90%) rename src/main/java/subway/domain/selector/stationitem/{AddStationItem.java => StationAdder.java} (84%) rename src/main/java/subway/domain/selector/stationitem/{GetStationItem.java => StationGetter.java} (76%) rename src/main/java/subway/domain/selector/stationitem/{RemoveStationItem.java => StationRemover.java} (83%) diff --git a/src/main/java/subway/domain/selector/lineitem/AddLineItem.java b/src/main/java/subway/domain/selector/lineitem/LineAdder.java similarity index 93% rename from src/main/java/subway/domain/selector/lineitem/AddLineItem.java rename to src/main/java/subway/domain/selector/lineitem/LineAdder.java index e7a6147c9..38774f509 100644 --- a/src/main/java/subway/domain/selector/lineitem/AddLineItem.java +++ b/src/main/java/subway/domain/selector/lineitem/LineAdder.java @@ -9,12 +9,12 @@ import subway.domain.selector.stationitem.StationValidator; import subway.domain.station.Station; -public class AddLineItem extends Selector implements Manipulable { +public class LineAdder extends Selector implements Manipulable { LineValidator lineValidator = new LineValidator(); StationValidator stationValidator = new StationValidator(); - public AddLineItem(String id, String name) { + public LineAdder(String id, String name) { this.id = id; this.name = name; } diff --git a/src/main/java/subway/domain/selector/lineitem/GetLineItem.java b/src/main/java/subway/domain/selector/lineitem/LineGetter.java similarity index 76% rename from src/main/java/subway/domain/selector/lineitem/GetLineItem.java rename to src/main/java/subway/domain/selector/lineitem/LineGetter.java index 260765b98..6e26a36a6 100644 --- a/src/main/java/subway/domain/selector/lineitem/GetLineItem.java +++ b/src/main/java/subway/domain/selector/lineitem/LineGetter.java @@ -4,9 +4,9 @@ import subway.domain.selector.Manipulable; import subway.domain.selector.Selector; -public class GetLineItem extends Selector implements Manipulable { +public class LineGetter extends Selector implements Manipulable { - public GetLineItem(String id, String name) { + public LineGetter(String id, String name) { this.id = id; this.name = name; } diff --git a/src/main/java/subway/domain/selector/lineitem/RemoveLineItem.java b/src/main/java/subway/domain/selector/lineitem/LineRemover.java similarity index 82% rename from src/main/java/subway/domain/selector/lineitem/RemoveLineItem.java rename to src/main/java/subway/domain/selector/lineitem/LineRemover.java index 52d752175..d10967cfc 100644 --- a/src/main/java/subway/domain/selector/lineitem/RemoveLineItem.java +++ b/src/main/java/subway/domain/selector/lineitem/LineRemover.java @@ -4,11 +4,11 @@ import subway.domain.selector.Manipulable; import subway.domain.selector.Selector; -public class RemoveLineItem extends Selector implements Manipulable { +public class LineRemover extends Selector implements Manipulable { LineValidator lineValidator = new LineValidator(); - public RemoveLineItem(String id, String name) { + public LineRemover(String id, String name) { this.id = id; this.name = name; } diff --git a/src/main/java/subway/domain/selector/menu/MenuRepository.java b/src/main/java/subway/domain/selector/menu/MenuRepository.java index 077d378a8..371b1231f 100644 --- a/src/main/java/subway/domain/selector/menu/MenuRepository.java +++ b/src/main/java/subway/domain/selector/menu/MenuRepository.java @@ -1,14 +1,14 @@ package subway.domain.selector.menu; import java.util.LinkedHashMap; -import subway.domain.selector.lineitem.AddLineItem; -import subway.domain.selector.lineitem.GetLineItem; -import subway.domain.selector.lineitem.RemoveLineItem; -import subway.domain.selector.sectionitem.AddSectionItem; -import subway.domain.selector.sectionitem.RemoveSectionItem; -import subway.domain.selector.stationitem.AddStationItem; -import subway.domain.selector.stationitem.GetStationItem; -import subway.domain.selector.stationitem.RemoveStationItem; +import subway.domain.selector.lineitem.LineAdder; +import subway.domain.selector.lineitem.LineGetter; +import subway.domain.selector.lineitem.LineRemover; +import subway.domain.selector.sectionitem.SectionAdder; +import subway.domain.selector.sectionitem.SectionRemover; +import subway.domain.selector.stationitem.StationAdder; +import subway.domain.selector.stationitem.StationGetter; +import subway.domain.selector.stationitem.StationRemover; import subway.domain.selector.utilitem.BackWardItem; import subway.domain.selector.utilitem.ExitItem; import subway.domain.selector.utilitem.PrintSubwayLineItem; @@ -19,22 +19,22 @@ public class MenuRepository { static { Menu stationMenu = new Menu("1", "역 관리"); - stationMenu.addMenuItems("1", new AddStationItem("1", "역 등록")); - stationMenu.addMenuItems("2", new RemoveStationItem("2", "역 삭제")); - stationMenu.addMenuItems("3", new GetStationItem("3", "역 조회")); + stationMenu.addMenuItems("1", new StationAdder("1", "역 등록")); + stationMenu.addMenuItems("2", new StationRemover("2", "역 삭제")); + stationMenu.addMenuItems("3", new StationGetter("3", "역 조회")); stationMenu.addMenuItems("B", new BackWardItem("B", "돌아가기")); menus.put("1", stationMenu); Menu lineMenu = new Menu("2", "노선 관리"); - lineMenu.addMenuItems("1", new AddLineItem("1", "노선 등록")); - lineMenu.addMenuItems("2", new RemoveLineItem("2", "노선 삭제")); - lineMenu.addMenuItems("3", new GetLineItem("3", "노선 조회")); + lineMenu.addMenuItems("1", new LineAdder("1", "노선 등록")); + lineMenu.addMenuItems("2", new LineRemover("2", "노선 삭제")); + lineMenu.addMenuItems("3", new LineGetter("3", "노선 조회")); lineMenu.addMenuItems("B", new BackWardItem("B", "돌아가기")); menus.put("2", lineMenu); Menu sectionMenu = new Menu("3", "구간 관리"); - sectionMenu.addMenuItems("1", new AddSectionItem("1", "구간 등록")); - sectionMenu.addMenuItems("2", new RemoveSectionItem("2", "구간 삭제")); + sectionMenu.addMenuItems("1", new SectionAdder("1", "구간 등록")); + sectionMenu.addMenuItems("2", new SectionRemover("2", "구간 삭제")); sectionMenu.addMenuItems("B", new BackWardItem("B", "돌아가기")); menus.put("3", sectionMenu); diff --git a/src/main/java/subway/domain/selector/sectionitem/AddSectionItem.java b/src/main/java/subway/domain/selector/sectionitem/SectionAdder.java similarity index 93% rename from src/main/java/subway/domain/selector/sectionitem/AddSectionItem.java rename to src/main/java/subway/domain/selector/sectionitem/SectionAdder.java index 09a0c5457..8de4961de 100644 --- a/src/main/java/subway/domain/selector/sectionitem/AddSectionItem.java +++ b/src/main/java/subway/domain/selector/sectionitem/SectionAdder.java @@ -9,13 +9,13 @@ import subway.domain.selector.stationitem.StationValidator; import subway.domain.station.Station; -public class AddSectionItem extends Selector implements Manipulable { +public class SectionAdder extends Selector implements Manipulable { LineValidator lineValidator = new LineValidator(); StationValidator stationValidator = new StationValidator(); SectionValidator sectionValidator = new SectionValidator(); - public AddSectionItem(String id, String name) { + public SectionAdder(String id, String name) { this.id = id; this.name = name; } diff --git a/src/main/java/subway/domain/selector/sectionitem/RemoveSectionItem.java b/src/main/java/subway/domain/selector/sectionitem/SectionRemover.java similarity index 90% rename from src/main/java/subway/domain/selector/sectionitem/RemoveSectionItem.java rename to src/main/java/subway/domain/selector/sectionitem/SectionRemover.java index b729be166..cba346acf 100644 --- a/src/main/java/subway/domain/selector/sectionitem/RemoveSectionItem.java +++ b/src/main/java/subway/domain/selector/sectionitem/SectionRemover.java @@ -8,13 +8,13 @@ import subway.domain.selector.lineitem.LineValidator; import subway.domain.selector.stationitem.StationValidator; -public class RemoveSectionItem extends Selector implements Manipulable { +public class SectionRemover extends Selector implements Manipulable { SectionValidator sectionValidator = new SectionValidator(); LineValidator lineValidator = new LineValidator(); StationValidator stationValidator = new StationValidator(); - public RemoveSectionItem(String id, String name) { + public SectionRemover(String id, String name) { this.id = id; this.name = name; } diff --git a/src/main/java/subway/domain/selector/stationitem/AddStationItem.java b/src/main/java/subway/domain/selector/stationitem/StationAdder.java similarity index 84% rename from src/main/java/subway/domain/selector/stationitem/AddStationItem.java rename to src/main/java/subway/domain/selector/stationitem/StationAdder.java index 4e8ad8a90..f79f12396 100644 --- a/src/main/java/subway/domain/selector/stationitem/AddStationItem.java +++ b/src/main/java/subway/domain/selector/stationitem/StationAdder.java @@ -5,11 +5,11 @@ import subway.domain.station.Station; import subway.domain.station.StationRepository; -public class AddStationItem extends Selector implements Manipulable { +public class StationAdder extends Selector implements Manipulable { StationValidator stationValidator = new StationValidator(); - public AddStationItem(String id, String name) { + public StationAdder(String id, String name) { this.id = id; this.name = name; } diff --git a/src/main/java/subway/domain/selector/stationitem/GetStationItem.java b/src/main/java/subway/domain/selector/stationitem/StationGetter.java similarity index 76% rename from src/main/java/subway/domain/selector/stationitem/GetStationItem.java rename to src/main/java/subway/domain/selector/stationitem/StationGetter.java index 431f31a41..93370b280 100644 --- a/src/main/java/subway/domain/selector/stationitem/GetStationItem.java +++ b/src/main/java/subway/domain/selector/stationitem/StationGetter.java @@ -4,9 +4,9 @@ import subway.domain.selector.Selector; import subway.domain.station.StationRepository; -public class GetStationItem extends Selector implements Manipulable { +public class StationGetter extends Selector implements Manipulable { - public GetStationItem(String id, String name) { + public StationGetter(String id, String name) { this.id = id; this.name = name; } diff --git a/src/main/java/subway/domain/selector/stationitem/RemoveStationItem.java b/src/main/java/subway/domain/selector/stationitem/StationRemover.java similarity index 83% rename from src/main/java/subway/domain/selector/stationitem/RemoveStationItem.java rename to src/main/java/subway/domain/selector/stationitem/StationRemover.java index e11a51ebe..38a6c71bd 100644 --- a/src/main/java/subway/domain/selector/stationitem/RemoveStationItem.java +++ b/src/main/java/subway/domain/selector/stationitem/StationRemover.java @@ -4,11 +4,11 @@ import subway.domain.selector.Selector; import subway.domain.station.StationRepository; -public class RemoveStationItem extends Selector implements Manipulable { +public class StationRemover extends Selector implements Manipulable { StationValidator stationValidator = new StationValidator(); - public RemoveStationItem(String id, String name) { + public StationRemover(String id, String name) { this.id = id; this.name = name; }