From a5c383360d6e7f3769a82b49e03cd0a8e34467c1 Mon Sep 17 00:00:00 2001 From: DmitriyMX Date: Thu, 25 May 2017 15:12:20 +0300 Subject: [PATCH] =?UTF-8?q?WebApp:=20=D0=BF=D0=BE=D0=B8=D1=81=D0=BA=20?= =?UTF-8?q?=D1=84=D0=B8=D0=BB=D1=8C=D0=BC=D0=BE=D0=B2=20=D0=BF=D0=BE=20?= =?UTF-8?q?=D0=B1=D0=B0=D0=B7=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kinosearch3/spider/BaseRepository.java | 3 +++ .../kinosearch3/spider/MongoDBRepository.java | 17 ++++++++++++++ .../kinosearch3/webpp/SpringConfig.java | 23 +++++++++++++++++++ .../kinosearch3/webpp/WebAppController.java | 23 +++++++++++++++++++ .../kinosearch3/webpp/search.comp.ftl | 6 ++--- .../kinosearch3/webpp/searchResult.ftl | 17 ++++++++++++++ 6 files changed, 86 insertions(+), 3 deletions(-) create mode 100644 src/main/resources/kinosearch/kinosearch3/webpp/searchResult.ftl diff --git a/src/main/java/kinosearch/kinosearch3/spider/BaseRepository.java b/src/main/java/kinosearch/kinosearch3/spider/BaseRepository.java index b411eb5..b2a6bdd 100644 --- a/src/main/java/kinosearch/kinosearch3/spider/BaseRepository.java +++ b/src/main/java/kinosearch/kinosearch3/spider/BaseRepository.java @@ -4,6 +4,9 @@ */ package kinosearch.kinosearch3.spider; +import java.util.List; + public interface BaseRepository { + List findByTitle(String title); void save(CinemaDocument cinemaDocument); } diff --git a/src/main/java/kinosearch/kinosearch3/spider/MongoDBRepository.java b/src/main/java/kinosearch/kinosearch3/spider/MongoDBRepository.java index 222186c..738bf26 100644 --- a/src/main/java/kinosearch/kinosearch3/spider/MongoDBRepository.java +++ b/src/main/java/kinosearch/kinosearch3/spider/MongoDBRepository.java @@ -4,15 +4,32 @@ */ package kinosearch.kinosearch3.spider; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.data.mongodb.core.MongoOperations; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; + +import java.util.List; +import java.util.regex.Pattern; public class MongoDBRepository implements BaseRepository { + private final Logger logger = LoggerFactory.getLogger(MongoDBRepository.class); private final MongoOperations mongoOperations; public MongoDBRepository(MongoOperations mongoOperations) { this.mongoOperations = mongoOperations; } + @Override + public List findByTitle(String title) { + Query query = new Query(); + final String regex = String.format(".*%s.*", Pattern.quote(title)); + query.addCriteria(Criteria.where("title").regex(regex)); + logger.debug("query: {}", query.toString()); + return mongoOperations.find(query, CinemaDocument.class); + } + @Override public void save(CinemaDocument cinemaDocument) { mongoOperations.save(cinemaDocument); diff --git a/src/main/java/kinosearch/kinosearch3/webpp/SpringConfig.java b/src/main/java/kinosearch/kinosearch3/webpp/SpringConfig.java index e6af052..6d9d031 100644 --- a/src/main/java/kinosearch/kinosearch3/webpp/SpringConfig.java +++ b/src/main/java/kinosearch/kinosearch3/webpp/SpringConfig.java @@ -4,14 +4,22 @@ */ package kinosearch.kinosearch3.webpp; +import com.mongodb.Mongo; +import com.mongodb.MongoClient; +import kinosearch.kinosearch3.spider.BaseRepository; +import kinosearch.kinosearch3.spider.MongoDBRepository; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; +import org.springframework.data.mongodb.core.MongoOperations; +import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.web.servlet.ViewResolver; import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer; import org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver; +import java.net.UnknownHostException; + @Configuration @PropertySource("classpath:/application.properties") public class SpringConfig { @@ -35,4 +43,19 @@ public class SpringConfig { freeMarkerConfigurer.setTemplateLoaderPath("classpath:/kinosearch/kinosearch3/webpp/"); return freeMarkerConfigurer; } + + @Bean + public BaseRepository baseRepository(MongoOperations mongoOperations) { + return new MongoDBRepository(mongoOperations); + } + + @Bean + public MongoOperations mongoOperations(Mongo mongo, @Value("${mongo.db}") String databaseName) { + return new MongoTemplate(mongo, databaseName); + } + + @Bean + public Mongo mongo(@Value("${mongo.host}") String host, @Value("${mongo.port}") int port) throws UnknownHostException { + return new MongoClient(host, port); + } } \ No newline at end of file diff --git a/src/main/java/kinosearch/kinosearch3/webpp/WebAppController.java b/src/main/java/kinosearch/kinosearch3/webpp/WebAppController.java index 3e043c3..86ce00b 100644 --- a/src/main/java/kinosearch/kinosearch3/webpp/WebAppController.java +++ b/src/main/java/kinosearch/kinosearch3/webpp/WebAppController.java @@ -4,24 +4,47 @@ */ package kinosearch.kinosearch3.webpp; +import kinosearch.kinosearch3.spider.BaseRepository; +import kinosearch.kinosearch3.spider.CinemaDocument; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; import javax.servlet.http.HttpServletResponse; import java.io.IOException; +import java.util.List; @Controller public class WebAppController { private final Logger logger = LoggerFactory.getLogger(WebAppController.class); + private final BaseRepository baseRepository; + + @Autowired + public WebAppController(BaseRepository baseRepository) { + this.baseRepository = baseRepository; + } @RequestMapping(value = "/", method = RequestMethod.GET) public String index() { return "index"; } + @RequestMapping(value = "/", method = RequestMethod.GET, params = {"search"}) + public String search(@RequestParam("search") String searchText, Model model) { + if (searchText.trim().isEmpty()) { + return "redirect:/"; + } + List cinemaDocuments = baseRepository.findByTitle(searchText.trim()); + model.addAttribute("cindocs", cinemaDocuments); + model.addAttribute("searchText", searchText); + return "searchResult"; + } + @RequestMapping(value = "/blog.html", method = RequestMethod.GET) public String blog() { return "blog"; diff --git a/src/main/resources/kinosearch/kinosearch3/webpp/search.comp.ftl b/src/main/resources/kinosearch/kinosearch3/webpp/search.comp.ftl index b9a1293..a6c72ee 100644 --- a/src/main/resources/kinosearch/kinosearch3/webpp/search.comp.ftl +++ b/src/main/resources/kinosearch/kinosearch3/webpp/search.comp.ftl @@ -3,10 +3,10 @@
Найти: - + - - + +
\ No newline at end of file diff --git a/src/main/resources/kinosearch/kinosearch3/webpp/searchResult.ftl b/src/main/resources/kinosearch/kinosearch3/webpp/searchResult.ftl new file mode 100644 index 0000000..f9a483f --- /dev/null +++ b/src/main/resources/kinosearch/kinosearch3/webpp/searchResult.ftl @@ -0,0 +1,17 @@ +[#ftl] +[#include "header.inc.ftl"] +[#include "search.comp.ftl"] +
+ +
+ [#if cindocs?has_content] +
    + [#list cindocs as cinema] +
  1. [${cinema.typeWarez}] ${cinema.title}
  2. + [/#list] +
+ [#else] +

Ничего не найдено.

+ [/#if] +
+[#include "fother.inc.ftl"] \ No newline at end of file