diff --git a/README.md b/README.md index 450e7753a..12f51f866 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,58 @@
+## πŸ•Š κΈ°λŠ₯ μ •μ˜ + +- 메인 화면을 좜λ ₯ν•œλ‹€ +- μ›ν•˜λŠ” κΈ°λŠ₯을 μž…λ ₯λ°›μ•„ μ‹€ν–‰ν•œλ‹€. +- [ERROR] λͺ©λ‘μ— μ—†λŠ” κΈ°λŠ₯이라면 μ—λŸ¬ 사항을 좜λ ₯ν•œλ‹€. +- 1. μ—­ 관리 + - μ—­ 등둝 : μ‚¬μš©μžμ—κ²Œ μž…λ ₯받은 역을 λ“±λ‘ν•œλ‹€. + - μ—­ μ‚­μ œ : μ‚¬μš©μžμ—κ²Œ μž…λ ₯받은 역을 μ‚­μ œν•œλ‹€. + - μ—­ 쑰회 : ν˜„μž¬ λ“±λ‘λœ μ—­μ˜ 전체 λͺ©λ‘μ„ 좜λ ₯ν•œλ‹€. + - [ERROR] μ—­ 등둝 μ‹œ μ—­ 이름이 2κΈ€μž μ΄ν•˜μ΄λ©΄ μ—λŸ¬ 사항을 좜λ ₯ν•œλ‹€. + - [ERROR] μ—­ 등둝 μ‹œ μ€‘λ³΅λœ μ—­ 이름이라면 μ—λŸ¬ 사항을 좜λ ₯ν•œλ‹€. + - [ERROR] μ—­ μ‚­μ œ μ‹œ μ‚­μ œν•΄μ•Ό ν•˜λŠ” 역이 μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄ μ—λŸ¬ 사항을 좜λ ₯ν•œλ‹€. +- 2. λ…Έμ„  관리 + - λ…Έμ„  등둝 : λ…Έμ„ μ˜ 이름, 상행 쒅점역, ν•˜ν–‰ 쒅점역을 μž…λ ₯λ°›μ•„ 노선을 λ“±λ‘ν•œλ‹€. + - λ…Έμ„  μ‚­μ œ : ν˜„μž¬ λ“±λ‘λœ λ…Έμ„ μ˜ 전체 λͺ©λ‘μ„ 좜λ ₯ν•œλ‹€. + - λ…Έμ„  쑰회 : μ‚¬μš©μžμ—κ²Œ μž…λ ₯받은 노선을 μ‚­μ œν•œλ‹€. + - [ERROR] λ…Έμ„  등둝 μ‹œ λ…Έμ„  이름이 2κΈ€μž μ΄ν•˜μ΄λ©΄ μ—λŸ¬ 사항을 좜λ ₯ν•œλ‹€. + - [ERROR] λ…Έμ„  등둝 μ‹œ μ€‘λ³΅λœ λ…Έμ„  이름이라면 μ—λŸ¬ 사항을 좜λ ₯ν•œλ‹€. + - [ERROR] λ…Έμ„  등둝 μ‹œ 상행 쒅점역, ν•˜ν–‰ μ’…μ μ—­μœΌλ‘œ μž…λ ₯된 역이 λ“±λ‘λ˜μ§€ μ•Šμ€ 역인 경우 μ—λŸ¬ 사항을 좜λ ₯ν•œλ‹€. + - [ERROR] λ…Έμ„  μ‚­μ œ μ‹œ μ‚­μ œν•΄μ•Ό ν•˜λŠ” 노선이 μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄ μ—λŸ¬ 사항을 좜λ ₯ν•œλ‹€. +- 3. ꡬ간 관리 + - ꡬ간 등둝 : λ…Έμ„ κ³Ό μ—­ 이름을 μž…λ ₯λ°›μ•„ ꡬ간을 λ“±λ‘ν•œλ‹€. + - ꡬ간 μ‚­μ œ : λ…Έμ„ κ³Ό μ—­ 이름을 μž…λ ₯λ°›μ•„ ꡬ간을 μ‚­μ œν•œλ‹€. + - [ERROR] ꡬ간 등둝 μ‹œ μ€‘λ³΅λœ λ…Έμ„ κ³Ό μ—­ 이름이라면 μ—λŸ¬ 사항을 좜λ ₯ν•œλ‹€. + - [ERROR] ꡬ간 등둝 μ‹œ ν˜„μž¬ λ…Έμ„ μ˜ λ²”μœ„ 밖이라면 μ—λŸ¬ 사항을 좜λ ₯ν•œλ‹€. + - [ERROR] ꡬ간 μ‚­μ œ μ‹œ μ‚­μ œν•΄μ•Ό ν•˜λŠ” λ…Έμ„ κ³Ό μ—­ 이름이 μ‘΄μž¬ν•˜μ§€ μ•ŠλŠλ‹€λ©΄ μ—λŸ¬ 사항을 좜λ ₯ν•œλ‹€. + - [ERROR] ꡬ간 μ‚­μ œ μ‹œ μ‚­μ œν•΄ν– ν•˜λŠ” 역이 ν¬ν•¨λœ 노선에 역이 2개 μ΄ν•˜λ‘œ μžˆλ‹€λ©΄ μ—λŸ¬ 사항을 좜λ ₯ν•œλ‹€. +- 4. μ§€ν•˜μ²  노선도 좜λ ₯ + - 전체 노선도 λͺ©λ‘μ„ 좜λ ₯ν•œλ‹€. +- Q. μ’…λ£Œ + +
+ +## ⭐️ 클래슀 μ •μ˜ + +- *domain* + - Input : μ‚¬μš©μžμ—κ²Œ κΈ°λŠ₯을 μ„ νƒλ°›λŠ” 메인 화면을 좜λ ₯ν•˜λŠ” 클래슀 + - Station : μ—­ 이름을 κ°€μ§€λŠ” 객체 클래슀 + - Line : λ…Έμ„  이름과 노선에 ν¬ν•¨λœ μ—­ 정보λ₯Ό 가지고 κ΄€λ¦¬ν•˜λŠ” 클래슀 + - Constant : ν”„λ‘œκ·Έλž¨ λ‚΄μ—μ„œ μ‚¬μš©λ˜λŠ” μƒμˆ˜λ₯Ό 가지고 μžˆλŠ” 클래슀 +- *repository* + - StationRepository : μ—­ 등둝, μ‚­μ œλ₯Ό μˆ˜ν–‰ν•˜λŠ” ν•¨μˆ˜λ₯Ό κ°€μ§€λŠ” 클래슀 + - LineRepository : λ…Έμ„  등둝, μ‚­μ œλ₯Ό μˆ˜ν–‰ν•˜λŠ” ν•¨μˆ˜λ₯Ό κ°€μ§€λŠ” 클래슀 + - SectionRepository : ꡬ간 등둝, μ‚­μ œλ₯Ό μˆ˜ν–‰ν•˜λŠ” ν•¨μˆ˜λ₯Ό κ°€μ§€λŠ” 클래슀 +- *controller* + - StationController : μ—­ 등둝, μ‚­μ œμ— λŒ€ν•œ κ²°κ³Όλ₯Ό 좜λ ₯ν•˜κ³ , 전체 μ—­ 쑰회λ₯Ό μˆ˜ν–‰ν•˜λŠ” 클래슀 + - LineController : λ…Έμ„  등둝, μ‚­μ œμ— λŒ€ν•œ κ²°κ³Όλ₯Ό 좜λ ₯ν•˜κ³ , 전체 λ…Έμ„  쑰회λ₯Ό μˆ˜ν–‰ν•˜λŠ” 클래슀 + - SectionController : ꡬ간 등둝, μ‚­μ œμ— λŒ€ν•œ κ²°κ³Όλ₯Ό 좜λ ₯ν•˜κ³ , 전체 μ§€ν•˜μ²  λ…Έμ„ κ³Ό ν¬ν•¨λœ μ—­ 쑰회λ₯Ό μˆ˜ν–‰ν•˜λŠ” 클래슀 +- *Application* : Input 클래슀의 λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•΄ ν”„λ‘œκ·Έλž¨μ„ μ‹œμž‘ν•˜κ³  flag둜 ν”„λ‘œκ·Έλž¨ μ’…λ£Œλ₯Ό κ΄€λ¦¬ν•˜λŠ” 클래슀 + +
+ ## πŸš€ κΈ°λŠ₯ μš”κ΅¬μ‚¬ν•­ ### 초기 μ„€μ • @@ -17,10 +69,10 @@ - 2ν˜Έμ„ : κ΅λŒ€μ—­ - 강남역 - μ—­μ‚Όμ—­ - 3ν˜Έμ„ : κ΅λŒ€μ—­ - 남뢀터미널역 - μ–‘μž¬μ—­ - 맀봉역 - μ‹ λΆ„λ‹Ήμ„ : 강남역 - μ–‘μž¬μ—­ - μ–‘μž¬μ‹œλ―Όμ˜μˆ²μ—­ - ``` +``` - + ### μ§€ν•˜μ²  μ—­ κ΄€λ ¨ κΈ°λŠ₯ - μ§€ν•˜μ²  역을 λ“±λ‘ν•˜κ³  μ‚­μ œν•  수 μžˆλ‹€. (단, 노선에 λ“±λ‘λœ 역은 μ‚­μ œν•  수 μ—†λ‹€) - μ€‘λ³΅λœ μ§€ν•˜μ²  μ—­ 이름이 등둝될 수 μ—†λ‹€. @@ -410,7 +462,7 @@ public class Application { - μ œκ³΅ν•˜λŠ” 각 클래슀의 κΈ°λ³Έ μƒμ„±μžλ₯Ό μΆ”κ°€ν•  수 μ—†λ‹€. - ν•„λ“œ(μΈμŠ€ν„΄μŠ€ λ³€μˆ˜)인 name의 μ ‘κ·Ό μ œμ–΄μž private을 λ³€κ²½ν•  수 μ—†λ‹€. - κ°€λŠ₯ν•˜λ©΄ setter λ©”μ†Œλ“œ(ex. setXXX)λ₯Ό μΆ”κ°€ν•˜μ§€ μ•Šκ³  κ΅¬ν˜„ν•œλ‹€. - + ```java public class Station { private String name; @@ -434,7 +486,7 @@ public class Station { - μΆ”κ°€λ‘œ μƒμ„±λ˜λŠ” 객체에 λŒ€ν•΄μ„œ XXXRepository λ„€μ΄λ°μœΌλ‘œ μ €μž₯ 클래슀λ₯Ό μΆ”κ°€ν•  수 μžˆλ‹€. - κ°μ²΄λ“€μ˜ μƒνƒœλ₯Ό κ΄€λ¦¬ν•˜κΈ° μœ„ν•΄μ„œ XXXRepository 클래슀λ₯Ό ν™œμš©ν•΄ μ €μž₯ λ‘œμ§μ„ κ΅¬ν˜„ν•΄μ•Ό ν•œλ‹€. - ν•„μš”μ— 따라 자유둭게 μˆ˜μ •μ΄ κ°€λŠ₯ν•˜λ‹€. - + ```java public class StationRepository { private static final List stations = new ArrayList<>(); diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java index 0bcf786cc..7f6d251f6 100644 --- a/src/main/java/subway/Application.java +++ b/src/main/java/subway/Application.java @@ -1,10 +1,37 @@ package subway; +import subway.domain.*; +import subway.repository.LineRepository; +import subway.repository.StationRepository; + +import java.util.Arrays; import java.util.Scanner; public class Application { public static void main(String[] args) { final Scanner scanner = new Scanner(System.in); - // TODO: ν”„λ‘œκ·Έλž¨ κ΅¬ν˜„ + initialSetting(); + Input input = new Input(scanner); + while (!input.quit) { + input.mainInput(); + } + } + + static void initialSetting() { + StationRepository stationRepository = new StationRepository(); + LineRepository lineRepository = new LineRepository(); + Station station1 = new Station("κ΅λŒ€μ—­"); + Station station2 = new Station("강남역"); + Station station3 = new Station("μ—­μ‚Όμ—­"); + Station station4 = new Station("남뢀터미널역"); + Station station5 = new Station("μ–‘μž¬μ—­"); + Station station6 = new Station("μ–‘μž¬μ‹œλ―Όμ˜μˆ²μ—­"); + Station station7 = new Station("맀봉역"); + stationRepository.addStations(Arrays.asList(station1, station2, station3, station4, station5, station6, station7)); + Line line1 = new Line("2ν˜Έμ„ ", station1, station2, station3); + Line line2 = new Line("3ν˜Έμ„ ", station1, station4, station5, station7); + Line line3 = new Line("μ‹ λΆ„λ‹Ήμ„ ", station2, station5, station6); + lineRepository.addLines(Arrays.asList(line1, line2, line3)); + } } diff --git a/src/main/java/subway/domain/Constant.java b/src/main/java/subway/domain/Constant.java new file mode 100644 index 000000000..33ec3c740 --- /dev/null +++ b/src/main/java/subway/domain/Constant.java @@ -0,0 +1,30 @@ +package subway.domain; + +public class Constant { + public static final int MIN_LENGTH = 2; + public static final String FIRST_COMMAND = "1"; + public static final String SECOND_COMMAND = "2"; + public static final String THIRD_COMMAND = "3"; + public static final String FORTH_COMMAND = "4"; + public static final String QUIT_COMMAND = "Q"; + public static final String BACK_COMMAND = "B"; + + public static final String ERROR_PREFIX = "[ERROR]"; + public static final String INFO_PREFIX = "[INFO]"; + + public static final String MAIN_ANNOUNCEMENT = "\n## 메인 ν™”λ©΄\n1. μ—­ 관리\n2. λ…Έμ„  관리\n3. ꡬ간 관리\n4. μ§€ν•˜μ²  노선도 좜λ ₯\nQ. μ’…λ£Œ\n"; + public static final String STATION_ANNOUNCEMENT = "\n## μ—­ 관리 ν™”λ©΄\n1. μ—­ 등둝\n2. μ—­ μ‚­μ œ\n3. μ—­ 쑰회\nB. λŒμ•„κ°€κΈ°"; + public static final String LINE_ANNOUNCEMENT = "\n## λ…Έμ„  관리 ν™”λ©΄\n1. λ…Έμ„  등둝\n2. λ…Έμ„  μ‚­μ œ\n3. λ…Έμ„  쑰회\nB. λŒμ•„κ°€κΈ°"; + public static final String SECTION_ANNOUNCEMENT = "\n## ꡬ간 관리 ν™”λ©΄\n1. ꡬ간 등둝\n2. ꡬ간 μ‚­μ œ\nB. λŒμ•„κ°€κΈ°\n"; + public static final String INPUT_ANNOUNCEMENT = "## μ›ν•˜λŠ” κΈ°λŠ₯을 μ„ νƒν•˜μ„Έμš”.\n"; + public static final String INPUT_ERROR_ANNOUNCEMENT = "선택할 수 μ—†λŠ” κΈ°λŠ₯μž…λ‹ˆλ‹€."; + public static final String NO_EXIST_INFO = "λ“±λ‘λ˜μ§€ μ•Šμ€ μ—­ λ˜λŠ” λ…Έμ„ μž…λ‹ˆλ‹€.\n"; + public static final String LINE_STATION_POSTFIX = "쒅점역 이름을 μž…λ ₯ν•˜μ„Έμš”."; + public static final String DUPLICATE_STATION_NAME = "이미 λ“±λ‘λœ μ—­μž…λ‹ˆλ‹€.\n"; + + public static final String ADD_PREFIX = "\n## 등둝할"; + public static final String DELETE_PREFIX = "\n## μ‚­μ œν• "; + public static final String NAME_POSTFIX = "이름을 μž…λ ₯ν•΄μ£Όμ„Έμš”."; + public static final String FAIL = "μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€."; + public static final String NAME_LENGTH_SHORT = "이름은 2κΈ€μž 이상이어야 ν•©λ‹ˆλ‹€."; +} diff --git a/src/main/java/subway/domain/Input.java b/src/main/java/subway/domain/Input.java new file mode 100644 index 000000000..0ed1043c0 --- /dev/null +++ b/src/main/java/subway/domain/Input.java @@ -0,0 +1,48 @@ +package subway.domain; + +import subway.view.LineController; +import subway.view.SectionController; +import subway.view.StationController; + +import java.util.Scanner; + +public class Input { + Scanner scanner; + private StationController stationController; + private LineController lineController; + private SectionController sectionController; + public static Boolean quit = false; + + public Input(Scanner scanner) { + this.scanner = scanner; + stationController = new StationController(scanner); + lineController = new LineController(scanner); + sectionController = new SectionController(scanner); + } + + public void mainInput() { + System.out.print(String.join("\n", Constant.MAIN_ANNOUNCEMENT, Constant.INPUT_ANNOUNCEMENT)); + String flag = scanner.next(); + if (flag.equals(Constant.FIRST_COMMAND)) { + stationController.printSelection(); + return; + } + if (flag.equals(Constant.SECOND_COMMAND)) { + lineController.printSelection(); + return; + } + if (flag.equals(Constant.THIRD_COMMAND)) { + sectionController.printSelection(); + return; + } + if (flag.equals(Constant.FORTH_COMMAND)) { + sectionController.readSections(); + return; + } + if (flag.equals(Constant.QUIT_COMMAND)) { + quit = true; + return; + } + System.err.println(String.join(" ", Constant.ERROR_PREFIX, Constant.INPUT_ERROR_ANNOUNCEMENT)); + } +} diff --git a/src/main/java/subway/domain/Line.java b/src/main/java/subway/domain/Line.java index f4d738d5a..11b47477f 100644 --- a/src/main/java/subway/domain/Line.java +++ b/src/main/java/subway/domain/Line.java @@ -1,15 +1,36 @@ package subway.domain; +import java.util.ArrayList; +import java.util.List; + public class Line { private String name; + public List stations = new ArrayList(); public Line(String name) { this.name = name; } + public Line(String name, Station... stations) { + this.name = name; + for(int i=0; i< stations.length; i++){ + this.stations.add(stations[i]); + } + } + public String getName() { return name; } - // μΆ”κ°€ κΈ°λŠ₯ κ΅¬ν˜„ + public boolean existStation(String stationName) { + return stations.stream().anyMatch(s -> s.getName().equals(stationName)); + } + + public void addStation(String stationName, int order) { + stations.add(order-1, new Station(stationName)); + } + + public boolean checkStationSize() { + return stations.size() <= Constant.MIN_LENGTH; + } } diff --git a/src/main/java/subway/domain/LineRepository.java b/src/main/java/subway/domain/LineRepository.java deleted file mode 100644 index 49132ddb6..000000000 --- a/src/main/java/subway/domain/LineRepository.java +++ /dev/null @@ -1,22 +0,0 @@ -package subway.domain; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Objects; - -public class LineRepository { - private static final List lines = new ArrayList<>(); - - public static List lines() { - return Collections.unmodifiableList(lines); - } - - public static void addLine(Line line) { - lines.add(line); - } - - public static boolean deleteLineByName(String name) { - return lines.removeIf(line -> Objects.equals(line.getName(), name)); - } -} diff --git a/src/main/java/subway/domain/Station.java b/src/main/java/subway/domain/Station.java index bdb142590..16ec4c0e1 100644 --- a/src/main/java/subway/domain/Station.java +++ b/src/main/java/subway/domain/Station.java @@ -11,5 +11,4 @@ public String getName() { return name; } - // μΆ”κ°€ κΈ°λŠ₯ κ΅¬ν˜„ } diff --git a/src/main/java/subway/domain/StationRepository.java b/src/main/java/subway/domain/StationRepository.java deleted file mode 100644 index b7245c0f3..000000000 --- a/src/main/java/subway/domain/StationRepository.java +++ /dev/null @@ -1,22 +0,0 @@ -package subway.domain; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Objects; - -public class StationRepository { - private static final List stations = new ArrayList<>(); - - public static List stations() { - return Collections.unmodifiableList(stations); - } - - public static void addStation(Station station) { - stations.add(station); - } - - public static boolean deleteStation(String name) { - return stations.removeIf(station -> Objects.equals(station.getName(), name)); - } -} diff --git a/src/main/java/subway/repository/LineRepository.java b/src/main/java/subway/repository/LineRepository.java new file mode 100644 index 000000000..328e56660 --- /dev/null +++ b/src/main/java/subway/repository/LineRepository.java @@ -0,0 +1,46 @@ +package subway.repository; + +import subway.domain.Line; +import subway.domain.Station; +import subway.repository.StationRepository; + +import java.util.*; + +public class LineRepository { + public static final List lines = new ArrayList<>(); + private static StationRepository stationRepository = new StationRepository(); + + public static List lines() { + return Collections.unmodifiableList(lines); + } + + public static void addLines(List lineList){ + lineList.forEach(line -> lines.add(line)); + } + + public static void addLine(String lineName, String upwardName, String downwardName) { + if (stationRepository.checkNameLength(lineName)) { + throw new IllegalStateException(); + } + if (checkExistLine(lineName) || !stationRepository.checkExistStation(upwardName) + || !stationRepository.checkExistStation(downwardName) || upwardName.equals(downwardName)) { + throw new IllegalArgumentException(); + } + Line line = new Line(lineName); + line.stations.add(new Station(upwardName)); + line.stations.add(new Station(downwardName)); + lines.add(line); + } + + public static boolean deleteLineByName(String lineName) { + if (!checkExistLine(lineName)) { + throw new IllegalArgumentException(); + } + return lines.removeIf(line -> Objects.equals(line.getName(), lineName)); + } + + public static boolean checkExistLine(String lineName) { + return lines.stream().anyMatch(o -> o.getName().equals(lineName)); + } + +} diff --git a/src/main/java/subway/repository/SectionRepository.java b/src/main/java/subway/repository/SectionRepository.java new file mode 100644 index 000000000..7b4227752 --- /dev/null +++ b/src/main/java/subway/repository/SectionRepository.java @@ -0,0 +1,44 @@ +package subway.repository; + +import subway.domain.Line; + +import java.util.*; + +public class SectionRepository { + private static LineRepository lineRepository = new LineRepository(); + private static StationRepository stationRepository = new StationRepository(); + + public static void addSection(String lineName, String stationName, int order) { + if (!validate(lineName, stationName)) { + throw new IllegalArgumentException(); + } + try { + Line targetLine = lineRepository.lines.stream().filter(l -> lineName.equals(l.getName())).findFirst().get(); + if (targetLine.existStation(stationName)) { + throw new IllegalStateException(); + } + targetLine.addStation(stationName, order); + } catch (IndexOutOfBoundsException e) { + throw new IndexOutOfBoundsException(); + } + } + + public static boolean deleteSection(String lineName, String stationName) { + if (!validate(lineName, stationName)) { + throw new IllegalArgumentException(); + } + Line line = lineRepository.lines.stream().filter(l -> lineName.equals(l.getName())).findFirst().get(); + if (line.checkStationSize()) { + throw new IllegalStateException(); + } + return line.stations.removeIf(s -> Objects.equals(s.getName(), stationName)); + } + + static boolean validate(String lineName, String stationName) { + if (!lineRepository.checkExistLine(lineName) || !stationRepository.checkExistStation(stationName)) { + return false; + } + return true; + } + +} diff --git a/src/main/java/subway/repository/StationRepository.java b/src/main/java/subway/repository/StationRepository.java new file mode 100644 index 000000000..a93783d55 --- /dev/null +++ b/src/main/java/subway/repository/StationRepository.java @@ -0,0 +1,43 @@ +package subway.repository; + +import subway.domain.Constant; +import subway.domain.Station; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Objects; + +public class StationRepository { + public static final List stations = new ArrayList<>(); + + public static List stations() { + return Collections.unmodifiableList(stations); + } + + public static void addStations(List stations){ + stations.forEach(StationRepository::addStation); + } + + public static void addStation(Station station) { + if (checkNameLength(station.getName())) { + throw new IllegalStateException(); + } + if (checkExistStation(station.getName())) { + throw new IllegalArgumentException(); + } + stations.add(station); + } + + public static boolean deleteStation(String name) { + return stations.removeIf(station -> Objects.equals(station.getName(), name)); + } + + public static boolean checkExistStation(String stationName) { + return stations.stream().anyMatch(o -> o.getName().equals(stationName)); + } + + public static boolean checkNameLength(String name) { + return name.length() <= Constant.MIN_LENGTH; + } +} diff --git a/src/main/java/subway/view/LineController.java b/src/main/java/subway/view/LineController.java new file mode 100644 index 000000000..612283ca3 --- /dev/null +++ b/src/main/java/subway/view/LineController.java @@ -0,0 +1,64 @@ +package subway.view; + +import subway.domain.Constant; +import subway.repository.LineRepository; + +import java.util.Scanner; + +public class LineController { + private static final String ADD_LINE_SUCCESS = "μ§€ν•˜μ²  노선이 λ“±λ‘λ˜μ—ˆμŠ΅λ‹ˆλ‹€.\n"; + private static final String DELETE_LINE_SUCCESS = "μ§€ν•˜μ²  노선이 μ‚­μ œλ˜μ—ˆμŠ΅λ‹ˆλ‹€.\n"; + private Scanner scanner; + private LineRepository lineRepository = new LineRepository(); + + public LineController(Scanner scanner) { + this.scanner = scanner; + } + + public void printSelection() { + System.out.println(Constant.LINE_ANNOUNCEMENT); + String command = scanner.next(); + if (command.equals(Constant.FIRST_COMMAND)) { + addLine(); + } else if (command.equals(Constant.SECOND_COMMAND)) { + deleteLine(); + } else if (command.equals(Constant.THIRD_COMMAND)) { + readLines(); + } else if (command.equals(Constant.BACK_COMMAND)) { + return; + } + } + + void addLine() { + System.out.println(String.join(" λ…Έμ„  ", Constant.ADD_PREFIX, Constant.NAME_POSTFIX)); + String lineName = scanner.next(); + System.out.println(String.join(" λ…Έμ„ μ˜ 상행 ", Constant.ADD_PREFIX, Constant.LINE_STATION_POSTFIX)); + String upwardName = scanner.next(); + System.out.println(String.join(" λ…Έμ„ μ˜ ν•˜ν–‰ ", Constant.ADD_PREFIX, Constant.LINE_STATION_POSTFIX)); + String downwardName = scanner.next(); + try { + lineRepository.addLine(lineName, upwardName, downwardName); + System.out.println(String.join(" ", Constant.INFO_PREFIX, ADD_LINE_SUCCESS)); + } catch (IllegalArgumentException e) { + System.err.println(String.join(" ", Constant.ERROR_PREFIX, Constant.FAIL)); + } catch (IllegalStateException e) { + System.err.println(String.join(" ", Constant.ERROR_PREFIX, Constant.NAME_LENGTH_SHORT)); + } + } + + void deleteLine() { + System.out.println(String.join(" λ…Έμ„  ", Constant.DELETE_PREFIX, Constant.NAME_POSTFIX)); + String lineName = scanner.next(); + if (lineRepository.deleteLineByName(lineName)) { + System.out.println(String.join(" ", Constant.INFO_PREFIX, DELETE_LINE_SUCCESS)); + return; + } + System.out.println(String.join(" ", Constant.ERROR_PREFIX, Constant.FAIL)); + } + + void readLines() { + for (int i = 0; i < lineRepository.lines.size(); i++) { + System.out.println(String.join(" ", Constant.INFO_PREFIX, lineRepository.lines.get(i).getName())); + } + } +} diff --git a/src/main/java/subway/view/SectionController.java b/src/main/java/subway/view/SectionController.java new file mode 100644 index 000000000..5926e3edb --- /dev/null +++ b/src/main/java/subway/view/SectionController.java @@ -0,0 +1,97 @@ +package subway.view; + +import subway.domain.Constant; +import subway.repository.LineRepository; +import subway.repository.SectionRepository; + +import java.util.Scanner; + +public class SectionController { + private static final String GET_LINE_NAME = "\n## 노선을 μž…λ ₯ν•˜μ„Έμš”."; + private static final String GET_STATION_NAME = "\n## μ—­ 이름을 μž…λ ₯ν•˜μ„Έμš”."; + private static final String GET_ORDER_NAME = "\n## μˆœμ„œλ₯Ό μž…λ ₯ν•˜μ„Έμš”."; + private static final String GET_DELETE_LINE_NAME = "\n## μ‚­μ œν•  κ΅¬κ°„μ˜ 노선을 μž…λ ₯ν•˜μ„Έμš”."; + private static final String GET_DELETE_STATION_NAME = "\n## μ‚­μ œν•  κ΅¬κ°„μ˜ 역을 μž…λ ₯ν•˜μ„Έμš”."; + private static final String NO_SECTION_INFO = "λ“±λ‘λœ 노선이 μ—†μŠ΅λ‹ˆλ‹€."; + private static final String ADD_SECTION_SUCCESS = "ꡬ간이 λ“±λ‘λ˜μ—ˆμŠ΅λ‹ˆλ‹€.\n"; + private static final String DELETE_SECTION_SUCCESS = "ꡬ간이 μ‚­μ œλ˜μ—ˆμŠ΅λ‹ˆλ‹€.\n"; + private static final String NOT_ADD_POSSIBLE_SECTION = "μΆ”κ°€ν•  수 μ—†λŠ” κ΅¬κ°„μž…λ‹ˆλ‹€."; + private static final String NOT_DELETE_POSSIBLE_SECTION = "μ‚­μ œν•  수 μ—†λŠ” κ΅¬κ°„μž…λ‹ˆλ‹€."; + private static final String NOT_NUMBER_FORMAT = "μˆœμ„œμ—λŠ” 숫자만 μž…λ ₯ κ°€λŠ₯ν•©λ‹ˆλ‹€."; + private static final String BAR = "---"; + private Scanner scanner; + private SectionRepository sectionRepository = new SectionRepository(); + private LineRepository lineRepository = new LineRepository(); + + public SectionController(Scanner scanner) { + this.scanner = scanner; + } + + public void printSelection() { + System.out.println(Constant.SECTION_ANNOUNCEMENT); + String command = scanner.next(); + if (command.equals(Constant.FIRST_COMMAND)) { + addSection(); + } else if (command.equals(Constant.SECOND_COMMAND)) { + deleteSection(); + } else if (command.equals(Constant.BACK_COMMAND)) { + return; + } + } + + void addSection() { + System.out.println(GET_LINE_NAME); + String lineName = scanner.next(); + System.out.println(GET_STATION_NAME); + String stationName = scanner.next(); + System.out.println(GET_ORDER_NAME); + String order = scanner.next(); + try { + int orderNum = Integer.parseInt(order); + sectionRepository.addSection(lineName, stationName, orderNum); + System.out.println(String.join(" ", Constant.INFO_PREFIX, ADD_SECTION_SUCCESS)); + } catch (NumberFormatException e) { + System.err.println(String.join(" ", Constant.ERROR_PREFIX, NOT_NUMBER_FORMAT)); + } catch (IllegalArgumentException e) { + System.err.println(String.join(" ", Constant.ERROR_PREFIX, Constant.NO_EXIST_INFO)); + } catch (IndexOutOfBoundsException e) { + System.err.println(String.join(" ", Constant.ERROR_PREFIX, NOT_ADD_POSSIBLE_SECTION)); + } catch (IllegalStateException e) { + System.err.println(String.join(" ", Constant.ERROR_PREFIX, Constant.DUPLICATE_STATION_NAME)); + } + } + + void deleteSection() { + System.out.println(GET_DELETE_LINE_NAME); + String lineName = scanner.next(); + System.out.println(GET_DELETE_STATION_NAME); + String stationName = scanner.next(); + try { + boolean deleteFlag = sectionRepository.deleteSection(lineName, stationName); + if (deleteFlag) { + System.out.println(String.join(" ", Constant.INFO_PREFIX, DELETE_SECTION_SUCCESS)); + return; + } + System.err.println(String.join(" ", Constant.ERROR_PREFIX, Constant.FAIL)); + } catch (IllegalArgumentException e) { + System.err.println(String.join(" ", Constant.ERROR_PREFIX, Constant.NO_EXIST_INFO)); + } catch (IllegalStateException e) { + System.err.println(String.join(" ", Constant.ERROR_PREFIX, NOT_DELETE_POSSIBLE_SECTION)); + } + + } + + public void readSections() { + if (lineRepository.lines.size() == 0) { + System.err.println(String.join(" ", Constant.ERROR_PREFIX, NO_SECTION_INFO)); + return; + } + for (int i = 0; i < lineRepository.lines.size(); i++) { + System.out.println("\n" + String.join(" ", Constant.INFO_PREFIX, lineRepository.lines.get(i).getName())); + System.out.println(String.join(" ", Constant.INFO_PREFIX, BAR)); + for (int j = 0; j < lineRepository.lines.get(i).stations.size(); j++) { + System.out.println(String.join(" ", Constant.INFO_PREFIX, lineRepository.lines.get(i).stations.get(j).getName())); + } + } + } +} diff --git a/src/main/java/subway/view/StationController.java b/src/main/java/subway/view/StationController.java new file mode 100644 index 000000000..6213efcb8 --- /dev/null +++ b/src/main/java/subway/view/StationController.java @@ -0,0 +1,62 @@ +package subway.view; + +import subway.domain.Constant; +import subway.domain.Station; +import subway.repository.StationRepository; + +import java.util.Scanner; + +public class StationController { + private static final String ADD_STATION_SUCCESS = "μ§€ν•˜μ²  역이 λ“±λ‘λ˜μ—ˆμŠ΅λ‹ˆλ‹€.\n"; + private static final String DELETE_STATION_SUCCESS = "μ§€ν•˜μ²  역이 μ‚­μ œλ˜μ—ˆμŠ΅λ‹ˆλ‹€.\n"; + private Scanner scanner; + private StationRepository stationRepository = new StationRepository(); + + public StationController(Scanner scanner) { + this.scanner = scanner; + } + + public void printSelection() { + System.out.println(Constant.STATION_ANNOUNCEMENT); + String command = scanner.next(); + if (command.equals(Constant.FIRST_COMMAND)) { + addStation(); + } else if (command.equals(Constant.SECOND_COMMAND)) { + deleteStation(); + } else if (command.equals(Constant.THIRD_COMMAND)) { + readStations(); + } else if (command.equals(Constant.BACK_COMMAND)) { + return; + } + } + + void addStation() { + System.out.println(String.join(" μ—­ ", Constant.ADD_PREFIX, Constant.NAME_POSTFIX)); + String stationName = scanner.next(); + try { + stationRepository.addStation(new Station(stationName)); + System.out.println(String.join(" ", Constant.INFO_PREFIX, ADD_STATION_SUCCESS)); + } catch (IllegalArgumentException e) { + System.err.println(String.join(" ", Constant.ERROR_PREFIX, Constant.FAIL)); + } catch (IllegalStateException e) { + System.err.println(String.join(" ", Constant.ERROR_PREFIX, Constant.NAME_LENGTH_SHORT)); + } + } + + void deleteStation() { + System.out.println(String.join(" μ—­ ", Constant.DELETE_PREFIX, Constant.NAME_POSTFIX)); + String stationName = scanner.next(); + boolean deleteFlag = stationRepository.deleteStation(stationName); + if (deleteFlag) { + System.out.println(String.join(" ", Constant.INFO_PREFIX, DELETE_STATION_SUCCESS)); + return; + } + System.out.println(String.join(" ", Constant.ERROR_PREFIX, Constant.FAIL)); + } + + void readStations() { + for (int i = 0; i < stationRepository.stations.size(); i++) { + System.out.println(String.join(" ", Constant.INFO_PREFIX, stationRepository.stations.get(i).getName())); + } + } +}