Skip to content

Commit

Permalink
Release of 1.7.1 (#34)
Browse files Browse the repository at this point in the history
Improve loot endpoint: Fix bug in regex, filter Loot Statistics namespace and add pageName to response
  • Loading branch information
benjaminkomen authored Jan 2, 2020
1 parent 214adfd commit 39118d0
Show file tree
Hide file tree
Showing 9 changed files with 42 additions and 18 deletions.
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

<groupId>com.tibiawiki</groupId>
<artifactId>TibiaWikiApi</artifactId>
<version>1.7.0</version>
<version>1.7.1</version>
<packaging>jar</packaging>
<name>TibiaWikiApi</name>
<url>https://github.com/benjaminkomen/TibiaWikiApi</url> <!-- https://tibiawiki.dev -->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,8 @@ public String extractInfoboxPartOfArticle(Map.Entry<String, String> pageNameAndA
return TemplateUtils.getBetweenOuterBalancedBrackets(articleContent, INFOBOX_HEADER);
}

public String extractLootPartOfArticle(String articleContent) {
return extractLootPartOfArticle(Map.entry("Unknown", articleContent));
public String extractLootPartOfArticle(String pageName, String articleContent) {
return extractLootPartOfArticle(Map.entry(pageName, articleContent));
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,14 +88,15 @@ public JSONObject convertInfoboxPartOfArticleToJson(@Nullable final String infob
* JSON object if the input was empty.
*/
@NotNull
public JSONObject convertLootPartOfArticleToJson(@Nullable final String lootPartOfArticle) {
public JSONObject convertLootPartOfArticleToJson(String pageName, @Nullable final String lootPartOfArticle) {
if (lootPartOfArticle == null || "".equals(lootPartOfArticle)) {
return new JSONObject();
}

String lootTemplatePartOfArticleSanitized = TemplateUtils.removeFirstAndLastLine(lootPartOfArticle);

Map<String, String> parametersAndValues = new HashMap<>(TemplateUtils.splitLootByParameter(lootTemplatePartOfArticleSanitized));
parametersAndValues.put("pageName", pageName);
return enhanceLootJsonObject(new JSONObject(parametersAndValues));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,10 @@ public List<String> getPageNamesFromCategory(String categoryName) {
return wiki.getCategoryMembers(categoryName, NS.MAIN);
}

public List<String> getPageNamesFromCategory(String categoryName, NS namespace) {
return wiki.getCategoryMembers(categoryName, namespace);
}

/**
* @return a map of key-value pairs of: title - pagecontent
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public class TemplateUtils {

private static final Logger log = LoggerFactory.getLogger(TemplateUtils.class);
private static final String REGEX_PARAMETER_INFOBOX_LINE = "\\|\\s+?([A-Za-z0-9_\\-]+)\\s*?=";
private static final String REGEX_PARAMETER_LOOT_LINE = "\\|([A-Za-z0-9_\\-\\s]+)\\s*?(=|,)";
private static final String REGEX_PARAMETER_LOOT_LINE = "\\|(.+?)\\s*?(=|,)";
private static final String REGEX_PARAMETER_LOWER_LEVELS = "\\|\\s+?lowerlevels\\s*?=((?:.*?\\{\\{.*?}})+)";
private static final String REGEX_PARAMETER_LOWER_LEVELS_REMOVE = "\\|\\s+?lowerlevels\\s*?=((.*?\\{\\{.*?}})+)";
private static final String LOWER_LEVELS = "lowerlevels";
Expand Down
29 changes: 24 additions & 5 deletions src/main/java/com/tibiawiki/process/RetrieveLoot.java
Original file line number Diff line number Diff line change
@@ -1,12 +1,16 @@
package com.tibiawiki.process;

import benjaminkomen.jwiki.core.NS;
import com.tibiawiki.domain.factories.ArticleFactory;
import com.tibiawiki.domain.factories.JsonFactory;
import com.tibiawiki.domain.repositories.ArticleRepository;
import org.jetbrains.annotations.NotNull;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
Expand All @@ -23,7 +27,7 @@ public RetrieveLoot(ArticleRepository articleRepository, ArticleFactory articleF
}

public List<String> getLootList() {
final List<String> lootStatisticsCategory = articleRepository.getPageNamesFromCategory(LOOT_STATISTICS_CATEGORY_NAME);
final List<String> lootStatisticsCategory = articleRepository.getPageNamesFromCategory(LOOT_STATISTICS_CATEGORY_NAME, makeLootNamespace());

return new ArrayList<>(lootStatisticsCategory);
}
Expand All @@ -39,13 +43,28 @@ public Optional<JSONObject> getLootJSON(String pageName) {
private Stream<JSONObject> getArticlesFromLoot2TemplateAsJSON(List<String> pageNames) {
return Stream.of(pageNames)
.flatMap(lst -> articleRepository.getArticlesFromCategory(lst).entrySet().stream())
.map(e -> articleFactory.extractLootPartOfArticle(e))
.map(jsonFactory::convertLootPartOfArticleToJson);
.map(e -> {
var lootPartOfArticle = articleFactory.extractLootPartOfArticle(e);
return jsonFactory.convertLootPartOfArticleToJson(e.getKey(), lootPartOfArticle);
});
}

private Optional<JSONObject> getLootArticleAsJSON(String pageName) {
return Optional.ofNullable(articleRepository.getArticle(pageName))
.map(articleFactory::extractLootPartOfArticle)
.map(jsonFactory::convertLootPartOfArticleToJson);
.map(articleContent -> articleFactory.extractLootPartOfArticle(pageName, articleContent))
.map(lootPartOfArticle -> jsonFactory.convertLootPartOfArticleToJson(pageName, lootPartOfArticle));
}

// TODO replace this reflection hack with functionality in jwiki to construct a custom namespace
@NotNull
private NS makeLootNamespace() {
try {
final Constructor<?>[] constructors = NS.class.getDeclaredConstructors();
constructors[0].setAccessible(true);
Object namespace = constructors[0].newInstance(112);
return (NS) namespace;
} catch (IllegalAccessException | InvocationTargetException | InstantiationException e) {
throw new RuntimeException(e);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ private void configureSwagger() {
BeanConfig beanConfig = new BeanConfig();
beanConfig.setConfigId("tibiawikiapi");
beanConfig.setTitle("TibiaWikiApi");
beanConfig.setVersion("1.7.0");
beanConfig.setVersion("1.7.1");
beanConfig.setContact("B. Komen");
beanConfig.setSchemes(new String[]{"https"});
beanConfig.setBasePath(this.apiPath); // location where dynamically created swagger.json is reachable
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -108,28 +108,28 @@ public void testExtractInfoboxPartOfArticle_OnlyInfoboxInArticleText() {

@Test
public void testExtractLootPartOfArticle_EmptyText() {
String result = target.extractLootPartOfArticle(SOME_TEXT_EMPTY);
String result = target.extractLootPartOfArticle("Unknown", SOME_TEXT_EMPTY);

assertThat(result, is(""));
}

@Test
public void testExtractLootPartOfArticle_NoLoot2Template() {
String result = target.extractLootPartOfArticle(SOME_TEXT_NO_INFOBOX);
String result = target.extractLootPartOfArticle("Unknown", SOME_TEXT_NO_INFOBOX);

assertThat(result, is(""));
}

@Test
public void testExtractLootPartOfArticle_OnlyLoot2TemplateInArticleText() {
String result = target.extractLootPartOfArticle(SOME_TEXT_ONLY_LOOT2_TEMPLATE);
String result = target.extractLootPartOfArticle("Unknown", SOME_TEXT_ONLY_LOOT2_TEMPLATE);

assertThat(result, is(SOME_TEXT_ONLY_LOOT2_TEMPLATE));
}

@Test
public void testExtractLootPartOfArticle_ALotOfStuffInArticleText() {
String result = target.extractLootPartOfArticle(SOME_TEXT_WITH_LOOT2_TEMPLATE);
String result = target.extractLootPartOfArticle("Unknown", SOME_TEXT_WITH_LOOT2_TEMPLATE);

assertThat(result, is(SOME_TEXT_ONLY_LOOT2_TEMPLATE));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,8 +94,8 @@ public void testConvertInfoboxPartOfArticleToJson_InfoboxHunt() {

@Test
public void testConvertLootPartOfArticleToJson_NullOrEmpty() {
assertThat(target.convertLootPartOfArticleToJson(null), instanceOf(JSONObject.class));
assertThat(target.convertLootPartOfArticleToJson(""), instanceOf(JSONObject.class));
assertThat(target.convertLootPartOfArticleToJson("", null), instanceOf(JSONObject.class));
assertThat(target.convertLootPartOfArticleToJson("", ""), instanceOf(JSONObject.class));
}

@Test
Expand Down Expand Up @@ -549,7 +549,7 @@ void testConvertJsonToInfoboxPartOfArticle_Spell() {

@Test
public void testConvertLootPartOfArticleToJson_Loot2Bear() {
JSONObject result = target.convertLootPartOfArticleToJson(LOOT_BEAR_TEXT);
JSONObject result = target.convertLootPartOfArticleToJson("Loot Statistics:Bear", LOOT_BEAR_TEXT);

assertThat(result.get("version"), is("8.6"));
assertThat(result.get("kills"), is("52807"));
Expand Down

0 comments on commit 39118d0

Please sign in to comment.