From 3bae56a99a964639f87227ebb734c4741e444e76 Mon Sep 17 00:00:00 2001 From: Mishbringer Date: Thu, 30 Oct 2025 15:07:11 +0500 Subject: [PATCH 1/6] for other device, not so important --- .../com/example/task01/ImportantLevels.java | 8 ++++++++ task01/src/com/example/task01/Logger.java | 18 ++++++++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 task01/src/com/example/task01/ImportantLevels.java create mode 100644 task01/src/com/example/task01/Logger.java diff --git a/task01/src/com/example/task01/ImportantLevels.java b/task01/src/com/example/task01/ImportantLevels.java new file mode 100644 index 00000000..342d11cf --- /dev/null +++ b/task01/src/com/example/task01/ImportantLevels.java @@ -0,0 +1,8 @@ +package com.example.task01; + +public enum ImportantLevels { + DEBUG, + INFO, + WARNING, + ERROR; +} \ No newline at end of file diff --git a/task01/src/com/example/task01/Logger.java b/task01/src/com/example/task01/Logger.java new file mode 100644 index 00000000..3e01b583 --- /dev/null +++ b/task01/src/com/example/task01/Logger.java @@ -0,0 +1,18 @@ +package com.example.task01; + +public class Logger { + private final String name; + + public Logger(String name) { + this.name = name; + } + + public String getName() { + return name; + } + + public static Logger getLogger(String name) { + return new Logger(name); + } + +} From abebd4e585b86802d33822eb03ef934ba122d677 Mon Sep 17 00:00:00 2001 From: Mishbringer Date: Sun, 2 Nov 2025 17:10:15 +0500 Subject: [PATCH 2/6] task01 solve --- task01/src/com/example/task01/Logger.java | 76 ++++++++++++++++++- task01/src/com/example/task01/Task01Main.java | 6 +- 2 files changed, 79 insertions(+), 3 deletions(-) diff --git a/task01/src/com/example/task01/Logger.java b/task01/src/com/example/task01/Logger.java index 3e01b583..28bbfdd3 100644 --- a/task01/src/com/example/task01/Logger.java +++ b/task01/src/com/example/task01/Logger.java @@ -1,10 +1,26 @@ package com.example.task01; +import com.sun.xml.internal.ws.wsdl.writer.document.Import; + +import java.util.HashMap; +import java.text.MessageFormat; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + public class Logger { private final String name; - + private static final HashMap loggers = new HashMap<>(); + private ImportantLevels level; + public Logger(String name) { this.name = name; + loggers.put(name, this); + } + + public Logger(String name, ImportantLevels level) { + this.name = name; + this.level = level; + loggers.put(name, this); } public String getName() { @@ -12,7 +28,63 @@ public String getName() { } public static Logger getLogger(String name) { + if (loggers.containsKey(name)) { + return loggers.get(name); + } return new Logger(name); } -} + public ImportantLevels getLevel() { + return level; + } + + public void setLevel(ImportantLevels level) { + this.level = level; + } + + public void log(ImportantLevels 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(ImportantLevels level, String pattern, Object... args) { + if (this.level.ordinal() <= level.ordinal()) { + System.out.println(MessageFormat.format(pattern, args)); + } + } + + public void debug(String message) { + log(ImportantLevels.DEBUG, message); + } + + public void debug(String pattern, Object... args) { + log(ImportantLevels.DEBUG, pattern, args); + } + + public void info(String message) { + log(ImportantLevels.DEBUG, message); + } + + public void info(String pattern, Object... args) { + log(ImportantLevels.DEBUG, pattern, args); + } + + public void warning(String message) { + log(ImportantLevels.DEBUG, message); + } + + public void warning(String pattern, Object... args) { + log(ImportantLevels.DEBUG, pattern, args); + } + + public void error(String message) { + log(ImportantLevels.DEBUG, message); + } + + public void error(String pattern, Object... args) { + log(ImportantLevels.DEBUG, pattern, args); + } +} \ No newline at end of file diff --git a/task01/src/com/example/task01/Task01Main.java b/task01/src/com/example/task01/Task01Main.java index 9973557d..debe111a 100644 --- a/task01/src/com/example/task01/Task01Main.java +++ b/task01/src/com/example/task01/Task01Main.java @@ -2,6 +2,10 @@ public class Task01Main { public static void main(String[] args) { - + Logger logger1 = new Logger("name"); + Logger logger2 = Logger.getLogger("name1"); + Logger logger3 = Logger.getLogger("name1"); + System.out.println(logger1 == logger2); + System.out.println(logger2 == logger3); } } From fe4f9aee7e2b885f08886feaad0cfedb34da60dc Mon Sep 17 00:00:00 2001 From: Mishbringer Date: Mon, 3 Nov 2025 18:40:15 +0500 Subject: [PATCH 3/6] task01 correction --- task01/src/com/example/task01/Logger.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/task01/src/com/example/task01/Logger.java b/task01/src/com/example/task01/Logger.java index 28bbfdd3..d64bc1b9 100644 --- a/task01/src/com/example/task01/Logger.java +++ b/task01/src/com/example/task01/Logger.java @@ -65,26 +65,26 @@ public void debug(String pattern, Object... args) { } public void info(String message) { - log(ImportantLevels.DEBUG, message); + log(ImportantLevels.INFO, message); } public void info(String pattern, Object... args) { - log(ImportantLevels.DEBUG, pattern, args); + log(ImportantLevels.INFO, pattern, args); } public void warning(String message) { - log(ImportantLevels.DEBUG, message); + log(ImportantLevels.WARNING, message); } public void warning(String pattern, Object... args) { - log(ImportantLevels.DEBUG, pattern, args); + log(ImportantLevels.WARNING, pattern, args); } public void error(String message) { - log(ImportantLevels.DEBUG, message); + log(ImportantLevels.ERROR, message); } public void error(String pattern, Object... args) { - log(ImportantLevels.DEBUG, pattern, args); + log(ImportantLevels.ERROR, pattern, args); } } \ No newline at end of file From 411b7478f9a0d6d5ccdc574738e1bf6bc518a777 Mon Sep 17 00:00:00 2001 From: Mishbringer Date: Mon, 3 Nov 2025 18:41:01 +0500 Subject: [PATCH 4/6] task02 solve --- .../src/com/example/task02/DiscountBill.java | 23 +++++++++++++++++++ task02/src/com/example/task02/Task02Main.java | 9 ++++++++ 2 files changed, 32 insertions(+) create mode 100644 task02/src/com/example/task02/DiscountBill.java diff --git a/task02/src/com/example/task02/DiscountBill.java b/task02/src/com/example/task02/DiscountBill.java new file mode 100644 index 00000000..bb73d327 --- /dev/null +++ b/task02/src/com/example/task02/DiscountBill.java @@ -0,0 +1,23 @@ +package com.example.task02; + +public class DiscountBill extends Bill{ + private final double discount; + + public DiscountBill(double discount) { + this.discount = discount; + } + + @Override + public long getPrice() { + long price = super.getPrice(); + return (long)(price - (price * (discount / 100))); + } + + public long getAbsoluteDiscount() { + return super.getPrice() - getPrice(); + } + + public String getDiscount() { + return discount + "%"; + } +} diff --git a/task02/src/com/example/task02/Task02Main.java b/task02/src/com/example/task02/Task02Main.java index e589f2d3..ca693f1a 100644 --- a/task02/src/com/example/task02/Task02Main.java +++ b/task02/src/com/example/task02/Task02Main.java @@ -10,6 +10,7 @@ public class Task02Main { private static final Item ITEM6 = new Item("Товар 6", 60); public static void main(String[] args) { + System.out.println("Обычный счет"); Bill bill = new Bill(); bill.add(ITEM1, 10); bill.add(ITEM3, 3); @@ -17,5 +18,13 @@ public static void main(String[] args) { System.out.println(bill); bill.add(ITEM3, 3); System.out.println(bill); + System.out.println("Cчет со скидкой"); + DiscountBill discountBill = new DiscountBill(10.5); + discountBill.add(ITEM1, 10); + discountBill.add(ITEM3, 3); + discountBill.add(ITEM6, 1); + System.out.println(discountBill); + System.out.println(discountBill.getDiscount()); + System.out.println(discountBill.getAbsoluteDiscount()); } } From 05367d1e3568242ca0c98d6a40c176349d4a1a64 Mon Sep 17 00:00:00 2001 From: Mishbringer Date: Mon, 3 Nov 2025 18:41:37 +0500 Subject: [PATCH 5/6] task03 solve --- task03/src/com/example/task03/Hours.java | 34 +++++++++++++++ .../src/com/example/task03/Milliseconds.java | 14 ++++++- task03/src/com/example/task03/Minutes.java | 24 +++++++---- task03/src/com/example/task03/Seconds.java | 12 +++++- task03/src/com/example/task03/TimeUnit.java | 3 ++ .../src/com/example/task03/TimeUnitUtils.java | 42 ++++++++++++++++++- 6 files changed, 117 insertions(+), 12 deletions(-) create mode 100644 task03/src/com/example/task03/Hours.java diff --git a/task03/src/com/example/task03/Hours.java b/task03/src/com/example/task03/Hours.java new file mode 100644 index 00000000..114aa5a0 --- /dev/null +++ b/task03/src/com/example/task03/Hours.java @@ -0,0 +1,34 @@ +package com.example.task03; + +public class Hours implements TimeUnit { + + private final long amount; + + public Hours(long amount) { + this.amount = amount; + } + + public long toMillis() { + return amount * 60 * 60 * 1000; + } + + @Override + public long toSeconds() { + return amount * 60 * 60; + } + + @Override + public long toMinutes() { + return amount * 60; + } + + @Override + public long toHours() { + return amount; + } + + @Override + public long getHours() { + return this.toHours(); + } +} diff --git a/task03/src/com/example/task03/Milliseconds.java b/task03/src/com/example/task03/Milliseconds.java index 5115bc7d..4b2f4230 100644 --- a/task03/src/com/example/task03/Milliseconds.java +++ b/task03/src/com/example/task03/Milliseconds.java @@ -18,11 +18,21 @@ public long toMillis() { @Override public long toSeconds() { - return amount / 1000; + return Math.round(amount / 1000f); } @Override public long toMinutes() { - return amount / 1000 * 60; + return Math.round(amount / (float)(1000 * 60)); + } + + @Override + public long toHours() { + return Math.round(amount / (float)(1000 * 60 * 60)); + } + + @Override + public long getHours() { + return this.toHours(); } } diff --git a/task03/src/com/example/task03/Minutes.java b/task03/src/com/example/task03/Minutes.java index d6fa0594..50fa90a8 100644 --- a/task03/src/com/example/task03/Minutes.java +++ b/task03/src/com/example/task03/Minutes.java @@ -2,26 +2,34 @@ 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; + } + + @Override + public long toHours() { + return Math.round(amount / 60f); + } + + @Override + public long getHours() { + return this.toHours(); } } diff --git a/task03/src/com/example/task03/Seconds.java b/task03/src/com/example/task03/Seconds.java index ce6bc213..40113717 100644 --- a/task03/src/com/example/task03/Seconds.java +++ b/task03/src/com/example/task03/Seconds.java @@ -23,6 +23,16 @@ public long toSeconds() { @Override public long toMinutes() { - return Math.round(amount / 60); + return Math.round(amount / 60f); + } + + @Override + public long toHours() { + return Math.round(amount / 3600f); + } + + @Override + public long getHours() { + return this.toHours(); } } diff --git a/task03/src/com/example/task03/TimeUnit.java b/task03/src/com/example/task03/TimeUnit.java index 3b123fb8..ae5ce0e1 100644 --- a/task03/src/com/example/task03/TimeUnit.java +++ b/task03/src/com/example/task03/TimeUnit.java @@ -28,4 +28,7 @@ public interface TimeUnit { */ long toMinutes(); + long toHours(); + + long getHours(); } diff --git a/task03/src/com/example/task03/TimeUnitUtils.java b/task03/src/com/example/task03/TimeUnitUtils.java index 790f8850..671fa8b1 100644 --- a/task03/src/com/example/task03/TimeUnitUtils.java +++ b/task03/src/com/example/task03/TimeUnitUtils.java @@ -15,6 +15,14 @@ public static Milliseconds toMillis(Seconds seconds) { return new Milliseconds(seconds.toMillis()); } + public static Milliseconds toMillis(Minutes minutes) { + return new Milliseconds(minutes.toMillis()); + } + + public static Milliseconds toMillis(Hours hours) { + return new Milliseconds(hours.toMillis()); + } + /** * Конвертирует интервал в миллисекундах в интервал в секундах * @@ -24,4 +32,36 @@ public static Milliseconds toMillis(Seconds seconds) { 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()); + } +} \ No newline at end of file From c3b8da61f1300828ef2c75c6b73aa49acd061d62 Mon Sep 17 00:00:00 2001 From: Mishbringer Date: Mon, 3 Nov 2025 18:41:52 +0500 Subject: [PATCH 6/6] task04 solve --- .../com/example/task04/ConsoleHandler.java | 9 ++ .../src/com/example/task04/FileHandler.java | 19 ++++ .../com/example/task04/ImportantLevels.java | 8 ++ task04/src/com/example/task04/Logger.java | 104 ++++++++++++++++++ .../src/com/example/task04/MemoryHandler.java | 29 +++++ .../com/example/task04/MessageHandler.java | 5 + .../example/task04/RotationFileHandler.java | 29 +++++ 7 files changed, 203 insertions(+) create mode 100644 task04/src/com/example/task04/ConsoleHandler.java create mode 100644 task04/src/com/example/task04/FileHandler.java create mode 100644 task04/src/com/example/task04/ImportantLevels.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/task04/src/com/example/task04/ConsoleHandler.java b/task04/src/com/example/task04/ConsoleHandler.java new file mode 100644 index 00000000..ac2689e2 --- /dev/null +++ b/task04/src/com/example/task04/ConsoleHandler.java @@ -0,0 +1,9 @@ +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/FileHandler.java b/task04/src/com/example/task04/FileHandler.java new file mode 100644 index 00000000..eb49be88 --- /dev/null +++ b/task04/src/com/example/task04/FileHandler.java @@ -0,0 +1,19 @@ +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 file_path, boolean appendable) throws IOException { + writer = new PrintWriter(new FileWriter(file_path, appendable)); + } + + @Override + public void log(String message) { + writer.println(message); + writer.close(); + } +} diff --git a/task04/src/com/example/task04/ImportantLevels.java b/task04/src/com/example/task04/ImportantLevels.java new file mode 100644 index 00000000..02db925c --- /dev/null +++ b/task04/src/com/example/task04/ImportantLevels.java @@ -0,0 +1,8 @@ +package com.example.task04; + +public enum ImportantLevels { + DEBUG, + INFO, + WARNING, + ERROR; +} \ No newline at end of file diff --git a/task04/src/com/example/task04/Logger.java b/task04/src/com/example/task04/Logger.java new file mode 100644 index 00000000..433898bb --- /dev/null +++ b/task04/src/com/example/task04/Logger.java @@ -0,0 +1,104 @@ +package com.example.task04; + +import java.text.MessageFormat; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.HashMap; + +public class Logger { + private final String name; + private static final HashMap loggers = new HashMap<>(); + private ImportantLevels level; + private static ArrayList handlers = new ArrayList<>(); + + public Logger(String name) { + this.name = name; + this.level = ImportantLevels.INFO; + loggers.put(name, this); + handlers.add(new ConsoleHandler()); + } + + public Logger(String name, ArrayList handlers) { + this.name = name; + this.level = ImportantLevels.INFO; + loggers.put(name, this); + this.handlers = handlers; + } + + public Logger(String name, ImportantLevels level, ArrayList handlers) { + this.name = name; + this.level = level; + loggers.put(name, this); + this.handlers = handlers; + } + + public String getName() { + return name; + } + + public static Logger getLogger(String name) { + if (loggers.containsKey(name)) { + return loggers.get(name); + } + return new Logger(name); + } + + public ImportantLevels getLevel() { + return level; + } + + public void setLevel(ImportantLevels level) { + this.level = level; + } + + public void log(ImportantLevels 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(ImportantLevels level, String pattern, Object... args) { + if (this.level.ordinal() <= level.ordinal()) { + for (MessageHandler handler: handlers) { + handler.log(MessageFormat.format(pattern, args)); + } + } + } + + public void debug(String message) { + log(ImportantLevels.DEBUG, message); + } + + public void debug(String pattern, Object... args) { + log(ImportantLevels.DEBUG, pattern, args); + } + + public void info(String message) { + log(ImportantLevels.INFO, message); + } + + public void info(String pattern, Object... args) { + log(ImportantLevels.INFO, pattern, args); + } + + public void warning(String message) { + log(ImportantLevels.WARNING, message); + } + + public void warning(String pattern, Object... args) { + log(ImportantLevels.WARNING, pattern, args); + } + + public void error(String message) { + log(ImportantLevels.ERROR, message); + } + + public void error(String pattern, Object... args) { + log(ImportantLevels.ERROR, pattern, args); + } +} \ No newline at end of file diff --git a/task04/src/com/example/task04/MemoryHandler.java b/task04/src/com/example/task04/MemoryHandler.java new file mode 100644 index 00000000..cb25e638 --- /dev/null +++ b/task04/src/com/example/task04/MemoryHandler.java @@ -0,0 +1,29 @@ +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 proxy; + + public MemoryHandler(int maxSize, MessageHandler proxy) { + this.maxSize = maxSize; + this.proxy = proxy; + } + + public void clear() { + for (String message: messages) { + proxy.log(message); + } + messages.clear(); + } + + @Override + public void log(String message) { + messages.add(message); + if (messages.size() > maxSize) { + clear(); + } + } +} \ 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..02095ce0 --- /dev/null +++ b/task04/src/com/example/task04/RotationFileHandler.java @@ -0,0 +1,29 @@ +package com.example.task04; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.time.LocalDateTime; +import java.time.temporal.ChronoUnit; + +public class RotationFileHandler implements MessageHandler { + private final ChronoUnit rotation; + private final String path; + + public RotationFileHandler(ChronoUnit rotation, String path) { + this.rotation = rotation; + this.path = path; + } + + @Override + public void log(String message) { + LocalDateTime date = LocalDateTime.now().truncatedTo(rotation); + File file = new File(path + date.toString().replace('T', '_') + ".txt"); + try (FileOutputStream fileOutputStream = new FileOutputStream(file)) { + fileOutputStream.write(message.getBytes(StandardCharsets.UTF_8)); + } catch (IOException e) { + System.out.println(e); + } + } +}