diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..9f11b75
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+.idea/
diff --git a/HomeWork.iml b/HomeWork.iml
new file mode 100644
index 0000000..c90834f
--- /dev/null
+++ b/HomeWork.iml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ 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..19d13e3
--- /dev/null
+++ b/src/ru/gb/family_tree/Main.java
@@ -0,0 +1,17 @@
+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/FamilyTree.java b/src/ru/gb/family_tree/model/FamilyTree.java
new file mode 100644
index 0000000..2c96f39
--- /dev/null
+++ b/src/ru/gb/family_tree/model/FamilyTree.java
@@ -0,0 +1,53 @@
+package ru.gb.family_tree.model;
+
+import ru.gb.family_tree.model.comparators.ComparatorByAge;
+import ru.gb.family_tree.model.comparators.ComparatorByName;
+import ru.gb.family_tree.model.iterators.MemberIterator;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * Выполнятся принцип "I" (разделение интерфейсов)
+ *
+ */
+public class FamilyTree implements Serializable, Iterable {
+
+ private final List familyTree = new ArrayList();
+
+ public FamilyTree() {
+ }
+
+
+ public void addFamilyTreeMember(T member) {
+ familyTree.add(member);
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder stringBuilder = new StringBuilder();
+ for (T member : familyTree) {
+ stringBuilder.append(member);
+ }
+ return stringBuilder.toString();
+ }
+
+ public void addParent(T parent, T child) {
+ if (parent.getGender().equals(Gender.MALE)) {
+ child.setFather(parent);
+ } else child.setMother(parent);
+ parent.addChild(child);
+ }
+
+ public void sortByName() {
+ familyTree.sort(new ComparatorByName<>());
+ }
+ public void sortByAge() { familyTree.sort(new ComparatorByAge<>()); }
+
+ @Override
+ public Iterator iterator() {
+ return new MemberIterator<>(familyTree);
+ }
+}
diff --git a/src/ru/gb/family_tree/model/Gender.java b/src/ru/gb/family_tree/model/Gender.java
new file mode 100644
index 0000000..bca6f98
--- /dev/null
+++ b/src/ru/gb/family_tree/model/Gender.java
@@ -0,0 +1,9 @@
+package ru.gb.family_tree.model;
+
+import java.io.Serializable;
+
+public enum Gender implements Serializable {
+ FEMALE,
+ MALE
+
+}
diff --git a/src/ru/gb/family_tree/model/Member.java b/src/ru/gb/family_tree/model/Member.java
new file mode 100644
index 0000000..b08651a
--- /dev/null
+++ b/src/ru/gb/family_tree/model/Member.java
@@ -0,0 +1,21 @@
+package ru.gb.family_tree.model;
+
+import java.time.LocalDate;
+
+public abstract class Member {
+
+
+ abstract public Gender getGender();
+
+ abstract public void setFather(T father);
+
+ abstract public void setMother(T mother);
+
+ abstract public void addChild(T child);
+
+ abstract public LocalDate getDateOfBirth();
+
+ abstract public String getName();
+
+
+}
diff --git a/src/ru/gb/family_tree/model/Person.java b/src/ru/gb/family_tree/model/Person.java
new file mode 100644
index 0000000..a30ce9c
--- /dev/null
+++ b/src/ru/gb/family_tree/model/Person.java
@@ -0,0 +1,97 @@
+package ru.gb.family_tree.model;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.util.ArrayList;
+import java.util.List;
+/**
+Выполняется принцип S (Единственной ответственности)
+ **/
+public class Person extends Member implements Serializable {
+
+ private String name;
+ private Gender gender;
+ private LocalDate dateOfDeath;
+ private LocalDate dateOfBirth;
+ private Person father, mother;
+ private final List children = new ArrayList<>();
+
+ public List getChildren() {
+ return children;
+ }
+ public Person(String name, Gender gender) {
+ this.name = name;
+ this.gender = gender;
+ }
+
+ public Person(String name) {
+ this.name = name;
+ }
+
+ public Person(){
+ this ("unknown");
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ @Override
+ public Gender getGender() {
+ return gender;
+ }
+
+ public void setGender(Gender gender) {
+ this.gender = gender;
+ }
+
+ public LocalDate getDateOfDeath() {
+ return dateOfDeath;
+ }
+
+ public void setDateOfDeath(LocalDate dateOfDeath) {
+ this.dateOfDeath = dateOfDeath;
+ }
+
+ public LocalDate getDateOfBirth() {
+ return dateOfBirth;
+ }
+
+ public void setDateOfBirth(LocalDate dateOfBirth) {
+ this.dateOfBirth = dateOfBirth;
+ }
+
+ public Person getFather() {
+ return father;
+ }
+ @Override
+ public void setFather(Person father) {
+ this.father = father;
+
+ }
+
+ public Person getMother() {
+ return mother;
+ }
+ @Override
+ public void setMother(Person mother) {
+ this.mother = mother;
+
+ }
+
+ @Override
+ public void addChild(Person child) {
+ children.add(child);
+ }
+
+ @Override
+ public String toString() {
+ return "Человек по имени " + name;
+ }
+
+
+}
diff --git a/src/ru/gb/family_tree/model/comparators/ComparatorByAge.java b/src/ru/gb/family_tree/model/comparators/ComparatorByAge.java
new file mode 100644
index 0000000..0ed204b
--- /dev/null
+++ b/src/ru/gb/family_tree/model/comparators/ComparatorByAge.java
@@ -0,0 +1,18 @@
+package ru.gb.family_tree.model.comparators;
+
+import ru.gb.family_tree.model.Member;
+
+import java.util.Comparator;
+
+public class ComparatorByAge implements Comparator {
+ @Override
+ public int compare(T o1, T o2) {
+
+ if (o1.getDateOfBirth().isBefore(o2.getDateOfBirth()) )
+ return 1;
+ else if (o1.getDateOfBirth().isAfter(o2.getDateOfBirth()))
+ return -1;
+ else
+ return 0;
+ }
+}
diff --git a/src/ru/gb/family_tree/model/comparators/ComparatorByName.java b/src/ru/gb/family_tree/model/comparators/ComparatorByName.java
new file mode 100644
index 0000000..47f6c1e
--- /dev/null
+++ b/src/ru/gb/family_tree/model/comparators/ComparatorByName.java
@@ -0,0 +1,13 @@
+package ru.gb.family_tree.model.comparators;
+
+import ru.gb.family_tree.model.Member;
+
+import java.util.Comparator;
+
+public class ComparatorByName 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/iterators/MemberIterator.java b/src/ru/gb/family_tree/model/iterators/MemberIterator.java
new file mode 100644
index 0000000..2588839
--- /dev/null
+++ b/src/ru/gb/family_tree/model/iterators/MemberIterator.java
@@ -0,0 +1,23 @@
+package ru.gb.family_tree.model.iterators;
+
+import java.util.Iterator;
+import java.util.List;
+
+public class MemberIterator implements Iterator {
+ private int index = 0;
+ private final List listMembers;
+
+ public MemberIterator(List listMembers) {
+ this.listMembers = listMembers;
+ }
+
+ @Override
+ public boolean hasNext() {
+ return index < listMembers.size();
+ }
+
+ @Override
+ public T next() {
+ return listMembers.get(index++);
+ }
+}
diff --git a/src/ru/gb/family_tree/model/service/Builder.java b/src/ru/gb/family_tree/model/service/Builder.java
new file mode 100644
index 0000000..380d426
--- /dev/null
+++ b/src/ru/gb/family_tree/model/service/Builder.java
@@ -0,0 +1,23 @@
+package ru.gb.family_tree.model.service;
+
+import ru.gb.family_tree.model.Member;
+
+import java.time.LocalDate;
+
+public abstract class Builder {
+ protected T member;
+
+ abstract Builder create();
+
+ abstract Builder buildName(String name);
+
+ abstract Builder buildDateOfBirth(LocalDate date);
+
+ abstract Builder buildDateOfDeath(LocalDate date);
+
+
+ public T build() {
+ return member;
+ }
+
+}
diff --git a/src/ru/gb/family_tree/model/service/PersonBuilder.java b/src/ru/gb/family_tree/model/service/PersonBuilder.java
new file mode 100644
index 0000000..b980ffc
--- /dev/null
+++ b/src/ru/gb/family_tree/model/service/PersonBuilder.java
@@ -0,0 +1,33 @@
+package ru.gb.family_tree.model.service;
+
+import ru.gb.family_tree.model.Person;
+
+import java.time.LocalDate;
+
+public class PersonBuilder extends Builder {
+
+
+ @Override
+ PersonBuilder create() {
+ member = new Person();
+ return this;
+ }
+
+ @Override
+ PersonBuilder buildName(String name) {
+ member.setName(name);
+ return this;
+ }
+
+ @Override
+ PersonBuilder buildDateOfBirth(LocalDate date) {
+ member.setDateOfBirth(date);
+ return this;
+ }
+
+ @Override
+ PersonBuilder buildDateOfDeath(LocalDate date) {
+ member.setDateOfDeath(date);
+ return this;
+ }
+}
diff --git a/src/ru/gb/family_tree/model/service/Service.java b/src/ru/gb/family_tree/model/service/Service.java
new file mode 100644
index 0000000..0262e9e
--- /dev/null
+++ b/src/ru/gb/family_tree/model/service/Service.java
@@ -0,0 +1,71 @@
+package ru.gb.family_tree.model.service;
+
+import ru.gb.family_tree.model.FamilyTree;
+import ru.gb.family_tree.model.Gender;
+import ru.gb.family_tree.model.Person;
+import ru.gb.family_tree.model.writer.Writable;
+
+import java.time.LocalDate;
+
+public class Service {
+
+ private FamilyTree familyTree = new FamilyTree<>();
+
+
+
+ public void addFamilyTreeMember(String name, String sGender) {
+ Gender gender;
+ if (sGender.equals("M"))
+ gender = Gender.MALE;
+ else
+ gender = Gender.FEMALE;
+ Person person = new Person(name, gender);
+ familyTree.addFamilyTreeMember(person);
+
+ }
+
+ public String getFamilyTreeInfo() {
+// StringBuilder stringBuilder = new StringBuilder();
+// for (Person person : familyTree) {
+// stringBuilder.append(person);
+// }
+// return stringBuilder.toString();
+ return familyTree.toString();
+
+ }
+
+ public void sortByName() {
+ familyTree.sortByName();
+ }
+
+ public void sortByAge() {
+ familyTree.sortByAge();
+ }
+
+ public void addParent(Person person, Person child) {
+ familyTree.addParent(person, child);
+ }
+
+
+ public void save(Writable writable) {
+
+ writable.save(familyTree);
+
+ }
+
+ public void load(Writable writable) {
+
+ familyTree = (FamilyTree) writable.load();
+
+ }
+
+ void Personmake() {
+ PersonBuilder personBuilder = new PersonBuilder();
+ Person person = personBuilder
+ .create()
+ .buildName("Petya")
+ .buildDateOfBirth(LocalDate.now())
+ .buildDateOfDeath(LocalDate.now())
+ .build();
+ }
+}
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..f29cbe5
--- /dev/null
+++ b/src/ru/gb/family_tree/model/writer/FileHandler.java
@@ -0,0 +1,44 @@
+package ru.gb.family_tree.model.writer;
+
+import java.io.*;
+
+/*
+Принцип "D" на базовом уровне частный FileHandler знает об интерфейсе Writable, но более общий интерфейс Writable
+ не знает о классе FileHandler.
+ */
+
+public class FileHandler implements Writable {
+
+ @Override
+ public void save(Serializable serializable) {
+
+ ObjectOutputStream objectOutputStream = null;
+ try {
+ objectOutputStream = new ObjectOutputStream(new FileOutputStream("person.out"));
+ objectOutputStream.writeObject(serializable);
+ objectOutputStream.close();
+
+ } catch (IOException e) {
+
+ throw new RuntimeException(e);
+ }
+
+ }
+
+ @Override
+ public Object load() {
+ ObjectInputStream objectInputStream = null;
+ try {
+ objectInputStream = new ObjectInputStream(new FileInputStream("person.out"));
+ Object familyTree = objectInputStream.readObject();
+ //System.out.println(familyTree);
+
+ objectInputStream.close();
+
+ return familyTree;
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+
+ }
+}
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..7193e89
--- /dev/null
+++ b/src/ru/gb/family_tree/model/writer/Writable.java
@@ -0,0 +1,9 @@
+package ru.gb.family_tree.model.writer;
+
+import java.io.Serializable;
+
+public interface Writable {
+ void save(Serializable serializable) ;
+ Object load ();
+
+}
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..c2d0d86
--- /dev/null
+++ b/src/ru/gb/family_tree/presenter/Presenter.java
@@ -0,0 +1,44 @@
+package ru.gb.family_tree.presenter;
+
+import ru.gb.family_tree.model.service.Service;
+import ru.gb.family_tree.model.writer.FileHandler;
+import ru.gb.family_tree.view.View;
+
+public class Presenter {
+ private View UI;
+ private Service service;
+
+
+ public Presenter(View UI) {
+
+ this.UI = UI;
+ this.service = new Service();
+ }
+
+ public void addFamilyTreeMember(String name, String sGender) {
+ service.addFamilyTreeMember(name, sGender);
+
+ }
+
+ public void getFamilyTreeInfo() {
+ String info = service.getFamilyTreeInfo();
+ UI.print(info);
+ }
+
+ public void sortByName() {
+ service.sortByName();
+ }
+
+ public void sortByAge() {
+ service.sortByAge();
+
+ }
+
+ public void saveToFile() {
+ service.save(new FileHandler());
+ }
+
+ public void loadFromFile() {
+ service.load(new FileHandler());
+ }
+}
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..c3381d1
--- /dev/null
+++ b/src/ru/gb/family_tree/view/ConsoleUI.java
@@ -0,0 +1,141 @@
+package ru.gb.family_tree.view;
+
+import ru.gb.family_tree.presenter.Presenter;
+
+import java.util.Scanner;
+/*
+Выполняется принцип "О" - принцип открытости - закрытости. Можно бесконечно расширять функционал класса.
+Нарушается в методе "printMenu"
+ */
+
+public class ConsoleUI implements View {
+
+ private static final String INPUT_ERROR = "Вы ввели неверное значение";
+ private final Scanner scanner;
+ private boolean work;
+ private static int N = 0;
+ private Presenter presenter;
+ private MainMenu menu;
+
+
+ public ConsoleUI() {
+ scanner = new Scanner(System.in);
+ presenter = new Presenter(this);
+ work = true;
+ menu = new MainMenu(this);
+
+ }
+
+ @Override
+ public void print(String text) {
+ System.out.println(text);
+ }
+
+ @Override
+ public void printf(String text, String placeHolder) {
+ System.out.printf(text, placeHolder);
+ }
+
+ @Override
+ public String read() {
+ return scanner.nextLine();
+ }
+
+ @Override
+ public void start() {
+ hello();
+ while (work) {
+ printMenu();
+ execute();
+ }
+ }
+
+ @Override
+ public void finish() {
+ System.out.println("Приятно было пообщаться");
+ work = false;
+ }
+
+ private void hello() {
+ System.out.println("Доброго времени суток!");
+ }
+
+ private void execute(){
+ String line = scanner.nextLine();
+ if (checkTextForInt(line)){
+ int numCommand = Integer.parseInt(line);
+ if (checkCommand(numCommand)){
+ menu.execute(numCommand);
+ }
+ }
+ }
+
+ private boolean checkTextForInt(String text) {
+ if (text.matches("[0-9]+")) {
+ return true;
+ } else {
+ inputError();
+ return false;
+ }
+ }
+
+ private boolean checkCommand(int numCommand) {
+ if (numCommand <= menu.getSize()) {
+ return true;
+ } else {
+ inputError();
+ return false;
+ }
+ }
+
+ private void printMenu() {
+
+ System.out.println(menu.menu());
+// N = 0;
+// System.out.printf("%d. Добавить члена семьи \n", ++N);
+// System.out.printf("%d. Вывести информацию о семейном дереве\n", ++N);
+// System.out.printf("%d. Сортировать членов семейного дерева по имени\n", ++N);
+// System.out.printf("%d. Сортировать членов семейного дерева по возрасту\n", ++N);
+// System.out.printf("%d. Сохранить в файл]\n", ++N);
+// System.out.printf("%d. Загрузить из файла\n", ++N);
+// System.out.printf("%d. Закончить работу\n", ++N);
+ }
+
+ private void inputError() {
+ System.out.println(INPUT_ERROR);
+ }
+
+ @Override
+ public void addFamilyTreeMember(String name, String sGender) {
+ presenter.addFamilyTreeMember(name, sGender);
+ }
+
+ @Override
+ public void getFamilyTreeInfo() {
+ presenter.getFamilyTreeInfo();
+
+ }
+
+ @Override
+ public void sortByName() {
+ presenter.sortByName();
+
+ }
+
+ @Override
+ public void sortByAge() {
+ presenter.sortByAge();
+ }
+
+ @Override
+ public void saveToFile () {
+ presenter.saveToFile();
+ }
+
+ @Override
+ public void loadFromFile() {
+ presenter.loadFromFile();
+ }
+
+
+}
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..0e4ff0a
--- /dev/null
+++ b/src/ru/gb/family_tree/view/MainMenu.java
@@ -0,0 +1,89 @@
+package ru.gb.family_tree.view;
+
+import ru.gb.family_tree.view.commands.*;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/*
+Выполняется принцип "L" В конструкторе приходит параметр типа View, который более общий, чем класс ConsoleUI.
+ */
+public class MainMenu {
+ private View UI;
+ private List commandList;
+
+ public MainMenu(View consoleUI) {
+ commandList = new ArrayList<>();
+ commandList.add(new AddPerson(consoleUI));
+ commandList.add(new GetInfo(consoleUI));
+ commandList.add(new SortByName(consoleUI));
+ commandList.add(new SortByAge(consoleUI));
+ commandList.add(new Finish(consoleUI));
+ }
+
+ public String menu() {
+ StringBuilder stringBuilder = new StringBuilder();
+ for (int i = 0; i < commandList.size(); i++) {
+ stringBuilder.append(i + 1);
+ stringBuilder.append(". ");
+ stringBuilder.append(commandList.get(i).getDescription());
+ stringBuilder.append("\n");
+ }
+ return stringBuilder.toString();
+ }
+ public void execute(int choice){
+ Command command = commandList.get(choice-1);
+ command.execute();
+ }
+ public int getSize(){
+ return commandList.size();
+ }
+
+// public void start(int choice) {
+//
+// switch (choice) {
+// case 1:
+// UI.print("Введите имя");
+// String name = UI.read();
+// UI.print("Введите пол. Если женский то Ж, если мужской то Ж");
+// String sGender = UI.read();
+// Gender gender;
+// if (sGender.equals("M"))
+// gender = Gender.MALE;
+// else
+// gender = Gender.FEMALE;
+// Person person = new Person(name, gender);
+// UI.addFamilyTreeMember(person);
+// UI.printf("Член семейного дерева %s добавлен\n", name);
+// break;
+// case 2:
+// UI.print("Семейное дерево:");
+// UI.getFamilyTreeInfo();
+// break;
+// case 3:
+// UI.sortByName();
+// UI.print("Успешно отсортировано по имени");
+//
+// break;
+// case 4:
+// UI.sortByAge();
+// UI.print("Успешно отсортировано по возрасту");
+// break;
+// case 5:
+// UI.save(SavingType.FILE);
+// UI.print("Сохранить в файл");
+// break;
+// case 6:
+// UI.load(SavingType.FILE);
+// UI.print("Загрузить из файла");
+// break;
+// case 7:
+// UI.finish();
+// break;
+// default:
+// UI.print("ошибка");
+//
+// }
+//
+// }
+}
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..22fe930
--- /dev/null
+++ b/src/ru/gb/family_tree/view/View.java
@@ -0,0 +1,26 @@
+package ru.gb.family_tree.view;
+
+public interface View {
+ void print(String text);
+
+ void start();
+
+ String read();
+
+ void printf(String text, String placeHolder);
+
+ void finish();
+
+ void addFamilyTreeMember(String name, String sGender);
+
+
+ void getFamilyTreeInfo();
+
+ void sortByName();
+
+ void sortByAge();
+
+ void saveToFile();
+ void loadFromFile();
+}
+
diff --git a/src/ru/gb/family_tree/view/commands/AddPerson.java b/src/ru/gb/family_tree/view/commands/AddPerson.java
new file mode 100644
index 0000000..d38e635
--- /dev/null
+++ b/src/ru/gb/family_tree/view/commands/AddPerson.java
@@ -0,0 +1,23 @@
+package ru.gb.family_tree.view.commands;
+
+import ru.gb.family_tree.view.View;
+
+public class AddPerson extends Command {
+
+ public AddPerson(View consoleUI) {
+ super(consoleUI);
+ description = "Добавить члена фамильного дерева";
+
+ }
+
+ @Override
+ public void execute() {
+ consoleUI.print("Введите имя");
+ String name = consoleUI.read();
+ consoleUI.print("Введите пол. Если женский то Ж, если мужской то Ж");
+ String sGender = consoleUI.read();
+ consoleUI.addFamilyTreeMember(name, sGender);
+ consoleUI.printf("Член семейного дерева %s добавлен\n", name);
+ }
+
+}
diff --git a/src/ru/gb/family_tree/view/commands/Command.java b/src/ru/gb/family_tree/view/commands/Command.java
new file mode 100644
index 0000000..d5bb4df
--- /dev/null
+++ b/src/ru/gb/family_tree/view/commands/Command.java
@@ -0,0 +1,18 @@
+package ru.gb.family_tree.view.commands;
+
+import ru.gb.family_tree.view.View;
+
+public abstract class Command {
+ String description;
+ View consoleUI;
+
+ public Command(View consoleUI) {
+ this.consoleUI = consoleUI;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public abstract void execute();
+}
\ No newline at end of file
diff --git a/src/ru/gb/family_tree/view/commands/Finish.java b/src/ru/gb/family_tree/view/commands/Finish.java
new file mode 100644
index 0000000..a230207
--- /dev/null
+++ b/src/ru/gb/family_tree/view/commands/Finish.java
@@ -0,0 +1,15 @@
+package ru.gb.family_tree.view.commands;
+
+import ru.gb.family_tree.view.View;
+
+public class Finish extends Command {
+ public Finish(View consoleUI) {
+ super(consoleUI);
+ description = "Закончить работу";
+ }
+
+ @Override
+ public void execute() {
+ consoleUI.finish();
+ }
+}
diff --git a/src/ru/gb/family_tree/view/commands/GetInfo.java b/src/ru/gb/family_tree/view/commands/GetInfo.java
new file mode 100644
index 0000000..a99813e
--- /dev/null
+++ b/src/ru/gb/family_tree/view/commands/GetInfo.java
@@ -0,0 +1,16 @@
+package ru.gb.family_tree.view.commands;
+
+import ru.gb.family_tree.view.View;
+
+public class GetInfo extends Command {
+ public GetInfo(View consoleUI) {
+ super(consoleUI);
+ description = "Получить информацию о семейном дереве";
+ }
+
+ @Override
+ public void execute() {
+
+ consoleUI.getFamilyTreeInfo();
+ }
+}
diff --git a/src/ru/gb/family_tree/view/commands/LoadFromFile.java b/src/ru/gb/family_tree/view/commands/LoadFromFile.java
new file mode 100644
index 0000000..54f0963
--- /dev/null
+++ b/src/ru/gb/family_tree/view/commands/LoadFromFile.java
@@ -0,0 +1,15 @@
+package ru.gb.family_tree.view.commands;
+
+import ru.gb.family_tree.view.View;
+
+public class LoadFromFile extends Command {
+ public LoadFromFile(View consoleUI) {
+ super(consoleUI);
+ description = "Загрузить из файла";
+ }
+
+ @Override
+ public void execute() {
+ consoleUI.loadFromFile();
+ }
+}
diff --git a/src/ru/gb/family_tree/view/commands/SaveToFile.java b/src/ru/gb/family_tree/view/commands/SaveToFile.java
new file mode 100644
index 0000000..2607c59
--- /dev/null
+++ b/src/ru/gb/family_tree/view/commands/SaveToFile.java
@@ -0,0 +1,15 @@
+package ru.gb.family_tree.view.commands;
+
+import ru.gb.family_tree.view.View;
+
+public class SaveToFile extends Command {
+ public SaveToFile(View consoleUI) {
+ super(consoleUI);
+ description = "Сохранить в файл";
+ }
+
+ @Override
+ public void execute() {
+ consoleUI.saveToFile();
+ }
+}
diff --git a/src/ru/gb/family_tree/view/commands/SortByAge.java b/src/ru/gb/family_tree/view/commands/SortByAge.java
new file mode 100644
index 0000000..462c72a
--- /dev/null
+++ b/src/ru/gb/family_tree/view/commands/SortByAge.java
@@ -0,0 +1,15 @@
+package ru.gb.family_tree.view.commands;
+
+import ru.gb.family_tree.view.View;
+
+public class SortByAge extends Command {
+ public SortByAge(View consoleUI) {
+ super(consoleUI);
+ description = "Сортировка по возрасту";
+ }
+
+ @Override
+ public void execute() {
+ consoleUI.sortByAge();
+ }
+}
diff --git a/src/ru/gb/family_tree/view/commands/SortByName.java b/src/ru/gb/family_tree/view/commands/SortByName.java
new file mode 100644
index 0000000..d8e48bf
--- /dev/null
+++ b/src/ru/gb/family_tree/view/commands/SortByName.java
@@ -0,0 +1,15 @@
+package ru.gb.family_tree.view.commands;
+
+import ru.gb.family_tree.view.View;
+
+public class SortByName extends Command{
+ public SortByName(View consoleUI) {
+ super(consoleUI);
+ description = "Сортировка по имени";
+ }
+
+ @Override
+ public void execute() {
+ consoleUI.sortByName();
+ }
+}