diff --git a/core/src/main/java/ru/bvn13/imdbspider/imdb/ImdbObject.java b/core/src/main/java/ru/bvn13/imdbspider/imdb/ImdbObject.java
index 47696fd..ff644cd 100644
--- a/core/src/main/java/ru/bvn13/imdbspider/imdb/ImdbObject.java
+++ b/core/src/main/java/ru/bvn13/imdbspider/imdb/ImdbObject.java
@@ -1,12 +1,40 @@
package ru.bvn13.imdbspider.imdb;
+import java.util.EnumSet;
+
/**
* @author boyko_vn at 09.01.2019
*/
-public class ImdbObject {
+public abstract class ImdbObject
& DataType> {
- private String id;
- private String url;
+ protected EnumSet retrievedDataTypes;
+
+ protected String id;
+ protected String url;
+
+ public ImdbObject() {
+ this.initRetrievedDataTypes();
+ }
+
+ protected abstract void initRetrievedDataTypes();
+
+ public boolean isDataTypeRetrieved(DT dataType) {
+ return (retrievedDataTypes != null && retrievedDataTypes.contains(dataType));
+ }
+
+ public EnumSet getRetrievedDataTypes() {
+ return retrievedDataTypes;
+ }
+
+ public void setRetrievedDataTypes(EnumSet retrievedDataTypes) {
+ this.retrievedDataTypes = retrievedDataTypes;
+ }
+
+ public void addDataType(DT movieDataType) {
+ if (!this.retrievedDataTypes.contains(movieDataType)) {
+ this.retrievedDataTypes.add(movieDataType);
+ }
+ }
public String getId() {
return id;
diff --git a/core/src/main/java/ru/bvn13/imdbspider/imdb/Movie.java b/core/src/main/java/ru/bvn13/imdbspider/imdb/Movie.java
index f496542..c39ba34 100644
--- a/core/src/main/java/ru/bvn13/imdbspider/imdb/Movie.java
+++ b/core/src/main/java/ru/bvn13/imdbspider/imdb/Movie.java
@@ -1,18 +1,23 @@
package ru.bvn13.imdbspider.imdb;
+import java.util.EnumSet;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
* @author boyko_vn at 09.01.2019
*/
-public class Movie extends ImdbObject {
+public class Movie extends ImdbObject {
private String title;
private String originalTitle;
private Integer year;
private Map akas = new ConcurrentHashMap<>(50);
+ @Override
+ protected void initRetrievedDataTypes() {
+ this.retrievedDataTypes = EnumSet.noneOf(MovieDataType.class);
+ }
public String getTitle() {
return title;
@@ -45,4 +50,5 @@ public class Movie extends ImdbObject {
public void setAkas(Map akas) {
this.akas = akas;
}
+
}
diff --git a/core/src/main/java/ru/bvn13/imdbspider/imdb/MovieList.java b/core/src/main/java/ru/bvn13/imdbspider/imdb/MovieList.java
index da7918a..d360166 100644
--- a/core/src/main/java/ru/bvn13/imdbspider/imdb/MovieList.java
+++ b/core/src/main/java/ru/bvn13/imdbspider/imdb/MovieList.java
@@ -1,14 +1,20 @@
package ru.bvn13.imdbspider.imdb;
import java.util.ArrayList;
+import java.util.EnumSet;
import java.util.List;
/**
* @author boyko_vn at 09.01.2019
*/
-public class MovieList extends ImdbObject {
+public class MovieList extends ImdbObject {
- List movies;
+ private List movies;
+
+ @Override
+ protected void initRetrievedDataTypes() {
+ this.retrievedDataTypes = EnumSet.noneOf(MovieListDataType.class);
+ }
public List getMovies() {
if (movies == null) {
@@ -20,4 +26,5 @@ public class MovieList extends ImdbObject {
public void setMovies(List movies) {
this.movies = movies;
}
+
}
diff --git a/core/src/main/java/ru/bvn13/imdbspider/spider/api/v1_0/ApiFactory_1_0.java b/core/src/main/java/ru/bvn13/imdbspider/spider/api/v1_0/ApiFactory_1_0.java
index 13cc543..e335899 100644
--- a/core/src/main/java/ru/bvn13/imdbspider/spider/api/v1_0/ApiFactory_1_0.java
+++ b/core/src/main/java/ru/bvn13/imdbspider/spider/api/v1_0/ApiFactory_1_0.java
@@ -165,27 +165,37 @@ public class ApiFactory_1_0 implements ApiFactory {
}
private void fillUpMovie(Movie movie, Task task) {
+ boolean isDone = false;
switch ((MovieDataType) task.getDataType()) {
case ID:
movie.setUrl(task.getUrl());
movie.setId((String) task.getResult());
+ isDone = true;
break;
case TITLE:
movie.setTitle((String) task.getResult());
+ isDone = true;
break;
case ORIGINAL_TITLE:
movie.setOriginalTitle((String) task.getResult());
+ isDone = true;
break;
case YEAR:
movie.setYear((Integer) task.getResult());
+ isDone = true;
break;
}
+
+ if (isDone) {
+ movie.getRetrievedDataTypes().add((MovieDataType) task.getDataType());
+ }
}
private void fillUpMovieList(MovieList movieList, Task task) {
switch ((MovieListDataType) task.getDataType()) {
case ELEMENTS:
movieList.setUrl(task.getUrl());
+ movieList.getRetrievedDataTypes().add((MovieListDataType) task.getDataType());
break;
}
}
diff --git a/core/src/test/java/ru/bvn13/imdbspider/runner/MovieSearchTest.java b/core/src/test/java/ru/bvn13/imdbspider/runner/MovieSearchTest.java
index 4caf5d7..9d633f4 100644
--- a/core/src/test/java/ru/bvn13/imdbspider/runner/MovieSearchTest.java
+++ b/core/src/test/java/ru/bvn13/imdbspider/runner/MovieSearchTest.java
@@ -31,6 +31,5 @@ public class MovieSearchTest
assertEquals("0088247", movie.getId());
assertEquals("The Terminator", movie.getOriginalTitle());
assertEquals(Integer.valueOf(1984), movie.getYear());
-
}
}
diff --git a/runner/src/test/java/ru/bvn13/imdbspider/runner/AppTest.java b/runner/src/test/java/ru/bvn13/imdbspider/runner/AppTest.java
deleted file mode 100644
index 7884387..0000000
--- a/runner/src/test/java/ru/bvn13/imdbspider/runner/AppTest.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package ru.bvn13.imdbspider.runner;
-
-import static org.junit.Assert.assertTrue;
-
-import org.junit.Test;
-
-public class AppTest
-{
- /**
- * Rigorous Test :-)
- */
- @Test
- public void shouldAnswerWithTrue()
- {
- assertTrue( true );
- }
-}
diff --git a/runner/src/test/java/ru/bvn13/imdbspider/runner/MovieSearchTest.java b/runner/src/test/java/ru/bvn13/imdbspider/runner/MovieSearchTest.java
new file mode 100644
index 0000000..7ef1db9
--- /dev/null
+++ b/runner/src/test/java/ru/bvn13/imdbspider/runner/MovieSearchTest.java
@@ -0,0 +1,39 @@
+package ru.bvn13.imdbspider.runner;
+
+import org.junit.BeforeClass;
+import org.junit.Test;
+import ru.bvn13.imdbspider.ImdbSpider;
+import ru.bvn13.imdbspider.exceptions.ImdbSpiderException;
+import ru.bvn13.imdbspider.imdb.Movie;
+import ru.bvn13.imdbspider.imdb.MovieDataType;
+import ru.bvn13.imdbspider.imdb.MovieList;
+
+import java.util.EnumSet;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+
+public class MovieSearchTest
+{
+ private static ImdbSpider spider;
+
+ @BeforeClass
+ public static void initClass() {
+ spider = ImdbSpider.withApi_1_0();
+ }
+
+ @Test
+ public void testSearchTerminator() throws ImdbSpiderException {
+ MovieList result = spider.searchMovieByTitle("Терминатор", 5, EnumSet.of(MovieDataType.ID, MovieDataType.TITLE, MovieDataType.ORIGINAL_TITLE, MovieDataType.YEAR));
+ assertTrue(result.getMovies().size() > 0);
+ Movie movie = result.getMovies().get(0);
+ assertTrue(movie.isDataTypeRetrieved(MovieDataType.ID));
+ assertTrue(movie.isDataTypeRetrieved(MovieDataType.TITLE));
+ assertTrue(movie.isDataTypeRetrieved(MovieDataType.ORIGINAL_TITLE));
+ assertTrue(movie.isDataTypeRetrieved(MovieDataType.YEAR));
+ assertEquals("0088247", movie.getId());
+ assertEquals("The Terminator", movie.getOriginalTitle());
+ assertEquals(Integer.valueOf(1984), movie.getYear());
+ }
+}