diff --git a/pom.xml b/pom.xml index 9db53a7..bd253d6 100644 --- a/pom.xml +++ b/pom.xml @@ -9,39 +9,30 @@ TibiaWikiApi https://github.com/benjaminkomen/TibiaWikiApi - - - - org.springframework.boot - spring-boot-maven-plugin - - - - 1.8 1.8 UTF-8 - 1.5.10.RELEASE + UTF-8 + 1.8 org.springframework.boot spring-boot-starter-parent - 1.5.10.RELEASE + 2.0.0.RELEASE + org.springframework.boot - spring-boot-starter-web - ${spring.boot.starter} + spring-boot-starter org.springframework.boot spring-boot-starter-jersey - ${spring.boot.starter} @@ -60,7 +51,7 @@ org.slf4j slf4j-simple - 1.6.2 + 1.7.25 @@ -74,14 +65,14 @@ org.json json - 20160810 + 20180130 org.projectlombok lombok - 1.16.16 + 1.16.20 provided @@ -89,7 +80,7 @@ org.jetbrains annotations - 15.0 + 16.0.1 @@ -101,9 +92,9 @@ - junit - junit - 4.12 + org.junit.jupiter + junit-jupiter-api + 5.1.0 test @@ -131,16 +122,24 @@ org.objenesis objenesis - 1.3 + 2.6 test org.springframework.boot spring-boot-starter-test - ${spring.boot.starter} test + + + + + org.springframework.boot + spring-boot-maven-plugin + + + diff --git a/src/main/java/com/tibiawiki/Application.java b/src/main/java/com/tibiawiki/Application.java deleted file mode 100644 index d47786b..0000000 --- a/src/main/java/com/tibiawiki/Application.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.tibiawiki; - -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.support.SpringBootServletInitializer; - -@SpringBootApplication -public class Application extends SpringBootServletInitializer { - - public static void main(String[] args) { - new Application() - .configure(new SpringApplicationBuilder(Application.class)) - .run(args); - } -} \ No newline at end of file diff --git a/src/main/java/com/tibiawiki/TibiaWikiApiApplication.java b/src/main/java/com/tibiawiki/TibiaWikiApiApplication.java new file mode 100644 index 0000000..6612523 --- /dev/null +++ b/src/main/java/com/tibiawiki/TibiaWikiApiApplication.java @@ -0,0 +1,12 @@ +package com.tibiawiki; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class TibiaWikiApiApplication { + + public static void main(String[] args) { + SpringApplication.run(TibiaWikiApiApplication.class, args); + } +} \ No newline at end of file diff --git a/src/main/java/com/tibiawiki/domain/factories/ArticleFactory.java b/src/main/java/com/tibiawiki/domain/factories/ArticleFactory.java index 3dc9cbe..fcf3e93 100644 --- a/src/main/java/com/tibiawiki/domain/factories/ArticleFactory.java +++ b/src/main/java/com/tibiawiki/domain/factories/ArticleFactory.java @@ -1,5 +1,6 @@ package com.tibiawiki.domain.factories; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.base.Strings; import com.tibiawiki.domain.objects.Creature; @@ -31,7 +32,6 @@ public class ArticleFactory { private static final String ITEM_ID = "itemid"; private static final List ITEMS_WITH_NO_DROPPEDBY_LIST = Arrays.asList("Gold Coin", "Platinum Coin"); - private Article article; private String articleName; private String objectType; @@ -170,6 +170,7 @@ private JSONObject enhanceJsonObject(JSONObject jsonObject) { private T mapJsonToObject(String wikiObjectJson, Class clazz) { ObjectMapper objectMapper = new ObjectMapper(); // objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); + objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); try { return objectMapper.readValue(wikiObjectJson, clazz); } catch (IOException e) { diff --git a/src/main/java/com/tibiawiki/domain/jackson/CustomDeserializer.java b/src/main/java/com/tibiawiki/domain/jackson/CustomDeserializer.java deleted file mode 100644 index cc181d0..0000000 --- a/src/main/java/com/tibiawiki/domain/jackson/CustomDeserializer.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.tibiawiki.domain.jackson; - -import com.fasterxml.jackson.core.JsonParser; -import com.fasterxml.jackson.databind.DeserializationContext; -import com.fasterxml.jackson.databind.JsonDeserializer; -import com.fasterxml.jackson.databind.JsonNode; - -import java.io.IOException; - -public class CustomDeserializer extends JsonDeserializer { - - @Override - public String deserialize(JsonParser jsonParser, DeserializationContext context) throws IOException { - JsonNode node = jsonParser.readValueAsTree(); - if (node.asText().isEmpty()) { - return null; - } - return node.toString(); - } - -} diff --git a/src/main/java/com/tibiawiki/domain/objects/TibiaWikiBot.java b/src/main/java/com/tibiawiki/domain/objects/TibiaWikiBot.java index 9d780a7..7ec346b 100644 --- a/src/main/java/com/tibiawiki/domain/objects/TibiaWikiBot.java +++ b/src/main/java/com/tibiawiki/domain/objects/TibiaWikiBot.java @@ -1,38 +1,12 @@ package com.tibiawiki.domain.objects; import net.sourceforge.jwbf.mediawiki.bots.MediaWikiBot; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.InputStream; -import java.util.Properties; public class TibiaWikiBot extends MediaWikiBot { - private static final Logger log = LoggerFactory.getLogger(TibiaWikiBot.class); - private static final String DEFAULT_WIKI_URI = "https://tibia.wikia.com/"; public TibiaWikiBot() { super(DEFAULT_WIKI_URI); } - - public void login() { - String username = this.getProperty("username"); - String password = this.getProperty("password"); - super.login(username, password); - } - - private String getProperty(String propertyName) { - String output = ""; - try { - Properties props = new Properties(); - InputStream is = props.getClass().getResourceAsStream("/credentials.properties"); - props.load(is); - return props.getProperty(propertyName); - } catch(Exception ex) { - log.error(String.valueOf(ex)); - } - return output; - } } diff --git a/src/main/java/com/tibiawiki/process/RetrieveCreatures.java b/src/main/java/com/tibiawiki/process/RetrieveCreatures.java index 5330db2..eae1f04 100644 --- a/src/main/java/com/tibiawiki/process/RetrieveCreatures.java +++ b/src/main/java/com/tibiawiki/process/RetrieveCreatures.java @@ -3,7 +3,6 @@ import com.tibiawiki.domain.objects.Creature; import com.tibiawiki.domain.objects.TibiaWikiBot; import com.tibiawiki.domain.repositories.WikiArticleRepository; -import net.sourceforge.jwbf.mediawiki.actions.queries.CategoryMembersSimple; import one.util.streamex.StreamEx; import java.util.ArrayList; @@ -20,31 +19,31 @@ public class RetrieveCreatures { private WikiArticleRepository wikiArticleRepository; public RetrieveCreatures() { - TibiaWikiBot tibiaWikiBot = new TibiaWikiBot(); -// tibiaWikiBot.login(); - wikiArticleRepository = new WikiArticleRepository(tibiaWikiBot); + wikiArticleRepository = new WikiArticleRepository(new TibiaWikiBot()); } public List getCreatures() { - CategoryMembersSimple pagesInCreaturesCategory = wikiArticleRepository.getMembersFromCategory(CATEGORY_CREATURES); - CategoryMembersSimple pagesInListsCategory = wikiArticleRepository.getMembersFromCategory(CATEGORY_LISTS); + return getCreatures(false); + } - List creaturesCategory = new ArrayList<>(); - for (String pageName : pagesInCreaturesCategory) { + public List getCreatures(boolean oneByOne) { + final List creaturesCategory = new ArrayList<>(); + for (String pageName : wikiArticleRepository.getMembersFromCategory(CATEGORY_CREATURES)) { creaturesCategory.add(pageName); } - List listsCategory = new ArrayList<>(); - for (String pageName : pagesInListsCategory) { + final List listsCategory = new ArrayList<>(); + for (String pageName : wikiArticleRepository.getMembersFromCategory(CATEGORY_LISTS)) { listsCategory.add(pageName); } - List pagesInCreaturesCategoryButNotLists = creaturesCategory.stream() + final List pagesInCreaturesCategoryButNotLists = creaturesCategory.stream() .filter(page -> !listsCategory.contains(page)) .collect(Collectors.toList()); - return obtainCreaturesInBulk(pagesInCreaturesCategoryButNotLists); -// return obtainCreaturesOneByOne(pagesInCreaturesCategoryButNotLists); + return oneByOne + ? obtainCreaturesOneByOne(pagesInCreaturesCategoryButNotLists) + : obtainCreaturesInBulk(pagesInCreaturesCategoryButNotLists); } public Optional getCreature(String pageName) { diff --git a/src/main/java/com/tibiawiki/serviceinterface/CreaturesResource.java b/src/main/java/com/tibiawiki/serviceinterface/CreaturesResource.java index 598a7c6..ea233f8 100644 --- a/src/main/java/com/tibiawiki/serviceinterface/CreaturesResource.java +++ b/src/main/java/com/tibiawiki/serviceinterface/CreaturesResource.java @@ -1,6 +1,5 @@ package com.tibiawiki.serviceinterface; -import com.tibiawiki.domain.objects.Creature; import com.tibiawiki.process.RetrieveCreatures; import javax.ws.rs.GET; @@ -9,8 +8,6 @@ import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; -import java.util.List; -import java.util.Optional; @Path("/") public class CreaturesResource { @@ -34,10 +31,8 @@ public Response getHome() { @Path("/creatures") @Produces(MediaType.APPLICATION_JSON) public Response getCreatures() { - final List creatures = retrieveCreatures.getCreatures(); - return Response.ok() - .entity(creatures) + .entity(retrieveCreatures.getCreatures()) .header("Access-Control-Allow-Origin", "*") .build(); } @@ -46,16 +41,12 @@ public Response getCreatures() { @Path("/creatures/{name}") @Produces(MediaType.APPLICATION_JSON) public Response getCreatureByName(@PathParam("name") String name) { - final Optional creature = retrieveCreatures.getCreature(name); - - if (!creature.isPresent()) { - return Response.status(Response.Status.NOT_FOUND) - .build(); - } else { - return Response.ok() - .entity(creature.get()) - .header("Access-Control-Allow-Origin", "*") - .build(); - } + return retrieveCreatures.getCreature(name) + .map(c -> Response.ok() + .entity(c) + .header("Access-Control-Allow-Origin", "*") + .build()) + .orElseGet(() -> Response.status(Response.Status.NOT_FOUND) + .build()); } } diff --git a/src/main/java/com/tibiawiki/serviceinterface/TestResource.java b/src/main/java/com/tibiawiki/serviceinterface/TestResource.java deleted file mode 100644 index 2d212a4..0000000 --- a/src/main/java/com/tibiawiki/serviceinterface/TestResource.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.tibiawiki.serviceinterface; - -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.core.MediaType; - -@Path("/") -public class TestResource { - - @GET - @Path("/test") - @Produces(MediaType.APPLICATION_JSON) - public String test() { - return "{ " + - "\"parameter\": \"Hello world!\"" + - "}"; - } -} \ No newline at end of file diff --git a/src/main/java/com/tibiawiki/serviceinterface/config/JerseyConfig.java b/src/main/java/com/tibiawiki/serviceinterface/config/JerseyConfig.java index 4f7dc90..b178f5e 100644 --- a/src/main/java/com/tibiawiki/serviceinterface/config/JerseyConfig.java +++ b/src/main/java/com/tibiawiki/serviceinterface/config/JerseyConfig.java @@ -1,7 +1,6 @@ package com.tibiawiki.serviceinterface.config; import com.tibiawiki.serviceinterface.CreaturesResource; -import com.tibiawiki.serviceinterface.TestResource; import org.glassfish.jersey.server.ResourceConfig; import org.springframework.stereotype.Component; @@ -13,7 +12,6 @@ public JerseyConfig() { } private void registerEndpoints() { - register(TestResource.class); register(CreaturesResource.class); } }