diff --git a/out/production/java-lessons/ru/tn/courses/.gitignore b/out/production/java-lessons/ru/tn/courses/.gitignore new file mode 100644 index 00000000..6a3417b8 --- /dev/null +++ b/out/production/java-lessons/ru/tn/courses/.gitignore @@ -0,0 +1 @@ +/out/ diff --git a/out/production/java-lessons/ru/tn/courses/tmuminov/v2/task1/subtask1/Subtask1.class b/out/production/java-lessons/ru/tn/courses/tmuminov/v2/task1/subtask1/Subtask1.class new file mode 100644 index 00000000..7aeffbcc Binary files /dev/null and b/out/production/java-lessons/ru/tn/courses/tmuminov/v2/task1/subtask1/Subtask1.class differ diff --git a/out/production/java-lessons/ru/tn/courses/tmuminov/v2/task1/subtask2/ExampleUIClass.class b/out/production/java-lessons/ru/tn/courses/tmuminov/v2/task1/subtask2/ExampleUIClass.class new file mode 100644 index 00000000..40c7ca5a Binary files /dev/null and b/out/production/java-lessons/ru/tn/courses/tmuminov/v2/task1/subtask2/ExampleUIClass.class differ diff --git a/out/production/java-lessons/ru/tn/courses/tmuminov/v2/task1/subtask2/Subtask2.class b/out/production/java-lessons/ru/tn/courses/tmuminov/v2/task1/subtask2/Subtask2.class new file mode 100644 index 00000000..854827c0 Binary files /dev/null and b/out/production/java-lessons/ru/tn/courses/tmuminov/v2/task1/subtask2/Subtask2.class differ diff --git a/out/production/java-lessons/ru/tn/courses/tmuminov/v2/task1/subtask2/enums/Banks.class b/out/production/java-lessons/ru/tn/courses/tmuminov/v2/task1/subtask2/enums/Banks.class new file mode 100644 index 00000000..67586e08 Binary files /dev/null and b/out/production/java-lessons/ru/tn/courses/tmuminov/v2/task1/subtask2/enums/Banks.class differ diff --git a/out/production/java-lessons/ru/tn/courses/tmuminov/v2/task1/subtask2/enums/Currency.class b/out/production/java-lessons/ru/tn/courses/tmuminov/v2/task1/subtask2/enums/Currency.class new file mode 100644 index 00000000..1899d29d Binary files /dev/null and b/out/production/java-lessons/ru/tn/courses/tmuminov/v2/task1/subtask2/enums/Currency.class differ diff --git a/out/production/java-lessons/ru/tn/courses/tmuminov/v2/task1/subtask2/models/Rate.class b/out/production/java-lessons/ru/tn/courses/tmuminov/v2/task1/subtask2/models/Rate.class new file mode 100644 index 00000000..00caef5e Binary files /dev/null and b/out/production/java-lessons/ru/tn/courses/tmuminov/v2/task1/subtask2/models/Rate.class differ diff --git a/out/production/java-lessons/ru/tn/courses/tmuminov/v2/task1/subtask3/Subtask3.class b/out/production/java-lessons/ru/tn/courses/tmuminov/v2/task1/subtask3/Subtask3.class new file mode 100644 index 00000000..829c1df9 Binary files /dev/null and b/out/production/java-lessons/ru/tn/courses/tmuminov/v2/task1/subtask3/Subtask3.class differ diff --git a/src/main/java/ru/tn/courses/rnemykin/Main1.java b/src/main/java/ru/tn/courses/rnemykin/Main1.java deleted file mode 100644 index 7de40bda..00000000 --- a/src/main/java/ru/tn/courses/rnemykin/Main1.java +++ /dev/null @@ -1,10 +0,0 @@ -package ru.tn.courses.rnemykin; - -/** - * Created by rnemykin on 03.03.17. - */ -public class Main1 { - public static void main(String[] args) { - System.out.println("it works!"); - } -} diff --git a/src/main/java/ru/tn/courses/tmuminov/v2/task1/subtask1/Subtask1.java b/src/main/java/ru/tn/courses/tmuminov/v2/task1/subtask1/Subtask1.java new file mode 100644 index 00000000..02806ff7 --- /dev/null +++ b/src/main/java/ru/tn/courses/tmuminov/v2/task1/subtask1/Subtask1.java @@ -0,0 +1,19 @@ +package ru.tn.courses.tmuminov.v2.task1.subtask1; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +// В целочисленной последовательности есть нулевые элементы. Создать массив из номеров этих элементов. +public class Subtask1 { + + public static void main(String[] args) { + List exampleArray = Arrays.asList(1, 0, 2, 3, 4, 0, 15, 67, 0, 413, 1, 0, 5); + List resultArray = new ArrayList<>(); + + for (int i = 0; i < exampleArray.size(); i++) + if (exampleArray.get(i) == 0) resultArray.add(i); + + System.out.println(resultArray); + } +} diff --git a/src/main/java/ru/tn/courses/tmuminov/v2/task1/subtask2/ExampleUIClass.java b/src/main/java/ru/tn/courses/tmuminov/v2/task1/subtask2/ExampleUIClass.java new file mode 100644 index 00000000..74ba6cbd --- /dev/null +++ b/src/main/java/ru/tn/courses/tmuminov/v2/task1/subtask2/ExampleUIClass.java @@ -0,0 +1,48 @@ +package ru.tn.courses.tmuminov.v2.task1.subtask2; + +import ru.tn.courses.tmuminov.v2.task1.subtask2.enums.Banks; +import ru.tn.courses.tmuminov.v2.task1.subtask2.models.Rate; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.HashMap; +import java.util.Map; + +public class ExampleUIClass { + + private final BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); + private double highestRate = 0; + private Banks resultBunk; + private final Map banks = new HashMap<>(); + + { + for (Banks bank : Banks.values()) { + banks.put(bank, new Rate()); + } + } + + public void startProgram() throws IOException { + print("Write your amount of money"); + int amount = Integer.parseInt(bufferedReader.readLine()); + + print("Here is information about exchange rates\n"); + banks.forEach((bank, rate) -> { + print(bank + " -> " + rate.getRate() + " " + rate.getCurrency()); + if(rate.getRate() > highestRate){ + highestRate = rate.getRate(); + resultBunk = bank; + } + }); + + + print("It is most profitable to buy rubles from this bank: " + resultBunk + "\n"); + print("the current rate of this bank is the highest: " + highestRate + "\n"); + + print("you will receive " + amount*highestRate + " rubles"); + } + + private void print(String message) { + System.out.println(message); + } +} diff --git a/src/main/java/ru/tn/courses/tmuminov/v2/task1/subtask2/Subtask2.java b/src/main/java/ru/tn/courses/tmuminov/v2/task1/subtask2/Subtask2.java new file mode 100644 index 00000000..98a6ab16 --- /dev/null +++ b/src/main/java/ru/tn/courses/tmuminov/v2/task1/subtask2/Subtask2.java @@ -0,0 +1,20 @@ +package ru.tn.courses.tmuminov.v2.task1.subtask2; + + +// У вас есть доллары. Вы хотите обменять их на рубли. Есть информация о стоимости купли-продажи в банках города. +// В городе N банков. Составьте программу, определяющую, какой банк выбрать, чтобы выгодно обменять доллары на рубли. + +import java.io.IOException; + +public class Subtask2 { + + public static void main(String[] args) { + ExampleUIClass exampleUIClass = new ExampleUIClass(); + try { + exampleUIClass.startProgram(); + } catch (IOException e) { + e.printStackTrace(); + } + } + +} diff --git a/src/main/java/ru/tn/courses/tmuminov/v2/task1/subtask2/enums/Banks.java b/src/main/java/ru/tn/courses/tmuminov/v2/task1/subtask2/enums/Banks.java new file mode 100644 index 00000000..39c25a11 --- /dev/null +++ b/src/main/java/ru/tn/courses/tmuminov/v2/task1/subtask2/enums/Banks.java @@ -0,0 +1,9 @@ +package ru.tn.courses.tmuminov.v2.task1.subtask2.enums; + +public enum Banks { + VTB, + SBERBANK, + TINKOFF, + POCHTABANK, + ALFABANK +} diff --git a/src/main/java/ru/tn/courses/tmuminov/v2/task1/subtask2/enums/Currency.java b/src/main/java/ru/tn/courses/tmuminov/v2/task1/subtask2/enums/Currency.java new file mode 100644 index 00000000..53ec7dd0 --- /dev/null +++ b/src/main/java/ru/tn/courses/tmuminov/v2/task1/subtask2/enums/Currency.java @@ -0,0 +1,6 @@ +package ru.tn.courses.tmuminov.v2.task1.subtask2.enums; + +public enum Currency { + RUB, + USD +} diff --git a/src/main/java/ru/tn/courses/tmuminov/v2/task1/subtask2/models/Rate.java b/src/main/java/ru/tn/courses/tmuminov/v2/task1/subtask2/models/Rate.java new file mode 100644 index 00000000..c7b5a706 --- /dev/null +++ b/src/main/java/ru/tn/courses/tmuminov/v2/task1/subtask2/models/Rate.java @@ -0,0 +1,25 @@ +package ru.tn.courses.tmuminov.v2.task1.subtask2.models; + +import ru.tn.courses.tmuminov.v2.task1.subtask2.enums.Currency; + +public class Rate { + + private double rate = Math.random() * 10 + 65; + private Currency currency = Currency.RUB; + + public double getRate() { + return rate; + } + + public void setRate(int rate) { + this.rate = rate; + } + + public Currency getCurrency() { + return currency; + } + + public void setCurrency(Currency currency) { + this.currency = currency; + } +} diff --git a/src/main/java/ru/tn/courses/tmuminov/v2/task1/subtask3/Subtask3.java b/src/main/java/ru/tn/courses/tmuminov/v2/task1/subtask3/Subtask3.java new file mode 100644 index 00000000..0dabfe66 --- /dev/null +++ b/src/main/java/ru/tn/courses/tmuminov/v2/task1/subtask3/Subtask3.java @@ -0,0 +1,30 @@ +package ru.tn.courses.tmuminov.v2.task1.subtask3; + + +// Сортировка выбором. Дана последовательность чисел а1, а2, ..., аn. Требуется переставить элементы так, чтобы они были расположены по убыванию. +// Для этого в массиве, начиная с первого, выбирается наибольший элемент и ставится на первое место, а первый – на место наибольшего. +// Затем, начиная со второго, эта процедура повторяется. Написать алгоритм сортировки выбором. + +import java.util.Arrays; +import java.util.List; + +public class Subtask3 { + public static void main(String[] args) { + List exampleArray = Arrays.asList(1, 66, 2, 3, 4, 0, 15, 67, 34, 413, 1, 236, 5); + + for (int i = 0; i < exampleArray.size(); i++) { + int pos = i; + int max = exampleArray.get(i); + + for (int j = i + 1; j < exampleArray.size(); j++) { + if (exampleArray.get(j) > max) { + pos = j; + max = exampleArray.get(j); + } + } + exampleArray.set(pos, exampleArray.get(i)); + exampleArray.set(i, max); + } + System.out.println(exampleArray); + } +} diff --git a/src/main/java/ru/tn/courses/tmuminov/v2/task2/subtask1/README b/src/main/java/ru/tn/courses/tmuminov/v2/task2/subtask1/README new file mode 100644 index 00000000..5163aa78 --- /dev/null +++ b/src/main/java/ru/tn/courses/tmuminov/v2/task2/subtask1/README @@ -0,0 +1,5 @@ +- Необходимо разработать модель (класс) сообщение (уведомление). +- Необходимо разработать интерфейс для обработки (отправки) сообщения. +- Реализовать классы рассылки сообщения через различные каналы: телеграм, email, смс и тд. +- Необходимо оформить все перечисления через enum +- Вынести общую логику в абстракцию \ No newline at end of file diff --git a/src/main/java/ru/tn/courses/tmuminov/v2/task2/subtask1/Subtask1.java b/src/main/java/ru/tn/courses/tmuminov/v2/task2/subtask1/Subtask1.java new file mode 100644 index 00000000..d736856f --- /dev/null +++ b/src/main/java/ru/tn/courses/tmuminov/v2/task2/subtask1/Subtask1.java @@ -0,0 +1,18 @@ +package ru.tn.courses.tmuminov.v2.task2.subtask1; + +import ru.tn.courses.tmuminov.v2.task2.subtask1.presentation.ExampleUIClass; + +import java.io.IOException; + +public class Subtask1 { + + + + public static void main(String[] args){ + try { + new ExampleUIClass().startProgram(); + } catch (IOException e) { + e.printStackTrace(); + } + } +} diff --git a/src/main/java/ru/tn/courses/tmuminov/v2/task2/subtask1/data/mail_channels/EmailNotificationChannel.java b/src/main/java/ru/tn/courses/tmuminov/v2/task2/subtask1/data/mail_channels/EmailNotificationChannel.java new file mode 100644 index 00000000..0a6c3afb --- /dev/null +++ b/src/main/java/ru/tn/courses/tmuminov/v2/task2/subtask1/data/mail_channels/EmailNotificationChannel.java @@ -0,0 +1,25 @@ +package ru.tn.courses.tmuminov.v2.task2.subtask1.data.mail_channels; + +import ru.tn.courses.tmuminov.v2.task2.subtask1.domain.enums.StatusCallback; +import ru.tn.courses.tmuminov.v2.task2.subtask1.domain.interfaces.Notifiable; +import ru.tn.courses.tmuminov.v2.task2.subtask1.domain.models.NotificationModel; +import ru.tn.courses.tmuminov.v2.task2.subtask1.domain.interfaces.CallbackStatus; + +public class EmailNotificationChannel implements Notifiable { + + @Override + public void sendNotification(NotificationModel notificationModel, CallbackStatus callbackStatus) { + // TODO something with user data + try { + // Random callback status + int temp = (Math.random() <= 0.5) ? 1 : 2; + Thread.sleep(2000); + if (temp % 2 == 0) { + callbackStatus.response(StatusCallback.SUCCESS); + } else + callbackStatus.response(StatusCallback.FAILURE); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } +} diff --git a/src/main/java/ru/tn/courses/tmuminov/v2/task2/subtask1/data/mail_channels/SMSNotificationChannel.java b/src/main/java/ru/tn/courses/tmuminov/v2/task2/subtask1/data/mail_channels/SMSNotificationChannel.java new file mode 100644 index 00000000..9b023c71 --- /dev/null +++ b/src/main/java/ru/tn/courses/tmuminov/v2/task2/subtask1/data/mail_channels/SMSNotificationChannel.java @@ -0,0 +1,27 @@ +package ru.tn.courses.tmuminov.v2.task2.subtask1.data.mail_channels; + +import ru.tn.courses.tmuminov.v2.task2.subtask1.domain.enums.StatusCallback; +import ru.tn.courses.tmuminov.v2.task2.subtask1.domain.interfaces.Notifiable; +import ru.tn.courses.tmuminov.v2.task2.subtask1.domain.models.NotificationModel; +import ru.tn.courses.tmuminov.v2.task2.subtask1.domain.interfaces.CallbackStatus; + +public class SMSNotificationChannel implements Notifiable { + + @Override + public void sendNotification(NotificationModel notificationModel, CallbackStatus callbackStatus) { + // TODO something with user data + try { + // Random callback status + int temp = (Math.random() <= 0.5) ? 1 : 2; + Thread.sleep(2000); + if (temp % 2 == 0) { + callbackStatus.response(StatusCallback.SUCCESS); + } else + callbackStatus.response(StatusCallback.FAILURE); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + +} diff --git a/src/main/java/ru/tn/courses/tmuminov/v2/task2/subtask1/data/mail_channels/TelegramNotificationChannel.java b/src/main/java/ru/tn/courses/tmuminov/v2/task2/subtask1/data/mail_channels/TelegramNotificationChannel.java new file mode 100644 index 00000000..384934f8 --- /dev/null +++ b/src/main/java/ru/tn/courses/tmuminov/v2/task2/subtask1/data/mail_channels/TelegramNotificationChannel.java @@ -0,0 +1,27 @@ +package ru.tn.courses.tmuminov.v2.task2.subtask1.data.mail_channels; + +import ru.tn.courses.tmuminov.v2.task2.subtask1.domain.enums.StatusCallback; +import ru.tn.courses.tmuminov.v2.task2.subtask1.domain.interfaces.Notifiable; +import ru.tn.courses.tmuminov.v2.task2.subtask1.domain.models.NotificationModel; +import ru.tn.courses.tmuminov.v2.task2.subtask1.domain.interfaces.CallbackStatus; + +public class TelegramNotificationChannel implements Notifiable { + + @Override + public void sendNotification(NotificationModel notificationModel, CallbackStatus callbackStatus) { + // TODO something with user data + try { + // Random callback status + int temp = (Math.random() <= 0.5) ? 1 : 2; + Thread.sleep(2000); + if (temp % 2 == 0) { + callbackStatus.response(StatusCallback.SUCCESS); + } else + callbackStatus.response(StatusCallback.FAILURE); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + +} diff --git a/src/main/java/ru/tn/courses/tmuminov/v2/task2/subtask1/data/mail_channels/WhatsappNotificationChannel.java b/src/main/java/ru/tn/courses/tmuminov/v2/task2/subtask1/data/mail_channels/WhatsappNotificationChannel.java new file mode 100644 index 00000000..18d650a5 --- /dev/null +++ b/src/main/java/ru/tn/courses/tmuminov/v2/task2/subtask1/data/mail_channels/WhatsappNotificationChannel.java @@ -0,0 +1,25 @@ +package ru.tn.courses.tmuminov.v2.task2.subtask1.data.mail_channels; + +import ru.tn.courses.tmuminov.v2.task2.subtask1.domain.enums.StatusCallback; +import ru.tn.courses.tmuminov.v2.task2.subtask1.domain.interfaces.Notifiable; +import ru.tn.courses.tmuminov.v2.task2.subtask1.domain.models.NotificationModel; +import ru.tn.courses.tmuminov.v2.task2.subtask1.domain.interfaces.CallbackStatus; + +public class WhatsappNotificationChannel implements Notifiable { + + @Override + public void sendNotification(NotificationModel notificationModel, CallbackStatus callbackStatus) { + // TODO something with user data + try { + // Random callback status + int temp = (Math.random() <= 0.5) ? 1 : 2; + Thread.sleep(2000); + if (temp % 2 == 0) { + callbackStatus.response(StatusCallback.SUCCESS); + } else + callbackStatus.response(StatusCallback.FAILURE); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } +} diff --git a/src/main/java/ru/tn/courses/tmuminov/v2/task2/subtask1/domain/NotificationUseCase.java b/src/main/java/ru/tn/courses/tmuminov/v2/task2/subtask1/domain/NotificationUseCase.java new file mode 100644 index 00000000..9ed1d866 --- /dev/null +++ b/src/main/java/ru/tn/courses/tmuminov/v2/task2/subtask1/domain/NotificationUseCase.java @@ -0,0 +1,23 @@ +package ru.tn.courses.tmuminov.v2.task2.subtask1.domain; + +import ru.tn.courses.tmuminov.v2.task2.subtask1.domain.interfaces.Notifiable; +import ru.tn.courses.tmuminov.v2.task2.subtask1.domain.models.NotificationModel; +import ru.tn.courses.tmuminov.v2.task2.subtask1.domain.models.SenderModel; +import ru.tn.courses.tmuminov.v2.task2.subtask1.domain.interfaces.CallbackStatus; +import ru.tn.courses.tmuminov.v2.task2.subtask1.domain.models.MessageModel; + +import java.net.URI; + +public class NotificationUseCase { + + public void sendNotification(Notifiable clazz, String message, String username, CallbackStatus callbackStatus){ + clazz.sendNotification(mapToModel(message, username), callbackStatus); + } + + private NotificationModel mapToModel(String message, String username){ + SenderModel senderModel = new SenderModel(1, username, URI.create("https://klike.net/uploads/posts/2019-07/1564314090_3.jpg")); + MessageModel messageModel = new MessageModel(1, message, System.currentTimeMillis()); + + return new NotificationModel(1, senderModel, messageModel); + } +} diff --git a/src/main/java/ru/tn/courses/tmuminov/v2/task2/subtask1/domain/enums/StatusCallback.java b/src/main/java/ru/tn/courses/tmuminov/v2/task2/subtask1/domain/enums/StatusCallback.java new file mode 100644 index 00000000..9f911ad8 --- /dev/null +++ b/src/main/java/ru/tn/courses/tmuminov/v2/task2/subtask1/domain/enums/StatusCallback.java @@ -0,0 +1,6 @@ +package ru.tn.courses.tmuminov.v2.task2.subtask1.domain.enums; + +public enum StatusCallback { + SUCCESS, + FAILURE +} diff --git a/src/main/java/ru/tn/courses/tmuminov/v2/task2/subtask1/domain/interfaces/CallbackStatus.java b/src/main/java/ru/tn/courses/tmuminov/v2/task2/subtask1/domain/interfaces/CallbackStatus.java new file mode 100644 index 00000000..8bb73bfa --- /dev/null +++ b/src/main/java/ru/tn/courses/tmuminov/v2/task2/subtask1/domain/interfaces/CallbackStatus.java @@ -0,0 +1,7 @@ +package ru.tn.courses.tmuminov.v2.task2.subtask1.domain.interfaces; + +import ru.tn.courses.tmuminov.v2.task2.subtask1.domain.enums.StatusCallback; + +public interface CallbackStatus { + void response(StatusCallback statusCallback); +} diff --git a/src/main/java/ru/tn/courses/tmuminov/v2/task2/subtask1/domain/interfaces/Notifiable.java b/src/main/java/ru/tn/courses/tmuminov/v2/task2/subtask1/domain/interfaces/Notifiable.java new file mode 100644 index 00000000..e86e76c4 --- /dev/null +++ b/src/main/java/ru/tn/courses/tmuminov/v2/task2/subtask1/domain/interfaces/Notifiable.java @@ -0,0 +1,7 @@ +package ru.tn.courses.tmuminov.v2.task2.subtask1.domain.interfaces; + +import ru.tn.courses.tmuminov.v2.task2.subtask1.domain.models.NotificationModel; + +public interface Notifiable { + void sendNotification(NotificationModel notificationModel, CallbackStatus callbackStatus); +} diff --git a/src/main/java/ru/tn/courses/tmuminov/v2/task2/subtask1/domain/models/MessageModel.java b/src/main/java/ru/tn/courses/tmuminov/v2/task2/subtask1/domain/models/MessageModel.java new file mode 100644 index 00000000..ee4ea66c --- /dev/null +++ b/src/main/java/ru/tn/courses/tmuminov/v2/task2/subtask1/domain/models/MessageModel.java @@ -0,0 +1,8 @@ +package ru.tn.courses.tmuminov.v2.task2.subtask1.domain.models; + +public record MessageModel( + int messageId, + String message, + long sentTime +) { +} diff --git a/src/main/java/ru/tn/courses/tmuminov/v2/task2/subtask1/domain/models/NotificationModel.java b/src/main/java/ru/tn/courses/tmuminov/v2/task2/subtask1/domain/models/NotificationModel.java new file mode 100644 index 00000000..9c31aef0 --- /dev/null +++ b/src/main/java/ru/tn/courses/tmuminov/v2/task2/subtask1/domain/models/NotificationModel.java @@ -0,0 +1,8 @@ +package ru.tn.courses.tmuminov.v2.task2.subtask1.domain.models; + +public record NotificationModel( + int notificationId, + SenderModel user, + MessageModel message +) { +} diff --git a/src/main/java/ru/tn/courses/tmuminov/v2/task2/subtask1/domain/models/SenderModel.java b/src/main/java/ru/tn/courses/tmuminov/v2/task2/subtask1/domain/models/SenderModel.java new file mode 100644 index 00000000..f3869c6e --- /dev/null +++ b/src/main/java/ru/tn/courses/tmuminov/v2/task2/subtask1/domain/models/SenderModel.java @@ -0,0 +1,10 @@ +package ru.tn.courses.tmuminov.v2.task2.subtask1.domain.models; + +import java.net.URI; + +public record SenderModel( + int senderId, + String senderName, + URI senderPhoto +) { +} diff --git a/src/main/java/ru/tn/courses/tmuminov/v2/task2/subtask1/presentation/ExampleUIClass.java b/src/main/java/ru/tn/courses/tmuminov/v2/task2/subtask1/presentation/ExampleUIClass.java new file mode 100644 index 00000000..7dbf177e --- /dev/null +++ b/src/main/java/ru/tn/courses/tmuminov/v2/task2/subtask1/presentation/ExampleUIClass.java @@ -0,0 +1,72 @@ +package ru.tn.courses.tmuminov.v2.task2.subtask1.presentation; + +import ru.tn.courses.tmuminov.v2.task2.subtask1.data.mail_channels.EmailNotificationChannel; +import ru.tn.courses.tmuminov.v2.task2.subtask1.data.mail_channels.SMSNotificationChannel; +import ru.tn.courses.tmuminov.v2.task2.subtask1.data.mail_channels.TelegramNotificationChannel; +import ru.tn.courses.tmuminov.v2.task2.subtask1.data.mail_channels.WhatsappNotificationChannel; +import ru.tn.courses.tmuminov.v2.task2.subtask1.domain.NotificationUseCase; +import ru.tn.courses.tmuminov.v2.task2.subtask1.domain.enums.StatusCallback; +import ru.tn.courses.tmuminov.v2.task2.subtask1.domain.interfaces.CallbackStatus; +import ru.tn.courses.tmuminov.v2.task2.subtask1.domain.interfaces.Notifiable; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; + +public class ExampleUIClass { + + private final NotificationUseCase notificationUseCase = new NotificationUseCase(); + private final BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); + private boolean exit = false; + + private final TelegramNotificationChannel telegramNotificationChannel = new TelegramNotificationChannel(); + private final WhatsappNotificationChannel whatsappNotificationChannel = new WhatsappNotificationChannel(); + private final SMSNotificationChannel smsNotificationChannel = new SMSNotificationChannel(); + private final EmailNotificationChannel emailNotificationChannel = new EmailNotificationChannel(); + + private final CallbackStatus responseMessageCallbackStatus = statusCallback -> { + if (statusCallback == StatusCallback.SUCCESS) { + print("Message delivered"); + } else print("Message not delivered"); + }; + + private String message; + private String username; + + public void startProgram() throws IOException { + while (!exit) { + print("Write your message"); + message = bufferedReader.readLine(); + + print("Write your name"); + username = bufferedReader.readLine(); + + print("Where to send the message?"); + print("1. Telegram \n2. Whatsapp \n3. SMS \n4. Email \n0. Exit \n"); + + int chosenChannel = Integer.parseInt(bufferedReader.readLine()); + + if (chosenChannel == 0) { + exit = true; + } else sendMessageToChosenChanel(chosenChannel); + } + print("Thanks for using"); + } + + private void sendMessageToChosenChanel(int chosenChannel) { + switch (chosenChannel) { + case 1 -> send(telegramNotificationChannel); + case 2 -> send(whatsappNotificationChannel); + case 3 -> send(smsNotificationChannel); + case 4 -> send(emailNotificationChannel); + } + } + + private void send(Notifiable notifiable) { + notificationUseCase.sendNotification(notifiable, message, username, responseMessageCallbackStatus); + } + + private void print(String message) { + System.out.println(message); + } +} diff --git a/src/main/java/ru/tn/courses/tmuminov/v2/task2/subtask2/FirstClass.java b/src/main/java/ru/tn/courses/tmuminov/v2/task2/subtask2/FirstClass.java new file mode 100644 index 00000000..c0762074 --- /dev/null +++ b/src/main/java/ru/tn/courses/tmuminov/v2/task2/subtask2/FirstClass.java @@ -0,0 +1,15 @@ +package ru.tn.courses.tmuminov.v2.task2.subtask2; + +import ru.tn.courses.tmuminov.v2.task2.subtask2.instances.Instance1; +import ru.tn.courses.tmuminov.v2.task2.subtask2.instances.Instance2; +import ru.tn.courses.tmuminov.v2.task2.subtask2.instances.Instance3; + +public class FirstClass { + + FirstClass(){ + SecondClass secondClass = new SecondClass(); + secondClass.method(new Instance1()); + secondClass.method(new Instance2()); + secondClass.method(new Instance3()); + } +} diff --git a/src/main/java/ru/tn/courses/tmuminov/v2/task2/subtask2/SecondClass.java b/src/main/java/ru/tn/courses/tmuminov/v2/task2/subtask2/SecondClass.java new file mode 100644 index 00000000..5a11c5da --- /dev/null +++ b/src/main/java/ru/tn/courses/tmuminov/v2/task2/subtask2/SecondClass.java @@ -0,0 +1,15 @@ +package ru.tn.courses.tmuminov.v2.task2.subtask2; + +import ru.tn.courses.tmuminov.v2.task2.subtask2.instances.Instance1; +import ru.tn.courses.tmuminov.v2.task2.subtask2.instances.Instance2; + +public class SecondClass { + + public void method(Object o) { + if (o instanceof Instance1) { + System.out.println("Message from instance 1"); + } else if (o instanceof Instance2) { + System.out.println("Message from instance 2"); + } else System.out.println("Message from instance 3"); + } +} diff --git a/src/main/java/ru/tn/courses/tmuminov/v2/task2/subtask2/Subtask2.java b/src/main/java/ru/tn/courses/tmuminov/v2/task2/subtask2/Subtask2.java new file mode 100644 index 00000000..7fafb80a --- /dev/null +++ b/src/main/java/ru/tn/courses/tmuminov/v2/task2/subtask2/Subtask2.java @@ -0,0 +1,10 @@ +package ru.tn.courses.tmuminov.v2.task2.subtask2; + +public class Subtask2 { + + + // Написать программу, в которой на вход подается сущность и в зависимости от типа исполняется основная бизнес логика + public static void main(String[] args) { + FirstClass firstClass = new FirstClass(); + } +} diff --git a/src/main/java/ru/tn/courses/tmuminov/v2/task2/subtask2/instances/Instance1.java b/src/main/java/ru/tn/courses/tmuminov/v2/task2/subtask2/instances/Instance1.java new file mode 100644 index 00000000..914c60a3 --- /dev/null +++ b/src/main/java/ru/tn/courses/tmuminov/v2/task2/subtask2/instances/Instance1.java @@ -0,0 +1,4 @@ +package ru.tn.courses.tmuminov.v2.task2.subtask2.instances; + +public class Instance1 { +} diff --git a/src/main/java/ru/tn/courses/tmuminov/v2/task2/subtask2/instances/Instance2.java b/src/main/java/ru/tn/courses/tmuminov/v2/task2/subtask2/instances/Instance2.java new file mode 100644 index 00000000..9b4f30e0 --- /dev/null +++ b/src/main/java/ru/tn/courses/tmuminov/v2/task2/subtask2/instances/Instance2.java @@ -0,0 +1,4 @@ +package ru.tn.courses.tmuminov.v2.task2.subtask2.instances; + +public class Instance2 { +} diff --git a/src/main/java/ru/tn/courses/tmuminov/v2/task2/subtask2/instances/Instance3.java b/src/main/java/ru/tn/courses/tmuminov/v2/task2/subtask2/instances/Instance3.java new file mode 100644 index 00000000..73a8fec5 --- /dev/null +++ b/src/main/java/ru/tn/courses/tmuminov/v2/task2/subtask2/instances/Instance3.java @@ -0,0 +1,4 @@ +package ru.tn.courses.tmuminov.v2.task2.subtask2.instances; + +public class Instance3 { +} diff --git a/src/main/java/ru/tn/courses/tmuminov/v2/task3/subtask1/CustomString.java b/src/main/java/ru/tn/courses/tmuminov/v2/task3/subtask1/CustomString.java new file mode 100644 index 00000000..3c5d3af3 --- /dev/null +++ b/src/main/java/ru/tn/courses/tmuminov/v2/task3/subtask1/CustomString.java @@ -0,0 +1,71 @@ +package ru.tn.courses.tmuminov.v2.task3.subtask1; + +// Разработать класс String +// класс должен содержать конструкторы String(), String(String s) +//- реализовать метод конкатенации двух объектов +//- Реализовать метод получения подстроки по индексам +//- реализовать метод получения индекса вхождения подстроки в строку +//- реализовать метод сравнения двух строк +//- реализовать методы startWith - начинается с, endWith - заканчивается, contains - содержит + + +import java.util.Arrays; + +public class CustomString { + + private char[] chars; + + public CustomString(CustomString customString) { + chars = customString.chars; + } + + public CustomString() {} + + public char[] getChars() { + return chars; + } + + public void setChars(char[] chars) { + this.chars = chars; + } + + public void concat(CustomString customString) { + char[] chars0 = customString.chars; + char[] result = Arrays.copyOf(chars, chars.length + chars0.length); + System.arraycopy(chars0, 0, result, chars.length, chars0.length); + chars = result; + } + + public CustomString substring(int indexStart, int indexEnd) { + char[] result = new char[indexEnd-indexStart + 1]; + System.arraycopy(chars, indexStart, result, 0, indexEnd - indexStart + 1); + CustomString customString = new CustomString(); + customString.setChars(result); + return customString; + } + + public int indexOf(CustomString customString) { + char[] chars0 = customString.chars; + if (chars0.length > 0) + for (int i = 0; i <= chars.length - chars0.length; i++) + for (int j = 0; j < chars0.length && chars[j + i] == chars0[j]; j++) + if (chars0.length == j + 1) return i; + return -1; + } + + public boolean equals(CustomString customString) { + return Arrays.equals(chars, customString.chars); + } + + public char endWith() { + return chars[chars.length-1]; + } + + public char startWith() { + return chars[0]; + } + + public boolean contains(CustomString customString) { + return indexOf(customString) >= 0; + } +} diff --git a/src/main/java/ru/tn/courses/tmuminov/v2/task3/subtask1/Main.java b/src/main/java/ru/tn/courses/tmuminov/v2/task3/subtask1/Main.java new file mode 100644 index 00000000..b93d8b5c --- /dev/null +++ b/src/main/java/ru/tn/courses/tmuminov/v2/task3/subtask1/Main.java @@ -0,0 +1,24 @@ +package ru.tn.courses.tmuminov.v2.task3.subtask1; + +public class Main { + + public static void main(String[] args) { + CustomString customString = new CustomString(); + customString.setChars("hello world".toCharArray()); + System.out.println(customString.startWith()); + System.out.println(customString.endWith()); + System.out.println(customString.getChars()); + + CustomString customString1 = new CustomString(); + customString1.setChars("world".toCharArray()); + System.out.println(customString.indexOf(customString1)); + System.out.println(customString.equals(customString1)); + System.out.println(customString.contains(customString1)); + + + System.out.println(customString.substring(1,5).getChars()); + + customString.concat(customString1); + System.out.println(customString.getChars()); + } +} diff --git a/src/main/java/ru/tn/courses/tmuminov/v2/task3/subtask2/ListContainer.java b/src/main/java/ru/tn/courses/tmuminov/v2/task3/subtask2/ListContainer.java new file mode 100644 index 00000000..2789c2df --- /dev/null +++ b/src/main/java/ru/tn/courses/tmuminov/v2/task3/subtask2/ListContainer.java @@ -0,0 +1,84 @@ +package ru.tn.courses.tmuminov.v2.task3.subtask2; + +import java.util.Arrays; +import java.util.Collection; + +//Разработать класс ListContainer для хранения дженерик списков +//класс должен содержать конструктор по умолчанию и конструктор с new ListContainer(T ... elements) +//метод получения значения списка +//метод сравнения двух контейнеров +//методы добавления и удаления элемента в контейнер +//методы поиска элементов по индексу или значению +//добавление коллекции элементов +//получение контейнера с подсписком по индексам + +public class ListContainer { + + private T[] ts = (T[]) new Object[10]; + private int counter = 0; + + public ListContainer(T[] ts) { + this.ts = ts; + } + + public ListContainer() { + } + + public boolean equals(ListContainer listContainer) { + return Arrays.equals(ts, listContainer.ts); + } + + public void add(T t) { + if (counter != ts.length - 1) { + ts[counter] = t; + counter++; + } else { + T[] newTs = (T[]) new Object[2 * ts.length]; + System.arraycopy(ts, 0, newTs, 0, ts.length); + ts = newTs; + add(t); + } + } + + public void remove(int index) { + if (ts.length - index >= 0) { + if (ts.length - 1 - index >= 0) + System.arraycopy(ts, index + 1, ts, index, ts.length - 1 - index); + counter--; + } + } + + public T get(int index) { + return ts[index]; + } + + public int indexOf(T t) { + for (int i = 0; i < ts.length; i++) + if (ts[i] == t) + return i; + return -1; + } + + public void addAll(Collection collection) { + Object[] t = collection.toArray(); + for(int i = 0; i < collection.size(); i++){ + add((T) t[i]); + } + } + + public ListContainer subList(int indexStart, int indexEnd) { + ListContainer ls = new ListContainer<>(); + for (int i = indexStart; i < indexEnd; i++) { + ls.add(ts[i]); + } + return ls; + } + + public T[] getArray() { + return ts; + } + + public void setArray(T[] ts) { + this.ts = ts; + } +} \ No newline at end of file diff --git a/src/main/java/ru/tn/courses/tmuminov/v2/task3/subtask2/Main.java b/src/main/java/ru/tn/courses/tmuminov/v2/task3/subtask2/Main.java new file mode 100644 index 00000000..8e7492ce --- /dev/null +++ b/src/main/java/ru/tn/courses/tmuminov/v2/task3/subtask2/Main.java @@ -0,0 +1,39 @@ +package ru.tn.courses.tmuminov.v2.task3.subtask2; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class Main { + public static void main(String[] args) { + String s = "ewe"; + + ListContainer listContainer = new ListContainer<>(); + for(int i = 0; i < 10; i++) { + listContainer.add(s); + } + listContainer.add("timur"); + listContainer.remove(4); + listContainer.remove(3); + + System.out.println(Arrays.toString(listContainer.getArray())); + + System.out.println(listContainer.indexOf("timur")); + + List list = new ArrayList<>(); + list.add("q"); + list.add("t"); + + listContainer.addAll(list); + System.out.println(Arrays.toString(listContainer.getArray())); + + System.out.println(listContainer.get(4)); + + ListContainer listContainer2 = new ListContainer<>(); + listContainer2.add("errr"); + + System.out.println(listContainer.equals(listContainer2)); + + System.out.println(Arrays.toString(listContainer.subList(3, 7).getArray())); + } +}