implemented storing retrieved data types directly into ImdbObject to be checked before being used

master
Vyacheslav Boyko 2019-01-14 12:43:31 +03:00
parent e51d5b392f
commit c8cc887938
7 changed files with 96 additions and 24 deletions

View File

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

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -31,6 +31,5 @@ public class MovieSearchTest
assertEquals("0088247", movie.getId());
assertEquals("The Terminator", movie.getOriginalTitle());
assertEquals(Integer.valueOf(1984), movie.getYear());
}
}

View File

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

View File

@ -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());
}
}