Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Выполнение тестового задания #8

Open
wants to merge 5 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 30 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# 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*

# Intelij
.idea/

# Binaries
target/
49 changes: 49 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,55 @@ CodeKiller777

## Автор решения

Летунов Алексей Романович

## Описание реализации

Предметная область проекта состоит из одного класса ``org.letunov.domain.EmployeeCommit``, который содержит поля отражающие псевдоним
пользователя, сокращенный хэш коммита и дату и время создания коммита.

Класс ``org.letunov.core.ScoreManager`` хранит пользователей, производивших коммиты и соотствующее им число коммитов в
HashMap, где ключ - это псевдоним пользователя, а значение - количество коммитов, который этот пользователь совершил.
Метод ``getTop`` возвращает топ активных пользователь, начиная с самого активного.

Класс ``org.letunov.core.ReportManager`` хранит поля, указывающие пути к файлу ``commits.text`` и ``result.txt``. Оба файла
должны находится в месте, откуда запущена программа, то есть в корневом каталоге проекта.
Также данный класс открывает и возвращает потоки для чтения из ``commits.txt`` и записи в ``result.txt``.

Объект класса ``org.letunov.core.EmployeeCommitReader`` создается на основе объекта ``Reader`` и позволяет считывать объекты
класса ``EmployeeCommit`` из потока ввода. Метод ``nextEmployeeCommit`` возращает объект ``EmployeeCommit`` из следующей строки
потока, либо ``null``, если строка пустая или поток больше не имеет строк.

Главный класс ``App`` содержит метод ``main``. Метод передает поток, полученный в результате вызова метода ``getCommitsReader``
класса ``ReportManager``, в качестве аргумента конструктору ``EmployeeCommitReader``. Производится построчное чтение объектов
``EmployeeCommit`` и наполнение ими экзепляра класса ``ScoreManager``. После чего производится подсчет наиболее активных
пользователей методом ``getTop`` класса ``ScoreManager`` и список их псевдонимов записывается в поток, возвращенный методом ``getResultReportWriter`` класса
``ReportManager``.

Описание классов находится в ``target/docs/`` и компилируется командой
```
javadoc -d target/docs -cp src/main/java/ -subpackages org.letunov
```

## Инструкция по сборке и запуску решения

Все команды выполняются из корневой папки проекта

+ С использованием утилит java и javac
1. Скомпилировать исходники
```
javac -d target/classes -cp src/main/java/ src/main/java/org/letunov/App.java
```
2. Запустить программу
```
java -cp target/classes org.letunov.App
```
+ С использованием Maven
1. Скомпилировать исходники и упаковать их
```
mvn clean package
```
2. Запустить проект
```
java -jar target/school2024-test-task4-1.0-SNAPSHOT.jar
```
Loading