Skip to content

Commit

Permalink
Merge pull request #3 from gkiko/api-1.1.0
Browse files Browse the repository at this point in the history
Api 1.1.0
  • Loading branch information
gkiko committed Jul 24, 2016
2 parents 5f90e6d + eafcdfa commit c84046f
Show file tree
Hide file tree
Showing 11 changed files with 135 additions and 72 deletions.
6 changes: 3 additions & 3 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<groupId>ge.kuku.movie.parser</groupId>
<artifactId>parser</artifactId>
<packaging>war</packaging>
<version>1.0.1</version>
<version>1.1.0</version>
<name>movieparser</name>
<url>http://maven.apache.org</url>
<build>
Expand Down Expand Up @@ -43,7 +43,7 @@
<artifactItem>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-runner</artifactId>
<version>9.3.9.M1</version>
<version>9.4.0.M0</version>
<destFileName>jetty-runner.jar</destFileName>
</artifactItem>
</artifactItems>
Expand Down Expand Up @@ -151,7 +151,7 @@
</dependency>
</dependencies>
<properties>
<jersey.version>2.22</jersey.version>
<jersey.version>2.22.2</jersey.version>
<jackson.version>2.7.4</jackson.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
Expand Down
21 changes: 12 additions & 9 deletions src/main/java/ge/kuku/movie/parse/core/ParserService.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,15 @@

import ge.kuku.movie.parse.data.CompositeParser;
import ge.kuku.movie.parse.data.ImoviesEntity;
import ge.kuku.movie.parse.data.OmdbClient;
import ge.kuku.movie.parse.data.Parser;

import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

@Path("parse")
@Path("movies")
@Consumes({MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_JSON})
public class ParserService {
Expand All @@ -21,18 +19,23 @@ public Parser getParser() {
return CompositeParser.instance();
}

@POST
public OmdbClient getOmdbClient() {
return new OmdbClient();
}

@GET
@Path("{id}")
public List<MovieDo> parse(@PathParam("id") String id, @NotNull @Valid MovieDo movieDo) throws IOException {
List<ImoviesEntity> movieList = getParser().parse(movieDo.getName(), id);
if (movieList == null) {
public List<MovieDo> parse(@PathParam("id") String id) throws Exception {
String imdbMovieName = getOmdbClient().getMovieNameById(id);
List<ImoviesEntity> movieList = getParser().parse(imdbMovieName, id);
if (movieList == null || movieList.isEmpty()) {
throw new WebApplicationException(404);
}

List<MovieDo> doList = new ArrayList<>();
for (ImoviesEntity imoviesEntity : movieList) {
MovieDo movieDo1 = imoviesEntity.toMovieDo();
movieDo1.setName(movieDo.getName());
movieDo1.setName(imdbMovieName);
movieDo1.setImdbId(id);
doList.add(movieDo1);
}
Expand Down
15 changes: 6 additions & 9 deletions src/main/java/ge/kuku/movie/parse/data/ImoviesParser.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
import com.fasterxml.jackson.databind.ObjectMapper;
import com.mashape.unirest.http.Unirest;
import com.mashape.unirest.http.exceptions.UnirestException;
import org.apache.commons.codec.Charsets;
import org.apache.commons.lang3.StringEscapeUtils;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
Expand All @@ -13,7 +12,6 @@

import java.io.IOException;
import java.net.URL;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
Expand All @@ -29,11 +27,10 @@ public class ImoviesParser implements Parser {
private static final Pattern containsQualityData = Pattern.compile("(?<=label=\\\")((.*?)(?=\\\"))");

@Override
public List parse(String movieName, String imdbId) throws IOException {
public List<ImoviesEntity> parse(String movieName, String imdbId) throws IOException {
List<String> urls = possibleUrlsContaining(movieName);
String pageUrl = whichPageContains(imdbId, urls);
String imoviesId = getImoviesId(pageUrl);
System.out.println(imoviesId);
return parseRss(imoviesId);
}

Expand Down Expand Up @@ -82,8 +79,8 @@ private String getImoviesId(String pageUrl) {
return pageUrl.substring(pageUrl.lastIndexOf("/") + 1);
}

private List parseRss(String imoviesId) {
List res = null;
private List<ImoviesEntity> parseRss(String imoviesId) {
List<ImoviesEntity> res = null;
try {
String rssText = Unirest.get(RSSAPI).queryString("movie_id", imoviesId).asString().getBody();
res = getSources(rssText);
Expand All @@ -93,7 +90,7 @@ private List parseRss(String imoviesId) {
return res;
}

private List getSources(String rssContent) {
private List<ImoviesEntity> getSources(String rssContent) {
List<ImoviesEntity> movieList = new ArrayList<>();

Matcher matchLinesToParse = containsAllRecords.matcher(rssContent);
Expand All @@ -120,8 +117,8 @@ private List getSources(String rssContent) {
return movieList;
}

private List getVideoSourceAndLang(String str) {
List list = new ArrayList<>();
private List<ImoviesEntity> getVideoSourceAndLang(String str) {
List<ImoviesEntity> list = new ArrayList<ImoviesEntity>();
String[] langsAndSources = str.split(",");
for (String langAndSource : langsAndSources) {
String[] arr = langAndSource.split("\\|");
Expand Down
18 changes: 18 additions & 0 deletions src/main/java/ge/kuku/movie/parse/data/OmdbClient.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package ge.kuku.movie.parse.data;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.mashape.unirest.http.Unirest;

public class OmdbClient {

private static final String OMDB_API = "http://www.omdbapi.com/";

public String getMovieNameById(String imdbId) throws Exception {
String jsonBody = Unirest.get(OMDB_API).queryString("i", imdbId).asString().getBody();
ObjectMapper mapper = new ObjectMapper();
JsonNode actualObj = mapper.readTree(jsonBody);
return actualObj.get("Title").asText();
}

}
2 changes: 1 addition & 1 deletion src/main/java/ge/kuku/movie/parse/data/Parser.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,5 @@

public interface Parser {

List parse(String movieName, String imdbId) throws IOException;
List<ImoviesEntity> parse(String movieName, String imdbId) throws IOException;
}
2 changes: 1 addition & 1 deletion src/main/webapp/WEB-INF/web.xml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
</servlet>
<servlet-mapping>
<servlet-name>movieparser service</servlet-name>
<url-pattern>/webapi/*</url-pattern>
<url-pattern>/*</url-pattern>
</servlet-mapping>

<listener>
Expand Down
25 changes: 25 additions & 0 deletions src/test/FakeOmdbClient.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import ge.kuku.movie.parse.data.OmdbClient;

import java.util.Map;

class FakeOmdbClient extends OmdbClient {

private static FakeOmdbClient client;
private String nameToReuturn;

static FakeOmdbClient instance() {
if (client == null) {
client = new FakeOmdbClient();
}
return client;
}

@Override
public String getMovieNameById(String id) {
return nameToReuturn;
}

public void setNameToReturn(String nameToReturn) {
this.nameToReuturn = nameToReturn;
}
}
11 changes: 0 additions & 11 deletions src/test/FakeParseService.java

This file was deleted.

37 changes: 26 additions & 11 deletions src/test/FakeParser.java
Original file line number Diff line number Diff line change
@@ -1,25 +1,40 @@
import ge.kuku.movie.parse.core.MovieDo;
import ge.kuku.movie.parse.data.ImoviesEntity;
import ge.kuku.movie.parse.data.Parser;

import java.util.*;

public class FakeParser implements Parser {
class FakeParser implements Parser {

Map inMemory = new HashMap<>();
private static FakeParser parser;
private Map<String, ImoviesEntity> inMemory;

static FakeParser instance() {
if (parser == null) {
parser = new FakeParser();
}
return parser;
}

private FakeParser() {
inMemory = new HashMap<>();
}

@Override
public List parse(String movieName, String imdbId) {
ImoviesEntity val = (ImoviesEntity) inMemory.get(movieName);
if (val == null){
return Collections.emptyList();
public List<ImoviesEntity> parse(String movieName, String imdbId) {
List<ImoviesEntity> l = new ArrayList<>();

ImoviesEntity val = inMemory.get(movieName);
if (val != null){
l.add(val);
}
List l = new ArrayList();
l.add(val);
return l;
}

public void addItem(String movieName, ImoviesEntity movieDo) {
void addItem(String movieName, ImoviesEntity movieDo) {
inMemory.put(movieName, movieDo);
}
}

void clear() {
inMemory.clear();
}
}
19 changes: 19 additions & 0 deletions src/test/FakeParserService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import ge.kuku.movie.parse.core.ParserService;
import ge.kuku.movie.parse.data.CompositeParser;
import ge.kuku.movie.parse.data.OmdbClient;
import ge.kuku.movie.parse.data.Parser;

class FakeParserService extends ParserService {

@Override
public Parser getParser() {
CompositeParser p = CompositeParser.instance();
p.add(FakeParser.instance());
return p;
}

@Override
public OmdbClient getOmdbClient() {
return FakeOmdbClient.instance();
}
}
51 changes: 24 additions & 27 deletions src/test/TestParserService.java
Original file line number Diff line number Diff line change
@@ -1,22 +1,16 @@
import ge.kuku.movie.parse.core.MovieDo;
import ge.kuku.movie.parse.core.ParserService;
import ge.kuku.movie.parse.data.CompositeParser;
import ge.kuku.movie.parse.data.ImoviesEntity;
import org.glassfish.jersey.server.ResourceConfig;
import org.glassfish.jersey.test.JerseyTest;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;

import javax.ws.rs.client.Entity;
import javax.ws.rs.core.Application;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

import java.util.List;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

public class TestParserService extends JerseyTest {

Expand All @@ -25,32 +19,35 @@ public class TestParserService extends JerseyTest {

@Override
protected Application configure() {
return new ResourceConfig(FakeParseService.class);
return new ResourceConfig(FakeParserService.class);
}

@Test
public void expect_400() {
Response actual = target("parse/someId").request().post(Entity.entity(null, MediaType.APPLICATION_JSON));
assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), actual.getStatus());
}
public void expect_404() {
FakeParser.instance().clear();

@Test
public void expect_400_1() {
MovieDo mDo = new MovieDo();
Response actual = target("parse/someId").request().post(Entity.entity(mDo, MediaType.APPLICATION_JSON));
assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), actual.getStatus());
Response actual = target("movies/someId")
.request()
.get();
assertEquals(Response.Status.NOT_FOUND.getStatusCode(), actual.getStatus());
}

@Test
public void correctParams() {
CompositeParser.instance().removeAll();
FakeParser parser = new FakeParser();
parser.addItem("Interstellar", new ImoviesEntity());
CompositeParser.instance().add(parser);

MovieDo mDo = new MovieDo();
mDo.setName("Interstellar");
MovieDo[] actual = target("parse/tt0816692").request().post(Entity.entity(mDo, MediaType.APPLICATION_JSON)).readEntity(MovieDo[].class);
assertFalse(actual.length == 0);
FakeParser.instance().clear();

ImoviesEntity entity = new ImoviesEntity();
entity.setMovieName("Interstellar");
entity.setImdbId("tt0816692");

FakeOmdbClient.instance().setNameToReturn("Interstellar");

FakeParser.instance().addItem("Interstellar", entity);

MovieDo[] actual = target("movies/tt0816692")
.request()
.get()
.readEntity(MovieDo[].class);
assertTrue(actual.length == 1);
}
}
}

0 comments on commit c84046f

Please sign in to comment.