Skip to content

Commit

Permalink
Support for Quests, fixes #12.
Browse files Browse the repository at this point in the history
  • Loading branch information
benjaminkomen committed Jul 24, 2018
1 parent 320047c commit d0cb896
Show file tree
Hide file tree
Showing 7 changed files with 176 additions and 1 deletion.
10 changes: 9 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -112,4 +112,12 @@ A list of all Outfits:
http://localhost:8080/outfits

An Outfit by Outfit name, e.g. "Pirate Outfits":
http://localhost:8080/outfits/Pirate_Outfits
http://localhost:8080/outfits/Pirate_Outfits

## Quests

A list of all Quests:
http://localhost:8080/quests

A Quest by Quest name, e.g. "The Paradox Tower Quest":
http://localhost:8080/quests/The_Paradox_Tower_Quest
23 changes: 23 additions & 0 deletions src/main/java/com/tibiawiki/domain/enums/QuestType.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.tibiawiki.domain.enums;

import com.fasterxml.jackson.annotation.JsonValue;
import com.tibiawiki.domain.interfaces.Description;

public enum QuestType implements Description {

WORLD_CHANGE("change"),
MINI_WORLD_CHANGE("mwc"),
WORLD_EVENT("event"),
WORLD_TASK("task");

private String description;

QuestType(String description) {
this.description = description;
}

@JsonValue
public String getDescription() {
return description;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ public class WikiObjectFactory {
private static final String OBJECT_TYPE_KEY = "Key";
private static final String OBJECT_TYPE_NPC = "NPC";
private static final String OBJECT_TYPE_OUTFIT = "Outfit";
private static final String OBJECT_TYPE_QUEST = "Quest";

private ObjectMapper objectMapper;

Expand Down Expand Up @@ -99,6 +100,9 @@ public WikiObject createWikiObject(JSONObject wikiObjectJson) {
case OBJECT_TYPE_OUTFIT:
wikiObject = mapJsonToObject(wikiObjectJson, Outfit.class);
break;
case OBJECT_TYPE_QUEST:
wikiObject = mapJsonToObject(wikiObjectJson, Quest.class);
break;
default:
log.warn("object type '{}' not supported, terminating..", objectType);
return null;
Expand Down
38 changes: 38 additions & 0 deletions src/main/java/com/tibiawiki/domain/objects/Quest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package com.tibiawiki.domain.objects;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.tibiawiki.domain.enums.QuestType;
import com.tibiawiki.domain.enums.YesNo;
import lombok.Getter;
import lombok.NoArgsConstructor;

import java.util.Arrays;
import java.util.List;

@JsonIgnoreProperties({"objectType"})
@Getter
@NoArgsConstructor
public class Quest extends WikiObject {

private String aka;
private String reward;
private String location;
private YesNo rookgaardquest;
private QuestType type;
private Integer lvl;
private Integer lvlrec;
private String lvlnote;
private YesNo log;
private String time;
private String timealloc;
private YesNo premium;
private YesNo transcripts;
private String dangers;
private String legend;

@Override
public List<String> fieldOrder() {
return Arrays.asList("name", "aka", "reward", "location", "rookgaardquest", "type", "lvl", "lvlrec", "lvlnote",
"log", "time", "timealloc", "premium", "transcripts", "dangers", "legend", "history", "status");
}
}
57 changes: 57 additions & 0 deletions src/main/java/com/tibiawiki/process/RetrieveQuests.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package com.tibiawiki.process;

import com.tibiawiki.domain.factories.ArticleFactory;
import com.tibiawiki.domain.factories.JsonFactory;
import com.tibiawiki.domain.repositories.ArticleRepository;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class RetrieveQuests extends RetrieveAny {

private static final String CATEGORY = "Quest Overview Pages";

public RetrieveQuests() {
super();
}

public RetrieveQuests(ArticleRepository articleRepository, ArticleFactory articleFactory, JsonFactory jsonFactory) {
super(articleRepository, articleFactory, jsonFactory);
}

public List<String> getQuestsList() {
final List<String> npcsCategory = new ArrayList<>();
for (String pageName : articleRepository.getMembersFromCategory(CATEGORY)) {
npcsCategory.add(pageName);
}

final List<String> listsCategory = new ArrayList<>();
for (String pageName : articleRepository.getMembersFromCategory(CATEGORY_LISTS)) {
listsCategory.add(pageName);
}

return npcsCategory.stream()
.filter(page -> !listsCategory.contains(page))
.collect(Collectors.toList());
}

public Stream<JSONObject> getQuestsJSON() {
return getQuestsJSON(ONE_BY_ONE);
}

public Stream<JSONObject> getQuestsJSON(boolean oneByOne) {
final List<String> npcsList = getQuestsList();

return oneByOne
? obtainArticlesOneByOne(npcsList)
: obtainArticlesInBulk(npcsList);
}

public Optional<JSONObject> getQuestJSON(String pageName) {
return super.getArticleJSON(pageName);
}
}
44 changes: 44 additions & 0 deletions src/main/java/com/tibiawiki/serviceinterface/QuestsResource.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package com.tibiawiki.serviceinterface;

import com.tibiawiki.process.RetrieveQuests;
import org.json.JSONObject;

import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

@Path("/")
public class QuestsResource {

private RetrieveQuests retrieveQuests;

public QuestsResource() {
retrieveQuests = new RetrieveQuests();
}

@GET
@Path("/quests")
@Produces(MediaType.APPLICATION_JSON)
public Response getQuests(@QueryParam("expand") Boolean expand) {
return Response.ok()
.entity(expand != null && expand
? retrieveQuests.getQuestsJSON().map(JSONObject::toMap)
: retrieveQuests.getQuestsList()
)
.header("Access-Control-Allow-Origin", "*")
.build();
}

@GET
@Path("/quests/{name}")
@Produces(MediaType.APPLICATION_JSON)
public Response getQuestsByName(@PathParam("name") String name) {
return retrieveQuests.getQuestJSON(name)
.map(a -> Response.ok()
.entity(a.toString(2))
.header("Access-Control-Allow-Origin", "*")
.build())
.orElseGet(() -> Response.status(Response.Status.NOT_FOUND)
.build());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,5 +25,6 @@ private void registerEndpoints() {
register(MountsResource.class);
register(NPCsResource.class);
register(OutfitsResource.class);
register(QuestsResource.class);
}
}

0 comments on commit d0cb896

Please sign in to comment.