From c8cc88793804b9f7fc5a776539d7ea150778b419 Mon Sep 17 00:00:00 2001 From: Vyacheslav Boyko Date: Mon, 14 Jan 2019 12:43:31 +0300 Subject: [PATCH] implemented storing retrieved data types directly into ImdbObject to be checked before being used --- .../ru/bvn13/imdbspider/imdb/ImdbObject.java | 34 ++++++++++++++-- .../java/ru/bvn13/imdbspider/imdb/Movie.java | 8 +++- .../ru/bvn13/imdbspider/imdb/MovieList.java | 11 +++++- .../spider/api/v1_0/ApiFactory_1_0.java | 10 +++++ .../imdbspider/runner/MovieSearchTest.java | 1 - .../ru/bvn13/imdbspider/runner/AppTest.java | 17 -------- .../imdbspider/runner/MovieSearchTest.java | 39 +++++++++++++++++++ 7 files changed, 96 insertions(+), 24 deletions(-) delete mode 100644 runner/src/test/java/ru/bvn13/imdbspider/runner/AppTest.java create mode 100644 runner/src/test/java/ru/bvn13/imdbspider/runner/MovieSearchTest.java 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()); + } +}