Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
100 changes: 100 additions & 0 deletions task01/src/com/example/task01/Logger.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
package com.example.task01;

import java.util.ArrayList;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class Logger {

private static final DateTimeFormatter FORMATTER =
DateTimeFormatter.ofPattern("yyyy.MM.dd HH:mm:ss");

private String getCurrentDateTime() {
return LocalDateTime.now().format(FORMATTER);
}

public enum Level {
DEBUG,
INFO,
WARNING,
ERROR
}

private String name;
private static ArrayList<Logger> loggerList = new ArrayList<>();
private Level level;

public String getName(){
return name;
}

public Level getLevel(){
return level;
}

public void setLevel(Level level){
this.level = level;
}

public Logger(String name, Level level){
this.name = name;
this.level = level;
loggerList.add(this);
}

public static Logger getLogger(String name){
for (Logger e : loggerList){
if (e.getName().equals(name)) return e;
}

return new Logger(name, Level.DEBUG);
}

public void debug(String message){
log(Level.DEBUG, message);
}

public void debug(String pattern, Object... args){
log(Level.DEBUG, pattern, args);
}

public void info(String message){
log(Level.INFO, message);
}

public void info(String pattern, Object... args){
log(Level.INFO, pattern, args);
}

public void warning(String message){
log(Level.WARNING, message);
}

public void warning(String pattern, Object... args){
log(Level.WARNING, pattern, args);
}

public void error(String message){
log(Level.ERROR, message);
}

public void error(String pattern, Object... args){
log(Level.ERROR, pattern, args);
}

public void log(Level level, String message){
if (level.ordinal() >= this.level.ordinal()){
String datetime = getCurrentDateTime();
String logMessage = String.format("[%s] %s %s - %s",
level, datetime, name, message);

System.out.println(logMessage);
}
}

public void log(Level level, String pattern, Object... args){
if (level.ordinal() >= this.level.ordinal()){
System.out.println(String.format(pattern, args));
}
}
}
22 changes: 22 additions & 0 deletions task02/src/com/example/task02/DiscountBill.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.example.task02;

public class DiscountBill extends Bill {
private final double discount;

public DiscountBill(double discount){
this.discount = discount;
}

@Override
public long getPrice(){
return (long) (super.getPrice() - super.getPrice() * this.discount);
}

public double getDiscount(){
return this.discount * 100;
}

public long getAbsoluteDiscount(){
return super.getPrice() - this.getPrice();
}
}
29 changes: 29 additions & 0 deletions task03/src/com/example/task03/Hours.java
Original file line number Diff line number Diff line change
@@ -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 * 60 * 60 * 1000;
}

@Override
public long toSeconds() {
return amount * 60 * 60;
}

@Override
public long toMinutes() {
return amount * 60;
}

@Override
public long getHours() {
return amount;
}
}
9 changes: 7 additions & 2 deletions task03/src/com/example/task03/Milliseconds.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,16 @@ public long toMillis() {

@Override
public long toSeconds() {
return amount / 1000;
return Math.round(amount / 1000.0);
}

@Override
public long toMinutes() {
return amount / 1000 * 60;
return Math.round(amount / (1000.0 * 60.0));
}

@Override
public long getHours() {
return Math.round(amount / (1000.0 * 60.0 * 60.0));
}
}
14 changes: 10 additions & 4 deletions task03/src/com/example/task03/Minutes.java
Original file line number Diff line number Diff line change
@@ -1,27 +1,33 @@
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 getHours() {
return Math.round(amount / 60.0);
}
}
7 changes: 6 additions & 1 deletion task03/src/com/example/task03/Seconds.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,11 @@ public long toSeconds() {

@Override
public long toMinutes() {
return Math.round(amount / 60);
return Math.round(amount / 60.0);
}

@Override
public long getHours() {
return Math.round(amount / (60.0 * 60.0));
}
}
7 changes: 7 additions & 0 deletions task03/src/com/example/task03/TimeUnit.java
Original file line number Diff line number Diff line change
Expand Up @@ -28,4 +28,11 @@ public interface TimeUnit {
*/
long toMinutes();

/**
* Возвращает продолжительность текущего интервала, пересчитанного в часах.
* При необходимости округлять по обычным правилам округления (число, меньшее 0.5 переходит в 0, большее или равное - в 1)
*
* @return количество часов в текущем интервале
*/
long getHours();
}
52 changes: 52 additions & 0 deletions task03/src/com/example/task03/TimeUnitUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -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());
}

/**
* Конвертирует интервал в миллисекундах в интервал в секундах
*
Expand All @@ -24,4 +32,48 @@ 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());
}

/**
* Конвертирует интервал в миллисекундах в интервал в минутах
*
* @param millis интервал в миллисекундах
* @return интервал в минутах
*/
public static Minutes toMinutes(Milliseconds millis) {
return new Minutes(millis.toMinutes());
}

public static Minutes toMinutes(Seconds seconds) {
return new Minutes(seconds.toMinutes());
}

public static Minutes toMinutes(Hours hours) {
return new Minutes(hours.toMinutes());
}

/**
* Конвертирует интервал в миллисекундах в интервал в часах
*
* @param millis интервал в миллисекундах
* @return интервал в часах
*/
public static Hours getHours(Milliseconds millis) {
return new Hours(millis.getHours());
}

public static Hours getHours(Seconds seconds) {
return new Hours(seconds.getHours());
}

public static Hours getHours(Minutes minutes) {
return new Hours(minutes.getHours());
}
}
8 changes: 8 additions & 0 deletions task04/src/com/example/task04/ConsoleHandler.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.example.task04;

public class ConsoleHandler implements MessageHandler{
@Override
public void log(String message){
System.out.println(message);
}
}
32 changes: 32 additions & 0 deletions task04/src/com/example/task04/FileHandler.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package com.example.task04;

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.io.IOException;
import java.nio.file.StandardOpenOption;

public class FileHandler implements MessageHandler {
private final Path filePath;

public FileHandler(String filePath) {
this.filePath = Paths.get(filePath);
try {
if (this.filePath.getParent() != null) {
Files.createDirectories(this.filePath.getParent());
}
} catch (IOException e) {
throw new RuntimeException("Cannot create directories", e);
}
}

@Override
public void log(String message) {
try {
Files.write(filePath, (message + System.lineSeparator()).getBytes(),
StandardOpenOption.CREATE, StandardOpenOption.APPEND);
} catch (IOException e) {
throw new RuntimeException("Cannot write to file: " + filePath, e);
}
}
}
Loading