From d9a604a12b8ffe91b420dbbe6aa8794c7a4c39f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1?= <мфв> Date: Thu, 6 Nov 2025 15:02:28 +0500 Subject: [PATCH] =?UTF-8?q?=D0=93=D1=80=D0=B8=D1=88=D0=B8=D0=BD=20=D0=92?= =?UTF-8?q?=D0=B0=D0=B4=D0=B8=D0=BC=20=D0=9F=D1=80=D0=B8-201=205.1-5.4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- task01/src/com/example/task01/ErrorLevel.java | 8 ++ task01/src/com/example/task01/Logger.java | 90 +++++++++++++++ .../src/com/example/task02/DiscountBill.java | 21 ++++ task03/src/com/example/task03/Hours.java | 19 ++++ .../src/com/example/task03/Milliseconds.java | 9 +- task03/src/com/example/task03/Minutes.java | 24 ++-- task03/src/com/example/task03/Seconds.java | 5 +- task03/src/com/example/task03/TimeUnit.java | 2 + .../src/com/example/task03/TimeUnitUtils.java | 54 +++++++-- .../com/example/task04/ConsoleHandler.java | 8 ++ task04/src/com/example/task04/ErrorLevel.java | 8 ++ .../src/com/example/task04/FileHandler.java | 18 +++ task04/src/com/example/task04/Logger.java | 105 ++++++++++++++++++ .../src/com/example/task04/MemoryHandler.java | 30 +++++ .../com/example/task04/MessageHandler.java | 5 + .../example/task04/RotationFileHandler.java | 28 +++++ 16 files changed, 401 insertions(+), 33 deletions(-) create mode 100644 task01/src/com/example/task01/ErrorLevel.java create mode 100644 task01/src/com/example/task01/Logger.java create mode 100644 task02/src/com/example/task02/DiscountBill.java create mode 100644 task03/src/com/example/task03/Hours.java create mode 100644 task04/src/com/example/task04/ConsoleHandler.java create mode 100644 task04/src/com/example/task04/ErrorLevel.java create mode 100644 task04/src/com/example/task04/FileHandler.java create mode 100644 task04/src/com/example/task04/Logger.java create mode 100644 task04/src/com/example/task04/MemoryHandler.java create mode 100644 task04/src/com/example/task04/MessageHandler.java create mode 100644 task04/src/com/example/task04/RotationFileHandler.java diff --git a/task01/src/com/example/task01/ErrorLevel.java b/task01/src/com/example/task01/ErrorLevel.java new file mode 100644 index 00000000..684ffedf --- /dev/null +++ b/task01/src/com/example/task01/ErrorLevel.java @@ -0,0 +1,8 @@ +package com.example.task01; + +public enum ErrorLevel { + DEBUG, + INFO, + WARNING, + ERROR +} diff --git a/task01/src/com/example/task01/Logger.java b/task01/src/com/example/task01/Logger.java new file mode 100644 index 00000000..b31923ad --- /dev/null +++ b/task01/src/com/example/task01/Logger.java @@ -0,0 +1,90 @@ +package com.example.task01; + +import java.text.MessageFormat; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; + +public class Logger { + private final String name; + private ErrorLevel level; + private static final ArrayList loggers = new ArrayList<>(); + + public Logger(String name) { + this.name = name; + this.level = ErrorLevel.INFO; + loggers.add(this); + } + + public Logger(String name, ErrorLevel level) { + this.name = name; + this.level = level; + loggers.add(this); + } + + public String getName() { + return name; + } + + public ErrorLevel getLevel() { + return level; + } + + public void setLevel(ErrorLevel level) { + this.level = level; + } + + public static Logger getLogger(String name) { + for (Logger logger : loggers) { + if (logger.getName().equals(name)) return logger; + } + return new Logger(name); + } + + public void log(ErrorLevel level, String message) { + if (this.level.ordinal() <= level.ordinal()) { + String dateTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy.MM.dd hh:mm:ss")); + String formattedMessage = MessageFormat.format("[{0}] {1} {2} - {3}", level, dateTime, name, message); + System.out.println(formattedMessage); + } + } + + public void log(ErrorLevel level, String pattern, Object... args) { + if (this.level.ordinal() <= level.ordinal()) { + System.out.println(MessageFormat.format(pattern, args)); + } + } + + public void debug(String message) { + log(ErrorLevel.DEBUG, message); + } + + public void debug(String pattern, Object... args) { + log(ErrorLevel.DEBUG, pattern, args); + } + + public void info(String message) { + log(ErrorLevel.INFO, message); + } + + public void info(String pattern, Object... args) { + log(ErrorLevel.INFO, pattern, args); + } + + public void warning(String message) { + log(ErrorLevel.WARNING, message); + } + + public void warning(String pattern, Object... args) { + log(ErrorLevel.WARNING, pattern, args); + } + + public void error(String message) { + log(ErrorLevel.ERROR, message); + } + + public void error(String pattern, Object... args) { + log(ErrorLevel.ERROR, pattern, args); + } +} + diff --git a/task02/src/com/example/task02/DiscountBill.java b/task02/src/com/example/task02/DiscountBill.java new file mode 100644 index 00000000..23a850b0 --- /dev/null +++ b/task02/src/com/example/task02/DiscountBill.java @@ -0,0 +1,21 @@ +package com.example.task02; + +public class DiscountBill extends Bill{ + private final double discount; + + public DiscountBill(double discount){ + this.discount = discount; + } + + public long TotalPrice(){ + return (long)(super.getPrice() - (super.getPrice() * (discount / 100))); + } + + public String getDiscount(){ + return discount + "%"; + } + + public long AbsoluteDiscount(){ + return super.getPrice() - TotalPrice(); + } +} diff --git a/task03/src/com/example/task03/Hours.java b/task03/src/com/example/task03/Hours.java new file mode 100644 index 00000000..bfa781f0 --- /dev/null +++ b/task03/src/com/example/task03/Hours.java @@ -0,0 +1,19 @@ +package com.example.task03; + +public class Hours implements TimeUnit{ + private final long amount; + + public Hours(long amount){this.amount = amount;} + + @Override + public long toMillis() {return amount * 3600 * 1000;} + + @Override + public long toSeconds() {return amount * 3600;} + + @Override + public long toMinutes() {return amount * 60;} + + @Override + public long toHours() { return amount; } +} diff --git a/task03/src/com/example/task03/Milliseconds.java b/task03/src/com/example/task03/Milliseconds.java index 5115bc7d..922f0ef0 100644 --- a/task03/src/com/example/task03/Milliseconds.java +++ b/task03/src/com/example/task03/Milliseconds.java @@ -18,11 +18,12 @@ public long toMillis() { @Override public long toSeconds() { - return amount / 1000; + return Math.round(amount / 1000.); } @Override - public long toMinutes() { - return amount / 1000 * 60; - } + public long toMinutes() { return Math.round(amount / 60000.); } + + @Override + public long toHours() { return Math.round(amount / 3600000.); } } diff --git a/task03/src/com/example/task03/Minutes.java b/task03/src/com/example/task03/Minutes.java index d6fa0594..41da90bf 100644 --- a/task03/src/com/example/task03/Minutes.java +++ b/task03/src/com/example/task03/Minutes.java @@ -1,27 +1,19 @@ package com.example.task03; public class Minutes implements TimeUnit { + private final long amount; - public Minutes(long amount) { - // TODO: реализовать - throw new UnsupportedOperationException(); - } + public Minutes(long amount) { this.amount = amount; } @Override - public long toMillis() { - // TODO: реализовать - throw new UnsupportedOperationException(); - } + public long toMillis() { return amount * 60 * 1000; } @Override - public long toSeconds() { - // TODO: реализовать - throw new UnsupportedOperationException(); - } + public long toSeconds() { return amount * 60; } @Override - public long toMinutes() { - // TODO: реализовать - throw new UnsupportedOperationException(); - } + public long toMinutes() { return amount; } + + @Override + public long toHours() { return Math.round(amount / 60.); } } diff --git a/task03/src/com/example/task03/Seconds.java b/task03/src/com/example/task03/Seconds.java index ce6bc213..e6453ff7 100644 --- a/task03/src/com/example/task03/Seconds.java +++ b/task03/src/com/example/task03/Seconds.java @@ -23,6 +23,9 @@ public long toSeconds() { @Override public long toMinutes() { - return Math.round(amount / 60); + return Math.round(amount / 60.); } + + @Override + public long toHours() {return Math.round(amount / 3600.); } } diff --git a/task03/src/com/example/task03/TimeUnit.java b/task03/src/com/example/task03/TimeUnit.java index 3b123fb8..303a88b4 100644 --- a/task03/src/com/example/task03/TimeUnit.java +++ b/task03/src/com/example/task03/TimeUnit.java @@ -28,4 +28,6 @@ public interface TimeUnit { */ long toMinutes(); + long toHours(); + } diff --git a/task03/src/com/example/task03/TimeUnitUtils.java b/task03/src/com/example/task03/TimeUnitUtils.java index 790f8850..3317599f 100644 --- a/task03/src/com/example/task03/TimeUnitUtils.java +++ b/task03/src/com/example/task03/TimeUnitUtils.java @@ -5,23 +5,53 @@ */ public class TimeUnitUtils { - /** - * Конвертирует интервал в секундах в интервал в миллисекундах - * - * @param seconds интервал в секундах - * @return интервал в миллисекундах - */ + public static Milliseconds toMillis(Minutes minutes) { + return new Milliseconds(minutes.toMillis()); + } + + public static Milliseconds toMillis(Hours hours) { + return new Milliseconds(hours.toMillis()); + } + public static Milliseconds toMillis(Seconds seconds) { + return new Milliseconds(seconds.toMillis()); } - /** - * Конвертирует интервал в миллисекундах в интервал в секундах - * - * @param millis интервал в миллисекундах - * @return интервал в секундах - */ public static Seconds toSeconds(Milliseconds millis) { + return new Seconds(millis.toSeconds()); } + + public static Seconds toSeconds(Minutes minutes) { + return new Seconds(minutes.toSeconds()); + } + + public static Seconds toSeconds(Hours hours) { + return new Seconds(hours.toSeconds()); + } + + public static Minutes toMinutes(Milliseconds milliseconds) { + return new Minutes(milliseconds.toMinutes()); + } + + public static Minutes toMinutes(Seconds seconds) { + return new Minutes(seconds.toMinutes()); + } + + public static Minutes toMinutes(Hours hours) { + return new Minutes(hours.toMinutes()); + } + + public static Hours toHours(Milliseconds milliseconds) { + return new Hours(milliseconds.toHours()); + } + + public static Hours toHours(Seconds seconds) { + return new Hours(seconds.toHours()); + } + + public static Hours toHours(Minutes minutes) { + return new Hours(minutes.toHours()); + } } diff --git a/task04/src/com/example/task04/ConsoleHandler.java b/task04/src/com/example/task04/ConsoleHandler.java new file mode 100644 index 00000000..a2a9fa5d --- /dev/null +++ b/task04/src/com/example/task04/ConsoleHandler.java @@ -0,0 +1,8 @@ +package com.example.task04; + +public class ConsoleHandler implements MessageHandler{ + @Override + public void log(String message) { + System.out.println(message); + } +} diff --git a/task04/src/com/example/task04/ErrorLevel.java b/task04/src/com/example/task04/ErrorLevel.java new file mode 100644 index 00000000..c3153de7 --- /dev/null +++ b/task04/src/com/example/task04/ErrorLevel.java @@ -0,0 +1,8 @@ +package com.example.task04; + +public enum ErrorLevel { + DEBUG, + INFO, + WARNING, + ERROR +} diff --git a/task04/src/com/example/task04/FileHandler.java b/task04/src/com/example/task04/FileHandler.java new file mode 100644 index 00000000..2ff6ebd4 --- /dev/null +++ b/task04/src/com/example/task04/FileHandler.java @@ -0,0 +1,18 @@ +package com.example.task04; + +import java.io.FileWriter; +import java.io.IOException; +import java.io.PrintWriter; + +public class FileHandler implements MessageHandler{ + private final PrintWriter writer; + + public FileHandler(String filePath) throws IOException { + this.writer = new PrintWriter(new FileWriter(filePath, true)); + } + + @Override + public void log(String message) { + writer.println(message); + } +} diff --git a/task04/src/com/example/task04/Logger.java b/task04/src/com/example/task04/Logger.java new file mode 100644 index 00000000..7393ceac --- /dev/null +++ b/task04/src/com/example/task04/Logger.java @@ -0,0 +1,105 @@ +package com.example.task04; + +import java.text.MessageFormat; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; + +public class Logger { + private final String name; + private ErrorLevel level; + private static final ArrayList loggers = new ArrayList<>(); + private static ArrayList handlers = new ArrayList<>(); + + public Logger(String name) { + this.name = name; + this.level = ErrorLevel.INFO; + loggers.add(this); + handlers.add(new ConsoleHandler()); + } + + public Logger(String name, ErrorLevel level) { + this.name = name; + this.level = level; + loggers.add(this); + handlers.add(new ConsoleHandler()); + } + + public Logger(String name, ErrorLevel level, ArrayList handlers) { + this.name = name; + this.level = level; + loggers.add(this); + this.handlers = handlers; + } + + public String getName() { + return name; + } + + public ErrorLevel getLevel() { + return level; + } + + public void setLevel(ErrorLevel level) { + this.level = level; + } + + public static Logger getLogger(String name) { + for (Logger logger : loggers) { + if (logger.getName().equals(name)) return logger; + } + return new Logger(name); + } + + public void log(ErrorLevel level, String message) { + if (this.level.ordinal() <= level.ordinal()) { + String dateTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy.MM.dd hh:mm:ss")); + String formattedMessage = MessageFormat.format("[{0}] {1} {2} - {3}", level, dateTime, name, message); + for(MessageHandler handler : handlers){ + handler.log(formattedMessage); + } + } + } + + public void log(ErrorLevel level, String pattern, Object... args) { + if (this.level.ordinal() <= level.ordinal()) { + String formattedMessage = MessageFormat.format(pattern, args); + for(MessageHandler handler : handlers){ + handler.log(formattedMessage); + } + } + } + + public void debug(String message) { + log(ErrorLevel.DEBUG, message); + } + + public void debug(String pattern, Object... args) { + log(ErrorLevel.DEBUG, pattern, args); + } + + public void info(String message) { + log(ErrorLevel.INFO, message); + } + + public void info(String pattern, Object... args) { + log(ErrorLevel.INFO, pattern, args); + } + + public void warning(String message) { + log(ErrorLevel.WARNING, message); + } + + public void warning(String pattern, Object... args) { + log(ErrorLevel.WARNING, pattern, args); + } + + public void error(String message) { + log(ErrorLevel.ERROR, message); + } + + public void error(String pattern, Object... args) { + log(ErrorLevel.ERROR, pattern, args); + } +} + diff --git a/task04/src/com/example/task04/MemoryHandler.java b/task04/src/com/example/task04/MemoryHandler.java new file mode 100644 index 00000000..bcde6baf --- /dev/null +++ b/task04/src/com/example/task04/MemoryHandler.java @@ -0,0 +1,30 @@ +package com.example.task04; + +import java.util.ArrayList; + +public class MemoryHandler implements MessageHandler { + private final int maxSize; + private final ArrayList messages = new ArrayList<>(); + private final MessageHandler proxyHandler; + + public MemoryHandler(MessageHandler proxyHandler, int maxSize) { + this.proxyHandler = proxyHandler; + this.maxSize = maxSize; + } + + public void flush() { + for (String message : messages) { + proxyHandler.log(message); + } + messages.clear(); + } + + @Override + public void log(String message) { + messages.add(message); + if (messages.size() >= maxSize) { + flush(); + } + } + +} \ No newline at end of file diff --git a/task04/src/com/example/task04/MessageHandler.java b/task04/src/com/example/task04/MessageHandler.java new file mode 100644 index 00000000..13beca02 --- /dev/null +++ b/task04/src/com/example/task04/MessageHandler.java @@ -0,0 +1,5 @@ +package com.example.task04; + +public interface MessageHandler { + void log(String message); +} diff --git a/task04/src/com/example/task04/RotationFileHandler.java b/task04/src/com/example/task04/RotationFileHandler.java new file mode 100644 index 00000000..9954b558 --- /dev/null +++ b/task04/src/com/example/task04/RotationFileHandler.java @@ -0,0 +1,28 @@ +package com.example.task04; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.time.LocalDateTime; +import java.time.temporal.ChronoUnit; + +public class RotationFileHandler implements MessageHandler { + private final String path; + private final ChronoUnit rotation; + + public RotationFileHandler(String path, ChronoUnit rotation) { + this.path = path; + this.rotation = rotation; + } + + @Override + public void log(String message) { + LocalDateTime date = LocalDateTime.now().truncatedTo(rotation); + File file = new File(path + date.toString().replace(':','#') + ".txt"); + try (FileOutputStream fileOutputStream = new FileOutputStream(file)) { + fileOutputStream.write(message.getBytes()); + } catch (IOException ex) { + System.out.println(ex.getMessage()); + } + } +}