Skip to content

Commit

Permalink
Support for Streets, fixes #14.
Browse files Browse the repository at this point in the history
  • Loading branch information
benjaminkomen committed Jul 24, 2018
1 parent 9ebd759 commit d159b10
Show file tree
Hide file tree
Showing 6 changed files with 142 additions and 3 deletions.
14 changes: 11 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -108,24 +108,32 @@ http://localhost:8080/npcs/Sam

## Outfits

A list of all Outfits:
A list of all outfits:
http://localhost:8080/outfits

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

## Quests

A list of all 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

## Spells

A list of all Spells:
A list of all spells:
http://localhost:8080/spells

A spell by spell name, e.g. "Light Healing":
http://localhost:8080/spells/Light_Healing

## Streets

A list of all streets:
http://localhost:8080/streets

A street by street name, e.g. "Sugar Street":
http://localhost:8080/streets/Sugar_Street
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ public class WikiObjectFactory {
private static final String OBJECT_TYPE_OUTFIT = "Outfit";
private static final String OBJECT_TYPE_QUEST = "Quest";
private static final String OBJECT_TYPE_SPELL = "Spell";
private static final String OBJECT_TYPE_STREET = "Street";

private ObjectMapper objectMapper;

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

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

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

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

private City city;
private City city2;
private String map;
private String floor;

@Override
public List<String> fieldOrder() {
return Arrays.asList("name", "implemented", "city", "city2", "map", "floor", "notes");
}
}
57 changes: 57 additions & 0 deletions src/main/java/com/tibiawiki/process/RetrieveStreets.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 RetrieveStreets extends RetrieveAny {

private static final String CATEGORY = "Streets";

public RetrieveStreets() {
super();
}

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

public List<String> getStreetsList() {
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> getStreetsJSON() {
return getStreetsJSON(ONE_BY_ONE);
}

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

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

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

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

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

@Path("/")
public class StreetsResource {

private RetrieveStreets retrieveStreets;

public StreetsResource() {
retrieveStreets = new RetrieveStreets();
}

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

@GET
@Path("/streets/{name}")
@Produces(MediaType.APPLICATION_JSON)
public Response getStreetsByName(@PathParam("name") String name) {
return retrieveStreets.getStreetJSON(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 @@ -27,5 +27,6 @@ private void registerEndpoints() {
register(OutfitsResource.class);
register(QuestsResource.class);
register(SpellsResource.class);
register(StreetsResource.class);
}
}

0 comments on commit d159b10

Please sign in to comment.