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;
|
||||
|
||||
import java.util.EnumSet;
|
||||
|
||||
/**
|
||||
* @author boyko_vn at 09.01.2019
|
||||
*/
|
||||
public class ImdbObject {
|
||||
public abstract class ImdbObject<DT extends Enum<DT> & DataType> {
|
||||
|
||||
private String id;
|
||||
private String url;
|
||||
protected EnumSet<DT> 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<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() {
|
||||
return id;
|
||||
|
|
|
@ -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<MovieDataType> {
|
||||
|
||||
private String title;
|
||||
private String originalTitle;
|
||||
private Integer year;
|
||||
private Map<String, String> 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<String, String> akas) {
|
||||
this.akas = akas;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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<MovieListDataType> {
|
||||
|
||||
List<Movie> movies;
|
||||
private List<Movie> movies;
|
||||
|
||||
@Override
|
||||
protected void initRetrievedDataTypes() {
|
||||
this.retrievedDataTypes = EnumSet.noneOf(MovieListDataType.class);
|
||||
}
|
||||
|
||||
public List<Movie> getMovies() {
|
||||
if (movies == null) {
|
||||
|
@ -20,4 +26,5 @@ public class MovieList extends ImdbObject {
|
|||
public void setMovies(List<Movie> movies) {
|
||||
this.movies = movies;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -31,6 +31,5 @@ public class MovieSearchTest
|
|||
assertEquals("0088247", movie.getId());
|
||||
assertEquals("The Terminator", movie.getOriginalTitle());
|
||||
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