From b098dbd976c58c1a18bee02e9235dcffed8028b9 Mon Sep 17 00:00:00 2001 From: DmitriyMX Date: Wed, 4 Jan 2017 22:54:28 +0300 Subject: [PATCH] Spring config --- pom.xml | 6 +++++ .../java/kinosearch/core/SpringConfig.java | 23 +++++++++++++++++++ src/main/java/kinosearch/core/Tools.java | 16 ------------- .../kinosearch/core/warez/Onlinelife.java | 7 ++++-- .../webapp/WebAppConfiguration.java | 3 +++ .../kinosearch/webapp/WebAppController.java | 18 ++++++--------- src/test/java/core/TestBrowser.java | 12 +++++++++- src/test/java/core/warez/TestOnlinelife.java | 20 ++++++++++++++-- 8 files changed, 73 insertions(+), 32 deletions(-) create mode 100644 src/main/java/kinosearch/core/SpringConfig.java diff --git a/pom.xml b/pom.xml index b2e6544..0b1ff12 100644 --- a/pom.xml +++ b/pom.xml @@ -83,6 +83,12 @@ 4.12 test + + org.springframework + spring-test + ${spring.version} + test + diff --git a/src/main/java/kinosearch/core/SpringConfig.java b/src/main/java/kinosearch/core/SpringConfig.java new file mode 100644 index 0000000..b2243f6 --- /dev/null +++ b/src/main/java/kinosearch/core/SpringConfig.java @@ -0,0 +1,23 @@ +/* + * DmitriyMX + * 2017-01-04 + */ +package kinosearch.core; + +import kinosearch.core.browser.ApacheHttpBrowser; +import kinosearch.core.browser.Browser; +import kinosearch.core.warez.KinoWarez; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Scope; + +@Configuration +@ComponentScan(basePackages = {"kinosearch.core.browser", "kinosearch.core.warez"}) +public class SpringConfig { + @Bean + @Scope("prototype") + public Browser browser() { + return new ApacheHttpBrowser(); + } +} diff --git a/src/main/java/kinosearch/core/Tools.java b/src/main/java/kinosearch/core/Tools.java index 1b836d9..a3e8f17 100644 --- a/src/main/java/kinosearch/core/Tools.java +++ b/src/main/java/kinosearch/core/Tools.java @@ -1,7 +1,5 @@ package kinosearch.core; -import kinosearch.core.browser.Browser; -import kinosearch.core.browser.ApacheHttpBrowser; import kinosearch.core.warez.KinoWarez; import kinosearch.core.warez.Onlinelife; @@ -15,10 +13,6 @@ public class Tools { public static final String VERSION = "2.0.7с"; private static Set kinoWarezSet; - public static Browser createBrowser() { - return new ApacheHttpBrowser(); - } - public static String SafeUrlEncode(String string, String encode) { try { return URLEncoder.encode(string, encode); @@ -40,16 +34,6 @@ public class Tools { } } - public static Set getKinoWarezSet() { - if (kinoWarezSet == null) { - kinoWarezSet = new HashSet<>(); - - kinoWarezSet.add(new Onlinelife()); - } - - return kinoWarezSet; - } - public static void SafeSleep(long ms) { try { Thread.sleep(ms); diff --git a/src/main/java/kinosearch/core/warez/Onlinelife.java b/src/main/java/kinosearch/core/warez/Onlinelife.java index 941d419..dfac226 100644 --- a/src/main/java/kinosearch/core/warez/Onlinelife.java +++ b/src/main/java/kinosearch/core/warez/Onlinelife.java @@ -11,6 +11,8 @@ import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.Collections; @@ -18,9 +20,12 @@ import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; +@Component public class Onlinelife implements KinoWarez { private static final String DOMAIN = "http://www.online-life.cc"; private static final String NAME = "OnlineLife"; + @Autowired + private Browser browser; @Override public String getName() { @@ -34,7 +39,6 @@ public class Onlinelife implements KinoWarez { @Override public List search(String nameKino, boolean strong) { - Browser browser = Tools.createBrowser(); browser.setEncoding("windows-1251"); String postData = "do=search&subaction=search&mode=simple&story=" + Tools.SafeUrlEncode(nameKino, "windows-1251"); @@ -79,7 +83,6 @@ public class Onlinelife implements KinoWarez { public String player(String page) { String movie_id = page.substring(1,page.indexOf("-")); - Browser browser = Tools.createBrowser(); browser.setEncoding("windows-1251"); browser.setHeader("Referer", "http://dterod.com/player.php?newsid=" + movie_id); String html = browser.get("http://dterod.com/js.php?id=" + movie_id); diff --git a/src/main/java/kinosearch/webapp/WebAppConfiguration.java b/src/main/java/kinosearch/webapp/WebAppConfiguration.java index 468a89b..d761ac0 100644 --- a/src/main/java/kinosearch/webapp/WebAppConfiguration.java +++ b/src/main/java/kinosearch/webapp/WebAppConfiguration.java @@ -4,9 +4,11 @@ */ package kinosearch.webapp; +import kinosearch.core.SpringConfig; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; import org.springframework.web.servlet.ViewResolver; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; @@ -17,6 +19,7 @@ import org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver; @Configuration @EnableWebMvc @ComponentScan +@Import(SpringConfig.class) public class WebAppConfiguration extends WebMvcConfigurerAdapter { @Bean public ViewResolver viewResolver() { diff --git a/src/main/java/kinosearch/webapp/WebAppController.java b/src/main/java/kinosearch/webapp/WebAppController.java index df813f5..9c12711 100644 --- a/src/main/java/kinosearch/webapp/WebAppController.java +++ b/src/main/java/kinosearch/webapp/WebAppController.java @@ -33,16 +33,9 @@ import java.util.*; public class WebAppController { @Autowired private ServletContext webAppContext; + @Autowired private ApplicationContext coreContext; - @PostConstruct - public void init() { - this.coreContext = new AnnotationConfigApplicationContext( - "kinosearch.core.browser", - "kinosearch.core.warez" - ); - } - private void setDefaultModel(ModelMap model) { model.addAttribute("basedir", webAppContext.getContextPath()); model.addAttribute("version", "2.0.8"); @@ -69,10 +62,10 @@ public class WebAppController { private void search(String search, ModelMap model, boolean strong) { List list = Collections.synchronizedList(new LinkedList<>()); - Set kinoWarezSet = Tools.getKinoWarezSet(); + Map kinoWarezMap = coreContext.getBeansOfType(KinoWarez.class); ThreadGroup threadGroup = new ThreadGroup(""); - for (KinoWarez kinoWarez : kinoWarezSet) { //TODO на будущее надо ограничить количество одновременных потоков + for (KinoWarez kinoWarez : kinoWarezMap.values()) { //TODO на будущее надо ограничить количество одновременных потоков new Thread(threadGroup, () -> { List outList = kinoWarez.search(search, strong); @@ -158,7 +151,10 @@ public class WebAppController { setDefaultModel(model); setDefaultResponse(response); - KinoWarez kinoWarez = new Onlinelife(); + KinoWarez kinoWarez = coreContext.getBean(warez, KinoWarez.class); + if (kinoWarez == null) { + return "redirect:/"; + } String json = kinoWarez.player(request.getServletPath().substring(("/player/"+warez).length())); model.put("json", json); diff --git a/src/test/java/core/TestBrowser.java b/src/test/java/core/TestBrowser.java index 226d513..9a4f069 100644 --- a/src/test/java/core/TestBrowser.java +++ b/src/test/java/core/TestBrowser.java @@ -2,20 +2,30 @@ package core; import com.google.gson.Gson; import com.google.gson.JsonObject; +import kinosearch.core.SpringConfig; import kinosearch.core.browser.Browser; import kinosearch.core.browser.ApacheHttpBrowser; import static org.junit.Assert.*; import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import java.io.IOException; +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = {SpringConfig.class}) public class TestBrowser { private final Gson gson = new Gson(); private final String data = "login=123&password=456"; private final String header_name = "Mytestheader"; + @Autowired + private ApplicationContext context; private Browser getBrowser() { - return new ApacheHttpBrowser(); + return context.getBean(Browser.class); } private void setup_headers(Browser browser) { diff --git a/src/test/java/core/warez/TestOnlinelife.java b/src/test/java/core/warez/TestOnlinelife.java index 00bd90c..f58c26c 100644 --- a/src/test/java/core/warez/TestOnlinelife.java +++ b/src/test/java/core/warez/TestOnlinelife.java @@ -1,16 +1,34 @@ package core.warez; import kinosearch.core.Kino; +import kinosearch.core.SpringConfig; import kinosearch.core.warez.KinoWarez; import kinosearch.core.warez.Onlinelife; +import org.junit.Before; import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import java.util.ArrayList; import java.util.List; import static org.junit.Assert.*; +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = {SpringConfig.class}) public class TestOnlinelife { + @Autowired + private ApplicationContext context; + private KinoWarez kinoWarez; + + @Before + public void setup() { + this.kinoWarez = context.getBean(Onlinelife.class); + } + @Test public void testNormal() { search(false); @@ -22,8 +40,6 @@ public class TestOnlinelife { } private void search(boolean strong) { - KinoWarez kinoWarez = new Onlinelife(); - String titleKino = "рик и морти"; List kinoList = kinoWarez.search(titleKino, strong);