diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6923017 --- /dev/null +++ b/.gitignore @@ -0,0 +1,35 @@ +# Default ignored files +/shelf/ +/workspace.xml +/out/ +*.iml +*.xml + +# Compiled class file +*.class + +# Log file +*.log + +# BlueJ files +*.ctxt + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.jar +*.war +*.nar +*.ear +*.zip +*.tar.gz +*.rar + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* +replay_pid* + +# custom file or directories +/.idea +*.out \ No newline at end of file diff --git a/src/ru/gb/family_tree/Main.java b/src/ru/gb/family_tree/Main.java new file mode 100644 index 0000000..6881b06 --- /dev/null +++ b/src/ru/gb/family_tree/Main.java @@ -0,0 +1,13 @@ +package ru.gb.family_tree; + +import ru.gb.family_tree.view.ConsoleUI; +import ru.gb.family_tree.view.View; + +public class Main { + + public static void main(String[] args) { + + View view = new ConsoleUI(); + view.start(); + } +} diff --git a/src/ru/gb/family_tree/model/human/Gender.java b/src/ru/gb/family_tree/model/human/Gender.java new file mode 100644 index 0000000..cb01a10 --- /dev/null +++ b/src/ru/gb/family_tree/model/human/Gender.java @@ -0,0 +1,5 @@ +package ru.gb.family_tree.model.human; + +public enum Gender { + MALE, FEMALE +} diff --git a/src/ru/gb/family_tree/model/human/Human.java b/src/ru/gb/family_tree/model/human/Human.java new file mode 100644 index 0000000..a295a8e --- /dev/null +++ b/src/ru/gb/family_tree/model/human/Human.java @@ -0,0 +1,228 @@ +package ru.gb.family_tree.model.human; + +import ru.gb.family_tree.model.tree.TreeElement; + +import java.io.Serializable; +import java.time.LocalDate; +import java.time.Period; +import java.util.ArrayList; +import java.util.List; + +public class Human implements Serializable, Comparable, TreeElement { + private int id; + private String name; + private LocalDate dob, dod; + private Gender gender; + private List children; + private Human mother, father; + + // # Конструкторы + + /** + * Конструктор класса Human для семейного древа. + * Для умершего человека + * @param name Имя + * @param dob Дата рождения + * @param dod Дата смерти + * @param gender Пол + * @param children Список детей + * @param mother Мать + * @param father Отец + */ + public Human(String name, LocalDate dob, LocalDate dod , Gender gender, List children, Human mother, Human father) { + this.id = -1; + this.name = name; + this.dob = dob; + this.dod = dod; + this.gender = gender; + this.children = children; + this.mother = mother; + this.father = father; + } + + + public Human(String name, LocalDate dob, Gender gender) { + this(name, dob, null, gender, null, null, null); + } + + // # Геттеры + + public int getId() { + return id; + } + + public String getName() { + return name; + } + + public LocalDate getDob() { + return dob; + } + + public LocalDate getDod() { + return dod; + } + + public Gender getGender() { + return gender; + } + + public List getChildren() { + return children; + } + + public String getChildrenNames(){ + StringBuilder childrenString = new StringBuilder(); + childrenString.append("{"); + if (this.getChildren()!=null){ + for (Human child : this.getChildren()) { + childrenString.append(child.name); + childrenString.append(", "); + } + childrenString.deleteCharAt(childrenString.length()-1); + childrenString.deleteCharAt(childrenString.length()-1); + childrenString.append("}"); + } + else { + return null; + } + return childrenString.toString(); + } + public Human getMother() { + return mother; + } + + public Human getFather() { + return father; + } + + private int getPeriod(LocalDate start, LocalDate end) { + Period diff = Period.between(start,end); + return diff.getYears(); + } + + public int getAge() { + if (dod == null) { + return getPeriod(dob, LocalDate.now()); + } else { + return getPeriod(dob, dod); + } + } + + + + // # Сеттеры + + + public void setId(int id) { + this.id = id; + } + + public void setName(String name) { + this.name = name; + } + + public void setDob(LocalDate dob) { + this.dob = dob; + } + + public void setDod(LocalDate dod) { + this.dod = dod; + } + + public void setGender(Gender gender) { + this.gender = gender; + } + + public void setChildren(List children) { + this.children = children; + } + + public void setMother(Human mother) { + this.mother = mother; + } + + public void setFather(Human father) { + this.father = father; + } + + public void addChild(Human child){ + if (this.gender==gender.MALE){ + child.setFather(this); + } + if (this.gender==gender.FEMALE){ + child.setMother(this); + } + if (this.children == null) { + children = new ArrayList<>(); + } + this.children.add(child); + } + + public void addParent(Human parent){ + if (parent.gender==gender.MALE){ + this.setFather(parent); + } + if (parent.gender==gender.FEMALE){ + this.setMother(parent); + } + parent.addChild(this); + } + + @Override + public String toString() { + return getInfo(); + } + + private String getInfo() { + StringBuilder stringBuilder = new StringBuilder(); + + stringBuilder.append("ID: "); + stringBuilder.append(id); + + stringBuilder.append(") Имя: "); + stringBuilder.append(name); + + stringBuilder.append(", дата рождения: "); + stringBuilder.append(dob); + + stringBuilder.append(", пол: "); + stringBuilder.append(gender); + + stringBuilder.append(", дата смерти: "); + if (dod != null) { + stringBuilder.append(dod); + } else { + stringBuilder.append("неизвестна"); + } + + stringBuilder.append(", отец: "); + if (father != null) { + stringBuilder.append(getFather().getName()); + } else { + stringBuilder.append("неизвестен"); + } + + stringBuilder.append(", мать: "); + if (mother != null) { + stringBuilder.append(getMother().getName()); + } else { + stringBuilder.append("неизвестна"); + } + + stringBuilder.append(", дети: "); + if (children != null) { + stringBuilder.append(getChildrenNames()); + } else { + stringBuilder.append("отсутствуют;"); + } + + return stringBuilder.toString(); + } + + @Override + public int compareTo(Human o) { + return this.name.compareTo(o.name); + } +} + diff --git a/src/ru/gb/family_tree/model/iterators/ElementIterator.java b/src/ru/gb/family_tree/model/iterators/ElementIterator.java new file mode 100644 index 0000000..4c95b0a --- /dev/null +++ b/src/ru/gb/family_tree/model/iterators/ElementIterator.java @@ -0,0 +1,26 @@ +package ru.gb.family_tree.model.iterators; + +import ru.gb.family_tree.model.tree.TreeElement; + +import java.util.Iterator; +import java.util.List; + +public class ElementIterator implements Iterator { + + private int index; + private List familyList; + + public ElementIterator(List familyList) { + this.familyList = familyList; + } + + @Override + public boolean hasNext() { + return index < familyList.size(); + } + + @Override + public T next() { + return familyList.get(index++); + } +} diff --git a/src/ru/gb/family_tree/model/service/FamilyTreeService.java b/src/ru/gb/family_tree/model/service/FamilyTreeService.java new file mode 100644 index 0000000..79cc2bf --- /dev/null +++ b/src/ru/gb/family_tree/model/service/FamilyTreeService.java @@ -0,0 +1,19 @@ +package ru.gb.family_tree.model.service; + +import java.time.LocalDate; + +public interface FamilyTreeService { + void addObject(String name, LocalDate dob, String viewGender); + + String getTreeInfo(); + + void sortByAge(); + + void sortByName(); + + boolean save(); + + void read(); + + boolean addParentByID(int parentID, int childID); +} diff --git a/src/ru/gb/family_tree/model/service/HumanFamilyTree.java b/src/ru/gb/family_tree/model/service/HumanFamilyTree.java new file mode 100644 index 0000000..57766b8 --- /dev/null +++ b/src/ru/gb/family_tree/model/service/HumanFamilyTree.java @@ -0,0 +1,90 @@ +package ru.gb.family_tree.model.service; + +import ru.gb.family_tree.model.human.Gender; +import ru.gb.family_tree.model.human.Human; +import ru.gb.family_tree.model.tree.Tree; +import ru.gb.family_tree.model.writer.Writable; +import ru.gb.family_tree.view.ViewGender; + +import java.time.LocalDate; + +public class HumanFamilyTree implements FamilyTreeService { + private int genId; + private Tree tree; + private final Writable fH; + + //Пока работаю только с одним древом, в дальнейшем можно создать список деревьев + + public HumanFamilyTree(Writable writable) { + tree = new Tree<>(); + fH = writable; + } + + + public void addHuman (String name, LocalDate dob, Gender gender){ + Human human = new Human(name, dob, gender); + human.setId(genId++); + this.tree.addHuman(human); + } + + @Override + public void addObject (String name, LocalDate dob, String strGender){ + Gender gender = null; + if (strGender == ViewGender.MALE.toString()) { + gender = Gender.MALE; + } else if (strGender == ViewGender.FEMALE.toString()) { + gender = Gender.FEMALE; + } + addHuman(name, dob, gender); + } + + public String getTreeInfo (){ + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append("Список членов семьи:\n"); + for (Object human : this.tree){ + stringBuilder.append(human); + stringBuilder.append("\n"); + } + return stringBuilder.toString(); + } + + public void sortByName() { + this.tree.sortByName(); + } + + public void sortByAge() { + this.tree.sortByAge(); + } + + public boolean save (){ + return fH.save(this.tree); + } + + public void read (){ + this.tree = (Tree) fH.read(); + int maxID = this.tree.getFamilyList().getFirst().getId(); + for (Human human : this.tree){ + if(human.getId() > maxID){ + maxID = human.getId(); + } + } + genId = maxID+1; + } + + public Human findByID(int iD) { + for (Human human : this.tree){ + if(human.getId() == iD){ + return human; + } + } + return null; + } + + public boolean addParentByID(int parentID, int childID) { + if ((findByID(parentID) != null) && findByID(childID) != null){ + findByID(parentID).addChild(findByID(childID)); + return true; + } + return false; + } +} diff --git a/src/ru/gb/family_tree/model/service/comparators/HumanComparatorByAge.java b/src/ru/gb/family_tree/model/service/comparators/HumanComparatorByAge.java new file mode 100644 index 0000000..d1dc51c --- /dev/null +++ b/src/ru/gb/family_tree/model/service/comparators/HumanComparatorByAge.java @@ -0,0 +1,14 @@ +package ru.gb.family_tree.model.service.comparators; + +import ru.gb.family_tree.model.tree.TreeElement; + +import java.util.Comparator; + +public class HumanComparatorByAge implements Comparator { + + @Override + public int compare(T o1, T o2) { + // return o1.getAge()-o2.getAge(); + return Integer.compare(o1.getAge(), o2.getAge()); + } +} diff --git a/src/ru/gb/family_tree/model/service/comparators/HumanComparatorByName.java b/src/ru/gb/family_tree/model/service/comparators/HumanComparatorByName.java new file mode 100644 index 0000000..577ed56 --- /dev/null +++ b/src/ru/gb/family_tree/model/service/comparators/HumanComparatorByName.java @@ -0,0 +1,13 @@ +package ru.gb.family_tree.model.service.comparators; + +import ru.gb.family_tree.model.tree.TreeElement; + +import java.util.Comparator; + +public class HumanComparatorByName implements Comparator { + + @Override + public int compare(T o1, T o2) { + return o1.getName().compareTo(o2.getName()); + } +} diff --git a/src/ru/gb/family_tree/model/tree/Tree.java b/src/ru/gb/family_tree/model/tree/Tree.java new file mode 100644 index 0000000..9149882 --- /dev/null +++ b/src/ru/gb/family_tree/model/tree/Tree.java @@ -0,0 +1,64 @@ +package ru.gb.family_tree.model.tree; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import ru.gb.family_tree.model.service.comparators.HumanComparatorByAge; +import ru.gb.family_tree.model.service.comparators.HumanComparatorByName; + +public class Tree implements Serializable, Iterable { + private final List familyList; + + public Tree() { + familyList = new ArrayList<>(); + } + + public List getFamilyList() { + return familyList; + } + + public void addHuman(E element){ + familyList.add(element); + } + + @Override + public String toString() { + return getInfo(); + } + + private String getInfo() { + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append("Члены семьи:\n"); + for (E element : familyList) { + stringBuilder.append(element); + stringBuilder.append("\n"); + } + return stringBuilder.toString(); + } + public E getByName(String name){ + for (E element : this.familyList) { + if (element.getName().equals(name)) { + return element; + } + } + return null; + } + + public void sortByName() { + this.getFamilyList().sort(new HumanComparatorByName<>()); + } + + public void sortByAge() { + this.getFamilyList().sort(new HumanComparatorByAge<>()); + } + + + @Override + public Iterator iterator() { + //return new HumanIterator(familyList); + return familyList.iterator(); + } + +} diff --git a/src/ru/gb/family_tree/model/tree/TreeElement.java b/src/ru/gb/family_tree/model/tree/TreeElement.java new file mode 100644 index 0000000..4807adf --- /dev/null +++ b/src/ru/gb/family_tree/model/tree/TreeElement.java @@ -0,0 +1,6 @@ +package ru.gb.family_tree.model.tree; + +public interface TreeElement { + String getName(); + int getAge(); +} diff --git a/src/ru/gb/family_tree/model/writer/FileHandler.java b/src/ru/gb/family_tree/model/writer/FileHandler.java new file mode 100644 index 0000000..d4bd3fa --- /dev/null +++ b/src/ru/gb/family_tree/model/writer/FileHandler.java @@ -0,0 +1,40 @@ +package ru.gb.family_tree.model.writer; + +import ru.gb.family_tree.model.human.Human; +import ru.gb.family_tree.model.tree.Tree; + +import java.io.*; + +public class FileHandler implements Writable { + + public String filePath = "src/ru/gb/family_tree/model/writer/tree.sav"; + + public boolean save(Serializable serializable, String filePath) { + try (ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(filePath))) { + objectOutputStream.writeObject(serializable); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + public Tree read(String filePath) { + try (ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(filePath))){ + return (Tree) objectInputStream.readObject(); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + public boolean save(Serializable serializable) { + return save(serializable, this.filePath); + } + + public Tree read() { + return read(this.filePath); + + } + +} diff --git a/src/ru/gb/family_tree/model/writer/Readable.java b/src/ru/gb/family_tree/model/writer/Readable.java new file mode 100644 index 0000000..348a152 --- /dev/null +++ b/src/ru/gb/family_tree/model/writer/Readable.java @@ -0,0 +1,6 @@ +package ru.gb.family_tree.model.writer; + +public interface Readable { + Object read(); + +} diff --git a/src/ru/gb/family_tree/model/writer/Writable.java b/src/ru/gb/family_tree/model/writer/Writable.java new file mode 100644 index 0000000..b37ea73 --- /dev/null +++ b/src/ru/gb/family_tree/model/writer/Writable.java @@ -0,0 +1,7 @@ +package ru.gb.family_tree.model.writer; + +import java.io.Serializable; + +public interface Writable extends Readable{ + boolean save(Serializable serializable); +} diff --git a/src/ru/gb/family_tree/model/writer/tree.sav b/src/ru/gb/family_tree/model/writer/tree.sav new file mode 100644 index 0000000..3092168 Binary files /dev/null and b/src/ru/gb/family_tree/model/writer/tree.sav differ diff --git a/src/ru/gb/family_tree/presenter/Presenter.java b/src/ru/gb/family_tree/presenter/Presenter.java new file mode 100644 index 0000000..49cbbf9 --- /dev/null +++ b/src/ru/gb/family_tree/presenter/Presenter.java @@ -0,0 +1,47 @@ +package ru.gb.family_tree.presenter; + +import ru.gb.family_tree.model.service.FamilyTreeService; +import ru.gb.family_tree.model.service.HumanFamilyTree; +import ru.gb.family_tree.model.writer.FileHandler; +import ru.gb.family_tree.view.View; + +import java.time.LocalDate; + +public class Presenter { + private final View view; + private final FamilyTreeService service; + + public Presenter(View view) { + this.view = view; + service = new HumanFamilyTree(new FileHandler()); + } + + public void addObject(String name, LocalDate dob, String viewGender) { + service.addObject(name, dob, viewGender); + } + + public String getTree() { + return service.getTreeInfo(); + } + + public void sortByAge() { + service.sortByAge(); + } + + public void sortByName() { + service.sortByName(); + } + + public boolean saveTree() { + return service.save(); + } + + public void readTree() { + service.read(); + } + + public boolean addParentByID(int parentID, int childID) { + return service.addParentByID(parentID, childID); + } + +} diff --git a/src/ru/gb/family_tree/view/ConsoleUI.java b/src/ru/gb/family_tree/view/ConsoleUI.java new file mode 100644 index 0000000..e407f37 --- /dev/null +++ b/src/ru/gb/family_tree/view/ConsoleUI.java @@ -0,0 +1,196 @@ +package ru.gb.family_tree.view; + +import ru.gb.family_tree.presenter.Presenter; + +import java.time.LocalDate; +import java.util.Scanner; + +public class ConsoleUI implements View{ + private final Scanner scanner; + private final Presenter presenter; + private final MainMenu mainMenu; + + private boolean work; + + public ConsoleUI() { + scanner = new Scanner(System.in); + presenter = new Presenter(this); + mainMenu = new MainMenu(this); + work = true; + } + + @Override + public void start() { + hello(); + while (work) { + int choice = checkUserChoice(getUserChoice()); + if(choice != 0) mainMenu.execute(choice); + else System.out.println("Введите номер команды заново, пожалуйста."); + } + } + + private int checkUserChoice(String userChoice) { + int choice = 0; + if (userChoice.matches("\\d+")) { + choice = Integer.parseInt(userChoice); + } else { + return choice; + } + if ((choice > 0) && (choice <= mainMenu.getNumberOfCommands())) return choice; + else { + choice = 0; + } + return choice; + } + + private String getUserChoice() { + System.out.println(mainMenu.getMenu()); + return scanner.nextLine(); + } + + private void hello() { + System.out.println("Здравствуйте!"); + } + + @Override + public void printAnswer(String text) { + System.out.println(text); + } + + + public void addNewSubjectToTree() { + + //В идеале было бы хорошо сделать как с пунктами меню, но лень во мне убила перфекционизм. + + ViewGender choiceGender = getViewGender(); + + System.out.println("Введите имя:"); + String name = scanner.nextLine(); + + + System.out.println("Введите год рождения:"); + String strYear = scanner.nextLine(); + int year = 2000; + if (tryToInt(strYear)) { + year = Integer.parseInt(strYear); + }else { + System.out.println("Так как вы ввели некорректное значение, значение останется по умолчанию."); + } + + + System.out.println("Введите порядковый номер месяца рождения:"); + String strMonth = scanner.nextLine(); + int month = 1; + if (tryToInt(strMonth)) { + month = Integer.parseInt(strMonth); + }else { + System.out.println("Так как вы ввели некорректное значение, значение останется по умолчанию."); + } + + System.out.println("Введите день рождения:"); + String strDayOfMonth = scanner.nextLine(); + int dayOfMonth = 1; + if (tryToInt(strDayOfMonth)) { + dayOfMonth = Integer.parseInt(strDayOfMonth); + }else { + System.out.println("Так как вы ввели некорректное значение, значение останется по умолчанию."); + } + + presenter.addObject(name, LocalDate.of(year, month, dayOfMonth), choiceGender.toString()); + + printAnswer(presenter.getTree()); + } + + private ViewGender getViewGender() { + ViewGender choiceGender = ViewGender.NULL; + boolean isGenderCheck = false; + while (!isGenderCheck) { + choiceGender = genderChecking(); + if (choiceGender != ViewGender.NULL) isGenderCheck = true; + } + return choiceGender; + } + + private ViewGender genderChecking() { + System.out.println("Выберите пол человека:"); + System.out.println("1. Мужчина"); + System.out.println("2. Женщина"); + ViewGender viewGender = checkUserChoiceOfGender(scanner.nextLine()); + if(viewGender == ViewGender.NULL) { + System.out.println("Введите номер команды заново, пожалуйста."); + } + return viewGender; + } + + private ViewGender checkUserChoiceOfGender(String userChoice) { + int choice; + ViewGender viewGender = ViewGender.NULL; + if (userChoice.matches("\\d+")) { + choice = Integer.parseInt(userChoice); + } else { + return viewGender; + } + if ((choice > 0) && (choice < ViewGender.values().length)) { + if (choice == 1){ + viewGender = ViewGender.MALE; + } else if (choice == 2) { + viewGender = ViewGender.FEMALE; + } + return viewGender; + } + return viewGender; + } + + public void getTree() { + printAnswer(presenter.getTree()); + } + + public boolean tryToInt (String str) { + return str.matches("\\d+"); + } + + public void finish() { + work=false; + } + + public void sortByAge() { + presenter.sortByAge(); + printAnswer(presenter.getTree()); + } + + public void sortByName() { + presenter.sortByName(); + printAnswer(presenter.getTree()); + } + + public void saveTree() { + boolean saveSuccess = presenter.saveTree(); + if (saveSuccess) { + System.out.println("Сохранение прошло успешно."); + } + } + + public void readTree() { + presenter.readTree(); + printAnswer(presenter.getTree()); + } + + public void addParent() { + printAnswer(presenter.getTree()); + System.out.println("Введите ID родителя:"); + String strParentID = scanner.nextLine(); + int parentID = Integer.parseInt(strParentID); + + System.out.println("Введите ID ребёнка:"); + String strChildID = scanner.nextLine(); + int childID = Integer.parseInt(strChildID); + + boolean parentAdded = presenter.addParentByID(parentID, childID); + if (parentAdded) { + printAnswer(presenter.getTree()); + } else { + System.out.println("Вы ввели некорректные значения."); + } + } + +} diff --git a/src/ru/gb/family_tree/view/MainMenu.java b/src/ru/gb/family_tree/view/MainMenu.java new file mode 100644 index 0000000..d558d55 --- /dev/null +++ b/src/ru/gb/family_tree/view/MainMenu.java @@ -0,0 +1,39 @@ +package ru.gb.family_tree.view; + +import ru.gb.family_tree.view.command.*; + +import java.util.ArrayList; +import java.util.List; + +public class MainMenu { + private final List commands; + + public MainMenu(ConsoleUI consoleUI) { + this.commands = new ArrayList<>(); + commands.add(new AddSubject(consoleUI)); + commands.add(new AddParent(consoleUI)); + commands.add(new GetFamilyTree(consoleUI)); + commands.add(new SortByName(consoleUI)); + commands.add(new SortByAge(consoleUI)); + commands.add(new SaveTree(consoleUI)); + commands.add(new ReadTree(consoleUI)); + commands.add(new Finish(consoleUI)); + } + + public int getNumberOfCommands() { + return commands.size(); + } + public String getMenu(){ + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append("Выберите номер действия:\n"); + for (int i = 0; i < commands.size(); i++) { + stringBuilder.append(i + 1).append(". ") + .append(commands.get(i).getDescription()).append("\n"); + } + return stringBuilder.toString(); + } + public void execute(int choice){ + Command command = commands.get(choice - 1); + command.execute(); + } +} diff --git a/src/ru/gb/family_tree/view/View.java b/src/ru/gb/family_tree/view/View.java new file mode 100644 index 0000000..848756e --- /dev/null +++ b/src/ru/gb/family_tree/view/View.java @@ -0,0 +1,6 @@ +package ru.gb.family_tree.view; + +public interface View { + void start(); + void printAnswer(String text); +} diff --git a/src/ru/gb/family_tree/view/ViewGender.java b/src/ru/gb/family_tree/view/ViewGender.java new file mode 100644 index 0000000..805a2bd --- /dev/null +++ b/src/ru/gb/family_tree/view/ViewGender.java @@ -0,0 +1,5 @@ +package ru.gb.family_tree.view; + +public enum ViewGender { + MALE, FEMALE, NULL +} diff --git a/src/ru/gb/family_tree/view/command/AddParent.java b/src/ru/gb/family_tree/view/command/AddParent.java new file mode 100644 index 0000000..7d57d06 --- /dev/null +++ b/src/ru/gb/family_tree/view/command/AddParent.java @@ -0,0 +1,14 @@ +package ru.gb.family_tree.view.command; + +import ru.gb.family_tree.view.ConsoleUI; + +public class AddParent extends Command { + public AddParent(ConsoleUI consoleUI) { + super("Добавить родителя по ID.", consoleUI); + } + + @Override + public void execute() { + this.getConsoleUI().addParent(); + } +} diff --git a/src/ru/gb/family_tree/view/command/AddSubject.java b/src/ru/gb/family_tree/view/command/AddSubject.java new file mode 100644 index 0000000..0718a5b --- /dev/null +++ b/src/ru/gb/family_tree/view/command/AddSubject.java @@ -0,0 +1,15 @@ +package ru.gb.family_tree.view.command; + +import ru.gb.family_tree.view.ConsoleUI; + +public class AddSubject extends Command{ + + public AddSubject (ConsoleUI consoleUI){ + super("Добавить субъект в древо.", consoleUI); + } + + @Override + public void execute() { + super.getConsoleUI().addNewSubjectToTree(); + } +} diff --git a/src/ru/gb/family_tree/view/command/Command.java b/src/ru/gb/family_tree/view/command/Command.java new file mode 100644 index 0000000..05a53c1 --- /dev/null +++ b/src/ru/gb/family_tree/view/command/Command.java @@ -0,0 +1,23 @@ +package ru.gb.family_tree.view.command; + +import ru.gb.family_tree.view.ConsoleUI; + +public abstract class Command { + private final String description; + private final ConsoleUI consoleUI; + + public Command(String description, ConsoleUI consoleUI) { + this.description = description; + this.consoleUI = consoleUI; + } + + public String getDescription() { + return description; + } + + ConsoleUI getConsoleUI() { + return consoleUI; + } + + public abstract void execute(); +} diff --git a/src/ru/gb/family_tree/view/command/Finish.java b/src/ru/gb/family_tree/view/command/Finish.java new file mode 100644 index 0000000..d9bd913 --- /dev/null +++ b/src/ru/gb/family_tree/view/command/Finish.java @@ -0,0 +1,14 @@ +package ru.gb.family_tree.view.command; + +import ru.gb.family_tree.view.ConsoleUI; + +public class Finish extends Command { + public Finish(ConsoleUI consoleUI) { + super("Выход.", consoleUI); + } + + @Override + public void execute() { + super.getConsoleUI().finish(); + } +} diff --git a/src/ru/gb/family_tree/view/command/GetFamilyTree.java b/src/ru/gb/family_tree/view/command/GetFamilyTree.java new file mode 100644 index 0000000..4dd1ebf --- /dev/null +++ b/src/ru/gb/family_tree/view/command/GetFamilyTree.java @@ -0,0 +1,15 @@ +package ru.gb.family_tree.view.command; + +import ru.gb.family_tree.view.ConsoleUI; + +public class GetFamilyTree extends Command { + public GetFamilyTree(ConsoleUI consoleUI) { + super("Показать семейное древо.", consoleUI); + } + + + @Override + public void execute() { + super.getConsoleUI().getTree(); + } +} diff --git a/src/ru/gb/family_tree/view/command/ReadTree.java b/src/ru/gb/family_tree/view/command/ReadTree.java new file mode 100644 index 0000000..e580442 --- /dev/null +++ b/src/ru/gb/family_tree/view/command/ReadTree.java @@ -0,0 +1,14 @@ +package ru.gb.family_tree.view.command; + +import ru.gb.family_tree.view.ConsoleUI; + +public class ReadTree extends Command { + public ReadTree(ConsoleUI consoleUI) { + super("Загрузить древо.", consoleUI); + } + + @Override + public void execute() { + super.getConsoleUI().readTree(); + } +} diff --git a/src/ru/gb/family_tree/view/command/SaveTree.java b/src/ru/gb/family_tree/view/command/SaveTree.java new file mode 100644 index 0000000..c99628c --- /dev/null +++ b/src/ru/gb/family_tree/view/command/SaveTree.java @@ -0,0 +1,14 @@ +package ru.gb.family_tree.view.command; + +import ru.gb.family_tree.view.ConsoleUI; + +public class SaveTree extends Command { + public SaveTree(ConsoleUI consoleUI) { + super("Сохранить древо.",consoleUI); + } + + @Override + public void execute() { + super.getConsoleUI().saveTree(); + } +} diff --git a/src/ru/gb/family_tree/view/command/SortByAge.java b/src/ru/gb/family_tree/view/command/SortByAge.java new file mode 100644 index 0000000..855ceef --- /dev/null +++ b/src/ru/gb/family_tree/view/command/SortByAge.java @@ -0,0 +1,14 @@ +package ru.gb.family_tree.view.command; + +import ru.gb.family_tree.view.ConsoleUI; + +public class SortByAge extends Command { + public SortByAge(ConsoleUI consoleUI) { + super("Сортировать по возрасту.", consoleUI); + } + + @Override + public void execute() { + super.getConsoleUI().sortByAge(); + } +} diff --git a/src/ru/gb/family_tree/view/command/SortByName.java b/src/ru/gb/family_tree/view/command/SortByName.java new file mode 100644 index 0000000..6683c48 --- /dev/null +++ b/src/ru/gb/family_tree/view/command/SortByName.java @@ -0,0 +1,14 @@ +package ru.gb.family_tree.view.command; + +import ru.gb.family_tree.view.ConsoleUI; + +public class SortByName extends Command { + public SortByName(ConsoleUI consoleUI) { + super("Сортировать по имени", consoleUI); + } + + @Override + public void execute() { + super.getConsoleUI().sortByName(); + } +}