From a38fd685b7a28c3345b692c316ae85c539853763 Mon Sep 17 00:00:00 2001 From: Artem Solovyov Date: Tue, 19 Nov 2024 20:51:32 +0500 Subject: [PATCH 1/4] =?UTF-8?q?=D0=A1=D0=BE=D0=BB=D0=BE=D0=B2=D1=8C=D0=B5?= =?UTF-8?q?=D0=B2=20=D0=90=D1=80=D1=82=D1=91=D0=BC.=20=D0=97=D0=B0=D0=B4?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D0=B5=2001?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- task01/src/com/example/task01/Logger.java | 87 +++++++++++++++++++ .../src/com/example/task01/LoggerLevel.java | 8 ++ 2 files changed, 95 insertions(+) create mode 100644 task01/src/com/example/task01/Logger.java create mode 100644 task01/src/com/example/task01/LoggerLevel.java diff --git a/task01/src/com/example/task01/Logger.java b/task01/src/com/example/task01/Logger.java new file mode 100644 index 00000000..25314c53 --- /dev/null +++ b/task01/src/com/example/task01/Logger.java @@ -0,0 +1,87 @@ +package com.example.task01; + +import java.text.MessageFormat; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +public class Logger { + + private String name; + private static Logger example; + private LoggerLevel loggerLevel; + + + public Logger(String name, LoggerLevel loggerLevel){ + this.name = name; + } + + public Logger(String name){ + this.name = name; + } + + public String getName(){ + return name; + } + + public static Logger getLogger(String name){ + if(example == null){ + example = new Logger(name); + } + + return example; + } + + public LoggerLevel getLevel(){ + return loggerLevel; + } + + public void setLevel(LoggerLevel loggerLevel){ + this.loggerLevel = loggerLevel; + } + + public void debug(String message){ + log(LoggerLevel.DEBUG, message); + } + + public void debug(String sample, Object... arguments){ + log(LoggerLevel.DEBUG, sample, arguments); + } + + public void info(String message){ + log(LoggerLevel.INFO, message); + } + + public void info(String sample, Object... arguments){ + log(LoggerLevel.INFO, sample, arguments); + } + + public void warning(String message){ + log(LoggerLevel.WARNING, message); + } + + public void warning(String sample, Object... arguments){ + log(LoggerLevel.WARNING, sample, arguments); + } + + public void error(String message){ + log(LoggerLevel.ERROR, message); + } + + public void error(String sample, Object... arguments){ + log(LoggerLevel.ERROR, sample, arguments); + } + + public void log(LoggerLevel loggerLevel, String message){ + if(loggerLevel.ordinal() >= this.loggerLevel.ordinal()){ + String date = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy.MM.dd hh:mm:ss")); + String printMessage = MessageFormat.format("[{0}] {1} {2} - {3}", loggerLevel, date, name, message); + System.out.printf(printMessage); + } + } + + public void log(LoggerLevel loggerLevel, String format, Object... arguments){ + if(loggerLevel.ordinal() >= this.loggerLevel.ordinal()){ + System.out.println(MessageFormat.format(format, arguments)); + } + } +} \ No newline at end of file diff --git a/task01/src/com/example/task01/LoggerLevel.java b/task01/src/com/example/task01/LoggerLevel.java new file mode 100644 index 00000000..12108677 --- /dev/null +++ b/task01/src/com/example/task01/LoggerLevel.java @@ -0,0 +1,8 @@ +package com.example.task01; + +public enum LoggerLevel { + DEBUG, + INFO, + WARNING, + ERROR +} \ No newline at end of file From 1e7a14828c2f465249a6ff40c4138dcabd92ea73 Mon Sep 17 00:00:00 2001 From: Artem Solovyov Date: Tue, 19 Nov 2024 20:53:18 +0500 Subject: [PATCH 2/4] =?UTF-8?q?=D0=A1=D0=BE=D0=BB=D0=BE=D0=B2=D1=8C=D0=B5?= =?UTF-8?q?=D0=B2=20=D0=90=D1=80=D1=82=D1=91=D0=BC.=20=D0=97=D0=B0=D0=B4?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D0=B5=2002?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/example/task02/DiscountBill.java | 21 +++++++++++++++++++ 1 file changed, 21 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..3c5ef0a9 --- /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 double getDiscount() { + return discount; + } + + public double getTotalPrice(){ + return super.getPrice() - getPrice(); + } + + public long getPrice() { + return (long) (super.getPrice() - super.getPrice() * (discount/100)); + } +} \ No newline at end of file From 1003df2ca4895f23a6c342a461d56c69a923e32d Mon Sep 17 00:00:00 2001 From: Artem Solovyov Date: Tue, 19 Nov 2024 21:09:47 +0500 Subject: [PATCH 3/4] =?UTF-8?q?=D0=A1=D0=BE=D0=BB=D0=BE=D0=B2=D1=8C=D0=B5?= =?UTF-8?q?=D0=B2=20=D0=90=D1=80=D1=82=D1=91=D0=BC.=20=D0=97=D0=B0=D0=B4?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D0=B5=2003?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- task03/src/com/example/task03/Hours.java | 31 +++++++++++ .../src/com/example/task03/Milliseconds.java | 9 +++- task03/src/com/example/task03/Minutes.java | 19 ++++--- task03/src/com/example/task03/Seconds.java | 7 ++- task03/src/com/example/task03/TimeUnit.java | 2 + .../src/com/example/task03/TimeUnitUtils.java | 52 ++++++++++++++----- 6 files changed, 97 insertions(+), 23 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..fc6c8282 --- /dev/null +++ b/task03/src/com/example/task03/Hours.java @@ -0,0 +1,31 @@ +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 * 3600000); + } + + @Override + public long toSeconds() { + return (amount * 3600); + } + + @Override + public long toMinutes() { + return (amount * 60); + } + + @Override + public long toHours() { + return amount; + } + +} \ No newline at end of file diff --git a/task03/src/com/example/task03/Milliseconds.java b/task03/src/com/example/task03/Milliseconds.java index 5115bc7d..1d766a32 100644 --- a/task03/src/com/example/task03/Milliseconds.java +++ b/task03/src/com/example/task03/Milliseconds.java @@ -18,11 +18,16 @@ 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 / 60000f); + } + + @Override + public long toHours(){ + return (Math.round(amount / 3600000f)); } } diff --git a/task03/src/com/example/task03/Minutes.java b/task03/src/com/example/task03/Minutes.java index d6fa0594..0effb3a5 100644 --- a/task03/src/com/example/task03/Minutes.java +++ b/task03/src/com/example/task03/Minutes.java @@ -2,26 +2,29 @@ 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 * 60000); } @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)); } } diff --git a/task03/src/com/example/task03/Seconds.java b/task03/src/com/example/task03/Seconds.java index ce6bc213..b3d5d23b 100644 --- a/task03/src/com/example/task03/Seconds.java +++ b/task03/src/com/example/task03/Seconds.java @@ -23,6 +23,11 @@ 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)); } } 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..77d3ae82 100644 --- a/task03/src/com/example/task03/TimeUnitUtils.java +++ b/task03/src/com/example/task03/TimeUnitUtils.java @@ -5,23 +5,51 @@ */ public class TimeUnitUtils { - /** - * Конвертирует интервал в секундах в интервал в миллисекундах - * - * @param seconds интервал в секундах - * @return интервал в миллисекундах - */ public static Milliseconds toMillis(Seconds seconds) { return new Milliseconds(seconds.toMillis()); } - /** - * Конвертирует интервал в миллисекундах в интервал в секундах - * - * @param millis интервал в миллисекундах - * @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 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()); + } } From e43436e087888498960b2e5474dea656d5f7e8e8 Mon Sep 17 00:00:00 2001 From: Artem Solovyov Date: Wed, 27 Nov 2024 09:28:53 +0500 Subject: [PATCH 4/4] =?UTF-8?q?=D0=A1=D0=BE=D0=BB=D0=BE=D0=B2=D1=8C=D0=B5?= =?UTF-8?q?=D0=B2=20=D0=90=D1=80=D1=82=D1=91=D0=BC.=20=D0=97=D0=B0=D0=B4?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D0=B5=2004?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/example/task04/ConsoleHandler.java | 8 ++ .../src/com/example/task04/FileHandler.java | 21 ++++ task04/src/com/example/task04/Logger.java | 95 +++++++++++++++++++ .../src/com/example/task04/LoggerLevel.java | 8 ++ .../src/com/example/task04/MemoryHandler.java | 29 ++++++ .../com/example/task04/MessageHandler.java | 5 + .../example/task04/RotationFileHandler.java | 29 ++++++ task04/src/com/example/task04/Task04Main.java | 14 ++- 8 files changed, 208 insertions(+), 1 deletion(-) 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/Logger.java create mode 100644 task04/src/com/example/task04/LoggerLevel.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..33415b3e --- /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); + } +} \ No newline at end of file diff --git a/task04/src/com/example/task04/FileHandler.java b/task04/src/com/example/task04/FileHandler.java new file mode 100644 index 00000000..d1220d21 --- /dev/null +++ b/task04/src/com/example/task04/FileHandler.java @@ -0,0 +1,21 @@ +package com.example.task04; + +import java.io.FileWriter; +import java.io.IOException; + +public class FileHandler implements MessageHandler{ + + @Override + public void log(String message) { + try { + FileWriter writer = new FileWriter("log.txt", true); + writer.write(message); + writer.append("\n"); + + writer.flush(); + } catch (IOException e) { + throw new RuntimeException(e); + } + + } +} \ 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..2702806b --- /dev/null +++ b/task04/src/com/example/task04/Logger.java @@ -0,0 +1,95 @@ +package com.example.task04; + +import java.util.ArrayList; +import java.text.MessageFormat; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +public class Logger { + private final String name; + private LoggerLevel loggerLevel; + private static Logger example; + ArrayList handlers = new ArrayList<>(); + + public Logger(String name){ + this.name = name; + this.loggerLevel = LoggerLevel.DEBUG; + handlers.add(new ConsoleHandler()); + } + + public Logger(String name, ArrayList handlers){ + this.loggerLevel = LoggerLevel.DEBUG; + this.name = name; + this.handlers = handlers; + } + + public String getName(){ + return name; + } + + public LoggerLevel getLevel(){ + return loggerLevel; + } + + public static Logger getLogger(String name){ + if (example == null){ + example = new Logger(name); + } + return example; + } + + public void setLevel(LoggerLevel loggerLevel){ + this.loggerLevel = loggerLevel; + } + + public void debug(String message){ + log(LoggerLevel.DEBUG, message); + } + + public void debug(String sample, Object... arguments){ + log(LoggerLevel.DEBUG, sample, arguments); + } + + public void info(String message){ + log(LoggerLevel.INFO, message); + } + + public void info(String sample, Object... arguments){ + log(LoggerLevel.INFO, sample, arguments); + } + + public void warning(String message){ + log(LoggerLevel.WARNING, message); + } + + public void warning(String sample, Object... arguments){ + log(LoggerLevel.WARNING, sample, arguments); + } + + public void error(String message){ + log(LoggerLevel.ERROR, message); + } + + public void error(String sample, Object... arguments){ + log(LoggerLevel.ERROR, sample, arguments); + } + + public void log(LoggerLevel loggerLevel, String message){ + if(loggerLevel.ordinal() >= this.loggerLevel.ordinal()){ + String date = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy.MM.dd hh:mm:ss")); + String lineToPrint = MessageFormat.format("[{0}] {1} {2} - {3}", loggerLevel, date, name, message); + for (MessageHandler handler : handlers){ + handler.log(lineToPrint); + } + } + } + + public void log(LoggerLevel loggerLevel, String format, Object... arguments){ + if(loggerLevel.ordinal() >= this.loggerLevel.ordinal()){ + String message = MessageFormat.format(format, arguments); + for (MessageHandler handler : handlers){ + handler.log(message); + } + } + } +} diff --git a/task04/src/com/example/task04/LoggerLevel.java b/task04/src/com/example/task04/LoggerLevel.java new file mode 100644 index 00000000..f650cc66 --- /dev/null +++ b/task04/src/com/example/task04/LoggerLevel.java @@ -0,0 +1,8 @@ +package com.example.task04; + +public enum LoggerLevel { + DEBUG, + INFO, + WARNING, + ERROR +} \ 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..356ff2e4 --- /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 maxOfMessages; + private final ArrayList handlers; + private final ArrayList messages = new ArrayList<>(); + + public MemoryHandler(int maxOfMessages, ArrayList handlers){ + this.maxOfMessages = maxOfMessages; + this.handlers = handlers; + } + + @Override + public void log(String message) { + messages.add(message); + + if(messages.size() >= maxOfMessages){ + for(MessageHandler handler : handlers){ + for(String message1 : messages){ + handler.log(message1); + } + messages.clear(); + } + } + } +} diff --git a/task04/src/com/example/task04/MessageHandler.java b/task04/src/com/example/task04/MessageHandler.java new file mode 100644 index 00000000..bc432e69 --- /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); +} \ No newline at end of file diff --git a/task04/src/com/example/task04/RotationFileHandler.java b/task04/src/com/example/task04/RotationFileHandler.java new file mode 100644 index 00000000..828dd3e9 --- /dev/null +++ b/task04/src/com/example/task04/RotationFileHandler.java @@ -0,0 +1,29 @@ +package com.example.task04; + +import java.io.FileWriter; +import java.io.IOException; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.time.temporal.ChronoUnit; + +public class RotationFileHandler implements MessageHandler{ + + private final ChronoUnit rotationUnit; + + public RotationFileHandler(ChronoUnit rotationUnit){ + this.rotationUnit = rotationUnit; + } + + @Override + public void log(String message) { + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd_HH-mm-ss"); + String fileName = LocalDateTime.now().truncatedTo(rotationUnit).format(formatter) + ".log"; + try { + FileWriter writer = new FileWriter(fileName, true); + writer.write(message); + writer.append("\n"); + } catch (IOException e) { + throw new RuntimeException(e); + } + } +} \ No newline at end of file diff --git a/task04/src/com/example/task04/Task04Main.java b/task04/src/com/example/task04/Task04Main.java index 55917a30..1e67c13c 100644 --- a/task04/src/com/example/task04/Task04Main.java +++ b/task04/src/com/example/task04/Task04Main.java @@ -1,7 +1,19 @@ package com.example.task04; +import java.time.temporal.ChronoUnit; +import java.util.ArrayList; + public class Task04Main { public static void main(String[] args) { - + ArrayList handlers = new ArrayList<>(); + handlers.add(new ConsoleHandler()); + handlers.add(new FileHandler()); + handlers.add(new RotationFileHandler(ChronoUnit.HOURS)); + handlers.add(new MemoryHandler(5, handlers)); + Logger logger = new Logger("MyLogger", handlers); + logger.debug("Debug message"); + logger.info("Info message"); + logger.warning("Warning message"); + logger.error("Error message"); } }