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);