diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 000000000..af0f300a2 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,362 @@ +# 지하철 노선도 미션 +우아한테크코스 웹 백엔드 프리코스 3주차 미션 프로젝트입니다. + +
+ +## 👩‍💻 구현할 기능 목록 +### 초기 설정 +#### 지하철 역 +- [x] 교대역, 강남역, 역삼역, 남부터미널역, 양재역, 양재시민의숲역, 매봉역을 등록한다. + +#### 지하철 노선 +- [x] 2호선, 3호선, 신분당선을 등록한다. + +#### 지하철 노선도 +- [x] 2호선에는 `상행 종점` 교대역 - 강남역 - 역삼역 `하행 종점`을 등록한다. +- [x] 3호선에는 `상행 종점` 교대역 - 남부터미널역 - 양재역 - 매봉역 `하행 종점`을 등록한다. +- [x] 신분당선에는 `상행 종점` 강남역 - 양재역 - 양재시민의숲역 `하행 종점`을 등록한다. + +### 지하철 역 +- [x] 지하철 역을 등록한다. [`예외 1`](#exception1) +- [x] 지하철 역을 삭제한다. [`예외 2`](#exception2) +- [x] 지하철 역의 목록을 조회한다. + +### 지하철 노선 +- [x] 지하철 노선을 등록한다. [`예외 3`](#exception3) + - [x] 지하철 노선 등록 시 상행 종점역과 하행 종점역을 입력한다. [`예외 4`](#exception4) +- [x] 지하철 노선을 삭제한다. [`예외 5`](#exception5) +- [x] 지하철 노선의 목록을 조회한다. + +### 지하철 구간 +- [x] 지하철 구간을 추가한다. + - [x] 하나의 역은 여러 개의 노선에 추가될 수 있다. + - [x] 새로운 역은 역과 역 사이에 추가될 수 있다. + - [x] 새로운 역을 삽입할 노선을 입력한다. [`예외 6`](#exception6) + - [x] 새로운 역의 이름을 입력한다. [`예외 7`](#exception7) + - [x] 새로운 역의 순서를 입력한다. [`예외 8`](#exception8) + - [x] 지하철 노선에 갈래길은 생길 수 없다. +- [x] 지하철 구간을 삭제한다. + - [x] 지하철 노선에 등록된 역을 제거할 수 있다. [`예외 9`](#exception9) + - [x] 삭제할 구간의 노선을 입력한다. [`예외 10`](#exception10) + - [x] 삭제할 구간의 역을 입력한다. [`예외 11`](#exception11) + - [x] 상행 종점역을 제거할 경우 다음 역이 종점이 된다. + - [x] 하행 종점역을 제거할 경우 이전 역이 종점이 된다. + +### 지하철 노선도 +- [x] 지하철 노선도를 조회한다. + - [x] 지하철 노선의 상행 종점부터 하행 종점까지 연결된 순서대로 역 목록을 조회한다. + +### 입출력 +#### 입력 +- [x] 메인 화면에서 1~4 숫자 또는 Q 문자만 입력한다. [`예외 12`](#exception12) +- [x] 역 관리 화면에서 1~3 숫자 또는 B 문자만 입력한다. [`예외 13`](#exception13) +- [x] 노선 관리 화면에서 1~3 숫자 또는 B 문자만 입력한다. [`예외 14`](#exception14) +- [x] 구간 관리 화면에서 1~2 숫자 또는 B 문자만 입력한다. [`예외 15`](#exception15) + +#### 출력 +- [x] 메인 화면을 출력한다. +- [x] 역 관리 화면을 출력한다. +- [x] 노선 관리 화면을 출력한다. +- [x] 구간 관리 화면을 출력한다. +- [x] 각 화면 기능에 대한 실행 결과는 `[INFO]`를 붙여서 출력한다. +- [x] 각 화면 기능에 대한 에러 발생은 `[ERROR]`를 붙여서 출력한다. + +### 돌아가기 +- [x] 관리/출력 화면에서 메인 화면으로 돌아간다. + - [x] B 문자를 입력한다. + - [x] 기능 실행이 완료되면 자동으로 돌아간다. + +### 종료 +- [x] 메인 화면에서 프로그램을 종료한다. + - [x] Q 문자를 입력한다. + +### 에러 +- [x] 에러가 발생하면 다음 입력을 기다린다. + - [x] 프로그램은 강제 종료되지 않는다. + +### 예외 처리 +#### `예외 1` +- [x] 지하철 역 이름이 중복되는 경우 +- [x] 지하철 역 이름은 2글자 미만인 경우 +- [x] 지하철 역 이름이 '역'으로 끝나지 않는 경우 + +#### `예외 2` +- [x] 지하철 역이 지하철 노선에 등록된 경우 +- [x] 삭제할 역이 없는 경우 + +#### `예외 3` +- [x] 지하철 노선 이름이 중복되는 경우 +- [x] 지하철 노선 이름이 2글자 미만인 경우 +- [x] 지하철 노선 이름이 '선'으로 끝나지 않는 경우 + +#### `예외 4` +- [x] 상행 종점역과 하행 종점역이 지하철 역에 존재하지 않는 경우 +- [x] 상행 종점역과 하행 종점역이 같은 경우 + +#### `예외 5` +- [x] 삭제할 노선이 없는 경우 + +#### `예외 6` +- [x] 삽입할 노선이 없는 경우 + +#### `에외 7` +- [x] 해당 역이 없는 경우 +- [x] 해당 역이 이미 노선에 존재하는 경우 + +#### `예외 8` +- [x] 순서가 문자인 경우 +- [x] 순서가 음수 또는 0인 경우 +- [x] 순서가 노선에 있는 역 개수+1 보다 큰 수인 경우 + +#### `예외 9` +- [x] 지하철 노선에 포함된 역이 2개 이하인 경우 + +#### `예외 10` +- [x] 해당 노선이 없는 경우 + +#### `예외 11` +- [x] 해당 역이 없는 경우 + +#### `예외 12` +- [x] 메인 화면에서 1~4 숫자 또는 Q 문자 이외를 입력하는 경우 + +#### `예외 13` +- [x] 역 관리 화면에서 1~3 숫자 또는 B 문자 이외를 입력하는 경우 + +#### `예외 14` +- [x] 노선 관리 화면에서 1~3 숫자 또는 B 문자 이외를 입력하는 경우 + +#### `예외 15` +- [x] 구간 관리 화면에서 1~2 숫자 또는 B 문자 이외를 입력하는 경우 + +
+ +## ✅ 확인할 프로그래밍 목록 +### 요구사항 +- [x] 자바 코드 컨벤션을 지키면서 프로그래밍한다. + - [x] 들여쓰기는 `4 spaces`로 한다. +- [x] (1 <= indent depth) && (indent depth <= 2)이다. +- [x] 3항 연산자를 쓰지 않는다. +- [x] 함수의 길이는 `15라인`을 넘지 않는다. + - [x] 함수가 한 가지 일만 하도록 최대한 작게 만든다. +- [x] else 예약어를 쓰지 않는다. + - [x] `early return`하는 코드를 작성한다. + - [x] switch/case 문도 사용하지 않는다. + +### 추가사항 +- [x] 코드 리팩토링을 진행한다. + - [x] 1주차 피드백을 반영한다. + - [x] 2주차 피드백을 반영한다. +- [x] 주석은 Javadoc 형태로 작성한다. +- [x] README 문서를 상세하게 작성한다. + +## 📂 완성된 디렉토리 구조 +``` +└─java-subway-map-precourse + │ + ├─docs + │ └─README.md + └─src + └─main + └─java + └─subway + ├─controller + │ ├─LineController.java + │ ├─SectionController.java + │ ├─StationController.java + │ ├─SubwayController.java + │ └─TransitMapController.java + ├─domain + │ ├─Line.java + │ ├─Section.java + │ ├─Station.java + │ ├─Stations.java + │ └─TransitMap.java + ├─repository + │ ├─LineRepository.java + │ ├─StataionRepository.java + │ └─TransitMapRepository.java + ├─service + │ ├─initialization + │ │ ├─LineInitialization.java + │ │ ├─StationInitialization.java + │ │ └─TransitMapInitialization.java + │ ├─line + │ │ ├─addition + │ │ │ ├─LineAdditionService.java + │ │ │ └─LineAdditionValidation.java + │ │ ├─deletion + │ │ │ ├─LineDeletionService.java + │ │ │ └─LineDeletionValidation.java + │ │ ├─show + │ │ │ └─LineShowService.java + │ │ └─LineService.java + │ ├─section + │ │ ├─addition + │ │ │ ├─SectionAdditionService.java + │ │ │ └─SectionAdditionValidation.java + │ │ ├─deletion + │ │ │ ├─SectionDeletionService.java + │ │ │ └─SectionDeletionValidation.java + │ │ └─SectionService.java + │ ├─station + │ │ ├─addition + │ │ │ ├─StationAdditionValidation.java + │ │ │ └─StationAdditionValidationInterface.java + │ │ ├─deletion + │ │ │ ├─StationDeletionValidation.java + │ │ │ └─StationDeletionValidationInterface.java + │ │ ├─show + │ │ │ ├─StationShowInterface.java + │ │ │ └─StationShowService.java + │ │ └─StationService.java + │ ├─subway + │ │ ├─SubwayInterface.java + │ │ └─SubwayService.java + │ ├─transitmap + │ │ ├─show + │ │ │ └─TransitMapShowService.java + │ │ └─TransitMapService.java + │ └─util + │ ├─ChoiceInterface.java + │ ├─ChoiceService.java + │ └─FeatureInterface.java + ├─type + │ ├─BoundaryType.java + │ ├─CheckType.java + │ ├─ExceptionType.java + │ ├─InformationType.java + │ ├─InputType.java + │ ├─LineType.java + │ ├─ScreenType.java + │ ├─StationType.java + │ └─TextType.java + ├─view + │ ├─input + │ │ ├─line + │ │ │ └─LineScanView.java + │ │ ├─section + │ │ │ └─SectionScanView.java + │ │ ├─station + │ │ │ └─StationScanView.java + │ │ └─subway + │ │ └─SubwayScanView.java + │ └─output + │ ├─line + │ │ ├─LineExceptionView.java + │ │ ├─LineInformationView.java + │ │ └─LineTextView.java + │ ├─section + │ │ ├─SectionExceptionView.java + │ │ ├─SectionInformationView.java + │ │ └─SectionTextView.java + │ ├─station + │ │ ├─StationExceptionView.java + │ │ ├─StationInformationView.java + │ │ └─StationTextView.java + │ └─util + │ ├─FeatureChoiceExceptionView.java + │ └─ScreenView.java + └─Application.java +``` +### subwaymap +- Application.java : 메인 클래스 + +#### controller +- LineController.java : 지하철 노선에 대한 컨트롤러 클래스 +- SectionController.java : 지하철 구간에 대한 컨트롤러 클래스 +- StationController.java : 지하철 역에 대한 컨트롤러 클래스 +- SubwayController.java : 지하철에 대한 컨트롤러 클래스 +- TransitMapController.java : 지하철 노선도에 대한 컨트롤러 클래스 + +#### domain +- Line.java : 지하철 노선에 대한 도메인 모델 클래스 +- Section.java : 지하철 구간에 대한 도메인 모델 클래스 +- Station.java : 지하철 역에 대한 도메인 모델 클래스 +- Stations.java : 지하철 상행 종점역, 하행 종점역에 대한 도메인 모델 클래스 +- TransitMap.java : 지하철 노선도에 대한 도메인 모델 클래스 + +#### repository +- LineRepository.java : 지하철 노선에 대한 저장소 클래스 +- StationRepository.java : 지하철 역에 대한 저장소 클래스 +- TransitMapRepository.java : 지하철 노선도에 대한 저장소 클래스 + +#### service +##### initialization +- LineInitialization.java : 지하철 노선 초기화에 대한 클래스 +- StationInitialization.java : 지하철 역 초기화에 대한 클래스 +- TransitMapInitialization.java : 지하철 노선도 초기화에 대한 클래스 + +##### line +- addition/LineAdditionService.java : 지하철 노선 추가 로직에 대한 서비스 클래스 +- addition/LineAdditionValidation.java : 지하철 노선 추가 로직 검증에 대한 클래스 +- deletion/LineDeletionService.java : 지하철 노선 삭제 로직에 대한 서비스 클래스 +- deletion/LineDeletionValidation.java : 지하철 노선 삭제 로직 검증에 대한 클래스 +- show/LineShowService.java : 지하철 노선 조회 로직에 대한 서비스 클래스 +- LineService.java : 지하철 노선 비즈니스 로직에 대한 서비스 클래스 + +##### section +- addition/SectionAdditionService.java : 지하철 구간 추가 로직에 대한 서비스 클래스 +- addition/SectionAdditionValidation.java : 지하철 구간 추가 로직 검증에 대한 클래스 +- deletion/SectionDeletionService.java : 지하철 구간 삭제 로직에 대한 서비스 클래스 +- deletion/SectionDeletionValidation.java : 지하철 구간 삭제 로직 검증에 대한 클래스 +- SectionService.java : 지하철 구간 비즈니스 로직에 대한 서비스 클래스 + +##### station +- addition/StationAdditionValidation.java : 지하철 역 추가 로직 검증에 대한 클래스 +- addition/StationAdditionValidationInterface.java : 지하철 역 추가 로직 검증에 대한 인터페이스 +- deletion/StationDeletionValidation.java : 지하철 역 삭제 로직 검증에 대한 클래스 +- deletion/StationDeletionValidationInterface.java : 지하철 역 삭제 로직 검증에 대한 인터페이스 +- show/StationShowInterface.java : 지하철 역 조회 로직에 대한 인터페이스 +- show/StationShowService.java : 지하철 역 조회 로직에 대한 서비스 클래스 +- StationService.java : 지하철 역 비즈니스 로직에 대한 서비스 클래스 + +##### subway +- SubwayInterface.java : 지하철 비즈니스 로직에 대한 인터페이스 +- SubwayService.java : 지하철 비즈니스 로직에 대한 서비스 클래스 + +##### transitmap +- show/TransitMapShowService.java : 지하철 노선도 출력 로직에 대한 서비스 클래스 +- TransitMapService.java : 지하철 노선도 비즈니스 로직에 대한 서비스 클래스 + +##### util +- ChoiceInterface.java : 지하철 역, 지하철 노선 기능 선택에 대한 인터페이스 +- ChoiceService.java : 지하철 역, 지하철 노선 기능 선택에 대한 서비스 클래스 +- FeatureInterface.java : 지하철 역, 지하철 노선 기능에 대한 인터페이스 + +#### type +- BoundaryType.java : 경계 값 상수를 모아둔 Enum 클래스 +- CheckType.java : 입력 값 마지막 문자 확인용 상수를 모아둔 Enum 클래스 +- ExceptionType.java : 예외 처리 문구 상수를 모아둔 Enum 클래스 +- InformationType.java : 실행 결과 문구 상수를 모아둔 Enum 클래스 +- InputType.java : 화면 기능 입력 값 상수를 모아둔 Enum 클래스 +- LineType.java : 지하철 노선 초기화용 상수를 모아둔 Enum 클래스 +- ScreenType.java : 화면 문구 상수를 모아둔 Enum 클래스 +- StationType.java : 지하철 역 초기화용 상수를 모아둔 Enum 클래스 +- TextType.java : 화면 출력 문구 상수를 모아둔 Enum 클래스 + +#### view +##### input +- line/LineScanView.java : 지하철 노선 기능 입력에 대한 클래스 +- section/SectionScanView.java : 지하철 구간 기능 입력에 대한 클래스 +- station/StationScanView.java : 지하철 역 기능 입력에 대한 클래스 +- subway/SubwayScanView.java : 지하철 기능 입력에 대한 클래스 + +##### output +- line/LineExceptionView.java : 지하철 노선 예외 처리 문구 출력에 대한 클래스 +- line/LineInformationView.java : 지하철 노선 실행 결과 문구 출력에 대한 클래스 +- line/LineTextView.java : 지하철 노선 화면 출력 문구 출력에 대한 클래스 +- section/SectionExceptionView.java : 지하철 구간 예외 처리 문구 출력에 대한 클래스 +- section/SectionInformationView.java : 지하철 구간 실행 결과 문구 출력에 대한 클래스 +- section/SectionTextView.java : 지하철 구간 화면 출력 문구 출력에 대한 클래스 +- station/StationExceptionView.java : 지하철 역 예외 처리 문구 출력에 대한 클래스 +- station/StationInformationView.java : 지하철 역 실행 결과 문구 출력에 대한 클래스 +- station/StationTextView.java : 지하철 역 화면 출력 문구 출력에 대한 클래스 +- util/FeatureChoiceExceptionView.java : 화면 기능 선택 예외 처리 문구 출력에 대한 클래스 +- util/ScreenView.java : 화면 출력에 대한 클래스 + +
+ +## 📝 License + +This project is [MIT](https://github.com/woowacourse/java-subway-map-precourse/blob/master/LICENSE.md) licensed. diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java index 0bcf786cc..f7c314346 100644 --- a/src/main/java/subway/Application.java +++ b/src/main/java/subway/Application.java @@ -1,10 +1,20 @@ package subway; +import subway.controller.SubwayController; + import java.util.Scanner; +/** + * Application.java : 메인 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ public class Application { public static void main(String[] args) { final Scanner scanner = new Scanner(System.in); // TODO: 프로그램 구현 + SubwayController subwayController = new SubwayController(); + subwayController.runSubway(scanner); } } diff --git a/src/main/java/subway/controller/LineController.java b/src/main/java/subway/controller/LineController.java new file mode 100644 index 000000000..0bd7e492a --- /dev/null +++ b/src/main/java/subway/controller/LineController.java @@ -0,0 +1,18 @@ +package subway.controller; + +import subway.service.line.LineService; + +import java.util.Scanner; + +/** + * LineController.java : 지하철 노선에 대한 컨트롤러 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ +public class LineController { + public static void startLine(Scanner scanner) { + LineService lineService = new LineService(); + lineService.manage(scanner); + } +} diff --git a/src/main/java/subway/controller/SectionController.java b/src/main/java/subway/controller/SectionController.java new file mode 100644 index 000000000..69d95e236 --- /dev/null +++ b/src/main/java/subway/controller/SectionController.java @@ -0,0 +1,18 @@ +package subway.controller; + +import subway.service.section.SectionService; + +import java.util.Scanner; + +/** + * SectionController.java : 지하철 구간에 대한 컨트롤러 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ +public class SectionController { + public static void startSection(Scanner scanner) { + SectionService sectionService = new SectionService(); + sectionService.manage(scanner); + } +} diff --git a/src/main/java/subway/controller/StationController.java b/src/main/java/subway/controller/StationController.java new file mode 100644 index 000000000..ad53272eb --- /dev/null +++ b/src/main/java/subway/controller/StationController.java @@ -0,0 +1,18 @@ +package subway.controller; + +import subway.service.station.StationService; + +import java.util.Scanner; + +/** + * StationController.java : 지하철 역에 대한 컨트롤러 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ +public class StationController { + public static void startStation(Scanner scanner) { + StationService stationService = new StationService(); + stationService.manage(scanner); + } +} diff --git a/src/main/java/subway/controller/SubwayController.java b/src/main/java/subway/controller/SubwayController.java new file mode 100644 index 000000000..30a3815d2 --- /dev/null +++ b/src/main/java/subway/controller/SubwayController.java @@ -0,0 +1,32 @@ +package subway.controller; + +import subway.service.subway.SubwayService; +import subway.service.initialization.LineInitialization; +import subway.service.initialization.StationInitialization; +import subway.service.initialization.TransitMapInitialization; + +import java.util.Scanner; + +/** + * SubwayController.java : 지하철에 대한 컨트롤러 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ +public class SubwayController { + public void runSubway(Scanner scanner) { + initializeSubway(); + startSubway(scanner); + } + + public static void initializeSubway() { + StationInitialization.initializeStations(); + LineInitialization.initializeLines(); + TransitMapInitialization.initializeTransitMaps(); + } + + public static void startSubway(Scanner scanner) { + SubwayService subwayService = new SubwayService(); + subwayService.manage(scanner); + } +} diff --git a/src/main/java/subway/controller/TransitMapController.java b/src/main/java/subway/controller/TransitMapController.java new file mode 100644 index 000000000..fb6097bf6 --- /dev/null +++ b/src/main/java/subway/controller/TransitMapController.java @@ -0,0 +1,15 @@ +package subway.controller; + +import subway.service.transitmap.TransitMapService; + +/** + * TransitMapController.java : 지하철 노선도에 대한 컨트롤러 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ +public class TransitMapController { + public static void startTransitMap() { + TransitMapService.showTransitMap(); + } +} diff --git a/src/main/java/subway/domain/Line.java b/src/main/java/subway/domain/Line.java index f4d738d5a..fc35f0d9d 100644 --- a/src/main/java/subway/domain/Line.java +++ b/src/main/java/subway/domain/Line.java @@ -1,5 +1,11 @@ package subway.domain; +/** + * Line.java : 지하철 노선에 대한 도메인 모델 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ public class Line { private String name; diff --git a/src/main/java/subway/domain/Section.java b/src/main/java/subway/domain/Section.java new file mode 100644 index 000000000..6de80bc01 --- /dev/null +++ b/src/main/java/subway/domain/Section.java @@ -0,0 +1,31 @@ +package subway.domain; + +/** + * Section.java : 지하철 구간에 대한 도메인 모델 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ +public class Section { + private final String lineName; + private final String stationName; + private final String order; + + public Section(String lineName, String stationName, String order) { + this.lineName = lineName; + this.stationName = stationName; + this.order = order; + } + + public String getLineName() { + return lineName; + } + + public String getStationName() { + return stationName; + } + + public String getOrder() { + return order; + } +} diff --git a/src/main/java/subway/domain/Station.java b/src/main/java/subway/domain/Station.java index bdb142590..6ff94caf8 100644 --- a/src/main/java/subway/domain/Station.java +++ b/src/main/java/subway/domain/Station.java @@ -1,5 +1,11 @@ package subway.domain; +/** + * Station.java : 지하철 역에 대한 도메인 모델 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ public class Station { private String name; diff --git a/src/main/java/subway/domain/Stations.java b/src/main/java/subway/domain/Stations.java new file mode 100644 index 000000000..dc60bc64e --- /dev/null +++ b/src/main/java/subway/domain/Stations.java @@ -0,0 +1,25 @@ +package subway.domain; + +/** + * Stations.java : 지하철 상행 종점역, 하행 종점역에 대한 도메인 모델 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ +public class Stations { + private final String upStationName; + private final String downStationName; + + public Stations(String upStationName, String downStationName) { + this.upStationName = upStationName; + this.downStationName = downStationName; + } + + public String getUpStationName() { + return upStationName; + } + + public String getDownStationName() { + return downStationName; + } +} diff --git a/src/main/java/subway/domain/TransitMap.java b/src/main/java/subway/domain/TransitMap.java new file mode 100644 index 000000000..72d9dec3d --- /dev/null +++ b/src/main/java/subway/domain/TransitMap.java @@ -0,0 +1,27 @@ +package subway.domain; + +import java.util.LinkedList; + +/** + * TransitMap.java : 지하철 노선도에 대한 도메인 모델 클래스 + * + * @author Daeun lee + * @version 1.0 + */ +public class TransitMap { + private Line transitMapLine; + private LinkedList transitMapStations; + + public TransitMap(Line transitMapLine, LinkedList transitMapStations) { + this.transitMapLine = transitMapLine; + this.transitMapStations = transitMapStations; + } + + public Line getTransitMapLine() { + return transitMapLine; + } + + public LinkedList getTransitMapStations() { + return transitMapStations; + } +} diff --git a/src/main/java/subway/domain/LineRepository.java b/src/main/java/subway/repository/LineRepository.java similarity index 59% rename from src/main/java/subway/domain/LineRepository.java rename to src/main/java/subway/repository/LineRepository.java index 49132ddb6..89d703b28 100644 --- a/src/main/java/subway/domain/LineRepository.java +++ b/src/main/java/subway/repository/LineRepository.java @@ -1,10 +1,15 @@ -package subway.domain; +package subway.repository; + +import subway.domain.Line; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Objects; +/** + * LineRepository.java : 지하철 노선에 대한 저장소 클래스 + */ public class LineRepository { private static final List lines = new ArrayList<>(); @@ -19,4 +24,13 @@ public static void addLine(Line line) { public static boolean deleteLineByName(String name) { return lines.removeIf(line -> Objects.equals(line.getName(), name)); } + + public static List lineNames() { + List lineNames = new ArrayList<>(); + + for (Line line : lines) { + lineNames.add(line.getName()); + } + return lineNames; + } } diff --git a/src/main/java/subway/domain/StationRepository.java b/src/main/java/subway/repository/StationRepository.java similarity index 57% rename from src/main/java/subway/domain/StationRepository.java rename to src/main/java/subway/repository/StationRepository.java index b7245c0f3..71088adc1 100644 --- a/src/main/java/subway/domain/StationRepository.java +++ b/src/main/java/subway/repository/StationRepository.java @@ -1,10 +1,18 @@ -package subway.domain; +package subway.repository; + +import subway.domain.Station; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Objects; +/** + * StationRepository.java : 지하철 역에 대한 저장소 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ public class StationRepository { private static final List stations = new ArrayList<>(); @@ -19,4 +27,13 @@ public static void addStation(Station station) { public static boolean deleteStation(String name) { return stations.removeIf(station -> Objects.equals(station.getName(), name)); } + + public static List stationNames() { + List stationNames = new ArrayList<>(); + + for (Station station : stations) { + stationNames.add(station.getName()); + } + return stationNames; + } } diff --git a/src/main/java/subway/repository/TransitMapRepository.java b/src/main/java/subway/repository/TransitMapRepository.java new file mode 100644 index 000000000..7ceb07069 --- /dev/null +++ b/src/main/java/subway/repository/TransitMapRepository.java @@ -0,0 +1,78 @@ +package subway.repository; + +import subway.domain.Line; +import subway.domain.Station; +import subway.domain.TransitMap; + +import java.util.*; + +/** + * TransitMapRepository.java : 지하철 노선도에 대한 저장소 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ +public class TransitMapRepository { + private static final Map> transitMaps = new LinkedHashMap<>(); + + public static Map> transitMaps() { + return Collections.unmodifiableMap(transitMaps); + } + + public static void addTransitMap(TransitMap transitMap) { + transitMaps.put(transitMap.getTransitMapLine(), transitMap.getTransitMapStations()); + } + + public static void deleteTransitMap(Line line) { + transitMaps.remove(line); + } + + public static List transitMapsLineNames() { + List transitMapsLineNames = new ArrayList<>(); + + for (Map.Entry> entry : transitMaps.entrySet()) { + Line key = entry.getKey(); + transitMapsLineNames.add(key.getName()); + } + return transitMapsLineNames; + } + + public static List> transitMapsStationNames() { + List> transitMapsStationNames = new ArrayList<>(); + + for (Map.Entry> entry : transitMaps.entrySet()) { + LinkedList transitMapStationNames = new LinkedList<>(); + LinkedList values = entry.getValue(); + + for (Station value : values) { + transitMapStationNames.add(value.getName()); + } + transitMapsStationNames.add(transitMapStationNames); + } + return transitMapsStationNames; + } + + public static List transitMapStations(String lineName) { + List transitMapStations = new ArrayList<>(); + + for (Map.Entry> entry : transitMaps.entrySet()) { + Line key = entry.getKey(); + String keyName = key.getName(); + LinkedList values = entry.getValue(); + + if (keyName.equals(lineName)) { + transitMapStations = getTransitMapStations(values); + } + } + return transitMapStations; + } + + public static List getTransitMapStations(LinkedList values) { + List transitMapStations = new ArrayList<>(); + + for (Station value : values) { + transitMapStations.add(value.getName()); + } + return transitMapStations; + } +} diff --git a/src/main/java/subway/service/initialization/LineInitialization.java b/src/main/java/subway/service/initialization/LineInitialization.java new file mode 100644 index 000000000..ff32e0f62 --- /dev/null +++ b/src/main/java/subway/service/initialization/LineInitialization.java @@ -0,0 +1,19 @@ +package subway.service.initialization; + +import subway.domain.Line; +import subway.repository.LineRepository; +import subway.type.LineType; + +/** + * LineInitialization.java : 지하철 노선 초기화에 대한 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ +public class LineInitialization { + public static void initializeLines() { + LineRepository.addLine(new Line(LineType.TWO.getLine())); + LineRepository.addLine(new Line(LineType.THREE.getLine())); + LineRepository.addLine(new Line(LineType.SHINBUNDANG.getLine())); + } +} diff --git a/src/main/java/subway/service/initialization/StationInitialization.java b/src/main/java/subway/service/initialization/StationInitialization.java new file mode 100644 index 000000000..14e5d05fe --- /dev/null +++ b/src/main/java/subway/service/initialization/StationInitialization.java @@ -0,0 +1,23 @@ +package subway.service.initialization; + +import subway.domain.Station; +import subway.repository.StationRepository; +import subway.type.StationType; + +/** + * StationInitialization.java : 지하철 역 초기화에 대한 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ +public class StationInitialization { + public static void initializeStations() { + StationRepository.addStation(new Station(StationType.EDUCATION_UNIVERSITY.getStation())); + StationRepository.addStation(new Station(StationType.GANGNAM.getStation())); + StationRepository.addStation(new Station(StationType.YEOKSAM.getStation())); + StationRepository.addStation(new Station(StationType.NAMBU_BUS_TERMINAL.getStation())); + StationRepository.addStation(new Station(StationType.YANGJAE.getStation())); + StationRepository.addStation(new Station(StationType.YANGJAE_CITIZENS_FOREST.getStation())); + StationRepository.addStation(new Station(StationType.MAEBONG.getStation())); + } +} diff --git a/src/main/java/subway/service/initialization/TransitMapInitialization.java b/src/main/java/subway/service/initialization/TransitMapInitialization.java new file mode 100644 index 000000000..19830e2a7 --- /dev/null +++ b/src/main/java/subway/service/initialization/TransitMapInitialization.java @@ -0,0 +1,97 @@ +package subway.service.initialization; + +import subway.domain.Line; +import subway.domain.Station; +import subway.domain.TransitMap; +import subway.repository.LineRepository; +import subway.repository.StationRepository; +import subway.repository.TransitMapRepository; +import subway.type.StationType; + +import java.util.*; + +/** + * TransitMapInitialization.java : 지하철 노선도 초기화에 대한 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ +public class TransitMapInitialization { + private static final List stations = StationRepository.stations(); + + public static void initializeTransitMaps() { + List lines = getInitializationLines(); + List> lineStations = getInitializationStations(); + + for (int i = 0; i < lines.size(); i++) { + TransitMapRepository.addTransitMap(new TransitMap(lines.get(i), lineStations.get(i))); + } + } + + public static List getInitializationLines() { + return LineRepository.lines(); + } + + public static List> getInitializationStations() { + List> lineStations = new ArrayList<>(); + LinkedList lineTwoStations = new LinkedList<>(); + LinkedList lineThreeStations = new LinkedList<>(); + LinkedList lineShinbundangStations = new LinkedList<>(); + + for (Station station : stations) { + getLineTwoStations(station, lineTwoStations); + getLineThreeStations(station, lineThreeStations); + getLineShinbundangStations(station, lineShinbundangStations); + } + + lineStations.add(lineTwoStations); + lineStations.add(lineThreeStations); + lineStations.add(lineShinbundangStations); + return lineStations; + } + + public static void getLineTwoStations(Station station, List lineTwoStations) { + String stationName = station.getName(); + + if (stationName.equals(StationType.EDUCATION_UNIVERSITY.getStation())) { + lineTwoStations.add(station); + } + if (stationName.equals(StationType.GANGNAM.getStation())) { + lineTwoStations.add(station); + } + if (stationName.equals(StationType.YEOKSAM.getStation())) { + lineTwoStations.add(station); + } + } + + public static void getLineThreeStations(Station station, List lineThreeStations) { + String stationName = station.getName(); + + if (stationName.equals(StationType.EDUCATION_UNIVERSITY.getStation())) { + lineThreeStations.add(station); + } + if (stationName.equals(StationType.NAMBU_BUS_TERMINAL.getStation())) { + lineThreeStations.add(station); + } + if (stationName.equals(StationType.YANGJAE.getStation())) { + lineThreeStations.add(station); + } + if (stationName.equals(StationType.MAEBONG.getStation())) { + lineThreeStations.add(station); + } + } + + public static void getLineShinbundangStations(Station station, List lineShinbundangStations) { + String stationName = station.getName(); + + if (stationName.equals(StationType.GANGNAM.getStation())) { + lineShinbundangStations.add(station); + } + if (stationName.equals(StationType.YANGJAE.getStation())) { + lineShinbundangStations.add(station); + } + if (stationName.equals(StationType.YANGJAE_CITIZENS_FOREST.getStation())) { + lineShinbundangStations.add(station); + } + } +} diff --git a/src/main/java/subway/service/line/LineService.java b/src/main/java/subway/service/line/LineService.java new file mode 100644 index 000000000..bf3d7e68c --- /dev/null +++ b/src/main/java/subway/service/line/LineService.java @@ -0,0 +1,105 @@ +package subway.service.line; + +import subway.domain.Line; +import subway.domain.Station; +import subway.domain.Stations; +import subway.repository.LineRepository; +import subway.service.subway.SubwayService; +import subway.service.util.FeatureInterface; +import subway.service.line.addition.LineAdditionService; +import subway.service.line.addition.LineAdditionValidation; +import subway.service.line.deletion.LineDeletionService; +import subway.service.line.deletion.LineDeletionValidation; +import subway.service.line.show.LineShowService; +import subway.type.InputType; +import subway.view.input.line.LineScanView; +import subway.view.output.util.FeatureChoiceExceptionView; +import subway.view.output.util.ScreenView; + +import java.util.LinkedList; +import java.util.List; +import java.util.Scanner; + +/** + * LineService.java : 지하철 노선 비즈니스 로직에 대한 서비스 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ +public class LineService extends SubwayService implements FeatureInterface { + @Override + public void manage(Scanner scanner){ + LineService lineService = new LineService(); + + System.out.println(); + while (true) { + String lineInput = LineScanView.scanLineInputForManagement(scanner); + + if (lineService.choose(lineInput, scanner)) { + break; + } + } + } + + @Override + public boolean choose(String input, Scanner scanner) { + if (input.equals(InputType.INPUT_ONE.getInput())) { + return add(scanner); + } + if (input.equals(InputType.INPUT_TWO.getInput())) { + return delete(scanner); + } + if (input.equals(InputType.INPUT_THREE.getInput())) { + return show(); + } + if (input.equals(InputType.INPUT_BACK.getInput())) { + return ScreenView.printNewLine(); + } + return FeatureChoiceExceptionView.printInvalidChoiceException(); + } + + @Override + public boolean add(Scanner scanner) { + LineAdditionValidation lineAdditionValidation = new LineAdditionValidation(); + + String lineName = LineScanView.scanLineNameForAddition(scanner); + String upStationName = LineScanView.scanUpStationNameForAddition(scanner); + String downStationName = LineScanView.scanDownStationNameForAddition(scanner); + + if (lineAdditionValidation.checkNameAdditionValidation( + lineName, new Stations(upStationName, downStationName))) { + LinkedList stationNames = + LineAdditionService.addStationNames(upStationName, downStationName); + LineAdditionService.addLineByStationNames(lineName, stationNames); + return true; + } + return false; + } + + @Override + public boolean delete(Scanner scanner) { + LineDeletionValidation lineNameDeletionValidation = new LineDeletionValidation(); + + String lineName = LineScanView.scanLineNameForDeletion(scanner); + + Line lineForDeletion = LineDeletionService.getLineForDeletion(lineName); + + if (lineNameDeletionValidation.checkNameDeletionValidation(lineName)) { + LineDeletionService.deleteLineInTransitMap(lineForDeletion); + return true; + } + return false; + } + + @Override + public boolean show() { + LineShowService lineShowService = new LineShowService(); + + StringBuilder stringBuilder = new StringBuilder(); + List lineNames = LineRepository.lineNames(); + + lineShowService.readNames(stringBuilder, lineNames); + System.out.println(stringBuilder); + return true; + } +} diff --git a/src/main/java/subway/service/line/addition/LineAdditionService.java b/src/main/java/subway/service/line/addition/LineAdditionService.java new file mode 100644 index 000000000..5d7ad0dc5 --- /dev/null +++ b/src/main/java/subway/service/line/addition/LineAdditionService.java @@ -0,0 +1,40 @@ +package subway.service.line.addition; + +import subway.domain.Line; +import subway.domain.Station; +import subway.domain.TransitMap; +import subway.repository.LineRepository; +import subway.repository.TransitMapRepository; +import subway.view.output.line.LineInformationView; + +import java.util.LinkedList; + +/** + * LineAdditionService.java : 지하철 노선 추가 로직에 대한 서비스 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ +public class LineAdditionService { + public static LinkedList addStationNames(String upStationName, String downStationName) { + LinkedList stationNames = new LinkedList<>(); + + stationNames.add(new Station(upStationName)); + stationNames.add(new Station(downStationName)); + return stationNames; + } + + public static void addLineByStationNames(String lineName, LinkedList stationNames) { + Line line = addLineByLineName(lineName); + TransitMapRepository.addTransitMap(new TransitMap(line, stationNames)); + LineInformationView.printLineAdditionInformation(); + System.out.println(); + } + + public static Line addLineByLineName(String lineName) { + Line line = new Line(lineName); + + LineRepository.addLine(line); + return line; + } +} diff --git a/src/main/java/subway/service/line/addition/LineAdditionValidation.java b/src/main/java/subway/service/line/addition/LineAdditionValidation.java new file mode 100644 index 000000000..37ef6c591 --- /dev/null +++ b/src/main/java/subway/service/line/addition/LineAdditionValidation.java @@ -0,0 +1,81 @@ +package subway.service.line.addition; + +import subway.domain.Stations; +import subway.repository.LineRepository; +import subway.repository.StationRepository; +import subway.service.station.addition.StationAdditionValidation; +import subway.type.BoundaryType; +import subway.type.CheckType; +import subway.view.output.line.LineExceptionView; + +import java.util.List; + +/** + * LineAdditionValidation.java : 지하철 노선 추가 로직 검증에 대한 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ +public class LineAdditionValidation extends StationAdditionValidation { + public boolean checkNameAdditionValidation(String lineName, Stations stations) { + if (!checkLineNameAdditionValidation(lineName)) { + return false; + } + return checkStationNamesAdditionValidation( + stations.getUpStationName(),stations.getDownStationName()); + } + + public boolean checkLineNameAdditionValidation(String lineName) { + if (checkNameDuplication(lineName)) { + LineExceptionView.printInvalidLineNameException(); + return false; + } + if (checkNameLength(lineName)) { + LineExceptionView.printInvalidLineNameLengthException(); + return false; + } + if (checkNameLastCharacter(lineName)) { + LineExceptionView.printInvalidLineNameLastCharacterException(); + return false; + } + return true; + } + + @Override + public boolean checkNameDuplication(String lineName) { + List lineNames = LineRepository.lineNames(); + return lineNames.contains(lineName); + } + + @Override + public boolean checkNameLength(String lineName) { + return lineName.length() < BoundaryType.NAME_LENGTH_BOUNDARY.getBoundary(); + } + + @Override + public boolean checkNameLastCharacter(String lineName) { + String lastCharacter = lineName.substring(lineName.length() - 1); + return !lastCharacter.equals(CheckType.LINE_CHECK.getCheck()); + } + + public boolean checkStationNamesAdditionValidation(String upStationName, String downStationName) { + if (checkStationNamesExistence(upStationName, downStationName)) { + LineExceptionView.printInvalidLineStationNamesExistenceException(); + return false; + } + if (checkSameStationNames(upStationName, downStationName)) { + LineExceptionView.printInvalidLineSameStationNamesException(); + return false; + } + return true; + } + + public static boolean checkStationNamesExistence(String upStationName, String downStationName) { + List stationNames = StationRepository.stationNames(); + return !((stationNames.contains(upStationName)) && (stationNames.contains(downStationName))); + } + + public static boolean checkSameStationNames(String upStationName, String downStationName) { + return upStationName.equals(downStationName); + } +} diff --git a/src/main/java/subway/service/line/deletion/LineDeletionService.java b/src/main/java/subway/service/line/deletion/LineDeletionService.java new file mode 100644 index 000000000..a0e183b69 --- /dev/null +++ b/src/main/java/subway/service/line/deletion/LineDeletionService.java @@ -0,0 +1,35 @@ +package subway.service.line.deletion; + +import subway.domain.Line; +import subway.repository.LineRepository; +import subway.repository.TransitMapRepository; +import subway.view.output.line.LineInformationView; + +import java.util.List; + +/** + * LineDeletionService.java : 지하철 노선 삭제 로직에 대한 서비스 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ +public class LineDeletionService { + public static Line getLineForDeletion(String lineName) { + Line lineForDeletion = new Line(lineName); + List lines = LineRepository.lines(); + + for (Line line : lines) { + if (line.getName().equals(lineName)) { + lineForDeletion = line; + break; + } + } + return lineForDeletion; + } + + public static void deleteLineInTransitMap(Line lineForDeletion) { + TransitMapRepository.deleteTransitMap(lineForDeletion); + LineInformationView.printLineDeletionInformation(); + System.out.println(); + } +} diff --git a/src/main/java/subway/service/line/deletion/LineDeletionValidation.java b/src/main/java/subway/service/line/deletion/LineDeletionValidation.java new file mode 100644 index 000000000..79e0ed5da --- /dev/null +++ b/src/main/java/subway/service/line/deletion/LineDeletionValidation.java @@ -0,0 +1,22 @@ +package subway.service.line.deletion; + +import subway.repository.LineRepository; +import subway.service.station.deletion.StationDeletionValidation; +import subway.view.output.line.LineExceptionView; + +/** + * LineDeletionValidation.java : 지하철 노선 삭제 로직 검증에 대한 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ +public class LineDeletionValidation extends StationDeletionValidation { + @Override + public boolean checkNameDeletionValidation(String lineName) { + if (!LineRepository.deleteLineByName(lineName)) { + LineExceptionView.printInvalidLineNameExistenceException(); + return false; + } + return true; + } +} diff --git a/src/main/java/subway/service/line/show/LineShowService.java b/src/main/java/subway/service/line/show/LineShowService.java new file mode 100644 index 000000000..2e800524f --- /dev/null +++ b/src/main/java/subway/service/line/show/LineShowService.java @@ -0,0 +1,37 @@ +package subway.service.line.show; + +import subway.service.station.show.StationShowService; +import subway.type.InformationType; +import subway.type.TextType; + +import java.util.List; + +/** + * LineShowService.java : 지하철 노선 조회 로직에 대한 서비스 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ +public class LineShowService extends StationShowService { + @Override + public void readNames(StringBuilder stringBuilder, List lineNames) { + appendListText(stringBuilder); + appendNames(stringBuilder, lineNames); + } + + @Override + public void appendListText(StringBuilder stringBuilder) { + stringBuilder.append(TextType.NEW_LINE.getText()) + .append(TextType.LINE_LIST_TEXT.getText()) + .append(TextType.NEW_LINE.getText()); + } + + @Override + public void appendNames(StringBuilder stringBuilder, List lineNames) { + for (String lineName : lineNames) { + stringBuilder.append(InformationType.INFORMATION.getInformation()) + .append(lineName) + .append(TextType.NEW_LINE.getText()); + } + } +} diff --git a/src/main/java/subway/service/section/SectionService.java b/src/main/java/subway/service/section/SectionService.java new file mode 100644 index 000000000..c8c3e73dd --- /dev/null +++ b/src/main/java/subway/service/section/SectionService.java @@ -0,0 +1,85 @@ +package subway.service.section; + +import subway.domain.Section; +import subway.service.section.addition.SectionAdditionService; +import subway.service.section.addition.SectionAdditionValidation; +import subway.service.section.deletion.SectionDeletionService; +import subway.service.section.deletion.SectionDeletionValidation; +import subway.service.station.StationService; +import subway.type.InputType; +import subway.view.input.section.SectionScanView; +import subway.view.output.util.FeatureChoiceExceptionView; +import subway.view.output.util.ScreenView; +import subway.view.output.section.SectionInformationView; + +import java.util.Scanner; + +/** + * SectionService.java : 지하철 구간 비즈니스 로직에 대한 서비스 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ +public class SectionService extends StationService { + @Override + public void manage(Scanner scanner) { + SectionService sectionService = new SectionService(); + + System.out.println(); + while (true) { + String sectionInput = SectionScanView.scanSectionInputForManagement(scanner); + + if (sectionService.choose(sectionInput, scanner)) { + break; + } + } + } + + @Override + public boolean choose(String input, Scanner scanner) { + if (input.equals(InputType.INPUT_ONE.getInput())) { + return add(scanner); + } + if (input.equals(InputType.INPUT_TWO.getInput())) { + return delete(scanner); + } + if (input.equals(InputType.INPUT_BACK.getInput())) { + return ScreenView.printNewLine(); + } + return FeatureChoiceExceptionView.printInvalidChoiceException(); + } + + @Override + public boolean add(Scanner scanner) { + SectionAdditionValidation sectionAdditionValidation = new SectionAdditionValidation(); + + String lineName = SectionScanView.scanLineNameForAddition(scanner); + String stationName = SectionScanView.scanStationNameForAddition(scanner); + String order = SectionScanView.scanOrderForAddition(scanner); + Section section = new Section(lineName, stationName, order); + + if (sectionAdditionValidation.checkSectionAdditionValidation(section)) { + SectionAdditionService.addSection(section); + SectionInformationView.printSectionAdditionInformation(); + System.out.println(); + return true; + } + return false; + } + + @Override + public boolean delete(Scanner scanner) { + SectionDeletionValidation sectionDeletionValidation = new SectionDeletionValidation(); + + String lineName = SectionScanView.scanLineNameForDeletion(scanner); + String stationName = SectionScanView.scanStationNameForDeletion(scanner); + + if (sectionDeletionValidation.checkSectionDeletionValidation(lineName, stationName)) { + SectionDeletionService.deleteSection(lineName, stationName); + SectionInformationView.printSectionDeletionInformation(); + System.out.println(); + return true; + } + return false; + } +} diff --git a/src/main/java/subway/service/section/addition/SectionAdditionService.java b/src/main/java/subway/service/section/addition/SectionAdditionService.java new file mode 100644 index 000000000..37bf7212f --- /dev/null +++ b/src/main/java/subway/service/section/addition/SectionAdditionService.java @@ -0,0 +1,47 @@ +package subway.service.section.addition; + +import subway.domain.Line; +import subway.domain.Section; +import subway.domain.Station; +import subway.repository.TransitMapRepository; + +import java.util.*; + +/** + * SectionAdditionService.java : 지하철 구간 추가 로직에 대한 서비스 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ +public class SectionAdditionService { + public static LinkedList getStationValuesInLine(String lineName) { + Map> transitMaps = TransitMapRepository.transitMaps(); + LinkedList stationValues = new LinkedList<>(); + + for (Map.Entry> entry : transitMaps.entrySet()) { + Line key = entry.getKey(); + String keyName = key.getName(); + LinkedList values = entry.getValue(); + + if (keyName.equals(lineName)) { + stationValues = values; + } + } + return stationValues; + } + + public static void addSection(Section section) { + Map> transitMaps = TransitMapRepository.transitMaps(); + int orderNumber = Integer.parseInt(section.getOrder()) - 1; + + for (Map.Entry> entry : transitMaps.entrySet()) { + Line key = entry.getKey(); + String keyName = key.getName(); + LinkedList values = entry.getValue(); + + if (keyName.equals(section.getLineName())) { + values.add(orderNumber, new Station(section.getStationName())); + } + } + } +} diff --git a/src/main/java/subway/service/section/addition/SectionAdditionValidation.java b/src/main/java/subway/service/section/addition/SectionAdditionValidation.java new file mode 100644 index 000000000..2ae821184 --- /dev/null +++ b/src/main/java/subway/service/section/addition/SectionAdditionValidation.java @@ -0,0 +1,92 @@ +package subway.service.section.addition; + +import subway.domain.Section; +import subway.domain.Station; +import subway.repository.LineRepository; +import subway.repository.StationRepository; +import subway.type.BoundaryType; +import subway.view.output.line.LineExceptionView; +import subway.view.output.section.SectionExceptionView; +import subway.view.output.station.StationExceptionView; + +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; + +/** + * SectionAdditionValidation.java : 지하철 구간 추가 로직 검증에 대한 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ +public class SectionAdditionValidation { + public boolean checkSectionAdditionValidation(Section section) { + if (!checkNamesValidation(section.getLineName(), section.getStationName())) { + return false; + } + return checkOrderValidation(section.getLineName(), section.getOrder()); + } + + public boolean checkNamesValidation(String lineName, String stationName) { + if (!checkLineNameExistence(lineName)) { + LineExceptionView.printInvalidLineNameExistenceException(); + return false; + } + if (!checkStationNameExistence(stationName)) { + StationExceptionView.printInvalidStationNameExistenceException(); + return false; + } + if (checkStationNameInLineExistence(lineName, stationName)) { + SectionExceptionView.printInvalidSectionStationNameInLineExistenceException(); + return false; + } + return true; + } + + public static boolean checkLineNameExistence(String lineName) { + List lineNames = LineRepository.lineNames(); + return lineNames.contains(lineName); + } + + public static boolean checkStationNameExistence(String stationName) { + List stationNames = StationRepository.stationNames(); + return stationNames.contains(stationName); + } + + public static boolean checkStationNameInLineExistence(String lineName, String stationName) { + List stationNameValues = new ArrayList<>(); + LinkedList stationValues + = SectionAdditionService.getStationValuesInLine(lineName); + + for (Station stationValue : stationValues) { + stationNameValues.add(stationValue.getName()); + } + return stationNameValues.contains(stationName); + } + + public boolean checkOrderValidation(String lineName, String order) { + if (checkOrderReplacementLength(order)) { + SectionExceptionView.printInvalidSectionOrderReplacementLengthException(); + return false; + } + if (Integer.parseInt(order) < BoundaryType.ORDER_NUMBER_BOUNDARY.getBoundary()) { + SectionExceptionView.printInvalidSectionOrderNumberException(); + return false; + } + if (checkOrderNumberByStations(lineName, Integer.parseInt(order))) { + SectionExceptionView.printInvalidSectionOrderNumberByStationsException(); + return false; + } + return true; + } + + public static boolean checkOrderReplacementLength(String order) { + return order.replaceAll("[^0-9]", "").length() + == BoundaryType.ORDER_REPLACEMENT_LENGTH_BOUNDARY.getBoundary(); + } + + public static boolean checkOrderNumberByStations(String lineName, int orderNumber) { + LinkedList stationValues = SectionAdditionService.getStationValuesInLine(lineName); + return stationValues.size() + 1 < orderNumber; + } +} diff --git a/src/main/java/subway/service/section/deletion/SectionDeletionService.java b/src/main/java/subway/service/section/deletion/SectionDeletionService.java new file mode 100644 index 000000000..f5630d549 --- /dev/null +++ b/src/main/java/subway/service/section/deletion/SectionDeletionService.java @@ -0,0 +1,44 @@ +package subway.service.section.deletion; + +import subway.domain.Line; +import subway.domain.Station; +import subway.repository.TransitMapRepository; + +import java.util.LinkedList; +import java.util.Map; + +/** + * SectionDeletionService.java : 지하철 구간 삭제 로직에 대한 서비스 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ +public class SectionDeletionService { + public static void deleteSection(String lineName, String stationName) { + Map> transitMaps = TransitMapRepository.transitMaps(); + + for (Map.Entry> entry : transitMaps.entrySet()) { + Line key = entry.getKey(); + String keyName = key.getName(); + LinkedList values = entry.getValue(); + + if (keyName.equals(lineName)) { + int order = findOrder(values, stationName); + values.remove(order); + } + } + } + + public static int findOrder(LinkedList values, String stationName) { + int order = 0; + + for (Station value : values) { + String valueName = value.getName(); + + if (valueName.equals(stationName)) { + order = values.indexOf(value); + } + } + return order; + } +} diff --git a/src/main/java/subway/service/section/deletion/SectionDeletionValidation.java b/src/main/java/subway/service/section/deletion/SectionDeletionValidation.java new file mode 100644 index 000000000..0cbc53948 --- /dev/null +++ b/src/main/java/subway/service/section/deletion/SectionDeletionValidation.java @@ -0,0 +1,66 @@ +package subway.service.section.deletion; + +import subway.repository.TransitMapRepository; +import subway.type.BoundaryType; +import subway.view.output.line.LineExceptionView; +import subway.view.output.section.SectionExceptionView; +import subway.view.output.station.StationExceptionView; + +import java.util.List; + +/** + * SectionDeletionValidation.java : 지하철 구간 삭제 로직 검증에 대한 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ +public class SectionDeletionValidation { + public boolean checkSectionDeletionValidation(String lineName, String stationName) { + if (!checkLineNameValidation(lineName)) { + return false; + } + if (!checkStationNameValidation(lineName, stationName)) { + return false; + } + return checkStationsInLineValidation(lineName); + } + + public boolean checkLineNameValidation(String lineName) { + if (!checkLineNameInTransitMapExistence(lineName)) { + LineExceptionView.printInvalidLineNameExistenceException(); + return false; + } + return true; + } + + public static boolean checkLineNameInTransitMapExistence(String lineName) { + List transitMapsLineNames = TransitMapRepository.transitMapsLineNames(); + return transitMapsLineNames.contains(lineName); + } + + public boolean checkStationNameValidation(String lineName, String stationName) { + if (!checkStationNameInTransitMapExistence(lineName, stationName)) { + StationExceptionView.printInvalidStationNameExistenceException(); + return false; + } + return true; + } + + public static boolean checkStationNameInTransitMapExistence(String lienName, String stationName) { + List transitMapStations = TransitMapRepository.transitMapStations(lienName); + return transitMapStations.contains(stationName); + } + + private boolean checkStationsInLineValidation(String lineName) { + if (checkStationsInLineExistence(lineName)) { + SectionExceptionView.printInvalidNumberOfSectionStationsInLineException(); + return false; + } + return true; + } + + public static boolean checkStationsInLineExistence(String lineName) { + List transitMapStations = TransitMapRepository.transitMapStations(lineName); + return transitMapStations.size() <= BoundaryType.STATIONS_IN_LINE_BOUNDARY.getBoundary(); + } +} diff --git a/src/main/java/subway/service/station/StationService.java b/src/main/java/subway/service/station/StationService.java new file mode 100644 index 000000000..187e4b433 --- /dev/null +++ b/src/main/java/subway/service/station/StationService.java @@ -0,0 +1,78 @@ +package subway.service.station; + +import subway.domain.Station; +import subway.repository.StationRepository; +import subway.service.util.ChoiceService; +import subway.service.subway.SubwayService; +import subway.service.util.FeatureInterface; +import subway.service.station.addition.StationAdditionValidation; +import subway.service.station.deletion.StationDeletionValidation; +import subway.service.station.show.StationShowService; +import subway.view.input.station.StationScanView; +import subway.view.output.station.StationInformationView; + +import java.util.List; +import java.util.Scanner; + +/** + * StationService.java : 지하철 역 비즈니스 로직에 대한 서비스 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ +public class StationService extends SubwayService implements FeatureInterface { + @Override + public void manage(Scanner scanner) { + ChoiceService stateService = new ChoiceService(); + + System.out.println(); + while (true) { + String stationInput = StationScanView.scanStationInputForManagement(scanner); + + if (stateService.choose(stationInput, scanner)) { + break; + } + } + } + + @Override + public boolean add(Scanner scanner) { + StationAdditionValidation stationAdditionValidation = new StationAdditionValidation(); + + String stationName = StationScanView.scanStationNameForAddition(scanner); + + if (stationAdditionValidation.checkNameAdditionValidation(stationName)) { + StationRepository.addStation(new Station(stationName)); + StationInformationView.printStationAdditionInformation(); + System.out.println(); + return true; + } + return false; + } + + @Override + public boolean delete(Scanner scanner) { + StationDeletionValidation stationNameDeletionValidation = new StationDeletionValidation(); + + String stationName = StationScanView.scanStationNameForDeletion(scanner); + + if (stationNameDeletionValidation.checkNameDeletionValidation(stationName)) { + StationInformationView.printStationDeletionInformation(); + System.out.println(); + return true; + } + return false; + } + + @Override + public boolean show() { + StationShowService stationShowService = new StationShowService(); + + StringBuilder stringBuilder = new StringBuilder(); + List stationNames = StationRepository.stationNames(); + + stationShowService.readNames(stringBuilder, stationNames); + System.out.println(stringBuilder); + return true; + } +} diff --git a/src/main/java/subway/service/station/addition/StationAdditionValidation.java b/src/main/java/subway/service/station/addition/StationAdditionValidation.java new file mode 100644 index 000000000..73eaf68f0 --- /dev/null +++ b/src/main/java/subway/service/station/addition/StationAdditionValidation.java @@ -0,0 +1,50 @@ +package subway.service.station.addition; + +import subway.repository.StationRepository; +import subway.type.BoundaryType; +import subway.type.CheckType; +import subway.view.output.station.StationExceptionView; + +import java.util.List; + +/** + * StationAdditionValidation.java : 지하철 역 추가 로직 검증에 대한 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ +public class StationAdditionValidation implements StationAdditionValidationInterface { + @Override + public boolean checkNameAdditionValidation(String stationName) { + if (checkNameDuplication(stationName)) { + StationExceptionView.printInvalidStationNameException(); + return false; + } + if (checkNameLength(stationName)) { + StationExceptionView.printInvalidStationNameLengthException(); + return false; + } + if (checkNameLastCharacter(stationName)) { + StationExceptionView.printInvalidStationNameLastCharacterException(); + return false; + } + return true; + } + + @Override + public boolean checkNameDuplication(String stationName) { + List stationNames = StationRepository.stationNames(); + return stationNames.contains(stationName); + } + + @Override + public boolean checkNameLength(String stationName) { + return stationName.length() < BoundaryType.NAME_LENGTH_BOUNDARY.getBoundary(); + } + + @Override + public boolean checkNameLastCharacter(String stationName) { + String lastCharacter = stationName.substring(stationName.length() - 1); + return !lastCharacter.equals(CheckType.STATION_CHECK.getCheck()); + } +} diff --git a/src/main/java/subway/service/station/addition/StationAdditionValidationInterface.java b/src/main/java/subway/service/station/addition/StationAdditionValidationInterface.java new file mode 100644 index 000000000..d451dd1b0 --- /dev/null +++ b/src/main/java/subway/service/station/addition/StationAdditionValidationInterface.java @@ -0,0 +1,14 @@ +package subway.service.station.addition; + +/** + * StationAdditionValidationInterface.java : 지하철 역 추가 로직 검증에 대한 인터페이스 + * + * @author Daeun Lee + * @version 1.0 + */ +public interface StationAdditionValidationInterface { + boolean checkNameAdditionValidation(String name); + boolean checkNameDuplication(String name); + boolean checkNameLength(String name); + boolean checkNameLastCharacter(String name); +} diff --git a/src/main/java/subway/service/station/deletion/StationDeletionValidation.java b/src/main/java/subway/service/station/deletion/StationDeletionValidation.java new file mode 100644 index 000000000..7055401d3 --- /dev/null +++ b/src/main/java/subway/service/station/deletion/StationDeletionValidation.java @@ -0,0 +1,42 @@ +package subway.service.station.deletion; + +import subway.repository.StationRepository; +import subway.repository.TransitMapRepository; +import subway.view.output.station.StationExceptionView; + +import java.util.LinkedList; +import java.util.List; + +/** + * StationDeletionValidation.java : 지하철 역 삭제 로직 검증에 대한 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ +public class StationDeletionValidation implements StationDeletionValidationInterface { + @Override + public boolean checkNameDeletionValidation(String stationName) { + if (checkNameInTransitMap(stationName)) { + StationExceptionView.printInvalidStationNameInTransitMapException(); + return false; + } + if (!StationRepository.deleteStation(stationName)) { + StationExceptionView.printInvalidStationNameExistenceException(); + return false; + } + return true; + } + + @Override + public boolean checkNameInTransitMap(String stationName) { + List> transitMapsStationsNames + = TransitMapRepository.transitMapsStationNames(); + + for (LinkedList transitMapStationNames : transitMapsStationsNames) { + if (transitMapStationNames.contains(stationName)) { + return true; + } + } + return false; + } +} diff --git a/src/main/java/subway/service/station/deletion/StationDeletionValidationInterface.java b/src/main/java/subway/service/station/deletion/StationDeletionValidationInterface.java new file mode 100644 index 000000000..e2a0fd80c --- /dev/null +++ b/src/main/java/subway/service/station/deletion/StationDeletionValidationInterface.java @@ -0,0 +1,12 @@ +package subway.service.station.deletion; + +/** + * StationDeletionValidationInterface.java : 지하철 역 삭제 로직 검증에 대한 인터페이스 + * + * @author Daeun Lee + * @version 1.0 + */ +public interface StationDeletionValidationInterface { + boolean checkNameDeletionValidation(String name); + boolean checkNameInTransitMap(String name); +} diff --git a/src/main/java/subway/service/station/show/StationShowInterface.java b/src/main/java/subway/service/station/show/StationShowInterface.java new file mode 100644 index 000000000..26db013f7 --- /dev/null +++ b/src/main/java/subway/service/station/show/StationShowInterface.java @@ -0,0 +1,15 @@ +package subway.service.station.show; + +import java.util.List; + +/** + * StationShowInterface.java : 지하철 역 조회 로직에 대한 인터페이스 + * + * @author Daeun Lee + * @version 1.0 + */ +public interface StationShowInterface { + void readNames(StringBuilder stringBuilder, List stationNames); + void appendListText(StringBuilder stringBuilder); + void appendNames(StringBuilder stringBuilder, List stationNames); +} diff --git a/src/main/java/subway/service/station/show/StationShowService.java b/src/main/java/subway/service/station/show/StationShowService.java new file mode 100644 index 000000000..a73eef1b9 --- /dev/null +++ b/src/main/java/subway/service/station/show/StationShowService.java @@ -0,0 +1,36 @@ +package subway.service.station.show; + +import subway.type.InformationType; +import subway.type.TextType; + +import java.util.List; + +/** + * StationShowService.java : 지하철 역 조회 로직에 대한 서비스 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ +public class StationShowService implements StationShowInterface { + @Override + public void readNames(StringBuilder stringBuilder, List stationNames) { + appendListText(stringBuilder); + appendNames(stringBuilder, stationNames); + } + + @Override + public void appendListText(StringBuilder stringBuilder) { + stringBuilder.append(TextType.NEW_LINE.getText()) + .append(TextType.STATION_LIST_TEXT.getText()) + .append(TextType.NEW_LINE.getText()); + } + + @Override + public void appendNames(StringBuilder stringBuilder, List stationNames) { + for (String stationName : stationNames) { + stringBuilder.append(InformationType.INFORMATION.getInformation()) + .append(stationName) + .append(TextType.NEW_LINE.getText()); + } + } +} diff --git a/src/main/java/subway/service/subway/SubwayInterface.java b/src/main/java/subway/service/subway/SubwayInterface.java new file mode 100644 index 000000000..a51aa017c --- /dev/null +++ b/src/main/java/subway/service/subway/SubwayInterface.java @@ -0,0 +1,13 @@ +package subway.service.subway; + +import java.util.Scanner; + +/** + * SubwayInterface.java : 지하철 비즈니스 로직에 대한 인터페이스 + * + * @author Daeun Lee + * @version 1.0 + */ +public interface SubwayInterface { + void manage(Scanner scanner); +} diff --git a/src/main/java/subway/service/subway/SubwayService.java b/src/main/java/subway/service/subway/SubwayService.java new file mode 100644 index 000000000..b5c77f336 --- /dev/null +++ b/src/main/java/subway/service/subway/SubwayService.java @@ -0,0 +1,72 @@ +package subway.service.subway; + +import subway.controller.LineController; +import subway.controller.SectionController; +import subway.controller.StationController; +import subway.controller.TransitMapController; +import subway.service.util.ChoiceService; +import subway.type.InputType; +import subway.view.input.subway.SubwayScanView; +import subway.view.output.util.FeatureChoiceExceptionView; + +import java.util.Scanner; + +/** + * SubwayService.java : 지하철 비즈니스 로직에 대한 서비스 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ +public class SubwayService extends ChoiceService implements SubwayInterface { + @Override + public void manage(Scanner scanner) { + SubwayService subwayService = new SubwayService(); + + while (true) { + String mainInput = SubwayScanView.scanMainInputForManagement(scanner); + + if (check(mainInput)) { + subwayService.choose(mainInput, scanner); + continue; + } + if (quit(mainInput)) { + break; + } + FeatureChoiceExceptionView.printInvalidFeatureChoiceException(); + } + } + + public static boolean check(String input) { + if (input.equals(InputType.INPUT_ONE.getInput())) { + return true; + } + if (input.equals(InputType.INPUT_TWO.getInput())) { + return true; + } + if (input.equals(InputType.INPUT_THREE.getInput())) { + return true; + } + return input.equals(InputType.INPUT_FOUR.getInput()); + } + + @Override + public boolean choose(String input, Scanner scanner) { + if (input.equals(InputType.INPUT_ONE.getInput())) { + StationController.startStation(scanner); + } + if (input.equals(InputType.INPUT_TWO.getInput())) { + LineController.startLine(scanner); + } + if (input.equals(InputType.INPUT_THREE.getInput())) { + SectionController.startSection(scanner); + } + if (input.equals(InputType.INPUT_FOUR.getInput())) { + TransitMapController.startTransitMap(); + } + return true; + } + + public static boolean quit(String mainInput) { + return mainInput.equals(InputType.INPUT_QUITTING.getInput()); + } +} diff --git a/src/main/java/subway/service/transitmap/TransitMapService.java b/src/main/java/subway/service/transitmap/TransitMapService.java new file mode 100644 index 000000000..d53a51d86 --- /dev/null +++ b/src/main/java/subway/service/transitmap/TransitMapService.java @@ -0,0 +1,25 @@ +package subway.service.transitmap; + +import subway.domain.Line; +import subway.domain.Station; +import subway.repository.TransitMapRepository; +import subway.service.transitmap.show.TransitMapShowService; + +import java.util.LinkedList; +import java.util.Map; + +/** + * TransitMapService.java : 지하철 노선도 비즈니스 로직에 대한 서비스 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ +public class TransitMapService { + public static void showTransitMap() { + StringBuilder stringBuilder = new StringBuilder(); + Map> transitMaps = TransitMapRepository.transitMaps(); + + TransitMapShowService.readTransitMap(stringBuilder, transitMaps); + System.out.println(stringBuilder); + } +} diff --git a/src/main/java/subway/service/transitmap/show/TransitMapShowService.java b/src/main/java/subway/service/transitmap/show/TransitMapShowService.java new file mode 100644 index 000000000..d20be5532 --- /dev/null +++ b/src/main/java/subway/service/transitmap/show/TransitMapShowService.java @@ -0,0 +1,74 @@ +package subway.service.transitmap.show; + +import subway.domain.Line; +import subway.domain.Station; +import subway.repository.TransitMapRepository; +import subway.type.InformationType; +import subway.type.TextType; + +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; + +/** + * TransitMapShowService.java : 지하철 노선도 출력 로직에 대한 서비스 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ +public class TransitMapShowService { + public static void readTransitMap(StringBuilder stringBuilder, Map> transitMaps) { + appendTransitMapText(stringBuilder); + + for (Map.Entry> entry : transitMaps.entrySet()) { + Line key = entry.getKey(); + LinkedList values = entry.getValue(); + + appendKey(stringBuilder, key); + appendHorizontalLines(stringBuilder); + appendValues(stringBuilder, values); + + if (!checkLastKey(key)) { + stringBuilder.append(TextType.NEW_LINE.getText()); + } + } + } + + public static void appendTransitMapText(StringBuilder stringBuilder) { + stringBuilder.append(TextType.NEW_LINE.getText()) + .append(TextType.TRANSIT_MAP_TEXT.getText()) + .append(TextType.NEW_LINE.getText()); + } + + public static void appendKey(StringBuilder stringBuilder, Line key) { + stringBuilder.append(InformationType.INFORMATION.getInformation()) + .append(key.getName()) + .append(TextType.NEW_LINE.getText()); + } + + public static void appendHorizontalLines(StringBuilder stringBuilder) { + stringBuilder.append(InformationType.INFORMATION.getInformation()) + .append(TextType.HORIZONTAL_LINES.getText()) + .append(TextType.NEW_LINE.getText()); + } + + public static void appendValues(StringBuilder stringBuilder, LinkedList values) { + for (Station value : values) { + stringBuilder.append(InformationType.INFORMATION.getInformation()) + .append(value.getName()) + .append(TextType.NEW_LINE.getText()); + } + } + + public static boolean checkLastKey(Line key) { + Map> transitMaps = TransitMapRepository.transitMaps(); + Line lastKey = getLastKey(transitMaps); + return lastKey.equals(key); + } + + public static Line getLastKey(Map> transitMaps) { + List lineKeySet = new ArrayList<>(transitMaps.keySet()); + return lineKeySet.get(lineKeySet.size() - 1); + } +} diff --git a/src/main/java/subway/service/util/ChoiceInterface.java b/src/main/java/subway/service/util/ChoiceInterface.java new file mode 100644 index 000000000..aa07e8245 --- /dev/null +++ b/src/main/java/subway/service/util/ChoiceInterface.java @@ -0,0 +1,13 @@ +package subway.service.util; + +import java.util.Scanner; + +/** + * ChoiceInterface.java : 지하철 역, 지하철 노선 기능 선택에 대한 인터페이스 + * + * @author Daeun Lee + * @version 1.0 + */ +public interface ChoiceInterface { + boolean choose(String input, Scanner scanner); +} diff --git a/src/main/java/subway/service/util/ChoiceService.java b/src/main/java/subway/service/util/ChoiceService.java new file mode 100644 index 000000000..325001e6c --- /dev/null +++ b/src/main/java/subway/service/util/ChoiceService.java @@ -0,0 +1,35 @@ +package subway.service.util; + +import subway.service.station.StationService; +import subway.type.InputType; +import subway.view.output.util.FeatureChoiceExceptionView; +import subway.view.output.util.ScreenView; + +import java.util.Scanner; + +/** + * ChoiceService.java : 지하철 역, 지하철 노선 기능 선택에 대한 서비스 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ +public class ChoiceService implements ChoiceInterface { + @Override + public boolean choose(String input, Scanner scanner) { + StationService stationService = new StationService(); + + if (input.equals(InputType.INPUT_ONE.getInput())) { + return stationService.add(scanner); + } + if (input.equals(InputType.INPUT_TWO.getInput())) { + return stationService.delete(scanner); + } + if (input.equals(InputType.INPUT_THREE.getInput())) { + return stationService.show(); + } + if (input.equals(InputType.INPUT_BACK.getInput())) { + return ScreenView.printNewLine(); + } + return FeatureChoiceExceptionView.printInvalidChoiceException(); + } +} diff --git a/src/main/java/subway/service/util/FeatureInterface.java b/src/main/java/subway/service/util/FeatureInterface.java new file mode 100644 index 000000000..847f08667 --- /dev/null +++ b/src/main/java/subway/service/util/FeatureInterface.java @@ -0,0 +1,15 @@ +package subway.service.util; + +import java.util.Scanner; + +/** + * FeatureInterface.java : 지하철 역, 지하철 노선 기능에 대한 인터페이스 + * + * @author Daeun Lee + * @version 1.0 + */ +public interface FeatureInterface { + boolean add(Scanner scanner); + boolean delete(Scanner scanner); + boolean show(); +} diff --git a/src/main/java/subway/type/BoundaryType.java b/src/main/java/subway/type/BoundaryType.java new file mode 100644 index 000000000..d8fda20af --- /dev/null +++ b/src/main/java/subway/type/BoundaryType.java @@ -0,0 +1,26 @@ +package subway.type; + +/** + * BoundaryType.java : 경계 값 상수를 모아둔 Enum 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ +public enum BoundaryType { + NAME_LENGTH_BOUNDARY(2), + + ORDER_NUMBER_BOUNDARY(1), + ORDER_REPLACEMENT_LENGTH_BOUNDARY(0), + + STATIONS_IN_LINE_BOUNDARY(2); + + private final int boundary; + + BoundaryType(int boundary) { + this.boundary = boundary; + } + + public int getBoundary() { + return boundary; + } +} diff --git a/src/main/java/subway/type/CheckType.java b/src/main/java/subway/type/CheckType.java new file mode 100644 index 000000000..9726f1520 --- /dev/null +++ b/src/main/java/subway/type/CheckType.java @@ -0,0 +1,22 @@ +package subway.type; + +/** + * CheckType.java : 입력 값 마지막 문자 확인용 상수를 모아둔 Enum 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ +public enum CheckType { + STATION_CHECK("역"), + LINE_CHECK("선"); + + private final String check; + + CheckType(String check) { + this.check = check; + } + + public String getCheck() { + return check; + } +} diff --git a/src/main/java/subway/type/ExceptionType.java b/src/main/java/subway/type/ExceptionType.java new file mode 100644 index 000000000..b6e4e65b2 --- /dev/null +++ b/src/main/java/subway/type/ExceptionType.java @@ -0,0 +1,47 @@ +package subway.type; + +/** + * ExceptionType.java : 예외 처리 문구 상수를 모아둔 Enum 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ +public enum ExceptionType { + ERROR("[ERROR] "), + + INVALID_FEATURE_CHOICE(ERROR.getException() + "선택할 수 없는 기능입니다.\n"), + + INVALID_STATION_NAME(ERROR.getException() + "이미 등록된 역 이름입니다.\n"), + INVALID_STATION_NAME_LENGTH(ERROR.getException() + "2글자 이상의 역 이름을 입력해주세요.\n"), + INVALID_STATION_NAME_LAST_CHARACTER(ERROR.getException() + "'역'으로 끝나는 역 이름을 입력해주세요.\n"), + INVALID_STATION_NAME_IN_TRANSIT_MAP(ERROR.getException() + + "해당 역은 지하철 노선에 등록되어 있어 삭제할 수 없습니다.\n"), + INVALID_STATION_NAME_EXISTENCE(ERROR.getException() + "해당 역이 존재하지 않습니다.\n"), + + INVALID_LINE_NAME(ERROR.getException() + "이미 등록된 노선 이름입니다.\n"), + INVALID_LINE_NAME_LENGTH(ERROR.getException() + "2글자 이상의 노선 이름을 입력해주세요.\n"), + INVALID_LINE_NAME_LAST_CHARACTER(ERROR.getException() + "'선'으로 끝나는 노선 이름을 입력해주세요.\n"), + INVALID_LINE_STATION_NAMES_EXISTENCE(ERROR.getException() + + "상행 종점역과 하행 종점역은 지하철 역 목록에 존재해야 합니다.\n"), + INVALID_LINE_SAME_STATION_NAMES(ERROR.getException() + "상행 종점역과 하행 종점역은 서로 달라야 합니다.\n"), + INVALID_LINE_NAME_EXISTENCE(ERROR.getException() + "해당 노선이 존재하지 않습니다.\n"), + + INVALID_SECTION_STATION_NAME_IN_LINE_ALREADY_EXISTENCE(ERROR.getException() + + "해당 역은 이미 노선에 존재합니다.\n"), + INVALID_SECTION_ORDER_REPLACEMENT_LENGTH(ERROR.getException() + "순서는 숫자로 입력해주세요.\n"), + INVALID_SECTION_ORDER_NUMBER(ERROR.getException() + "순서는 양의 정수로 입력해주세요.\n"), + INVALID_SECTION_ORDER_NUMBER_BY_STATIONS( + ERROR.getException() + "순서는 노선에 있는 역 개수보다 하나 큰 수까지만 입력해주세요.\n"), + INVALID_NUMBER_OF_SECTION_STATIONS_IN_LINE(ERROR.getException() + + "해당 노선에 포함된 역이 2개 이하이기 때문에 삭제할 수 없습니다.\n"); + + private final String exception; + + ExceptionType(String exception) { + this.exception = exception; + } + + public String getException() { + return exception; + } +} diff --git a/src/main/java/subway/type/InformationType.java b/src/main/java/subway/type/InformationType.java new file mode 100644 index 000000000..977c34caf --- /dev/null +++ b/src/main/java/subway/type/InformationType.java @@ -0,0 +1,30 @@ +package subway.type; + +/** + * InformationType.java : 실행 결과 문구 상수를 모아둔 Enum 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ +public enum InformationType { + INFORMATION("[INFO] "), + + STATION_ADDITION_INFORMATION(INFORMATION.getInformation() + "지하철 역이 등록되었습니다."), + STATION_DELETION_INFORMATION(INFORMATION.getInformation() + "지하철 역이 삭제되었습니다."), + + LINE_ADDITION_INFORMATION(INFORMATION.getInformation() + "지하철 노선이 등록되었습니다."), + LINE_DELETION_INFORMATION(INFORMATION.getInformation() + "지하철 노선이 삭제되었습니다."), + + SECTION_ADDITION_INFORMATION(INFORMATION.getInformation() + "구간이 등록되었습니다."), + SECTION_DELETION_INFORMATION(INFORMATION.getInformation() + "구간이 삭제되었습니다."); + + private final String information; + + InformationType(String information) { + this.information = information; + } + + public String getInformation() { + return information; + } +} diff --git a/src/main/java/subway/type/InputType.java b/src/main/java/subway/type/InputType.java new file mode 100644 index 000000000..e93250fca --- /dev/null +++ b/src/main/java/subway/type/InputType.java @@ -0,0 +1,26 @@ +package subway.type; + +/** + * InputType.java : 화면 기능 입력 값 상수를 모아둔 Enum 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ +public enum InputType { + INPUT_ONE("1"), + INPUT_TWO("2"), + INPUT_THREE("3"), + INPUT_FOUR("4"), + INPUT_QUITTING("Q"), + INPUT_BACK("B"); + + private final String input; + + InputType(String input) { + this.input = input; + } + + public String getInput() { + return input; + } +} diff --git a/src/main/java/subway/type/LineType.java b/src/main/java/subway/type/LineType.java new file mode 100644 index 000000000..3706190bb --- /dev/null +++ b/src/main/java/subway/type/LineType.java @@ -0,0 +1,23 @@ +package subway.type; + +/** + * LineType.java : 지하철 노선 초기화용 상수를 모아둔 Enum 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ +public enum LineType { + TWO("2호선"), + THREE("3호선"), + SHINBUNDANG("신분당선"); + + private final String line; + + LineType(String line) { + this.line = line; + } + + public String getLine() { + return line; + } +} diff --git a/src/main/java/subway/type/ScreenType.java b/src/main/java/subway/type/ScreenType.java new file mode 100644 index 000000000..b8cc7d4e9 --- /dev/null +++ b/src/main/java/subway/type/ScreenType.java @@ -0,0 +1,44 @@ +package subway.type; + +/** + * ScreenType.java : 화면 문구 상수를 모아둔 Enum 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ +public enum ScreenType { + MAIN_SCREEN("## 메인 화면\n"), + STATION_MANAGEMENT("1. 역 관리\n"), + LINE_MANAGEMENT("2. 노선 관리\n"), + SECTION_MANAGEMENT("3. 구간 관리\n"), + SUBWAY_MAP_SHOW("4. 지하철 노선도 출력\n"), + + STATION_MANAGEMENT_SCREEN("## 역 관리 화면\n"), + STATION_ADDITION("1. 역 등록\n"), + STATION_DELETION("2. 역 삭제\n"), + STATION_SHOW("3. 역 조회\n"), + + LINE_MANAGEMENT_SCREEN("## 노선 관리 화면\n"), + LINE_ADDITION("1. 노선 등록\n"), + LINE_DELETION("2. 노선 삭제\n"), + LINE_SHOW("3. 노선 조회\n"), + + SECTION_MANAGEMENT_SCREEN("## 구간 관리 화면\n"), + SECTION_ADDITION("1. 구간 등록\n"), + SECTION_DELETION("2. 구간 삭제\n"), + + QUITTING("Q. 종료\n\n"), + BACK("B. 돌아가기\n\n"), + + FEATURE_CHOICE("## 원하는 기능을 선택하세요."); + + private final String screen; + + ScreenType(String screen) { + this.screen = screen; + } + + public String getScreen() { + return screen; + } +} diff --git a/src/main/java/subway/type/StationType.java b/src/main/java/subway/type/StationType.java new file mode 100644 index 000000000..a62fc7b18 --- /dev/null +++ b/src/main/java/subway/type/StationType.java @@ -0,0 +1,27 @@ +package subway.type; + +/** + * StationType.java : 지하철 역 초기화용 상수를 모아둔 Enum 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ +public enum StationType { + EDUCATION_UNIVERSITY("교대역"), + GANGNAM("강남역"), + YEOKSAM("역삼역"), + NAMBU_BUS_TERMINAL("남부터미널역"), + YANGJAE("양재역"), + YANGJAE_CITIZENS_FOREST("양재시민의숲역"), + MAEBONG("매봉역"); + + private final String station; + + StationType(String station) { + this.station = station; + } + + public String getStation() { + return station; + } +} diff --git a/src/main/java/subway/type/TextType.java b/src/main/java/subway/type/TextType.java new file mode 100644 index 000000000..7d60bb7a9 --- /dev/null +++ b/src/main/java/subway/type/TextType.java @@ -0,0 +1,40 @@ +package subway.type; + +/** + * TextType.java : 화면 출력 문구 상수를 모아둔 Enum 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ +public enum TextType { + NEW_LINE("\n"), + HORIZONTAL_LINES("---"), + + STATION_ADDITION_TEXT("## 등록할 역 이름을 입력하세요."), + STATION_DELETION_TEXT("## 삭제할 역 이름을 입력하세요."), + STATION_LIST_TEXT("## 역 목록"), + + LINE_ADDITION_TEXT("## 등록할 노선 이름을 입력하세요."), + LINE_UP_STATION_NAME_TEXT("## 등록할 노선의 상행 종점역 이름을 입력하세요."), + LINE_DOWN_STATION_NAME_TEXT("## 등록할 노선의 하행 종점역 이름을 입력하세요."), + LINE_DELETION_TEXT("## 삭제할 노선 이름을 입력하세요."), + LINE_LIST_TEXT("## 노선 목록"), + + SECTION_ADDITION_LINE_TEXT("## 노선을 입력하세요."), + SECTION_ADDITION_STATION_TEXT("## 역이름을 입력하세요."), + SECTION_ADDITION_ORDER_TEXT("## 순서를 입력하세요."), + SECTION_DELETION_LINE_TEXT("## 삭제할 구간의 노선을 입력하세요."), + SECTION_DELETION_STATION_TEXT("## 삭제할 구간의 역을 입력하세요."), + + TRANSIT_MAP_TEXT("## 지하철 노선도"); + + private final String text; + + TextType(String text) { + this.text = text; + } + + public String getText() { + return text; + } +} diff --git a/src/main/java/subway/view/input/line/LineScanView.java b/src/main/java/subway/view/input/line/LineScanView.java new file mode 100644 index 000000000..cb1be29aa --- /dev/null +++ b/src/main/java/subway/view/input/line/LineScanView.java @@ -0,0 +1,39 @@ +package subway.view.input.line; + +import subway.view.output.line.LineTextView; +import subway.view.output.util.ScreenView; + +import java.util.Scanner; + +/** + * LineScanView.java : 지하철 노선 기능 입력에 대한 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ +public class LineScanView { + public static String scanLineInputForManagement(Scanner scanner) { + ScreenView.printLineManagementScreen(); + return scanner.nextLine(); + } + + public static String scanLineNameForAddition(Scanner scanner) { + LineTextView.printLineAdditionText(); + return scanner.nextLine(); + } + + public static String scanUpStationNameForAddition(Scanner scanner) { + LineTextView.printLineUpStationNameText(); + return scanner.nextLine(); + } + + public static String scanDownStationNameForAddition(Scanner scanner) { + LineTextView.printLineDownStationNameText(); + return scanner.nextLine(); + } + + public static String scanLineNameForDeletion(Scanner scanner) { + LineTextView.printLineDeletionText(); + return scanner.nextLine(); + } +} diff --git a/src/main/java/subway/view/input/section/SectionScanView.java b/src/main/java/subway/view/input/section/SectionScanView.java new file mode 100644 index 000000000..50a825ccf --- /dev/null +++ b/src/main/java/subway/view/input/section/SectionScanView.java @@ -0,0 +1,44 @@ +package subway.view.input.section; + +import subway.view.output.section.SectionTextView; +import subway.view.output.util.ScreenView; + +import java.util.Scanner; + +/** + * SectionScanView.java : 지하철 구간 기능 입력에 대한 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ +public class SectionScanView { + public static String scanSectionInputForManagement(Scanner scanner) { + ScreenView.printSectionManagementScreen(); + return scanner.nextLine(); + } + + public static String scanLineNameForAddition(Scanner scanner) { + SectionTextView.printSectionAdditionLineText(); + return scanner.nextLine(); + } + + public static String scanStationNameForAddition(Scanner scanner) { + SectionTextView.printSectionAdditionStationText(); + return scanner.nextLine(); + } + + public static String scanOrderForAddition(Scanner scanner) { + SectionTextView.printSectionAdditionOrderText(); + return scanner.nextLine(); + } + + public static String scanLineNameForDeletion(Scanner scanner) { + SectionTextView.printSectionDeletionLineText(); + return scanner.nextLine(); + } + + public static String scanStationNameForDeletion(Scanner scanner) { + SectionTextView.printSectionDeletionStationText(); + return scanner.nextLine(); + } +} diff --git a/src/main/java/subway/view/input/station/StationScanView.java b/src/main/java/subway/view/input/station/StationScanView.java new file mode 100644 index 000000000..0241d112c --- /dev/null +++ b/src/main/java/subway/view/input/station/StationScanView.java @@ -0,0 +1,30 @@ +package subway.view.input.station; + +import subway.view.output.station.StationTextView; +import subway.view.output.util.ScreenView; + +import java.util.Scanner; + +/** + * StationScanView.java : 지하철 역 기능 입력에 대한 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ +public class StationScanView { + public static String scanStationInputForManagement(Scanner scanner) { + ScreenView.printStationManagementScreen(); + return scanner.nextLine(); + + } + + public static String scanStationNameForAddition(Scanner scanner) { + StationTextView.printStationAdditionText(); + return scanner.nextLine(); + } + + public static String scanStationNameForDeletion(Scanner scanner) { + StationTextView.printStationDeletionText(); + return scanner.nextLine(); + } +} diff --git a/src/main/java/subway/view/input/subway/SubwayScanView.java b/src/main/java/subway/view/input/subway/SubwayScanView.java new file mode 100644 index 000000000..cae31e8e7 --- /dev/null +++ b/src/main/java/subway/view/input/subway/SubwayScanView.java @@ -0,0 +1,18 @@ +package subway.view.input.subway; + +import subway.view.output.util.ScreenView; + +import java.util.Scanner; + +/** + * SubwayScanView.java : 지하철 기능 입력에 대한 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ +public class SubwayScanView { + public static String scanMainInputForManagement(Scanner scanner) { + ScreenView.printMainScreen(); + return scanner.nextLine(); + } +} diff --git a/src/main/java/subway/view/output/line/LineExceptionView.java b/src/main/java/subway/view/output/line/LineExceptionView.java new file mode 100644 index 000000000..140e394bf --- /dev/null +++ b/src/main/java/subway/view/output/line/LineExceptionView.java @@ -0,0 +1,41 @@ +package subway.view.output.line; + +import subway.type.ExceptionType; + +/** + * LineExceptionView.java : 지하철 노선 예외 처리 문구 출력에 대한 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ +public class LineExceptionView { + public static void printInvalidLineNameException() { + System.out.println(); + System.out.println(ExceptionType.INVALID_LINE_NAME.getException()); + } + + public static void printInvalidLineNameLengthException() { + System.out.println(); + System.out.println(ExceptionType.INVALID_LINE_NAME_LENGTH.getException()); + } + + public static void printInvalidLineNameLastCharacterException() { + System.out.println(); + System.out.println(ExceptionType.INVALID_LINE_NAME_LAST_CHARACTER.getException()); + } + + public static void printInvalidLineStationNamesExistenceException() { + System.out.println(); + System.out.println(ExceptionType.INVALID_LINE_STATION_NAMES_EXISTENCE.getException()); + } + + public static void printInvalidLineSameStationNamesException() { + System.out.println(); + System.out.println(ExceptionType.INVALID_LINE_SAME_STATION_NAMES.getException()); + } + + public static void printInvalidLineNameExistenceException() { + System.out.println(); + System.out.println(ExceptionType.INVALID_LINE_NAME_EXISTENCE.getException()); + } +} diff --git a/src/main/java/subway/view/output/line/LineInformationView.java b/src/main/java/subway/view/output/line/LineInformationView.java new file mode 100644 index 000000000..3d4b9933e --- /dev/null +++ b/src/main/java/subway/view/output/line/LineInformationView.java @@ -0,0 +1,21 @@ +package subway.view.output.line; + +import subway.type.InformationType; + +/** + * LineInformationView.java : 지하철 노선 실행 결과 문구 출력에 대한 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ +public class LineInformationView { + public static void printLineAdditionInformation() { + System.out.println(); + System.out.println(InformationType.LINE_ADDITION_INFORMATION.getInformation()); + } + + public static void printLineDeletionInformation() { + System.out.println(); + System.out.println(InformationType.LINE_DELETION_INFORMATION.getInformation()); + } +} diff --git a/src/main/java/subway/view/output/line/LineTextView.java b/src/main/java/subway/view/output/line/LineTextView.java new file mode 100644 index 000000000..e76f03eba --- /dev/null +++ b/src/main/java/subway/view/output/line/LineTextView.java @@ -0,0 +1,31 @@ +package subway.view.output.line; + +import subway.type.TextType; + +/** + * LineTextView.java : 지하철 노선 화면 출력 문구 출력에 대한 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ +public class LineTextView { + public static void printLineAdditionText() { + System.out.println(); + System.out.println(TextType.LINE_ADDITION_TEXT.getText()); + } + + public static void printLineUpStationNameText() { + System.out.println(); + System.out.println(TextType.LINE_UP_STATION_NAME_TEXT.getText()); + } + + public static void printLineDownStationNameText() { + System.out.println(); + System.out.println(TextType.LINE_DOWN_STATION_NAME_TEXT.getText()); + } + + public static void printLineDeletionText() { + System.out.println(); + System.out.println(TextType.LINE_DELETION_TEXT.getText()); + } +} diff --git a/src/main/java/subway/view/output/section/SectionExceptionView.java b/src/main/java/subway/view/output/section/SectionExceptionView.java new file mode 100644 index 000000000..d69269653 --- /dev/null +++ b/src/main/java/subway/view/output/section/SectionExceptionView.java @@ -0,0 +1,37 @@ +package subway.view.output.section; + +import subway.type.ExceptionType; + +/** + * SectionExceptionView.java : 지하철 구간 예외 처리 문구 출력에 대한 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ +public class SectionExceptionView { + public static void printInvalidSectionStationNameInLineExistenceException() { + System.out.println(); + System.out.println( + ExceptionType.INVALID_SECTION_STATION_NAME_IN_LINE_ALREADY_EXISTENCE.getException()); + } + + public static void printInvalidSectionOrderReplacementLengthException() { + System.out.println(); + System.out.println(ExceptionType.INVALID_SECTION_ORDER_REPLACEMENT_LENGTH.getException()); + } + + public static void printInvalidSectionOrderNumberException() { + System.out.println(); + System.out.println(ExceptionType.INVALID_SECTION_ORDER_NUMBER.getException()); + } + + public static void printInvalidSectionOrderNumberByStationsException() { + System.out.println(); + System.out.println(ExceptionType.INVALID_SECTION_ORDER_NUMBER_BY_STATIONS.getException()); + } + + public static void printInvalidNumberOfSectionStationsInLineException() { + System.out.println(); + System.out.println(ExceptionType.INVALID_NUMBER_OF_SECTION_STATIONS_IN_LINE.getException()); + } +} diff --git a/src/main/java/subway/view/output/section/SectionInformationView.java b/src/main/java/subway/view/output/section/SectionInformationView.java new file mode 100644 index 000000000..9e97a0043 --- /dev/null +++ b/src/main/java/subway/view/output/section/SectionInformationView.java @@ -0,0 +1,21 @@ +package subway.view.output.section; + +import subway.type.InformationType; + +/** + * SectionInformationView.java : 지하철 구간 실행 결과 문구 출력에 대한 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ +public class SectionInformationView { + public static void printSectionAdditionInformation() { + System.out.println(); + System.out.println(InformationType.SECTION_ADDITION_INFORMATION.getInformation()); + } + + public static void printSectionDeletionInformation() { + System.out.println(); + System.out.println(InformationType.SECTION_DELETION_INFORMATION.getInformation()); + } +} diff --git a/src/main/java/subway/view/output/section/SectionTextView.java b/src/main/java/subway/view/output/section/SectionTextView.java new file mode 100644 index 000000000..aadfc5ff6 --- /dev/null +++ b/src/main/java/subway/view/output/section/SectionTextView.java @@ -0,0 +1,36 @@ +package subway.view.output.section; + +import subway.type.TextType; + +/** + * SectionTextView.java : 지하철 구간 화면 출력 문구 출력에 대한 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ +public class SectionTextView { + public static void printSectionAdditionLineText() { + System.out.println(); + System.out.println(TextType.SECTION_ADDITION_LINE_TEXT.getText()); + } + + public static void printSectionAdditionStationText() { + System.out.println(); + System.out.println(TextType.SECTION_ADDITION_STATION_TEXT.getText()); + } + + public static void printSectionAdditionOrderText() { + System.out.println(); + System.out.println(TextType.SECTION_ADDITION_ORDER_TEXT.getText()); + } + + public static void printSectionDeletionLineText() { + System.out.println(); + System.out.println(TextType.SECTION_DELETION_LINE_TEXT.getText()); + } + + public static void printSectionDeletionStationText() { + System.out.println(); + System.out.println(TextType.SECTION_DELETION_STATION_TEXT.getText()); + } +} diff --git a/src/main/java/subway/view/output/station/StationExceptionView.java b/src/main/java/subway/view/output/station/StationExceptionView.java new file mode 100644 index 000000000..e17fad4c0 --- /dev/null +++ b/src/main/java/subway/view/output/station/StationExceptionView.java @@ -0,0 +1,36 @@ +package subway.view.output.station; + +import subway.type.ExceptionType; + +/** + * StationExceptionView.java : 지하철 역 예외 처리 문구 출력에 대한 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ +public class StationExceptionView { + public static void printInvalidStationNameException() { + System.out.println(); + System.out.println(ExceptionType.INVALID_STATION_NAME.getException()); + } + + public static void printInvalidStationNameLengthException() { + System.out.println(); + System.out.println(ExceptionType.INVALID_STATION_NAME_LENGTH.getException()); + } + + public static void printInvalidStationNameLastCharacterException() { + System.out.println(); + System.out.println(ExceptionType.INVALID_STATION_NAME_LAST_CHARACTER.getException());; + } + + public static void printInvalidStationNameInTransitMapException() { + System.out.println(); + System.out.println(ExceptionType.INVALID_STATION_NAME_IN_TRANSIT_MAP.getException()); + } + + public static void printInvalidStationNameExistenceException() { + System.out.println(); + System.out.println(ExceptionType.INVALID_STATION_NAME_EXISTENCE.getException()); + } +} diff --git a/src/main/java/subway/view/output/station/StationInformationView.java b/src/main/java/subway/view/output/station/StationInformationView.java new file mode 100644 index 000000000..4db9db2f9 --- /dev/null +++ b/src/main/java/subway/view/output/station/StationInformationView.java @@ -0,0 +1,21 @@ +package subway.view.output.station; + +import subway.type.InformationType; + +/** + * StationInformationView.java : 지하철 역 실행 결과 문구 출력에 대한 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ +public class StationInformationView { + public static void printStationAdditionInformation() { + System.out.println(); + System.out.println(InformationType.STATION_ADDITION_INFORMATION.getInformation()); + } + + public static void printStationDeletionInformation() { + System.out.println(); + System.out.println(InformationType.STATION_DELETION_INFORMATION.getInformation()); + } +} diff --git a/src/main/java/subway/view/output/station/StationTextView.java b/src/main/java/subway/view/output/station/StationTextView.java new file mode 100644 index 000000000..b3badb6bf --- /dev/null +++ b/src/main/java/subway/view/output/station/StationTextView.java @@ -0,0 +1,21 @@ +package subway.view.output.station; + +import subway.type.TextType; + +/** + * StationTextView.java : 지하철 역 화면 출력 문구 출력에 대한 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ +public class StationTextView { + public static void printStationAdditionText() { + System.out.println(); + System.out.println(TextType.STATION_ADDITION_TEXT.getText()); + } + + public static void printStationDeletionText() { + System.out.println(); + System.out.println(TextType.STATION_DELETION_TEXT.getText()); + } +} diff --git a/src/main/java/subway/view/output/util/FeatureChoiceExceptionView.java b/src/main/java/subway/view/output/util/FeatureChoiceExceptionView.java new file mode 100644 index 000000000..e9ee57a28 --- /dev/null +++ b/src/main/java/subway/view/output/util/FeatureChoiceExceptionView.java @@ -0,0 +1,22 @@ +package subway.view.output.util; + +import subway.type.ExceptionType; + +/** + * FeatureChoiceExceptionView.java : 화면 기능 선택 예외 처리 문구 출력에 대한 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ +public class FeatureChoiceExceptionView { + public static void printInvalidFeatureChoiceException() { + System.out.println(); + System.out.println(ExceptionType.INVALID_FEATURE_CHOICE.getException()); + } + + public static boolean printInvalidChoiceException() { + System.out.println(); + System.out.println(ExceptionType.INVALID_FEATURE_CHOICE.getException()); + return false; + } +} diff --git a/src/main/java/subway/view/output/util/ScreenView.java b/src/main/java/subway/view/output/util/ScreenView.java new file mode 100644 index 000000000..1b0e8298c --- /dev/null +++ b/src/main/java/subway/view/output/util/ScreenView.java @@ -0,0 +1,52 @@ +package subway.view.output.util; + +import subway.type.ScreenType; + +/** + * ScreenView.java : 화면 출력에 대한 클래스 + * + * @author Daeun Lee + * @version 1.0 + */ +public class ScreenView { + public static void printMainScreen() { + System.out.println(ScreenType.MAIN_SCREEN.getScreen() + + ScreenType.STATION_MANAGEMENT.getScreen() + + ScreenType.LINE_MANAGEMENT.getScreen() + + ScreenType.SECTION_MANAGEMENT.getScreen() + + ScreenType.SUBWAY_MAP_SHOW.getScreen() + + ScreenType.QUITTING.getScreen() + + ScreenType.FEATURE_CHOICE.getScreen()); + } + + public static void printStationManagementScreen() { + System.out.println(ScreenType.STATION_MANAGEMENT_SCREEN.getScreen() + + ScreenType.STATION_ADDITION.getScreen() + + ScreenType.STATION_DELETION.getScreen() + + ScreenType.STATION_SHOW.getScreen() + + ScreenType.BACK.getScreen() + + ScreenType.FEATURE_CHOICE.getScreen()); + } + + public static void printLineManagementScreen() { + System.out.println(ScreenType.LINE_MANAGEMENT_SCREEN.getScreen() + + ScreenType.LINE_ADDITION.getScreen() + + ScreenType.LINE_DELETION.getScreen() + + ScreenType.LINE_SHOW.getScreen() + + ScreenType.BACK.getScreen() + + ScreenType.FEATURE_CHOICE.getScreen()); + } + + public static void printSectionManagementScreen() { + System.out.println(ScreenType.SECTION_MANAGEMENT_SCREEN.getScreen() + + ScreenType.SECTION_ADDITION.getScreen() + + ScreenType.SECTION_DELETION.getScreen() + + ScreenType.BACK.getScreen() + + ScreenType.FEATURE_CHOICE.getScreen()); + } + + public static boolean printNewLine() { + System.out.println(); + return true; + } +}