mirror of https://github.com/bvn13/imdb-spider.git
implemented storing retrieved data types directly into ImdbObject to be checked before being used
parent
e51d5b392f
commit
c8cc887938
|
@ -1,12 +1,40 @@
|
||||||
package ru.bvn13.imdbspider.imdb;
|
package ru.bvn13.imdbspider.imdb;
|
||||||
|
|
||||||
|
import java.util.EnumSet;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author boyko_vn at 09.01.2019
|
* @author boyko_vn at 09.01.2019
|
||||||
*/
|
*/
|
||||||
public class ImdbObject {
|
public abstract class ImdbObject<DT extends Enum<DT> & DataType> {
|
||||||
|
|
||||||
private String id;
|
protected EnumSet<DT> retrievedDataTypes;
|
||||||
private String url;
|
|
||||||
|
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<DT> getRetrievedDataTypes() {
|
||||||
|
return retrievedDataTypes;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRetrievedDataTypes(EnumSet<DT> retrievedDataTypes) {
|
||||||
|
this.retrievedDataTypes = retrievedDataTypes;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addDataType(DT movieDataType) {
|
||||||
|
if (!this.retrievedDataTypes.contains(movieDataType)) {
|
||||||
|
this.retrievedDataTypes.add(movieDataType);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public String getId() {
|
public String getId() {
|
||||||
return id;
|
return id;
|
||||||
|
|
|
@ -1,18 +1,23 @@
|
||||||
package ru.bvn13.imdbspider.imdb;
|
package ru.bvn13.imdbspider.imdb;
|
||||||
|
|
||||||
|
import java.util.EnumSet;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author boyko_vn at 09.01.2019
|
* @author boyko_vn at 09.01.2019
|
||||||
*/
|
*/
|
||||||
public class Movie extends ImdbObject {
|
public class Movie extends ImdbObject<MovieDataType> {
|
||||||
|
|
||||||
private String title;
|
private String title;
|
||||||
private String originalTitle;
|
private String originalTitle;
|
||||||
private Integer year;
|
private Integer year;
|
||||||
private Map<String, String> akas = new ConcurrentHashMap<>(50);
|
private Map<String, String> akas = new ConcurrentHashMap<>(50);
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void initRetrievedDataTypes() {
|
||||||
|
this.retrievedDataTypes = EnumSet.noneOf(MovieDataType.class);
|
||||||
|
}
|
||||||
|
|
||||||
public String getTitle() {
|
public String getTitle() {
|
||||||
return title;
|
return title;
|
||||||
|
@ -45,4 +50,5 @@ public class Movie extends ImdbObject {
|
||||||
public void setAkas(Map<String, String> akas) {
|
public void setAkas(Map<String, String> akas) {
|
||||||
this.akas = akas;
|
this.akas = akas;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,14 +1,20 @@
|
||||||
package ru.bvn13.imdbspider.imdb;
|
package ru.bvn13.imdbspider.imdb;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.EnumSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author boyko_vn at 09.01.2019
|
* @author boyko_vn at 09.01.2019
|
||||||
*/
|
*/
|
||||||
public class MovieList extends ImdbObject {
|
public class MovieList extends ImdbObject<MovieListDataType> {
|
||||||
|
|
||||||
List<Movie> movies;
|
private List<Movie> movies;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void initRetrievedDataTypes() {
|
||||||
|
this.retrievedDataTypes = EnumSet.noneOf(MovieListDataType.class);
|
||||||
|
}
|
||||||
|
|
||||||
public List<Movie> getMovies() {
|
public List<Movie> getMovies() {
|
||||||
if (movies == null) {
|
if (movies == null) {
|
||||||
|
@ -20,4 +26,5 @@ public class MovieList extends ImdbObject {
|
||||||
public void setMovies(List<Movie> movies) {
|
public void setMovies(List<Movie> movies) {
|
||||||
this.movies = movies;
|
this.movies = movies;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -165,27 +165,37 @@ public class ApiFactory_1_0 implements ApiFactory {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void fillUpMovie(Movie movie, Task task) {
|
private void fillUpMovie(Movie movie, Task task) {
|
||||||
|
boolean isDone = false;
|
||||||
switch ((MovieDataType) task.getDataType()) {
|
switch ((MovieDataType) task.getDataType()) {
|
||||||
case ID:
|
case ID:
|
||||||
movie.setUrl(task.getUrl());
|
movie.setUrl(task.getUrl());
|
||||||
movie.setId((String) task.getResult());
|
movie.setId((String) task.getResult());
|
||||||
|
isDone = true;
|
||||||
break;
|
break;
|
||||||
case TITLE:
|
case TITLE:
|
||||||
movie.setTitle((String) task.getResult());
|
movie.setTitle((String) task.getResult());
|
||||||
|
isDone = true;
|
||||||
break;
|
break;
|
||||||
case ORIGINAL_TITLE:
|
case ORIGINAL_TITLE:
|
||||||
movie.setOriginalTitle((String) task.getResult());
|
movie.setOriginalTitle((String) task.getResult());
|
||||||
|
isDone = true;
|
||||||
break;
|
break;
|
||||||
case YEAR:
|
case YEAR:
|
||||||
movie.setYear((Integer) task.getResult());
|
movie.setYear((Integer) task.getResult());
|
||||||
|
isDone = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isDone) {
|
||||||
|
movie.getRetrievedDataTypes().add((MovieDataType) task.getDataType());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void fillUpMovieList(MovieList movieList, Task task) {
|
private void fillUpMovieList(MovieList movieList, Task task) {
|
||||||
switch ((MovieListDataType) task.getDataType()) {
|
switch ((MovieListDataType) task.getDataType()) {
|
||||||
case ELEMENTS:
|
case ELEMENTS:
|
||||||
movieList.setUrl(task.getUrl());
|
movieList.setUrl(task.getUrl());
|
||||||
|
movieList.getRetrievedDataTypes().add((MovieListDataType) task.getDataType());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,6 +31,5 @@ public class MovieSearchTest
|
||||||
assertEquals("0088247", movie.getId());
|
assertEquals("0088247", movie.getId());
|
||||||
assertEquals("The Terminator", movie.getOriginalTitle());
|
assertEquals("The Terminator", movie.getOriginalTitle());
|
||||||
assertEquals(Integer.valueOf(1984), movie.getYear());
|
assertEquals(Integer.valueOf(1984), movie.getYear());
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 );
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -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());
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue