Skip to content
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
4 changes: 2 additions & 2 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ subprojects {
}

dependencies {
compile group: 'junit', name: 'junit', version: '4.12'
compile group: 'org.assertj', name: 'assertj-core', version: '3.10.0'
implementation group: 'junit', name: 'junit', version: '4.12'
implementation group: 'org.assertj', name: 'assertj-core', version: '3.10.0'
}
}
4 changes: 2 additions & 2 deletions gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#Tue Oct 02 17:25:09 YEKT 2018
#Tue Nov 25 03:59:51 YEKT 2025
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.8.1-all.zip
8 changes: 8 additions & 0 deletions task01/src/com/example/task01/Level.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.example.task01;

public enum Level {
DEBUG,
INFO,
WARNING,
ERROR
}
73 changes: 73 additions & 0 deletions task01/src/com/example/task01/Logger.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
package com.example.task01;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

public class Logger {
private String name;
private Level level;
private static ArrayList<Logger> loggers = new ArrayList<Logger>();
public Logger(String name) {
this.name = name;
}
public String getName(){
return name;
}
public static Logger getLogger(String name){
for (int i= 0; i< loggers.size();i++){
if(loggers.get(i).getName().equals(name)){
return loggers.get(i);
}
}
Logger logger = new Logger(name);
loggers.add(logger);
return logger;
}
public void setLevel(Level level) {
this.level = level;
}
public Level getLevel() {
return level;
}
private String formatMessage(Level level, String Message){
String date = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(new Date());

return String.format("[%s] %s %s - %s", level.name(), date, this.name, Message);
}
public void log(Level level, String message){

if(level.compareTo(this.level) >= 0){
System.out.println(formatMessage(level, message));
}
}
public void log(Level level, String format, Object... args){
if(level.compareTo(this.level) >= 0){
System.out.println(formatMessage(level, String.format(format, args)));
}
}
public void debug(String message){
log(Level.DEBUG, message);
}
public void debug(String format, Object... args){
log(Level.DEBUG,format,args);
}
public void info(String message){
log(Level.INFO, message);
}
public void info(String format, Object... args){
log(Level.INFO, format, args);
}
public void warning(String message){
log(Level.WARNING, message);
}
public void warning(String format, Object... args){
log(Level.WARNING, format, args);
}
public void error(String message){
log(Level.ERROR, message);
}
public void error(String format, Object... args){
log(Level.ERROR, format, args);
}
}
18 changes: 18 additions & 0 deletions task02/src/com/example/task02/DiscountBill.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.example.task02;

public class DiscountBill extends Bill{
private final double discount;
public DiscountBill(int discount) {
this.discount = discount;
}
public String getDiscount() {
return discount + "%";
}
public long getAbsoluteDiscount(){
return (long)(super.getPrice() * ((double)discount / 100));
}
@Override
public long getPrice() {
return super.getPrice() - getAbsoluteDiscount();
}
}
6 changes: 3 additions & 3 deletions task03/src/com/example/task03/Milliseconds.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,11 @@ public long toMillis() {

@Override
public long toSeconds() {
return amount / 1000;
return Math.round(amount / 1000.0); // Округление по правилам
}

@Override
public long toMinutes() {
return amount / 1000 * 60;
return Math.round(amount / (1000.0 * 60)); // Округление по правилам
}
}
}
15 changes: 6 additions & 9 deletions task03/src/com/example/task03/Minutes.java
Original file line number Diff line number Diff line change
@@ -1,27 +1,24 @@
package com.example.task03;

public class Minutes implements TimeUnit {
private final long amount;

public Minutes(long amount) {
// TODO: реализовать
throw new UnsupportedOperationException();
this.amount = amount;
}

@Override
public long toMillis() {
// TODO: реализовать
throw new UnsupportedOperationException();
return amount * 60 * 1000;
}

@Override
public long toSeconds() {
// TODO: реализовать
throw new UnsupportedOperationException();
return amount * 60;
}

@Override
public long toMinutes() {
// TODO: реализовать
throw new UnsupportedOperationException();
return amount;
}
}
}
4 changes: 2 additions & 2 deletions task03/src/com/example/task03/Seconds.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,6 @@ public long toSeconds() {

@Override
public long toMinutes() {
return Math.round(amount / 60);
return Math.round(amount / 60.0); // Округление по правилам
}
}
}
2 changes: 1 addition & 1 deletion task03/src/com/example/task03/TimeUnitUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,4 +24,4 @@ public static Milliseconds toMillis(Seconds seconds) {
public static Seconds toSeconds(Milliseconds millis) {
return new Seconds(millis.toSeconds());
}
}
}
11 changes: 11 additions & 0 deletions task04/src/com/example/task04/ConsoleHandler.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.example.task04;

/**
* Обработчик, выводящий сообщения в консоль
*/
public class ConsoleHandler implements MessageHandler {
@Override
public void handle(String message) {
System.out.println(message);
}
}
25 changes: 25 additions & 0 deletions task04/src/com/example/task04/FileHandler.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.example.task04;

import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;

/**
* Обработчик, выводящий сообщения в файл
*/
public class FileHandler implements MessageHandler {
private final String filePath;

public FileHandler(String filePath) {
this.filePath = filePath;
}

@Override
public void handle(String message) {
try (Writer writer = new FileWriter(filePath, true)) {
writer.write(message + System.lineSeparator());
} catch (IOException e) {
System.err.println("Ошибка записи в файл: " + e.getMessage());
}
}
}
95 changes: 95 additions & 0 deletions task04/src/com/example/task04/Logger.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
package com.example.task04;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;

/**
* Продвинутый логгер с поддержкой multiple handlers
*/
public class Logger {
private final String name;
private final List<MessageHandler> handlers;
private Level level;

public enum Level {
DEBUG,
INFO,
WARNING,
ERROR
}

public Logger(String name) {
this.name = name;
this.handlers = new ArrayList<>();
this.level = Level.DEBUG;
}

public Logger(String name, Level level) {
this(name);
this.level = level;
}

/**
* Добавляет обработчик сообщений
* @param handler обработчик для добавления
*/
public void addHandler(MessageHandler handler) {
handlers.add(handler);
}

/**
* Устанавливает уровень логирования
* @param level уровень логирования
*/
public void setLevel(Level level) {
this.level = level;
}

/**
* @return уровень логирования
*/
public Level getLevel() {
return level;
}

/**
* @return имя логгера
*/
public String getName() {
return name;
}

private void log(Level level, String message) {
if (level.ordinal() < this.level.ordinal()) {
return;
}

String formattedMessage = String.format("[%s] %s %s - %s",
level,
LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")),
name,
message);

for (MessageHandler handler : handlers) {
handler.handle(formattedMessage);
}
}

public void debug(String message) {
log(Level.DEBUG, message);
}

public void info(String message) {
log(Level.INFO, message);
}

public void warning(String message) {
log(Level.WARNING, message);
}

public void error(String message) {
log(Level.ERROR, message);
}
}
45 changes: 45 additions & 0 deletions task04/src/com/example/task04/MemoryHandler.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package com.example.task04;

import java.util.ArrayList;
import java.util.List;

/**
* Обработчик-прокси, аккумулирующий сообщения в памяти
*/
public class MemoryHandler implements MessageHandler {
private final MessageHandler targetHandler;
private final int bufferSize;
private final List<String> buffer;

public MemoryHandler(MessageHandler targetHandler, int bufferSize) {
this.targetHandler = targetHandler;
this.bufferSize = bufferSize;
this.buffer = new ArrayList<>();
}

@Override
public void handle(String message) {
buffer.add(message);

if (buffer.size() >= bufferSize) {
flush();
}
}

/**
* Принудительно отправляет накопленные сообщения в целевой обработчик
*/
public void flush() {
for (String message : buffer) {
targetHandler.handle(message);
}
buffer.clear();
}

/**
* @return количество сообщений в буфере
*/
public int getBufferSize() {
return buffer.size();
}
}
12 changes: 12 additions & 0 deletions task04/src/com/example/task04/MessageHandler.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.example.task04;

/**
* Обработчик сообщений логгера
*/
public interface MessageHandler {
/**
* Обрабатывает сообщение логгера
* @param message сообщение для обработки
*/
void handle(String message);
}
Loading