From 55b76b6270a9f060ddd4d63f279745aa2d81d79f Mon Sep 17 00:00:00 2001 From: Anna Date: Fri, 14 Mar 2025 21:26:08 +0500 Subject: [PATCH] =?UTF-8?q?=D0=9A=D0=BE=D0=BD=D0=BE=D0=BF=D0=BB=D1=91?= =?UTF-8?q?=D0=B2=D0=B0?= 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 | 85 ++++++++++++++ task01/src/com/example/task01/Task01Main.java | 7 -- .../src/com/example/task02/DiscountBill.java | 22 ++++ task03/src/com/example/task03/Hours.java | 29 +++++ .../src/com/example/task03/Milliseconds.java | 16 ++- task03/src/com/example/task03/Minutes.java | 18 ++- task03/src/com/example/task03/Seconds.java | 16 ++- task03/src/com/example/task03/TimeUnit.java | 1 + .../src/com/example/task03/TimeUnitUtils.java | 45 +++++++- .../com/example/task04/ConsoleHandler.java | 8 ++ task04/src/com/example/task04/ErrorLevel.java | 5 + .../src/com/example/task04/FileHandler.java | 21 ++++ task04/src/com/example/task04/Logger.java | 109 ++++++++++++++++++ .../src/com/example/task04/MemoryHandler.java | 30 +++++ .../com/example/task04/MessageHandler.java | 5 + .../example/task04/RotationFileHandler.java | 28 +++++ 17 files changed, 422 insertions(+), 31 deletions(-) create mode 100644 task01/src/com/example/task01/ErrorLevel.java create mode 100644 task01/src/com/example/task01/Logger.java delete mode 100644 task01/src/com/example/task01/Task01Main.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..d5b3539f --- /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 +} \ 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..440cf71c --- /dev/null +++ b/task01/src/com/example/task01/Logger.java @@ -0,0 +1,85 @@ +package com.example.task01; + +import java.text.MessageFormat; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.HashMap; + +public class Logger { + private static final HashMap loggers = new HashMap<>(); + private final String Name; + private ErrorLevel Level; + + public Logger(String name) { + Name = name; + Level = ErrorLevel.INFO; + loggers.put(name, this); + } + + public Logger(String name, ErrorLevel level) { + Name = name; + Level = level; + loggers.put(name, this); + } + + public static Logger getLogger(String name) { + if (loggers.get(name) == null) loggers.put(name, new Logger(name)); + return loggers.get(name); + } + + public String getName() { + return Name; + } + + public ErrorLevel getLevel() { + return Level; + } + + public void setLevel(ErrorLevel level) { + Level = level; + } + + public void log(ErrorLevel level, String message) { + if (Level.ordinal() <= level.ordinal()) { + String date = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy.MM.dd hh:mm:ss")); + String printMessage = MessageFormat.format("[{0}] {1} {2} - {3}", level, date, Name, message); + System.out.println(printMessage); + } + } + + public void log(ErrorLevel level, String format, Object... objects) { + if (Level.ordinal() <= level.ordinal()) System.out.println(MessageFormat.format(format, objects)); + } + + public void debug(String message) { + log(ErrorLevel.DEBUG, message); + } + + public void debug(String format, Object... objects) { + log(ErrorLevel.DEBUG, format, objects); + } + + public void info(String message) { + log(ErrorLevel.INFO, message); + } + + public void info(String format, Object... objects) { + log(ErrorLevel.INFO, format, objects); + } + + public void warning(String message) { + log(ErrorLevel.WARNING, message); + } + + public void warning(String format, Object... objects) { + log(ErrorLevel.WARNING, format, objects); + } + + public void error(String message) { + log(ErrorLevel.ERROR, message); + } + + public void error(String format, Object... objects) { + log(ErrorLevel.ERROR, format, objects); + } +} \ No newline at end of file diff --git a/task01/src/com/example/task01/Task01Main.java b/task01/src/com/example/task01/Task01Main.java deleted file mode 100644 index 9973557d..00000000 --- a/task01/src/com/example/task01/Task01Main.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.example.task01; - -public class Task01Main { - public static void main(String[] 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..d6993807 --- /dev/null +++ b/task02/src/com/example/task02/DiscountBill.java @@ -0,0 +1,22 @@ +package com.example.task02; + +public class DiscountBill extends Bill { + private final int Discount; + + public DiscountBill(int discount) { + Discount = discount; + } + + public String getDiscount() { + return Discount + "%"; + } + + public long getAbsoluteDiscount() { + return super.getPrice() - getPrice(); + } + + @Override + public long getPrice() { + return (super.getPrice() - super.getPrice() * (Discount / 100)); + } +} \ No newline at end of file diff --git a/task03/src/com/example/task03/Hours.java b/task03/src/com/example/task03/Hours.java new file mode 100644 index 00000000..f8109b43 --- /dev/null +++ b/task03/src/com/example/task03/Hours.java @@ -0,0 +1,29 @@ +package com.example.task03; + +public class Hours implements TimeUnit { + private final long Hours; + + public Hours(long hours) { + Hours = hours; + } + + @Override + public long toMillis() { + return Hours * 3600 * 1000; + } + + @Override + public long toSeconds() { + return Hours * 3600; + } + + @Override + public long toMinutes() { + return Hours * 60; + } + + @Override + public long getHours() { + return Hours; + } +} \ 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..f5248a37 100644 --- a/task03/src/com/example/task03/Milliseconds.java +++ b/task03/src/com/example/task03/Milliseconds.java @@ -4,25 +4,29 @@ * Интервал в миллисекундах */ public class Milliseconds implements TimeUnit { + private final long Milliseconds; - private final long amount; + public Milliseconds(long milliseconds) { + Milliseconds = milliseconds; - public Milliseconds(long amount) { - this.amount = amount; } @Override public long toMillis() { - return amount; + return Milliseconds; } @Override public long toSeconds() { - return amount / 1000; + return Math.round(Milliseconds / 1000f); } @Override public long toMinutes() { - return amount / 1000 * 60; + return Math.round(Milliseconds / (float) (1000 * 60)); } + + @Override + public long getHours() { + return Math.round(Milliseconds / (float) (3600 * 1000)); } diff --git a/task03/src/com/example/task03/Minutes.java b/task03/src/com/example/task03/Minutes.java index d6fa0594..4ac1ce3e 100644 --- a/task03/src/com/example/task03/Minutes.java +++ b/task03/src/com/example/task03/Minutes.java @@ -2,26 +2,32 @@ public class Minutes implements TimeUnit { - public Minutes(long amount) { - // TODO: реализовать - throw new UnsupportedOperationException(); + private final long Minutes; + + public Minutes(long minutes) { + Minutes = minutes; } @Override public long toMillis() { // TODO: реализовать - throw new UnsupportedOperationException(); + return Minutes * 60 * 1000; } @Override public long toSeconds() { // TODO: реализовать - throw new UnsupportedOperationException(); + return Minutes * 60; } @Override public long toMinutes() { // TODO: реализовать - throw new UnsupportedOperationException(); + return Minutes; + } + + @Override + public long getHours() { + return Math.round(Minutes / 60f); } } diff --git a/task03/src/com/example/task03/Seconds.java b/task03/src/com/example/task03/Seconds.java index ce6bc213..cb1e55e4 100644 --- a/task03/src/com/example/task03/Seconds.java +++ b/task03/src/com/example/task03/Seconds.java @@ -5,24 +5,28 @@ */ public class Seconds implements TimeUnit { - private final long amount; + private final long Seconds; - public Seconds(long amount) { - this.amount = amount; + public Seconds(long seconds) { + Seconds = seconds; } @Override public long toMillis() { - return amount * 1000; + return Seconds * 1000; } @Override public long toSeconds() { - return amount; + return Seconds; } @Override public long toMinutes() { - return Math.round(amount / 60); + return Math.round(Seconds / 60f); + } + + public long getHours() { + return Math.round(Seconds / 3600f); } } diff --git a/task03/src/com/example/task03/TimeUnit.java b/task03/src/com/example/task03/TimeUnit.java index 3b123fb8..ba6f7d34 100644 --- a/task03/src/com/example/task03/TimeUnit.java +++ b/task03/src/com/example/task03/TimeUnit.java @@ -27,5 +27,6 @@ public interface TimeUnit { * @return количество минут в текущем интервале */ long toMinutes(); + long getHours(); } diff --git a/task03/src/com/example/task03/TimeUnitUtils.java b/task03/src/com/example/task03/TimeUnitUtils.java index 790f8850..c508bd31 100644 --- a/task03/src/com/example/task03/TimeUnitUtils.java +++ b/task03/src/com/example/task03/TimeUnitUtils.java @@ -15,13 +15,46 @@ 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.getHours()); + } + + public static Hours toHours(Seconds seconds) { + return new Hours(seconds.getHours()); + } + + public static Hours toHours(Minutes minutes) { + return new Hours(minutes.getHours()); + } } 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/ErrorLevel.java b/task04/src/com/example/task04/ErrorLevel.java new file mode 100644 index 00000000..c53015f8 --- /dev/null +++ b/task04/src/com/example/task04/ErrorLevel.java @@ -0,0 +1,5 @@ +package com.example.task04; + +public enum ErrorLevel { + DEBUG, INFO, WARNING, ERROR + } \ 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..aeee3191 --- /dev/null +++ b/task04/src/com/example/task04/FileHandler.java @@ -0,0 +1,21 @@ +package com.example.task04; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; + +public class FileHandler implements MessageHandler { + private final String Path; + + public FileHandler(String path) { + Path = path; + } + + @Override + public void log(String message) { + File file = new File(Path); + @@ -21,4 +21,4 @@ + System.out.println(ex.getMessage()); + } + } +} \ 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..0881f24f --- /dev/null +++ b/task04/src/com/example/task04/Logger.java @@ -0,0 +1,109 @@ +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 static final HashMap loggers = new HashMap<>(); + private static ArrayList handlers = new ArrayList<>(); + private final String name; + private ErrorLevel level; + + public Logger(String name) { + this.name = name; + this.level = ErrorLevel.INFO; + handlers.add(new ConsoleHandler()); + loggers.put(this.name, this); + } + + public Logger(String name, ArrayList messageHandlers) { + this.name = name; + this.level = ErrorLevel.INFO; + handlers = messageHandlers; + loggers.put(this.name, this); + } + + public Logger(String name, ErrorLevel level, ArrayList messageHandlers) { + this.name = name; + this.level = level; + handlers = messageHandlers; + loggers.put(this.name, this); + } + + public static Logger getLogger(String name) { + if (loggers.get(name) == null) loggers.put(name, new Logger(name)); + return loggers.get(name); + } + + + public ErrorLevel getLevel() { + return level; + } + + public void setLevel(ErrorLevel level) { + this.level = level; + } + + public String getName() { + return name; + } + + private void log(ErrorLevel level, String message) { + if (this.level.ordinal() <= level.ordinal()) { + String date = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy.MM.dd hh:mm:ss")); + String printedMessage = MessageFormat.format("[{0}] {1} {2} - {3}", level, date, name, message); + + for (MessageHandler messageHandler : handlers) + messageHandler.log(printedMessage); + + } +} +; + private void log(ErrorLevel level, String format, Object... args) { + if (this.level.ordinal() <= level.ordinal()) { + String message = MessageFormat.format(format, args); + + for (MessageHandler messageHandler : handlers) + messageHandler.log(message); + } + } + + public void info(String message) { + log(ErrorLevel.INFO, message); + } + + public void info(String format, Object... objects) { + log(ErrorLevel.INFO, format, objects); + } + + public void debug(String message) { + log(ErrorLevel.DEBUG, message); + } + + public void debug(String format, Object... objects) { + log(ErrorLevel.DEBUG, format, objects); + } + + public void warning(String message) { + log(ErrorLevel.WARNING, message); + } + + public void warning(String message, Object... objects) { + log(ErrorLevel.WARNING, message); + } + + + public void error(String message) { + log(ErrorLevel.ERROR, message); + } + + public void error(String format, Object... objects) { + log(ErrorLevel.ERROR, format, objects); + } + } + + + diff --git a/task04/src/com/example/task04/MemoryHandler.java b/task04/src/com/example/task04/MemoryHandler.java new file mode 100644 index 00000000..4dcf16a3 --- /dev/null +++ b/task04/src/com/example/task04/MemoryHandler.java @@ -0,0 +1,30 @@ +package com.example.task04; + +import java.util.ArrayList; +import java.util.Arrays; + +public class MemoryHandler implements MessageHandler { + private final int MaxSize; + private final ArrayList Messages = new ArrayList<>(); + private final ArrayList Handlers = new ArrayList<>(); + + public MemoryHandler(int maxSize, MessageHandler... handlers) { + MaxSize = maxSize; + ArrayList newHandlers = new ArrayList<>(Arrays.asList(handlers)); + Handlers.addAll(newHandlers); + } + + @Override + public void log(String message) { + Messages.add(message); + if (Messages.size() > MaxSize) sendMsgToHandler(); + } + + public void sendMsgToHandler() { + for (MessageHandler handler : Handlers) { + for (String message : Messages) + handler.log(message); + Messages.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..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..6b9d81d1 --- /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) { + Path = path; + Rotation = rotation; + } + + @Override + public void log(String message) { + LocalDateTime dateNow = LocalDateTime.now().truncatedTo(Rotation); + File file = new File(Path + dateNow.toString().replace(':', '#') + ".txt"); + try (FileOutputStream fileOutputStream = new FileOutputStream(file)) { + fileOutputStream.write(message.getBytes()); + } catch (IOException ex) { + System.out.println(ex.getMessage()); + } + } + } \ No newline at end of file