From 98667459833ed3efe864f938e16c0a5bb1343245 Mon Sep 17 00:00:00 2001 From: Newarin Date: Sat, 14 Oct 2023 14:44:16 +0300 Subject: [PATCH 01/14] =?UTF-8?q?=D0=93=D0=BE=D1=82=D0=BE=D0=B2=D0=BE?= =?UTF-8?q?=D0=B5=20=D0=94=D0=971?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- module01/pom.xml | 33 +++++++++++++++++++ .../src/main/java/ru/sberbank/edu/GCD.java | 22 +++++++++++++ .../java/ru/sberbank/edu/GreetingImpl.java | 16 +++++++++ .../ru/sberbank/edu/GreetingImplTest.java | 19 +++++++++++ 4 files changed, 90 insertions(+) create mode 100644 module01/src/main/java/ru/sberbank/edu/GCD.java create mode 100644 module01/src/main/java/ru/sberbank/edu/GreetingImpl.java create mode 100644 module01/src/test/java/ru/sberbank/edu/GreetingImplTest.java diff --git a/module01/pom.xml b/module01/pom.xml index 932df7e3..181f9a5f 100644 --- a/module01/pom.xml +++ b/module01/pom.xml @@ -14,6 +14,39 @@ UTF-8 + 11 + 11 + 5.9.2 + 5.5.0 + 5.3.1 + 3.24.2 + + + org.junit.jupiter + junit-jupiter-engine + ${junit.version} + test + + + org.mockito + mockito-core + ${mockito.version} + test + + + + org.mockito + mockito-junit-jupiter + ${mockito.junit.version} + test + + + org.assertj + assertj-core + ${assertj.version} + + + diff --git a/module01/src/main/java/ru/sberbank/edu/GCD.java b/module01/src/main/java/ru/sberbank/edu/GCD.java new file mode 100644 index 00000000..77e818e8 --- /dev/null +++ b/module01/src/main/java/ru/sberbank/edu/GCD.java @@ -0,0 +1,22 @@ +package ru.sberbank.edu; + +/*** + * В данном методе мы всегда ставим на первое место наибольшее число + * в последствии ищем наибольший делитель путём деления + */ +public class GCD implements CommonDivisor { + @Override + public int getDivisor(int firstNumber, int secondNumber) { + + if (firstNumber < secondNumber){ + firstNumber = secondNumber * firstNumber; + secondNumber = firstNumber / secondNumber; + firstNumber = firstNumber / secondNumber; + } + + if (secondNumber == 0) { + return firstNumber; + } + return getDivisor(secondNumber, firstNumber % secondNumber); + } +} diff --git a/module01/src/main/java/ru/sberbank/edu/GreetingImpl.java b/module01/src/main/java/ru/sberbank/edu/GreetingImpl.java new file mode 100644 index 00000000..0df891f9 --- /dev/null +++ b/module01/src/main/java/ru/sberbank/edu/GreetingImpl.java @@ -0,0 +1,16 @@ +package ru.sberbank.edu; + +public class GreetingImpl implements Greeting { + /*** + * В данном методе мы всегда выводим как лучшее хобби Водный туризм + */ + public void main(String[] args) { + System.out.println(getBestHobby()); + } + + @Override + public String getBestHobby() { + String hobby = "Водный туризм"; + return hobby; + } +} diff --git a/module01/src/test/java/ru/sberbank/edu/GreetingImplTest.java b/module01/src/test/java/ru/sberbank/edu/GreetingImplTest.java new file mode 100644 index 00000000..5ac9721e --- /dev/null +++ b/module01/src/test/java/ru/sberbank/edu/GreetingImplTest.java @@ -0,0 +1,19 @@ +package ru.sberbank.edu; + +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.Test; + +class GreetingImplTest { + + + + @Test + void main() { + } + + @Test + void getBestHobby() { + GreetingImpl greeting = new GreetingImpl(); + Assertions.assertThat(greeting.getBestHobby()).isEqualTo("Водный туризм"); + } +} \ No newline at end of file From 1d5d44b4527e813ac5a0955988984a52862b614f Mon Sep 17 00:00:00 2001 From: Newarin Date: Sat, 14 Oct 2023 14:47:58 +0300 Subject: [PATCH 02/14] =?UTF-8?q?=D0=93=D0=BE=D1=82=D0=BE=D0=B2=D0=BE?= =?UTF-8?q?=D0=B5=20=D0=94=D0=971?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- module01/src/main/java/ru/sberbank/edu/GreetingImpl.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/module01/src/main/java/ru/sberbank/edu/GreetingImpl.java b/module01/src/main/java/ru/sberbank/edu/GreetingImpl.java index 0df891f9..4af31e03 100644 --- a/module01/src/main/java/ru/sberbank/edu/GreetingImpl.java +++ b/module01/src/main/java/ru/sberbank/edu/GreetingImpl.java @@ -10,7 +10,6 @@ public void main(String[] args) { @Override public String getBestHobby() { - String hobby = "Водный туризм"; - return hobby; + return "Водный туризм"; } } From e1fd000bab30f49f408c19a2cebaff3937dbad7c Mon Sep 17 00:00:00 2001 From: Newarin Date: Tue, 17 Oct 2023 20:35:23 +0300 Subject: [PATCH 03/14] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=B5=D0=BD=D1=82=D0=B5=D1=80=D0=BE=D0=B2=20=D0=B4?= =?UTF-8?q?=D0=BB=D1=8F=20=D0=BF=D1=83=D0=BB=20=D1=80=D0=B5=D0=BA=D0=B2?= =?UTF-8?q?=D0=B5=D1=81=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- module01/src/main/java/ru/sberbank/edu/GreetingImpl.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/module01/src/main/java/ru/sberbank/edu/GreetingImpl.java b/module01/src/main/java/ru/sberbank/edu/GreetingImpl.java index 4af31e03..74032b7b 100644 --- a/module01/src/main/java/ru/sberbank/edu/GreetingImpl.java +++ b/module01/src/main/java/ru/sberbank/edu/GreetingImpl.java @@ -5,11 +5,15 @@ public class GreetingImpl implements Greeting { * В данном методе мы всегда выводим как лучшее хобби Водный туризм */ public void main(String[] args) { + System.out.println(getBestHobby()); + } @Override public String getBestHobby() { + return "Водный туризм"; + } } From 3a45131ecfaafb5adc14d258671f0c826036f099 Mon Sep 17 00:00:00 2001 From: Newarin Date: Thu, 26 Oct 2023 11:20:37 +0300 Subject: [PATCH 04/14] =?UTF-8?q?=D0=9F=D1=83=D0=BB=20=D1=80=D0=B5=D0=BA?= =?UTF-8?q?=D0=B2=D0=B5=D1=81=D1=82=202=20=D0=94=D0=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- module02/input.txt | 3 + module02/output.txt | 3 + module02/pom.xml | 35 ++++++- .../src/main/java/ru/sberbank/edu/App.java | 13 ++- .../main/java/ru/sberbank/edu/Statistic.java | 13 ++- .../java/ru/sberbank/edu/StatisticImpl.java | 96 +++++++++++++++++++ .../test/java/ru/sberbank/edu/AppTest.java | 42 +++----- 7 files changed, 167 insertions(+), 38 deletions(-) create mode 100644 module02/input.txt create mode 100644 module02/output.txt create mode 100644 module02/src/main/java/ru/sberbank/edu/StatisticImpl.java diff --git a/module02/input.txt b/module02/input.txt new file mode 100644 index 00000000..5a062717 --- /dev/null +++ b/module02/input.txt @@ -0,0 +1,3 @@ +Мы добавляем первую базовую строку +Мы добавляем вторую базовую строку +Мы добавляем третью базовую строку, но чтуь чуть подлинее diff --git a/module02/output.txt b/module02/output.txt new file mode 100644 index 00000000..caf762c3 --- /dev/null +++ b/module02/output.txt @@ -0,0 +1,3 @@ +В данном файле строк 3 +В данном файле пробелов 16 +Самая длинная строка в файле 'Мы добавляем третью базовую строку, но чтуь чуть подлинее' diff --git a/module02/pom.xml b/module02/pom.xml index 45e842be..c772e5f4 100644 --- a/module02/pom.xml +++ b/module02/pom.xml @@ -14,6 +14,39 @@ UTF-8 + 11 + 11 + 5.9.2 + 5.5.0 + 5.3.1 + 3.24.2 - + + + org.junit.jupiter + junit-jupiter-engine + ${junit.version} + test + + + org.mockito + mockito-core + ${mockito.version} + test + + + + org.mockito + mockito-junit-jupiter + ${mockito.junit.version} + test + + + org.assertj + assertj-core + ${assertj.version} + + + + \ No newline at end of file diff --git a/module02/src/main/java/ru/sberbank/edu/App.java b/module02/src/main/java/ru/sberbank/edu/App.java index 5419c026..2dba76f9 100644 --- a/module02/src/main/java/ru/sberbank/edu/App.java +++ b/module02/src/main/java/ru/sberbank/edu/App.java @@ -1,13 +1,16 @@ package ru.sberbank.edu; +import java.io.IOException; + /** * Hello world! * */ -public class App +public class App { - public static void main( String[] args ) - { - System.out.println( "Hello World!" ); + public static void main( String[] args ) throws IOException { + + StatisticImpl main = new StatisticImpl(); + main.start(); } -} +} \ No newline at end of file diff --git a/module02/src/main/java/ru/sberbank/edu/Statistic.java b/module02/src/main/java/ru/sberbank/edu/Statistic.java index 49ef9698..7f7b88ad 100644 --- a/module02/src/main/java/ru/sberbank/edu/Statistic.java +++ b/module02/src/main/java/ru/sberbank/edu/Statistic.java @@ -1,11 +1,16 @@ package ru.sberbank.edu; +import java.io.IOException; + // интерфейс можно менять public interface Statistic { - - int getLineCount(); int getSpaceCount(); + int getLinesCount(); String getLongestLine(); - void save(int lineCount, int spaceCount, String line); + void save(int lineCount, int spaceCount, String line) throws IOException; + void setLineCount(); + + void setSpaceCount(); -} + void setLongestLine(String longestLine); +} \ No newline at end of file diff --git a/module02/src/main/java/ru/sberbank/edu/StatisticImpl.java b/module02/src/main/java/ru/sberbank/edu/StatisticImpl.java new file mode 100644 index 00000000..cd6ebab2 --- /dev/null +++ b/module02/src/main/java/ru/sberbank/edu/StatisticImpl.java @@ -0,0 +1,96 @@ +package ru.sberbank.edu; + +import java.io.*; + +public class StatisticImpl implements Statistic{ + private int spaceCount; + private int lineCount; + private String longestLine; + private static char SPACE = ' '; + public void start() throws IOException { + + File inputFile = new File("input.txt"); + BufferedReader inputReader; + FileWriter basicWriter; + + if(inputFile.exists()) { + inputReader = new BufferedReader(new FileReader("input.txt")); + } + else{ + basicWriter = new FileWriter("input.txt"); + basicWriter.append("Мы добавляем первую базовую строку" + "\n"); + basicWriter.append("Мы добавляем вторую базовую строку" + "\n"); + basicWriter.append("Мы добавляем третью базовую строку, но чтуь чуть подлинее" + "\n"); + + basicWriter.close(); + + inputReader = new BufferedReader(new FileReader("input.txt")); + }; + + + /*** + * Получили файл на вход, теперь читаем его + */ + String line; + while( (line = inputReader.readLine()) != null){ + setLineCount(); + if(line.length() > getLongestLine().length()){ + setLongestLine(line); + } + char[] charArray = line.toCharArray(); + for(int i = 0; i < line.length(); i++){ + + if(charArray[i] == SPACE){ + setSpaceCount(); + } + } + } + + save(getLinesCount(),getSpaceCount(),getLongestLine()); + } + + + @Override + public int getSpaceCount() { + return this.spaceCount; + } + + @Override + public String getLongestLine() { + if(this.longestLine == null){ + return ""; + } + else + return this.longestLine; + } + + @Override + public int getLinesCount() { + return lineCount; + } + + @Override + public void save(int lineCount, int spaceCount, String line) throws IOException { + FileWriter outputFile = new FileWriter("output.txt"); + outputFile.append("В данном файле строк " + lineCount + "\n"); + outputFile.append("В данном файле пробелов " + spaceCount + "\n"); + outputFile.append("Самая длинная строка в файле '" + line + "'" + "\n"); + outputFile.close(); + + } + + @Override + public void setLineCount() { + this.lineCount++; + } + + @Override + public void setSpaceCount() { + this.spaceCount++; + } + + @Override + public void setLongestLine(String longestLine) { + this.longestLine = longestLine; + } +} \ No newline at end of file diff --git a/module02/src/test/java/ru/sberbank/edu/AppTest.java b/module02/src/test/java/ru/sberbank/edu/AppTest.java index 895d735c..b56d81e3 100644 --- a/module02/src/test/java/ru/sberbank/edu/AppTest.java +++ b/module02/src/test/java/ru/sberbank/edu/AppTest.java @@ -1,38 +1,24 @@ package ru.sberbank.edu; -import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.io.IOException; /** * Unit test for simple App. */ -public class AppTest - extends TestCase -{ - /** - * Create the test case - * - * @param testName name of the test case - */ - public AppTest( String testName ) - { - super( testName ); - } - - /** - * @return the suite of tests being tested - */ - public static Test suite() - { - return new TestSuite( AppTest.class ); - } +public class AppTest + extends TestCase{ - /** - * Rigourous Test :-) - */ - public void testApp() - { - assertTrue( true ); + @Test + void main() throws IOException { + StatisticImpl newStatistic = new StatisticImpl(); + newStatistic.start(); + Assertions.assertThat(newStatistic.getLongestLine()).isEqualTo("Мы добавляем третью базовую строку, но чтуь чуть подлинее"); + Assertions.assertThat(newStatistic.getSpaceCount()).isEqualTo(16); + Assertions.assertThat(newStatistic.getLinesCount()).isEqualTo(3); } -} +} \ No newline at end of file From 368e7c7d29b8038414c1dfa458fe31505198977b Mon Sep 17 00:00:00 2001 From: Newarin Date: Tue, 31 Oct 2023 17:07:22 +0300 Subject: [PATCH 05/14] =?UTF-8?q?=D0=9F=D1=83=D0=BB=20=D1=80=D0=B5=D0=BA?= =?UTF-8?q?=D0=B2=D0=B5=D1=81=D1=82=202=20=D0=94=D0=97=20=D0=BF=D0=BE?= =?UTF-8?q?=D1=81=D0=BB=D0=B5=20=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/ru/sberbank/edu/StatisticImpl.java | 27 +++++++++++-------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/module02/src/main/java/ru/sberbank/edu/StatisticImpl.java b/module02/src/main/java/ru/sberbank/edu/StatisticImpl.java index cd6ebab2..1eb803df 100644 --- a/module02/src/main/java/ru/sberbank/edu/StatisticImpl.java +++ b/module02/src/main/java/ru/sberbank/edu/StatisticImpl.java @@ -18,12 +18,14 @@ public void start() throws IOException { } else{ basicWriter = new FileWriter("input.txt"); - basicWriter.append("Мы добавляем первую базовую строку" + "\n"); - basicWriter.append("Мы добавляем вторую базовую строку" + "\n"); - basicWriter.append("Мы добавляем третью базовую строку, но чтуь чуть подлинее" + "\n"); - - basicWriter.close(); - + try { + basicWriter.append("Мы добавляем первую базовую строку" + "\n"); + basicWriter.append("Мы добавляем вторую базовую строку" + "\n"); + basicWriter.append("Мы добавляем третью базовую строку, но чтуь чуть подлинее" + "\n"); + } + finally { + basicWriter.close(); + } inputReader = new BufferedReader(new FileReader("input.txt")); }; @@ -72,11 +74,14 @@ public int getLinesCount() { @Override public void save(int lineCount, int spaceCount, String line) throws IOException { FileWriter outputFile = new FileWriter("output.txt"); - outputFile.append("В данном файле строк " + lineCount + "\n"); - outputFile.append("В данном файле пробелов " + spaceCount + "\n"); - outputFile.append("Самая длинная строка в файле '" + line + "'" + "\n"); - outputFile.close(); - + try { + outputFile.append("В данном файле строк " + lineCount + "\n"); + outputFile.append("В данном файле пробелов " + spaceCount + "\n"); + outputFile.append("Самая длинная строка в файле '" + line + "'" + "\n"); + } + finally { + outputFile.close(); + } } @Override From b5eb31f79a5b462fbe4eec5858808c1ffc0198bd Mon Sep 17 00:00:00 2001 From: Newarin Date: Tue, 31 Oct 2023 18:06:58 +0300 Subject: [PATCH 06/14] =?UTF-8?q?=D0=9F=D1=83=D0=BB=20=D1=80=D0=B5=D0=BA?= =?UTF-8?q?=D0=B2=D0=B5=D1=81=D1=82=203=20=D0=94=D0=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- module03/README.md | 16 ++ module03/pom.xml | 52 +++++++ .../src/main/java/ru/sberbank/edu/App.java | 13 ++ .../java/ru/sberbank/edu/CustomArray.java | 118 +++++++++++++++ .../java/ru/sberbank/edu/CustomArrayImpl.java | 143 ++++++++++++++++++ .../ru/sberbank/edu/CustomArrayImplTest.java | 68 +++++++++ 6 files changed, 410 insertions(+) create mode 100644 module03/README.md create mode 100644 module03/pom.xml create mode 100644 module03/src/main/java/ru/sberbank/edu/App.java create mode 100644 module03/src/main/java/ru/sberbank/edu/CustomArray.java create mode 100644 module03/src/main/java/ru/sberbank/edu/CustomArrayImpl.java create mode 100644 module03/src/test/java/ru/sberbank/edu/CustomArrayImplTest.java diff --git a/module03/README.md b/module03/README.md new file mode 100644 index 00000000..5fbd1d40 --- /dev/null +++ b/module03/README.md @@ -0,0 +1,16 @@ +# Module 3. Вложенные классы Generics. Java Collections Framework Part I + +## Задание №1 + +* Реализовать класс `CustomArrayImpl`, который представляет динамический массив +* Класс `CustomArrayImpl` реализует интерфейс CustomArray +* Класс `CustomArrayImpl` может хранить объекты любого типа +* Класс `CustomArrayImpl` может динамически расширяться +* Изучить внутреннюю реализацию ArrayList + +## Критерии приемки + +1. Проект должен собираться. +2. Класс должен быть протестирован с помощью JUnit на предмет возвращаемых значений. +3. Должны быть написаны java docs. +4. В репозитории не должно быть IDE-специфичных файлов. \ No newline at end of file diff --git a/module03/pom.xml b/module03/pom.xml new file mode 100644 index 00000000..2ee5a4ca --- /dev/null +++ b/module03/pom.xml @@ -0,0 +1,52 @@ + + + homework-javareboot-2023-group-06 + ru.sberbank.edu + 1.0-SNAPSHOT + + 4.0.0 + + module03 + jar + + module03 + + + UTF-8 + 11 + 11 + 5.9.2 + 5.5.0 + 5.3.1 + 3.24.2 + + + + + org.junit.jupiter + junit-jupiter-engine + ${junit.version} + test + + + org.mockito + mockito-core + ${mockito.version} + test + + + + org.mockito + mockito-junit-jupiter + ${mockito.junit.version} + test + + + org.assertj + assertj-core + ${assertj.version} + + + + diff --git a/module03/src/main/java/ru/sberbank/edu/App.java b/module03/src/main/java/ru/sberbank/edu/App.java new file mode 100644 index 00000000..5419c026 --- /dev/null +++ b/module03/src/main/java/ru/sberbank/edu/App.java @@ -0,0 +1,13 @@ +package ru.sberbank.edu; + +/** + * Hello world! + * + */ +public class App +{ + public static void main( String[] args ) + { + System.out.println( "Hello World!" ); + } +} diff --git a/module03/src/main/java/ru/sberbank/edu/CustomArray.java b/module03/src/main/java/ru/sberbank/edu/CustomArray.java new file mode 100644 index 00000000..5b1c4706 --- /dev/null +++ b/module03/src/main/java/ru/sberbank/edu/CustomArray.java @@ -0,0 +1,118 @@ +package ru.sberbank.edu; + +import java.util.Collection; + +/** + * Simple array. Can store any objects. + */ +public interface CustomArray { + + int size(); + + boolean isEmpty(); + + /** + * Add single item. + */ + boolean add(T item); + + /** + * Add all items. + * + * @throws IllegalArgumentException if parameter items is null + */ + boolean addAll(T[] items); + + /** + * Add all items. + * + * @throws IllegalArgumentException if parameter items is null + */ + boolean addAll(Collection items); + + /** + * Add items to current place in array. + * + * @param index - index + * @param items - items for insert + * @throws ArrayIndexOutOfBoundsException if index is out of bounds + * @throws IllegalArgumentException if parameter items is null + */ + boolean addAll(int index, T[] items); + + /** + * Get item by index. + * + * @param index - index + * @throws ArrayIndexOutOfBoundsException if index is out of bounds + */ + T get(int index); + + /** + * Set item by index. + * + * @param index - index + * @return old value + * @throws ArrayIndexOutOfBoundsException if index is out of bounds + */ + T set(int index, T item); + + /** + * Remove item by index. + * + * @param index - index + * @throws ArrayIndexOutOfBoundsException if index is out of bounds + */ + void remove(int index); + + /** + * Remove item by value. Remove first item occurrence. + * + * @param item - item + * @return true if item was removed + */ + boolean remove(T item); + + /** + * Checks if item exists. + * + * @param item - item + * @return true or false + */ + boolean contains(T item); + + /** + * Index of item. + * + * @param item - item + * @return index of element or -1 of list doesn't contain element + */ + int indexOf(T item); + + /** + * Grow current capacity to store new elements if needed. + * + * @param newElementsCount - new elements count + */ + void ensureCapacity(int newElementsCount); + + /** + * Get current capacity. + */ + int getCapacity(); + + /** + * Reverse list. + */ + void reverse(); + + /** + * Get content in format '[ element1 element2 ... elenentN ] or [ ] if empty. + */ + String toString(); + + /** + * Get copy of current array. + */ + Object[] toArray(); +} diff --git a/module03/src/main/java/ru/sberbank/edu/CustomArrayImpl.java b/module03/src/main/java/ru/sberbank/edu/CustomArrayImpl.java new file mode 100644 index 00000000..5496cc30 --- /dev/null +++ b/module03/src/main/java/ru/sberbank/edu/CustomArrayImpl.java @@ -0,0 +1,143 @@ +package ru.sberbank.edu; + +import java.util.Arrays; +import java.util.Collection; +import java.util.Iterator; + +public class CustomArrayImpl implements CustomArray{ + + private int size; + private Object[] objectsArray; + + CustomArrayImpl(){ + this(10); + } + CustomArrayImpl(int capacity){ + objectsArray = new Object[capacity]; + } + + @Override + public int size() { + return size; + } + + @Override + public boolean isEmpty() { + return size == 0; + } + + @Override + public boolean add(Object item) { + if (size == objectsArray.length){ + objectsArray = Arrays.copyOf(objectsArray, size * 2);; + } + objectsArray[size] = item; + ++size; + return true; + } + + @Override + public boolean addAll(Object[] items) { + for(int i = 0; i < items.length; i++){ + add(items[i]); + } + return true; + } + + @Override + public boolean addAll(Collection items) { + Iterator iterator = items.iterator(); + while (iterator.hasNext()){ + add(iterator.next()); + } + return true; + } + + @Override + public boolean addAll(int index, Object[] items) { + if (index < 0){ + throw new IndexOutOfBoundsException(); + } + + for(int i = index; i< items.length; i++){ + add(items[i]); + } + return true; + } + + @Override + public Object get(int index) { + return (T)objectsArray[index]; + } + + @Override + public Object set(int index, Object item) { + if (index < 0){ + throw new IndexOutOfBoundsException(); + } + return (T)(objectsArray[index] = item); + } + + @Override + public void remove(int index) { + if (index < 0 || index > size()){ + throw new IndexOutOfBoundsException(); + } + System.arraycopy(objectsArray,index + 1, objectsArray, index, size - index - 1); + } + + @Override + public boolean remove(Object item) { + for(int i = 0; i < size; i++){ + if(item.equals(objectsArray[i])){ + remove(i); + return true; + } + } + return false; + } + + @Override + public boolean contains(Object item) { + for(int i = 0; i < size; i++){ + if(item.equals(objectsArray[i])){ + return true; + } + } + return false; + } + + @Override + public int indexOf(Object item) { + for(int i = 0; i < size; i++){ + if(item.equals(objectsArray[i])){ + return i; + } + } + return -1; + } + + @Override + public void ensureCapacity(int newElementsCount) { + objectsArray = Arrays.copyOf(objectsArray, newElementsCount + size); + } + + @Override + public int getCapacity() { + return objectsArray.length; + } + + @Override + public void reverse() { + Object[] reverse = new Object[size]; + for (int i = 0; i < size(); i++){ + reverse[size - 1 - i ] = objectsArray[i]; + } + System.arraycopy(reverse,0,objectsArray,0,size()); + } + + @Override + public Object[] toArray() { + return objectsArray; + } +} diff --git a/module03/src/test/java/ru/sberbank/edu/CustomArrayImplTest.java b/module03/src/test/java/ru/sberbank/edu/CustomArrayImplTest.java new file mode 100644 index 00000000..2cd4c0ca --- /dev/null +++ b/module03/src/test/java/ru/sberbank/edu/CustomArrayImplTest.java @@ -0,0 +1,68 @@ +package ru.sberbank.edu; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.assertj.core.api.Assertions; + +class CustomArrayImplTest { + + private CustomArrayImpl customArray;//переменная хранения объекта для проверок + + @BeforeEach + public void setUp() { + customArray = new CustomArrayImpl<>(); + } + + @Test + public void testAddIncreasesSize() { + String item = "test"; + int initialSize = customArray.size(); + customArray.add(item); + int finalSize = customArray.size(); + Assertions.assertThat(initialSize + 1).isEqualTo(finalSize); + } + + @Test + public void testAddItem() { + String item = "test"; + customArray.add(item); + Object firstItem = customArray.get(0); + Assertions.assertThat(item).isEqualTo(firstItem); + } + + @Test + public void testIsEmpty() { + + Assertions.assertThat(customArray.isEmpty()).isTrue(); + } + + @Test + public void testIsNotEmpty() { + customArray.add(1); + Assertions.assertThat(customArray.isEmpty()).isFalse(); + } + + @Test + public void testAddAll() { + Integer[] elements = {3, 2, 1}; + customArray.addAll(elements); + for (Integer element : elements) { + Assertions.assertThat(customArray.contains(element)).isTrue(); + } + } + + @Test + public void testRemove() { + customArray.add("1"); + boolean result = customArray.remove("1"); + Assertions.assertThat(result).isTrue(); + Assertions.assertThat(customArray.isEmpty()).isTrue(); + } + + @Test + public void testContains() { + customArray.add(123); + Assertions.assertThat(customArray.contains(123)).isTrue(); + } + +} \ No newline at end of file From 6129d3636a4dc983d38771abc525d873d771254c Mon Sep 17 00:00:00 2001 From: Newarin Date: Wed, 8 Nov 2023 17:59:42 +0300 Subject: [PATCH 07/14] =?UTF-8?q?=D0=9F=D1=83=D0=BB=20=D1=80=D0=B5=D0=BA?= =?UTF-8?q?=D0=B2=D0=B5=D1=81=D1=82=204=20=D0=94=D0=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- module04/pom.xml | 52 ++++++++++++ .../src/main/java/ru/sberbank/edu/App.java | 40 +++++++++ .../sberbank/edu/CustomDigitComparator.java | 26 ++++++ .../src/main/java/ru/sberbank/edu/Person.java | 84 +++++++++++++++++++ .../test/java/ru/sberbank/edu/AppTest.java | 47 +++++++++++ 5 files changed, 249 insertions(+) create mode 100644 module04/pom.xml create mode 100644 module04/src/main/java/ru/sberbank/edu/App.java create mode 100644 module04/src/main/java/ru/sberbank/edu/CustomDigitComparator.java create mode 100644 module04/src/main/java/ru/sberbank/edu/Person.java create mode 100644 module04/src/test/java/ru/sberbank/edu/AppTest.java diff --git a/module04/pom.xml b/module04/pom.xml new file mode 100644 index 00000000..b3f40785 --- /dev/null +++ b/module04/pom.xml @@ -0,0 +1,52 @@ + + + homework-javareboot-2023-group-06 + ru.sberbank.edu + 1.0-SNAPSHOT + + 4.0.0 + + module04 + jar + + module04 + + + UTF-8 + 11 + 11 + 5.9.2 + 5.5.0 + 5.3.1 + 3.24.2 + + + + + org.junit.jupiter + junit-jupiter-engine + ${junit.version} + test + + + org.mockito + mockito-core + ${mockito.version} + test + + + + org.mockito + mockito-junit-jupiter + ${mockito.junit.version} + test + + + org.assertj + assertj-core + ${assertj.version} + + + + diff --git a/module04/src/main/java/ru/sberbank/edu/App.java b/module04/src/main/java/ru/sberbank/edu/App.java new file mode 100644 index 00000000..c26a8b97 --- /dev/null +++ b/module04/src/main/java/ru/sberbank/edu/App.java @@ -0,0 +1,40 @@ +package ru.sberbank.edu; + +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; + +/** + * Hello world! + * + */ +public class App +{ + public static void main( String[] args ) + { + + List intList = new ArrayList<>(); + + intList.add(1); + intList.add(2); + intList.add(2); + intList.add(1); + + Comparator comporator = new CustomDigitComparator(); + intList.sort(comporator); + + System.out.println(intList); + + + + List personList = new ArrayList<>(); + personList.add(new Person("Имя","Город",15)); + personList.add(new Person("иМя","Город123",15)); + personList.add(new Person("имЯ1","Город",15)); + personList.add(new Person("имя","Город",15)); + + personList.sort(Person::compareTo); + + System.out.println(personList); + } +} diff --git a/module04/src/main/java/ru/sberbank/edu/CustomDigitComparator.java b/module04/src/main/java/ru/sberbank/edu/CustomDigitComparator.java new file mode 100644 index 00000000..887946d0 --- /dev/null +++ b/module04/src/main/java/ru/sberbank/edu/CustomDigitComparator.java @@ -0,0 +1,26 @@ +package ru.sberbank.edu; + +import java.util.Comparator; + +public class CustomDigitComparator implements Comparator { + @Override + public int compare(Integer o1, Integer o2) { + + if (o1 == null || o2 == null){ + throw new RuntimeException(); + } + + int result1 = o1.intValue() % 2; + int result2 = o2.intValue() % 2; + + if (result1 == result2) { + return 0; + } else { + if (result1 != 0) { + return 1; + } else { + return -1; + } + } + } +} diff --git a/module04/src/main/java/ru/sberbank/edu/Person.java b/module04/src/main/java/ru/sberbank/edu/Person.java new file mode 100644 index 00000000..3ffda529 --- /dev/null +++ b/module04/src/main/java/ru/sberbank/edu/Person.java @@ -0,0 +1,84 @@ +package ru.sberbank.edu; + +import java.util.Objects; + +public class Person implements Comparable { + private String name; + private String city; + + private int age; + + public Person(String name, String city, int age) { + this.name = name; + this.city = city; + this.age = age; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getCity() { + return city; + } + + public void setCity(String city) { + this.city = city; + } + + public int getAge() { + return age; + } + + public void setAge(int age) { + this.age = age; + } + + @Override + public String toString() { + return "Person{" + + "name='" + name + '\'' + + ", city='" + city + '\'' + + ", age=" + age + + '}'; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Person person = (Person) o; + return age == person.age && Objects.equals(name, person.name) && Objects.equals(city, person.city); + } + + @Override + public int hashCode() { + return Objects.hash(name, city, age); + } + + @Override + public int compareTo(Person o) { + if(this.city == null || o.city == null || this.name == null || o.name == null ){ + throw new RuntimeException(); + } + if (this.city.equalsIgnoreCase(o.city)){ + if(this.name.equalsIgnoreCase(o.name)){ + return 0; + }else if (this.name.compareToIgnoreCase(o.name) > 0){ + return 1; + }else{ + return -1; + } + } + if (this.city.compareTo(o.city) < 0) { + return -1; + } + else + return 1; + } +} + diff --git a/module04/src/test/java/ru/sberbank/edu/AppTest.java b/module04/src/test/java/ru/sberbank/edu/AppTest.java new file mode 100644 index 00000000..4447e62d --- /dev/null +++ b/module04/src/test/java/ru/sberbank/edu/AppTest.java @@ -0,0 +1,47 @@ +package ru.sberbank.edu; + +import junit.framework.TestCase; +import junit.framework.TestSuite; +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; + +/** + * Unit test for simple App. + */ +public class AppTest + extends TestCase +{ + + + @Test + void main(){ + + + List intList = new ArrayList<>(); + + intList.add(1); + intList.add(2); + intList.add(2); + intList.add(1); + + Comparator comporator = new CustomDigitComparator(); + intList.sort(comporator); + + List personList = new ArrayList<>(); + personList.add(new Person("Имя1","Город",15)); + personList.add(new Person("иМя","Город123",15)); + personList.add(new Person("имЯ","Город",15)); + personList.add(new Person("имя","Город",15)); + + personList.sort(Person::compareTo); + + Assertions.assertThat(intList.get(0) == 2 && intList.get(1) == 2 && intList.get(2) == 1 && intList.get(3) == 1 ).isTrue(); + Assertions.assertThat(personList.get(0).getCity().equals("Город") && personList.get(0).getName().equals("имЯ") && personList.get(3).getCity().equals("Город123") && personList.get(3).getName().equals("иМя") ).isTrue(); + } +} From f1f645d8d2db913cece19cd8e24756de878369d7 Mon Sep 17 00:00:00 2001 From: Newarin Date: Wed, 8 Nov 2023 19:54:50 +0300 Subject: [PATCH 08/14] =?UTF-8?q?=D0=9F=D1=83=D0=BB=20=D1=80=D0=B5=D0=BA?= =?UTF-8?q?=D0=B2=D0=B5=D1=81=D1=82=204=20=D0=94=D0=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- module04/src/main/java/ru/sberbank/edu/Person.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/module04/src/main/java/ru/sberbank/edu/Person.java b/module04/src/main/java/ru/sberbank/edu/Person.java index 3ffda529..3fbf8bc9 100644 --- a/module04/src/main/java/ru/sberbank/edu/Person.java +++ b/module04/src/main/java/ru/sberbank/edu/Person.java @@ -52,12 +52,15 @@ public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Person person = (Person) o; - return age == person.age && Objects.equals(name, person.name) && Objects.equals(city, person.city); + return age == person.age && name.equalsIgnoreCase(person.name) && city.equalsIgnoreCase(person.city); } @Override public int hashCode() { - return Objects.hash(name, city, age); + String lclName = name.toLowerCase(); + String lclCity = city.toLowerCase(); + + return Objects.hash(lclName, lclCity, age); } @Override From 89e8e7b7681318b7c4777aac303888fcab1ee138 Mon Sep 17 00:00:00 2001 From: Newarin Date: Tue, 5 Dec 2023 21:02:15 +0300 Subject: [PATCH 09/14] homework7 --- module07/pom.xml | 11 +++ .../src/main/java/ru/sberbank/edu/App.java | 9 ++ .../java/ru/sberbank/edu/WeatherInfo.java | 46 ---------- .../java/ru/sberbank/edu/WeatherProvider.java | 18 ---- .../edu/{ => caches}/WeatherCache.java | 15 +++- .../ru/sberbank/edu/models/WeatherInfo.java | 90 +++++++++++++++++++ .../edu/provider/WeatherProvider.java | 29 ++++++ pom.xml | 4 +- 8 files changed, 153 insertions(+), 69 deletions(-) delete mode 100644 module07/src/main/java/ru/sberbank/edu/WeatherInfo.java delete mode 100644 module07/src/main/java/ru/sberbank/edu/WeatherProvider.java rename module07/src/main/java/ru/sberbank/edu/{ => caches}/WeatherCache.java (68%) create mode 100644 module07/src/main/java/ru/sberbank/edu/models/WeatherInfo.java create mode 100644 module07/src/main/java/ru/sberbank/edu/provider/WeatherProvider.java diff --git a/module07/pom.xml b/module07/pom.xml index 3a76c8a1..55f749ef 100644 --- a/module07/pom.xml +++ b/module07/pom.xml @@ -22,5 +22,16 @@ spring-web 3.0.2.RELEASE + + org.projectlombok + lombok + RELEASE + compile + + + com.fasterxml.jackson.core + jackson-annotations + 2.16.0 + diff --git a/module07/src/main/java/ru/sberbank/edu/App.java b/module07/src/main/java/ru/sberbank/edu/App.java index 5419c026..24bf9180 100644 --- a/module07/src/main/java/ru/sberbank/edu/App.java +++ b/module07/src/main/java/ru/sberbank/edu/App.java @@ -1,5 +1,8 @@ package ru.sberbank.edu; +import ru.sberbank.edu.caches.WeatherCache; +import ru.sberbank.edu.provider.WeatherProvider; + /** * Hello world! * @@ -9,5 +12,11 @@ public class App public static void main( String[] args ) { System.out.println( "Hello World!" ); + + WeatherCache weatherCache = new WeatherCache(new WeatherProvider() ); + weatherCache.getWeatherInfo("London"); + System.out.println(weatherCache.getWeatherInfo("London")); + } + } diff --git a/module07/src/main/java/ru/sberbank/edu/WeatherInfo.java b/module07/src/main/java/ru/sberbank/edu/WeatherInfo.java deleted file mode 100644 index 9fcee430..00000000 --- a/module07/src/main/java/ru/sberbank/edu/WeatherInfo.java +++ /dev/null @@ -1,46 +0,0 @@ -package ru.sberbank.edu; - -import java.time.LocalDateTime; - -public class WeatherInfo { - - private String city; - - /** - * Short weather description - * Like 'sunny', 'clouds', 'raining', etc - */ - private String shortDescription; - - /** - * Weather description. - * Like 'broken clouds', 'heavy raining', etc - */ - private String description; - - /** - * Temperature. - */ - private double temperature; - - /** - * Temperature that fells like. - */ - private double feelsLikeTemperature; - - /** - * Wind speed. - */ - private double windSpeed; - - /** - * Pressure. - */ - private double pressure; - - /** - * Expiry time of weather info. - * If current time is above expiry time then current weather info is not actual! - */ - private LocalDateTime expiryTime; -} diff --git a/module07/src/main/java/ru/sberbank/edu/WeatherProvider.java b/module07/src/main/java/ru/sberbank/edu/WeatherProvider.java deleted file mode 100644 index 5fc6d989..00000000 --- a/module07/src/main/java/ru/sberbank/edu/WeatherProvider.java +++ /dev/null @@ -1,18 +0,0 @@ -package ru.sberbank.edu; - -public class WeatherProvider { - - // private RestTemplate restTemplate = null; - - /** - * Download ACTUAL weather info from internet. - * You should call GET http://api.openweathermap.org/data/2.5/weather?q={city name}&appid={API key} - * You should use Spring Rest Template for calling requests - * - * @param city - city - * @return weather info or null - */ - public WeatherInfo get(String city) { - return null; - } -} diff --git a/module07/src/main/java/ru/sberbank/edu/WeatherCache.java b/module07/src/main/java/ru/sberbank/edu/caches/WeatherCache.java similarity index 68% rename from module07/src/main/java/ru/sberbank/edu/WeatherCache.java rename to module07/src/main/java/ru/sberbank/edu/caches/WeatherCache.java index e0a2d02b..b8c6a67a 100644 --- a/module07/src/main/java/ru/sberbank/edu/WeatherCache.java +++ b/module07/src/main/java/ru/sberbank/edu/caches/WeatherCache.java @@ -1,4 +1,7 @@ -package ru.sberbank.edu; +package ru.sberbank.edu.caches; + +import ru.sberbank.edu.models.WeatherInfo; +import ru.sberbank.edu.provider.WeatherProvider; import java.util.HashMap; import java.util.Map; @@ -28,13 +31,19 @@ public WeatherCache(WeatherProvider weatherProvider) { */ public WeatherInfo getWeatherInfo(String city) { // should be implemented - return null; + WeatherInfo cacheCity = cache.get(city); + if((cacheCity != null) && ( java.time.LocalDateTime.now().isAfter(cacheCity.getExpiryTime()))) { + return cache.get(city); + }else + removeWeatherInfo(city); + cache.put(city,weatherProvider.get(city)); + return weatherProvider.get(city); } /** * Remove weather info from cache. **/ public void removeWeatherInfo(String city) { - // should be implemented + cache.remove(city); } } diff --git a/module07/src/main/java/ru/sberbank/edu/models/WeatherInfo.java b/module07/src/main/java/ru/sberbank/edu/models/WeatherInfo.java new file mode 100644 index 00000000..f70474ad --- /dev/null +++ b/module07/src/main/java/ru/sberbank/edu/models/WeatherInfo.java @@ -0,0 +1,90 @@ +package ru.sberbank.edu.models; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.*; + +import java.time.LocalDateTime; +import java.util.Map; + +@Getter +@AllArgsConstructor +@NoArgsConstructor +@ToString +@EqualsAndHashCode +public class WeatherInfo { + private static final Long TIME_TO_EXPIRE = 1L; + + @JsonProperty("name") + private String city; + + /** + * Short weather description + * Like 'sunny', 'clouds', 'raining', etc + */ + private String shortDescription; + /** + * Weather description. + * Like 'broken clouds', 'heavy raining', etc + */ + private String description; + + /** + * Temperature. + */ + private double temperature; + + /** + * Temperature that fells like. + */ + private double feelsLikeTemperature; + + /** + * Wind speed. + */ + private Double windSpeed; + + /** + * Pressure. + */ + private double pressure; + + /** + * Expiry time of weather info. + * If current time is above expiry time then current weather info is not actual! + */ + private LocalDateTime expiryTime = LocalDateTime.now().plusMinutes(TIME_TO_EXPIRE); + + /** + * Parse response and set values 'shortDescription' and 'description' into POJO + * @param weather + */ + @SuppressWarnings("unchecked") + @JsonProperty("weather") + private void unpackNestedWeather(Map[] weather) { + Map tempWeather = weather[0]; + this.shortDescription = (String)tempWeather.get("main"); + this.description = (String)tempWeather.get("description"); + } + + /** + * Parse response and set values 'temperature', 'pressure' and 'feelsLikeTemperature' into POJO + * @param main + */ + @SuppressWarnings("unchecked") + @JsonProperty("main") + private void unpackNestedMain(Map main) { + this.temperature = (double)main.get("temp"); + this.feelsLikeTemperature = (double) main.get("feels_like"); + this.pressure = (int) main.get("pressure"); + } + + /** + * Parse response and set value 'windSpeed' into POJO + * @param wind + */ + @SuppressWarnings("unchecked") + @JsonProperty("wind") + private void unpackNestedWind(Map wind) { + this.windSpeed = Double.parseDouble(wind.get("speed").toString()); + } +} diff --git a/module07/src/main/java/ru/sberbank/edu/provider/WeatherProvider.java b/module07/src/main/java/ru/sberbank/edu/provider/WeatherProvider.java new file mode 100644 index 00000000..4c780c8c --- /dev/null +++ b/module07/src/main/java/ru/sberbank/edu/provider/WeatherProvider.java @@ -0,0 +1,29 @@ +package ru.sberbank.edu.provider; + +import org.springframework.web.client.RestTemplate; +import ru.sberbank.edu.models.WeatherInfo; + +public class WeatherProvider { + + private final RestTemplate restTemplate = new RestTemplate(); + private static final String WEATHER_URL = "https://api.openweathermap.org/data/2.5/weather?q={city name}&appid={API key}"; + private static final String API_KEY = "403cf62be23fdaba3e10e6cd77fc1631"; + + /** + * Download ACTUAL weather info from internet. + * You should call GET http://api.openweathermap.org/data/2.5/weather?q={city name}&appid={API key} + * You should use Spring Rest Template for calling requests + * + * @param city - city + * @return weather info or null + */ + public synchronized WeatherInfo get(String city) { + try { + WeatherInfo resp = restTemplate.getForObject(WEATHER_URL, WeatherInfo.class, city, API_KEY); + return resp; + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } +} diff --git a/pom.xml b/pom.xml index 6224be7b..db567a61 100644 --- a/pom.xml +++ b/pom.xml @@ -22,8 +22,8 @@ UTF-8 - 17 - 17 + 11 + 11 5.9.2 5.5.0 5.3.1 From fcddf326b4f5042d275182cac92a9024487807fe Mon Sep 17 00:00:00 2001 From: Newarin Date: Wed, 6 Dec 2023 18:32:24 +0300 Subject: [PATCH 10/14] homework7.1 --- module07/pom.xml | 5 ++++ .../ru/sberbank/edu/models/WeatherInfo.java | 1 + .../edu/provider/WeatherProvider.java | 25 +++++++++++++++---- 3 files changed, 26 insertions(+), 5 deletions(-) diff --git a/module07/pom.xml b/module07/pom.xml index 55f749ef..6ae6e802 100644 --- a/module07/pom.xml +++ b/module07/pom.xml @@ -33,5 +33,10 @@ jackson-annotations 2.16.0 + + com.fasterxml.jackson.core + jackson-databind + 2.16.0 + diff --git a/module07/src/main/java/ru/sberbank/edu/models/WeatherInfo.java b/module07/src/main/java/ru/sberbank/edu/models/WeatherInfo.java index f70474ad..7b7e9795 100644 --- a/module07/src/main/java/ru/sberbank/edu/models/WeatherInfo.java +++ b/module07/src/main/java/ru/sberbank/edu/models/WeatherInfo.java @@ -7,6 +7,7 @@ import java.util.Map; @Getter +@Setter @AllArgsConstructor @NoArgsConstructor @ToString diff --git a/module07/src/main/java/ru/sberbank/edu/provider/WeatherProvider.java b/module07/src/main/java/ru/sberbank/edu/provider/WeatherProvider.java index 4c780c8c..4f47f0de 100644 --- a/module07/src/main/java/ru/sberbank/edu/provider/WeatherProvider.java +++ b/module07/src/main/java/ru/sberbank/edu/provider/WeatherProvider.java @@ -1,12 +1,16 @@ package ru.sberbank.edu.provider; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.springframework.http.ResponseEntity; import org.springframework.web.client.RestTemplate; import ru.sberbank.edu.models.WeatherInfo; +import java.time.LocalDateTime; + public class WeatherProvider { private final RestTemplate restTemplate = new RestTemplate(); - private static final String WEATHER_URL = "https://api.openweathermap.org/data/2.5/weather?q={city name}&appid={API key}"; private static final String API_KEY = "403cf62be23fdaba3e10e6cd77fc1631"; /** @@ -18,11 +22,22 @@ public class WeatherProvider { * @return weather info or null */ public synchronized WeatherInfo get(String city) { + String url = "https://api.openweathermap.org/data/2.5/weather?q=" + city + "&appid=" + API_KEY + "&units=metric"; try { - WeatherInfo resp = restTemplate.getForObject(WEATHER_URL, WeatherInfo.class, city, API_KEY); - return resp; - } catch (Exception e) { - e.printStackTrace(); + ResponseEntity response = restTemplate.getForEntity(url, String.class); + ObjectMapper mapper = new ObjectMapper(); + JsonNode root = mapper.readTree(response.getBody()); + WeatherInfo weatherInfo = new WeatherInfo(); + weatherInfo.setCity(String.valueOf(root.path("name")).replaceAll("\"", "")); + weatherInfo.setShortDescription(String.valueOf(root.path("weather").get(0).path("main")).replaceAll("\"", "")); + weatherInfo.setDescription(String.valueOf(root.path("weather").get(0).path("description")).replaceAll("\"", "")); + weatherInfo.setTemperature(Double.parseDouble(String.valueOf(root.path("main").path("temp")))); + weatherInfo.setFeelsLikeTemperature(Double.parseDouble(String.valueOf(root.path("main").path("feels_like")))); + weatherInfo.setWindSpeed(Double.parseDouble(String.valueOf(root.path("wind").path("speed")))); + weatherInfo.setPressure(Double.parseDouble(String.valueOf(root.path("main").path("pressure")))); + weatherInfo.setExpiryTime(LocalDateTime.now().plusMinutes(5)); + return weatherInfo; + } catch (Exception exception ) { return null; } } From 7f7874f6346a01e4adb67a24a88667239c3615b8 Mon Sep 17 00:00:00 2001 From: Newarin Date: Sun, 10 Dec 2023 16:06:14 +0300 Subject: [PATCH 11/14] homework7.2 --- module07/src/main/java/ru/sberbank/edu/caches/WeatherCache.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module07/src/main/java/ru/sberbank/edu/caches/WeatherCache.java b/module07/src/main/java/ru/sberbank/edu/caches/WeatherCache.java index b8c6a67a..c3f61460 100644 --- a/module07/src/main/java/ru/sberbank/edu/caches/WeatherCache.java +++ b/module07/src/main/java/ru/sberbank/edu/caches/WeatherCache.java @@ -29,7 +29,7 @@ public WeatherCache(WeatherProvider weatherProvider) { * @param city - city * @return actual weather info */ - public WeatherInfo getWeatherInfo(String city) { + public synchronized WeatherInfo getWeatherInfo(String city) { // should be implemented WeatherInfo cacheCity = cache.get(city); if((cacheCity != null) && ( java.time.LocalDateTime.now().isAfter(cacheCity.getExpiryTime()))) { From bfe74f98c44a9e774536510044bd661111353b10 Mon Sep 17 00:00:00 2001 From: Newarin Date: Thu, 28 Dec 2023 11:57:55 +0300 Subject: [PATCH 12/14] homework7.2 --- module08/pom.xml | 5 ++ module08/src/main/car/author.html | 15 ++++++ module08/src/main/car/img/UAZ.png | Bin 0 -> 179141 bytes module08/src/main/car/index.html | 49 +++++++++++++++++ .../ru/sberbank/edu/FinancialServlet.java | 50 ++++++++++++++---- 5 files changed, 110 insertions(+), 9 deletions(-) create mode 100644 module08/src/main/car/author.html create mode 100644 module08/src/main/car/img/UAZ.png create mode 100644 module08/src/main/car/index.html diff --git a/module08/pom.xml b/module08/pom.xml index 5ab321fb..8bb6f70c 100644 --- a/module08/pom.xml +++ b/module08/pom.xml @@ -24,5 +24,10 @@ 3.8.1 test + + javax.servlet + javax.servlet-api + 3.1.0 + diff --git a/module08/src/main/car/author.html b/module08/src/main/car/author.html new file mode 100644 index 00000000..36a2c317 --- /dev/null +++ b/module08/src/main/car/author.html @@ -0,0 +1,15 @@ + + + + + Author + + + +

Автор работы

+

Рюрикх Николай Юрьевич

+

+
+Назад + + \ No newline at end of file diff --git a/module08/src/main/car/img/UAZ.png b/module08/src/main/car/img/UAZ.png new file mode 100644 index 0000000000000000000000000000000000000000..6d1c6e96828e77826fef10ef72e65c2afc316088 GIT binary patch literal 179141 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

G^1{VdX{yDzb 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�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 + + + + Технические характеристики автомобиля UAZ + + + +

Автомобиль УАЗ Патриот

+ + + +

Технические характеристики

+
+ Длина

+ 4750 мм

+ + Ширина

+ 2110 мм

+ + Высота

+ 1910 мм

+ + Колесная база

+ 2760 мм

+ + Ширина передней колеи

+ 1600 мм

+ + Ширина задней колеи

+ 1600 мм

+ +
+

Варианты исполнения

+ + + + +
+
    +
  • ZMZ PRO 134,6 л/с
  • +
  • ZMZ PRO 149,6 л/с
  • +
+
+

+
+Автор работы + + \ No newline at end of file diff --git a/module08/src/main/java/ru/sberbank/edu/FinancialServlet.java b/module08/src/main/java/ru/sberbank/edu/FinancialServlet.java index f012968f..6fa526a6 100644 --- a/module08/src/main/java/ru/sberbank/edu/FinancialServlet.java +++ b/module08/src/main/java/ru/sberbank/edu/FinancialServlet.java @@ -1,13 +1,45 @@ package ru.sberbank.edu; -/** - * Hello world! - * - */ -public class FinancialServlet -{ - public static void main( String[] args ) - { - System.out.println( "Hello World!" ); +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +@WebServlet(urlPatterns = "/finance") +public class FinancialServlet extends HttpServlet { + + double sumMin = 50000; + + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + getServletContext().getRequestDispatcher("/index.jsp").forward(request, response); + } + + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + double sum = 0; + double percentage = 0; + int years = 0; + + try{ + sum = Double.parseDouble(request.getParameter("sum")); + percentage = Double.parseDouble(request.getParameter("percentage")); + years = Integer.parseInt(request.getParameter("years")); + } catch (NullPointerException | NumberFormatException e) { + getServletContext().getRequestDispatcher("/error.jsp").forward(request, response); + } + + if (sum <= sumMin) { + getServletContext().getRequestDispatcher("/errorsum.jsp").forward(request, response); + } else { + + double interest = sum * percentage / 100 * years; + double total = sum + interest; + + request.setAttribute("calc", total); + getServletContext().getRequestDispatcher("/calculation.jsp").forward(request, response); + } } } From aef2c58ad6aaa9b98904095cd63c8dd7535fa9c7 Mon Sep 17 00:00:00 2001 From: Newarin Date: Thu, 28 Dec 2023 12:01:24 +0300 Subject: [PATCH 13/14] homework8 --- module08/src/main/car/css/style.css | 35 +++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 module08/src/main/car/css/style.css diff --git a/module08/src/main/car/css/style.css b/module08/src/main/car/css/style.css new file mode 100644 index 00000000..9a0d0034 --- /dev/null +++ b/module08/src/main/car/css/style.css @@ -0,0 +1,35 @@ +body { + font-family: sans-serif; + font-size: 16px; +} + +p { + margin-left: 5%; +} + +div { + margin-left: 10%; +} + +img { + float: left; +} + +h1 { + margin-left: 5%; + font-size: 24px; + font-weight: bold; +} + +table { + margin-left: 5%; +} + +th, td { + border: 1px solid black; + padding: 10px; +} + +td { + text-align: left +} \ No newline at end of file From 7f9516f6e57e4e21cdc84ca4e71fac08d34d930c Mon Sep 17 00:00:00 2001 From: Newarin Date: Sat, 13 Jan 2024 11:58:14 +0300 Subject: [PATCH 14/14] Homework9 --- module03/pom.xml | 2 - module09/pom.xml | 20 ++++ .../src/main/java/ru/sberbank/edu/App.java | 17 +++- .../ru/sberbank/edu/OpenWeatherProvider.java | 76 +++++++++++++++ .../java/ru/sberbank/edu/WeatherCache.java | 40 +------- .../ru/sberbank/edu/WeatherCacheImpl.java | 68 +++++++++++++ .../java/ru/sberbank/edu/WeatherInfo.java | 97 ++++++++++++++++++- .../java/ru/sberbank/edu/WeatherProvider.java | 21 +--- .../ru/sberbank/edu/config/AppConfig.java | 31 ++++++ module09/src/main/resources/app.properties | 3 + 10 files changed, 312 insertions(+), 63 deletions(-) create mode 100644 module09/src/main/java/ru/sberbank/edu/OpenWeatherProvider.java create mode 100644 module09/src/main/java/ru/sberbank/edu/WeatherCacheImpl.java create mode 100644 module09/src/main/java/ru/sberbank/edu/config/AppConfig.java create mode 100644 module09/src/main/resources/app.properties diff --git a/module03/pom.xml b/module03/pom.xml index ab0e1473..91d1e68d 100644 --- a/module03/pom.xml +++ b/module03/pom.xml @@ -50,7 +50,5 @@ -
- diff --git a/module09/pom.xml b/module09/pom.xml index 59059ad5..bdc362f4 100644 --- a/module09/pom.xml +++ b/module09/pom.xml @@ -14,6 +14,26 @@ UTF-8 + 11 + 11 + + + org.springframework + spring-context + 5.3.25 + + + org.springframework + spring-web + 5.3.27 + compile + + + org.json + json + 20231013 + + diff --git a/module09/src/main/java/ru/sberbank/edu/App.java b/module09/src/main/java/ru/sberbank/edu/App.java index 5419c026..a8f0e4be 100644 --- a/module09/src/main/java/ru/sberbank/edu/App.java +++ b/module09/src/main/java/ru/sberbank/edu/App.java @@ -1,13 +1,20 @@ package ru.sberbank.edu; +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; +import ru.sberbank.edu.config.AppConfig; + /** * Hello world! * */ -public class App -{ - public static void main( String[] args ) - { - System.out.println( "Hello World!" ); +public class App { + public static void main( String[] args ) { + ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class); + WeatherCache cache = context.getBean(WeatherCache.class); + + WeatherInfo info = cache.getWeatherInfo("Moscow"); + + System.out.println(info); } } diff --git a/module09/src/main/java/ru/sberbank/edu/OpenWeatherProvider.java b/module09/src/main/java/ru/sberbank/edu/OpenWeatherProvider.java new file mode 100644 index 00000000..c989c4c0 --- /dev/null +++ b/module09/src/main/java/ru/sberbank/edu/OpenWeatherProvider.java @@ -0,0 +1,76 @@ +package ru.sberbank.edu; + +import org.json.JSONObject; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.ResponseEntity; +import org.springframework.web.client.RestTemplate; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.HashMap; +import java.util.Map; + +/** + * Weather provider + */ +public class OpenWeatherProvider implements WeatherProvider { + + private RestTemplate restTemplate; + @Value("${weather.url}") + private String URL; + @Value("${app.key}") + private String appKey; + @Value("${expire.minute}") + private Integer expireMinute; + + @Autowired + public void setRestTemplate(RestTemplate restTemplate) { + this.restTemplate = restTemplate; + } + + /** + * Download ACTUAL weather info from internet. + * You should call GET http://api.openweathermap.org/data/2.5/weather?q={city name}&appid={API key} + * You should use Spring Rest Template for calling requests + * + * @param city - city + * @return weather info or null + */ + public WeatherInfo get(String city) { + Map params = new HashMap<>(); + params.put("q", city); + params.put("appId", appKey); + + ResponseEntity response = restTemplate.getForEntity(URL, String.class, params); + JSONObject obj = new JSONObject(response.getBody()); + + return parse(obj); + } + + /** + * parse response to {@link WeatherInfo} + * @param obj {{@link JSONObject}} response + * @return {{@link WeatherInfo}} + */ + private WeatherInfo parse(JSONObject obj){ + String city = (String) obj.query("/name"); + String shortDescription = (String) obj.query("/weather/0/main"); + String description = (String) obj.query("/weather/0/description"); + BigDecimal temperature = (BigDecimal)obj.query("/main/temp"); + BigDecimal feelsLikeTemperature = (BigDecimal) obj.query("/main/feels_like"); + BigDecimal windSpeed = (BigDecimal) obj.query("/wind/speed"); + Integer pressure = (Integer) obj.query("/main/pressure"); + + return WeatherInfo.getBuilder() + .setCity(city) + .setShortDescription(shortDescription) + .setDescription(description) + .setTemperature(temperature.doubleValue()) + .setFeelsLikeTemperature(feelsLikeTemperature.doubleValue()) + .setWindSpeed(windSpeed.doubleValue()) + .setPressure(pressure.doubleValue()) + .setExpiryTime(LocalDateTime.now().plusMinutes(expireMinute)) + .build(); + } +} diff --git a/module09/src/main/java/ru/sberbank/edu/WeatherCache.java b/module09/src/main/java/ru/sberbank/edu/WeatherCache.java index 3f236f72..1bf3c3d1 100644 --- a/module09/src/main/java/ru/sberbank/edu/WeatherCache.java +++ b/module09/src/main/java/ru/sberbank/edu/WeatherCache.java @@ -1,40 +1,8 @@ package ru.sberbank.edu; -import java.util.HashMap; -import java.util.Map; +public interface WeatherCache { -/** - * Weather cache. - */ -public class WeatherCache { + WeatherInfo getWeatherInfo(String city); - private final Map cache = new HashMap<>(); - private WeatherProvider weatherProvider; - - /** - * Default constructor. - */ - public WeatherCache() { - } - - /** - * Get ACTUAL weather info for current city or null if current city not found. - * If cache doesn't contain weather info OR contains NOT ACTUAL info then we should download info - * If you download weather info then you should set expiry time now() plus 5 minutes. - * If you can't download weather info then remove weather info for current city from cache. - * - * @param city - city - * @return actual weather info - */ - public WeatherInfo getWeatherInfo(String city) { - // should be implemented - return null; - } - - /** - * Remove weather info from cache. - **/ - public void removeWeatherInfo(String city) { - // should be implemented - } -} \ No newline at end of file + void removeWeatherInfo(String city); +} diff --git a/module09/src/main/java/ru/sberbank/edu/WeatherCacheImpl.java b/module09/src/main/java/ru/sberbank/edu/WeatherCacheImpl.java new file mode 100644 index 00000000..b1185d9d --- /dev/null +++ b/module09/src/main/java/ru/sberbank/edu/WeatherCacheImpl.java @@ -0,0 +1,68 @@ +package ru.sberbank.edu; + +import org.springframework.beans.factory.annotation.Autowired; + +import java.time.LocalDateTime; +import java.util.HashMap; +import java.util.Map; + +/** + * Weather cache. + */ +public class WeatherCacheImpl implements WeatherCache{ + + private final Map cache = new HashMap<>(); + + private OpenWeatherProvider openWeatherProvider; + + @Autowired + public void setWeatherProvider(OpenWeatherProvider openWeatherProvider) { + this.openWeatherProvider = openWeatherProvider; + } + + /** + * Default constructor. + */ + public WeatherCacheImpl() { + } + + /** + * Get ACTUAL weather info for current city or null if current city not found. + * If cache doesn't contain weather info OR contains NOT ACTUAL info then we should download info + * If you download weather info then you should set expiry time now() plus 5 minutes. + * If you can't download weather info then remove weather info for current city from cache. + * + * @param city - city + * @return actual weather info + */ + public WeatherInfo getWeatherInfo(String city) { + boolean isExpired = false; + WeatherInfo info ; + + synchronized (cache){ + info = cache.get(city); + if (info != null) { + isExpired = info.expiryTime().isBefore(LocalDateTime.now()); + } + + if (info == null || isExpired){ + removeWeatherInfo(city); + try { + info = openWeatherProvider.get(city); + cache.put(city, info); + } catch (Exception ignored){} + } + } + + return info; + } + + /** + * Remove weather info from cache. + **/ + public void removeWeatherInfo(String city) { + synchronized (cache){ + cache.remove(city); + } + } +} \ No newline at end of file diff --git a/module09/src/main/java/ru/sberbank/edu/WeatherInfo.java b/module09/src/main/java/ru/sberbank/edu/WeatherInfo.java index 06d81ffc..c08583ab 100644 --- a/module09/src/main/java/ru/sberbank/edu/WeatherInfo.java +++ b/module09/src/main/java/ru/sberbank/edu/WeatherInfo.java @@ -6,7 +6,6 @@ * Weather info. */ public class WeatherInfo { - private String city; /** @@ -46,4 +45,100 @@ public class WeatherInfo { * If current time is above expiry time then current weather info is not actual! */ private LocalDateTime expiryTime; + + public String city() { + return city; + } + + public String shortDescription() { + return shortDescription; + } + + public String description() { + return description; + } + public double temperature() { + return temperature; + } + + public double feelsLikeTemperature() { + return feelsLikeTemperature; + } + + public double windSpeed() { + return windSpeed; + } + + public double pressure() { + return pressure; + } + + public LocalDateTime expiryTime() { + return expiryTime; + } + + @Override + public String toString() { + return "WeatherInfo{" + + "city='" + city + '\'' + + ", shortDescription='" + shortDescription + '\'' + + ", description='" + description + '\'' + + ", temperature=" + temperature + + ", feelsLikeTemperature=" + feelsLikeTemperature + + ", windSpeed=" + windSpeed + + ", pressure=" + pressure + + ", expiryTime=" + expiryTime + + '}'; + } + + public static WeatherInfoBuilder getBuilder(){ + return new WeatherInfo().new WeatherInfoBuilder(); + } + + public class WeatherInfoBuilder{ + private WeatherInfoBuilder(){} + + public WeatherInfo build(){ + return WeatherInfo.this; + } + + public WeatherInfoBuilder setCity(String city) { + WeatherInfo.this.city = city; + return this; + } + + public WeatherInfoBuilder setShortDescription(String shortDescription) { + WeatherInfo.this.shortDescription = shortDescription; + return this; + } + + public WeatherInfoBuilder setDescription(String description) { + WeatherInfo.this.description = description; + return this; + } + + public WeatherInfoBuilder setTemperature(double temperature) { + WeatherInfo.this.temperature = temperature; + return this; + } + + public WeatherInfoBuilder setFeelsLikeTemperature(double feelsLikeTemperature) { + WeatherInfo.this.feelsLikeTemperature = feelsLikeTemperature; + return this; + } + public WeatherInfoBuilder setPressure(double pressure) { + WeatherInfo.this.pressure = pressure; + return this; + } + + public WeatherInfoBuilder setExpiryTime(LocalDateTime expiryTime) { + WeatherInfo.this.expiryTime = expiryTime; + return this; + } + + public WeatherInfoBuilder setWindSpeed(double windSpeed) { + WeatherInfo.this.windSpeed = windSpeed; + return this; + } + } } diff --git a/module09/src/main/java/ru/sberbank/edu/WeatherProvider.java b/module09/src/main/java/ru/sberbank/edu/WeatherProvider.java index 02a2fb68..3771340e 100644 --- a/module09/src/main/java/ru/sberbank/edu/WeatherProvider.java +++ b/module09/src/main/java/ru/sberbank/edu/WeatherProvider.java @@ -1,22 +1,5 @@ package ru.sberbank.edu; -/** - * Weather provider - */ -public class WeatherProvider { - -// private RestTemplate restTemplate; -// private String appKey; - - /** - * Download ACTUAL weather info from internet. - * You should call GET http://api.openweathermap.org/data/2.5/weather?q={city name}&appid={API key} - * You should use Spring Rest Template for calling requests - * - * @param city - city - * @return weather info or null - */ - public WeatherInfo get(String city) { - return null; - } +public interface WeatherProvider { + WeatherInfo get(String city); } diff --git a/module09/src/main/java/ru/sberbank/edu/config/AppConfig.java b/module09/src/main/java/ru/sberbank/edu/config/AppConfig.java new file mode 100644 index 00000000..b43d4dd4 --- /dev/null +++ b/module09/src/main/java/ru/sberbank/edu/config/AppConfig.java @@ -0,0 +1,31 @@ +package ru.sberbank.edu.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.PropertySource; +import org.springframework.web.client.RestTemplate; +import ru.sberbank.edu.OpenWeatherProvider; +import ru.sberbank.edu.WeatherCache; +import ru.sberbank.edu.WeatherCacheImpl; +import ru.sberbank.edu.WeatherProvider; + +@Configuration +@PropertySource("classpath:app.properties") +public class AppConfig { + + @Bean + public RestTemplate getRestTemplate(){ + return new RestTemplate(); + } + + @Bean + public WeatherProvider getWeatherProvider(){ + return new OpenWeatherProvider(); + } + + @Bean + public WeatherCache getWeatherCache(){ + return new WeatherCacheImpl(); + } + +} diff --git a/module09/src/main/resources/app.properties b/module09/src/main/resources/app.properties new file mode 100644 index 00000000..7ef4cb18 --- /dev/null +++ b/module09/src/main/resources/app.properties @@ -0,0 +1,3 @@ +app.key=403cf62be23fdaba3e10e6cd77fc1631 +weather.url=http://api.openweathermap.org/data/2.5/weather?q={q}&APPID={appId} +expire.minute=5 \ No newline at end of file