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
5 changes: 4 additions & 1 deletion task01/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,10 @@
Требования к классу `Logger`:
* Каждому экземпляру класса можно задать имя.
Имя можно получить, вызвав публичный метод `String getName()`.
* В классе должен быть публичный статический метод `getLogger(String name)`, возвращающий экземпляр логгера с указанным именем. Повторый вызов с тем же аргументом должен возвращать тот же самый экземпляр, что и при первом вызове. Если продемонстрировать это кодом, то следующий код должен возвращать true:
* В классе должен быть публичный статический метод `getLogger(String name)`,
* возвращающий экземпляр логгера с указанным именем.
* Повторый вызов с тем же аргументом должен возвращать тот же самый экземпляр,
* что и при первом вызове. Если продемонстрировать это кодом, то следующий код должен возвращать true:
```
Logger logger1 = Logger.getLogger("test")
Logger logger2 = Logger.getLogger("test")
Expand Down
9 changes: 9 additions & 0 deletions task01/src/com/example/task01/LogLevel.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.example.task01;

public enum LogLevel {

DEBUG, /* отдалка */
INFO, /* информационное сообщение */
WARNING, /* предупреждение */
ERROR /* ошибка */
}
85 changes: 85 additions & 0 deletions task01/src/com/example/task01/Logger.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
package com.example.task01;


import java.lang.reflect.Array;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

public class Logger {
private final String name;
private static ArrayList<Logger> listLoggers;
private LogLevel logLevel;
public Logger(String name){
this.name = name;
}
public Logger(){
this.name = "Logger";
}

public String getName(){
return name;
}
public static Logger getLogger(String name){
for(Logger i : listLoggers){
if(i.name .equals(name)){
return i;
}
}
Logger newLogger = new Logger(name);
listLoggers.add(newLogger);
return newLogger;
}
public LogLevel getLevel(){
return logLevel;
}
public void setLevel(LogLevel logLevel){
this.logLevel = logLevel;
}

public void error(String message){
log(LogLevel.ERROR, message);
}
public void error(String format, Object... args){
log(LogLevel.ERROR, format, args);
}

public void warning(String message){
log(LogLevel.WARNING, message);
}
public void warning(String format, Object... args){
log(LogLevel.WARNING, format, args);
}

public void info(String message){
log(LogLevel.INFO, message);
}
public void info(String format, Object... args){
log(LogLevel.INFO, format, args);
}

public void debug(String message){
log(LogLevel.DEBUG, message);
}
public void debug(String format, Object... args){
log(LogLevel.DEBUG,format,args);
}

public void log(LogLevel logLevel, String message){

if(logLevel.compareTo(this.logLevel) >= 0){
System.out.println(formatMessage(logLevel, message));
}
}
public void log(LogLevel logLevel, String format, Object... args){
if(logLevel.compareTo(this.logLevel) >= 0){
System.out.println(formatMessage(logLevel, String.format(format, args)));
}
}

private String formatMessage(LogLevel logLevel, String Message){
String date = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(new Date());

return String.format("[%s] %s %s - %s", logLevel.name(), date, this.name, Message);
}
}
23 changes: 23 additions & 0 deletions task02/src/com/example/task02/DiscontBill.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.example.task02;

public class DiscontBill extends Bill{
private final double discont;
public DiscontBill(int discont) {
this.discont = discont;
}
public String getDiscont() {
return discont + "%";
}

@Override
public long getPrice() {
double disc = super.getPrice() * (discont / 100);

double price = super.getPrice();
return (long)Math.abs(disc - price);
}

public long getAbsoluteDiscont() {
return super.getPrice()- getPrice();
}
}
22 changes: 22 additions & 0 deletions task03/src/com/example/task03/Hour.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.example.task03;

public class Hour implements TimeUnit{

private final long amount;

public Hour(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; }
}
10 changes: 6 additions & 4 deletions task03/src/com/example/task03/Milliseconds.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,13 @@ public long toMillis() {

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

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

@Override
public long getHours() { return Math.round((float) amount / 1000 / 3600f); }

}
25 changes: 9 additions & 16 deletions task03/src/com/example/task03/Minutes.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,26 +2,19 @@

public class Minutes implements TimeUnit {

public Minutes(long amount) {
// TODO: реализовать
throw new UnsupportedOperationException();
}
private final long amount;

public Minutes(long amount) { this.amount = amount; }

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

@Override
public long toMillis() {
// TODO: реализовать
throw new UnsupportedOperationException();
}
public long toSeconds() { return amount * 60; }

@Override
public long toSeconds() {
// TODO: реализовать
throw new UnsupportedOperationException();
}
public long toMinutes() { return amount; }

@Override
public long toMinutes() {
// TODO: реализовать
throw new UnsupportedOperationException();
}
public long getHours() { return Math.round(amount / 60f); } // проверка с округлением
}
5 changes: 4 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,9 @@ public long toSeconds() {

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

@Override
public long getHours() { return Math.round(amount / 3600f); }
}
1 change: 1 addition & 0 deletions task03/src/com/example/task03/TimeUnit.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,5 +27,6 @@ public interface TimeUnit {
* @return количество минут в текущем интервале
*/
long toMinutes();
long getHours();

}
5 changes: 5 additions & 0 deletions task03/src/com/example/task03/TimeUnitUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,4 +24,9 @@ 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 Seconds toSeconds(Minutes minutes) {return new Seconds(minutes.toSeconds()); }
public static Hour toHours(Minutes minutes) { return new Hour(minutes.getHours()); }
public static Minutes toMinutes(Hour hours) { return new Minutes(hours.toMinutes()); }
}
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);
}
}
16 changes: 16 additions & 0 deletions task04/src/com/example/task04/FileHandler.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
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", false)){
writer.write(message + "/n");
}
catch (IOException ex){
System.out.println(ex.getMessage());
}
}
}
9 changes: 9 additions & 0 deletions task04/src/com/example/task04/LogLevel.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.example.task04;

public enum LogLevel {

DEBUG, /* отдалка */
INFO, /* информационное сообщение */
WARNING, /* предупреждение */
ERROR /* ошибка */
}
84 changes: 84 additions & 0 deletions task04/src/com/example/task04/Logger.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
package com.example.task04;


import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

public class Logger {
private final String name;
private static ArrayList<Logger> listLoggers;
private LogLevel logLevel;
public Logger(String name){
this.name = name;
}
public Logger(){
this.name = "Logger";
}

public String getName(){
return name;
}
public static Logger getLogger(String name){
for(Logger i : listLoggers){
if(i.name .equals(name)){
return i;
}
}
Logger newLogger = new Logger(name);
listLoggers.add(newLogger);
return newLogger;
}
public LogLevel getLevel(){
return logLevel;
}
public void setLevel(LogLevel logLevel){
this.logLevel = logLevel;
}

public void error(String message){
log(LogLevel.ERROR, message);
}
public void error(String format, Object... args){
log(LogLevel.ERROR, format, args);
}

public void warning(String message){
log(LogLevel.WARNING, message);
}
public void warning(String format, Object... args){
log(LogLevel.WARNING, format, args);
}

public void info(String message){
log(LogLevel.INFO, message);
}
public void info(String format, Object... args){
log(LogLevel.INFO, format, args);
}

public void debug(String message){
log(LogLevel.DEBUG, message);
}
public void debug(String format, Object... args){
log(LogLevel.DEBUG,format,args);
}

public void log(LogLevel logLevel, String message){

if(logLevel.compareTo(this.logLevel) >= 0){
System.out.println(formatMessage(logLevel, message));
}
}
public void log(LogLevel logLevel, String format, Object... args){
if(logLevel.compareTo(this.logLevel) >= 0){
System.out.println(formatMessage(logLevel, String.format(format, args)));
}
}

private String formatMessage(LogLevel logLevel, String Message){
String date = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(new Date());

return String.format("[%s] %s %s - %s", logLevel.name(), date, this.name, Message);
}
}
30 changes: 30 additions & 0 deletions task04/src/com/example/task04/MemoryHandler.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package com.example.task04;

import java.util.ArrayList;

public class MemoryHandler implements MessageHandler{
private final ArrayList<String> messages = new ArrayList<>();
private final MessageHandler proxyHandler; //для использования разных обработчиков для вывода
private final int messageLimit; //кол-во после которого сбрасываем сообщения

public MemoryHandler(MessageHandler proxyHandler, int messageLimit) {
this.proxyHandler = proxyHandler;
this.messageLimit = messageLimit;
}

@Override
public void log(String message) {
messages.add(message);
if (messages.size() >= messageLimit) {
explicitLog();
}
}

//метод для явного вызова и аккумулирования сообщения в памяти
public void explicitLog() {
for (String msg : messages) {
proxyHandler.log(msg);
}
messages.clear();
}
}
5 changes: 5 additions & 0 deletions task04/src/com/example/task04/MessageHandler.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.example.task04;

public interface MessageHandler {
void log(String message);
}
Loading