diff --git a/task01/src/com/example/task01/Logger.java b/task01/src/com/example/task01/Logger.java new file mode 100644 index 00000000..32e5f628 --- /dev/null +++ b/task01/src/com/example/task01/Logger.java @@ -0,0 +1,83 @@ +package com.example.task01; + + +import java.text.MessageFormat; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.*; + +public class Logger { + private final String name; + private static final Map loggers = new HashMap<>(); + + public enum Level{ + DEBUG, INFO, WARNING, ERROR + } + + private Level currentLevel = Level.DEBUG; + + private Logger(String name){ + this.name = name; + } + + public String getName(){ + return name; + } + + public static Logger getLogger(String name){ + if (!loggers.containsKey(name)){ + loggers.put(name, new Logger(name)); + } + return loggers.get(name); + } + + public void setLevel(Level level){ + this.currentLevel = level; + } + + public Level getLevel(){ + return currentLevel; + } + + public void log(Level level, String template, Object... args){ + if(level.ordinal() >= currentLevel.ordinal()){ + String formattedMessage = MessageFormat.format(template, args); + printLog(level, formattedMessage); + } + } + + private void printLog(Level level, String message){ + LocalDateTime now = LocalDateTime.now(); + DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy.MM.dd"); + DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("HH:mm:ss"); + String date = now.format(dateFormatter); + String time = now.format(timeFormatter); + + System.out.println(String.format("[%s] %s %s %s - %s", level, date, time, name, message)); + } + + public void debug(String template, Object... args){ + log(Level.DEBUG, template, args); + } + public void debug(String message){ + log(Level.DEBUG, message); + } + public void info(String template, Object... args){ + log(Level.INFO, template, args); + } + public void info(String message){ + log(Level.INFO, message); + } + public void warning(String template, Object... args){ + log(Level.WARNING, template, args); + } + public void warning(String message){ + log(Level.WARNING, message); + } + public void error(String template, Object... args){ + log(Level.ERROR, template, args); + } + public void error(String message) { + log(Level.ERROR, message); + } +} diff --git a/task01/src/com/example/task01/Task01Main.java b/task01/src/com/example/task01/Task01Main.java index 9973557d..a26fe332 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 = Logger.getLogger("testLogger"); + Logger logger2 = Logger.getLogger("testLogger"); + logger1.log(Logger.Level.ERROR, "error complete"); + System.out.println(); } } diff --git a/task02/src/com/example/task02/DiscountBill.java b/task02/src/com/example/task02/DiscountBill.java new file mode 100644 index 00000000..796fcfc4 --- /dev/null +++ b/task02/src/com/example/task02/DiscountBill.java @@ -0,0 +1,22 @@ +package com.example.task02; + +public class DiscountBill extends Bill{ + private long discount; + + public DiscountBill(long discount){ + this.discount = discount; + } + + public String getDiscountPercent() { + return discount + "%"; + } + + public long getDiscountAmount(){ + return super.getPrice() * discount / 100; + } + + @Override + public long getPrice() { + return super.getPrice() - super.getPrice() * discount / 100; + } +} diff --git a/task02/src/com/example/task02/Task02Main.java b/task02/src/com/example/task02/Task02Main.java index e589f2d3..99452673 100644 --- a/task02/src/com/example/task02/Task02Main.java +++ b/task02/src/com/example/task02/Task02Main.java @@ -17,5 +17,13 @@ public static void main(String[] args) { System.out.println(bill); bill.add(ITEM3, 3); System.out.println(bill); + + DiscountBill discountBill = new DiscountBill(15); + discountBill.add(ITEM1, 12); + discountBill.add(ITEM2, 5); + discountBill.add(ITEM4,5); + System.out.println(discountBill.getDiscountAmount()); // абсолютная разница + System.out.println(discountBill.getDiscountPercent()); // % скидки + System.out.println(discountBill); } } diff --git a/task03/src/com/example/task03/Hours.java b/task03/src/com/example/task03/Hours.java new file mode 100644 index 00000000..0756505f --- /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 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..d4d098a0 100644 --- a/task03/src/com/example/task03/Milliseconds.java +++ b/task03/src/com/example/task03/Milliseconds.java @@ -18,11 +18,14 @@ 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) (3600 * 1000)); } } diff --git a/task03/src/com/example/task03/Minutes.java b/task03/src/com/example/task03/Minutes.java index d6fa0594..d884ba60 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 * 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); } } diff --git a/task03/src/com/example/task03/Seconds.java b/task03/src/com/example/task03/Seconds.java index ce6bc213..0e5d412a 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 / 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..3bf1089f 100644 --- a/task03/src/com/example/task03/TimeUnit.java +++ b/task03/src/com/example/task03/TimeUnit.java @@ -28,4 +28,5 @@ 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..07db0cc8 100644 --- a/task03/src/com/example/task03/TimeUnitUtils.java +++ b/task03/src/com/example/task03/TimeUnitUtils.java @@ -1,5 +1,7 @@ package com.example.task03; +import javax.jws.Oneway; + /** * Класс, в котором собраны методы для работы с {@link TimeUnit} */ @@ -15,6 +17,12 @@ 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,18 @@ 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 Hours toHours(Minutes minutes) { return new Hours(minutes.toHours()); } + + public static Hours toHours(Seconds seconds) { return new Hours(seconds.toHours()); } + + public static Hours toHours(Milliseconds millis){ return new Hours(millis.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..e38884b1 --- /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 +} diff --git a/task04/src/com/example/task04/FileHandler.java b/task04/src/com/example/task04/FileHandler.java new file mode 100644 index 00000000..eb052ece --- /dev/null +++ b/task04/src/com/example/task04/FileHandler.java @@ -0,0 +1,24 @@ +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); + + try (FileOutputStream fileOutputStream = new FileOutputStream(file)) { + fileOutputStream.write(message.getBytes()); + } catch (IOException ex) { + System.out.println(ex.getMessage()); + } + } +} diff --git a/task04/src/com/example/task04/Logger.java b/task04/src/com/example/task04/Logger.java new file mode 100644 index 00000000..0201a528 --- /dev/null +++ b/task04/src/com/example/task04/Logger.java @@ -0,0 +1,106 @@ +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..70ef601e --- /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(); + } + } +} 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..44614c48 --- /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()); + } + } +} diff --git a/task04/src/com/example/task04/Task04Main.java b/task04/src/com/example/task04/Task04Main.java index 55917a30..3925a993 100644 --- a/task04/src/com/example/task04/Task04Main.java +++ b/task04/src/com/example/task04/Task04Main.java @@ -1,7 +1,10 @@ package com.example.task04; +import java.time.temporal.ChronoUnit; +import java.util.ArrayList; + public class Task04Main { - public static void main(String[] args) { + public static void main(String[] args) { + } } -}