diff --git a/task01/src/com/example/task01/Level.java b/task01/src/com/example/task01/Level.java new file mode 100644 index 00000000..ca6f18ba --- /dev/null +++ b/task01/src/com/example/task01/Level.java @@ -0,0 +1,8 @@ +package com.example.task01; + +public enum Level { + 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..15580c2c --- /dev/null +++ b/task01/src/com/example/task01/Logger.java @@ -0,0 +1,73 @@ +package com.example.task01; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; + +public class Logger { + private String name; + private Level level; + private static ArrayList loggers = new ArrayList(); + public Logger(String name) { + this.name = name; + } + public String getName(){ + return name; + } + public static Logger getLogger(String name){ + for (int i= 0; i< loggers.size();i++){ + if(loggers.get(i).getName().equals(name)){ + return loggers.get(i); + } + } + Logger logger = new Logger(name); + loggers.add(logger); + return logger; + } + public void setLevel(Level level) { + this.level = level; + } + public Level getLevel() { + return level; + } + private String formatMessage(Level level, String Message){ + String date = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(new Date()); + + return String.format("[%s] %s %s - %s", level.name(), date, this.name, Message); + } + public void log(Level level, String message){ + + if(level.compareTo(this.level) >= 0){ + System.out.println(formatMessage(level, message)); + } + } + public void log(Level level, String format, Object... args){ + if(level.compareTo(this.level) >= 0){ + System.out.println(formatMessage(level, String.format(format, args))); + } + } + public void debug(String message){ + log(Level.DEBUG, message); + } + public void debug(String format, Object... args){ + log(Level.DEBUG,format,args); + } + public void info(String message){ + log(Level.INFO, message); + } + public void info(String format, Object... args){ + log(Level.INFO, format, args); + } + public void warning(String message){ + log(Level.WARNING, message); + } + public void warning(String format, Object... args){ + log(Level.WARNING, format, args); + } + public void error(String message){ + log(Level.ERROR, message); + } + public void error(String format, Object... args){ + log(Level.ERROR, format, args); + } +} diff --git a/task01/src/com/example/task01/Task01Main.java b/task01/src/com/example/task01/Task01Main.java index 9973557d..4313cbbc 100644 --- a/task01/src/com/example/task01/Task01Main.java +++ b/task01/src/com/example/task01/Task01Main.java @@ -2,6 +2,6 @@ public class Task01Main { public static void main(String[] args) { - + return; } } diff --git a/task02/src/com/example/task02/DiscountBill.java b/task02/src/com/example/task02/DiscountBill.java new file mode 100644 index 00000000..8e429d02 --- /dev/null +++ b/task02/src/com/example/task02/DiscountBill.java @@ -0,0 +1,18 @@ +package com.example.task02; + +public class DiscountBill extends Bill{ + private final double discount; + public DiscountBill(int discount) { + this.discount = discount; + } + public String getDiscount() { + return discount + "%"; + } + public long getAbsoluteDiscount(){ + return (long)(super.getPrice() * ((double)discount / 100)); + } + @Override + public long getPrice() { + return super.getPrice() - getAbsoluteDiscount(); + } +} diff --git a/task02/src/com/example/task02/Task02Main.java b/task02/src/com/example/task02/Task02Main.java index e589f2d3..6cfca1db 100644 --- a/task02/src/com/example/task02/Task02Main.java +++ b/task02/src/com/example/task02/Task02Main.java @@ -2,12 +2,12 @@ public class Task02Main { - private static final Item ITEM1 = new Item("Товар 1", 10); - private static final Item ITEM2 = new Item("Товар 2", 20); - private static final Item ITEM3 = new Item("Товар 3", 30); - private static final Item ITEM4 = new Item("Товар 4", 40); - private static final Item ITEM5 = new Item("Товар 5", 50); - private static final Item ITEM6 = new Item("Товар 6", 60); + private static final Item ITEM1 = new Item("Item 1", 10); + private static final Item ITEM2 = new Item("Item 2", 20); + private static final Item ITEM3 = new Item("Item 3", 30); + private static final Item ITEM4 = new Item("Item 4", 40); + private static final Item ITEM5 = new Item("Item 5", 50); + private static final Item ITEM6 = new Item("Item 6", 60); public static void main(String[] args) { Bill bill = new Bill(); diff --git a/task03/src/com/example/task03/Hours.java b/task03/src/com/example/task03/Hours.java new file mode 100644 index 00000000..6b8ff907 --- /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 toMinutes() { + return amount * 60; + } + + @Override + public long toSeconds() { + return amount * 3600; + } + + @Override + public long toMillis() { + return amount * 3600000; + } + + @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..bfbb5132 100644 --- a/task03/src/com/example/task03/Milliseconds.java +++ b/task03/src/com/example/task03/Milliseconds.java @@ -23,6 +23,11 @@ public long toSeconds() { @Override public long toMinutes() { - return amount / 1000 * 60; + return amount / 60000; + } + + @Override + public long toHours() { + return amount / 3600000; } } diff --git a/task03/src/com/example/task03/Minutes.java b/task03/src/com/example/task03/Minutes.java index d6fa0594..67c9744b 100644 --- a/task03/src/com/example/task03/Minutes.java +++ b/task03/src/com/example/task03/Minutes.java @@ -1,27 +1,32 @@ package com.example.task03; 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 amount / 60; } } diff --git a/task03/src/com/example/task03/Seconds.java b/task03/src/com/example/task03/Seconds.java index ce6bc213..7814ee3a 100644 --- a/task03/src/com/example/task03/Seconds.java +++ b/task03/src/com/example/task03/Seconds.java @@ -25,4 +25,9 @@ public long toSeconds() { public long toMinutes() { return Math.round(amount / 60); } + + @Override + public long toHours() { + return 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..a32efec7 100644 --- a/task03/src/com/example/task03/TimeUnitUtils.java +++ b/task03/src/com/example/task03/TimeUnitUtils.java @@ -24,4 +24,6 @@ public static Milliseconds toMillis(Seconds seconds) { public static Seconds toSeconds(Milliseconds millis) { return new Seconds(millis.toSeconds()); } + public static Minutes toMinutes(Seconds seconds){return new Minutes(seconds.toMinutes());} + 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..65705178 --- /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 Handle(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..100c69a9 --- /dev/null +++ b/task04/src/com/example/task04/FileHandler.java @@ -0,0 +1,33 @@ +package com.example.task04; +import javax.imageio.IIOException; +import java.io.*; +public class FileHandler implements MessageHandler{ + private String fileName; + public FileHandler(){} + public FileHandler(String fileName){ + this.fileName = fileName; + } + @Override + public void Handle(String message) { + try { + PrintWriter pw = new PrintWriter( new FileWriter(fileInit(fileName),true) ); + pw.println(message); + pw.close(); + } catch (FileNotFoundException e) { + throw new RuntimeException(e); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + private File fileInit(String fileName){ + File file = new File(String.format("task04/%s.txt",fileName)); + if(!file.exists()){ + try { + file.createNewFile(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + return file; + } +} diff --git a/task04/src/com/example/task04/HandleEnum.java b/task04/src/com/example/task04/HandleEnum.java new file mode 100644 index 00000000..0d25d299 --- /dev/null +++ b/task04/src/com/example/task04/HandleEnum.java @@ -0,0 +1,15 @@ +package com.example.task04; +import java.time.temporal.ChronoUnit; +public enum HandleEnum { + ConsoleHandle(new ConsoleHandler()), + FileHandle(new FileHandler()), + RotationFileHandle(new RotationFileHandler(ChronoUnit.SECONDS)), + MemoryHandle(new MemoryHandler()); + private final MessageHandler messageHandler; + HandleEnum(MessageHandler messageHandler) { + this.messageHandler = messageHandler; + } + public MessageHandler getHandle(){ + return this.messageHandler; + } +} diff --git a/task04/src/com/example/task04/Level.java b/task04/src/com/example/task04/Level.java new file mode 100644 index 00000000..277816f3 --- /dev/null +++ b/task04/src/com/example/task04/Level.java @@ -0,0 +1,8 @@ +package com.example.task04; + +public enum Level { + DEBUG, + INFO, + WARNING, + ERROR +} diff --git a/task04/src/com/example/task04/Logger.java b/task04/src/com/example/task04/Logger.java new file mode 100644 index 00000000..f911980d --- /dev/null +++ b/task04/src/com/example/task04/Logger.java @@ -0,0 +1,75 @@ +package com.example.task04; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; + +public class Logger { + private String name; + private Level level; + private MessageHandler messageHandler; + private static ArrayList loggers = new ArrayList(); + public Logger(String name, HandleEnum handleType) { + this.name = name; + messageHandler = handleType.getHandle(); + } + public String getName(){ + return name; + } + public static Logger getLogger(String name){ + for (int i= 0; i< loggers.size();i++){ + if(loggers.get(i).getName().equals(name)){ + return loggers.get(i); + } + } + Logger logger = new Logger(name); + loggers.add(logger); + return logger; + } + public void setLevel(Level level) { + this.level = level; + } + public Level getLevel() { + return level; + } + private String formatMessage(Level level, String Message){ + String date = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(new Date()); + + return String.format("[%s] %s %s - %s", level.name(), date, this.name, Message); + } + public void log(Level level, String message){ + + if(level.compareTo(this.level) >= 0){ + messageHandler.Handle(formatMessage(level, message)); + } + } + public void log(Level level, String format, Object... args){ + if(level.compareTo(this.level) >= 0){ + messageHandler.Handle(formatMessage(level, String.format(format, args))); + } + } + public void debug(String message){ + log(Level.DEBUG, message); + } + public void debug(String format, Object... args){ + log(Level.DEBUG,format,args); + } + public void info(String message){ + log(Level.INFO, message); + } + public void info(String format, Object... args){ + log(Level.INFO, format, args); + } + public void warning(String message){ + log(Level.WARNING, message); + } + public void warning(String format, Object... args){ + log(Level.WARNING, format, args); + } + public void error(String message){ + log(Level.ERROR, message); + } + public void error(String format, Object... args){ + log(Level.ERROR, format, 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..a18d0615 --- /dev/null +++ b/task04/src/com/example/task04/MemoryHandler.java @@ -0,0 +1,20 @@ +package com.example.task04; + +import java.util.ArrayList; + +public class MemoryHandler implements MessageHandler{ + private ArrayList memory = new ArrayList<>(); + private int limit = 50; + private ConsoleHandler handler = new ConsoleHandler(); + @Override + public void Handle(String message) { + if (memory.size() < limit){ + memory.add(message); + }else { + for (String element : memory){ + handler.Handle(element); + } + memory.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..8a9b08be --- /dev/null +++ b/task04/src/com/example/task04/MessageHandler.java @@ -0,0 +1,5 @@ +package com.example.task04; + +public interface MessageHandler { + void Handle(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..1cabf193 --- /dev/null +++ b/task04/src/com/example/task04/RotationFileHandler.java @@ -0,0 +1,24 @@ +package com.example.task04; + +import java.text.SimpleDateFormat; +import java.time.LocalDateTime; +import java.time.temporal.ChronoUnit; +import java.util.Date; + +public class RotationFileHandler implements MessageHandler{ + private ChronoUnit rotation; + private LocalDateTime previousRotation; + private FileHandler fileHandler; + public RotationFileHandler(ChronoUnit rotation) { + this.previousRotation = LocalDateTime.now(); + this.rotation = rotation; + } + @Override + public void Handle(String message) { + if(LocalDateTime.now().isAfter(previousRotation.plus(3,rotation)) ) { + fileHandler = new FileHandler( new SimpleDateFormat("HH-mm-ss").format(new Date())); + fileHandler.Handle(message); + previousRotation = LocalDateTime.now(); + } + } +}