From c702dc5567a9ba677642980f818087e59987ab19 Mon Sep 17 00:00:00 2001 From: mint52 Date: Thu, 14 Apr 2016 10:26:57 +0400 Subject: [PATCH 1/5] =?UTF-8?q?=D1=81=D0=BE=D0=B7=D0=B4=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=B2=D0=B5=D1=82=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 123.html | 1892 +++++++++++++++++ JavaRushHomeWork.iml | 1 + .../level09/lesson08/task01/Solution.java | 2 +- .../level09/lesson08/task02/Solution.java | 4 +- .../level09/lesson11/bonus03/Solution.java | 32 + .../level09/lesson11/home05/Solution.java | 15 +- .../level11/lesson11/bonus03/Solution.java | 7 +- .../level12/lesson12/bonus03/Solution.java | 30 +- .../level15/lesson09/task03/Solution.java | 2 +- .../level15/lesson09/task04/Solution.java | 2 +- .../level15/lesson12/bonus02/DrinkMaker.java | 14 + .../level15/lesson12/bonus02/LatteMaker.java | 18 + .../level15/lesson12/bonus02/TeaMaker.java | 18 + .../lesson13/home10/ReadFileThread.java | 23 + .../level17/lesson10/home08/BankAccount.java | 4 +- .../level17/lesson10/home08/Bankomat.java | 2 +- .../level22/lesson05/task02/Solution.java | 4 +- .../level22/lesson09/task03/Solution.java | 24 +- .../lesson05/home01/LoggingStateThread.java | 25 + .../level26/lesson10/home01/Consumer.java | 24 + .../level26/lesson10/home02/Producer.java | 30 + .../level26/lesson15/big01/CashMachine.java | 29 + .../level26/lesson15/big01/ConsoleHelper.java | 81 + .../lesson15/big01/CurrencyManipulator.java | 79 + .../big01/CurrencyManipulatorFactory.java | 27 + .../InterruptOperationException.java | 4 + .../Exception/NotEnoughMoneyException.java | 4 + .../level26/lesson15/big01/Operation.java | 30 + .../lesson15/big01/command/Command.java | 9 + .../big01/command/CommandExecutor.java | 27 + .../big01/command/DepositCommand.java | 22 + .../lesson15/big01/command/ExitCommand.java | 20 + .../lesson15/big01/command/InfoCommand.java | 34 + .../lesson15/big01/command/LoginCommand.java | 41 + .../big01/command/WithdrawCommand.java | 52 + .../level27/lesson15/big01/ConsoleHelper.java | 46 + .../lesson15/big01/DirectorTablet.java | 57 + .../level27/lesson15/big01/Restaurant.java | 63 + .../test/level27/lesson15/big01/Tablet.java | 68 + .../lesson15/big01/ad/Advertisement.java | 45 + .../big01/ad/AdvertisementManager.java | 151 ++ .../big01/ad/AdvertisementStorage.java | 39 + .../big01/ad/NoVideoAvailableException.java | 4 + .../ad/StatisticAdvertisementManager.java | 32 + .../level27/lesson15/big01/kitchen/Cook.java | 38 + .../level27/lesson15/big01/kitchen/Dish.java | 31 + .../level27/lesson15/big01/kitchen/Order.java | 51 + .../lesson15/big01/kitchen/Waitor.java | 15 + .../level28/lesson06/home01/MyThread.java | 53 + .../level28/lesson15/big01/model/Model.java | 31 + .../lesson15/big01/model/MoikrugStrategy.java | 60 + .../level28/lesson15/big01/view/HtmlView.java | 74 + .../level28/lesson15/big01/view/View.java | 14 + .../level29/lesson15/big01/human/Alive.java | 6 + .../level29/lesson15/big01/human/Soldier.java | 16 + .../lesson15/big01/client/BotClient.java | 79 + .../big01/client/ClientGuiController.java | 66 + .../lesson15/big01/client/ClientGuiModel.java | 32 + 58 files changed, 3657 insertions(+), 46 deletions(-) create mode 100644 123.html create mode 100644 src/com/javarush/test/level15/lesson12/bonus02/DrinkMaker.java create mode 100644 src/com/javarush/test/level15/lesson12/bonus02/LatteMaker.java create mode 100644 src/com/javarush/test/level15/lesson12/bonus02/TeaMaker.java create mode 100644 src/com/javarush/test/level16/lesson13/home10/ReadFileThread.java create mode 100644 src/com/javarush/test/level25/lesson05/home01/LoggingStateThread.java create mode 100644 src/com/javarush/test/level26/lesson10/home01/Consumer.java create mode 100644 src/com/javarush/test/level26/lesson10/home02/Producer.java create mode 100644 src/com/javarush/test/level26/lesson15/big01/CashMachine.java create mode 100644 src/com/javarush/test/level26/lesson15/big01/ConsoleHelper.java create mode 100644 src/com/javarush/test/level26/lesson15/big01/CurrencyManipulator.java create mode 100644 src/com/javarush/test/level26/lesson15/big01/CurrencyManipulatorFactory.java create mode 100644 src/com/javarush/test/level26/lesson15/big01/Exception/InterruptOperationException.java create mode 100644 src/com/javarush/test/level26/lesson15/big01/Exception/NotEnoughMoneyException.java create mode 100644 src/com/javarush/test/level26/lesson15/big01/Operation.java create mode 100644 src/com/javarush/test/level26/lesson15/big01/command/Command.java create mode 100644 src/com/javarush/test/level26/lesson15/big01/command/CommandExecutor.java create mode 100644 src/com/javarush/test/level26/lesson15/big01/command/DepositCommand.java create mode 100644 src/com/javarush/test/level26/lesson15/big01/command/ExitCommand.java create mode 100644 src/com/javarush/test/level26/lesson15/big01/command/InfoCommand.java create mode 100644 src/com/javarush/test/level26/lesson15/big01/command/LoginCommand.java create mode 100644 src/com/javarush/test/level26/lesson15/big01/command/WithdrawCommand.java create mode 100644 src/com/javarush/test/level27/lesson15/big01/ConsoleHelper.java create mode 100644 src/com/javarush/test/level27/lesson15/big01/DirectorTablet.java create mode 100644 src/com/javarush/test/level27/lesson15/big01/Restaurant.java create mode 100644 src/com/javarush/test/level27/lesson15/big01/Tablet.java create mode 100644 src/com/javarush/test/level27/lesson15/big01/ad/Advertisement.java create mode 100644 src/com/javarush/test/level27/lesson15/big01/ad/AdvertisementManager.java create mode 100644 src/com/javarush/test/level27/lesson15/big01/ad/AdvertisementStorage.java create mode 100644 src/com/javarush/test/level27/lesson15/big01/ad/NoVideoAvailableException.java create mode 100644 src/com/javarush/test/level27/lesson15/big01/ad/StatisticAdvertisementManager.java create mode 100644 src/com/javarush/test/level27/lesson15/big01/kitchen/Cook.java create mode 100644 src/com/javarush/test/level27/lesson15/big01/kitchen/Dish.java create mode 100644 src/com/javarush/test/level27/lesson15/big01/kitchen/Order.java create mode 100644 src/com/javarush/test/level27/lesson15/big01/kitchen/Waitor.java create mode 100644 src/com/javarush/test/level28/lesson06/home01/MyThread.java create mode 100644 src/com/javarush/test/level28/lesson15/big01/model/Model.java create mode 100644 src/com/javarush/test/level28/lesson15/big01/model/MoikrugStrategy.java create mode 100644 src/com/javarush/test/level28/lesson15/big01/view/HtmlView.java create mode 100644 src/com/javarush/test/level28/lesson15/big01/view/View.java create mode 100644 src/com/javarush/test/level29/lesson15/big01/human/Alive.java create mode 100644 src/com/javarush/test/level29/lesson15/big01/human/Soldier.java create mode 100644 src/com/javarush/test/level30/lesson15/big01/client/BotClient.java create mode 100644 src/com/javarush/test/level30/lesson15/big01/client/ClientGuiController.java create mode 100644 src/com/javarush/test/level30/lesson15/big01/client/ClientGuiModel.java diff --git a/123.html b/123.html new file mode 100644 index 0000000..f284e84 --- /dev/null +++ b/123.html @@ -0,0 +1,1892 @@ + + + + + + + + Вакансии — Мой круг + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+ +
+
+
+
+
+
+ С 8 июня 2015 года новым владельцем сервиса «Мой круг» стала компания «ТМ». + Узнать подробности +
+
+ +
+
+
+
+ + +
+
+
+ +
+ Найдено 129 вакансий +
+
+
+
+ +
+
+
+
+ +
+
+ Яндекс + 22 марта 2016 +
+ +
+ Москва + • Полный рабочий день +
+
+ Java +
+
+
+
+
+
+
+ +
+
+ Fasten inc + 24 марта 2016 +
+ +
+ Краснодар + • Полный рабочий день +
+
+ Java +
+
+
+
+
+
+
+ +
+
+ GeekBrains + 13 марта 2016 +
+ +
+ Москва + • Неполный рабочий день • Можно удаленно +
+
+ Java +
+
+
+
+ От + 15 000 + руб. +
+
+
+
+
+
+ +
+
+ Одноклассники + 11 марта 2016 +
+ +
+ Санкт-Петербург + • Полный рабочий день +
+
+ Java +
+
+
+
+
+
+
+ +
+
+ Competentum + 19 марта 2016 +
+ +
+ Москва + • Полный рабочий день +
+ +
+
+
+
+ +
+
+ +
+
+ BrandMaker + 11 марта 2016 +
+ +
+ Новосибирск + • Полный рабочий день +
+ +
+
+
+ От + 120 000 + руб. +
+
+
+
+
+
+ +
+
+ Top Expats + 09 марта 2016 +
+ +
+ Москва + • Полный рабочий день +
+
+ Java + Java ee +
+
+
+
+ От + 140 000 до + 270 000 + руб. +
+
+
+
+
+
+ +
+
+ PhinikStudio + 16 марта 2016 +
+ +
+ Полный рабочий день • Можно удаленно +
+ +
+
+
+ До + 100 000 + руб. +
+
+
+
+
+
+ +
+
+ Triptop Technologies LTD + 29 марта 2016 +
+ +
+ Санкт-Петербург + • Полный рабочий день +
+ +
+
+
+
+
+
+ +
+
+ РЕЛЭКС + 24 марта 2016 +
+ +
+ Воронеж + • Полный рабочий день +
+ +
+
+
+
+
+
+ +
+
+ s2b + 10 марта 2016 +
+ +
+ Турку + • Полный рабочий день +
+
+ Java + Gwt + Vaadin + CSS +
+
+
+
+
+
+
+ +
+
+ TradingView + 10 марта 2016 +
+ +
+ Ростов-на-Дону + • Полный рабочий день +
+
+ Java + C++ + C# +
+
+
+
+
+
+
+ +
+
+ Competentum + 21 марта 2016 +
+ +
+ Москва + • Полный рабочий день +
+ +
+
+
+
+
+
+ +
+
+ Эскейп + 17 марта 2016 +
+ +
+ Москва + • Полный рабочий день +
+ +
+
+
+ От + 50 000 + руб. +
+
+
+
+
+
+ +
+
+ SEMrush + 11 марта 2016 +
+ +
+ Санкт-Петербург + • Полный рабочий день +
+ +
+
+
+
+
+
+ +
+
+ HeadHunter + 20 марта 2016 +
+ +
+ Москва + • Полный рабочий день +
+ +
+
+
+ От + 130 000 до + 170 000 + руб. +
+
+
+
+
+
+ +
+
+ TNS + 15 марта 2016 +
+ +
+ Москва + • Полный рабочий день +
+ +
+
+
+
+
+
+ +
+
+ ООО ЮНИТ-Оргтехника + 25 марта 2016 +
+ +
+ Москва + • Полный рабочий день +
+ +
+
+
+ От + 50 000 до + 200 000 + руб. +
+
+
+
+
+
+ +
+
+ FlexSoft + 30 марта 2016 +
+ +
+ Томск + • Полный рабочий день +
+ +
+
+
+ От + 60 000 + руб. +
+
+
+
+
+
+ +
+
+ Data East + 31 марта 2016 +
+ +
+ Новосибирск + • Полный рабочий день +
+
+ Java + SQL + ООП + Rest +
+
+
+
+ От + 70 000 + руб. +
+
+
+
+
+
+ +
+
+ Relocateme.eu + 28 марта 2016 +
+ +
+ Берлин + • Полный рабочий день +
+ +
+
+
+ От + 50 000 до + 60 000 + eur. +
+
+
+
+
+
+ +
+
+ Crocodie + 23 марта 2016 +
+ +
+ Москва + • Полный рабочий день • Можно удаленно +
+ +
+
+
+ От + 100 000 + руб. +
+
+
+
+
+
+ +
+
+ Gehtsoft + 18 марта 2016 +
+ +
+ Омск + • Полный рабочий день +
+
+ HTML + Ajax + XML + Javascript + SQL + Java + Pl/sql +
+
+
+
+ От + 50 000 до + 120 000 + руб. +
+
+
+
+ +
+
+
+
+
+ +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/JavaRushHomeWork.iml b/JavaRushHomeWork.iml index c33f0c1..90233c9 100644 --- a/JavaRushHomeWork.iml +++ b/JavaRushHomeWork.iml @@ -8,5 +8,6 @@ + \ No newline at end of file diff --git a/src/com/javarush/test/level09/lesson08/task01/Solution.java b/src/com/javarush/test/level09/lesson08/task01/Solution.java index 8ca533f..3f4af4b 100644 --- a/src/com/javarush/test/level09/lesson08/task01/Solution.java +++ b/src/com/javarush/test/level09/lesson08/task01/Solution.java @@ -4,7 +4,7 @@ import java.net.URISyntaxException; /* Исключения -Есть метод, который выбрасывает два исключения, унаследованные от Exception, и два унаследованных от RuntimeException: +Есть метод, который выбрасывает два исключения, унаследованные от exception, и два унаследованных от RuntimeException: NullPointerException, ArithmeticException, FileNotFoundException, URISyntaxException. Нужно перехватить NullPointerException и FileNotFoundException, но не перехватывать diff --git a/src/com/javarush/test/level09/lesson08/task02/Solution.java b/src/com/javarush/test/level09/lesson08/task02/Solution.java index 3de915e..7756208 100644 --- a/src/com/javarush/test/level09/lesson08/task02/Solution.java +++ b/src/com/javarush/test/level09/lesson08/task02/Solution.java @@ -1,8 +1,8 @@ package com.javarush.test.level09.lesson08.task02; /* Перехватывание исключений -1. Есть три исключения последовательно унаследованные от Exception: -2. class Exception1 extends Exception +1. Есть три исключения последовательно унаследованные от exception: +2. class Exception1 extends exception 3. class Exception2 extends Exception1 4. class Exception3 extends Exception2 5. Есть метод, который описан так: diff --git a/src/com/javarush/test/level09/lesson11/bonus03/Solution.java b/src/com/javarush/test/level09/lesson11/bonus03/Solution.java index 0695d62..f25ca63 100644 --- a/src/com/javarush/test/level09/lesson11/bonus03/Solution.java +++ b/src/com/javarush/test/level09/lesson11/bonus03/Solution.java @@ -50,6 +50,38 @@ public static void main(String[] args) throws Exception public static void sort(String[] array) { + + for (int i = 0; i getMinimumAndMaximum(int[] array) return new Pair(null, null); } + Arrays.sort(array); + int min = array[0]; + int max = array[array.length-1]; //Напишите тут ваше решение - return new Pair(0, 0); + return new Pair(min, max); } diff --git a/src/com/javarush/test/level12/lesson12/bonus03/Solution.java b/src/com/javarush/test/level12/lesson12/bonus03/Solution.java index e6b2d8f..a71cdaf 100644 --- a/src/com/javarush/test/level12/lesson12/bonus03/Solution.java +++ b/src/com/javarush/test/level12/lesson12/bonus03/Solution.java @@ -4,10 +4,8 @@ Написать метод, который возвращает минимальное число в массиве и его позицию (индекс). */ -public class Solution -{ - public static void main(String[] args) throws Exception - { +public class Solution { + public static void main(String[] args) throws Exception { int[] data = new int[]{1, 2, 3, 5, -2, -8, 0, 77, 5, 5}; Pair result = getMinimumAndIndex(data); @@ -16,26 +14,32 @@ public static void main(String[] args) throws Exception System.out.println("Index of minimum element is " + result.y); } - public static Pair getMinimumAndIndex(int[] array) - { - if (array == null || array.length == 0) - { + public static Pair getMinimumAndIndex(int[] array) { + if (array == null || array.length == 0) { return new Pair(null, null); } + int min = array[0]; + int index = 0; + for (int i = 0; i < array.length - 1; i++) { + + if (min > array[i + 1]) { + min = array[i + 1]; + index = i + 1; + } + } + //Напишите тут ваше решение - return new Pair(0, 0); + return new Pair(min, index); } - public static class Pair - { + public static class Pair { public X x; public Y y; - public Pair(X x, Y y) - { + public Pair(X x, Y y) { this.x = x; this.y = y; } diff --git a/src/com/javarush/test/level15/lesson09/task03/Solution.java b/src/com/javarush/test/level15/lesson09/task03/Solution.java index 7ca4ea6..f1810bd 100644 --- a/src/com/javarush/test/level15/lesson09/task03/Solution.java +++ b/src/com/javarush/test/level15/lesson09/task03/Solution.java @@ -7,7 +7,7 @@ DoubleVar с типом Double booleanVar с типом boolean ObjectVar с типом Object -ExceptionVar с типом Exception +ExceptionVar с типом exception StringVar с типом String 2. В методе main вывести их значения в заданном порядке. */ diff --git a/src/com/javarush/test/level15/lesson09/task04/Solution.java b/src/com/javarush/test/level15/lesson09/task04/Solution.java index 3e7565d..d9e0cad 100644 --- a/src/com/javarush/test/level15/lesson09/task04/Solution.java +++ b/src/com/javarush/test/level15/lesson09/task04/Solution.java @@ -4,7 +4,7 @@ В статическом блоке выбросьте RuntimeException В результате класс не загрузится, и вы увидите сообщение об ошибке вместо значения переменной B -Exception in thread "main" java.lang.ExceptionInInitializerError +exception in thread "main" java.lang.ExceptionInInitializerError at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:186) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:113) diff --git a/src/com/javarush/test/level15/lesson12/bonus02/DrinkMaker.java b/src/com/javarush/test/level15/lesson12/bonus02/DrinkMaker.java new file mode 100644 index 0000000..901a7df --- /dev/null +++ b/src/com/javarush/test/level15/lesson12/bonus02/DrinkMaker.java @@ -0,0 +1,14 @@ +package com.javarush.test.level15.lesson12.bonus02; + +public abstract class DrinkMaker { + + abstract void getRightCup(); // - выбрать подходящую чашку + abstract void putIngredient(); //- положить ингредиенты + abstract void pour(); //- залить жидкостью + + public void makeDrink(){ + getRightCup(); + putIngredient(); + pour(); + } +} diff --git a/src/com/javarush/test/level15/lesson12/bonus02/LatteMaker.java b/src/com/javarush/test/level15/lesson12/bonus02/LatteMaker.java new file mode 100644 index 0000000..643034f --- /dev/null +++ b/src/com/javarush/test/level15/lesson12/bonus02/LatteMaker.java @@ -0,0 +1,18 @@ +package com.javarush.test.level15.lesson12.bonus02; + +public class LatteMaker extends DrinkMaker { + @Override + void getRightCup() { + System.out.println("Берем чашку для латте"); + } + + @Override + void putIngredient() { + System.out.println("Делаем кофе"); + } + + @Override + void pour() { + System.out.println("Заливаем молоком с пенкой"); + } +} diff --git a/src/com/javarush/test/level15/lesson12/bonus02/TeaMaker.java b/src/com/javarush/test/level15/lesson12/bonus02/TeaMaker.java new file mode 100644 index 0000000..471801d --- /dev/null +++ b/src/com/javarush/test/level15/lesson12/bonus02/TeaMaker.java @@ -0,0 +1,18 @@ +package com.javarush.test.level15.lesson12.bonus02; + +public class TeaMaker extends DrinkMaker { + @Override + void getRightCup() { + System.out.println("Берем чашку для чая"); + } + + @Override + void putIngredient() { + System.out.println("Насыпаем чай"); + } + + @Override + void pour() { + System.out.println("Заливаем водой"); + } +} diff --git a/src/com/javarush/test/level16/lesson13/home10/ReadFileThread.java b/src/com/javarush/test/level16/lesson13/home10/ReadFileThread.java new file mode 100644 index 0000000..50dce13 --- /dev/null +++ b/src/com/javarush/test/level16/lesson13/home10/ReadFileThread.java @@ -0,0 +1,23 @@ +package com.javarush.test.level16.lesson13.home10; + +public class ReadFileThread implements Solution.ReadFileInterface { + @Override + public void setFileName(String fullFileName) { + + } + + @Override + public String getFileContent() { + return null; + } + + @Override + public void join() throws InterruptedException { + + } + + @Override + public void start() { + + } +} diff --git a/src/com/javarush/test/level17/lesson10/home08/BankAccount.java b/src/com/javarush/test/level17/lesson10/home08/BankAccount.java index 1f8e925..b148f4a 100644 --- a/src/com/javarush/test/level17/lesson10/home08/BankAccount.java +++ b/src/com/javarush/test/level17/lesson10/home08/BankAccount.java @@ -3,7 +3,7 @@ import java.math.BigDecimal; public class BankAccount { - private BigDecimal balance; + private BigDecimal balance; private String owner; public BankAccount(String owner) { @@ -15,7 +15,7 @@ public BankAccount(BigDecimal balance, String owner) { this.owner = owner; } - public void deposit(BigDecimal money) { + public synchronized void deposit(BigDecimal money) { BigDecimal newBalance = balance.add(money); System.out.println("Добавляем " + money + ", на счету " + newBalance); balance = newBalance; diff --git a/src/com/javarush/test/level17/lesson10/home08/Bankomat.java b/src/com/javarush/test/level17/lesson10/home08/Bankomat.java index 920016a..dfd7db8 100644 --- a/src/com/javarush/test/level17/lesson10/home08/Bankomat.java +++ b/src/com/javarush/test/level17/lesson10/home08/Bankomat.java @@ -16,7 +16,7 @@ public class Bankomat { - static BankAccount account = new BankAccount("Amigo"); + static BankAccount account = new BankAccount("Amigo"); public static volatile boolean isStopped; diff --git a/src/com/javarush/test/level22/lesson05/task02/Solution.java b/src/com/javarush/test/level22/lesson05/task02/Solution.java index 2119e25..63b1936 100644 --- a/src/com/javarush/test/level22/lesson05/task02/Solution.java +++ b/src/com/javarush/test/level22/lesson05/task02/Solution.java @@ -16,7 +16,7 @@ public static class TooShortStringException extends Exception { public static void main(String[] args) throws TooShortStringException { System.out.println(getPartOfString("tab0\ttab\ttab1\t")); //tab System.out.println(getPartOfString("\t\t")); // - System.out.println(getPartOfString("123\t123")); //Exception - System.out.println(getPartOfString(null)); //Exception + System.out.println(getPartOfString("123\t123")); //exception + System.out.println(getPartOfString(null)); //exception } } diff --git a/src/com/javarush/test/level22/lesson09/task03/Solution.java b/src/com/javarush/test/level22/lesson09/task03/Solution.java index 3f6c99c..d51ccd4 100644 --- a/src/com/javarush/test/level22/lesson09/task03/Solution.java +++ b/src/com/javarush/test/level22/lesson09/task03/Solution.java @@ -1,10 +1,5 @@ package com.javarush.test.level22.lesson09.task03; -import java.io.BufferedReader; -import java.io.FileReader; -import java.io.IOException; -import java.io.InputStreamReader; - /* Составить цепочку слов В методе main считайте с консоли имя файла, который содержит слова, разделенные пробелом. В методе getLine используя StringBuilder расставить все слова в таком порядке, @@ -21,24 +16,13 @@ Амстердам Мельбурн Нью-Йорк Киев Вена */ public class Solution { - public static void main(String[] args) throws IOException { + public static void main(String[] args) { //... - BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); - BufferedReader fileReader = new BufferedReader(new FileReader("d:/a.txt"));//reader.readLine())); - - StringBuilder result = getLine(fileReader.readLine()); + StringBuilder result = getLine(); System.out.println(result.toString()); } - public static StringBuilder getLine(String words) { - - StringBuilder buffer = new StringBuilder(words); - String[] s = words.split(" "); - - - - - - return buffer; + public static StringBuilder getLine(String... words) { + return null; } } diff --git a/src/com/javarush/test/level25/lesson05/home01/LoggingStateThread.java b/src/com/javarush/test/level25/lesson05/home01/LoggingStateThread.java new file mode 100644 index 0000000..3f67605 --- /dev/null +++ b/src/com/javarush/test/level25/lesson05/home01/LoggingStateThread.java @@ -0,0 +1,25 @@ +package com.javarush.test.level25.lesson05.home01; + +public class LoggingStateThread extends Thread { + private Thread target; + private State state; + + public LoggingStateThread(Thread target) { + this.target = target; + setDaemon(true); + } + + @Override + public void run() { + State currentState = target.getState(); + System.out.println(currentState); + + while (state != State.TERMINATED) { + currentState = target.getState(); + if (currentState != state) { + state = currentState; + System.out.println(state); + } + } + } +} \ No newline at end of file diff --git a/src/com/javarush/test/level26/lesson10/home01/Consumer.java b/src/com/javarush/test/level26/lesson10/home01/Consumer.java new file mode 100644 index 0000000..7d40e8a --- /dev/null +++ b/src/com/javarush/test/level26/lesson10/home01/Consumer.java @@ -0,0 +1,24 @@ +package com.javarush.test.level26.lesson10.home01; + +import java.util.concurrent.BlockingQueue; + +public class Consumer implements Runnable { + protected BlockingQueue queue; + + public Consumer(BlockingQueue queue) { + this.queue = queue; + } + + public void run() { + + try { + + while (true) { + + System.out.println(queue.take().toString()); + } + } catch (InterruptedException e) { + + } + } +} diff --git a/src/com/javarush/test/level26/lesson10/home02/Producer.java b/src/com/javarush/test/level26/lesson10/home02/Producer.java new file mode 100644 index 0000000..7a5275b --- /dev/null +++ b/src/com/javarush/test/level26/lesson10/home02/Producer.java @@ -0,0 +1,30 @@ +package com.javarush.test.level26.lesson10.home02; + +import java.util.concurrent.ConcurrentHashMap; + +public class Producer implements Runnable { + protected ConcurrentHashMap map; + + public Producer(ConcurrentHashMap map) { + this.map = map; + } + + @Override + public void run() { + int i =0; + try { + while (true) + { + + System.out.println(String.format("Some text for %d", ++i)); + Thread.sleep(500); + } + } catch (InterruptedException e) { + System.out.println(String.format("[%s] thread was terminated", Thread.currentThread().getName())); + } + } + + + } + + diff --git a/src/com/javarush/test/level26/lesson15/big01/CashMachine.java b/src/com/javarush/test/level26/lesson15/big01/CashMachine.java new file mode 100644 index 0000000..376abac --- /dev/null +++ b/src/com/javarush/test/level26/lesson15/big01/CashMachine.java @@ -0,0 +1,29 @@ +package com.javarush.test.level26.lesson15.big01; + +import com.javarush.test.level26.lesson15.big01.command.CommandExecutor; +import com.javarush.test.level26.lesson15.big01.exception.InterruptOperationException; + +import java.util.Locale; + +public class CashMachine { + + public static final String RESOURCE_PATH = "com.javarush.test.level26.lesson15.big01.resources."; + + public static void main(String[] args) { + Locale.setDefault(Locale.ENGLISH); + try { + Operation operation = null; + CommandExecutor.execute(Operation.LOGIN); + + do { + operation = ConsoleHelper.askOperation(); + CommandExecutor.execute(operation); + } + while (operation != Operation.EXIT); + }catch (InterruptOperationException e){ + ConsoleHelper.writeMessage("Пока"); + } + + + } +} diff --git a/src/com/javarush/test/level26/lesson15/big01/ConsoleHelper.java b/src/com/javarush/test/level26/lesson15/big01/ConsoleHelper.java new file mode 100644 index 0000000..bd41f8e --- /dev/null +++ b/src/com/javarush/test/level26/lesson15/big01/ConsoleHelper.java @@ -0,0 +1,81 @@ +package com.javarush.test.level26.lesson15.big01; + +import com.javarush.test.level26.lesson15.big01.exception.InterruptOperationException; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.ResourceBundle; + +public class ConsoleHelper { + + private static ResourceBundle res = ResourceBundle.getBundle("com.javarush.test.level26.lesson15.big01.resources.common_en"); + + private static BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); + + + public static void writeMessage(String message){ + System.out.println(message); + } + + public static String readString() throws InterruptOperationException { + String s = ""; + try { + s = reader.readLine(); + if (s.toUpperCase().equals("EXIT")) + throw new InterruptOperationException(); + + } catch (IOException e) { + + } + return s; + } + + public static String askCurrencyCode() throws InterruptOperationException { + writeMessage(res.getString("choose.currency.code")); + String s = readString(); + while (s.length() != 3) { + writeMessage(res.getString("invalid.data")); + s = readString(); + } + + s = s.toUpperCase(); + return s; + } + + public static String[] getValidTwoDigits(String currencyCode) throws InterruptOperationException { + writeMessage(String.format(res.getString("choose.denomination.and.count.format"),"USD")); + while (true){ + String[] temp = ConsoleHelper.readString().trim().split(" "); + try{ + if (temp.length == 2 && Integer.parseInt(temp[0]) > 0 && Integer.parseInt(temp[1]) > 0) { + return temp; + } + } + catch (Exception e){ + } + writeMessage(res.getString("invalid.data")); + } + + } + + public static Operation askOperation() throws InterruptOperationException { + + + Operation operation = null; + while(operation == null) + { + writeMessage(res.getString("choose.operation")); + try + { + operation = Operation.getAllowableOperationByOrdinal(Integer.parseInt(readString())); + } + catch (IllegalArgumentException e) + { + operation = null; + + } + } + return operation; + } +} diff --git a/src/com/javarush/test/level26/lesson15/big01/CurrencyManipulator.java b/src/com/javarush/test/level26/lesson15/big01/CurrencyManipulator.java new file mode 100644 index 0000000..49f51cb --- /dev/null +++ b/src/com/javarush/test/level26/lesson15/big01/CurrencyManipulator.java @@ -0,0 +1,79 @@ +package com.javarush.test.level26.lesson15.big01; + +import com.javarush.test.level26.lesson15.big01.exception.NotEnoughMoneyException; + +import java.util.*; + +public class CurrencyManipulator { + + private String currencyCode; + private Map denominations; + + public CurrencyManipulator(String currencyCode) { + this.currencyCode = currencyCode; + this.denominations = new HashMap(); + } + + public String getCurrencyCode() { + return currencyCode; + } + + public void addAmount(int denomination, int count) { + if (denominations.containsKey(denomination)) { + denominations.put(denomination, denominations.get(denomination) + count); + } else { + denominations.put(denomination, count); + } + } + + public int getTotalAmount() { + int summ = 0; + for (Map.Entry map : denominations.entrySet()) { + summ += map.getKey() * map.getValue(); + } + return summ; + + } + + public boolean hasMoney() { + return getTotalAmount() > 0; + } + + public boolean isAmountAvailable(int expectedAmount) { + return getTotalAmount() >= expectedAmount; + } + + public Map withdrawAmount(int expectedAmount) throws NotEnoughMoneyException { + + Map temp = new TreeMap<>(Collections.reverseOrder()); + Map original = new HashMap<>(denominations); + ArrayList list = new ArrayList<>(denominations.keySet()); + Collections.sort(list, Collections.reverseOrder()); + + for (int i = 0; i < list.size(); i++) { + if (expectedAmount > 0) { + int nominal = list.get(i); + if (expectedAmount >= nominal) { + int count = expectedAmount / nominal; + if (denominations.get(nominal) > count) { + temp.put(nominal, count); + denominations.put(nominal, denominations.get(nominal) - count); + expectedAmount = expectedAmount - count * nominal; + } else { + temp.put(nominal, denominations.get(nominal)); + expectedAmount = expectedAmount - denominations.get(nominal) * nominal; + denominations.remove(nominal); + } + } + } else break; + } + if (expectedAmount != 0) { + denominations = original; + throw new NotEnoughMoneyException(); + } + + + return temp; + } + +} diff --git a/src/com/javarush/test/level26/lesson15/big01/CurrencyManipulatorFactory.java b/src/com/javarush/test/level26/lesson15/big01/CurrencyManipulatorFactory.java new file mode 100644 index 0000000..4bf2969 --- /dev/null +++ b/src/com/javarush/test/level26/lesson15/big01/CurrencyManipulatorFactory.java @@ -0,0 +1,27 @@ +package com.javarush.test.level26.lesson15.big01; + +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; + +public final class CurrencyManipulatorFactory { + + public static Map manipulators = new HashMap(); + + private CurrencyManipulatorFactory() { + } + + + + public static CurrencyManipulator getManipulatorByCurrencyCode(String currencyCode){ + if (manipulators.get(currencyCode) == null) { + manipulators.put(currencyCode, new CurrencyManipulator(currencyCode)); + } + return manipulators.get(currencyCode); + + } + + public static Collection getAllCurrencyManipulators(){ + return manipulators.values(); + } +} diff --git a/src/com/javarush/test/level26/lesson15/big01/Exception/InterruptOperationException.java b/src/com/javarush/test/level26/lesson15/big01/Exception/InterruptOperationException.java new file mode 100644 index 0000000..1a6e770 --- /dev/null +++ b/src/com/javarush/test/level26/lesson15/big01/Exception/InterruptOperationException.java @@ -0,0 +1,4 @@ +package com.javarush.test.level26.lesson15.big01.exception; + +public class InterruptOperationException extends Exception { +} diff --git a/src/com/javarush/test/level26/lesson15/big01/Exception/NotEnoughMoneyException.java b/src/com/javarush/test/level26/lesson15/big01/Exception/NotEnoughMoneyException.java new file mode 100644 index 0000000..e919bb3 --- /dev/null +++ b/src/com/javarush/test/level26/lesson15/big01/Exception/NotEnoughMoneyException.java @@ -0,0 +1,4 @@ +package com.javarush.test.level26.lesson15.big01.exception; + +public class NotEnoughMoneyException extends Exception { +} diff --git a/src/com/javarush/test/level26/lesson15/big01/Operation.java b/src/com/javarush/test/level26/lesson15/big01/Operation.java new file mode 100644 index 0000000..810c6ae --- /dev/null +++ b/src/com/javarush/test/level26/lesson15/big01/Operation.java @@ -0,0 +1,30 @@ +package com.javarush.test.level26.lesson15.big01; + + +public enum Operation { + LOGIN, + INFO, + DEPOSIT, + WITHDRAW, + EXIT; + + public static Operation getAllowableOperationByOrdinal(Integer i){ + + + switch (i){ + case 1: + return Operation.INFO; + case 2: + return Operation.DEPOSIT; + case 3: + return Operation.WITHDRAW; + case 4: + return Operation.EXIT; + case 0: + throw new IllegalArgumentException(); + default: + throw new IllegalArgumentException(); + } + + } +} diff --git a/src/com/javarush/test/level26/lesson15/big01/command/Command.java b/src/com/javarush/test/level26/lesson15/big01/command/Command.java new file mode 100644 index 0000000..aca229e --- /dev/null +++ b/src/com/javarush/test/level26/lesson15/big01/command/Command.java @@ -0,0 +1,9 @@ +package com.javarush.test.level26.lesson15.big01.command; + + +import com.javarush.test.level26.lesson15.big01.exception.InterruptOperationException; + +interface Command { + + void execute() throws InterruptOperationException; +} diff --git a/src/com/javarush/test/level26/lesson15/big01/command/CommandExecutor.java b/src/com/javarush/test/level26/lesson15/big01/command/CommandExecutor.java new file mode 100644 index 0000000..5b8ecef --- /dev/null +++ b/src/com/javarush/test/level26/lesson15/big01/command/CommandExecutor.java @@ -0,0 +1,27 @@ +package com.javarush.test.level26.lesson15.big01.command; + +import com.javarush.test.level26.lesson15.big01.Operation; +import com.javarush.test.level26.lesson15.big01.exception.InterruptOperationException; + +import java.util.HashMap; +import java.util.Map; + +public final class CommandExecutor { + + private CommandExecutor() { + } + + private static Map map = new HashMap<>(); + + static { + map.put(Operation.INFO, new InfoCommand()); + map.put(Operation.DEPOSIT, new DepositCommand()); + map.put(Operation.WITHDRAW, new WithdrawCommand()); + map.put(Operation.EXIT, new ExitCommand()); + map.put(Operation.LOGIN, new LoginCommand()); + } + + public static final void execute(Operation operation) throws InterruptOperationException { + map.get(operation).execute(); + } +} diff --git a/src/com/javarush/test/level26/lesson15/big01/command/DepositCommand.java b/src/com/javarush/test/level26/lesson15/big01/command/DepositCommand.java new file mode 100644 index 0000000..8b20136 --- /dev/null +++ b/src/com/javarush/test/level26/lesson15/big01/command/DepositCommand.java @@ -0,0 +1,22 @@ +package com.javarush.test.level26.lesson15.big01.command; + +import com.javarush.test.level26.lesson15.big01.ConsoleHelper; +import com.javarush.test.level26.lesson15.big01.CurrencyManipulator; +import com.javarush.test.level26.lesson15.big01.CurrencyManipulatorFactory; +import com.javarush.test.level26.lesson15.big01.exception.InterruptOperationException; + +import java.util.ResourceBundle; + +class DepositCommand implements Command { + + private ResourceBundle res = ResourceBundle.getBundle("com.javarush.test.level26.lesson15.big01.resources.deposit_en");; + @Override + public void execute() throws InterruptOperationException { + ConsoleHelper.writeMessage(res.getString("before")); + String code = ConsoleHelper.askCurrencyCode(); + String[] nam = ConsoleHelper.getValidTwoDigits(code); + CurrencyManipulator cur = CurrencyManipulatorFactory.getManipulatorByCurrencyCode(code); + cur.addAmount(Integer.parseInt(nam[0]), Integer.parseInt(nam[1])); + + } +} diff --git a/src/com/javarush/test/level26/lesson15/big01/command/ExitCommand.java b/src/com/javarush/test/level26/lesson15/big01/command/ExitCommand.java new file mode 100644 index 0000000..a560ddb --- /dev/null +++ b/src/com/javarush/test/level26/lesson15/big01/command/ExitCommand.java @@ -0,0 +1,20 @@ +package com.javarush.test.level26.lesson15.big01.command; + +import com.javarush.test.level26.lesson15.big01.ConsoleHelper; +import com.javarush.test.level26.lesson15.big01.exception.InterruptOperationException; + +import java.util.ResourceBundle; + +class ExitCommand implements Command { + + private ResourceBundle res = ResourceBundle.getBundle("com.javarush.test.level26.lesson15.big01.resources.exit_en"); + + @Override + public void execute() throws InterruptOperationException { + ConsoleHelper.writeMessage(res.getString("exit.question.y.n")); + if (ConsoleHelper.readString().toLowerCase().equals(res.getString("yes")) ) + ConsoleHelper.writeMessage(res.getString("thank.message")); + + + } +} diff --git a/src/com/javarush/test/level26/lesson15/big01/command/InfoCommand.java b/src/com/javarush/test/level26/lesson15/big01/command/InfoCommand.java new file mode 100644 index 0000000..61c9b09 --- /dev/null +++ b/src/com/javarush/test/level26/lesson15/big01/command/InfoCommand.java @@ -0,0 +1,34 @@ +package com.javarush.test.level26.lesson15.big01.command; + +import com.javarush.test.level26.lesson15.big01.ConsoleHelper; +import com.javarush.test.level26.lesson15.big01.CurrencyManipulator; +import com.javarush.test.level26.lesson15.big01.CurrencyManipulatorFactory; + +import java.util.ResourceBundle; + +class InfoCommand implements Command { + + private ResourceBundle res = ResourceBundle.getBundle("com.javarush.test.level26.lesson15.big01.resources.info_en"); + + @Override + public void execute() { + + ConsoleHelper.writeMessage(res.getString("before")); + if(CurrencyManipulatorFactory.getAllCurrencyManipulators().size()==0){ + ConsoleHelper.writeMessage(res.getString("no.money")); + }else + { + boolean isMoney = false; + + for (CurrencyManipulator hand: CurrencyManipulatorFactory.getAllCurrencyManipulators()) { + if (hand.hasMoney()){ + ConsoleHelper.writeMessage(hand.getCurrencyCode() + " - " + hand.getTotalAmount()); + isMoney = true; + } + } + + if (!isMoney) + ConsoleHelper.writeMessage(res.getString("no.money")); + } + } +} diff --git a/src/com/javarush/test/level26/lesson15/big01/command/LoginCommand.java b/src/com/javarush/test/level26/lesson15/big01/command/LoginCommand.java new file mode 100644 index 0000000..4874472 --- /dev/null +++ b/src/com/javarush/test/level26/lesson15/big01/command/LoginCommand.java @@ -0,0 +1,41 @@ +package com.javarush.test.level26.lesson15.big01.command; + +import com.javarush.test.level26.lesson15.big01.ConsoleHelper; +import com.javarush.test.level26.lesson15.big01.exception.InterruptOperationException; + +import java.util.ResourceBundle; + +public class LoginCommand implements Command { + + private ResourceBundle validCreditCards = ResourceBundle.getBundle("com.javarush.test.level26.lesson15.big01.resources.verifiedCards"); + private ResourceBundle res = ResourceBundle.getBundle("com.javarush.test.level26.lesson15.big01.resources.login_en"); + + + @Override + public void execute() throws InterruptOperationException { + + + while (true) { + ConsoleHelper.writeMessage(res.getString("before")); + ConsoleHelper.writeMessage(res.getString("specify.data")); + String card = ConsoleHelper.readString().trim(); + + String pin = ConsoleHelper.readString(); + if ((card.length() != 12)||(pin.length() != 4)) { + ConsoleHelper.writeMessage(String.format(res.getString("not.verified.format"),card)); + continue; + } + + if ((validCreditCards.containsKey(card)) && validCreditCards.getString(card).equals(pin)) { + ConsoleHelper.writeMessage(String.format(res.getString("success.format"),card)); + break; + } else { + ConsoleHelper.writeMessage(res.getString("try.again.with.details")); + continue; + } + + + + } + } +} diff --git a/src/com/javarush/test/level26/lesson15/big01/command/WithdrawCommand.java b/src/com/javarush/test/level26/lesson15/big01/command/WithdrawCommand.java new file mode 100644 index 0000000..51249b3 --- /dev/null +++ b/src/com/javarush/test/level26/lesson15/big01/command/WithdrawCommand.java @@ -0,0 +1,52 @@ +package com.javarush.test.level26.lesson15.big01.command; + +import com.javarush.test.level26.lesson15.big01.ConsoleHelper; +import com.javarush.test.level26.lesson15.big01.CurrencyManipulator; +import com.javarush.test.level26.lesson15.big01.CurrencyManipulatorFactory; +import com.javarush.test.level26.lesson15.big01.exception.InterruptOperationException; +import com.javarush.test.level26.lesson15.big01.exception.NotEnoughMoneyException; + +import java.util.ConcurrentModificationException; +import java.util.Map; +import java.util.ResourceBundle; + +class WithdrawCommand implements Command { + + private ResourceBundle res = ResourceBundle.getBundle("com.javarush.test.level26.lesson15.big01.resources.withdraw_en"); + + @Override + public void execute() throws InterruptOperationException { + + String code = ConsoleHelper.askCurrencyCode(); + CurrencyManipulator manipulator = CurrencyManipulatorFactory.getManipulatorByCurrencyCode(code); + + while (true) { + ConsoleHelper.writeMessage(res.getString("before")); + ConsoleHelper.writeMessage(res.getString("specify.amount")); + try { + int summ = Integer.parseInt(ConsoleHelper.readString()); + if (summ <= 0) + ConsoleHelper.writeMessage(res.getString("specify.not.empty.amount")); + else { + if (manipulator.isAmountAvailable(summ)) { + Map map = manipulator.withdrawAmount(summ); + for (Map.Entry pair : map.entrySet()) { + ConsoleHelper.writeMessage(String.format(res.getString("success.format"),pair.getKey()*pair.getValue(),code)); + } + + break; + } else ConsoleHelper.writeMessage(res.getString("not.enough.money")); + + } + } catch (NotEnoughMoneyException e) { + ConsoleHelper.writeMessage(res.getString("not.enough.money")); + } catch (NumberFormatException e) { + ConsoleHelper.writeMessage(res.getString("specify.not.empty.amount")); + } catch (ConcurrentModificationException ignore) { + + } + } + + + } +} diff --git a/src/com/javarush/test/level27/lesson15/big01/ConsoleHelper.java b/src/com/javarush/test/level27/lesson15/big01/ConsoleHelper.java new file mode 100644 index 0000000..7fc298b --- /dev/null +++ b/src/com/javarush/test/level27/lesson15/big01/ConsoleHelper.java @@ -0,0 +1,46 @@ +package com.javarush.test.level27.lesson15.big01; + +import com.javarush.test.level27.lesson15.big01.kitchen.Dish; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.List; + +public class ConsoleHelper { + + private static BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); + + public static void writeMessage(String message) { + System.out.println(message); + } + + public static String readString() throws IOException { + + String s = reader.readLine(); + + return s; + } + + public static List getAllDishesForOrder() throws IOException { + + List result = new ArrayList<>(); + String dish; + + writeMessage("Выберите блюдо: " + Dish.allDishesToString()); + + while (true) { + dish = reader.readLine(); + if (dish.equals("exit"))break; + try { + result.add(Dish.valueOf(dish)); + + } catch (IllegalArgumentException e) { + ConsoleHelper.writeMessage(String.format("%s is not detected", dish)); + + } + } + return result; + } +} diff --git a/src/com/javarush/test/level27/lesson15/big01/DirectorTablet.java b/src/com/javarush/test/level27/lesson15/big01/DirectorTablet.java new file mode 100644 index 0000000..4711a11 --- /dev/null +++ b/src/com/javarush/test/level27/lesson15/big01/DirectorTablet.java @@ -0,0 +1,57 @@ +package com.javarush.test.level27.lesson15.big01; + +import com.javarush.test.level27.lesson15.big01.ad.StatisticAdvertisementManager; +import com.javarush.test.level27.lesson15.big01.statistic.StatisticEventManager; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Locale; +import java.util.Map; +import java.util.TreeMap; + +public class DirectorTablet { + + public void printAdvertisementProfit(){ + Map map = StatisticEventManager.getInstance().getAllDateAmount(); + SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MMM-yyyy", Locale.ENGLISH); + double total = 0; + for (Map.Entry pair : map.entrySet()) + { + total+= pair.getValue(); + ConsoleHelper.writeMessage(String.format("%s - %.2f", dateFormat.format(pair.getKey()), pair.getValue())); + + } + ConsoleHelper.writeMessage(String.format("Total - %.2f",total)); + } + + public void printCookWorkloading(){ + Map> map = StatisticEventManager.getInstance().getCookInfo(); + SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MMM-yyyy", Locale.ENGLISH); + + for (Map.Entry> pair : map.entrySet()){ + // ConsoleHelper.writeMessage(""); + ConsoleHelper.writeMessage(dateFormat.format(pair.getKey())); + for (Map.Entry pair2 : pair.getValue().entrySet()){ + ConsoleHelper.writeMessage(pair2.getKey()+" - "+(int) Math.ceil(pair2.getValue())+" min"); + } + ConsoleHelper.writeMessage(""); + } + + } + + public void printActiveVideoSet(){ + TreeMap activeVideo = StatisticAdvertisementManager.getInstance().getVideolist(1); + + for (Map.Entry activ : activeVideo.entrySet() ){ + ConsoleHelper.writeMessage(activ.getKey()+" - "+activ.getValue()); + } + } + + public void printArchivedVideoSet(){ + TreeMap archivedVideo = StatisticAdvertisementManager.getInstance().getVideolist(0); + + for (Map.Entry activ : archivedVideo.entrySet() ){ + ConsoleHelper.writeMessage(activ.getKey()); + } + } +} diff --git a/src/com/javarush/test/level27/lesson15/big01/Restaurant.java b/src/com/javarush/test/level27/lesson15/big01/Restaurant.java new file mode 100644 index 0000000..bfa1aed --- /dev/null +++ b/src/com/javarush/test/level27/lesson15/big01/Restaurant.java @@ -0,0 +1,63 @@ +package com.javarush.test.level27.lesson15.big01; + +import com.javarush.test.level27.lesson15.big01.kitchen.Cook; +import com.javarush.test.level27.lesson15.big01.kitchen.Waitor; + +import java.util.Locale; + +public class Restaurant { + + private final static int ORDER_CREATING_INTERVAL = 100; + + public static void main(String[] args) { + + /* Tablet tablet = new Tablet(5); + Cook cook = new Cook("Amigo"); + Waitor waitor = new Waitor(); + DirectorTablet directorTablet = new DirectorTablet(); + tablet.addObserver(cook); + cook.addObserver(waitor); + tablet.createOrder(); + + directorTablet.printAdvertisementProfit(); + directorTablet.printCookWorkloading(); + directorTablet.printActiveVideoSet(); + directorTablet.printArchivedVideoSet();*/ + + + Locale.setDefault(Locale.ENGLISH); + Tablet tablet = new Tablet(5); + Cook amigo = new Cook("Amigo"); + Waitor waitor = new Waitor(); + amigo.addObserver(waitor); + tablet.addObserver(amigo); + tablet.createOrder(); + DirectorTablet directorTablet = new DirectorTablet(); + directorTablet.printAdvertisementProfit(); + directorTablet.printCookWorkloading(); + directorTablet.printActiveVideoSet(); + directorTablet.printArchivedVideoSet(); + Cook cook2=new Cook("mAmigo"); + Tablet tablet2=new Tablet(5); + Waitor waiter2=new Waitor(); + cook2.addObserver(waiter2); + tablet2.addObserver(cook2); + tablet2.createOrder(); + directorTablet=new DirectorTablet(); + directorTablet.printAdvertisementProfit(); + directorTablet.printCookWorkloading(); + directorTablet.printActiveVideoSet(); + directorTablet.printArchivedVideoSet(); + Cook cook3=new Cook("Am"); + Tablet tablet3=new Tablet(5); + Waitor waiter3=new Waitor(); + cook3.addObserver(waiter3); + tablet3.addObserver(cook3); + tablet3.createOrder(); + directorTablet=new DirectorTablet(); + directorTablet.printAdvertisementProfit(); + directorTablet.printCookWorkloading(); + directorTablet.printActiveVideoSet(); + directorTablet.printArchivedVideoSet(); + } +} diff --git a/src/com/javarush/test/level27/lesson15/big01/Tablet.java b/src/com/javarush/test/level27/lesson15/big01/Tablet.java new file mode 100644 index 0000000..4b9be99 --- /dev/null +++ b/src/com/javarush/test/level27/lesson15/big01/Tablet.java @@ -0,0 +1,68 @@ +package com.javarush.test.level27.lesson15.big01; + + +import com.javarush.test.level27.lesson15.big01.ad.AdvertisementManager; +import com.javarush.test.level27.lesson15.big01.ad.NoVideoAvailableException; +import com.javarush.test.level27.lesson15.big01.kitchen.Order; +import com.javarush.test.level27.lesson15.big01.kitchen.TestOrder; + +import java.io.IOException; +import java.util.Observable; +import java.util.logging.Level; +import java.util.logging.Logger; + +public class Tablet extends Observable { + + private static java.util.logging.Logger logger = Logger.getLogger(Tablet.class.getName()); + public final int number; + + @Override + public String toString() { + return "Tablet{" + + "number=" + number + + '}'; + } + + public Tablet(int number) { + this.number = number; + } + + + public void createOrder(){ + Order order = null; + co(order); + } + + public void createTestOrder(){ + TestOrder testOrder = null; + co(testOrder); + } + private void co(Order order) + { + try + { + order = new Order(this); + ConsoleHelper.writeMessage(order.toString()); + if (order.isEmpty()); + else { + setChanged(); + notifyObservers(order); + new AdvertisementManager(order.getTotalCookingTime()*60).processVideos(); + + } + } + catch (NoVideoAvailableException e) + { + logger.log(Level.INFO,"No video is available for the order " + order); + } + + catch (IOException e) + { + logger.log(Level.SEVERE,"Console is unavailable."); + } + } + + + + +} diff --git a/src/com/javarush/test/level27/lesson15/big01/ad/Advertisement.java b/src/com/javarush/test/level27/lesson15/big01/ad/Advertisement.java new file mode 100644 index 0000000..5a69c07 --- /dev/null +++ b/src/com/javarush/test/level27/lesson15/big01/ad/Advertisement.java @@ -0,0 +1,45 @@ +package com.javarush.test.level27.lesson15.big01.ad; + +public class Advertisement { + + private Object content; //видео + private String name; //имя/название + private long initialAmount; //начальная сумма, стоимость рекламы в копейках. + private int hits; //количество оплаченных показов + private int duration; //продолжительность в секундах + private long amountPerOneDisplaying; //стоимость одного показа рекламного объявления в копейках. + + public String getName() { + return name; + } + + public int getDuration() { + return duration; + } + + public long getAmountPerOneDisplaying() { + return amountPerOneDisplaying; + } + + public Advertisement(Object content, String name, long initialAmount, int hits, int duration) { + this.content = content; + this.name = name; + this.initialAmount = initialAmount; + this.hits = hits; + this.duration = duration; + this.amountPerOneDisplaying = initialAmount / hits; + + } + + public void revalidate() { + if (hits <= 0) throw new UnsupportedOperationException(); + if (hits == 1) amountPerOneDisplaying += initialAmount % amountPerOneDisplaying; + hits--; + + } + + public int getHits() + { + return hits; + } +} diff --git a/src/com/javarush/test/level27/lesson15/big01/ad/AdvertisementManager.java b/src/com/javarush/test/level27/lesson15/big01/ad/AdvertisementManager.java new file mode 100644 index 0000000..58f87d2 --- /dev/null +++ b/src/com/javarush/test/level27/lesson15/big01/ad/AdvertisementManager.java @@ -0,0 +1,151 @@ +package com.javarush.test.level27.lesson15.big01.ad; + +import com.javarush.test.level27.lesson15.big01.ConsoleHelper; +import com.javarush.test.level27.lesson15.big01.statistic.StatisticEventManager; +import com.javarush.test.level27.lesson15.big01.statistic.event.VideoSelectedEventDataRow; + +import java.util.*; + +public class AdvertisementManager +{ + + private final AdvertisementStorage storage = AdvertisementStorage.getInstance(); + private int timeSeconds; + + public AdvertisementManager(int timeSeconds) + { + this.timeSeconds = timeSeconds; + } + + private List> powerLists(List originalSet) + { + List> lists = new ArrayList>(); + if (originalSet.isEmpty()) + { + lists.add(new ArrayList()); + return lists; + } + List list = new ArrayList(originalSet); + Advetisement head = list.get(0); + List rest = new ArrayList(list.subList(1, list.size())); + for (List set : powerLists(rest)) + { + List newSet = new ArrayList(); + newSet.add(head); + newSet.addAll(set); + lists.add(newSet); + lists.add(set); + } + return lists; + } + + private List chooseOptimalList(List> list) + { + Iterator iterator = list.iterator(); + + while (iterator.hasNext()) + { + List checkList = (List) iterator.next(); + int fullDuration = 0; + boolean removed = false; + for (Advertisement advertisement : checkList) + { + fullDuration += advertisement.getDuration(); + if (advertisement.getHits() == 0) + { + removed = true; + iterator.remove(); + break; + } + } + + if (!removed) + if (fullDuration > timeSeconds) + iterator.remove(); + + } + + Collections.sort(list, new Comparator>() + { + @Override + public int compare(List o1, List o2) + { + int price1 = 0; + int price2 = 0; + for (Advertisement ad : o1) + price1 += ad.getAmountPerOneDisplaying(); + + for (Advertisement ad : o2) + price2 += ad.getAmountPerOneDisplaying(); + + if (Integer.compare(price1, price2) == 0) + { + int duration1 = 0; + int duration2 = 0; + + for (Advertisement ad : o1) + duration1 += ad.getDuration(); + + for (Advertisement ad : o2) + duration2 += ad.getDuration(); + + if (Integer.compare(duration1, duration2) == 0) + { + return o1.size() - o2.size(); + } else return duration2 - duration1; + } else return price2 - price1; + } + }); + return list.get(0); + } + + + public void processVideos() throws NoVideoAvailableException + { + + + List advertisements = new ArrayList<>(chooseOptimalList(powerLists(storage.list()))); + if (advertisements.isEmpty()) + throw new NoVideoAvailableException(); + + List result = new ArrayList<>(); + Collections.sort(advertisements, new Comparator() + { + @Override + public int compare(Advertisement o1, Advertisement o2) + { + if (Long.compare(o2.getAmountPerOneDisplaying(), o1.getAmountPerOneDisplaying()) == 0) + { + long o1Price = o1.getAmountPerOneDisplaying() * 1000 / o1.getDuration(); + long o2Price = o2.getAmountPerOneDisplaying() * 1000 / o2.getDuration(); + return Long.compare(o1Price, o2Price); + } else return Long.compare(o2.getAmountPerOneDisplaying(), o1.getAmountPerOneDisplaying()); + } + }); + + + + + for (Advertisement advertisement : advertisements) + { + ConsoleHelper.writeMessage(advertisement.getName() + " is displaying... " + + advertisement.getAmountPerOneDisplaying() + ", " + + advertisement.getAmountPerOneDisplaying() * 1000 / advertisement.getDuration()); + advertisement.revalidate(); + } + + long sumAmount = 0; + int sumDuration = 0; + for (Advertisement a : advertisements) + { + sumAmount += a.getAmountPerOneDisplaying(); + sumDuration += a.getDuration(); + } + + VideoSelectedEventDataRow videoSelectedEventDataRow = new VideoSelectedEventDataRow(advertisements, sumAmount, sumDuration); + StatisticEventManager.getInstance().register(videoSelectedEventDataRow); + + } + + +} diff --git a/src/com/javarush/test/level27/lesson15/big01/ad/AdvertisementStorage.java b/src/com/javarush/test/level27/lesson15/big01/ad/AdvertisementStorage.java new file mode 100644 index 0000000..f7e35bf --- /dev/null +++ b/src/com/javarush/test/level27/lesson15/big01/ad/AdvertisementStorage.java @@ -0,0 +1,39 @@ +package com.javarush.test.level27.lesson15.big01.ad; + +import java.util.ArrayList; +import java.util.List; + +class AdvertisementStorage { + + private static AdvertisementStorage ourInstance = new AdvertisementStorage(); + private final List videos = new ArrayList<>(); + + public static AdvertisementStorage getInstance() { + return ourInstance; + } + + private AdvertisementStorage() { + Object someContent = new Object(); + + videos.add(new Advertisement(someContent, "четвертое видео", 400, 2, 10 * 60)); //10 min + videos.add(new Advertisement(someContent, "First Video", 5000, 1, 3 * 60)); + videos.add(new Advertisement(someContent, "Second Video", 100, 1, 15 * 60)); + videos.add(new Advertisement(someContent, "Third Video", 400, 2, 10 * 60)); + videos.add(new Advertisement(someContent, "Firsts Video", 5000, 100, 3 * 60)); // 3 min + videos.add(new Advertisement(someContent, "Second Video", 100, 10, 15 * 60)); //15 min + + + /* videos.add(new Advertisement(someContent,"First Video",5000,100,3*60)); // 3 min + videos.add(new Advertisement(someContent,"Second Video",100,10,15*60)); //15 min + videos.add(new Advertisement(someContent,"Third Video",400,2,10*60)); //10 min + videos.add(new Advertisement(someContent, "4", 2000, 3, 20 * 60));*/ + } + + public List list() { + return videos; + } + + public void add(Advertisement advertisement) { + videos.add(advertisement); + } +} diff --git a/src/com/javarush/test/level27/lesson15/big01/ad/NoVideoAvailableException.java b/src/com/javarush/test/level27/lesson15/big01/ad/NoVideoAvailableException.java new file mode 100644 index 0000000..31daa89 --- /dev/null +++ b/src/com/javarush/test/level27/lesson15/big01/ad/NoVideoAvailableException.java @@ -0,0 +1,4 @@ +package com.javarush.test.level27.lesson15.big01.ad; + +public class NoVideoAvailableException extends RuntimeException { +} diff --git a/src/com/javarush/test/level27/lesson15/big01/ad/StatisticAdvertisementManager.java b/src/com/javarush/test/level27/lesson15/big01/ad/StatisticAdvertisementManager.java new file mode 100644 index 0000000..93d5f51 --- /dev/null +++ b/src/com/javarush/test/level27/lesson15/big01/ad/StatisticAdvertisementManager.java @@ -0,0 +1,32 @@ +package com.javarush.test.level27.lesson15.big01.ad; + + +import java.util.TreeMap; + +public class StatisticAdvertisementManager { + private static StatisticAdvertisementManager ourInstance = new StatisticAdvertisementManager(); + + private AdvertisementStorage advertisementStorage = AdvertisementStorage.getInstance(); + + public static StatisticAdvertisementManager getInstance() { + if (ourInstance == null) ourInstance = new StatisticAdvertisementManager(); + return ourInstance; + } + + private StatisticAdvertisementManager() { + } + + public TreeMap getVideolist(int i){ + TreeMap activeVideo = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); + TreeMap archivedVideo = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); + for (Advertisement ad : advertisementStorage.list()){ + if (ad.getHits() > 0) + activeVideo.put(ad.getName(),ad.getHits()); + else archivedVideo.put(ad.getName(),ad.getHits());; + } + if (i == 0) + return archivedVideo; + else return activeVideo; + + } +} diff --git a/src/com/javarush/test/level27/lesson15/big01/kitchen/Cook.java b/src/com/javarush/test/level27/lesson15/big01/kitchen/Cook.java new file mode 100644 index 0000000..2494635 --- /dev/null +++ b/src/com/javarush/test/level27/lesson15/big01/kitchen/Cook.java @@ -0,0 +1,38 @@ +package com.javarush.test.level27.lesson15.big01.kitchen; + +import com.javarush.test.level27.lesson15.big01.ConsoleHelper; +import com.javarush.test.level27.lesson15.big01.statistic.StatisticEventManager; +import com.javarush.test.level27.lesson15.big01.statistic.event.CookedOrderEventDataRow; + +import java.util.Observable; +import java.util.Observer; + +public class Cook extends Observable implements Observer{ + + + private String name; + + public Cook(String name) { + this.name = name; + } + + @Override + public String toString() { + return name; + } + + @Override + public void update(Observable o, Object order) { + + + ConsoleHelper.writeMessage(String.format("Start cooking - %s, cooking time %smin",order,((Order)order).getTotalCookingTime())); + + CookedOrderEventDataRow cookedOrderEventDataRow = new CookedOrderEventDataRow(o.toString(),this.name,((Order)order).getTotalCookingTime()*60,((Order) order).getDishes()); + StatisticEventManager.getInstance().register(cookedOrderEventDataRow); + + setChanged(); + notifyObservers(order); + + + } +} diff --git a/src/com/javarush/test/level27/lesson15/big01/kitchen/Dish.java b/src/com/javarush/test/level27/lesson15/big01/kitchen/Dish.java new file mode 100644 index 0000000..d21267e --- /dev/null +++ b/src/com/javarush/test/level27/lesson15/big01/kitchen/Dish.java @@ -0,0 +1,31 @@ +package com.javarush.test.level27.lesson15.big01.kitchen; + + +import java.util.Arrays; + +public enum Dish { + + Fish(25), + Steak(30), + Soup(15), + Juice(5), + Water(3); + + private int duration; + + Dish(int duration) { + + this.duration = duration; + } + + public int getDuration() { + + return duration; + } + + public static String allDishesToString() { + String resultString = Arrays.toString(Dish.values()); + return resultString.substring(resultString.indexOf("[") + 1, resultString.lastIndexOf("]")); + } + +} diff --git a/src/com/javarush/test/level27/lesson15/big01/kitchen/Order.java b/src/com/javarush/test/level27/lesson15/big01/kitchen/Order.java new file mode 100644 index 0000000..aeca2d6 --- /dev/null +++ b/src/com/javarush/test/level27/lesson15/big01/kitchen/Order.java @@ -0,0 +1,51 @@ +package com.javarush.test.level27.lesson15.big01.kitchen; + +import com.javarush.test.level27.lesson15.big01.ConsoleHelper; +import com.javarush.test.level27.lesson15.big01.Tablet; + +import java.io.IOException; +import java.util.List; + +public class Order { + + private Tablet tablet; + protected List dishes; + + public Order(Tablet tablet) throws IOException { + this.tablet = tablet; + dishes = ConsoleHelper.getAllDishesForOrder(); + } + + @Override + public String toString() { + if (dishes.size() == 0) + return ""; + else { + return "Your order: " + dishes.toString() + " of " + tablet; + } + } + + public int getTotalCookingTime() { + int time = 0; + for (Dish d : dishes) { + time += d.getDuration(); + } + return time; + } + + public List getDishes() { + return dishes; + } + + public boolean isEmpty(){ + return dishes.isEmpty(); + + } + + protected void initDishes() throws IOException + { + dishes = ConsoleHelper.getAllDishesForOrder(); + } + + +} diff --git a/src/com/javarush/test/level27/lesson15/big01/kitchen/Waitor.java b/src/com/javarush/test/level27/lesson15/big01/kitchen/Waitor.java new file mode 100644 index 0000000..3156456 --- /dev/null +++ b/src/com/javarush/test/level27/lesson15/big01/kitchen/Waitor.java @@ -0,0 +1,15 @@ +package com.javarush.test.level27.lesson15.big01.kitchen; + +import com.javarush.test.level27.lesson15.big01.ConsoleHelper; + +import java.util.Observable; +import java.util.Observer; + +public class Waitor implements Observer { + + + @Override + public void update(Observable cook, Object order) { + ConsoleHelper.writeMessage(order + " was cooked by " + cook); + } +} diff --git a/src/com/javarush/test/level28/lesson06/home01/MyThread.java b/src/com/javarush/test/level28/lesson06/home01/MyThread.java new file mode 100644 index 0000000..6b713ba --- /dev/null +++ b/src/com/javarush/test/level28/lesson06/home01/MyThread.java @@ -0,0 +1,53 @@ +package com.javarush.test.level28.lesson06.home01; + +import java.util.concurrent.atomic.AtomicInteger; + +public class MyThread extends Thread { + + static AtomicInteger priority = new AtomicInteger(1); + + public MyThread() { + setMyThreadPriority(); + } + + public MyThread(Runnable target) { + super(target); + setMyThreadPriority(); + } + + public MyThread(ThreadGroup group, Runnable target) { + super(group, target); + setMyThreadPriority(); + } + + public MyThread(String name) { + super(name); + setMyThreadPriority(); + } + + public MyThread(ThreadGroup group, String name) { + super(group, name); + setMyThreadPriority(); + } + + public MyThread(Runnable target, String name) { + super(target, name); + setMyThreadPriority(); + } + + public MyThread(ThreadGroup group, Runnable target, String name) { + super(group, target, name); + setMyThreadPriority(); + } + + public MyThread(ThreadGroup group, Runnable target, String name, long stackSize) { + super(group, target, name, stackSize); + setMyThreadPriority(); + } + + private void setMyThreadPriority() { + setPriority(priority.get()); + if (priority.get() == 10) priority.set(0); + priority.incrementAndGet(); + } +} diff --git a/src/com/javarush/test/level28/lesson15/big01/model/Model.java b/src/com/javarush/test/level28/lesson15/big01/model/Model.java new file mode 100644 index 0000000..2613d29 --- /dev/null +++ b/src/com/javarush/test/level28/lesson15/big01/model/Model.java @@ -0,0 +1,31 @@ +package com.javarush.test.level28.lesson15.big01.model; + +import com.javarush.test.level28.lesson15.big01.view.View; +import com.javarush.test.level28.lesson15.big01.vo.Vacancy; + +import java.util.ArrayList; +import java.util.List; + +public class Model { + + private View view; + private Provider[] providers; + + public Model(View view, Provider... providers) { + if (view == null || providers.length == 0) + throw new IllegalArgumentException(); + this.view = view; + this.providers = providers; + } + + public void selectCity(String city) { + + List vacancies = new ArrayList<>(); + for (Provider provider : providers) { + for (Vacancy vacancy : provider.getJavaVacancies(city)){ + vacancies.add(vacancy); + } + } + view.update(vacancies); + } +} diff --git a/src/com/javarush/test/level28/lesson15/big01/model/MoikrugStrategy.java b/src/com/javarush/test/level28/lesson15/big01/model/MoikrugStrategy.java new file mode 100644 index 0000000..2cc3770 --- /dev/null +++ b/src/com/javarush/test/level28/lesson15/big01/model/MoikrugStrategy.java @@ -0,0 +1,60 @@ +package com.javarush.test.level28.lesson15.big01.model; + +import com.javarush.test.level28.lesson15.big01.vo.Vacancy; +import org.jsoup.Jsoup; +import org.jsoup.nodes.Document; +import org.jsoup.nodes.Element; +import org.jsoup.select.Elements; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +public class MoikrugStrategy implements Strategy { + private static final String URL_FORMAT = "https://moikrug.ru/vacancies?q=java+%s&page=%d"; + + + @Override + public List getVacancies(String searchString) + { + List vacancies = new ArrayList<>(); + try + { + int page = 0; + while (true) + { + Document doc = getDocument(searchString, page++); + Elements element = doc.getElementsByClass("job"); + if (!element.isEmpty()) + { + for (Element el : element) + { + Vacancy vacancy = new Vacancy(); + vacancy.setTitle(el.getElementsByClass("title").text()); + vacancy.setSalary(el.getElementsByClass("count").text()); + vacancy.setCity(el.getElementsByClass("location").text()); + vacancy.setCompanyName(el.getElementsByClass("company_name").select("a[href]").text()); + vacancy.setSiteName("https://moikrug.ru"); + vacancy.setUrl(el.getElementsByClass("title").select("a").attr("abs:href")); + vacancies.add(vacancy); + } + } + else break; + } + } + catch (IOException e) + { + + } + + + return vacancies; + } + + protected Document getDocument(String searchString, int page) throws IOException + { + String url = String.format(URL_FORMAT, searchString, page); + Document document = Jsoup.connect(url).userAgent("Mozilla/5.0 (Windows NT 10.0; WOW64)").referrer("google").get(); + return document; + } +} diff --git a/src/com/javarush/test/level28/lesson15/big01/view/HtmlView.java b/src/com/javarush/test/level28/lesson15/big01/view/HtmlView.java new file mode 100644 index 0000000..66c8bf7 --- /dev/null +++ b/src/com/javarush/test/level28/lesson15/big01/view/HtmlView.java @@ -0,0 +1,74 @@ +package com.javarush.test.level28.lesson15.big01.view; + +import com.javarush.test.level28.lesson15.big01.Controller; +import com.javarush.test.level28.lesson15.big01.vo.Vacancy; +import org.jsoup.Jsoup; +import org.jsoup.nodes.Document; +import org.jsoup.nodes.Element; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.util.List; + +public class HtmlView implements View { + private final String filePath = this.getClass().getPackage().toString().replace('.', '/').replaceFirst("package ", "./src/")+"/vacancies.html"; + private Controller controller; + private List vacancies; + + private String getUpdatedFileContent(List vacancies) throws IOException { + Document doc = null; + doc = getDocument(); + + Element element = doc.getElementsByClass("template").first(); + Element elementclon = element.clone(); + + elementclon.removeClass("template").removeAttr("style"); + doc.select("tr[class*=\"vacancy\"]").not("tr[class=\"vacancy template\"]").remove(); + + for (Vacancy vacancy : vacancies){ + Element vac = elementclon.clone(); + vac.getElementsByAttributeValue("class", "city").get(0).text(vacancy.getCity()); + vac.getElementsByAttributeValue("class", "companyName").get(0).text(vacancy.getCompanyName()); + vac.getElementsByAttributeValue("class", "salary").get(0).text(vacancy.getSalary()); + vac.getElementsByTag("a").get(0).text(vacancy.getTitle()).attr("href", vacancy.getUrl()); + element.before(vac.outerHtml()); + + } + + return doc.html(); + } + + private void updateFile(String s) throws IOException { + FileWriter fileWriter = new FileWriter(filePath); + fileWriter.write(s); + fileWriter.close(); + } + + @Override + public void update(List vacancies) { + + try { + updateFile(getUpdatedFileContent(vacancies)); + } catch (IOException e) { + System.out.println("Some exception occurred"); + } + } + + @Override + public void setController(Controller controller) { + + this.controller = controller; + } + + public void userCitySelectEmulationMethod(){ + controller.onCitySelect("Izhevsk"); + } + + protected Document getDocument() throws IOException{ + File file = new File(filePath); + Document document = Jsoup.parse(file,"UTF-8"); + return document; + + } +} diff --git a/src/com/javarush/test/level28/lesson15/big01/view/View.java b/src/com/javarush/test/level28/lesson15/big01/view/View.java new file mode 100644 index 0000000..fa81045 --- /dev/null +++ b/src/com/javarush/test/level28/lesson15/big01/view/View.java @@ -0,0 +1,14 @@ +package com.javarush.test.level28.lesson15.big01.view; + + +import com.javarush.test.level28.lesson15.big01.Controller; +import com.javarush.test.level28.lesson15.big01.vo.Vacancy; + +import java.util.List; + +public interface View { + + void update(List vacancies); + void setController(Controller controller); + +} diff --git a/src/com/javarush/test/level29/lesson15/big01/human/Alive.java b/src/com/javarush/test/level29/lesson15/big01/human/Alive.java new file mode 100644 index 0000000..6b56a8d --- /dev/null +++ b/src/com/javarush/test/level29/lesson15/big01/human/Alive.java @@ -0,0 +1,6 @@ +package com.javarush.test.level29.lesson15.big01.human; + + +public interface Alive { + void live(); +} diff --git a/src/com/javarush/test/level29/lesson15/big01/human/Soldier.java b/src/com/javarush/test/level29/lesson15/big01/human/Soldier.java new file mode 100644 index 0000000..46d85a0 --- /dev/null +++ b/src/com/javarush/test/level29/lesson15/big01/human/Soldier.java @@ -0,0 +1,16 @@ +package com.javarush.test.level29.lesson15.big01.human; + +public class Soldier extends Human { + + public Soldier(String name, int age) { + super(name, age); + } + + public void live() { + + fight(); + } + + public void fight() { + } +} diff --git a/src/com/javarush/test/level30/lesson15/big01/client/BotClient.java b/src/com/javarush/test/level30/lesson15/big01/client/BotClient.java new file mode 100644 index 0000000..7937fff --- /dev/null +++ b/src/com/javarush/test/level30/lesson15/big01/client/BotClient.java @@ -0,0 +1,79 @@ +package com.javarush.test.level30.lesson15.big01.client; + +import com.javarush.test.level30.lesson15.big01.ConsoleHelper; + +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; + +public class BotClient extends Client { + + public static void main(String[] args) { + BotClient bot = new BotClient(); + bot.run(); + } + + @Override + protected SocketThread getSocketThread() { + return new BotSocketThread(); + } + + @Override + protected boolean shouldSentTextFromConsole() { + return false; + } + + @Override + protected String getUserName() { + return new Date().toLocaleString().substring(0, 10) + "_bot_" + (int) (Math.random() * 100); + } + + public class BotSocketThread extends Client.SocketThread { + @Override + protected void clientMainLoop() throws IOException, ClassNotFoundException { + sendTextMessage("Привет чатику. Я бот. Понимаю команды: дата, день, месяц, год, время, час, минуты, секунды."); + super.clientMainLoop(); + } + + @Override + protected void processIncomingMessage(String message) { + ConsoleHelper.writeMessage(message); + if (message.contains(":")) { + String[] s = message.split(": "); + SimpleDateFormat dateFormat = null; + switch (s[1]) { + case "дата": + dateFormat = new SimpleDateFormat("d.MM.YYYY"); + break; + case "день": + dateFormat = new SimpleDateFormat("d"); + break; + case "месяц": + dateFormat = new SimpleDateFormat("MMMM"); + break; + case "год": + dateFormat = new SimpleDateFormat("YYYY"); + break; + case "время": + dateFormat = new SimpleDateFormat("H:mm:ss"); + break; + case "час": + dateFormat = new SimpleDateFormat("H"); + break; + case "минуты": + dateFormat = new SimpleDateFormat("m"); + break; + case "секунды": + dateFormat = new SimpleDateFormat("s"); + break; + default: + break; + } + if (dateFormat !=null) + sendTextMessage(String.format("Информация для %s: %s", s[0], dateFormat.format(Calendar.getInstance().getTime()))); + + } + } + } +} diff --git a/src/com/javarush/test/level30/lesson15/big01/client/ClientGuiController.java b/src/com/javarush/test/level30/lesson15/big01/client/ClientGuiController.java new file mode 100644 index 0000000..62bac55 --- /dev/null +++ b/src/com/javarush/test/level30/lesson15/big01/client/ClientGuiController.java @@ -0,0 +1,66 @@ +package com.javarush.test.level30.lesson15.big01.client; + +public class ClientGuiController extends Client { + private ClientGuiModel model = new ClientGuiModel(); + private ClientGuiView view = new ClientGuiView(this); + + public static void main(String[] args) { + ClientGuiController clientGuiController = new ClientGuiController(); + clientGuiController.run(); + } + + @Override + protected SocketThread getSocketThread() { + return new GuiSocketThread(); + } + + @Override + public void run() { + SocketThread socketThread = getSocketThread(); + socketThread.run(); + } + + @Override + protected String getServerAddress() { + return view.getServerAddress(); + } + + @Override + protected int getServerPort() { + return view.getServerPort(); + } + + @Override + protected String getUserName() { + return view.getUserName(); + } + + public ClientGuiModel getModel() { + return model; + } + + public class GuiSocketThread extends Client.SocketThread { + @Override + protected void processIncomingMessage(String message) { + model.setNewMessage(message); + view.refreshMessages(); + } + + @Override + protected void informAboutAddingNewUser(String userName) { + model.addUser(userName); + view.refreshUsers(); + } + + @Override + protected void informAboutDeletingNewUser(String userName) { + model.deleteUser(userName); + view.refreshUsers(); + } + + @Override + protected void notifyConnectionStatusChanged(boolean clientConnected) { + view.notifyConnectionStatusChanged(clientConnected); + } + } +} diff --git a/src/com/javarush/test/level30/lesson15/big01/client/ClientGuiModel.java b/src/com/javarush/test/level30/lesson15/big01/client/ClientGuiModel.java new file mode 100644 index 0000000..7be6172 --- /dev/null +++ b/src/com/javarush/test/level30/lesson15/big01/client/ClientGuiModel.java @@ -0,0 +1,32 @@ +package com.javarush.test.level30.lesson15.big01.client; + +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; + +public class ClientGuiModel { + + private final Set allUserNames = new HashSet<>(); + private String newMessage; + + public String getNewMessage() { + return newMessage; + } + + public void setNewMessage(String newMessage) { + this.newMessage = newMessage; + } + + public Set getAllUserNames() { + return Collections.unmodifiableSet(allUserNames); + + } + + public void addUser(String newUserName){ + allUserNames.add(newUserName); + } + + public void deleteUser(String userName){ + allUserNames.remove(userName); + } +} From fc404166333169a612f1b3d1103cac8a46ca3710 Mon Sep 17 00:00:00 2001 From: mint52 Date: Thu, 14 Apr 2016 10:27:20 +0400 Subject: [PATCH 2/5] =?UTF-8?q?=D1=81=D0=BE=D0=B7=D0=B4=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=B2=D0=B5=D1=82=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../level31/lesson06/home01/Solution.java | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 src/com/javarush/test/level31/lesson06/home01/Solution.java diff --git a/src/com/javarush/test/level31/lesson06/home01/Solution.java b/src/com/javarush/test/level31/lesson06/home01/Solution.java new file mode 100644 index 0000000..1a46955 --- /dev/null +++ b/src/com/javarush/test/level31/lesson06/home01/Solution.java @@ -0,0 +1,32 @@ +package com.javarush.test.level31.lesson06.home01; + +import java.io.IOException; + +/* Добавление файла в архив +В метод main приходит список аргументов. +Первый аргумент - полный путь к файлу fileName. +Второй аргумент - путь к zip-архиву. +Добавить файл (fileName) внутрь архива в директорию 'new'. +Если в архиве есть файл с таким именем, то заменить его. + +Пример входных данных: +C:/result.mp3 +C:/pathToTest/test.zip + +Файлы внутри test.zip: +a.txt +b.txt + +После запуска Solution.main архив test.zip должен иметь такое содержимое: +new/result.mp3 +a.txt +b.txt + +Подсказка: нужно сначала куда-то сохранить содержимое всех энтри, +а потом записать в архив все энтри вместе с добавленным файлом. +Пользоваться файловой системой нельзя. +*/ +public class Solution { + public static void main(String[] args) throws IOException { + } +} From 44f87ea311b378420b28113429381d277a6f69ad Mon Sep 17 00:00:00 2001 From: mint52 Date: Thu, 14 Apr 2016 10:32:42 +0400 Subject: [PATCH 3/5] =?UTF-8?q?=D1=81=D0=BE=D0=B7=D0=B4=D0=B0=D0=BB=20?= =?UTF-8?q?=D0=BF=D0=BE=D1=82=D0=BE=D0=BA=D0=B8=20=D0=B2=D0=B5=D1=82=D0=BA?= =?UTF-8?q?=D0=B0=20=D1=82=D0=B5=D1=81=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../test/level31/lesson06/home01/Solution.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/com/javarush/test/level31/lesson06/home01/Solution.java b/src/com/javarush/test/level31/lesson06/home01/Solution.java index 1a46955..b78678d 100644 --- a/src/com/javarush/test/level31/lesson06/home01/Solution.java +++ b/src/com/javarush/test/level31/lesson06/home01/Solution.java @@ -1,6 +1,10 @@ package com.javarush.test.level31.lesson06.home01; +import java.io.FileInputStream; +import java.io.FileOutputStream; import java.io.IOException; +import java.util.zip.ZipInputStream; +import java.util.zip.ZipOutputStream; /* Добавление файла в архив В метод main приходит список аргументов. @@ -28,5 +32,15 @@ */ public class Solution { public static void main(String[] args) throws IOException { + + String filename = args[0]; + + try (ZipInputStream zis = new ZipInputStream(new FileInputStream("")); + ZipOutputStream zout = new ZipOutputStream(new FileOutputStream("")); + FileInputStream fis = new FileInputStream(filename)) + + { + + } } } From a068add4d02bb26627f297dcc3281cfd77a7345f Mon Sep 17 00:00:00 2001 From: mint52 Date: Thu, 14 Apr 2016 10:37:08 +0400 Subject: [PATCH 4/5] =?UTF-8?q?=D0=B7=D0=B8=D0=BF=20=D1=82=D0=B5=D1=81?= =?UTF-8?q?=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/javarush/test/level31/lesson06/home01/Solution.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/com/javarush/test/level31/lesson06/home01/Solution.java b/src/com/javarush/test/level31/lesson06/home01/Solution.java index b78678d..9c5d9f5 100644 --- a/src/com/javarush/test/level31/lesson06/home01/Solution.java +++ b/src/com/javarush/test/level31/lesson06/home01/Solution.java @@ -33,7 +33,8 @@ public class Solution { public static void main(String[] args) throws IOException { - String filename = args[0]; + // String filename = args[0]; + String filename = "d:/123.zip"; try (ZipInputStream zis = new ZipInputStream(new FileInputStream("")); ZipOutputStream zout = new ZipOutputStream(new FileOutputStream("")); From 364ecd5974ad48f92c1c5e3e2fa8a77fd235ffcb Mon Sep 17 00:00:00 2001 From: mint52 Date: Thu, 14 Apr 2016 11:27:27 +0400 Subject: [PATCH 5/5] =?UTF-8?q?=D0=B7=D0=B8=D0=BF=202?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../level31/lesson06/home01/Solution.java | 33 ++++++++++++++++--- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/src/com/javarush/test/level31/lesson06/home01/Solution.java b/src/com/javarush/test/level31/lesson06/home01/Solution.java index 9c5d9f5..9b10e8b 100644 --- a/src/com/javarush/test/level31/lesson06/home01/Solution.java +++ b/src/com/javarush/test/level31/lesson06/home01/Solution.java @@ -1,8 +1,12 @@ package com.javarush.test.level31.lesson06.home01; +import java.io.ByteArrayOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; +import java.util.HashMap; +import java.util.Map; +import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; import java.util.zip.ZipOutputStream; @@ -34,14 +38,33 @@ public class Solution { public static void main(String[] args) throws IOException { // String filename = args[0]; - String filename = "d:/123.zip"; + String filename = "d:/log.txt"; + String zip = "d:/123.zip"; + String zip2 = "d:/1.zip"; - try (ZipInputStream zis = new ZipInputStream(new FileInputStream("")); - ZipOutputStream zout = new ZipOutputStream(new FileOutputStream("")); - FileInputStream fis = new FileInputStream(filename)) + Map map = new HashMap<>(); - { + try (ZipInputStream zis = new ZipInputStream(new FileInputStream(zip)); + FileInputStream fis = new FileInputStream(filename)) { + ZipEntry entry; + String name; + while ((entry = zis.getNextEntry()) != null) { + byte[] buffer = new byte[4]; + ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); + while (fis.read(buffer)!= -1) + { + byteArrayOutputStream.write(buffer); + } + map.put(entry.getName(),byteArrayOutputStream); + } + } + + try (ZipOutputStream zout = new ZipOutputStream(new FileOutputStream(zip2))) { + for (Map.Entry pair : map.entrySet()) { + zout.putNextEntry(new ZipEntry(pair.getKey())); + zout.write(pair.getValue().toByteArray()); + } } } }