├── .gitignore ├── 01. BootstrapPage └── index.html ├── 02. NodeJsExample ├── app │ └── routes │ │ ├── index.js │ │ └── users_routes.js ├── data.txt ├── public │ └── html │ │ └── index.html └── server.js ├── 03. FormExample └── index.html ├── 04. PizzaService ├── pom.xml └── src │ └── main │ ├── java │ └── ru │ │ └── itis │ │ └── pizza │ │ ├── app │ │ ├── Application.java │ │ ├── BuilderDemo.java │ │ ├── OrderRepositoryDemo.java │ │ ├── UsersRepositoryDemo.java │ │ ├── UsersRepositoryFindDemo.java │ │ └── UsersRepositorySaveDemo.java │ │ ├── context │ │ ├── LocaleListener.java │ │ └── UsersServiceListener.java │ │ ├── filters │ │ └── LocalizationFilter.java │ │ ├── forms │ │ ├── LoginForm.java │ │ └── UserForm.java │ │ ├── localization │ │ └── Localizations.java │ │ ├── mappers │ │ └── RowMapper.java │ │ ├── models │ │ ├── Order.java │ │ ├── Pizza.java │ │ └── User.java │ │ ├── repositories │ │ ├── CrudRepository.java │ │ ├── OrderRepository.java │ │ ├── OrderRepositoryConnectionImpl.java │ │ ├── UsersRepository.java │ │ └── UsersRepositoryConnectionImpl.java │ │ ├── services │ │ ├── UsersService.java │ │ └── UsersServiceImpl.java │ │ └── servlets │ │ ├── SignInServlet.java │ │ └── SignUpServlet.java │ ├── resources │ ├── messages │ │ ├── messages_en.properties │ │ ├── messages_po.properties │ │ └── messages_ru.properties │ ├── queries.sql │ └── schema.sql │ └── webapp │ ├── WEB-INF │ └── web.xml │ ├── css │ └── styles.css │ └── jsp │ ├── signIn.jsp │ └── signUp.jsp ├── 05. SimpleWebProject ├── pom.xml └── src │ └── main │ ├── java │ └── ru │ │ └── itis │ │ └── pizza │ │ └── servlets │ │ └── HelloPageServlet.java │ └── webapp │ └── WEB-INF │ └── web.xml ├── 06. SpringJdbcAndDiExample ├── pom.xml └── src │ ├── main │ └── java │ │ └── ru │ │ └── itis │ │ └── pizza │ │ ├── models │ │ └── User.java │ │ └── repositories │ │ ├── CrudRepository.java │ │ ├── UsersRepository.java │ │ ├── UsersRepositoryJdbcTemplateImpl.java │ │ └── old │ │ ├── RowMapper.java │ │ └── UsersRepositoryConnectionImpl.java │ └── test │ └── java │ └── ru │ └── itis │ └── pizza │ └── repositories │ ├── UsersRepositoryJdbcTemplateImplTest.java │ └── old │ └── UsersRepositoryConnectionImplTest.java ├── 07. Basket Example ├── pom.xml └── src │ └── main │ ├── java │ └── ru │ │ └── itis │ │ ├── app │ │ └── Main.java │ │ ├── context │ │ ├── ApplicationContext.java │ │ ├── ApplicationContextPrimitiveImpl.java │ │ └── Contexts.java │ │ ├── dto │ │ └── UserDto.java │ │ ├── filter │ │ └── AuthFilter.java │ │ ├── forms │ │ ├── SignInForm.java │ │ └── SignUpForm.java │ │ ├── listeners │ │ └── ComponentsListener.java │ │ ├── models │ │ ├── Auth.java │ │ ├── Basket.java │ │ ├── Product.java │ │ └── User.java │ │ ├── repositories │ │ ├── AuthRepository.java │ │ ├── AuthRepositoryJdbcTemplateImpl.java │ │ ├── CrudRepository.java │ │ ├── UsersRepository.java │ │ └── UsersRepositoryJdbcTemplateImpl.java │ │ ├── services │ │ ├── ProductsService.java │ │ ├── UsersService.java │ │ └── UsersServiceImpl.java │ │ └── servlets │ │ ├── MyFreemarkerServlet.java │ │ ├── ProductsServlet.java │ │ ├── ShopServlet.java │ │ ├── SignInServlet.java │ │ └── SignUpServlet.java │ ├── resources │ ├── ru.itis │ │ └── context.xml │ └── schema.sql │ └── webapp │ ├── WEB-INF │ └── web.xml │ ├── ftl │ └── index.ftl │ └── jsp │ ├── shop.jsp │ ├── signIn.jsp │ └── signUp.jsp ├── 08. DiExample ├── resources │ └── application.properties └── src │ └── ru │ └── itis │ ├── ApplicationContext.java │ ├── BadTerminalImpl.java │ ├── Main.java │ ├── PlainTerminal.java │ ├── Printer.java │ ├── PrinterRedImpl.java │ ├── PrinterStandardImpl.java │ ├── Terminal.java │ └── TerminalWithCashBack.java ├── 09. SpringDemo ├── pom.xml └── src │ └── main │ ├── java │ └── ru │ │ └── itis │ │ └── spring │ │ ├── components │ │ ├── BadTerminalImpl.java │ │ ├── PlainTerminal.java │ │ ├── Printer.java │ │ ├── PrinterRedImpl.java │ │ ├── PrinterStandardImpl.java │ │ ├── Terminal.java │ │ └── TerminalWithCashBack.java │ │ ├── java │ │ ├── JavaConfig.java │ │ └── Main.java │ │ └── xml │ │ ├── demo │ │ └── Main.java │ │ ├── dependencies │ │ └── Main.java │ │ └── scopes │ │ └── Main.java │ └── resources │ ├── application.properties │ └── context.xml ├── 10. SpringMvcExample ├── pom.xml └── src │ └── main │ ├── java │ └── ru │ │ └── itis │ │ ├── app │ │ └── WebInitializer.java │ │ ├── config │ │ └── AppConfig.java │ │ ├── controllers │ │ ├── UsersController.java │ │ └── deprecateds │ │ │ └── UsersControllerDeprecated.java │ │ ├── filters │ │ └── LogFilter.java │ │ ├── models │ │ └── User.java │ │ ├── repository │ │ ├── CrudRepository.java │ │ ├── UsersRepository.java │ │ └── UsersRepositoryJdbcTemplateImpl.java │ │ └── services │ │ ├── UsersService.java │ │ └── UsersServiceImpl.java │ ├── resources │ └── ru.itis │ │ └── application.properties │ └── webapp │ └── WEB-INF │ └── views │ ├── ftl │ └── users_page.ftl │ └── jsp │ └── users_page.jsp ├── 11. SpringConfigs ├── pom.xml └── src │ └── main │ └── java │ └── ru │ └── itis │ ├── Main.java │ ├── StringsRepository.java │ ├── StringsRepositoryEnglishFakeImpl.java │ ├── StringsRepositoryRussianFakeImpl.java │ ├── StringsService.java │ ├── StringsServiceImpl.java │ └── config │ └── AppAnnotationConfig.java ├── 12. Hibernate Demo ├── pom.xml └── src │ └── main │ ├── java │ └── ru │ │ └── itis │ │ ├── app │ │ └── Main.java │ │ └── models │ │ ├── Course.java │ │ ├── Lesson.java │ │ └── User.java │ └── resources │ ├── Course.hbm.xml │ ├── Lesson.hbm.xml │ ├── User.hbm.xml │ └── hibernate.cfg.xml ├── 13. SpringBootDemo ├── .gitignore ├── .mvn │ └── wrapper │ │ ├── MavenWrapperDownloader.java │ │ ├── maven-wrapper.jar │ │ └── maven-wrapper.properties ├── mvnw ├── mvnw.cmd ├── pom.xml └── src │ ├── main │ ├── java │ │ └── ru │ │ │ └── itis │ │ │ └── springbootdemo │ │ │ ├── SpringBootDemoApplication.java │ │ │ ├── controllers │ │ │ ├── RootController.java │ │ │ └── SimpleRestController.java │ │ │ ├── models │ │ │ └── User.java │ │ │ └── repositories │ │ │ ├── UsersRepository.java │ │ │ └── UsersRepositoryJdbcTemplateImpl.java │ └── resources │ │ ├── application.properties │ │ ├── banner.txt │ │ └── templates │ │ └── index.ftl │ └── test │ └── java │ └── ru │ └── itis │ └── springbootdemo │ └── SpringBootDemoApplicationTests.java ├── 14. SpringBootSecurity ├── .mvn │ └── wrapper │ │ ├── MavenWrapperDownloader.java │ │ └── maven-wrapper.properties ├── HELP.md ├── mvnw ├── mvnw.cmd ├── pom.xml └── src │ ├── main │ ├── java │ │ └── ru │ │ │ └── itis │ │ │ └── springbootapp │ │ │ ├── SpringBootAppApplication.java │ │ │ ├── controllers │ │ │ ├── HelloController.java │ │ │ ├── SignInController.java │ │ │ ├── SignUpController.java │ │ │ └── UsersController.java │ │ │ ├── forms │ │ │ ├── SignUpForm.java │ │ │ └── UserForm.java │ │ │ ├── models │ │ │ └── User.java │ │ │ ├── repositories │ │ │ └── UsersRepository.java │ │ │ ├── security │ │ │ ├── SecurityConfig.java │ │ │ ├── UserDetailsImpl.java │ │ │ └── UserDetailsServiceImpl.java │ │ │ └── services │ │ │ ├── SignUpService.java │ │ │ └── SignUpServiceImpl.java │ └── resources │ │ ├── application.properties │ │ ├── static │ │ └── css │ │ │ └── style.css │ │ └── templates │ │ ├── sign_in.ftl │ │ ├── sign_up.ftl │ │ └── users.ftl │ └── test │ └── java │ └── ru │ └── itis │ └── springbootapp │ └── SpringBootAppApplicationTests.java ├── 15. Rest API Demo ├── .gitignore ├── .mvn │ └── wrapper │ │ ├── MavenWrapperDownloader.java │ │ ├── maven-wrapper.jar │ │ └── maven-wrapper.properties ├── mvnw ├── mvnw.cmd ├── pom.xml └── src │ ├── main │ ├── java │ │ └── ru │ │ │ └── itpark │ │ │ └── app │ │ │ ├── SpringBootDemoApplication.java │ │ │ ├── controllers │ │ │ ├── LoginController.java │ │ │ └── ProductsController.java │ │ │ ├── dto │ │ │ ├── LoginDto.java │ │ │ ├── ProductDto.java │ │ │ └── TokenDto.java │ │ │ ├── models │ │ │ ├── Product.java │ │ │ ├── Role.java │ │ │ ├── Token.java │ │ │ └── User.java │ │ │ ├── repositories │ │ │ ├── ProductsRepository.java │ │ │ ├── TokensRepository.java │ │ │ └── UsersRepository.java │ │ │ ├── schedulers │ │ │ └── ExpiredTokensScheduler.java │ │ │ ├── security │ │ │ ├── authentication │ │ │ │ └── TokenAuthentication.java │ │ │ ├── config │ │ │ │ └── SecurityConfiguration.java │ │ │ ├── details │ │ │ │ ├── UserDetailsImpl.java │ │ │ │ └── UserDetailsServiceImpl.java │ │ │ ├── filters │ │ │ │ └── TokenAuthenticationFilter.java │ │ │ └── providers │ │ │ │ └── TokenAuthenticationProvider.java │ │ │ └── services │ │ │ ├── LoginService.java │ │ │ ├── LoginServiceImpl.java │ │ │ ├── ProductsService.java │ │ │ ├── ProductsServiceImpl.java │ │ │ ├── UsersService.java │ │ │ └── UsersServiceImpl.java │ └── resources │ │ ├── application.properties │ │ └── requests.http │ └── test │ └── java │ └── ru │ └── itpark │ └── app │ └── SpringBootDemoApplicationTests.java ├── 16. Long Polling ├── .gitignore ├── .mvn │ └── wrapper │ │ ├── MavenWrapperDownloader.java │ │ ├── maven-wrapper.jar │ │ └── maven-wrapper.properties ├── mvnw ├── mvnw.cmd ├── pom.xml └── src │ ├── main │ ├── java │ │ └── ru │ │ │ └── itis │ │ │ └── chat │ │ │ ├── LongPollingDemoApplication.java │ │ │ ├── controllers │ │ │ ├── ChatController.java │ │ │ └── MessagesController.java │ │ │ └── dto │ │ │ └── MessageDto.java │ └── resources │ │ ├── application.properties │ │ ├── static │ │ └── js │ │ │ └── chat.js │ │ └── templates │ │ └── chat.ftl │ └── test │ └── java │ └── ru │ └── itis │ └── chat │ └── LongPollingDemoApplicationTests.java ├── 17. WebSockets ├── .gitignore ├── .mvn │ └── wrapper │ │ ├── MavenWrapperDownloader.java │ │ ├── maven-wrapper.jar │ │ └── maven-wrapper.properties ├── mvnw ├── mvnw.cmd ├── pom.xml └── src │ ├── main │ ├── java │ │ └── ru │ │ │ └── itis │ │ │ └── chats │ │ │ ├── ChatsApplication.java │ │ │ ├── configs │ │ │ └── WebSocketConfiguration.java │ │ │ ├── controllers │ │ │ └── IndexController.java │ │ │ ├── forms │ │ │ └── MessageDto.java │ │ │ └── handlers │ │ │ ├── AuthHandshakeHandler.java │ │ │ └── MessagesWebSocketHandler.java │ └── resources │ │ ├── application.properties │ │ ├── static │ │ └── js │ │ │ └── chat_web_sockets.js │ │ └── templates │ │ └── index_web_sockets.ftl │ └── test │ └── java │ └── ru │ └── itis │ └── chats │ └── ChatsApplicationTests.java ├── 18. SpringCloud ├── CatsService │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── ru │ │ │ └── itis │ │ │ └── services │ │ │ └── cats │ │ │ ├── app │ │ │ └── CatsServiceApplication.java │ │ │ ├── controllers │ │ │ └── CatsUsersController.java │ │ │ ├── dto │ │ │ └── CatDto.java │ │ │ └── service │ │ │ ├── CatsService.java │ │ │ └── CatsServiceImpl.java │ │ └── resources │ │ └── application.properties ├── CountriesService │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── ru │ │ │ └── itis │ │ │ └── services │ │ │ └── countries │ │ │ ├── app │ │ │ └── CountriesServiceApplication.java │ │ │ ├── controllers │ │ │ └── CountriesController.java │ │ │ ├── dto │ │ │ └── FlagDto.java │ │ │ └── service │ │ │ ├── CountriesService.java │ │ │ └── CountriesServiceImpl.java │ │ └── resources │ │ └── application.properties ├── ServiceRegistry │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── ru │ │ │ └── itis │ │ │ └── services │ │ │ └── ServiceRegistryApplication.java │ │ └── resources │ │ └── application.properties ├── UsersInfoService │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── ru │ │ │ └── itis │ │ │ └── services │ │ │ └── info │ │ │ ├── app │ │ │ └── UserInfoServiceApplication.java │ │ │ └── dto │ │ │ ├── CatDto.java │ │ │ ├── FlagDto.java │ │ │ └── InfoUserDto.java │ │ └── resources │ │ └── application.properties └── ZuulService │ ├── pom.xml │ └── src │ └── main │ ├── java │ └── ru │ │ └── itis │ │ └── gateway │ │ └── app │ │ ├── DocumentationController.java │ │ └── ZuulApplication.java │ └── resources │ ├── application.properties │ └── application.yml ├── 19. Websockets-stomp ├── pom.xml └── src │ └── main │ ├── java │ └── ru │ │ └── itis │ │ └── websockets │ │ ├── app │ │ └── Application.java │ │ ├── config │ │ └── StompWebSocketConfig.java │ │ ├── controllers │ │ └── MessageController.java │ │ └── interceptors │ │ └── CustomInterceptor.java │ └── resources │ └── static │ ├── index.html │ └── js │ └── app.js ├── 20. Prepared Statements ├── README.md ├── images │ ├── 1.png │ ├── 2.png │ ├── 3.png │ ├── 4.png │ ├── 5.png │ ├── 6.png │ ├── 7.png │ └── 8.png ├── pom.xml ├── sql │ └── queries.sql └── src │ └── main │ └── java │ └── MainForPreparedStatements.java ├── 21. Hateoas Rest ├── .gitignore ├── .mvn │ └── wrapper │ │ ├── MavenWrapperDownloader.java │ │ ├── maven-wrapper.jar │ │ └── maven-wrapper.properties ├── mvnw ├── mvnw.cmd ├── pom.xml └── src │ ├── main │ ├── asciidoc │ │ └── apidoc.adoc │ ├── java │ │ └── ru │ │ │ └── itis │ │ │ └── hateoasrest │ │ │ ├── HateoasRestApplication.java │ │ │ ├── config │ │ │ └── CoursesRepresentationProcessor.java │ │ │ ├── controllers │ │ │ └── CoursesController.java │ │ │ ├── models │ │ │ ├── Course.java │ │ │ ├── Lesson.java │ │ │ └── Student.java │ │ │ ├── repositories │ │ │ ├── CoursesRepository.java │ │ │ ├── LessonsRepository.java │ │ │ └── StudentsRepository.java │ │ │ └── services │ │ │ ├── CoursesService.java │ │ │ └── CoursesServiceImpl.java │ └── resources │ │ └── application.properties │ └── test │ └── java │ └── ru │ └── itis │ └── hateoasrest │ ├── CoursesTest.java │ └── HateoasRestApplicationTests.java ├── 22. Covid Service ├── .gitignore ├── .mvn │ └── wrapper │ │ ├── MavenWrapperDownloader.java │ │ ├── maven-wrapper.jar │ │ └── maven-wrapper.properties ├── mvnw ├── mvnw.cmd ├── pom.xml └── src │ ├── main │ ├── java │ │ └── ru │ │ │ └── itis │ │ │ └── covid │ │ │ ├── CovidServiceApplication.java │ │ │ ├── clients │ │ │ ├── Covid19ApiClientWebClientImpl.java │ │ │ ├── CovidClient.java │ │ │ ├── TheVirusTrackerClientWebClientImpl.java │ │ │ └── rest │ │ │ │ ├── Covid19ApiClientRestTemplateImpl.java │ │ │ │ └── TheVirusTrackerClientRestTemplateImpl.java │ │ │ ├── controllers │ │ │ └── CovidController.java │ │ │ ├── entries │ │ │ ├── Covid19ApiRecord.java │ │ │ ├── CovidStatistic.java │ │ │ ├── TheVirusTrackerRecord.java │ │ │ └── TheVirusTrackerResponse.java │ │ │ └── service │ │ │ ├── CovidService.java │ │ │ └── CovidServiceImpl.java │ └── resources │ │ └── application.properties │ └── test │ └── java │ └── ru │ └── itis │ └── covid │ └── CovidServiceApplicationTests.java ├── 23. Rabbit MQ Producers ├── downloaded │ ├── 346d13e7-0e3f-4b07-a313-8c75ef972dcc.jpeg │ ├── dea4123b-b443-49d1-a358-8322e5eb00c8.pdf │ └── f579bd13-05e0-49e5-95cc-4a9ffcc043ef.pdf ├── files.txt ├── images.txt ├── pom.xml └── src │ └── main │ └── java │ └── ru │ └── itis │ ├── example1 │ ├── Consumer.java │ └── Producer.java │ ├── example2 │ ├── ImagesDownloader.java │ └── ImagesProducer.java │ ├── example3 │ ├── ImagesDownloader.java │ └── ImagesProducer.java │ ├── example4 │ ├── ImagesJpegDownloader.java │ ├── ImagesPngDownloader.java │ └── ImagesProducer.java │ ├── example5 │ ├── DocumentsDownloader.java │ ├── FilesAnalytics.java │ ├── FilesProducer.java │ ├── ImagesJpegDownloader.java │ └── ImagesPngDownloader.java │ └── example6 │ ├── Client.java │ ├── MainClient.java │ ├── MainServer.java │ └── Server.java ├── Rest.md └── Spring Security.md /.gitignore: -------------------------------------------------------------------------------- 1 | *.class 2 | 3 | # Mobile Tools for Java (J2ME) 4 | .mtj.tmp/ 5 | 6 | # Package Files # 7 | *.jar 8 | *.war 9 | *.ear 10 | 11 | # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml 12 | hs_err_pid* 13 | .settings/ 14 | .project 15 | .classpath 16 | .springBeans 17 | **/target/ 18 | /commit.txt 19 | /*/logs/ 20 | /*/wrk/ 21 | effective-pom.xml 22 | effective-settings.xml 23 | /*/.gwt/ 24 | .cache 25 | .idea/ 26 | *.iml 27 | *.log 28 | *.lck 29 | *.jar 30 | */dependency-reduced-pom.xml 31 | node_modules 32 | -------------------------------------------------------------------------------- /02. NodeJsExample/app/routes/index.js: -------------------------------------------------------------------------------- 1 | // подключаем модуль users_routes 2 | const usersRoutes = require('./users_routes'); 3 | // создаем функцию для export-а, именно ее вызываем в server.js 4 | module.exports = function(app, fs) { 5 | // вызываем функцию из users_routes для обработки запросов 6 | usersRoutes(app, fs); 7 | }; -------------------------------------------------------------------------------- /02. NodeJsExample/app/routes/users_routes.js: -------------------------------------------------------------------------------- 1 | bodyParser = require('body-parser').json(); 2 | 3 | // описываем фунцию для обработки post-запроса на url /users 4 | module.exports = function (app, fs) { 5 | app.post('/users', bodyParser, function (request, response) { 6 | // вытаскиваю тело в формате JSON 7 | var body = request.body; 8 | console.log(body); 9 | // записываю его в файл 10 | fs.appendFile('data.txt', body.name + ' ' + body.surname + '\n', 11 | function (err) { 12 | if (err) throw err; 13 | console.log('Saved!'); 14 | response.redirect("/html/index.html"); 15 | }); 16 | }); 17 | app.get('/users', function (request, response) { 18 | fs.readFile('data.txt', 'utf-8', function(err, data) { 19 | var lines = data.split('\n'); 20 | 21 | var result = []; 22 | for (var i = 0; i < lines.length; i++) { 23 | result.push({'name' : lines[i].split(' ')[0], 24 | 'surname': lines[i].split(' ')[1]}); 25 | } 26 | response.setHeader('Content-Type', 'application/json'); 27 | response.send(JSON.stringify(result)); 28 | }); 29 | }); 30 | }; -------------------------------------------------------------------------------- /02. NodeJsExample/data.txt: -------------------------------------------------------------------------------- 1 | Марсель Сидиков 2 | Дария Шагиева 3 | Максим Поздеев 4 | Эмиль Пашаев 5 | Ильнур Сагитов 6 | Марат Исангулов 7 | Даша Выпендрежница 8 | -------------------------------------------------------------------------------- /02. NodeJsExample/server.js: -------------------------------------------------------------------------------- 1 | // Объявляем четыре константы, каждая из констант 2 | // содержит модуль из определенной библиотеки 3 | 4 | // для отдачи статики 5 | const express = require('express'); 6 | // создаем экземпляр объекта 7 | const app = express(); 8 | // для работы с файловым хранилищем 9 | const fs = require('fs'); 10 | // для обработки тела post-запросов 11 | const bodyParser = require('body-parser'); 12 | // подключаем его к модулю express 13 | app.use(bodyParser.urlencoded({ extended: true })); 14 | // вызываем функцию для обработки маршутов из папки 15 | // routes (конкретно файл index.js, в эту функцию 16 | // передаем объект express и объект файлового хранилища 17 | require('./app/routes')(app, fs); 18 | // говорим, что раздаем папку public 19 | app.use(express.static('public')); 20 | app.listen(80); 21 | console.log("Server started at 80"); -------------------------------------------------------------------------------- /03. FormExample/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Google IT 5 | 6 | 7 |

Google IT

8 |
9 | 10 | 11 | 12 |
13 | 14 | -------------------------------------------------------------------------------- /04. PizzaService/src/main/java/ru/itis/pizza/app/Application.java: -------------------------------------------------------------------------------- 1 | package ru.itis.pizza.app; 2 | 3 | import java.sql.*; 4 | 5 | /** 6 | * 03.09.2018 7 | * Application 8 | * 9 | * @author Sidikov Marsel (First Software Engineering Platform) 10 | * @version v1.0 11 | */ 12 | public class Application { 13 | // данные для подключения 14 | private static final String USERNAME = "postgres"; 15 | private static final String PASSWORD = "qwerty007"; 16 | private static final String URL = "jdbc:postgresql://localhost:5432/pizza_db"; 17 | 18 | public static void main(String[] args) { 19 | try { 20 | // подключились к базе данных 21 | Connection connection = 22 | DriverManager.getConnection(URL, USERNAME, PASSWORD); 23 | 24 | // создали "Выражение" 25 | Statement statement = connection.createStatement(); 26 | // выполнили запрос к базе данных 27 | // и передали указатель на первую строку результата 28 | // в java-код, а точнее - в объект класса 29 | // resultSet 30 | ResultSet resultSet = 31 | statement.executeQuery("SELECT id, first_name from pizza_user"); 32 | // функция next() переводит указатель дальше, 33 | // и одновременно возвращает true или false, 34 | // в зависимости от того, есть дальше еще строки или нет 35 | while (resultSet.next()) { 36 | // вывели на экран строку "строкового" типа с названием 37 | // first_name 38 | System.out.println(resultSet.getLong("id") + " " + resultSet.getString("first_name")); 39 | } 40 | 41 | } catch (SQLException e) { 42 | throw new IllegalStateException(e); 43 | } 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /04. PizzaService/src/main/java/ru/itis/pizza/app/BuilderDemo.java: -------------------------------------------------------------------------------- 1 | package ru.itis.pizza.app; 2 | 3 | import ru.itis.pizza.models.User; 4 | 5 | /** 6 | * 03.09.2018 7 | * BuilderDemo 8 | * 9 | * @author Sidikov Marsel (First Software Engineering Platform) 10 | * @version v1.0 11 | */ 12 | public class BuilderDemo { 13 | public static void main(String[] args) { 14 | User user = User.builder() 15 | .email("sidikov.marsel@gmail.com") 16 | .firstName("Marsel") 17 | .lastName("Sidikov") 18 | .build(); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /04. PizzaService/src/main/java/ru/itis/pizza/app/OrderRepositoryDemo.java: -------------------------------------------------------------------------------- 1 | package ru.itis.pizza.app; 2 | 3 | import lombok.SneakyThrows; 4 | import ru.itis.pizza.models.Order; 5 | import ru.itis.pizza.models.User; 6 | import ru.itis.pizza.repositories.OrderRepository; 7 | import ru.itis.pizza.repositories.OrderRepositoryConnectionImpl; 8 | import ru.itis.pizza.repositories.UsersRepository; 9 | import ru.itis.pizza.repositories.UsersRepositoryConnectionImpl; 10 | 11 | import java.sql.Connection; 12 | import java.sql.DriverManager; 13 | import java.util.Optional; 14 | 15 | /** 16 | * 10.09.2018 17 | * OrderRepositoryDemo 18 | * 19 | * @author Sidikov Marsel (First Software Engineering Platform) 20 | * @version v1.0 21 | */ 22 | public class OrderRepositoryDemo { 23 | private static final String USERNAME = "postgres"; 24 | private static final String PASSWORD = "qwerty007"; 25 | private static final String URL = "jdbc:postgresql://localhost:5432/pizza_db"; 26 | 27 | @SneakyThrows 28 | public static void main(String[] args) { 29 | Connection connection = 30 | DriverManager.getConnection(URL, USERNAME, PASSWORD); 31 | OrderRepository orderRepository = new OrderRepositoryConnectionImpl(connection); 32 | orderRepository.findOne(5L).ifPresent(System.out::println); 33 | // Optional orderOptional = orderRepository.findOne(5L); 34 | // if (orderOptional.isPresent()) { 35 | // System.out.println(orderOptional.get()); 36 | // } 37 | 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /04. PizzaService/src/main/java/ru/itis/pizza/app/UsersRepositoryDemo.java: -------------------------------------------------------------------------------- 1 | package ru.itis.pizza.app; 2 | 3 | import lombok.SneakyThrows; 4 | import ru.itis.pizza.models.User; 5 | import ru.itis.pizza.repositories.UsersRepository; 6 | import ru.itis.pizza.repositories.UsersRepositoryConnectionImpl; 7 | 8 | import java.sql.Connection; 9 | import java.sql.DriverManager; 10 | import java.util.List; 11 | 12 | /** 13 | * 03.09.2018 14 | * UsersRepositoryDemo 15 | * 16 | * @author Sidikov Marsel (First Software Engineering Platform) 17 | * @version v1.0 18 | */ 19 | public class UsersRepositoryDemo { 20 | 21 | // данные для подключения 22 | private static final String USERNAME = "postgres"; 23 | private static final String PASSWORD = "qwerty007"; 24 | private static final String URL = "jdbc:postgresql://localhost:5432/pizza_db"; 25 | 26 | @SneakyThrows 27 | public static void main(String[] args) { 28 | Connection connection = 29 | DriverManager.getConnection(URL, USERNAME, PASSWORD); 30 | UsersRepository usersRepository = new UsersRepositoryConnectionImpl(connection); 31 | usersRepository.findOne(2L).ifPresent(System.out::println); 32 | List users = usersRepository.findAll(); 33 | int i = 0; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /04. PizzaService/src/main/java/ru/itis/pizza/app/UsersRepositoryFindDemo.java: -------------------------------------------------------------------------------- 1 | package ru.itis.pizza.app; 2 | 3 | import lombok.SneakyThrows; 4 | import ru.itis.pizza.models.User; 5 | import ru.itis.pizza.repositories.UsersRepository; 6 | import ru.itis.pizza.repositories.UsersRepositoryConnectionImpl; 7 | 8 | import java.sql.Connection; 9 | import java.sql.DriverManager; 10 | import java.util.Optional; 11 | 12 | /** 13 | * 01.10.2018 14 | * UsersRepositoryFindDemo 15 | * 16 | * @author Sidikov Marsel (First Software Engineering Platform) 17 | * @version v1.0 18 | */ 19 | public class UsersRepositoryFindDemo { 20 | private static final String USERNAME = "postgres"; 21 | private static final String PASSWORD = "qwerty007"; 22 | private static final String URL = "jdbc:postgresql://localhost:5432/pizza_db"; 23 | 24 | @SneakyThrows 25 | public static void main(String[] args) { 26 | Connection connection = 27 | DriverManager.getConnection(URL, USERNAME, PASSWORD); 28 | UsersRepository usersRepository = new UsersRepositoryConnectionImpl(connection); 29 | Optional optionalUser = usersRepository.findOne(10L); 30 | System.out.println(optionalUser.get()); 31 | 32 | System.out.println(usersRepository.findAll()); 33 | 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /04. PizzaService/src/main/java/ru/itis/pizza/app/UsersRepositorySaveDemo.java: -------------------------------------------------------------------------------- 1 | package ru.itis.pizza.app; 2 | 3 | import lombok.SneakyThrows; 4 | import ru.itis.pizza.models.User; 5 | import ru.itis.pizza.repositories.UsersRepository; 6 | import ru.itis.pizza.repositories.UsersRepositoryConnectionImpl; 7 | 8 | import java.sql.Connection; 9 | import java.sql.DriverManager; 10 | 11 | /** 12 | * 10.09.2018 13 | * UsersRepositorySaveDemo 14 | * 15 | * @author Sidikov Marsel (First Software Engineering Platform) 16 | * @version v1.0 17 | */ 18 | public class UsersRepositorySaveDemo { 19 | private static final String USERNAME = "postgres"; 20 | private static final String PASSWORD = "qwerty007"; 21 | private static final String URL = "jdbc:postgresql://localhost:5432/pizza_db"; 22 | 23 | @SneakyThrows 24 | public static void main(String[] args) { 25 | Connection connection = 26 | DriverManager.getConnection(URL, USERNAME, PASSWORD); 27 | UsersRepository usersRepository = new UsersRepositoryConnectionImpl(connection); 28 | User maxim = User.builder() 29 | .firstName("Максим") 30 | .lastName("Поздеев") 31 | .email("maximka@mail.ru") 32 | .hashPassword("');DROP TABLE pizza; INSERT INTO pizza_user(first_name) values('temp") 33 | .build(); 34 | usersRepository.save(maxim); 35 | 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /04. PizzaService/src/main/java/ru/itis/pizza/context/LocaleListener.java: -------------------------------------------------------------------------------- 1 | package ru.itis.pizza.context; 2 | 3 | import ru.itis.pizza.localization.Localizations; 4 | 5 | import javax.servlet.ServletContext; 6 | import javax.servlet.ServletContextEvent; 7 | import javax.servlet.ServletContextListener; 8 | import java.util.Map; 9 | 10 | /** 11 | * 15.10.2018 12 | * LocaleListener 13 | * 14 | * @author Sidikov Marsel (First Software Engineering Platform) 15 | * @version v1.0 16 | */ 17 | public class LocaleListener implements ServletContextListener { 18 | @Override 19 | public void contextInitialized(ServletContextEvent sce) { 20 | ServletContext context = sce.getServletContext(); 21 | Map localeEn = Localizations.loadLocalization("en"); 22 | Map localeRu = Localizations.loadLocalization("ru"); 23 | Map localePo = Localizations.loadLocalization("po"); 24 | context.setAttribute("localeEn", localeEn); 25 | context.setAttribute("localeRu", localeRu); 26 | context.setAttribute("localePo", localePo); 27 | } 28 | 29 | @Override 30 | public void contextDestroyed(ServletContextEvent sce) { 31 | 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /04. PizzaService/src/main/java/ru/itis/pizza/context/UsersServiceListener.java: -------------------------------------------------------------------------------- 1 | package ru.itis.pizza.context; 2 | 3 | import lombok.SneakyThrows; 4 | import ru.itis.pizza.repositories.UsersRepository; 5 | import ru.itis.pizza.repositories.UsersRepositoryConnectionImpl; 6 | import ru.itis.pizza.services.UsersService; 7 | import ru.itis.pizza.services.UsersServiceImpl; 8 | 9 | import javax.servlet.ServletContext; 10 | import javax.servlet.ServletContextEvent; 11 | import javax.servlet.ServletContextListener; 12 | import java.sql.Connection; 13 | import java.sql.DriverManager; 14 | 15 | /** 16 | * 15.10.2018 17 | * UsersServiceListener 18 | * 19 | * @author Sidikov Marsel (First Software Engineering Platform) 20 | * @version v1.0 21 | */ 22 | public class UsersServiceListener implements ServletContextListener { 23 | 24 | private static final String USERNAME = "postgres"; 25 | private static final String PASSWORD = "qwerty007"; 26 | private static final String URL = "jdbc:postgresql://localhost:5432/pizza_db"; 27 | 28 | @Override 29 | @SneakyThrows 30 | public void contextInitialized(ServletContextEvent sce) { 31 | Class.forName("org.postgresql.Driver"); 32 | Connection connection = 33 | DriverManager.getConnection(URL, USERNAME, PASSWORD); 34 | UsersRepository usersRepository = new UsersRepositoryConnectionImpl(connection); 35 | UsersService usersService = new UsersServiceImpl(usersRepository); 36 | ServletContext context = sce.getServletContext(); 37 | context.setAttribute("usersService", usersService); 38 | } 39 | 40 | @Override 41 | public void contextDestroyed(ServletContextEvent sce) { 42 | 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /04. PizzaService/src/main/java/ru/itis/pizza/forms/LoginForm.java: -------------------------------------------------------------------------------- 1 | package ru.itis.pizza.forms; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | /** 9 | * 01.10.2018 10 | * LoginForm 11 | * 12 | * @author Sidikov Marsel (First Software Engineering Platform) 13 | * @version v1.0 14 | */ 15 | @Data 16 | @AllArgsConstructor 17 | @NoArgsConstructor 18 | @Builder 19 | public class LoginForm { 20 | private String email; 21 | private String password; 22 | } 23 | -------------------------------------------------------------------------------- /04. PizzaService/src/main/java/ru/itis/pizza/forms/UserForm.java: -------------------------------------------------------------------------------- 1 | package ru.itis.pizza.forms; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | /** 9 | * 01.10.2018 10 | * UserForm 11 | * 12 | * @author Sidikov Marsel (First Software Engineering Platform) 13 | * @version v1.0 14 | */ 15 | @Data 16 | @AllArgsConstructor 17 | @NoArgsConstructor 18 | @Builder 19 | public class UserForm { 20 | private String email; 21 | private String password; 22 | private String firstName; 23 | private String lastName; 24 | } 25 | -------------------------------------------------------------------------------- /04. PizzaService/src/main/java/ru/itis/pizza/localization/Localizations.java: -------------------------------------------------------------------------------- 1 | package ru.itis.pizza.localization; 2 | 3 | import lombok.SneakyThrows; 4 | 5 | import java.io.File; 6 | import java.util.HashMap; 7 | import java.util.Map; 8 | import java.util.Scanner; 9 | 10 | /** 11 | * 15.10.2018 12 | * Localizations 13 | * 14 | * @author Sidikov Marsel (First Software Engineering Platform) 15 | * @version v1.0 16 | */ 17 | public class Localizations { 18 | @SneakyThrows 19 | public static Map loadLocalization(String locale) { 20 | Scanner scanner = new Scanner(new File("C:\\Users\\admin.WIN-IPM3OA3VQNQ\\Desktop\\Java\\JAVA_ENTERPRISE_2\\04. PizzaService\\src\\main\\resources\\messages\\messages_" + locale + ".properties")); 21 | 22 | Map localeMap = new HashMap<>(); 23 | 24 | while (scanner.hasNext()) { 25 | String currentValue = scanner.nextLine(); 26 | String localeValue[] = currentValue.split("="); 27 | localeMap.put(localeValue[0], localeValue[1]); 28 | } 29 | 30 | return localeMap; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /04. PizzaService/src/main/java/ru/itis/pizza/mappers/RowMapper.java: -------------------------------------------------------------------------------- 1 | package ru.itis.pizza.mappers; 2 | 3 | import java.sql.ResultSet; 4 | 5 | /** 6 | * 03.09.2018 7 | * RowMapper 8 | * 9 | * @author Sidikov Marsel (First Software Engineering Platform) 10 | * @version v1.0 11 | */ 12 | public interface RowMapper { 13 | T rowMap(ResultSet resultSet); 14 | } 15 | -------------------------------------------------------------------------------- /04. PizzaService/src/main/java/ru/itis/pizza/models/Order.java: -------------------------------------------------------------------------------- 1 | package ru.itis.pizza.models; 2 | 3 | import lombok.*; 4 | 5 | import java.time.LocalDateTime; 6 | import java.util.List; 7 | 8 | /** 9 | * 03.09.2018 10 | * Order 11 | * 12 | * @author Sidikov Marsel (First Software Engineering Platform) 13 | * @version v1.0 14 | */ 15 | @Getter 16 | @Setter 17 | @ToString(exclude = "client") 18 | @EqualsAndHashCode 19 | @Builder 20 | public class Order { 21 | private Long id; 22 | private User client; 23 | private List pizzas; 24 | private String address; 25 | private LocalDateTime dateTime; 26 | } 27 | -------------------------------------------------------------------------------- /04. PizzaService/src/main/java/ru/itis/pizza/models/Pizza.java: -------------------------------------------------------------------------------- 1 | package ru.itis.pizza.models; 2 | 3 | import lombok.*; 4 | 5 | /** 6 | * 03.09.2018 7 | * Pizza 8 | * 9 | * @author Sidikov Marsel (First Software Engineering Platform) 10 | * @version v1.0 11 | */ 12 | @Getter 13 | @Setter 14 | @ToString 15 | @EqualsAndHashCode 16 | @Builder 17 | public class Pizza { 18 | private Long id; 19 | private String name; 20 | private Double price; 21 | } 22 | -------------------------------------------------------------------------------- /04. PizzaService/src/main/java/ru/itis/pizza/repositories/CrudRepository.java: -------------------------------------------------------------------------------- 1 | package ru.itis.pizza.repositories; 2 | 3 | import ru.itis.pizza.models.User; 4 | 5 | import java.util.List; 6 | import java.util.Optional; 7 | 8 | /** 9 | * 03.09.2018 10 | * CrudRepository 11 | * 12 | * @author Sidikov Marsel (First Software Engineering Platform) 13 | * @version v1.0 14 | */ 15 | public interface CrudRepository { 16 | Optional findOne(Long id); 17 | void save(T model); 18 | void delete(Long id); 19 | 20 | List findAll(); 21 | } 22 | -------------------------------------------------------------------------------- /04. PizzaService/src/main/java/ru/itis/pizza/repositories/OrderRepository.java: -------------------------------------------------------------------------------- 1 | package ru.itis.pizza.repositories; 2 | 3 | import ru.itis.pizza.models.Order; 4 | 5 | /** 6 | * 10.09.2018 7 | * OrderRepository 8 | * 9 | * @author Sidikov Marsel (First Software Engineering Platform) 10 | * @version v1.0 11 | */ 12 | public interface OrderRepository extends CrudRepository { 13 | } 14 | -------------------------------------------------------------------------------- /04. PizzaService/src/main/java/ru/itis/pizza/repositories/UsersRepository.java: -------------------------------------------------------------------------------- 1 | package ru.itis.pizza.repositories; 2 | 3 | import ru.itis.pizza.models.User; 4 | 5 | import java.util.List; 6 | import java.util.Optional; 7 | 8 | /** 9 | * 03.09.2018 10 | * UsersRepository 11 | * 12 | * @author Sidikov Marsel (First Software Engineering Platform) 13 | * @version v1.0 14 | */ 15 | public interface UsersRepository extends CrudRepository { 16 | List findAllByFirstName(String firstName); 17 | 18 | Optional findOneByEmail(String email); 19 | } 20 | -------------------------------------------------------------------------------- /04. PizzaService/src/main/java/ru/itis/pizza/services/UsersService.java: -------------------------------------------------------------------------------- 1 | package ru.itis.pizza.services; 2 | 3 | import ru.itis.pizza.forms.LoginForm; 4 | import ru.itis.pizza.forms.UserForm; 5 | 6 | /** 7 | * 01.10.2018 8 | * UsersService 9 | * 10 | * @author Sidikov Marsel (First Software Engineering Platform) 11 | * @version v1.0 12 | */ 13 | public interface UsersService { 14 | void signUp(UserForm userForm); 15 | 16 | void signIn(LoginForm loginForm); 17 | } 18 | -------------------------------------------------------------------------------- /04. PizzaService/src/main/resources/messages/messages_en.properties: -------------------------------------------------------------------------------- 1 | signup.contact.us=Contact us 2 | signup.email=Email 3 | signup.password=Password 4 | signup.firstname=First Name 5 | signup.lastname=Last Name 6 | signup.signup=Sign Up 7 | signin.login.message=Login!!!! 8 | signin.email=Email 9 | signin.password=Password 10 | signin.signin=Login 11 | -------------------------------------------------------------------------------- /04. PizzaService/src/main/resources/messages/messages_po.properties: -------------------------------------------------------------------------------- 1 | signup.contact.us=Poland 2 | signup.email=Poland 3 | signup.password=Poland 4 | signup.firstname=Poland 5 | signup.lastname=Poland 6 | signup.signup=Poland 7 | signin.login.message=Poland 8 | signin.email=Poland 9 | signin.password=Poland 10 | signin.signin=Poland 11 | -------------------------------------------------------------------------------- /04. PizzaService/src/main/resources/messages/messages_ru.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarselSidikov/JAVA_ENTERPRISE_2/0a499cbe9edd566ece80e1efedbfafef374abf80/04. PizzaService/src/main/resources/messages/messages_ru.properties -------------------------------------------------------------------------------- /04. PizzaService/src/main/resources/queries.sql: -------------------------------------------------------------------------------- 1 | select name, order_user.user_name 2 | from pizza 3 | join order_pizza o on pizza.id = o.pizza_id 4 | join (select first_name as user_name, o.id as order_id 5 | from pizza_user 6 | join order_table o on pizza_user.id = o.client_id 7 | ORDER BY user_name) as order_user on order_user.order_id = o.order_id; 8 | -------------------------------------------------------------------------------- /04. PizzaService/src/main/webapp/WEB-INF/web.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | ru.itis.pizza.context.LocaleListener 9 | 10 | 11 | 12 | ru.itis.pizza.context.UsersServiceListener 13 | 14 | -------------------------------------------------------------------------------- /04. PizzaService/src/main/webapp/jsp/signIn.jsp: -------------------------------------------------------------------------------- 1 | <%@ page contentType="text/html;charset=UTF-8" language="java" %> 2 | 3 | 4 | Title 5 | 6 | 7 | 8 |
9 |

${locale.get("signin.login.message")}RU|EN|Po

10 |
11 | 12 | 13 | 14 |
15 |
16 | 17 | 18 | -------------------------------------------------------------------------------- /04. PizzaService/src/main/webapp/jsp/signUp.jsp: -------------------------------------------------------------------------------- 1 | <%@ page contentType="text/html;charset=UTF-8" language="java" %> 2 | 3 | 4 | Title 5 | 6 | 7 | 8 |
9 |

${locale.get("signup.contact.us")}RU|EN|Po

10 |
11 | 12 | 13 | 14 | 15 | 16 |
17 |
18 | 19 | 20 | -------------------------------------------------------------------------------- /05. SimpleWebProject/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | ru.itis 8 | simple-web-project 9 | 0.1 10 | war 11 | 12 | 13 | 14 | 15 | 16 | javax.servlet 17 | javax.servlet-api 18 | 3.0.1 19 | provided 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /05. SimpleWebProject/src/main/java/ru/itis/pizza/servlets/HelloPageServlet.java: -------------------------------------------------------------------------------- 1 | package ru.itis.pizza.servlets; 2 | 3 | import javax.servlet.ServletException; 4 | import javax.servlet.http.HttpServlet; 5 | import javax.servlet.http.HttpServletRequest; 6 | import javax.servlet.http.HttpServletResponse; 7 | import java.io.IOException; 8 | import java.io.PrintWriter; 9 | 10 | /** 11 | * 17.09.2018 12 | * HelloPageServlet 13 | * 14 | * @author Sidikov Marsel (First Software Engineering Platform) 15 | * @version v1.0 16 | */ 17 | public class HelloPageServlet extends HttpServlet { 18 | @Override 19 | protected void doGet(HttpServletRequest request, 20 | HttpServletResponse response) throws ServletException, IOException { 21 | String name = request.getParameter("name"); 22 | PrintWriter writer = response.getWriter(); 23 | 24 | writer.write("

Welcome, Welcome

"); 25 | writer.write("

Hello, " + name + "

"); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /05. SimpleWebProject/src/main/webapp/WEB-INF/web.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | 9 | helloServlet 10 | ru.itis.pizza.servlets.HelloPageServlet 11 | 12 | 13 | 14 | 15 | helloServlet 16 | /hello 17 | 18 | -------------------------------------------------------------------------------- /06. SpringJdbcAndDiExample/src/main/java/ru/itis/pizza/models/User.java: -------------------------------------------------------------------------------- 1 | package ru.itis.pizza.models; 2 | 3 | import lombok.*; 4 | 5 | /** 6 | * 22.10.2018 7 | * User 8 | * 9 | * @author Sidikov Marsel (First Software Engineering Platform) 10 | * @version v1.0 11 | */ 12 | @Data 13 | @AllArgsConstructor 14 | @NoArgsConstructor 15 | @Builder 16 | @EqualsAndHashCode(exclude = "hashPassword") 17 | public class User { 18 | private Long id; 19 | private String firstName; 20 | private String lastName; 21 | private String email; 22 | private String hashPassword; 23 | } 24 | -------------------------------------------------------------------------------- /06. SpringJdbcAndDiExample/src/main/java/ru/itis/pizza/repositories/CrudRepository.java: -------------------------------------------------------------------------------- 1 | package ru.itis.pizza.repositories; 2 | 3 | import java.util.List; 4 | import java.util.Optional; 5 | 6 | /** 7 | * 03.09.2018 8 | * CrudRepository 9 | * 10 | * @author Sidikov Marsel (First Software Engineering Platform) 11 | * @version v1.0 12 | */ 13 | public interface CrudRepository { 14 | Optional findOne(Long id); 15 | void save(T model); 16 | void delete(Long id); 17 | 18 | List findAll(); 19 | } 20 | -------------------------------------------------------------------------------- /06. SpringJdbcAndDiExample/src/main/java/ru/itis/pizza/repositories/UsersRepository.java: -------------------------------------------------------------------------------- 1 | package ru.itis.pizza.repositories; 2 | 3 | import ru.itis.pizza.models.User; 4 | 5 | import java.util.List; 6 | import java.util.Optional; 7 | 8 | /** 9 | * 03.09.2018 10 | * UsersRepository 11 | * 12 | * @author Sidikov Marsel (First Software Engineering Platform) 13 | * @version v1.0 14 | */ 15 | public interface UsersRepository extends CrudRepository { 16 | } 17 | -------------------------------------------------------------------------------- /06. SpringJdbcAndDiExample/src/main/java/ru/itis/pizza/repositories/old/RowMapper.java: -------------------------------------------------------------------------------- 1 | package ru.itis.pizza.repositories.old; 2 | 3 | import java.sql.ResultSet; 4 | 5 | /** 6 | * 03.09.2018 7 | * RowMapper 8 | * 9 | * @author Sidikov Marsel (First Software Engineering Platform) 10 | * @version v1.0 11 | */ 12 | public interface RowMapper { 13 | T rowMap(ResultSet resultSet); 14 | } 15 | -------------------------------------------------------------------------------- /07. Basket Example/src/main/java/ru/itis/app/Main.java: -------------------------------------------------------------------------------- 1 | package ru.itis.app; 2 | 3 | import ru.itis.context.ApplicationContext; 4 | import ru.itis.context.ApplicationContextPrimitiveImpl; 5 | import ru.itis.context.Contexts; 6 | import ru.itis.repositories.UsersRepository; 7 | 8 | /** 9 | * 19.11.2018 10 | * Main 11 | * 12 | * @author Sidikov Marsel (First Software Engineering Platform) 13 | * @version v1.0 14 | */ 15 | public class Main { 16 | public static void main(String[] args) { 17 | ApplicationContext context = Contexts.primitive(); 18 | UsersRepository usersRepository = context.getComponent(UsersRepository.class); 19 | 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /07. Basket Example/src/main/java/ru/itis/context/ApplicationContext.java: -------------------------------------------------------------------------------- 1 | package ru.itis.context; 2 | 3 | /** 4 | * 19.11.2018 5 | * ApplicationContext 6 | * 7 | * @author Sidikov Marsel (First Software Engineering Platform) 8 | * @version v1.0 9 | */ 10 | public interface ApplicationContext { 11 | T getComponent(Class componentClass); 12 | } 13 | -------------------------------------------------------------------------------- /07. Basket Example/src/main/java/ru/itis/context/ApplicationContextPrimitiveImpl.java: -------------------------------------------------------------------------------- 1 | package ru.itis.context; 2 | 3 | import org.springframework.jdbc.datasource.DriverManagerDataSource; 4 | import ru.itis.repositories.UsersRepositoryJdbcTemplateImpl; 5 | 6 | import javax.sql.DataSource; 7 | import java.util.HashMap; 8 | import java.util.Map; 9 | 10 | /** 11 | * 19.11.2018 12 | * ApplicationContextPrimitiveImpl 13 | * 14 | * @author Sidikov Marsel (First Software Engineering Platform) 15 | * @version v1.0 16 | */ 17 | public class ApplicationContextPrimitiveImpl implements ApplicationContext { 18 | private static ApplicationContextPrimitiveImpl context; 19 | 20 | static { 21 | context = new ApplicationContextPrimitiveImpl(); 22 | } 23 | 24 | private Map components; 25 | 26 | private ApplicationContextPrimitiveImpl() { 27 | components = new HashMap<>(); 28 | components.put("dataSource", new DriverManagerDataSource()); 29 | components.put("usersRepository", new UsersRepositoryJdbcTemplateImpl((DataSource) components.get("dataSource"))); 30 | } 31 | 32 | public static ApplicationContextPrimitiveImpl getContext() { 33 | return context; 34 | } 35 | 36 | public T getComponent(Class componentClass) { 37 | for (Object component : components.values()) { 38 | if (componentClass.isAssignableFrom(component.getClass())) { 39 | return (T)component; 40 | } 41 | } 42 | return null; 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /07. Basket Example/src/main/java/ru/itis/context/Contexts.java: -------------------------------------------------------------------------------- 1 | package ru.itis.context; 2 | 3 | /** 4 | * 19.11.2018 5 | * Contexts 6 | * 7 | * @author Sidikov Marsel (First Software Engineering Platform) 8 | * @version v1.0 9 | */ 10 | public class Contexts { 11 | public static ApplicationContextPrimitiveImpl primitive() { 12 | return ApplicationContextPrimitiveImpl.getContext(); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /07. Basket Example/src/main/java/ru/itis/dto/UserDto.java: -------------------------------------------------------------------------------- 1 | package ru.itis.dto; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | import ru.itis.models.User; 8 | 9 | import java.util.List; 10 | import java.util.stream.Collectors; 11 | 12 | /** 13 | * 26.11.2018 14 | * UserDto 15 | * 16 | * @author Sidikov Marsel (First Software Engineering Platform) 17 | * @version v1.0 18 | */ 19 | @Data 20 | @AllArgsConstructor 21 | @NoArgsConstructor 22 | @Builder 23 | public class UserDto { 24 | private String name; 25 | private Integer age; 26 | 27 | public static UserDto from(User user) { 28 | return UserDto.builder() 29 | .age(user.getAge()) 30 | .name(user.getName()) 31 | .build(); 32 | } 33 | 34 | public static List from(List users) { 35 | return users.stream().map(UserDto::from).collect(Collectors.toList()); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /07. Basket Example/src/main/java/ru/itis/forms/SignInForm.java: -------------------------------------------------------------------------------- 1 | package ru.itis.forms; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | /** 9 | * 25.10.2018 10 | * SignInForm 11 | * 12 | * @author Sidikov Marsel (First Software Engineering Platform) 13 | * @version v1.0 14 | */ 15 | @Data 16 | @NoArgsConstructor 17 | @AllArgsConstructor 18 | @Builder 19 | public class SignInForm { 20 | private String name; 21 | private String password; 22 | } 23 | -------------------------------------------------------------------------------- /07. Basket Example/src/main/java/ru/itis/forms/SignUpForm.java: -------------------------------------------------------------------------------- 1 | package ru.itis.forms; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | /** 9 | * 25.10.2018 10 | * SignUpForm 11 | * 12 | * @author Sidikov Marsel (First Software Engineering Platform) 13 | * @version v1.0 14 | */ 15 | @Data 16 | @AllArgsConstructor 17 | @NoArgsConstructor 18 | @Builder 19 | public class SignUpForm { 20 | private String name; 21 | private String password; 22 | private Integer age; 23 | } 24 | -------------------------------------------------------------------------------- /07. Basket Example/src/main/java/ru/itis/listeners/ComponentsListener.java: -------------------------------------------------------------------------------- 1 | package ru.itis.listeners; 2 | 3 | import org.springframework.context.ApplicationContext; 4 | import org.springframework.context.support.ClassPathXmlApplicationContext; 5 | import ru.itis.services.UsersService; 6 | 7 | import javax.servlet.ServletContextEvent; 8 | import javax.servlet.ServletContextListener; 9 | 10 | /** 11 | * 29.10.2018 12 | * ComponentsListener 13 | * 14 | * @author Sidikov Marsel (First Software Engineering Platform) 15 | * @version v1.0 16 | */ 17 | public class ComponentsListener implements ServletContextListener { 18 | @Override 19 | public void contextInitialized(ServletContextEvent sce) { 20 | ApplicationContext context = 21 | new ClassPathXmlApplicationContext("ru.itis/context.xml"); 22 | UsersService usersService = context.getBean(UsersService.class); 23 | 24 | sce.getServletContext().setAttribute("usersService", usersService); 25 | } 26 | 27 | @Override 28 | public void contextDestroyed(ServletContextEvent sce) { 29 | 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /07. Basket Example/src/main/java/ru/itis/models/Auth.java: -------------------------------------------------------------------------------- 1 | package ru.itis.models; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | /** 9 | * 25.10.2018 10 | * Auth 11 | * 12 | * @author Sidikov Marsel (First Software Engineering Platform) 13 | * @version v1.0 14 | */ 15 | @Data 16 | @AllArgsConstructor 17 | @NoArgsConstructor 18 | @Builder 19 | public class Auth { 20 | 21 | private Long id; 22 | private String cookieValue; 23 | private User user; 24 | } 25 | -------------------------------------------------------------------------------- /07. Basket Example/src/main/java/ru/itis/models/Basket.java: -------------------------------------------------------------------------------- 1 | package ru.itis.models; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * 22.10.2018 11 | * Basket 12 | * 13 | * @author Sidikov Marsel (First Software Engineering Platform) 14 | * @version v1.0 15 | */ 16 | @Data 17 | @AllArgsConstructor 18 | @NoArgsConstructor 19 | public class Basket { 20 | private Long id; 21 | private User user; 22 | private List products; 23 | } 24 | 25 | -------------------------------------------------------------------------------- /07. Basket Example/src/main/java/ru/itis/models/Product.java: -------------------------------------------------------------------------------- 1 | package ru.itis.models; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | /** 9 | * 22.10.2018 10 | * Product 11 | * 12 | * @author Sidikov Marsel (First Software Engineering Platform) 13 | * @version v1.0 14 | */ 15 | @Data 16 | @AllArgsConstructor 17 | @NoArgsConstructor 18 | @Builder 19 | public class Product { 20 | private Long id; 21 | private String title; 22 | } 23 | -------------------------------------------------------------------------------- /07. Basket Example/src/main/java/ru/itis/models/User.java: -------------------------------------------------------------------------------- 1 | package ru.itis.models; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | /** 9 | * 22.10.2018 10 | * User 11 | * 12 | * @author Sidikov Marsel (First Software Engineering Platform) 13 | * @version v1.0 14 | */ 15 | @Data 16 | @AllArgsConstructor 17 | @NoArgsConstructor 18 | @Builder 19 | public class User { 20 | private Long id; 21 | private String name; 22 | private String passwordHash; 23 | private Integer age; 24 | } 25 | -------------------------------------------------------------------------------- /07. Basket Example/src/main/java/ru/itis/repositories/AuthRepository.java: -------------------------------------------------------------------------------- 1 | package ru.itis.repositories; 2 | 3 | import ru.itis.models.Auth; 4 | 5 | import java.util.Optional; 6 | 7 | /** 8 | * 25.10.2018 9 | * AuthRepository 10 | * 11 | * @author Sidikov Marsel (First Software Engineering Platform) 12 | * @version v1.0 13 | */ 14 | public interface AuthRepository extends CrudRepository { 15 | Optional findByCookieValue(String cookieValue); 16 | } 17 | -------------------------------------------------------------------------------- /07. Basket Example/src/main/java/ru/itis/repositories/CrudRepository.java: -------------------------------------------------------------------------------- 1 | package ru.itis.repositories; 2 | 3 | import java.util.List; 4 | import java.util.Optional; 5 | 6 | /** 7 | * 22.10.2018 8 | * CrudRepository 9 | * 10 | * @author Sidikov Marsel (First Software Engineering Platform) 11 | * @version v1.0 12 | */ 13 | public interface CrudRepository { 14 | List findAll(); 15 | Optional find(Long id); 16 | void save(T model); 17 | void delete(Long id); 18 | void update(T model); 19 | } 20 | -------------------------------------------------------------------------------- /07. Basket Example/src/main/java/ru/itis/repositories/UsersRepository.java: -------------------------------------------------------------------------------- 1 | package ru.itis.repositories; 2 | 3 | import ru.itis.models.User; 4 | 5 | import java.util.Optional; 6 | 7 | /** 8 | * 22.10.2018 9 | * UsersRepository 10 | * 11 | * @author Sidikov Marsel (First Software Engineering Platform) 12 | * @version v1.0 13 | */ 14 | public interface UsersRepository extends CrudRepository { 15 | Optional findByName(String name); 16 | } 17 | -------------------------------------------------------------------------------- /07. Basket Example/src/main/java/ru/itis/services/ProductsService.java: -------------------------------------------------------------------------------- 1 | package ru.itis.services; 2 | 3 | import ru.itis.models.Product; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * 29.10.2018 9 | * ProductsService 10 | * 11 | * @author Sidikov Marsel (First Software Engineering Platform) 12 | * @version v1.0 13 | */ 14 | public interface ProductsService { 15 | List addProductToUserBasket(String cookieValue, Long productId); 16 | } 17 | -------------------------------------------------------------------------------- /07. Basket Example/src/main/java/ru/itis/services/UsersService.java: -------------------------------------------------------------------------------- 1 | package ru.itis.services; 2 | 3 | import org.springframework.security.core.userdetails.User; 4 | import ru.itis.dto.UserDto; 5 | import ru.itis.forms.SignInForm; 6 | import ru.itis.forms.SignUpForm; 7 | 8 | import javax.swing.text.html.Option; 9 | import java.util.List; 10 | import java.util.Optional; 11 | 12 | /** 13 | * 25.10.2018 14 | * UsersService 15 | * 16 | * @author Sidikov Marsel (First Software Engineering Platform) 17 | * @version v1.0 18 | */ 19 | public interface UsersService { 20 | void signUp(SignUpForm form); 21 | 22 | List findAll(); 23 | 24 | Optional signIn(SignInForm form); 25 | 26 | boolean isExistByCookie(String cookieValue); 27 | } 28 | -------------------------------------------------------------------------------- /07. Basket Example/src/main/java/ru/itis/servlets/MyFreemarkerServlet.java: -------------------------------------------------------------------------------- 1 | package ru.itis.servlets; 2 | 3 | import ru.itis.dto.UserDto; 4 | import ru.itis.services.UsersService; 5 | 6 | import javax.servlet.ServletConfig; 7 | import javax.servlet.ServletException; 8 | import javax.servlet.annotation.WebServlet; 9 | import javax.servlet.http.HttpServlet; 10 | import javax.servlet.http.HttpServletRequest; 11 | import javax.servlet.http.HttpServletResponse; 12 | import java.io.IOException; 13 | import java.util.List; 14 | 15 | /** 16 | * 26.11.2018 17 | * MyFreemarkerServlet 18 | * 19 | * @author Sidikov Marsel (First Software Engineering Platform) 20 | * @version v1.0 21 | */ 22 | @WebServlet(name = "MyFreemarkerServlet", value = "/index") 23 | public class MyFreemarkerServlet extends HttpServlet { 24 | 25 | private UsersService service; 26 | 27 | @Override 28 | public void init(ServletConfig config) throws ServletException { 29 | service = (UsersService) config.getServletContext().getAttribute("usersService"); 30 | } 31 | 32 | @Override 33 | protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 34 | List users = service.findAll(); 35 | req.setAttribute("users", users); 36 | req.getRequestDispatcher("/ftl/index.ftl").forward(req, resp); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /07. Basket Example/src/main/java/ru/itis/servlets/ProductsServlet.java: -------------------------------------------------------------------------------- 1 | package ru.itis.servlets; 2 | 3 | import com.fasterxml.jackson.databind.ObjectMapper; 4 | 5 | import javax.servlet.ServletException; 6 | import javax.servlet.annotation.WebServlet; 7 | import javax.servlet.http.HttpServlet; 8 | import javax.servlet.http.HttpServletRequest; 9 | import javax.servlet.http.HttpServletResponse; 10 | import java.io.IOException; 11 | import java.util.ArrayList; 12 | import java.util.List; 13 | 14 | /** 15 | * 29.10.2018 16 | * ProductsServlet 17 | * 18 | * @author Sidikov Marsel (First Software Engineering Platform) 19 | * @version v1.0 20 | */ 21 | @WebServlet("/products") 22 | public class ProductsServlet extends HttpServlet { 23 | 24 | private List ids = new ArrayList<>(); 25 | 26 | private ObjectMapper objectMapper = new ObjectMapper(); 27 | 28 | @Override 29 | protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 30 | ids.add(Integer.parseInt(request.getParameter("productId"))); 31 | String json = objectMapper.writeValueAsString(ids); 32 | response.setContentType("application/json"); 33 | response.getWriter().write(json); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /07. Basket Example/src/main/java/ru/itis/servlets/ShopServlet.java: -------------------------------------------------------------------------------- 1 | package ru.itis.servlets; 2 | 3 | import javax.servlet.ServletException; 4 | import javax.servlet.annotation.WebServlet; 5 | import javax.servlet.http.HttpServlet; 6 | import javax.servlet.http.HttpServletRequest; 7 | import javax.servlet.http.HttpServletResponse; 8 | import java.io.IOException; 9 | 10 | /** 11 | * 25.10.2018 12 | * ShopServlet 13 | * 14 | * @author Sidikov Marsel (First Software Engineering Platform) 15 | * @version v1.0 16 | */ 17 | @WebServlet("/shop") 18 | public class ShopServlet extends HttpServlet { 19 | @Override 20 | protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 21 | req.getRequestDispatcher("jsp/shop.jsp").forward(req, resp); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /07. Basket Example/src/main/resources/ru.itis/context.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /07. Basket Example/src/main/resources/schema.sql: -------------------------------------------------------------------------------- 1 | create table shop_user ( 2 | id bigserial primary key, 3 | name varchar(30) 4 | ); 5 | 6 | create table product ( 7 | id bigserial primary key, 8 | title varchar(30) 9 | ); 10 | 11 | create table basket ( 12 | id bigserial primary key, 13 | user_id bigint, 14 | foreign key (user_id) references shop_user(id) 15 | ); 16 | 17 | create table basket_product ( 18 | basket_id bigint, 19 | product_id bigint, 20 | foreign key (basket_id) references basket(id), 21 | foreign key (product_id) references product(id) 22 | ); -------------------------------------------------------------------------------- /07. Basket Example/src/main/webapp/ftl/index.ftl: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | FreeMarker test 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | <#list users as user> 16 | 17 | 18 | 19 | 20 | 21 |
NamePrice
${user.name}${user.age}
22 | 23 | -------------------------------------------------------------------------------- /07. Basket Example/src/main/webapp/jsp/shop.jsp: -------------------------------------------------------------------------------- 1 | <%@ page contentType="text/html;charset=UTF-8" language="java" %> 2 | 3 | 4 | 8 | Shop 9 | 10 | 36 | 37 |

SHOP

38 |
39 |

Мыло

40 |
41 |

Веревка

42 |
43 |

Стул

44 |
45 |
46 |
47 | 48 | 49 | -------------------------------------------------------------------------------- /07. Basket Example/src/main/webapp/jsp/signIn.jsp: -------------------------------------------------------------------------------- 1 | <%@ page contentType="text/html;charset=UTF-8" language="java" %> 2 | 3 | 4 | Login 5 | 6 | 7 |
8 |
9 | 10 |
11 | 12 |
13 | 14 |
15 |
16 | 17 | 18 | -------------------------------------------------------------------------------- /07. Basket Example/src/main/webapp/jsp/signUp.jsp: -------------------------------------------------------------------------------- 1 | <%@ page contentType="text/html;charset=UTF-8" language="java" %> 2 | 3 | 4 | Title 5 | 6 | 7 |

Registration

8 |
9 |
10 | 11 |
12 | 13 |
14 | 15 |
16 | 17 |
18 |
19 | 20 | 21 | -------------------------------------------------------------------------------- /08. DiExample/resources/application.properties: -------------------------------------------------------------------------------- 1 | printer.class=ru.itis.PrinterRedImpl 2 | terminal.class=ru.itis.BadTerminalImpl 3 | terminal.amount=100 -------------------------------------------------------------------------------- /08. DiExample/src/ru/itis/BadTerminalImpl.java: -------------------------------------------------------------------------------- 1 | package ru.itis; 2 | 3 | /** 4 | * 29.10.2018 5 | * BadTerminalImpl 6 | * 7 | * @author Sidikov Marsel (First Software Engineering Platform) 8 | * @version v1.0 9 | */ 10 | public class BadTerminalImpl implements Terminal { 11 | 12 | public BadTerminalImpl(Double amount, Printer printer) { 13 | 14 | } 15 | @Override 16 | public double giveMoney(double sum) { 17 | System.out.println("НЕТ ДЕНЕГ, НО ВЫ ДЕРЖИТЕСЬ ТАМ"); 18 | return 0; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /08. DiExample/src/ru/itis/Main.java: -------------------------------------------------------------------------------- 1 | package ru.itis; 2 | 3 | public class Main { 4 | 5 | public static void main(String[] args) { 6 | Terminal terminal = ApplicationContext 7 | .getContext().getComponent(Terminal.class, "terminal"); 8 | terminal.giveMoney(10); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /08. DiExample/src/ru/itis/PlainTerminal.java: -------------------------------------------------------------------------------- 1 | package ru.itis; 2 | 3 | /** 4 | * 29.10.2018 5 | * PlainTerminal 6 | * 7 | * @author Sidikov Marsel (First Software Engineering Platform) 8 | * @version v1.0 9 | */ 10 | public class PlainTerminal implements Terminal { 11 | private double amount; 12 | 13 | private Printer printer; 14 | 15 | public PlainTerminal(Double amount, Printer printer) { 16 | this.amount = amount; 17 | this.printer = printer; 18 | } 19 | 20 | public double giveMoney(double sum) { 21 | if (sum > amount) { 22 | throw new IllegalArgumentException("No money no honey"); 23 | } else { 24 | amount = amount - sum; 25 | printer.print(sum, amount); 26 | return sum; 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /08. DiExample/src/ru/itis/Printer.java: -------------------------------------------------------------------------------- 1 | package ru.itis; 2 | 3 | /** 4 | * 29.10.2018 5 | * Printer 6 | * 7 | * @author Sidikov Marsel (First Software Engineering Platform) 8 | * @version v1.0 9 | */ 10 | public interface Printer { 11 | void print(double sum, double amount); 12 | } 13 | -------------------------------------------------------------------------------- /08. DiExample/src/ru/itis/PrinterRedImpl.java: -------------------------------------------------------------------------------- 1 | package ru.itis; 2 | 3 | /** 4 | * 29.10.2018 5 | * PrinterRedImpl 6 | * 7 | * @author Sidikov Marsel (First Software Engineering Platform) 8 | * @version v1.0 9 | */ 10 | public class PrinterRedImpl implements Printer { 11 | @Override 12 | public void print(double sum, double amount) { 13 | System.err.println("ЗАПРОШЕНО: " + sum); 14 | System.err.println("СКАЗАЛИ ЖЕ ЧТО ОСТАЛОСЬ " + amount + " рублей, нищеброд!"); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /08. DiExample/src/ru/itis/PrinterStandardImpl.java: -------------------------------------------------------------------------------- 1 | package ru.itis; 2 | 3 | /** 4 | * 29.10.2018 5 | * PrinterStandardImpl 6 | * 7 | * @author Sidikov Marsel (First Software Engineering Platform) 8 | * @version v1.0 9 | */ 10 | public class PrinterStandardImpl implements Printer { 11 | 12 | @Override 13 | public void print(double sum, double amount) { 14 | System.out.println("Запрошено: " + sum); 15 | System.out.println("Осталось: " + amount); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /08. DiExample/src/ru/itis/Terminal.java: -------------------------------------------------------------------------------- 1 | package ru.itis; 2 | 3 | /** 4 | * 29.10.2018 5 | * Terminal 6 | * 7 | * @author Sidikov Marsel (First Software Engineering Platform) 8 | * @version v1.0 9 | */ 10 | public interface Terminal { 11 | public double giveMoney(double sum); 12 | } 13 | -------------------------------------------------------------------------------- /08. DiExample/src/ru/itis/TerminalWithCashBack.java: -------------------------------------------------------------------------------- 1 | package ru.itis; 2 | 3 | /** 4 | * 29.10.2018 5 | * TerminalWithCashBack 6 | * 7 | * @author Sidikov Marsel (First Software Engineering Platform) 8 | * @version v1.0 9 | */ 10 | public class TerminalWithCashBack implements Terminal { 11 | private final int CASH_BACK_PERCENT = 5; 12 | 13 | private double amount; 14 | 15 | private Printer printer; 16 | 17 | public TerminalWithCashBack(Double amount, Printer printer) { 18 | this.amount = amount; 19 | this.printer = printer; 20 | } 21 | 22 | public double giveMoney(double sum) { 23 | double newSum = sum + sum * 0.01 * CASH_BACK_PERCENT; 24 | if (newSum > amount) { 25 | throw new IllegalArgumentException("No money no honey"); 26 | } else { 27 | amount = amount - newSum; 28 | printer.print(newSum, amount); 29 | return newSum; 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /09. SpringDemo/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | ru.itis 8 | spring-demo 9 | 0.1 10 | 11 | 12 | 13 | 14 | org.springframework 15 | spring-context 16 | 5.1.3.RELEASE 17 | 18 | 19 | 20 | 21 | 22 | 23 | org.apache.maven.plugins 24 | maven-compiler-plugin 25 | 26 | 8 27 | 8 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /09. SpringDemo/src/main/java/ru/itis/spring/components/BadTerminalImpl.java: -------------------------------------------------------------------------------- 1 | package ru.itis.spring.components; 2 | 3 | /** 4 | * 29.10.2018 5 | * ru.itis.spring.components.BadTerminalImpl 6 | * 7 | * @author Sidikov Marsel (First Software Engineering Platform) 8 | * @version v1.0 9 | */ 10 | public class BadTerminalImpl implements Terminal { 11 | 12 | public BadTerminalImpl(Double amount, Printer printer) { 13 | 14 | } 15 | 16 | @Override 17 | public double giveMoney(double sum) { 18 | System.out.println("НЕТ ДЕНЕГ, НО ВЫ ДЕРЖИТЕСЬ ТАМ"); 19 | return 0; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /09. SpringDemo/src/main/java/ru/itis/spring/components/PlainTerminal.java: -------------------------------------------------------------------------------- 1 | package ru.itis.spring.components; 2 | 3 | /** 4 | * 29.10.2018 5 | * ru.itis.spring.components.PlainTerminal 6 | * 7 | * @author Sidikov Marsel (First Software Engineering Platform) 8 | * @version v1.0 9 | */ 10 | public class PlainTerminal implements Terminal { 11 | private double amount; 12 | 13 | private Printer printer; 14 | 15 | public PlainTerminal(Double amount, Printer printer) { 16 | this.amount = amount; 17 | this.printer = printer; 18 | } 19 | 20 | public double giveMoney(double sum) { 21 | if (sum > amount) { 22 | throw new IllegalArgumentException("No money no honey"); 23 | } else { 24 | amount = amount - sum; 25 | printer.print(sum, amount); 26 | return sum; 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /09. SpringDemo/src/main/java/ru/itis/spring/components/Printer.java: -------------------------------------------------------------------------------- 1 | package ru.itis.spring.components; 2 | 3 | /** 4 | * 29.10.2018 5 | * ru.itis.spring.components.Printer 6 | * 7 | * @author Sidikov Marsel (First Software Engineering Platform) 8 | * @version v1.0 9 | */ 10 | public interface Printer { 11 | void print(double sum, double amount); 12 | } 13 | -------------------------------------------------------------------------------- /09. SpringDemo/src/main/java/ru/itis/spring/components/PrinterRedImpl.java: -------------------------------------------------------------------------------- 1 | package ru.itis.spring.components; 2 | 3 | /** 4 | * 29.10.2018 5 | * ru.itis.spring.components.PrinterRedImpl 6 | * 7 | * @author Sidikov Marsel (First Software Engineering Platform) 8 | * @version v1.0 9 | */ 10 | public class PrinterRedImpl implements Printer { 11 | 12 | private String prefix; 13 | private String name; 14 | 15 | public PrinterRedImpl(String name) { 16 | this.name = name; 17 | } 18 | 19 | public String getPrefix() { 20 | return prefix; 21 | } 22 | 23 | public void setPrefix(String prefix) { 24 | this.prefix = prefix; 25 | } 26 | 27 | @Override 28 | public void print(double sum, double amount) { 29 | System.out.println(name); 30 | System.out.println(prefix); 31 | System.err.println("ЗАПРОШЕНО: " + sum); 32 | System.err.println("СКАЗАЛИ ЖЕ ЧТО ОСТАЛОСЬ " + amount + " рублей, нищеброд!"); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /09. SpringDemo/src/main/java/ru/itis/spring/components/PrinterStandardImpl.java: -------------------------------------------------------------------------------- 1 | package ru.itis.spring.components; 2 | 3 | /** 4 | * 29.10.2018 5 | * ru.itis.spring.components.PrinterStandardImpl 6 | * 7 | * @author Sidikov Marsel (First Software Engineering Platform) 8 | * @version v1.0 9 | */ 10 | public class PrinterStandardImpl implements Printer { 11 | 12 | @Override 13 | public void print(double sum, double amount) { 14 | System.out.println("Запрошено: " + sum); 15 | System.out.println("Осталось: " + amount); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /09. SpringDemo/src/main/java/ru/itis/spring/components/Terminal.java: -------------------------------------------------------------------------------- 1 | package ru.itis.spring.components; 2 | 3 | /** 4 | * 29.10.2018 5 | * ru.itis.spring.components.Terminal 6 | * 7 | * @author Sidikov Marsel (First Software Engineering Platform) 8 | * @version v1.0 9 | */ 10 | public interface Terminal { 11 | public double giveMoney(double sum); 12 | } 13 | -------------------------------------------------------------------------------- /09. SpringDemo/src/main/java/ru/itis/spring/components/TerminalWithCashBack.java: -------------------------------------------------------------------------------- 1 | package ru.itis.spring.components; 2 | 3 | /** 4 | * 29.10.2018 5 | * ru.itis.spring.components.TerminalWithCashBack 6 | * 7 | * @author Sidikov Marsel (First Software Engineering Platform) 8 | * @version v1.0 9 | */ 10 | public class TerminalWithCashBack implements Terminal { 11 | private final int CASH_BACK_PERCENT = 5; 12 | 13 | private double amount; 14 | 15 | private Printer printer; 16 | 17 | public TerminalWithCashBack(Double amount, Printer printer) { 18 | this.amount = amount; 19 | this.printer = printer; 20 | } 21 | 22 | public double giveMoney(double sum) { 23 | double newSum = sum + sum * 0.01 * CASH_BACK_PERCENT; 24 | if (newSum > amount) { 25 | throw new IllegalArgumentException("No money no honey"); 26 | } else { 27 | amount = amount - newSum; 28 | printer.print(newSum, amount); 29 | return newSum; 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /09. SpringDemo/src/main/java/ru/itis/spring/java/JavaConfig.java: -------------------------------------------------------------------------------- 1 | package ru.itis.spring.java; 2 | 3 | import org.springframework.beans.factory.annotation.Value; 4 | import org.springframework.context.annotation.Bean; 5 | import org.springframework.context.annotation.Configuration; 6 | import org.springframework.context.annotation.PropertySource; 7 | import ru.itis.spring.components.*; 8 | 9 | /** 10 | * 10.12.2018 11 | * JavaConfig 12 | * 13 | * @author Sidikov Marsel (First Software Engineering Platform) 14 | * @version v1.0 15 | */ 16 | @Configuration 17 | @PropertySource("classpath:application.properties") 18 | public class JavaConfig { 19 | 20 | @Value("${printer.name}") 21 | private String printerName; 22 | 23 | @Value("${printer.prefix}") 24 | private String printerPrefix; 25 | 26 | @Value("${terminal.amount}") 27 | private Double terminalAmount; 28 | 29 | @Bean 30 | public Terminal terminal() { 31 | return new BadTerminalImpl(terminalAmount, printer()); 32 | } 33 | 34 | @Bean 35 | public Terminal plainTerminal() { 36 | return new PlainTerminal(terminalAmount, printer()); 37 | } 38 | 39 | @Bean 40 | public Printer printer() { 41 | PrinterRedImpl printerRed = new PrinterRedImpl(printerName); 42 | printerRed.setPrefix(printerPrefix); 43 | return printerRed; 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /09. SpringDemo/src/main/java/ru/itis/spring/java/Main.java: -------------------------------------------------------------------------------- 1 | package ru.itis.spring.java; 2 | 3 | import org.springframework.context.ApplicationContext; 4 | import org.springframework.context.annotation.AnnotationConfigApplicationContext; 5 | import ru.itis.spring.components.Printer; 6 | import ru.itis.spring.components.Terminal; 7 | 8 | /** 9 | * 10.12.2018 10 | * Main 11 | * 12 | * @author Sidikov Marsel (First Software Engineering Platform) 13 | * @version v1.0 14 | */ 15 | public class Main { 16 | public static void main(String[] args) { 17 | ApplicationContext context = new 18 | AnnotationConfigApplicationContext(JavaConfig.class); 19 | 20 | Terminal terminal = context.getBean("plainTerminal", Terminal.class); 21 | terminal.giveMoney(50); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /09. SpringDemo/src/main/java/ru/itis/spring/xml/demo/Main.java: -------------------------------------------------------------------------------- 1 | package ru.itis.spring.xml.demo; 2 | 3 | import org.springframework.context.ApplicationContext; 4 | import org.springframework.context.support.ClassPathXmlApplicationContext; 5 | import ru.itis.spring.components.Printer; 6 | 7 | /** 8 | * 03.12.2018 9 | * Main 10 | * 11 | * @author Sidikov Marsel (First Software Engineering Platform) 12 | * @version v1.0 13 | */ 14 | public class Main { 15 | public static void main(String[] args) { 16 | ApplicationContext context = 17 | new ClassPathXmlApplicationContext("context.xml"); 18 | 19 | Printer printer = (Printer)context.getBean("printer"); 20 | printer.print(100, 50); 21 | 22 | 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /09. SpringDemo/src/main/java/ru/itis/spring/xml/dependencies/Main.java: -------------------------------------------------------------------------------- 1 | package ru.itis.spring.xml.dependencies; 2 | 3 | import org.springframework.context.ApplicationContext; 4 | import org.springframework.context.support.ClassPathXmlApplicationContext; 5 | import ru.itis.spring.components.Terminal; 6 | 7 | /** 8 | * 03.12.2018 9 | * Main 10 | * 11 | * @author Sidikov Marsel (First Software Engineering Platform) 12 | * @version v1.0 13 | */ 14 | public class Main { 15 | public static void main(String[] args) { 16 | ApplicationContext context = 17 | new ClassPathXmlApplicationContext("context.xml"); 18 | 19 | Terminal terminal = context.getBean(Terminal.class); 20 | 21 | terminal.giveMoney(200); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /09. SpringDemo/src/main/java/ru/itis/spring/xml/scopes/Main.java: -------------------------------------------------------------------------------- 1 | package ru.itis.spring.xml.scopes; 2 | 3 | import org.springframework.context.ApplicationContext; 4 | import org.springframework.context.support.ClassPathXmlApplicationContext; 5 | import ru.itis.spring.components.PrinterRedImpl; 6 | 7 | /** 8 | * 03.12.2018 9 | * Main 10 | * 11 | * @author Sidikov Marsel (First Software Engineering Platform) 12 | * @version v1.0 13 | */ 14 | public class Main { 15 | public static void main(String[] args) { 16 | ApplicationContext context = 17 | new ClassPathXmlApplicationContext("context.xml"); 18 | 19 | PrinterRedImpl printerRed = (PrinterRedImpl)context.getBean("printer"); 20 | printerRed.print(100, 50); 21 | 22 | printerRed.setPrefix("НОВЫЙ ПРЕФИКС"); 23 | printerRed.print(100, 50); 24 | 25 | PrinterRedImpl otherBean = (PrinterRedImpl)context.getBean("printer"); 26 | otherBean.print(100, 60); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /09. SpringDemo/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | printer.name=MainRedPrinter 2 | printer.prefix=Prefix 3 | terminal.amount=100 -------------------------------------------------------------------------------- /09. SpringDemo/src/main/resources/context.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /10. SpringMvcExample/src/main/java/ru/itis/app/WebInitializer.java: -------------------------------------------------------------------------------- 1 | package ru.itis.app; 2 | 3 | import org.springframework.web.WebApplicationInitializer; 4 | import org.springframework.web.context.ContextLoaderListener; 5 | import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; 6 | import org.springframework.web.servlet.DispatcherServlet; 7 | import ru.itis.config.AppConfig; 8 | import ru.itis.filters.LogFilter; 9 | 10 | import javax.servlet.ServletContext; 11 | import javax.servlet.ServletException; 12 | import javax.servlet.ServletRegistration; 13 | 14 | public class WebInitializer implements WebApplicationInitializer { 15 | @Override 16 | public void onStartup(ServletContext container) throws ServletException { 17 | AnnotationConfigWebApplicationContext context 18 | = new AnnotationConfigWebApplicationContext(); 19 | context.register(AppConfig.class); 20 | 21 | context.setServletContext(container); 22 | DispatcherServlet dispatcherServlet = new DispatcherServlet(context); 23 | ServletRegistration.Dynamic servlet = container.addServlet("dispatcher", dispatcherServlet); 24 | servlet.setLoadOnStartup(1); 25 | servlet.addMapping("/"); 26 | container.addFilter("logFilter", LogFilter.class).addMappingForUrlPatterns(null, false, "/*"); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /10. SpringMvcExample/src/main/java/ru/itis/controllers/deprecateds/UsersControllerDeprecated.java: -------------------------------------------------------------------------------- 1 | package ru.itis.controllers.deprecateds; 2 | 3 | import org.springframework.beans.factory.annotation.Autowired; 4 | import org.springframework.web.servlet.ModelAndView; 5 | import org.springframework.web.servlet.mvc.Controller; 6 | import ru.itis.models.User; 7 | import ru.itis.services.UsersService; 8 | 9 | import javax.servlet.http.HttpServletRequest; 10 | import javax.servlet.http.HttpServletResponse; 11 | import java.util.List; 12 | 13 | /** 14 | * 09.10.2017 15 | * UsersControllerDeprecated 16 | * 17 | * @author Sidikov Marsel (First Software Engineering Platform) 18 | * @version v1.0 19 | */ 20 | public class UsersControllerDeprecated implements Controller { 21 | 22 | @Autowired 23 | private UsersService usersService; 24 | 25 | @Override 26 | public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception { 27 | if (httpServletRequest.getMethod().equals("GET")) { 28 | List users = usersService.getAllUsers(); 29 | ModelAndView modelAndView = new ModelAndView(); 30 | 31 | modelAndView.addObject("users", users); 32 | modelAndView.setViewName("users_page"); 33 | return modelAndView; 34 | } 35 | return null; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /10. SpringMvcExample/src/main/java/ru/itis/filters/LogFilter.java: -------------------------------------------------------------------------------- 1 | package ru.itis.filters; 2 | 3 | import javax.servlet.*; 4 | import java.io.IOException; 5 | 6 | public class LogFilter implements Filter { 7 | 8 | @Override 9 | public void init(FilterConfig filterConfig) throws ServletException { 10 | 11 | } 12 | 13 | @Override 14 | public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { 15 | System.out.println(servletRequest.getRemoteAddr()); 16 | filterChain.doFilter(servletRequest, servletResponse); 17 | } 18 | 19 | @Override 20 | public void destroy() { 21 | 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /10. SpringMvcExample/src/main/java/ru/itis/models/User.java: -------------------------------------------------------------------------------- 1 | package ru.itis.models; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | /** 9 | * 22.10.2018 10 | * User 11 | * 12 | * @author Sidikov Marsel (First Software Engineering Platform) 13 | * @version v1.0 14 | */ 15 | @Data 16 | @AllArgsConstructor 17 | @NoArgsConstructor 18 | @Builder 19 | public class User { 20 | private Long id; 21 | private String name; 22 | private String passwordHash; 23 | private Integer age; 24 | } 25 | -------------------------------------------------------------------------------- /10. SpringMvcExample/src/main/java/ru/itis/repository/CrudRepository.java: -------------------------------------------------------------------------------- 1 | package ru.itis.repository; 2 | 3 | import java.util.List; 4 | import java.util.Optional; 5 | 6 | /** 7 | * 22.10.2018 8 | * CrudRepository 9 | * 10 | * @author Sidikov Marsel (First Software Engineering Platform) 11 | * @version v1.0 12 | */ 13 | public interface CrudRepository { 14 | List findAll(); 15 | Optional find(Long id); 16 | void save(T model); 17 | void delete(Long id); 18 | void update(T model); 19 | } 20 | -------------------------------------------------------------------------------- /10. SpringMvcExample/src/main/java/ru/itis/repository/UsersRepository.java: -------------------------------------------------------------------------------- 1 | package ru.itis.repository; 2 | 3 | import ru.itis.models.User; 4 | 5 | import java.util.Optional; 6 | 7 | /** 8 | * 22.10.2018 9 | * UsersRepository 10 | * 11 | * @author Sidikov Marsel (First Software Engineering Platform) 12 | * @version v1.0 13 | */ 14 | public interface UsersRepository extends CrudRepository { 15 | Optional findByName(String name); 16 | } 17 | -------------------------------------------------------------------------------- /10. SpringMvcExample/src/main/java/ru/itis/services/UsersService.java: -------------------------------------------------------------------------------- 1 | package ru.itis.services; 2 | 3 | import ru.itis.models.User; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * 09.10.2017 9 | * UsersService 10 | * 11 | * @author Sidikov Marsel (First Software Engineering Platform) 12 | * @version v1.0 13 | */ 14 | public interface UsersService { 15 | List getAllUsers(); 16 | 17 | void addUser(User user); 18 | } 19 | -------------------------------------------------------------------------------- /10. SpringMvcExample/src/main/java/ru/itis/services/UsersServiceImpl.java: -------------------------------------------------------------------------------- 1 | package ru.itis.services; 2 | 3 | import org.springframework.beans.factory.annotation.Autowired; 4 | import org.springframework.stereotype.Component; 5 | import ru.itis.repository.UsersRepository; 6 | import ru.itis.models.User; 7 | 8 | import java.util.List; 9 | 10 | /** 11 | * 09.10.2017 12 | * UsersServiceImpl 13 | * 14 | * @author Sidikov Marsel (First Software Engineering Platform) 15 | * @version v1.0 16 | */ 17 | @Component 18 | public class UsersServiceImpl implements UsersService { 19 | 20 | @Autowired 21 | private UsersRepository usersRepository; 22 | 23 | @Override 24 | public List getAllUsers() { 25 | return usersRepository.findAll(); 26 | } 27 | 28 | @Override 29 | public void addUser(User user) { 30 | usersRepository.save(user); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /10. SpringMvcExample/src/main/resources/ru.itis/application.properties: -------------------------------------------------------------------------------- 1 | db.username=postgres 2 | db.password=qwerty007 3 | db.url=jdbc:postgresql://localhost:5432/shop 4 | db.driverClassName=org.postgresql.Driver -------------------------------------------------------------------------------- /10. SpringMvcExample/src/main/webapp/WEB-INF/views/ftl/users_page.ftl: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | <#list users as user> 12 | 13 | 14 | 15 | 16 | 17 |
IDName
${user.id}${user.name}
18 |
19 | 20 | 21 | 22 |
23 | 24 | -------------------------------------------------------------------------------- /10. SpringMvcExample/src/main/webapp/WEB-INF/views/jsp/users_page.jsp: -------------------------------------------------------------------------------- 1 | <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 2 | <%@page contentType="text/html" pageEncoding="UTF-8"%> 3 | 4 | 5 | Владельцы машин 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 |
IDName
${user.id}${user.name}
20 |
21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | -------------------------------------------------------------------------------- /11. SpringConfigs/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | ru.itis 8 | spring-configs 9 | 0.1 10 | 11 | 12 | 13 | 14 | org.springframework 15 | spring-context 16 | 5.1.3.RELEASE 17 | 18 | 19 | 20 | com.google.guava 21 | guava 22 | 27.0.1-jre 23 | 24 | 25 | 26 | 27 | 28 | 29 | org.apache.maven.plugins 30 | maven-compiler-plugin 31 | 32 | 8 33 | 8 34 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /11. SpringConfigs/src/main/java/ru/itis/Main.java: -------------------------------------------------------------------------------- 1 | package ru.itis; 2 | 3 | import org.springframework.context.ApplicationContext; 4 | import org.springframework.context.annotation.AnnotationConfigApplicationContext; 5 | import org.springframework.context.support.ClassPathXmlApplicationContext; 6 | import ru.itis.config.AppAnnotationConfig; 7 | 8 | /** 9 | * 04.03.2019 10 | * ru.itis.Main 11 | * 12 | * @author Sidikov Marsel (First Software Engineering Platform) 13 | * @version v1.0 14 | */ 15 | public class Main { 16 | public static void main(String[] args) { 17 | ApplicationContext context = new AnnotationConfigApplicationContext(AppAnnotationConfig.class); 18 | StringsService service = context.getBean(StringsService.class); 19 | 20 | System.out.println(service.getRandomString()); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /11. SpringConfigs/src/main/java/ru/itis/StringsRepository.java: -------------------------------------------------------------------------------- 1 | package ru.itis; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * 04.03.2019 7 | * ru.itis.StringsRepository 8 | * 9 | * @author Sidikov Marsel (First Software Engineering Platform) 10 | * @version v1.0 11 | */ 12 | public interface StringsRepository { 13 | List findAll(); 14 | } 15 | -------------------------------------------------------------------------------- /11. SpringConfigs/src/main/java/ru/itis/StringsRepositoryEnglishFakeImpl.java: -------------------------------------------------------------------------------- 1 | package ru.itis; 2 | 3 | import com.google.common.collect.Lists; 4 | import org.springframework.stereotype.Component; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * 04.03.2019 10 | * ru.itis.StringsRepositoryEnglishFakeImpl 11 | * 12 | * @author Sidikov Marsel (First Software Engineering Platform) 13 | * @version v1.0 14 | */ 15 | @Component("stringsRepositoryEnglish") 16 | public class StringsRepositoryEnglishFakeImpl implements StringsRepository { 17 | 18 | @Override 19 | public List findAll() { 20 | return Lists.newArrayList("Hello", "Bye", "Marsel"); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /11. SpringConfigs/src/main/java/ru/itis/StringsRepositoryRussianFakeImpl.java: -------------------------------------------------------------------------------- 1 | package ru.itis; 2 | 3 | import com.google.common.collect.Lists; 4 | import org.springframework.stereotype.Component; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * 04.03.2019 10 | * ru.itis.StringsRepositoryRussianFakeImpl 11 | * 12 | * @author Sidikov Marsel (First Software Engineering Platform) 13 | * @version v1.0 14 | */ 15 | @Component("stringsRepositoryRussian") 16 | public class StringsRepositoryRussianFakeImpl implements StringsRepository { 17 | @Override 18 | public List findAll() { 19 | return Lists.newArrayList("Привет", "Пока", "Марсель"); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /11. SpringConfigs/src/main/java/ru/itis/StringsService.java: -------------------------------------------------------------------------------- 1 | package ru.itis; 2 | 3 | /** 4 | * 04.03.2019 5 | * ru.itis.StringsService 6 | * 7 | * @author Sidikov Marsel (First Software Engineering Platform) 8 | * @version v1.0 9 | */ 10 | public interface StringsService { 11 | String getRandomString(); 12 | } 13 | -------------------------------------------------------------------------------- /11. SpringConfigs/src/main/java/ru/itis/StringsServiceImpl.java: -------------------------------------------------------------------------------- 1 | package ru.itis; 2 | 3 | import org.springframework.beans.factory.annotation.Autowired; 4 | import org.springframework.beans.factory.annotation.Qualifier; 5 | import org.springframework.stereotype.Component; 6 | 7 | import java.util.List; 8 | import java.util.Random; 9 | 10 | /** 11 | * 04.03.2019 12 | * ru.itis.StringsServiceImpl 13 | * 14 | * @author Sidikov Marsel (First Software Engineering Platform) 15 | * @version v1.0 16 | */ 17 | @Component 18 | public class StringsServiceImpl implements StringsService { 19 | 20 | @Autowired 21 | @Qualifier("stringsRepositoryEnglish") 22 | private StringsRepository stringsRepository; 23 | 24 | private Random random; 25 | 26 | public StringsServiceImpl() { 27 | this.random = new Random(); 28 | } 29 | 30 | @Override 31 | public String getRandomString() { 32 | List allStrings = stringsRepository.findAll(); 33 | return allStrings.get(random.nextInt(allStrings.size())); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /11. SpringConfigs/src/main/java/ru/itis/config/AppAnnotationConfig.java: -------------------------------------------------------------------------------- 1 | package ru.itis.config; 2 | 3 | import org.springframework.context.annotation.Bean; 4 | import org.springframework.context.annotation.ComponentScan; 5 | import org.springframework.context.annotation.Configuration; 6 | import ru.itis.StringsRepository; 7 | import ru.itis.StringsRepositoryEnglishFakeImpl; 8 | import ru.itis.StringsRepositoryRussianFakeImpl; 9 | 10 | /** 11 | * 04.03.2019 12 | * AnnotationConfig 13 | * 14 | * @author Sidikov Marsel (First Software Engineering Platform) 15 | * @version v1.0 16 | */ 17 | @Configuration 18 | @ComponentScan("ru.itis") 19 | public class AppAnnotationConfig { 20 | 21 | } 22 | -------------------------------------------------------------------------------- /12. Hibernate Demo/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | ru.itis 8 | hibernate-demo 9 | 0.1 10 | 11 | 12 | 13 | org.apache.maven.plugins 14 | maven-compiler-plugin 15 | 16 | 8 17 | 8 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | org.hibernate 26 | hibernate-core 27 | 5.4.2.Final 28 | 29 | 30 | 31 | org.postgresql 32 | postgresql 33 | 42.2.5 34 | 35 | 36 | org.projectlombok 37 | lombok 38 | 1.16.18 39 | provided 40 | 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /12. Hibernate Demo/src/main/java/ru/itis/app/Main.java: -------------------------------------------------------------------------------- 1 | package ru.itis.app; 2 | 3 | import org.hibernate.Session; 4 | import org.hibernate.SessionFactory; 5 | import org.hibernate.Transaction; 6 | import org.hibernate.cfg.Configuration; 7 | import ru.itis.models.Course; 8 | import ru.itis.models.User; 9 | 10 | import java.util.ArrayList; 11 | import java.util.HashSet; 12 | import java.util.List; 13 | import java.util.Set; 14 | 15 | public class Main { 16 | public static void main(String[] args) { 17 | // TODO: можно и java-классом 18 | Configuration configuration = new Configuration().configure(); 19 | SessionFactory sessionFactory = configuration.buildSessionFactory(); 20 | Session session = sessionFactory.openSession(); 21 | Transaction transaction = session.beginTransaction(); 22 | User user = User.builder() 23 | .firstName("Марсель") 24 | .lastName("Сидиков") 25 | .build(); 26 | 27 | Course java = Course.builder() 28 | .title("Разработка корпоративных приложений") 29 | .description("Работаем") 30 | .build(); 31 | 32 | Course js = Course.builder() 33 | .title("Разработка на JS") 34 | .description("Чуть меньше работаем.") 35 | .build(); 36 | 37 | Set courses = new HashSet<>(); 38 | courses.add(js); 39 | courses.add(java); 40 | user.setCourses(courses); 41 | 42 | session.save(user); 43 | 44 | user.setFirstName("Максим"); 45 | session.save(user); 46 | transaction.commit(); 47 | session.close(); 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /12. Hibernate Demo/src/main/java/ru/itis/models/Course.java: -------------------------------------------------------------------------------- 1 | package ru.itis.models; 2 | 3 | import lombok.*; 4 | 5 | import java.util.List; 6 | import java.util.Set; 7 | 8 | @Data 9 | @AllArgsConstructor 10 | @NoArgsConstructor 11 | @Builder 12 | @EqualsAndHashCode(exclude = {"students", "lessons"}) 13 | public class Course { 14 | private Long id; 15 | private String title; 16 | private String description; 17 | 18 | private Set students; 19 | private List lessons; 20 | } 21 | -------------------------------------------------------------------------------- /12. Hibernate Demo/src/main/java/ru/itis/models/Lesson.java: -------------------------------------------------------------------------------- 1 | package ru.itis.models; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | import java.time.LocalDateTime; 9 | import java.time.LocalTime; 10 | 11 | @Data 12 | @AllArgsConstructor 13 | @NoArgsConstructor 14 | @Builder 15 | public class Lesson { 16 | private Long id; 17 | 18 | private LocalTime beginTime; 19 | private LocalTime endTime; 20 | 21 | private Course course; 22 | } 23 | -------------------------------------------------------------------------------- /12. Hibernate Demo/src/main/java/ru/itis/models/User.java: -------------------------------------------------------------------------------- 1 | package ru.itis.models; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | import java.util.List; 9 | import java.util.Set; 10 | 11 | @Data 12 | @NoArgsConstructor 13 | @AllArgsConstructor 14 | @Builder 15 | public class User { 16 | private Long id; 17 | private String firstName; 18 | private String lastName; 19 | 20 | private Set courses; 21 | } 22 | -------------------------------------------------------------------------------- /12. Hibernate Demo/src/main/resources/Course.hbm.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /12. Hibernate Demo/src/main/resources/Lesson.hbm.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /12. Hibernate Demo/src/main/resources/User.hbm.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /12. Hibernate Demo/src/main/resources/hibernate.cfg.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | 7 | org.postgresql.Driver 8 | jdbc:postgresql://localhost:5432/hibernate_demo 9 | postgres 10 | qwerty007 11 | org.hibernate.dialect.PostgreSQL95Dialect 12 | true 13 | update 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /13. SpringBootDemo/.gitignore: -------------------------------------------------------------------------------- 1 | HELP.md 2 | /target/ 3 | !.mvn/wrapper/maven-wrapper.jar 4 | 5 | ### STS ### 6 | .apt_generated 7 | .classpath 8 | .factorypath 9 | .project 10 | .settings 11 | .springBeans 12 | .sts4-cache 13 | 14 | ### IntelliJ IDEA ### 15 | .idea 16 | *.iws 17 | *.iml 18 | *.ipr 19 | 20 | ### NetBeans ### 21 | /nbproject/private/ 22 | /nbbuild/ 23 | /dist/ 24 | /nbdist/ 25 | /.nb-gradle/ 26 | /build/ 27 | 28 | ### VS Code ### 29 | .vscode/ 30 | -------------------------------------------------------------------------------- /13. SpringBootDemo/.mvn/wrapper/maven-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarselSidikov/JAVA_ENTERPRISE_2/0a499cbe9edd566ece80e1efedbfafef374abf80/13. SpringBootDemo/.mvn/wrapper/maven-wrapper.jar -------------------------------------------------------------------------------- /13. SpringBootDemo/.mvn/wrapper/maven-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.0/apache-maven-3.6.0-bin.zip 2 | -------------------------------------------------------------------------------- /13. SpringBootDemo/src/main/java/ru/itis/springbootdemo/SpringBootDemoApplication.java: -------------------------------------------------------------------------------- 1 | package ru.itis.springbootdemo; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class SpringBootDemoApplication { 8 | 9 | public static void main(String[] args) { 10 | SpringApplication.run(SpringBootDemoApplication.class, args); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /13. SpringBootDemo/src/main/java/ru/itis/springbootdemo/controllers/RootController.java: -------------------------------------------------------------------------------- 1 | package ru.itis.springbootdemo.controllers; 2 | 3 | import org.springframework.beans.factory.annotation.Autowired; 4 | import org.springframework.stereotype.Controller; 5 | import org.springframework.ui.ModelMap; 6 | import org.springframework.web.bind.annotation.GetMapping; 7 | import ru.itis.springbootdemo.models.User; 8 | import ru.itis.springbootdemo.repositories.UsersRepository; 9 | 10 | import java.util.List; 11 | 12 | @Controller 13 | public class RootController { 14 | 15 | @Autowired 16 | private UsersRepository usersRepository; 17 | 18 | @GetMapping("/") 19 | public String getRootPage(ModelMap model) { 20 | List users = usersRepository.findAll(); 21 | model.addAttribute("user", users.get(0)); 22 | return "index"; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /13. SpringBootDemo/src/main/java/ru/itis/springbootdemo/controllers/SimpleRestController.java: -------------------------------------------------------------------------------- 1 | package ru.itis.springbootdemo.controllers; 2 | 3 | import org.springframework.beans.factory.annotation.Autowired; 4 | import org.springframework.http.ResponseEntity; 5 | import org.springframework.web.bind.annotation.GetMapping; 6 | import org.springframework.web.bind.annotation.RestController; 7 | import ru.itis.springbootdemo.models.User; 8 | import ru.itis.springbootdemo.repositories.UsersRepository; 9 | 10 | import java.util.List; 11 | 12 | @RestController 13 | public class SimpleRestController { 14 | 15 | @Autowired 16 | private UsersRepository usersRepository; 17 | 18 | @GetMapping("/users") 19 | public ResponseEntity> getUsers() { 20 | return ResponseEntity.ok(usersRepository.findAll()) ; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /13. SpringBootDemo/src/main/java/ru/itis/springbootdemo/models/User.java: -------------------------------------------------------------------------------- 1 | package ru.itis.springbootdemo.models; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | import javax.persistence.*; 9 | 10 | /** 11 | * 22.10.2018 12 | * User 13 | * 14 | * @author Sidikov Marsel (First Software Engineering Platform) 15 | * @version v1.0 16 | */ 17 | @Data 18 | @AllArgsConstructor 19 | @NoArgsConstructor 20 | @Builder 21 | @Entity 22 | @Table(name = "shop_user") 23 | public class User { 24 | 25 | @Id 26 | @GeneratedValue(strategy = GenerationType.IDENTITY) 27 | private Long id; 28 | 29 | private String firstName; 30 | private String lastName; 31 | private String passwordHash; 32 | } 33 | -------------------------------------------------------------------------------- /13. SpringBootDemo/src/main/java/ru/itis/springbootdemo/repositories/UsersRepository.java: -------------------------------------------------------------------------------- 1 | package ru.itis.springbootdemo.repositories; 2 | 3 | import org.springframework.data.jpa.repository.JpaRepository; 4 | import org.springframework.data.jpa.repository.Query; 5 | import ru.itis.springbootdemo.models.User; 6 | 7 | import java.util.Optional; 8 | 9 | public interface UsersRepository extends JpaRepository { 10 | Optional findOneByFirstName(String firstName); 11 | } 12 | -------------------------------------------------------------------------------- /13. SpringBootDemo/src/main/java/ru/itis/springbootdemo/repositories/UsersRepositoryJdbcTemplateImpl.java: -------------------------------------------------------------------------------- 1 | package ru.itis.springbootdemo.repositories; 2 | 3 | import org.springframework.beans.factory.annotation.Autowired; 4 | import org.springframework.jdbc.core.JdbcTemplate; 5 | import org.springframework.stereotype.Repository; 6 | 7 | @Repository 8 | public class UsersRepositoryJdbcTemplateImpl { 9 | 10 | @Autowired 11 | private JdbcTemplate jdbcTemplate; 12 | } 13 | -------------------------------------------------------------------------------- /13. SpringBootDemo/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | spring.datasource.password=qwerty007 2 | spring.datasource.username=postgres 3 | spring.datasource.url=jdbc:postgresql://localhost:5432/shop 4 | spring.datasource.driver-class-name=org.postgresql.Driver 5 | server.port=80 6 | spring.jpa.hibernate.ddl-auto=update 7 | spring.jpa.show-sql=true -------------------------------------------------------------------------------- /13. SpringBootDemo/src/main/resources/templates/index.ftl: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 7 | 8 | Document 9 | 10 | 11 |
12 |

${user.firstName}

13 |
14 | 15 | -------------------------------------------------------------------------------- /13. SpringBootDemo/src/test/java/ru/itis/springbootdemo/SpringBootDemoApplicationTests.java: -------------------------------------------------------------------------------- 1 | package ru.itis.springbootdemo; 2 | 3 | import org.junit.Test; 4 | import org.junit.runner.RunWith; 5 | import org.springframework.boot.test.context.SpringBootTest; 6 | import org.springframework.test.context.junit4.SpringRunner; 7 | 8 | @RunWith(SpringRunner.class) 9 | @SpringBootTest 10 | public class SpringBootDemoApplicationTests { 11 | 12 | @Test 13 | public void contextLoads() { 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /14. SpringBootSecurity/.mvn/wrapper/maven-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.0/apache-maven-3.6.0-bin.zip 2 | -------------------------------------------------------------------------------- /14. SpringBootSecurity/HELP.md: -------------------------------------------------------------------------------- 1 | # Getting Started 2 | 3 | ### Guides 4 | The following guides illustrate how to use some features concretely: 5 | 6 | * [Building a RESTful Web Service](https://spring.io/guides/gs/rest-service/) 7 | * [Serving Web Content with Spring MVC](https://spring.io/guides/gs/serving-web-content/) 8 | * [Building REST services with Spring](https://spring.io/guides/tutorials/bookmarks/) 9 | * [Accessing Data with JPA](https://spring.io/guides/gs/accessing-data-jpa/) 10 | * [Accessing Relational Data using JDBC with Spring](https://spring.io/guides/gs/relational-data-access/) 11 | * [Managing Transactions](https://spring.io/guides/gs/managing-transactions/) 12 | 13 | -------------------------------------------------------------------------------- /14. SpringBootSecurity/src/main/java/ru/itis/springbootapp/SpringBootAppApplication.java: -------------------------------------------------------------------------------- 1 | package ru.itis.springbootapp; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import org.springframework.context.annotation.Bean; 6 | import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; 7 | import org.springframework.security.crypto.password.PasswordEncoder; 8 | 9 | @SpringBootApplication 10 | public class SpringBootAppApplication { 11 | 12 | public static void main(String[] args) { 13 | SpringApplication.run(SpringBootAppApplication.class, args); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /14. SpringBootSecurity/src/main/java/ru/itis/springbootapp/controllers/HelloController.java: -------------------------------------------------------------------------------- 1 | package ru.itis.springbootapp.controllers; 2 | 3 | import org.springframework.security.core.Authentication; 4 | import org.springframework.stereotype.Controller; 5 | import org.springframework.web.bind.annotation.GetMapping; 6 | import org.springframework.web.bind.annotation.ResponseBody; 7 | import ru.itis.springbootapp.models.User; 8 | import ru.itis.springbootapp.security.UserDetailsImpl; 9 | 10 | @Controller 11 | public class HelloController { 12 | 13 | @GetMapping("/hello") 14 | @ResponseBody 15 | public String getHello(Authentication authentication) { 16 | UserDetailsImpl userDetails = (UserDetailsImpl) authentication.getPrincipal(); 17 | User user = userDetails.getUser(); 18 | System.out.println(user); 19 | return "Hello"; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /14. SpringBootSecurity/src/main/java/ru/itis/springbootapp/controllers/SignInController.java: -------------------------------------------------------------------------------- 1 | package ru.itis.springbootapp.controllers; 2 | 3 | import org.springframework.stereotype.Controller; 4 | import org.springframework.ui.ModelMap; 5 | import org.springframework.web.bind.annotation.GetMapping; 6 | 7 | import javax.servlet.http.HttpServletRequest; 8 | import java.util.ArrayList; 9 | import java.util.List; 10 | 11 | @Controller 12 | public class SignInController { 13 | 14 | @GetMapping("/signIn") 15 | public String getSignInPage(HttpServletRequest request, ModelMap model) { 16 | if (request.getParameterMap().containsKey("error")) { 17 | model.addAttribute("error", "error"); 18 | } 19 | return "sign_in"; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /14. SpringBootSecurity/src/main/java/ru/itis/springbootapp/controllers/SignUpController.java: -------------------------------------------------------------------------------- 1 | package ru.itis.springbootapp.controllers; 2 | 3 | import org.springframework.beans.factory.annotation.Autowired; 4 | import org.springframework.stereotype.Controller; 5 | import org.springframework.web.bind.annotation.GetMapping; 6 | import org.springframework.web.bind.annotation.PostMapping; 7 | import ru.itis.springbootapp.forms.SignUpForm; 8 | import ru.itis.springbootapp.services.SignUpService; 9 | 10 | @Controller 11 | public class SignUpController { 12 | 13 | @Autowired 14 | private SignUpService signUpService; 15 | 16 | @GetMapping("/signUp") 17 | public String getSignUpPage() { 18 | return "sign_up"; 19 | } 20 | 21 | @PostMapping("/signUp") 22 | public String signUpUser(SignUpForm signUpForm) { 23 | signUpService.signUp(signUpForm); 24 | return "redirect:/signIn"; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /14. SpringBootSecurity/src/main/java/ru/itis/springbootapp/controllers/UsersController.java: -------------------------------------------------------------------------------- 1 | package ru.itis.springbootapp.controllers; 2 | 3 | import org.springframework.beans.factory.annotation.Autowired; 4 | import org.springframework.http.ResponseEntity; 5 | import org.springframework.stereotype.Controller; 6 | import org.springframework.web.bind.annotation.GetMapping; 7 | import org.springframework.web.bind.annotation.PathVariable; 8 | import org.springframework.web.bind.annotation.PostMapping; 9 | import org.springframework.web.bind.annotation.ResponseBody; 10 | import ru.itis.springbootapp.forms.UserForm; 11 | import ru.itis.springbootapp.models.User; 12 | import ru.itis.springbootapp.repositories.UsersRepository; 13 | 14 | import java.util.Optional; 15 | 16 | @Controller 17 | public class UsersController { 18 | 19 | @Autowired 20 | private UsersRepository usersRepository; 21 | 22 | @GetMapping("/users") 23 | public String getUsersPage() { 24 | return "users"; 25 | } 26 | 27 | @PostMapping("/users/{user-id}") 28 | @ResponseBody 29 | public ResponseEntity updateUser(@PathVariable("user-id") Long userId, UserForm userForm) { 30 | Optional userCandidate = usersRepository.findById(userId); 31 | if (userCandidate.isPresent()) { 32 | User user = userCandidate.get(); 33 | user.setFirstName(userForm.getFirstName()); 34 | user.setLastName(userForm.getFirstName()); 35 | usersRepository.save(user); 36 | return ResponseEntity.ok().build(); 37 | } else { 38 | return ResponseEntity.notFound().build(); 39 | } 40 | 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /14. SpringBootSecurity/src/main/java/ru/itis/springbootapp/forms/SignUpForm.java: -------------------------------------------------------------------------------- 1 | package ru.itis.springbootapp.forms; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class SignUpForm { 7 | private String email; 8 | private String password; 9 | private String firstName; 10 | private String lastName; 11 | } 12 | -------------------------------------------------------------------------------- /14. SpringBootSecurity/src/main/java/ru/itis/springbootapp/forms/UserForm.java: -------------------------------------------------------------------------------- 1 | package ru.itis.springbootapp.forms; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class UserForm { 7 | private String firstName; 8 | private String lastName; 9 | } 10 | -------------------------------------------------------------------------------- /14. SpringBootSecurity/src/main/java/ru/itis/springbootapp/models/User.java: -------------------------------------------------------------------------------- 1 | package ru.itis.springbootapp.models; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | import javax.persistence.*; 9 | 10 | /** 11 | * 22.10.2018 12 | * User 13 | * 14 | * @author Sidikov Marsel (First Software Engineering Platform) 15 | * @version v1.0 16 | */ 17 | @Data 18 | @AllArgsConstructor 19 | @NoArgsConstructor 20 | @Builder 21 | @Entity 22 | @Table(name = "shop_user") 23 | public class User { 24 | 25 | @Id 26 | @GeneratedValue(strategy = GenerationType.IDENTITY) 27 | private Long id; 28 | 29 | private String email; 30 | 31 | @Column(length = 300) 32 | private String passwordHash; 33 | 34 | private String firstName; 35 | private String lastName; 36 | } 37 | -------------------------------------------------------------------------------- /14. SpringBootSecurity/src/main/java/ru/itis/springbootapp/repositories/UsersRepository.java: -------------------------------------------------------------------------------- 1 | package ru.itis.springbootapp.repositories; 2 | 3 | import org.springframework.data.jpa.repository.JpaRepository; 4 | import ru.itis.springbootapp.models.User; 5 | 6 | import java.util.Optional; 7 | 8 | public interface UsersRepository extends JpaRepository { 9 | Optional findOneByEmail(String email); 10 | } 11 | -------------------------------------------------------------------------------- /14. SpringBootSecurity/src/main/java/ru/itis/springbootapp/security/UserDetailsImpl.java: -------------------------------------------------------------------------------- 1 | package ru.itis.springbootapp.security; 2 | 3 | import org.springframework.security.core.GrantedAuthority; 4 | import org.springframework.security.core.userdetails.UserDetails; 5 | import ru.itis.springbootapp.models.User; 6 | 7 | import java.util.Collection; 8 | 9 | public class UserDetailsImpl implements UserDetails { 10 | 11 | private User user; 12 | 13 | public UserDetailsImpl(User user) { 14 | this.user = user; 15 | } 16 | 17 | @Override 18 | public Collection getAuthorities() { 19 | return null; 20 | } 21 | 22 | @Override 23 | public String getPassword() { 24 | return user.getPasswordHash(); 25 | } 26 | 27 | @Override 28 | public String getUsername() { 29 | return user.getEmail(); 30 | } 31 | 32 | @Override 33 | public boolean isAccountNonExpired() { 34 | return true; 35 | } 36 | 37 | @Override 38 | public boolean isAccountNonLocked() { 39 | return true; 40 | } 41 | 42 | @Override 43 | public boolean isCredentialsNonExpired() { 44 | return true; 45 | } 46 | 47 | @Override 48 | public boolean isEnabled() { 49 | return true; 50 | } 51 | 52 | public User getUser() { 53 | return user; 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /14. SpringBootSecurity/src/main/java/ru/itis/springbootapp/security/UserDetailsServiceImpl.java: -------------------------------------------------------------------------------- 1 | package ru.itis.springbootapp.security; 2 | 3 | import org.springframework.beans.factory.annotation.Autowired; 4 | import org.springframework.security.core.AuthenticationException; 5 | import org.springframework.security.core.userdetails.UserDetails; 6 | import org.springframework.security.core.userdetails.UserDetailsService; 7 | import org.springframework.security.core.userdetails.UsernameNotFoundException; 8 | import org.springframework.stereotype.Component; 9 | import ru.itis.springbootapp.models.User; 10 | import ru.itis.springbootapp.repositories.UsersRepository; 11 | 12 | import java.util.Optional; 13 | 14 | @Component(value = "customUserDetailsService") 15 | public class UserDetailsServiceImpl implements UserDetailsService { 16 | 17 | @Autowired 18 | private UsersRepository usersRepository; 19 | 20 | @Override 21 | public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException { 22 | Optional userOptional = usersRepository.findOneByEmail(email); 23 | 24 | if (userOptional.isPresent()) { 25 | return new UserDetailsImpl(userOptional.get()); 26 | } else throw new SecurityException("User with email <" + email + "> not found"); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /14. SpringBootSecurity/src/main/java/ru/itis/springbootapp/services/SignUpService.java: -------------------------------------------------------------------------------- 1 | package ru.itis.springbootapp.services; 2 | 3 | import ru.itis.springbootapp.forms.SignUpForm; 4 | 5 | public interface SignUpService { 6 | void signUp(SignUpForm form); 7 | } 8 | -------------------------------------------------------------------------------- /14. SpringBootSecurity/src/main/java/ru/itis/springbootapp/services/SignUpServiceImpl.java: -------------------------------------------------------------------------------- 1 | package ru.itis.springbootapp.services; 2 | 3 | import org.springframework.beans.factory.annotation.Autowired; 4 | import org.springframework.security.crypto.password.PasswordEncoder; 5 | import org.springframework.stereotype.Service; 6 | import ru.itis.springbootapp.forms.SignUpForm; 7 | import ru.itis.springbootapp.models.User; 8 | import ru.itis.springbootapp.repositories.UsersRepository; 9 | 10 | @Service 11 | public class SignUpServiceImpl implements SignUpService { 12 | 13 | @Autowired 14 | private UsersRepository usersRepository; 15 | 16 | @Autowired 17 | private PasswordEncoder passwordEncoder; 18 | 19 | @Override 20 | public void signUp(SignUpForm form) { 21 | User user = User.builder() 22 | .passwordHash(passwordEncoder.encode(form.getPassword())) 23 | .email(form.getEmail()) 24 | .firstName(form.getFirstName()) 25 | .lastName(form.getLastName()) 26 | .build(); 27 | 28 | usersRepository.save(user); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /14. SpringBootSecurity/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | spring.datasource.driver-class-name=org.postgresql.Driver 2 | spring.datasource.url=jdbc:postgresql://localhost:5432/shop 3 | spring.datasource.username=postgres 4 | spring.datasource.password=qwerty007 5 | spring.jpa.generate-ddl=true 6 | spring.jpa.show-sql=true 7 | spring.jpa.hibernate.ddl-auto=update -------------------------------------------------------------------------------- /14. SpringBootSecurity/src/main/resources/templates/sign_in.ftl: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SigIn 6 | 7 | 8 |
9 |
10 |
11 | Sign In 12 | <#if error??> 13 |

Неправильный логин или пароль

14 | 15 | 19 | 23 |
24 |
25 | 26 |
27 |
28 |
29 | 30 | 31 | -------------------------------------------------------------------------------- /14. SpringBootSecurity/src/main/resources/templates/users.ftl: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 7 | 8 | Document 9 | 10 | 11 |
12 |
13 | 14 | 15 | 16 |
17 |
18 | 19 | -------------------------------------------------------------------------------- /14. SpringBootSecurity/src/test/java/ru/itis/springbootapp/SpringBootAppApplicationTests.java: -------------------------------------------------------------------------------- 1 | package ru.itis.springbootapp; 2 | 3 | import org.junit.Test; 4 | import org.junit.runner.RunWith; 5 | import org.springframework.boot.test.context.SpringBootTest; 6 | import org.springframework.test.context.junit4.SpringRunner; 7 | 8 | @RunWith(SpringRunner.class) 9 | @SpringBootTest 10 | public class SpringBootAppApplicationTests { 11 | 12 | @Test 13 | public void contextLoads() { 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /15. Rest API Demo/.gitignore: -------------------------------------------------------------------------------- 1 | HELP.md 2 | /target/ 3 | !.mvn/wrapper/maven-wrapper.jar 4 | 5 | ### STS ### 6 | .apt_generated 7 | .classpath 8 | .factorypath 9 | .project 10 | .settings 11 | .springBeans 12 | .sts4-cache 13 | 14 | ### IntelliJ IDEA ### 15 | .idea 16 | *.iws 17 | *.iml 18 | *.ipr 19 | 20 | ### NetBeans ### 21 | /nbproject/private/ 22 | /nbbuild/ 23 | /dist/ 24 | /nbdist/ 25 | /.nb-gradle/ 26 | /build/ 27 | 28 | ### VS Code ### 29 | .vscode/ 30 | -------------------------------------------------------------------------------- /15. Rest API Demo/.mvn/wrapper/maven-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarselSidikov/JAVA_ENTERPRISE_2/0a499cbe9edd566ece80e1efedbfafef374abf80/15. Rest API Demo/.mvn/wrapper/maven-wrapper.jar -------------------------------------------------------------------------------- /15. Rest API Demo/.mvn/wrapper/maven-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.0/apache-maven-3.6.0-bin.zip 2 | -------------------------------------------------------------------------------- /15. Rest API Demo/src/main/java/ru/itpark/app/SpringBootDemoApplication.java: -------------------------------------------------------------------------------- 1 | package ru.itpark.app; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import org.springframework.context.annotation.Bean; 6 | import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; 7 | import org.springframework.security.crypto.password.PasswordEncoder; 8 | import springfox.documentation.builders.PathSelectors; 9 | import springfox.documentation.builders.RequestHandlerSelectors; 10 | import springfox.documentation.spi.DocumentationType; 11 | import springfox.documentation.spring.web.plugins.Docket; 12 | import springfox.documentation.swagger2.annotations.EnableSwagger2; 13 | 14 | @EnableSwagger2 15 | @SpringBootApplication 16 | public class SpringBootDemoApplication { 17 | 18 | @Bean 19 | public PasswordEncoder passwordEncoder() { 20 | return new BCryptPasswordEncoder(); 21 | } 22 | 23 | @Bean 24 | public Docket api() { 25 | return new Docket(DocumentationType.SWAGGER_2) 26 | .select() 27 | .apis(RequestHandlerSelectors.basePackage("ru.itpark.app.controllers")) 28 | .paths(PathSelectors.any()) 29 | .build(); 30 | } 31 | 32 | public static void main(String[] args) { 33 | SpringApplication.run(SpringBootDemoApplication.class, args); 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /15. Rest API Demo/src/main/java/ru/itpark/app/controllers/LoginController.java: -------------------------------------------------------------------------------- 1 | package ru.itpark.app.controllers; 2 | 3 | import lombok.AllArgsConstructor; 4 | import org.springframework.beans.factory.annotation.Autowired; 5 | import org.springframework.http.ResponseEntity; 6 | import org.springframework.security.access.prepost.PreAuthorize; 7 | import org.springframework.web.bind.annotation.PostMapping; 8 | import org.springframework.web.bind.annotation.RequestBody; 9 | import org.springframework.web.bind.annotation.RestController; 10 | import ru.itpark.app.dto.LoginDto; 11 | import ru.itpark.app.dto.TokenDto; 12 | import ru.itpark.app.services.LoginService; 13 | 14 | @RestController 15 | public class LoginController { 16 | 17 | @Autowired 18 | private LoginService service; 19 | 20 | @PostMapping("/login") 21 | @PreAuthorize("permitAll()") 22 | public ResponseEntity login(@RequestBody LoginDto loginData) { 23 | return ResponseEntity.ok(service.login(loginData)); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /15. Rest API Demo/src/main/java/ru/itpark/app/dto/LoginDto.java: -------------------------------------------------------------------------------- 1 | package ru.itpark.app.dto; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class LoginDto { 7 | private String login; 8 | private String password; 9 | } 10 | -------------------------------------------------------------------------------- /15. Rest API Demo/src/main/java/ru/itpark/app/dto/ProductDto.java: -------------------------------------------------------------------------------- 1 | package ru.itpark.app.dto; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class ProductDto { 7 | private String name; 8 | private Double price; 9 | } 10 | -------------------------------------------------------------------------------- /15. Rest API Demo/src/main/java/ru/itpark/app/dto/TokenDto.java: -------------------------------------------------------------------------------- 1 | package ru.itpark.app.dto; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | import org.springframework.context.annotation.Bean; 8 | 9 | @Data 10 | @AllArgsConstructor 11 | @NoArgsConstructor 12 | @Builder 13 | public class TokenDto { 14 | private String value; 15 | 16 | public static TokenDto from(String token) { 17 | return TokenDto.builder() 18 | .value(token) 19 | .build(); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /15. Rest API Demo/src/main/java/ru/itpark/app/models/Product.java: -------------------------------------------------------------------------------- 1 | package ru.itpark.app.models; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | import javax.persistence.Entity; 9 | import javax.persistence.GeneratedValue; 10 | import javax.persistence.GenerationType; 11 | import javax.persistence.Id; 12 | 13 | @Data 14 | @AllArgsConstructor 15 | @NoArgsConstructor 16 | @Entity 17 | @Builder 18 | public class Product { 19 | 20 | @Id 21 | @GeneratedValue(strategy = GenerationType.IDENTITY) 22 | private Long id; 23 | private String name; 24 | private Double price; 25 | } 26 | -------------------------------------------------------------------------------- /15. Rest API Demo/src/main/java/ru/itpark/app/models/Role.java: -------------------------------------------------------------------------------- 1 | package ru.itpark.app.models; 2 | 3 | public enum Role { 4 | ADMIN, USER; 5 | } 6 | -------------------------------------------------------------------------------- /15. Rest API Demo/src/main/java/ru/itpark/app/models/Token.java: -------------------------------------------------------------------------------- 1 | package ru.itpark.app.models; 2 | 3 | import lombok.*; 4 | 5 | import javax.persistence.*; 6 | import java.time.LocalDateTime; 7 | 8 | @Builder 9 | @Getter 10 | @Setter 11 | @ToString 12 | @EqualsAndHashCode 13 | @AllArgsConstructor 14 | @NoArgsConstructor 15 | @Entity 16 | public class Token { 17 | 18 | @Id 19 | @GeneratedValue(strategy = GenerationType.IDENTITY) 20 | private Long id; 21 | private String value; 22 | 23 | @ManyToOne 24 | @JoinColumn(name = "user_id") 25 | private User user; 26 | 27 | private LocalDateTime createdAt; 28 | private LocalDateTime expiredDateTime; 29 | 30 | public boolean isNotExpired() { 31 | return LocalDateTime.now().isBefore(expiredDateTime); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /15. Rest API Demo/src/main/java/ru/itpark/app/models/User.java: -------------------------------------------------------------------------------- 1 | package ru.itpark.app.models; 2 | 3 | import lombok.*; 4 | 5 | import javax.persistence.*; 6 | import java.time.LocalDateTime; 7 | import java.util.List; 8 | 9 | @Builder 10 | @Getter 11 | @Setter 12 | @ToString 13 | @EqualsAndHashCode 14 | @AllArgsConstructor 15 | @NoArgsConstructor 16 | @Entity 17 | @Table(name = "service_user") 18 | public class User { 19 | @Id 20 | @GeneratedValue(strategy = GenerationType.IDENTITY) 21 | private Long id; 22 | 23 | private String firstName; 24 | private String lastName; 25 | 26 | @Column(length = 1000) 27 | private String login; 28 | private Integer age; 29 | private String passwordHash; 30 | 31 | private LocalDateTime birthDateTime; 32 | 33 | @Enumerated(value = EnumType.STRING) 34 | private Role role; 35 | 36 | @OneToMany(mappedBy = "user") 37 | private List tokens; 38 | 39 | } 40 | -------------------------------------------------------------------------------- /15. Rest API Demo/src/main/java/ru/itpark/app/repositories/ProductsRepository.java: -------------------------------------------------------------------------------- 1 | package ru.itpark.app.repositories; 2 | 3 | import org.springframework.data.jpa.repository.JpaRepository; 4 | import ru.itpark.app.models.Product; 5 | 6 | public interface ProductsRepository extends JpaRepository { 7 | } 8 | -------------------------------------------------------------------------------- /15. Rest API Demo/src/main/java/ru/itpark/app/repositories/TokensRepository.java: -------------------------------------------------------------------------------- 1 | package ru.itpark.app.repositories; 2 | 3 | import org.springframework.data.jpa.repository.JpaRepository; 4 | import ru.itpark.app.models.Token; 5 | 6 | import java.time.LocalDateTime; 7 | import java.util.Optional; 8 | 9 | public interface TokensRepository extends JpaRepository { 10 | Optional findFirstByValue(String value); 11 | void deleteTokensByExpiredDateTimeBefore(LocalDateTime now); 12 | } 13 | -------------------------------------------------------------------------------- /15. Rest API Demo/src/main/java/ru/itpark/app/repositories/UsersRepository.java: -------------------------------------------------------------------------------- 1 | package ru.itpark.app.repositories; 2 | 3 | import org.springframework.data.jpa.repository.JpaRepository; 4 | import ru.itpark.app.models.User; 5 | 6 | import java.util.List; 7 | import java.util.Optional; 8 | 9 | public interface UsersRepository extends JpaRepository { 10 | Optional findFirstByLoginIgnoreCase(String login); 11 | List findAllByOrderByAge(); 12 | List findAllByOrderByAgeDesc(); 13 | List findAllByOrderById(); 14 | List findAllByOrderByIdDesc(); 15 | List findAllByFirstNameContainsIgnoreCaseOrLastNameContainsIgnoreCase(String keyword1, String keyword2); 16 | } 17 | -------------------------------------------------------------------------------- /15. Rest API Demo/src/main/java/ru/itpark/app/schedulers/ExpiredTokensScheduler.java: -------------------------------------------------------------------------------- 1 | package ru.itpark.app.schedulers; 2 | 3 | import org.springframework.beans.factory.annotation.Autowired; 4 | import org.springframework.context.annotation.Configuration; 5 | import org.springframework.scheduling.annotation.EnableScheduling; 6 | import org.springframework.scheduling.annotation.Scheduled; 7 | import ru.itpark.app.repositories.TokensRepository; 8 | 9 | import javax.transaction.Transactional; 10 | import java.time.LocalDateTime; 11 | 12 | @Configuration 13 | @EnableScheduling 14 | public class ExpiredTokensScheduler { 15 | 16 | @Autowired 17 | private TokensRepository tokensRepository; 18 | 19 | @Scheduled(cron = "*/10 * * * * *") 20 | @Transactional 21 | public void removeExpiredTokens() { 22 | tokensRepository.deleteTokensByExpiredDateTimeBefore(LocalDateTime.now()); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /15. Rest API Demo/src/main/java/ru/itpark/app/security/details/UserDetailsServiceImpl.java: -------------------------------------------------------------------------------- 1 | package ru.itpark.app.security.details; 2 | 3 | import org.springframework.beans.factory.annotation.Autowired; 4 | import org.springframework.security.authentication.BadCredentialsException; 5 | import org.springframework.security.core.userdetails.UserDetails; 6 | import org.springframework.security.core.userdetails.UserDetailsService; 7 | import org.springframework.security.core.userdetails.UsernameNotFoundException; 8 | import org.springframework.stereotype.Service; 9 | import ru.itpark.app.models.Token; 10 | import ru.itpark.app.models.User; 11 | import ru.itpark.app.repositories.TokensRepository; 12 | import ru.itpark.app.repositories.UsersRepository; 13 | import ru.itpark.app.security.authentication.TokenAuthentication; 14 | 15 | import java.util.Optional; 16 | 17 | @Service(value = "customUserDetailsService") 18 | public class UserDetailsServiceImpl implements UserDetailsService { 19 | 20 | @Autowired 21 | private TokensRepository tokensRepository; 22 | 23 | @Override 24 | public UserDetails loadUserByUsername(String value) throws UsernameNotFoundException { 25 | Optional authenticationCandidate = tokensRepository.findFirstByValue(value); 26 | if (authenticationCandidate.isPresent()) { 27 | Token token = authenticationCandidate.get(); 28 | return new UserDetailsImpl(token.getUser(), token); 29 | } return null; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /15. Rest API Demo/src/main/java/ru/itpark/app/security/filters/TokenAuthenticationFilter.java: -------------------------------------------------------------------------------- 1 | package ru.itpark.app.security.filters; 2 | 3 | import org.springframework.security.core.context.SecurityContextHolder; 4 | import ru.itpark.app.security.authentication.TokenAuthentication; 5 | 6 | import javax.servlet.*; 7 | import javax.servlet.http.HttpServletRequest; 8 | import java.io.IOException; 9 | 10 | public class TokenAuthenticationFilter implements Filter { 11 | // константа, содержит название токена 12 | private final static String AUTH_HEADER = "AUTH"; 13 | 14 | @Override 15 | public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { 16 | // вытаскиваем запрос 17 | HttpServletRequest request = (HttpServletRequest) servletRequest; 18 | // вытаскиваем заголовок с токеном 19 | String tokenValue = request.getHeader(AUTH_HEADER); 20 | // если заголовок содержит что-либо 21 | if (tokenValue != null) { 22 | // создаем объект токен-аутентификации 23 | TokenAuthentication authentication = new TokenAuthentication(); 24 | // в него кладем токен 25 | authentication.setToken(tokenValue); 26 | // отдаем контексту 27 | SecurityContextHolder.getContext().setAuthentication(authentication); 28 | } 29 | // отдаем запрос дальше (его встретит либо другой фильтр, либо что-то еще) 30 | filterChain.doFilter(servletRequest, servletResponse); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /15. Rest API Demo/src/main/java/ru/itpark/app/services/LoginService.java: -------------------------------------------------------------------------------- 1 | package ru.itpark.app.services; 2 | 3 | import ru.itpark.app.dto.LoginDto; 4 | import ru.itpark.app.dto.TokenDto; 5 | 6 | public interface LoginService { 7 | TokenDto login(LoginDto loginData); 8 | } 9 | -------------------------------------------------------------------------------- /15. Rest API Demo/src/main/java/ru/itpark/app/services/ProductsService.java: -------------------------------------------------------------------------------- 1 | package ru.itpark.app.services; 2 | 3 | import ru.itpark.app.dto.ProductDto; 4 | import ru.itpark.app.models.Product; 5 | 6 | import java.util.List; 7 | 8 | public interface ProductsService { 9 | List getAll(); 10 | 11 | Product add(ProductDto product); 12 | 13 | Product update(Long id, ProductDto form); 14 | 15 | void delete(Long id); 16 | 17 | Product get(Long id); 18 | } 19 | -------------------------------------------------------------------------------- /15. Rest API Demo/src/main/java/ru/itpark/app/services/ProductsServiceImpl.java: -------------------------------------------------------------------------------- 1 | package ru.itpark.app.services; 2 | 3 | import org.hibernate.proxy.HibernateProxy; 4 | import org.springframework.beans.factory.annotation.Autowired; 5 | import org.springframework.stereotype.Service; 6 | import ru.itpark.app.dto.ProductDto; 7 | import ru.itpark.app.models.Product; 8 | import ru.itpark.app.repositories.ProductsRepository; 9 | 10 | import java.util.List; 11 | 12 | @Service 13 | public class ProductsServiceImpl implements ProductsService { 14 | 15 | @Autowired 16 | private ProductsRepository productsRepository; 17 | 18 | @Override 19 | public List getAll() { 20 | return productsRepository.findAll(); 21 | } 22 | 23 | @Override 24 | public Product add(ProductDto form) { 25 | Product product = Product.builder() 26 | .name(form.getName()) 27 | .price(form.getPrice()) 28 | .build(); 29 | 30 | return productsRepository.save(product); 31 | } 32 | 33 | @Override 34 | public Product update(Long id, ProductDto form) { 35 | Product product = productsRepository.getOne(id); 36 | product.setName(form.getName()); 37 | product.setPrice(form.getPrice()); 38 | return productsRepository.save(product); 39 | } 40 | 41 | @Override 42 | public void delete(Long id) { 43 | productsRepository.deleteById(id); 44 | } 45 | 46 | @Override 47 | public Product get(Long id) { 48 | Product result = productsRepository.getOne(id); 49 | 50 | if (result instanceof HibernateProxy) { 51 | return (Product) ((HibernateProxy)result).getHibernateLazyInitializer().getImplementation(); 52 | } 53 | return result; 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /15. Rest API Demo/src/main/java/ru/itpark/app/services/UsersService.java: -------------------------------------------------------------------------------- 1 | package ru.itpark.app.services; 2 | 3 | import ru.itpark.app.models.User; 4 | 5 | import java.util.List; 6 | 7 | public interface UsersService { 8 | List getUsers(Boolean sort, String by, Boolean desc); 9 | List getUsersWithSearch(String query); 10 | } 11 | -------------------------------------------------------------------------------- /15. Rest API Demo/src/main/java/ru/itpark/app/services/UsersServiceImpl.java: -------------------------------------------------------------------------------- 1 | package ru.itpark.app.services; 2 | 3 | import org.springframework.beans.factory.annotation.Autowired; 4 | import org.springframework.stereotype.Service; 5 | import ru.itpark.app.models.User; 6 | import ru.itpark.app.repositories.UsersRepository; 7 | 8 | import java.util.List; 9 | 10 | @Service 11 | public class UsersServiceImpl implements UsersService { 12 | 13 | @Autowired 14 | private UsersRepository usersRepository; 15 | 16 | @Override 17 | public List getUsers(Boolean sort, String by, Boolean desc) { 18 | if (sort == null || !sort) { 19 | return usersRepository.findAll(); 20 | } else { 21 | if (by != null) { 22 | switch (by) { 23 | case "age": 24 | if (desc == null || !desc) { 25 | return usersRepository.findAllByOrderByAge(); 26 | } else { 27 | return usersRepository.findAllByOrderByAgeDesc(); 28 | } 29 | case "id": 30 | if (desc == null || !desc) { 31 | return usersRepository.findAllByOrderById(); 32 | } else { 33 | return usersRepository.findAllByOrderByIdDesc(); 34 | } 35 | 36 | } 37 | } return usersRepository.findAll(); 38 | } 39 | } 40 | 41 | @Override 42 | public List getUsersWithSearch(String query) { 43 | return usersRepository.findAllByFirstNameContainsIgnoreCaseOrLastNameContainsIgnoreCase(query, query); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /15. Rest API Demo/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | spring.datasource.password=qwerty007 2 | spring.datasource.url=jdbc:postgresql://localhost:5432/java_itis 3 | spring.datasource.username=postgres 4 | spring.datasource.driver-class-name=org.postgresql.Driver 5 | server.port=80 6 | spring.jpa.hibernate.ddl-auto=update 7 | spring.jpa.show-sql=true 8 | 9 | token.expired=86400 -------------------------------------------------------------------------------- /15. Rest API Demo/src/main/resources/requests.http: -------------------------------------------------------------------------------- 1 | POST http://localhost/login 2 | Accept: */* 3 | Cache-Control: no-cache 4 | Content-Type: application/json 5 | 6 | { 7 | "login" : "marsel", 8 | "password": "qwerty007" 9 | } 10 | 11 | ### 12 | 13 | POST http://localhost/products 14 | Accept: */* 15 | Cache-Control: no-cache 16 | Content-Type: application/json 17 | AUTH: 945cbc6c-e5d7-47c2-9438-665aaa9204f8 18 | 19 | { 20 | "name": "Молоко", 21 | "price": 78.5 22 | } 23 | 24 | ### 25 | 26 | POST http://localhost/products 27 | Accept: */* 28 | Cache-Control: no-cache 29 | Content-Type: application/json 30 | 31 | { 32 | "name": "Сыр", 33 | "price": 120 34 | } 35 | 36 | ### 37 | 38 | PUT http://localhost/products/1 39 | Accept: */* 40 | Cache-Control: no-cache 41 | Content-Type: application/json 42 | 43 | { 44 | "name": "Молоко", 45 | "price": 65.0 46 | } 47 | 48 | ### 49 | 50 | GET http://localhost/products/ 51 | Accept: */* 52 | Cache-Control: no-cache 53 | Content-Type: application/json 54 | 55 | ### 56 | 57 | GET http://localhost/products/2 58 | Accept: */* 59 | Cache-Control: no-cache 60 | Content-Type: application/json 61 | 62 | ### 63 | 64 | DELETE http://localhost/products/2 65 | Accept: */* 66 | Cache-Control: no-cache 67 | Content-Type: application/json 68 | 69 | ### 70 | -------------------------------------------------------------------------------- /15. Rest API Demo/src/test/java/ru/itpark/app/SpringBootDemoApplicationTests.java: -------------------------------------------------------------------------------- 1 | package ru.itpark.app; 2 | 3 | import org.junit.Test; 4 | import org.junit.runner.RunWith; 5 | import org.springframework.boot.test.context.SpringBootTest; 6 | import org.springframework.test.context.junit4.SpringRunner; 7 | 8 | @RunWith(SpringRunner.class) 9 | @SpringBootTest 10 | public class SpringBootDemoApplicationTests { 11 | 12 | @Test 13 | public void contextLoads() { 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /16. Long Polling/.gitignore: -------------------------------------------------------------------------------- 1 | HELP.md 2 | target/ 3 | !.mvn/wrapper/maven-wrapper.jar 4 | !**/src/main/** 5 | !**/src/test/** 6 | 7 | ### STS ### 8 | .apt_generated 9 | .classpath 10 | .factorypath 11 | .project 12 | .settings 13 | .springBeans 14 | .sts4-cache 15 | 16 | ### IntelliJ IDEA ### 17 | .idea 18 | *.iws 19 | *.iml 20 | *.ipr 21 | 22 | ### NetBeans ### 23 | /nbproject/private/ 24 | /nbbuild/ 25 | /dist/ 26 | /nbdist/ 27 | /.nb-gradle/ 28 | build/ 29 | 30 | ### VS Code ### 31 | .vscode/ 32 | -------------------------------------------------------------------------------- /16. Long Polling/.mvn/wrapper/maven-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarselSidikov/JAVA_ENTERPRISE_2/0a499cbe9edd566ece80e1efedbfafef374abf80/16. Long Polling/.mvn/wrapper/maven-wrapper.jar -------------------------------------------------------------------------------- /16. Long Polling/.mvn/wrapper/maven-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.0/apache-maven-3.6.0-bin.zip 2 | -------------------------------------------------------------------------------- /16. Long Polling/src/main/java/ru/itis/chat/LongPollingDemoApplication.java: -------------------------------------------------------------------------------- 1 | package ru.itis.chat; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class LongPollingDemoApplication { 8 | 9 | public static void main(String[] args) { 10 | SpringApplication.run(LongPollingDemoApplication.class, args); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /16. Long Polling/src/main/java/ru/itis/chat/controllers/ChatController.java: -------------------------------------------------------------------------------- 1 | package ru.itis.chat.controllers; 2 | 3 | import org.springframework.stereotype.Controller; 4 | import org.springframework.ui.Model; 5 | import org.springframework.web.bind.annotation.GetMapping; 6 | 7 | import java.util.UUID; 8 | 9 | @Controller 10 | public class ChatController { 11 | @GetMapping("/chat") 12 | public String getChatPage(Model model) { 13 | model.addAttribute("pageId", UUID.randomUUID().toString()); 14 | return "chat"; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /16. Long Polling/src/main/java/ru/itis/chat/controllers/MessagesController.java: -------------------------------------------------------------------------------- 1 | package ru.itis.chat.controllers; 2 | 3 | import lombok.SneakyThrows; 4 | import org.springframework.http.ResponseEntity; 5 | import org.springframework.web.bind.annotation.*; 6 | import ru.itis.chat.dto.MessageDto; 7 | 8 | import javax.xml.ws.Response; 9 | import java.util.ArrayList; 10 | import java.util.HashMap; 11 | import java.util.List; 12 | import java.util.Map; 13 | 14 | @RestController 15 | public class MessagesController { 16 | private final Map> messages = new HashMap<>(); 17 | 18 | @PostMapping("/messages") 19 | public ResponseEntity receiveMessage(@RequestBody MessageDto message) { 20 | if (!messages.containsKey(message.getPageId())) { 21 | messages.put(message.getPageId(), new ArrayList<>()); 22 | } 23 | for (List pageMessages : messages.values()) { 24 | synchronized (pageMessages) { 25 | pageMessages.add(message); 26 | pageMessages.notifyAll(); 27 | } 28 | } 29 | return ResponseEntity.ok().build(); 30 | } 31 | 32 | @SneakyThrows 33 | @GetMapping("/messages") 34 | public ResponseEntity> getMessagesForPage(@RequestParam("pageId") String pageId) { 35 | synchronized (messages.get(pageId)) { 36 | if (messages.get(pageId).isEmpty()) { 37 | messages.get(pageId).wait(); 38 | } 39 | List response = new ArrayList<>(messages.get(pageId)); 40 | messages.get(pageId).clear(); 41 | return ResponseEntity.ok(response); 42 | } 43 | } 44 | 45 | 46 | } 47 | -------------------------------------------------------------------------------- /16. Long Polling/src/main/java/ru/itis/chat/dto/MessageDto.java: -------------------------------------------------------------------------------- 1 | package ru.itis.chat.dto; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class MessageDto { 7 | private String pageId; 8 | private String text; 9 | } 10 | -------------------------------------------------------------------------------- /16. Long Polling/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /16. Long Polling/src/main/resources/static/js/chat.js: -------------------------------------------------------------------------------- 1 | function sendMessage(pageId, text) { 2 | let body = { 3 | pageId: pageId, 4 | text: text 5 | }; 6 | 7 | $.ajax({ 8 | url: "/messages", 9 | method: "POST", 10 | data: JSON.stringify(body), 11 | contentType: "application/json", 12 | dataType: "json", 13 | complete: function () { 14 | } 15 | }); 16 | } 17 | function receiveMessage(pageId) { 18 | $.ajax({ 19 | url: "/messages?pageId=" + pageId, 20 | method: "GET", 21 | dataType: "json", 22 | contentType: "application/json", 23 | success: function (response) { 24 | $('#messages').first().after('
  • ' + response[0]['text'] + '
  • ') 25 | receiveMessage(pageId); 26 | } 27 | }) 28 | } 29 | 30 | function login(pageId) { 31 | let body = { 32 | pageId: pageId, 33 | text: 'Hi!' 34 | }; 35 | 36 | $.ajax({ 37 | url: "/messages", 38 | method: "POST", 39 | data: JSON.stringify(body), 40 | contentType: "application/json", 41 | dataType: "json", 42 | complete: function () { 43 | receiveMessage(pageId); 44 | } 45 | }); 46 | } 47 | // 48 | // $(document).ready(function () { 49 | // sendMessage(pageId, 'Hi'); 50 | // receiveMessage(pageId); 51 | // }); -------------------------------------------------------------------------------- /16. Long Polling/src/main/resources/templates/chat.ftl: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 7 | 8 | Chat 9 | 13 | 14 | 15 | 16 |

    Ваш Id: ${pageId}

    17 |
    18 | 19 | 21 |
    22 |
    23 |
      24 | 25 |
    26 |
    27 | 28 | -------------------------------------------------------------------------------- /16. Long Polling/src/test/java/ru/itis/chat/LongPollingDemoApplicationTests.java: -------------------------------------------------------------------------------- 1 | package ru.itis.chat; 2 | 3 | import org.junit.Test; 4 | import org.junit.runner.RunWith; 5 | import org.springframework.boot.test.context.SpringBootTest; 6 | import org.springframework.test.context.junit4.SpringRunner; 7 | 8 | @RunWith(SpringRunner.class) 9 | @SpringBootTest 10 | public class LongPollingDemoApplicationTests { 11 | 12 | @Test 13 | public void contextLoads() { 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /17. WebSockets/.gitignore: -------------------------------------------------------------------------------- 1 | HELP.md 2 | target/ 3 | !.mvn/wrapper/maven-wrapper.jar 4 | !**/src/main/** 5 | !**/src/test/** 6 | 7 | ### STS ### 8 | .apt_generated 9 | .classpath 10 | .factorypath 11 | .project 12 | .settings 13 | .springBeans 14 | .sts4-cache 15 | 16 | ### IntelliJ IDEA ### 17 | .idea 18 | *.iws 19 | *.iml 20 | *.ipr 21 | 22 | ### NetBeans ### 23 | /nbproject/private/ 24 | /nbbuild/ 25 | /dist/ 26 | /nbdist/ 27 | /.nb-gradle/ 28 | build/ 29 | 30 | ### VS Code ### 31 | .vscode/ 32 | -------------------------------------------------------------------------------- /17. WebSockets/.mvn/wrapper/maven-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarselSidikov/JAVA_ENTERPRISE_2/0a499cbe9edd566ece80e1efedbfafef374abf80/17. WebSockets/.mvn/wrapper/maven-wrapper.jar -------------------------------------------------------------------------------- /17. WebSockets/.mvn/wrapper/maven-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.0/apache-maven-3.6.0-bin.zip 2 | -------------------------------------------------------------------------------- /17. WebSockets/src/main/java/ru/itis/chats/ChatsApplication.java: -------------------------------------------------------------------------------- 1 | package ru.itis.chats; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class ChatsApplication { 8 | 9 | public static void main(String[] args) { 10 | SpringApplication.run(ChatsApplication.class, args); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /17. WebSockets/src/main/java/ru/itis/chats/configs/WebSocketConfiguration.java: -------------------------------------------------------------------------------- 1 | package ru.itis.chats.configs; 2 | 3 | import org.springframework.beans.factory.annotation.Autowired; 4 | import org.springframework.context.annotation.Configuration; 5 | import org.springframework.web.socket.config.annotation.EnableWebSocket; 6 | import org.springframework.web.socket.config.annotation.WebSocketConfigurer; 7 | import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry; 8 | import org.springframework.web.socket.server.support.DefaultHandshakeHandler; 9 | import ru.itis.chats.handlers.AuthHandshakeHandler; 10 | import ru.itis.chats.handlers.MessagesWebSocketHandler; 11 | 12 | @Configuration 13 | @EnableWebSocket 14 | public class WebSocketConfiguration implements WebSocketConfigurer { 15 | 16 | @Autowired 17 | private MessagesWebSocketHandler messagesWebSocketHandler; 18 | 19 | @Autowired 20 | private AuthHandshakeHandler authHandshakeHandler; 21 | 22 | @Override 23 | public void registerWebSocketHandlers(WebSocketHandlerRegistry webSocketHandlerRegistry) { 24 | webSocketHandlerRegistry.addHandler(messagesWebSocketHandler, "/chat") 25 | .setHandshakeHandler(authHandshakeHandler); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /17. WebSockets/src/main/java/ru/itis/chats/controllers/IndexController.java: -------------------------------------------------------------------------------- 1 | package ru.itis.chats.controllers; 2 | 3 | import org.springframework.stereotype.Controller; 4 | import org.springframework.ui.Model; 5 | import org.springframework.web.bind.annotation.GetMapping; 6 | 7 | import java.util.UUID; 8 | 9 | @Controller 10 | public class IndexController { 11 | @GetMapping("/") 12 | public String getIndexPage(Model model) { 13 | model.addAttribute("id", UUID.randomUUID().toString()); 14 | return "index_web_sockets"; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /17. WebSockets/src/main/java/ru/itis/chats/forms/MessageDto.java: -------------------------------------------------------------------------------- 1 | package ru.itis.chats.forms; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class MessageDto { 7 | private String from; 8 | private String text; 9 | } 10 | -------------------------------------------------------------------------------- /17. WebSockets/src/main/java/ru/itis/chats/handlers/AuthHandshakeHandler.java: -------------------------------------------------------------------------------- 1 | package ru.itis.chats.handlers; 2 | 3 | import org.springframework.http.HttpHeaders; 4 | import org.springframework.http.HttpStatus; 5 | import org.springframework.http.server.ServerHttpRequest; 6 | import org.springframework.http.server.ServerHttpResponse; 7 | import org.springframework.http.server.ServletServerHttpRequest; 8 | import org.springframework.stereotype.Component; 9 | import org.springframework.web.socket.WebSocketHandler; 10 | import org.springframework.web.socket.server.HandshakeFailureException; 11 | import org.springframework.web.socket.server.HandshakeHandler; 12 | import org.springframework.web.socket.server.support.DefaultHandshakeHandler; 13 | import org.springframework.web.util.WebUtils; 14 | 15 | import java.util.Map; 16 | 17 | @Component 18 | public class AuthHandshakeHandler implements HandshakeHandler { 19 | 20 | private DefaultHandshakeHandler handshakeHandler = new DefaultHandshakeHandler(); 21 | @Override 22 | public boolean doHandshake(ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse, WebSocketHandler webSocketHandler, Map map) throws HandshakeFailureException { 23 | ServletServerHttpRequest request = (ServletServerHttpRequest)serverHttpRequest; 24 | String cookie = WebUtils.getCookie(request.getServletRequest(), "X-Authorization").getValue(); 25 | if (cookie.equals("123456")) { 26 | return handshakeHandler.doHandshake(serverHttpRequest, serverHttpResponse, webSocketHandler, map); 27 | } else { 28 | serverHttpResponse.setStatusCode(HttpStatus.FORBIDDEN); 29 | return false; 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /17. WebSockets/src/main/java/ru/itis/chats/handlers/MessagesWebSocketHandler.java: -------------------------------------------------------------------------------- 1 | package ru.itis.chats.handlers; 2 | 3 | import com.fasterxml.jackson.databind.ObjectMapper; 4 | import org.springframework.http.HttpHeaders; 5 | import org.springframework.stereotype.Component; 6 | import org.springframework.web.socket.TextMessage; 7 | import org.springframework.web.socket.WebSocketMessage; 8 | import org.springframework.web.socket.WebSocketSession; 9 | import org.springframework.web.socket.handler.TextWebSocketHandler; 10 | import ru.itis.chats.forms.MessageDto; 11 | 12 | import java.util.HashMap; 13 | import java.util.List; 14 | import java.util.Map; 15 | import java.util.concurrent.ConcurrentHashMap; 16 | 17 | @Component 18 | public class MessagesWebSocketHandler extends TextWebSocketHandler { 19 | 20 | private static Map sessions = new ConcurrentHashMap<>(); 21 | 22 | private ObjectMapper objectMapper = new ObjectMapper(); 23 | 24 | @Override 25 | public void handleMessage(WebSocketSession session, WebSocketMessage message) throws Exception { 26 | HttpHeaders headers = session.getHandshakeHeaders(); 27 | String messageAsString = (String) message.getPayload(); 28 | MessageDto body = objectMapper.readValue(messageAsString, MessageDto.class); 29 | 30 | if (body.getText().equals("Hello!")) { 31 | sessions.put(body.getFrom(), session); 32 | } 33 | 34 | for (WebSocketSession currentSession : sessions.values()) { 35 | currentSession.sendMessage(new TextMessage(messageAsString)); 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /17. WebSockets/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /17. WebSockets/src/main/resources/static/js/chat_web_sockets.js: -------------------------------------------------------------------------------- 1 | var webSocket; 2 | 3 | function connect(id) { 4 | document.cookie = 'X-Authorization=' + '123456' + ';path=/'; 5 | webSocket = new WebSocket('ws://localhost:8080/chat'); 6 | 7 | webSocket.onmessage = function receiveMessage(response) { 8 | let data = response['data']; 9 | let json = JSON.parse(data); 10 | $('#messagesList').first().after("
  • " + json['from'] + " " + json['text'] + "
  • ") 11 | }; 12 | 13 | webSocket.onerror = function errorShow() { 14 | alert('Ошибка авторизации') 15 | } 16 | } 17 | 18 | function sendMessage(from, text) { 19 | let message = { 20 | "from": from, 21 | "text": text 22 | }; 23 | 24 | webSocket.send(JSON.stringify(message)); 25 | } -------------------------------------------------------------------------------- /17. WebSockets/src/main/resources/templates/index_web_sockets.ftl: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | 10 | 12 | 13 | Chat 14 | 15 | 16 |
    17 | 18 |
    19 | 20 | 21 |
    22 |
    23 |
    24 |

    СООБЩЕНИЯ:

    25 |
      26 | 27 |
    28 |
    29 | 30 | -------------------------------------------------------------------------------- /17. WebSockets/src/test/java/ru/itis/chats/ChatsApplicationTests.java: -------------------------------------------------------------------------------- 1 | package ru.itis.chats; 2 | 3 | import org.junit.Test; 4 | import org.junit.runner.RunWith; 5 | import org.springframework.boot.test.context.SpringBootTest; 6 | import org.springframework.test.context.junit4.SpringRunner; 7 | 8 | @RunWith(SpringRunner.class) 9 | @SpringBootTest 10 | public class ChatsApplicationTests { 11 | 12 | @Test 13 | public void contextLoads() { 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /18. SpringCloud/CatsService/src/main/java/ru/itis/services/cats/controllers/CatsUsersController.java: -------------------------------------------------------------------------------- 1 | package ru.itis.services.cats.controllers; 2 | 3 | import org.springframework.beans.factory.annotation.Autowired; 4 | import org.springframework.http.ResponseEntity; 5 | import org.springframework.web.bind.annotation.GetMapping; 6 | import org.springframework.web.bind.annotation.RestController; 7 | import ru.itis.services.cats.dto.CatDto; 8 | import ru.itis.services.cats.service.CatsService; 9 | 10 | /** 11 | * 07.04.2018 12 | * VkUsersController 13 | * 14 | * @author Sidikov Marsel (First Software Engineering Platform) 15 | * @version v1.0 16 | */ 17 | @RestController 18 | public class CatsUsersController { 19 | 20 | @Autowired 21 | private CatsService service; 22 | 23 | @GetMapping("cats/search") 24 | public ResponseEntity getCat() { 25 | return ResponseEntity.ok(service.getCat()); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /18. SpringCloud/CatsService/src/main/java/ru/itis/services/cats/dto/CatDto.java: -------------------------------------------------------------------------------- 1 | package ru.itis.services.cats.dto; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class CatDto { 7 | private String url; 8 | } 9 | -------------------------------------------------------------------------------- /18. SpringCloud/CatsService/src/main/java/ru/itis/services/cats/service/CatsService.java: -------------------------------------------------------------------------------- 1 | package ru.itis.services.cats.service; 2 | 3 | import ru.itis.services.cats.dto.CatDto; 4 | 5 | /** 6 | * 07.04.2018 7 | * CatsService 8 | * 9 | * @author Sidikov Marsel (First Software Engineering Platform) 10 | * @version v1.0 11 | */ 12 | public interface CatsService { 13 | CatDto getCat(); 14 | } 15 | -------------------------------------------------------------------------------- /18. SpringCloud/CatsService/src/main/java/ru/itis/services/cats/service/CatsServiceImpl.java: -------------------------------------------------------------------------------- 1 | package ru.itis.services.cats.service; 2 | 3 | import org.springframework.beans.factory.annotation.Autowired; 4 | import org.springframework.beans.factory.annotation.Value; 5 | import org.springframework.stereotype.Service; 6 | import org.springframework.web.client.RestTemplate; 7 | import ru.itis.services.cats.dto.CatDto; 8 | 9 | /** 10 | * 07.04.2018 11 | * CatsService 12 | * 13 | * @author Sidikov Marsel (First Software Engineering Platform) 14 | * @version v1.0 15 | */ 16 | @Service 17 | public class CatsServiceImpl implements CatsService { 18 | 19 | @Autowired 20 | private RestTemplate restTemplate; 21 | 22 | @Value("${cats.get.request.url}") 23 | private String catsGetRequestUrl; 24 | 25 | @Override 26 | public CatDto getCat() { 27 | return restTemplate.getForEntity(catsGetRequestUrl, CatDto[].class).getBody()[0]; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /18. SpringCloud/CatsService/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=cat 2 | 3 | server.port=0 4 | 5 | cats.get.request.url=https://api.thecatapi.com/v1/images/search 6 | 7 | eureka.client.service-url.defaultZone=http://localhost:9000/eureka 8 | eureka.instance.prefer-ip-address=true -------------------------------------------------------------------------------- /18. SpringCloud/CountriesService/src/main/java/ru/itis/services/countries/controllers/CountriesController.java: -------------------------------------------------------------------------------- 1 | package ru.itis.services.countries.controllers; 2 | 3 | import org.springframework.beans.factory.annotation.Autowired; 4 | import org.springframework.http.ResponseEntity; 5 | import org.springframework.web.bind.annotation.GetMapping; 6 | import org.springframework.web.bind.annotation.PathVariable; 7 | import org.springframework.web.bind.annotation.RestController; 8 | import ru.itis.services.countries.dto.FlagDto; 9 | import ru.itis.services.countries.service.CountriesService; 10 | 11 | /** 12 | * 07.04.2018 13 | * CountriesController 14 | * 15 | * @author Sidikov Marsel (First Software Engineering Platform) 16 | * @version v1.0 17 | */ 18 | @RestController 19 | public class CountriesController { 20 | 21 | @Autowired 22 | private CountriesService service; 23 | 24 | @GetMapping("countries/{country-title}") 25 | public ResponseEntity getFlagOfCountry(@PathVariable("country-title") String title) { 26 | return ResponseEntity.ok(service.getFlagOfCountry(title)); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /18. SpringCloud/CountriesService/src/main/java/ru/itis/services/countries/dto/FlagDto.java: -------------------------------------------------------------------------------- 1 | package ru.itis.services.countries.dto; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * 07.04.2018 7 | * FlagDto 8 | * 9 | * @author Sidikov Marsel (First Software Engineering Platform) 10 | * @version v1.0 11 | */ 12 | @Data 13 | public class FlagDto { 14 | private String flag; 15 | } 16 | -------------------------------------------------------------------------------- /18. SpringCloud/CountriesService/src/main/java/ru/itis/services/countries/service/CountriesService.java: -------------------------------------------------------------------------------- 1 | package ru.itis.services.countries.service; 2 | 3 | import ru.itis.services.countries.dto.FlagDto; 4 | 5 | /** 6 | * 07.04.2018 7 | * CountriesService 8 | * 9 | * @author Sidikov Marsel (First Software Engineering Platform) 10 | * @version v1.0 11 | */ 12 | public interface CountriesService { 13 | FlagDto getFlagOfCountry(String title); 14 | } 15 | -------------------------------------------------------------------------------- /18. SpringCloud/CountriesService/src/main/java/ru/itis/services/countries/service/CountriesServiceImpl.java: -------------------------------------------------------------------------------- 1 | package ru.itis.services.countries.service; 2 | 3 | import org.springframework.beans.factory.annotation.Autowired; 4 | import org.springframework.beans.factory.annotation.Value; 5 | import org.springframework.stereotype.Service; 6 | import org.springframework.web.client.RestTemplate; 7 | import ru.itis.services.countries.dto.FlagDto; 8 | 9 | /** 10 | * 07.04.2018 11 | * CountriesServiceImpl 12 | * 13 | * @author Sidikov Marsel (First Software Engineering Platform) 14 | * @version v1.0 15 | */ 16 | @Service 17 | public class CountriesServiceImpl implements CountriesService { 18 | @Autowired 19 | private RestTemplate template; 20 | 21 | @Value("${restcountries.api.url}") 22 | private String restCountriesApiUrl; 23 | 24 | @Value("${restcountries.api.fields}") 25 | private String restCountriesFields; 26 | 27 | @Override 28 | public FlagDto getFlagOfCountry(String title) { 29 | String request = restCountriesApiUrl + title + "?fields=" + restCountriesFields; 30 | System.out.println(request); 31 | return template.getForEntity(request, FlagDto[].class).getBody()[0]; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /18. SpringCloud/CountriesService/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=country 2 | 3 | server.port=0 4 | 5 | restcountries.api.url=https://restcountries.eu/rest/v2/name/ 6 | restcountries.api.fields=flag 7 | 8 | eureka.client.service-url.defaultZone=http://localhost:9000/eureka 9 | eureka.instance.prefer-ip-address=true 10 | -------------------------------------------------------------------------------- /18. SpringCloud/ServiceRegistry/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | ru.itis 8 | service-registry 9 | 0.1 10 | 11 | 12 | org.springframework.cloud 13 | spring-cloud-starter-parent 14 | Camden.SR7 15 | 16 | 17 | 18 | 19 | org.springframework.boot 20 | spring-boot-starter-web 21 | 22 | 23 | org.springframework.cloud 24 | spring-cloud-starter-eureka-server 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /18. SpringCloud/ServiceRegistry/src/main/java/ru/itis/services/ServiceRegistryApplication.java: -------------------------------------------------------------------------------- 1 | package ru.itis.services; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; 6 | import org.springframework.cloud.netflix.zuul.EnableZuulProxy; 7 | 8 | @EnableEurekaServer 9 | @SpringBootApplication 10 | public class ServiceRegistryApplication { 11 | 12 | public static void main(String[] args) { 13 | SpringApplication.run(ServiceRegistryApplication.class, args); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /18. SpringCloud/ServiceRegistry/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=EurekaService 2 | server.port=9000 3 | 4 | eureka.client.register-with-eureka=false 5 | eureka.client.fetch-registry=false 6 | eureka.server.wait-time-in-ms-when-sync-empty=0 -------------------------------------------------------------------------------- /18. SpringCloud/UsersInfoService/src/main/java/ru/itis/services/info/dto/CatDto.java: -------------------------------------------------------------------------------- 1 | package ru.itis.services.info.dto; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class CatDto { 7 | private String url; 8 | } 9 | -------------------------------------------------------------------------------- /18. SpringCloud/UsersInfoService/src/main/java/ru/itis/services/info/dto/FlagDto.java: -------------------------------------------------------------------------------- 1 | package ru.itis.services.info.dto; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * 07.04.2018 7 | * FlagDto 8 | * 9 | * @author Sidikov Marsel (First Software Engineering Platform) 10 | * @version v1.0 11 | */ 12 | @Data 13 | public class FlagDto { 14 | private String flag; 15 | } 16 | -------------------------------------------------------------------------------- /18. SpringCloud/UsersInfoService/src/main/java/ru/itis/services/info/dto/InfoUserDto.java: -------------------------------------------------------------------------------- 1 | package ru.itis.services.info.dto; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | /** 9 | * 07.04.2018 10 | * InfoUserDto 11 | * 12 | * @author Sidikov Marsel (First Software Engineering Platform) 13 | * @version v1.0 14 | */ 15 | @Data 16 | @NoArgsConstructor 17 | @AllArgsConstructor 18 | @Builder 19 | public class InfoUserDto { 20 | private String catUrl; 21 | private String flagUrl; 22 | } 23 | -------------------------------------------------------------------------------- /18. SpringCloud/UsersInfoService/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=about 2 | 3 | server.port=0 4 | 5 | eureka.client.service-url.defaultZone=http://localhost:9000/eureka 6 | eureka.instance.prefer-ip-address=true 7 | -------------------------------------------------------------------------------- /18. SpringCloud/ZuulService/src/main/java/ru/itis/gateway/app/DocumentationController.java: -------------------------------------------------------------------------------- 1 | package ru.itis.gateway.app; 2 | 3 | import org.springframework.boot.autoconfigure.EnableAutoConfiguration; 4 | import org.springframework.context.annotation.Primary; 5 | import org.springframework.stereotype.Component; 6 | import springfox.documentation.swagger.web.SwaggerResource; 7 | import springfox.documentation.swagger.web.SwaggerResourcesProvider; 8 | 9 | import java.util.ArrayList; 10 | import java.util.List; 11 | 12 | @Component 13 | @Primary 14 | @EnableAutoConfiguration 15 | public class DocumentationController implements SwaggerResourcesProvider { 16 | 17 | @Override 18 | public List get() { 19 | List resources = new ArrayList<>(); 20 | resources.add(swaggerResource("user", "/api/cat/v2/api-docs", "2.0")); 21 | resources.add(swaggerResource("country", "/api/country/v2/api-docs", "2.0")); 22 | resources.add(swaggerResource("about", "/api/about/v2/api-docs", "2.0")); 23 | return resources; 24 | } 25 | 26 | private SwaggerResource swaggerResource(String name, String location, String version) { 27 | SwaggerResource swaggerResource = new SwaggerResource(); 28 | swaggerResource.setName(name); 29 | swaggerResource.setLocation(location); 30 | swaggerResource.setSwaggerVersion(version); 31 | return swaggerResource; 32 | } 33 | 34 | } -------------------------------------------------------------------------------- /18. SpringCloud/ZuulService/src/main/java/ru/itis/gateway/app/ZuulApplication.java: -------------------------------------------------------------------------------- 1 | package ru.itis.gateway.app; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import org.springframework.cloud.netflix.eureka.EnableEurekaClient; 6 | import org.springframework.cloud.netflix.zuul.EnableZuulProxy; 7 | import springfox.documentation.swagger2.annotations.EnableSwagger2; 8 | 9 | /** 10 | * 13.04.2018 11 | * ZuulApplication 12 | * 13 | * @author Sidikov Marsel (First Software Engineering Platform) 14 | * @version v1.0 15 | */ 16 | @EnableSwagger2 17 | @EnableZuulProxy 18 | @SpringBootApplication 19 | @EnableEurekaClient 20 | public class ZuulApplication { 21 | public static void main(String[] args) { 22 | SpringApplication.run(ZuulApplication.class); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /18. SpringCloud/ZuulService/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=zuul-gateway-service 2 | server.port=8080 3 | 4 | eureka.client.service-url.defaultZone=http://localhost:9000/eureka 5 | eureka.instance.prefer-ip-address=true -------------------------------------------------------------------------------- /18. SpringCloud/ZuulService/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | zuul: 2 | prefix: /api 3 | routes: 4 | user: 5 | path: /cat/** 6 | serviceId: CAT 7 | country: 8 | path: /country/** 9 | serviceId: COUNTRY 10 | about: 11 | path: /about/** 12 | servcieId: ABOUT -------------------------------------------------------------------------------- /19. Websockets-stomp/src/main/java/ru/itis/websockets/app/Application.java: -------------------------------------------------------------------------------- 1 | package ru.itis.websockets.app; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import org.springframework.boot.builder.SpringApplicationBuilder; 6 | import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; 7 | import org.springframework.context.annotation.ComponentScan; 8 | 9 | /** 10 | * 25.01.17 11 | * Application 12 | * 13 | * @author Sidikov Marsel (First Software Engineering Platform) 14 | * @version v1.0 15 | */ 16 | @SpringBootApplication 17 | @ComponentScan("ru.itis") 18 | public class Application extends SpringBootServletInitializer { 19 | 20 | @Override 21 | protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { 22 | return application.sources(Application.class); 23 | } 24 | 25 | public static void main(String[] args) { 26 | SpringApplication.run(Application.class,args); 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /19. Websockets-stomp/src/main/java/ru/itis/websockets/config/StompWebSocketConfig.java: -------------------------------------------------------------------------------- 1 | package ru.itis.websockets.config; 2 | 3 | import org.springframework.beans.factory.annotation.Autowired; 4 | import org.springframework.context.annotation.Configuration; 5 | import org.springframework.messaging.simp.config.ChannelRegistration; 6 | import org.springframework.messaging.simp.config.MessageBrokerRegistry; 7 | import org.springframework.web.socket.config.annotation.*; 8 | import ru.itis.websockets.interceptors.CustomInterceptor; 9 | 10 | @Configuration 11 | @EnableWebSocket 12 | @EnableWebSocketMessageBroker 13 | public class StompWebSocketConfig implements WebSocketMessageBrokerConfigurer { 14 | 15 | 16 | @Autowired 17 | private CustomInterceptor interceptor; 18 | 19 | @Override 20 | public void configureMessageBroker(MessageBrokerRegistry config) { 21 | config.enableSimpleBroker("/topic"); 22 | config.setApplicationDestinationPrefixes("/app"); 23 | } 24 | 25 | public void registerStompEndpoints(StompEndpointRegistry stompEndpointRegistry) { 26 | stompEndpointRegistry.addEndpoint("/messages").setAllowedOrigins("*").withSockJS(); 27 | } 28 | 29 | @Override 30 | public void configureClientInboundChannel(ChannelRegistration registration) { 31 | registration.interceptors(interceptor); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /19. Websockets-stomp/src/main/java/ru/itis/websockets/controllers/MessageController.java: -------------------------------------------------------------------------------- 1 | package ru.itis.websockets.controllers; 2 | 3 | import org.springframework.beans.factory.annotation.Autowired; 4 | import org.springframework.messaging.Message; 5 | import org.springframework.messaging.handler.annotation.MessageMapping; 6 | import org.springframework.messaging.handler.annotation.SendTo; 7 | import org.springframework.messaging.simp.SimpMessagingTemplate; 8 | import org.springframework.stereotype.Controller; 9 | import org.springframework.web.socket.TextMessage; 10 | 11 | /** 12 | * 20.03.2018 13 | * MessageController 14 | * 15 | * @author Sidikov Marsel (First Software Engineering Platform) 16 | * @version v1.0 17 | */ 18 | @Controller 19 | public class MessageController { 20 | 21 | @Autowired 22 | SimpMessagingTemplate template; 23 | 24 | @MessageMapping("/hello") 25 | public void getMessage(Message message) { 26 | System.out.println(message); 27 | template.convertAndSend("/topic/chat/", "hello!"); 28 | } 29 | 30 | @MessageMapping("/bye") 31 | @SendTo("/topic/chat") 32 | public TextMessage byeMessage(Message message) { 33 | return new TextMessage("Bye bye!"); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /19. Websockets-stomp/src/main/java/ru/itis/websockets/interceptors/CustomInterceptor.java: -------------------------------------------------------------------------------- 1 | package ru.itis.websockets.interceptors; 2 | 3 | import org.springframework.messaging.Message; 4 | import org.springframework.messaging.MessageChannel; 5 | import org.springframework.messaging.simp.stomp.StompCommand; 6 | import org.springframework.messaging.simp.stomp.StompHeaderAccessor; 7 | import org.springframework.messaging.support.ChannelInterceptorAdapter; 8 | import org.springframework.messaging.support.MessageHeaderAccessor; 9 | import org.springframework.stereotype.Component; 10 | 11 | @Component 12 | public class CustomInterceptor extends ChannelInterceptorAdapter { 13 | 14 | @Override 15 | public Message preSend(Message message, MessageChannel channel) { 16 | StompHeaderAccessor accessor = 17 | MessageHeaderAccessor.getAccessor(message, StompHeaderAccessor.class); 18 | if (accessor.getCommand().equals(StompCommand.CONNECT)) { 19 | System.out.println("К нам подключились!"); 20 | } else if (accessor.getCommand().equals(StompCommand.SUBSCRIBE)) { 21 | System.out.println("+1 подписчик!"); 22 | } 23 | 24 | System.out.println(message); 25 | return message; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /19. Websockets-stomp/src/main/resources/static/js/app.js: -------------------------------------------------------------------------------- 1 | var stompClient = null; 2 | 3 | function setConnected(connected) { 4 | $("#connect").prop("disabled", connected); 5 | $("#disconnect").prop("disabled", !connected); 6 | if (connected) { 7 | $("#conversation").show(); 8 | } 9 | else { 10 | $("#conversation").hide(); 11 | } 12 | $("#greetings").html(""); 13 | } 14 | 15 | function connect() { 16 | var socket = new SockJS('/messages'); 17 | stompClient = Stomp.over(socket); 18 | stompClient.connect({}, function (frame) { 19 | setConnected(true); 20 | console.log('Connected: ' + frame); 21 | stompClient.subscribe('/topic/chat', function (greeting) { 22 | showGreeting(greeting); 23 | }); 24 | }); 25 | } 26 | 27 | function disconnect() { 28 | if (stompClient !== null) { 29 | stompClient.disconnect(); 30 | } 31 | setConnected(false); 32 | console.log("Disconnected"); 33 | } 34 | 35 | function sendName() { 36 | stompClient.send("/app/hello", {}, $("#name").val()); 37 | } 38 | 39 | function showGreeting(message) { 40 | $("#greetings").append("" + message + ""); 41 | } 42 | 43 | $(function () { 44 | $("form").on('submit', function (e) { 45 | e.preventDefault(); 46 | }); 47 | $( "#connect" ).click(function() { connect(); }); 48 | $( "#disconnect" ).click(function() { disconnect(); }); 49 | $( "#send" ).click(function() { sendName(); }); 50 | }); -------------------------------------------------------------------------------- /20. Prepared Statements/README.md: -------------------------------------------------------------------------------- 1 | # Подготовленные запросы 2 | 3 | ## Жизненный цикл запроса 4 | 5 | 1. Создание Connection (или использование готового) 6 | 2. Отправка запроса на сервер 7 | 3. Выполняется парсинг запроса 8 | 4. Выполняется анализ запроса 9 | 5. Строится план запроса 10 | 6. Выполняется план запроса 11 | 12 | * План запроса - реальная последовательность действий, которую выполняет ядро СУБД для получения реального результата. 13 | 14 | * Оператор `explain` - показывает план запроса. 15 | 16 | * Подготовленный оператор - оператор, созданный на основе запроса. Данный запрос кэширован - он не проходит этапы 3 и 4. 17 | 18 | * Оператор `prepare` - создание подготовленного оператора. 19 | 20 | * Оператор `execute` - вызов подготовленного оператора по его названию. После 5-ти кратного вызова СУБД будет кэшировать также план запроса. 21 | -------------------------------------------------------------------------------- /20. Prepared Statements/images/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarselSidikov/JAVA_ENTERPRISE_2/0a499cbe9edd566ece80e1efedbfafef374abf80/20. Prepared Statements/images/1.png -------------------------------------------------------------------------------- /20. Prepared Statements/images/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarselSidikov/JAVA_ENTERPRISE_2/0a499cbe9edd566ece80e1efedbfafef374abf80/20. Prepared Statements/images/2.png -------------------------------------------------------------------------------- /20. Prepared Statements/images/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarselSidikov/JAVA_ENTERPRISE_2/0a499cbe9edd566ece80e1efedbfafef374abf80/20. Prepared Statements/images/3.png -------------------------------------------------------------------------------- /20. Prepared Statements/images/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarselSidikov/JAVA_ENTERPRISE_2/0a499cbe9edd566ece80e1efedbfafef374abf80/20. Prepared Statements/images/4.png -------------------------------------------------------------------------------- /20. Prepared Statements/images/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarselSidikov/JAVA_ENTERPRISE_2/0a499cbe9edd566ece80e1efedbfafef374abf80/20. Prepared Statements/images/5.png -------------------------------------------------------------------------------- /20. Prepared Statements/images/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarselSidikov/JAVA_ENTERPRISE_2/0a499cbe9edd566ece80e1efedbfafef374abf80/20. Prepared Statements/images/6.png -------------------------------------------------------------------------------- /20. Prepared Statements/images/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarselSidikov/JAVA_ENTERPRISE_2/0a499cbe9edd566ece80e1efedbfafef374abf80/20. Prepared Statements/images/7.png -------------------------------------------------------------------------------- /20. Prepared Statements/images/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarselSidikov/JAVA_ENTERPRISE_2/0a499cbe9edd566ece80e1efedbfafef374abf80/20. Prepared Statements/images/8.png -------------------------------------------------------------------------------- /20. Prepared Statements/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | ru.itdrive 8 | jdbc-statements 9 | 0.1 10 | 11 | 12 | 13 | 14 | org.postgresql 15 | postgresql 16 | 42.2.9 17 | 18 | 19 | 20 | org.projectlombok 21 | lombok 22 | 1.18.10 23 | provided 24 | 25 | 26 | -------------------------------------------------------------------------------- /20. Prepared Statements/sql/queries.sql: -------------------------------------------------------------------------------- 1 | explain (costs false) select s.first_name, s.last_name, c.title 2 | from student s 3 | inner join student_course sc on s.id = sc.student_id 4 | inner join course c on sc.course_id = c.id 5 | inner join lesson l on c.id = l.course_id 6 | where l.name = 'Simple Math'; 7 | 8 | prepare get_students_by_lesson(char) as select s.first_name, s.last_name, c.title 9 | from student s 10 | inner join student_course sc on s.id = sc.student_id 11 | inner join course c on sc.course_id = c.id 12 | inner join lesson l on c.id = l.course_id 13 | where l.name = $1; 14 | 15 | explain execute get_students_by_lesson('Simple Math'); 16 | 17 | select * from pg_prepared_statements; 18 | 19 | -------------------------------------------------------------------------------- /21. Hateoas Rest/.gitignore: -------------------------------------------------------------------------------- 1 | HELP.md 2 | target/ 3 | !.mvn/wrapper/maven-wrapper.jar 4 | !**/src/main/** 5 | !**/src/test/** 6 | 7 | ### STS ### 8 | .apt_generated 9 | .classpath 10 | .factorypath 11 | .project 12 | .settings 13 | .springBeans 14 | .sts4-cache 15 | 16 | ### IntelliJ IDEA ### 17 | .idea 18 | *.iws 19 | *.iml 20 | *.ipr 21 | 22 | ### NetBeans ### 23 | /nbproject/private/ 24 | /nbbuild/ 25 | /dist/ 26 | /nbdist/ 27 | /.nb-gradle/ 28 | build/ 29 | 30 | ### VS Code ### 31 | .vscode/ 32 | -------------------------------------------------------------------------------- /21. Hateoas Rest/.mvn/wrapper/maven-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarselSidikov/JAVA_ENTERPRISE_2/0a499cbe9edd566ece80e1efedbfafef374abf80/21. Hateoas Rest/.mvn/wrapper/maven-wrapper.jar -------------------------------------------------------------------------------- /21. Hateoas Rest/.mvn/wrapper/maven-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip 2 | wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar 3 | -------------------------------------------------------------------------------- /21. Hateoas Rest/src/main/asciidoc/apidoc.adoc: -------------------------------------------------------------------------------- 1 | = Описание API по курсам 2 | 3 | == Методы 4 | 5 | |=== 6 | |Метод | Назначение 7 | |`PUT` 8 | |Обновить сущность или ее состояние 9 | |=== 10 | 11 | === Публикация курса 12 | 13 | Можно опубликовать курсы со статусом *PUBLISHED* 14 | 15 | .request 16 | 17 | include::{snippets}/publish_course/http-request.adoc[] 18 | 19 | .response 20 | 21 | include::{snippets}/publish_course/http-response.adoc[] 22 | 23 | .response-fields 24 | 25 | include::{snippets}/publish_course/response-fields.adoc[] -------------------------------------------------------------------------------- /21. Hateoas Rest/src/main/java/ru/itis/hateoasrest/config/CoursesRepresentationProcessor.java: -------------------------------------------------------------------------------- 1 | package ru.itis.hateoasrest.config; 2 | 3 | import org.springframework.beans.factory.annotation.Autowired; 4 | import org.springframework.data.rest.webmvc.support.RepositoryEntityLinks; 5 | import org.springframework.hateoas.EntityModel; 6 | import org.springframework.hateoas.server.RepresentationModelProcessor; 7 | import org.springframework.stereotype.Component; 8 | import ru.itis.hateoasrest.controllers.CoursesController; 9 | import ru.itis.hateoasrest.models.Course; 10 | 11 | import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo; 12 | import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.methodOn; 13 | 14 | @Component 15 | public class CoursesRepresentationProcessor implements RepresentationModelProcessor> { 16 | 17 | @Autowired 18 | private RepositoryEntityLinks links; 19 | 20 | @Override 21 | public EntityModel process(EntityModel model) { 22 | Course course = model.getContent(); 23 | if (course != null && course.getState().equals("Draft")) { 24 | model.add(linkTo(methodOn(CoursesController.class).publish(course.getId())).withRel("publish")); 25 | } 26 | 27 | if (course!= null && course.getState().equals("Published")) { 28 | model.add(links.linkToItemResource(Course.class, course.getId()).withRel("delete")); 29 | } 30 | return model; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /21. Hateoas Rest/src/main/java/ru/itis/hateoasrest/controllers/CoursesController.java: -------------------------------------------------------------------------------- 1 | package ru.itis.hateoasrest.controllers; 2 | 3 | import org.springframework.beans.factory.annotation.Autowired; 4 | import org.springframework.data.rest.webmvc.RepositoryRestController; 5 | import org.springframework.hateoas.EntityModel; 6 | import org.springframework.http.ResponseEntity; 7 | import org.springframework.web.bind.annotation.PathVariable; 8 | import org.springframework.web.bind.annotation.RequestMapping; 9 | import org.springframework.web.bind.annotation.RequestMethod; 10 | import org.springframework.web.bind.annotation.ResponseBody; 11 | import ru.itis.hateoasrest.services.CoursesService; 12 | 13 | @RepositoryRestController 14 | public class CoursesController { 15 | 16 | @Autowired 17 | private CoursesService coursesService; 18 | 19 | @RequestMapping(value = "/courses/{course-id}/publish", method = RequestMethod.PUT) 20 | public @ResponseBody 21 | ResponseEntity publish(@PathVariable("course-id") Long courseId) { 22 | return ResponseEntity.ok( 23 | new EntityModel<>( 24 | coursesService.publish(courseId))); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /21. Hateoas Rest/src/main/java/ru/itis/hateoasrest/models/Course.java: -------------------------------------------------------------------------------- 1 | package ru.itis.hateoasrest.models; 2 | 3 | import com.fasterxml.jackson.annotation.JsonIgnore; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Builder; 6 | import lombok.Data; 7 | import lombok.NoArgsConstructor; 8 | 9 | import javax.persistence.*; 10 | import java.util.List; 11 | 12 | @Entity 13 | @Data 14 | @AllArgsConstructor 15 | @NoArgsConstructor 16 | @Builder 17 | public class Course { 18 | @Id 19 | @GeneratedValue 20 | private Long id; 21 | 22 | private String title; 23 | private String description; 24 | 25 | @OneToMany(mappedBy = "course") 26 | private List lessons; 27 | 28 | @ManyToMany(mappedBy = "courses") 29 | private List students; 30 | 31 | private String state; 32 | 33 | public void publish() { 34 | if (this.state.equals("Draft")) { 35 | this.state = "Published"; 36 | } else if (this.state.equals("Deleted")) { 37 | throw new IllegalStateException(); 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /21. Hateoas Rest/src/main/java/ru/itis/hateoasrest/models/Lesson.java: -------------------------------------------------------------------------------- 1 | package ru.itis.hateoasrest.models; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | import javax.persistence.*; 9 | 10 | @Entity 11 | @Data 12 | @AllArgsConstructor 13 | @NoArgsConstructor 14 | @Builder 15 | public class Lesson { 16 | @Id 17 | @GeneratedValue 18 | private Long id; 19 | 20 | private String title; 21 | private Integer rate; 22 | 23 | @ManyToOne 24 | @JoinColumn(name = "course_id") 25 | private Course course; 26 | 27 | } 28 | -------------------------------------------------------------------------------- /21. Hateoas Rest/src/main/java/ru/itis/hateoasrest/models/Student.java: -------------------------------------------------------------------------------- 1 | package ru.itis.hateoasrest.models; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | import javax.persistence.*; 9 | import java.util.List; 10 | 11 | @Entity 12 | @Data 13 | @AllArgsConstructor 14 | @NoArgsConstructor 15 | @Builder 16 | public class Student { 17 | @Id 18 | @GeneratedValue 19 | private Long id; 20 | 21 | private String firstName; 22 | private String lastName; 23 | 24 | @ManyToMany 25 | @JoinTable(name = "student_course", 26 | joinColumns = @JoinColumn(name = "student_id", referencedColumnName = "id"), 27 | inverseJoinColumns = @JoinColumn(name = "course_id", referencedColumnName = "id")) 28 | private List courses; 29 | } 30 | -------------------------------------------------------------------------------- /21. Hateoas Rest/src/main/java/ru/itis/hateoasrest/repositories/CoursesRepository.java: -------------------------------------------------------------------------------- 1 | package ru.itis.hateoasrest.repositories; 2 | 3 | import org.springframework.data.domain.Page; 4 | import org.springframework.data.domain.Pageable; 5 | import org.springframework.data.jpa.repository.Query; 6 | import org.springframework.data.repository.PagingAndSortingRepository; 7 | import org.springframework.data.rest.core.annotation.RepositoryRestResource; 8 | import org.springframework.data.rest.core.annotation.RestResource; 9 | import ru.itis.hateoasrest.models.Course; 10 | 11 | import java.util.List; 12 | 13 | @RepositoryRestResource 14 | public interface CoursesRepository extends PagingAndSortingRepository { 15 | 16 | @RestResource(path = "published", rel = "published") 17 | @Query("from Course course where course.state = 'Published'") 18 | Page findAllPublished(Pageable pageable); 19 | 20 | List findAllByTitle(String title); 21 | } 22 | -------------------------------------------------------------------------------- /21. Hateoas Rest/src/main/java/ru/itis/hateoasrest/repositories/LessonsRepository.java: -------------------------------------------------------------------------------- 1 | package ru.itis.hateoasrest.repositories; 2 | 3 | import org.springframework.data.jpa.repository.JpaRepository; 4 | import ru.itis.hateoasrest.models.Lesson; 5 | 6 | public interface LessonsRepository extends JpaRepository { 7 | } 8 | -------------------------------------------------------------------------------- /21. Hateoas Rest/src/main/java/ru/itis/hateoasrest/repositories/StudentsRepository.java: -------------------------------------------------------------------------------- 1 | package ru.itis.hateoasrest.repositories; 2 | 3 | import org.springframework.data.jpa.repository.JpaRepository; 4 | import ru.itis.hateoasrest.models.Student; 5 | 6 | public interface StudentsRepository extends JpaRepository { 7 | } 8 | -------------------------------------------------------------------------------- /21. Hateoas Rest/src/main/java/ru/itis/hateoasrest/services/CoursesService.java: -------------------------------------------------------------------------------- 1 | package ru.itis.hateoasrest.services; 2 | 3 | import ru.itis.hateoasrest.models.Course; 4 | 5 | public interface CoursesService { 6 | Course publish(Long courseId); 7 | } 8 | -------------------------------------------------------------------------------- /21. Hateoas Rest/src/main/java/ru/itis/hateoasrest/services/CoursesServiceImpl.java: -------------------------------------------------------------------------------- 1 | package ru.itis.hateoasrest.services; 2 | 3 | import org.springframework.beans.factory.annotation.Autowired; 4 | import org.springframework.stereotype.Service; 5 | import ru.itis.hateoasrest.models.Course; 6 | import ru.itis.hateoasrest.repositories.CoursesRepository; 7 | 8 | @Service 9 | public class CoursesServiceImpl implements CoursesService { 10 | 11 | @Autowired 12 | private CoursesRepository coursesRepository; 13 | 14 | @Override 15 | public Course publish(Long courseId) { 16 | Course course = coursesRepository.findById(courseId).orElseThrow(IllegalArgumentException::new); 17 | course.publish(); 18 | coursesRepository.save(course); 19 | return course; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /21. Hateoas Rest/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | spring.h2.console.enabled=true 2 | spring.datasource.url=jdbc:h2:mem:education-center 3 | spring.datasource.driverClassName=org.h2.Driver 4 | spring.datasource.username=sa 5 | spring.datasource.password= 6 | spring.jpa.show-sql=true 7 | spring.jpa.hibernate.ddl-auto=update 8 | spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect 9 | #spring.data.rest.base-path=/api/courses-management/ 10 | server.port=80 -------------------------------------------------------------------------------- /21. Hateoas Rest/src/test/java/ru/itis/hateoasrest/HateoasRestApplicationTests.java: -------------------------------------------------------------------------------- 1 | package ru.itis.hateoasrest; 2 | 3 | import org.junit.jupiter.api.Test; 4 | import org.springframework.boot.test.context.SpringBootTest; 5 | 6 | @SpringBootTest 7 | class HateoasRestApplicationTests { 8 | 9 | @Test 10 | void contextLoads() { 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /22. Covid Service/.gitignore: -------------------------------------------------------------------------------- 1 | HELP.md 2 | target/ 3 | !.mvn/wrapper/maven-wrapper.jar 4 | !**/src/main/** 5 | !**/src/test/** 6 | 7 | ### STS ### 8 | .apt_generated 9 | .classpath 10 | .factorypath 11 | .project 12 | .settings 13 | .springBeans 14 | .sts4-cache 15 | 16 | ### IntelliJ IDEA ### 17 | .idea 18 | *.iws 19 | *.iml 20 | *.ipr 21 | 22 | ### NetBeans ### 23 | /nbproject/private/ 24 | /nbbuild/ 25 | /dist/ 26 | /nbdist/ 27 | /.nb-gradle/ 28 | build/ 29 | 30 | ### VS Code ### 31 | .vscode/ 32 | -------------------------------------------------------------------------------- /22. Covid Service/.mvn/wrapper/maven-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarselSidikov/JAVA_ENTERPRISE_2/0a499cbe9edd566ece80e1efedbfafef374abf80/22. Covid Service/.mvn/wrapper/maven-wrapper.jar -------------------------------------------------------------------------------- /22. Covid Service/.mvn/wrapper/maven-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip 2 | wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar 3 | -------------------------------------------------------------------------------- /22. Covid Service/src/main/java/ru/itis/covid/CovidServiceApplication.java: -------------------------------------------------------------------------------- 1 | package ru.itis.covid; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import org.springframework.context.annotation.Bean; 6 | import org.springframework.web.client.RestTemplate; 7 | 8 | @SpringBootApplication 9 | public class CovidServiceApplication { 10 | 11 | @Bean 12 | public RestTemplate restTemplate() { 13 | return new RestTemplate(); 14 | } 15 | 16 | public static void main(String[] args) { 17 | SpringApplication.run(CovidServiceApplication.class, args); 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /22. Covid Service/src/main/java/ru/itis/covid/clients/CovidClient.java: -------------------------------------------------------------------------------- 1 | package ru.itis.covid.clients; 2 | 3 | import reactor.core.publisher.Flux; 4 | import ru.itis.covid.entries.CovidStatistic; 5 | 6 | public interface CovidClient { 7 | Flux getAll(); 8 | } 9 | -------------------------------------------------------------------------------- /22. Covid Service/src/main/java/ru/itis/covid/clients/rest/Covid19ApiClientRestTemplateImpl.java: -------------------------------------------------------------------------------- 1 | //package ru.itis.covid.clients.rest; 2 | // 3 | //import org.springframework.beans.factory.annotation.Autowired; 4 | //import org.springframework.beans.factory.annotation.Value; 5 | //import org.springframework.stereotype.Component; 6 | //import org.springframework.web.client.RestTemplate; 7 | //import ru.itis.covid.clients.CovidClient; 8 | //import ru.itis.covid.entries.Covid19ApiRecord; 9 | //import ru.itis.covid.entries.CovidStatistic; 10 | // 11 | //import java.util.Arrays; 12 | //import java.util.List; 13 | //import java.util.Objects; 14 | //import java.util.stream.Collectors; 15 | // 16 | //@Component 17 | //public class Covid19ApiClientRestTemplateImpl implements CovidClient { 18 | // 19 | // @Value("${covid19.api.url}") 20 | // private String url; 21 | // 22 | // @Autowired 23 | // private RestTemplate client; 24 | // 25 | // @Override 26 | // public List getAll() { 27 | // Covid19ApiRecord[] response = client.getForEntity(url, Covid19ApiRecord[].class).getBody(); 28 | // List records = Arrays.asList(Objects.requireNonNull(response)); 29 | // return records.parallelStream() 30 | // .map(record -> CovidStatistic.builder() 31 | // .country(record.getCountryCode()) 32 | // .dateTime(record.getDate()) 33 | // .from("Covid19Api") 34 | // .recovered(record.getRecovered()) 35 | // .build()) 36 | // .collect(Collectors.toList()); 37 | // } 38 | //} 39 | -------------------------------------------------------------------------------- /22. Covid Service/src/main/java/ru/itis/covid/controllers/CovidController.java: -------------------------------------------------------------------------------- 1 | package ru.itis.covid.controllers; 2 | 3 | import org.springframework.beans.factory.annotation.Autowired; 4 | import org.springframework.http.MediaType; 5 | import org.springframework.web.bind.annotation.GetMapping; 6 | import org.springframework.web.bind.annotation.RequestMapping; 7 | import org.springframework.web.bind.annotation.RestController; 8 | import reactor.core.publisher.Flux; 9 | import ru.itis.covid.entries.CovidStatistic; 10 | import ru.itis.covid.service.CovidService; 11 | 12 | import java.util.List; 13 | 14 | @RestController 15 | @RequestMapping("/covid-management") 16 | public class CovidController { 17 | 18 | @Autowired 19 | private CovidService covidService; 20 | 21 | @GetMapping(value = "/records", produces = MediaType.TEXT_EVENT_STREAM_VALUE) 22 | public Flux getAll() { 23 | return covidService.getAll(); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /22. Covid Service/src/main/java/ru/itis/covid/entries/Covid19ApiRecord.java: -------------------------------------------------------------------------------- 1 | package ru.itis.covid.entries; 2 | 3 | import com.fasterxml.jackson.annotation.JsonProperty; 4 | import lombok.Data; 5 | 6 | @Data 7 | public class Covid19ApiRecord { 8 | @JsonProperty("CountryCode") 9 | private String countryCode; 10 | 11 | @JsonProperty("Recovered") 12 | private Integer recovered; 13 | 14 | @JsonProperty("Date") 15 | private String date; 16 | 17 | } 18 | -------------------------------------------------------------------------------- /22. Covid Service/src/main/java/ru/itis/covid/entries/CovidStatistic.java: -------------------------------------------------------------------------------- 1 | package ru.itis.covid.entries; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | @Data 9 | @AllArgsConstructor 10 | @NoArgsConstructor 11 | @Builder 12 | public class CovidStatistic { 13 | private String dateTime; 14 | private String country; 15 | private Integer recovered; 16 | private String from; 17 | } 18 | -------------------------------------------------------------------------------- /22. Covid Service/src/main/java/ru/itis/covid/entries/TheVirusTrackerRecord.java: -------------------------------------------------------------------------------- 1 | package ru.itis.covid.entries; 2 | 3 | import com.fasterxml.jackson.annotation.JsonProperty; 4 | import lombok.Data; 5 | 6 | @Data 7 | public class TheVirusTrackerRecord { 8 | @JsonProperty("countrycode") 9 | private String countryCode; 10 | private String date; 11 | private String recovered; 12 | } 13 | -------------------------------------------------------------------------------- /22. Covid Service/src/main/java/ru/itis/covid/entries/TheVirusTrackerResponse.java: -------------------------------------------------------------------------------- 1 | package ru.itis.covid.entries; 2 | 3 | import lombok.Data; 4 | 5 | import java.util.List; 6 | 7 | @Data 8 | public class TheVirusTrackerResponse { 9 | private List data; 10 | } 11 | -------------------------------------------------------------------------------- /22. Covid Service/src/main/java/ru/itis/covid/service/CovidService.java: -------------------------------------------------------------------------------- 1 | package ru.itis.covid.service; 2 | 3 | import reactor.core.publisher.Flux; 4 | import ru.itis.covid.entries.CovidStatistic; 5 | 6 | 7 | public interface CovidService { 8 | Flux getAll(); 9 | } 10 | -------------------------------------------------------------------------------- /22. Covid Service/src/main/java/ru/itis/covid/service/CovidServiceImpl.java: -------------------------------------------------------------------------------- 1 | package ru.itis.covid.service; 2 | 3 | import org.springframework.beans.factory.annotation.Autowired; 4 | import org.springframework.stereotype.Service; 5 | import reactor.core.publisher.Flux; 6 | import reactor.core.publisher.Mono; 7 | import reactor.core.scheduler.Schedulers; 8 | import ru.itis.covid.clients.CovidClient; 9 | import ru.itis.covid.entries.CovidStatistic; 10 | 11 | import java.util.List; 12 | import java.util.stream.Collectors; 13 | 14 | @Service 15 | public class CovidServiceImpl implements CovidService { 16 | 17 | @Autowired 18 | private List clients; 19 | 20 | @Override 21 | public Flux getAll() { 22 | List> fluxes = clients.stream().map(this::getAll).collect(Collectors.toList()); 23 | return Flux.merge(fluxes); 24 | } 25 | 26 | private Flux getAll(CovidClient client) { 27 | return client.getAll().subscribeOn(Schedulers.elastic()); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /22. Covid Service/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | covid19.api.url=https://api.covid19api.com/all 2 | thevirustracker.url=https://thevirustracker.com/timeline/map-data.json 3 | server.port=80 -------------------------------------------------------------------------------- /22. Covid Service/src/test/java/ru/itis/covid/CovidServiceApplicationTests.java: -------------------------------------------------------------------------------- 1 | package ru.itis.covid; 2 | 3 | import org.junit.jupiter.api.Test; 4 | import org.springframework.boot.test.context.SpringBootTest; 5 | 6 | @SpringBootTest 7 | class CovidServiceApplicationTests { 8 | 9 | @Test 10 | void contextLoads() { 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /23. Rabbit MQ Producers/downloaded/346d13e7-0e3f-4b07-a313-8c75ef972dcc.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarselSidikov/JAVA_ENTERPRISE_2/0a499cbe9edd566ece80e1efedbfafef374abf80/23. Rabbit MQ Producers/downloaded/346d13e7-0e3f-4b07-a313-8c75ef972dcc.jpeg -------------------------------------------------------------------------------- /23. Rabbit MQ Producers/downloaded/dea4123b-b443-49d1-a358-8322e5eb00c8.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarselSidikov/JAVA_ENTERPRISE_2/0a499cbe9edd566ece80e1efedbfafef374abf80/23. Rabbit MQ Producers/downloaded/dea4123b-b443-49d1-a358-8322e5eb00c8.pdf -------------------------------------------------------------------------------- /23. Rabbit MQ Producers/downloaded/f579bd13-05e0-49e5-95cc-4a9ffcc043ef.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarselSidikov/JAVA_ENTERPRISE_2/0a499cbe9edd566ece80e1efedbfafef374abf80/23. Rabbit MQ Producers/downloaded/f579bd13-05e0-49e5-95cc-4a9ffcc043ef.pdf -------------------------------------------------------------------------------- /23. Rabbit MQ Producers/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | ru.itis 8 | rabbit-mq-producer 9 | 0.1 10 | 11 | 12 | 13 | org.apache.maven.plugins 14 | maven-compiler-plugin 15 | 16 | 8 17 | 8 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | com.rabbitmq 27 | amqp-client 28 | 5.9.0 29 | 30 | 31 | 32 | 33 | org.slf4j 34 | slf4j-simple 35 | 1.7.30 36 | test 37 | 38 | 39 | org.slf4j 40 | slf4j-nop 41 | 1.7.30 42 | 43 | 44 | -------------------------------------------------------------------------------- /23. Rabbit MQ Producers/src/main/java/ru/itis/example1/Consumer.java: -------------------------------------------------------------------------------- 1 | package ru.itis.example1; 2 | 3 | import com.rabbitmq.client.*; 4 | 5 | import java.io.IOException; 6 | import java.util.concurrent.TimeoutException; 7 | 8 | public class Consumer { 9 | // две очереди 10 | private final static String QUEUE_1 = "queue_1"; 11 | private final static String QUEUE_2 = "queue_2"; 12 | 13 | 14 | public static void main(String[] args) { 15 | ConnectionFactory connectionFactory = new ConnectionFactory(); 16 | connectionFactory.setHost("localhost"); 17 | 18 | try { 19 | Connection connection = connectionFactory.newConnection(); 20 | Channel channel = connection.createChannel(); 21 | 22 | // подписываюсь на сообещния из очереди QUEUE_2 23 | channel.basicConsume(QUEUE_1, true, (consumerTag, message) -> { 24 | System.out.println(consumerTag); 25 | System.out.println("Message FROM " + QUEUE_1 + " " + new String(message.getBody())); 26 | }, consumerTag -> {}); 27 | } catch (IOException | TimeoutException e) { 28 | throw new IllegalArgumentException(e); 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /23. Rabbit MQ Producers/src/main/java/ru/itis/example1/Producer.java: -------------------------------------------------------------------------------- 1 | package ru.itis.example1; 2 | 3 | import com.rabbitmq.client.*; 4 | 5 | import java.io.IOException; 6 | import java.util.concurrent.TimeoutException; 7 | 8 | public class Producer { 9 | // три очереди 10 | private final static String QUEUE_1 = "queue_1"; 11 | private final static String QUEUE_2 = "queue_2"; 12 | private final static String QUEUE_3 = "queue_3"; 13 | 14 | 15 | public static void main(String[] args) { 16 | // подключаемся к RabbitMQ 17 | ConnectionFactory connectionFactory = new ConnectionFactory(); 18 | connectionFactory.setHost("localhost"); 19 | 20 | try { 21 | // подключение 22 | Connection connection = connectionFactory.newConnection(); 23 | // канал подключения 24 | Channel channel = connection.createChannel(); 25 | channel.basicPublish("", QUEUE_1, null, "Hello".getBytes()); 26 | channel.basicPublish("", QUEUE_2, null, "Hello".getBytes()); 27 | channel.basicPublish("", QUEUE_3, null, "Hello".getBytes()); 28 | } catch (IOException | TimeoutException e) { 29 | throw new IllegalArgumentException(e); 30 | } 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /23. Rabbit MQ Producers/src/main/java/ru/itis/example2/ImagesProducer.java: -------------------------------------------------------------------------------- 1 | package ru.itis.example2; 2 | 3 | import com.rabbitmq.client.Channel; 4 | import com.rabbitmq.client.Connection; 5 | import com.rabbitmq.client.ConnectionFactory; 6 | 7 | import java.io.BufferedReader; 8 | import java.io.File; 9 | import java.io.FileReader; 10 | import java.io.IOException; 11 | import java.util.concurrent.TimeoutException; 12 | 13 | public class ImagesProducer { 14 | private final static String IMAGES_QUEUE = "images_queue"; 15 | 16 | 17 | public static void main(String[] args) { 18 | ConnectionFactory connectionFactory = new ConnectionFactory(); 19 | connectionFactory.setHost("localhost"); 20 | 21 | try { 22 | Connection connection = connectionFactory.newConnection(); 23 | Channel channel = connection.createChannel(); 24 | // открываем файл с картинками 25 | File file = new File("images.txt"); 26 | BufferedReader reader = new BufferedReader(new FileReader(file)); 27 | String currentFile; 28 | // считываем URL-изображения и отправляет этот URL в очередь IMAGES 29 | while ((currentFile = reader.readLine()) != null) { 30 | channel.basicPublish("", IMAGES_QUEUE, null, currentFile.getBytes()); 31 | } 32 | } catch (IOException | TimeoutException e) { 33 | throw new IllegalArgumentException(e); 34 | } 35 | } 36 | 37 | } 38 | -------------------------------------------------------------------------------- /23. Rabbit MQ Producers/src/main/java/ru/itis/example3/ImagesProducer.java: -------------------------------------------------------------------------------- 1 | package ru.itis.example3; 2 | 3 | import com.rabbitmq.client.Channel; 4 | import com.rabbitmq.client.Connection; 5 | import com.rabbitmq.client.ConnectionFactory; 6 | 7 | import java.io.BufferedReader; 8 | import java.io.File; 9 | import java.io.FileReader; 10 | import java.io.IOException; 11 | import java.util.concurrent.TimeoutException; 12 | 13 | public class ImagesProducer { 14 | private final static String EXCHANGE_NAME = "images"; 15 | private final static String EXCHANGE_TYPE = "fanout"; 16 | 17 | public static void main(String[] args) { 18 | ConnectionFactory connectionFactory = new ConnectionFactory(); 19 | connectionFactory.setHost("localhost"); 20 | 21 | try { 22 | Connection connection = connectionFactory.newConnection(); 23 | Channel channel = connection.createChannel(); 24 | // создаем exchange 25 | channel.exchangeDeclare(EXCHANGE_NAME, EXCHANGE_TYPE); 26 | File file = new File("images.txt"); 27 | BufferedReader reader = new BufferedReader(new FileReader(file)); 28 | String currentFile; 29 | while ((currentFile = reader.readLine()) != null) { 30 | // публикую в exchange 31 | channel.basicPublish(EXCHANGE_NAME, "",null, currentFile.getBytes()); 32 | } 33 | } catch (IOException | TimeoutException e) { 34 | throw new IllegalArgumentException(e); 35 | } 36 | } 37 | 38 | } 39 | -------------------------------------------------------------------------------- /23. Rabbit MQ Producers/src/main/java/ru/itis/example6/MainClient.java: -------------------------------------------------------------------------------- 1 | package ru.itis.example6; 2 | 3 | import java.util.Scanner; 4 | 5 | public class MainClient { 6 | public static void main(String[] args) { 7 | Client client = new Client(); 8 | 9 | Scanner scanner = new Scanner(System.in); 10 | 11 | while (true) { 12 | String fileName = scanner.nextLine(); 13 | System.out.println(client.downloadFileAndGetSize(fileName)); 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /23. Rabbit MQ Producers/src/main/java/ru/itis/example6/MainServer.java: -------------------------------------------------------------------------------- 1 | package ru.itis.example6; 2 | 3 | public class MainServer { 4 | public static void main(String[] args) { 5 | Server server = new Server(); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /Spring Security.md: -------------------------------------------------------------------------------- 1 | # Spring Security 2 | 3 | ## Встроенные классы и интерфейсы 4 | 5 | * UserDetails - это интерфейс, реализация которого позволит Spring Security работать с вашими пользователи. 6 | 7 | - Позволяет получить права пользователя 8 | - Позволяет получить пароль пользователя 9 | - Позволяет получить имя пользователя 10 | - Состояние аккаунта (не просрочен ли аккаунт, не заблокирован ли аккаунт, не просрочены ли его авторизационные данные, активен ли аккаунт) 11 | 12 | * UserDetailsService - интерфейс, который загружает данные пользователя по его имени. 13 | 14 | ## Безопасность на странице 15 | 16 | * Нужно предусмотреть форму для входа. Важно зафиксировать название input-ов страницы входа. 17 | 18 | ## Настройка безопасности 19 | 20 | * SecurityConfig extends WebSecurityConfigurerAdapter - класс, конфигурирующий вашу безопасность(используется паттерн Builder) 21 | 22 | --------------------------------------------------------------------------------