Adding CollectionRequestHandler.
This commit is contained in:
@@ -0,0 +1,260 @@
|
||||
package com.gempukku.lotro.async.handler;
|
||||
|
||||
import com.gempukku.lotro.async.HttpProcessingException;
|
||||
import com.gempukku.lotro.async.ResponseWriter;
|
||||
import com.gempukku.lotro.cards.packs.RarityReader;
|
||||
import com.gempukku.lotro.cards.packs.SetRarity;
|
||||
import com.gempukku.lotro.collection.CollectionsManager;
|
||||
import com.gempukku.lotro.common.CardType;
|
||||
import com.gempukku.lotro.common.Keyword;
|
||||
import com.gempukku.lotro.common.Side;
|
||||
import com.gempukku.lotro.db.vo.CollectionType;
|
||||
import com.gempukku.lotro.db.vo.League;
|
||||
import com.gempukku.lotro.game.*;
|
||||
import com.gempukku.lotro.game.formats.LotroFormatLibrary;
|
||||
import com.gempukku.lotro.league.LeagueSerieData;
|
||||
import com.gempukku.lotro.league.LeagueService;
|
||||
import com.gempukku.lotro.packs.PacksStorage;
|
||||
import org.jboss.netty.channel.MessageEvent;
|
||||
import org.jboss.netty.handler.codec.http.HttpMethod;
|
||||
import org.jboss.netty.handler.codec.http.HttpRequest;
|
||||
import org.jboss.netty.handler.codec.http.QueryStringDecoder;
|
||||
import org.jboss.netty.handler.codec.http.multipart.HttpPostRequestDecoder;
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Element;
|
||||
|
||||
import javax.ws.rs.WebApplicationException;
|
||||
import javax.ws.rs.core.Response;
|
||||
import javax.xml.parsers.DocumentBuilder;
|
||||
import javax.xml.parsers.DocumentBuilderFactory;
|
||||
import java.lang.reflect.Type;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class CollectionRequestHandler extends LotroServerRequestHandler implements UriRequestHandler {
|
||||
private HashMap<String, SetRarity> _rarities;
|
||||
private LeagueService _leagueService;
|
||||
private CollectionsManager _collectionsManager;
|
||||
private PacksStorage _packStorage;
|
||||
private LotroCardBlueprintLibrary _library;
|
||||
private LotroFormatLibrary _formatLibrary;
|
||||
private SortAndFilterCards _sortAndFilterCards;
|
||||
|
||||
public CollectionRequestHandler(Map<Type, Object> context) {
|
||||
super(context);
|
||||
_rarities = new HashMap<String, SetRarity>();
|
||||
RarityReader reader = new RarityReader();
|
||||
_rarities.put("0", reader.getSetRarity("0"));
|
||||
_rarities.put("1", reader.getSetRarity("1"));
|
||||
_rarities.put("2", reader.getSetRarity("2"));
|
||||
_rarities.put("3", reader.getSetRarity("3"));
|
||||
_rarities.put("4", reader.getSetRarity("4"));
|
||||
_rarities.put("5", reader.getSetRarity("5"));
|
||||
_rarities.put("6", reader.getSetRarity("6"));
|
||||
_rarities.put("7", reader.getSetRarity("7"));
|
||||
_rarities.put("8", reader.getSetRarity("8"));
|
||||
_rarities.put("9", reader.getSetRarity("9"));
|
||||
_rarities.put("10", reader.getSetRarity("10"));
|
||||
_rarities.put("11", reader.getSetRarity("11"));
|
||||
_rarities.put("12", reader.getSetRarity("12"));
|
||||
_rarities.put("13", reader.getSetRarity("13"));
|
||||
_rarities.put("14", reader.getSetRarity("14"));
|
||||
_rarities.put("15", reader.getSetRarity("15"));
|
||||
_rarities.put("16", reader.getSetRarity("16"));
|
||||
_rarities.put("17", reader.getSetRarity("17"));
|
||||
_rarities.put("18", reader.getSetRarity("18"));
|
||||
_rarities.put("19", reader.getSetRarity("19"));
|
||||
|
||||
_leagueService = extractObject(context, LeagueService.class);
|
||||
_collectionsManager = extractObject(context, CollectionsManager.class);
|
||||
_packStorage = extractObject(context, PacksStorage.class);
|
||||
_library = extractObject(context, LotroCardBlueprintLibrary.class);
|
||||
_formatLibrary = extractObject(context, LotroFormatLibrary.class);
|
||||
_sortAndFilterCards = new SortAndFilterCards();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleRequest(String uri, HttpRequest request, Map<Type, Object> context, ResponseWriter responseWriter, MessageEvent e) {
|
||||
try {
|
||||
if (uri.equals("") && request.getMethod() == HttpMethod.GET) {
|
||||
getCollectionTypes(request, responseWriter);
|
||||
} else if (uri.startsWith("/") && request.getMethod() == HttpMethod.POST) {
|
||||
openPack(request, uri.substring(1), responseWriter);
|
||||
} else if (uri.startsWith("/") && request.getMethod() == HttpMethod.GET) {
|
||||
getCollection(request, uri.substring(1), responseWriter);
|
||||
} else {
|
||||
responseWriter.writeError(404);
|
||||
}
|
||||
} catch (HttpProcessingException exp) {
|
||||
responseWriter.writeError(exp.getStatus());
|
||||
} catch (Exception exp) {
|
||||
responseWriter.writeError(500);
|
||||
}
|
||||
}
|
||||
|
||||
private void getCollection(HttpRequest request, String collectionType, ResponseWriter responseWriter) throws Exception {
|
||||
QueryStringDecoder queryDecoder = new QueryStringDecoder(request.getUri());
|
||||
String participantId = getQueryParameterSafely(queryDecoder, "participantId");
|
||||
String filter = getQueryParameterSafely(queryDecoder, "filter");
|
||||
int start = Integer.parseInt(getQueryParameterSafely(queryDecoder, "start"));
|
||||
int count = Integer.parseInt(getQueryParameterSafely(queryDecoder, "count"));
|
||||
|
||||
Player resourceOwner = getResourceOwnerSafely(request, participantId);
|
||||
|
||||
CardCollection collection = constructCollection(resourceOwner, collectionType);
|
||||
|
||||
if (collection == null)
|
||||
throw new WebApplicationException(Response.Status.NOT_FOUND);
|
||||
|
||||
Collection<CardCollection.Item> items = collection.getAll().values();
|
||||
List<CardCollection.Item> filteredResult = _sortAndFilterCards.process(filter, items, _library, _formatLibrary, _rarities);
|
||||
|
||||
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
|
||||
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
|
||||
|
||||
Document doc = documentBuilder.newDocument();
|
||||
|
||||
Element collectionElem = doc.createElement("collection");
|
||||
collectionElem.setAttribute("count", String.valueOf(filteredResult.size()));
|
||||
doc.appendChild(collectionElem);
|
||||
|
||||
for (int i = start; i < start + count; i++) {
|
||||
if (i >= 0 && i < filteredResult.size()) {
|
||||
CardCollection.Item item = filteredResult.get(i);
|
||||
String blueprintId = item.getBlueprintId();
|
||||
if (item.getType() == CardCollection.Item.Type.CARD) {
|
||||
Element card = doc.createElement("card");
|
||||
card.setAttribute("count", String.valueOf(item.getCount()));
|
||||
card.setAttribute("blueprintId", blueprintId);
|
||||
LotroCardBlueprint blueprint = _library.getLotroCardBlueprint(blueprintId);
|
||||
appendCardSide(card, blueprint);
|
||||
appendCardGroup(card, blueprint);
|
||||
collectionElem.appendChild(card);
|
||||
} else {
|
||||
Element pack = doc.createElement("pack");
|
||||
pack.setAttribute("count", String.valueOf(item.getCount()));
|
||||
pack.setAttribute("blueprintId", blueprintId);
|
||||
if (item.getType() == CardCollection.Item.Type.SELECTION) {
|
||||
List<CardCollection.Item> contents = _packStorage.openPack(blueprintId);
|
||||
StringBuilder contentsStr = new StringBuilder();
|
||||
for (CardCollection.Item content : contents)
|
||||
contentsStr.append(content.getBlueprintId()).append("|");
|
||||
contentsStr.delete(contentsStr.length() - 1, contentsStr.length());
|
||||
pack.setAttribute("contents", contentsStr.toString());
|
||||
}
|
||||
collectionElem.appendChild(pack);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
responseWriter.writeResponse(doc);
|
||||
}
|
||||
|
||||
private CardCollection constructCollection(Player player, String collectionType) {
|
||||
return _collectionsManager.getPlayerCollection(player, collectionType);
|
||||
}
|
||||
|
||||
private void openPack(HttpRequest request, String collectionType, ResponseWriter responseWriter) throws Exception {
|
||||
HttpPostRequestDecoder postDecoder = new HttpPostRequestDecoder(request);
|
||||
String participantId = getFormParameterSafely(postDecoder, "participantId");
|
||||
String selection = getFormParameterSafely(postDecoder, "selection");
|
||||
String packId = getFormParameterSafely(postDecoder, "pack");
|
||||
|
||||
Player resourceOwner = getResourceOwnerSafely(request, participantId);
|
||||
|
||||
CollectionType collectionTypeObj = createCollectionType(collectionType);
|
||||
CardCollection packContents = _collectionsManager.openPackInPlayerCollection(resourceOwner, collectionTypeObj, selection, _packStorage, packId);
|
||||
|
||||
if (packContents == null)
|
||||
throw new WebApplicationException(Response.Status.NOT_FOUND);
|
||||
|
||||
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
|
||||
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
|
||||
|
||||
Document doc = documentBuilder.newDocument();
|
||||
|
||||
Element collectionElem = doc.createElement("pack");
|
||||
doc.appendChild(collectionElem);
|
||||
|
||||
for (CardCollection.Item item : packContents.getAll().values()) {
|
||||
String blueprintId = item.getBlueprintId();
|
||||
if (item.getType() == CardCollection.Item.Type.CARD) {
|
||||
Element card = doc.createElement("card");
|
||||
card.setAttribute("count", String.valueOf(item.getCount()));
|
||||
card.setAttribute("blueprintId", blueprintId);
|
||||
appendCardSide(card, _library.getLotroCardBlueprint(blueprintId));
|
||||
collectionElem.appendChild(card);
|
||||
} else {
|
||||
Element pack = doc.createElement("pack");
|
||||
pack.setAttribute("count", String.valueOf(item.getCount()));
|
||||
pack.setAttribute("blueprintId", blueprintId);
|
||||
collectionElem.appendChild(pack);
|
||||
}
|
||||
}
|
||||
|
||||
responseWriter.writeResponse(doc);
|
||||
}
|
||||
|
||||
private void getCollectionTypes(HttpRequest request, ResponseWriter responseWriter) throws Exception {
|
||||
QueryStringDecoder queryDecoder = new QueryStringDecoder(request.getUri());
|
||||
String participantId = getQueryParameterSafely(queryDecoder, "participantId");
|
||||
|
||||
Player resourceOwner = getResourceOwnerSafely(request, participantId);
|
||||
|
||||
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
|
||||
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
|
||||
|
||||
Document doc = documentBuilder.newDocument();
|
||||
|
||||
Element collectionsElem = doc.createElement("collections");
|
||||
|
||||
for (League league : _leagueService.getActiveLeagues()) {
|
||||
LeagueSerieData serie = _leagueService.getCurrentLeagueSerie(league);
|
||||
if (serie != null && serie.isLimited() && _leagueService.isPlayerInLeague(league, resourceOwner)) {
|
||||
CollectionType collectionType = serie.getCollectionType();
|
||||
Element collectionElem = doc.createElement("collection");
|
||||
collectionElem.setAttribute("type", collectionType.getCode());
|
||||
collectionElem.setAttribute("name", collectionType.getFullName());
|
||||
collectionsElem.appendChild(collectionElem);
|
||||
}
|
||||
}
|
||||
|
||||
doc.appendChild(collectionsElem);
|
||||
|
||||
responseWriter.writeResponse(doc);
|
||||
}
|
||||
|
||||
private CollectionType createCollectionType(String collectionType) {
|
||||
if (collectionType.equals("permanent"))
|
||||
return CollectionType.MY_CARDS;
|
||||
|
||||
return _leagueService.getCollectionTypeByCode(collectionType);
|
||||
}
|
||||
|
||||
private void appendCardSide(Element card, LotroCardBlueprint blueprint) {
|
||||
Side side = blueprint.getSide();
|
||||
if (side != null)
|
||||
card.setAttribute("side", side.toString());
|
||||
}
|
||||
|
||||
private void appendCardGroup(Element card, LotroCardBlueprint blueprint) {
|
||||
String group;
|
||||
if (blueprint.getCardType() == CardType.THE_ONE_RING)
|
||||
group="ring";
|
||||
else if (blueprint.getCardType() == CardType.SITE)
|
||||
group="site";
|
||||
else if (blueprint.hasKeyword(Keyword.CAN_START_WITH_RING))
|
||||
group="ringBearer";
|
||||
else if (blueprint.getSide() == Side.FREE_PEOPLE)
|
||||
group="fp";
|
||||
else if (blueprint.getSide() == Side.SHADOW)
|
||||
group="shadow";
|
||||
else
|
||||
group = null;
|
||||
if (group != null)
|
||||
card.setAttribute("group", group);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -18,6 +18,7 @@ public class RootUriRequestHandler implements UriRequestHandler {
|
||||
private DeckRequestHandler _deckRequestHandler;
|
||||
private AdminRequestHandler _adminRequestHandler;
|
||||
private ChatRequestHandler _chatRequestHandler;
|
||||
private CollectionRequestHandler _collectionRequestHandler;
|
||||
|
||||
public RootUriRequestHandler(Map<Type, Object> context) {
|
||||
_hallRequestHandler = new HallRequestHandler(context);
|
||||
@@ -26,6 +27,7 @@ public class RootUriRequestHandler implements UriRequestHandler {
|
||||
_statusRequestHandler = new StatusRequestHandler(context);
|
||||
_adminRequestHandler = new AdminRequestHandler(context);
|
||||
_chatRequestHandler = new ChatRequestHandler(context);
|
||||
_collectionRequestHandler = new CollectionRequestHandler(context);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -44,6 +46,8 @@ public class RootUriRequestHandler implements UriRequestHandler {
|
||||
_adminRequestHandler.handleRequest(uri.substring(_serverContextPath.length()+5), request, context, responseWriter, e);
|
||||
} else if (uri.startsWith(_serverContextPath + "chat")) {
|
||||
_chatRequestHandler.handleRequest(uri.substring(_serverContextPath.length()+4), request, context, responseWriter, e);
|
||||
} else if (uri.startsWith(_serverContextPath + "collection")) {
|
||||
_collectionRequestHandler.handleRequest(uri.substring(_serverContextPath.length()+10), request, context, responseWriter, e);
|
||||
} else if (uri.equals(_serverContextPath)) {
|
||||
_statusRequestHandler.handleRequest(uri.substring(_serverContextPath.length()), request, context, responseWriter, e);
|
||||
} else {
|
||||
|
||||
@@ -1,9 +1,3 @@
|
||||
<%@ page contentType="text/html; charset=UTF-8"%>
|
||||
<%
|
||||
response.setHeader("Cache-Control","no-cache");
|
||||
response.setHeader("Pragma","no-cache");
|
||||
response.setDateHeader ("Expires", -1);
|
||||
%>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
@@ -12,7 +6,39 @@ response.setDateHeader ("Expires", -1);
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="css/gemp-001/deckBuild.css">
|
||||
|
||||
<%@ include file="js.inc" %>
|
||||
<link rel="stylesheet" type="text/css" href="css/dark-hive/jquery-ui-1.8.16.custom.css">
|
||||
<link rel="stylesheet" type="text/css" href="css/jquery.contextMenu.css">
|
||||
<link rel="stylesheet" type="text/css" href="js/jquery/styles/jquery.spinnercontrol.css">
|
||||
|
||||
<script type="text/javascript" src="js/jquery/jquery-1.6.2.js"></script>
|
||||
<script type="text/javascript" src="js/jquery/jquery-ui-1.8.16.custom.min.js"></script>
|
||||
<script type="text/javascript" src="js/jquery/jquery.cookie.js"></script>
|
||||
<script type="text/javascript" src="js/jquery/jquery.spinnercontrol.js"></script>
|
||||
<script type="text/javascript" src="js/jquery/jquery.layout.js"></script>
|
||||
<script type="text/javascript" src="js/jquery/jquery.touchSwipe.js"></script>
|
||||
|
||||
<script type="text/javascript" src="js/gemp-015/inheritance.js"></script>
|
||||
<script type="text/javascript" src="js/gemp-015/common.js"></script>
|
||||
<script type="text/javascript" src="js/gemp-015/logging.js"></script>
|
||||
<script type="text/javascript" src="js/gemp-015/chat.js"></script>
|
||||
<script type="text/javascript" src="js/gemp-015/communication.js"></script>
|
||||
<script type="text/javascript" src="js/gemp-015/deliveryService.js"></script>
|
||||
<script type="text/javascript" src="js/gemp-015/commonUi.js"></script>
|
||||
<script type="text/javascript" src="js/gemp-015/cardFilter.js"></script>
|
||||
|
||||
<script type="text/javascript" src="js/gemp-015/jCardGroup.js"></script>
|
||||
<script type="text/javascript" src="js/gemp-015/jCards.js"></script>
|
||||
|
||||
<script type="text/javascript" src="js/gemp-015/hallUi.js"></script>
|
||||
<script type="text/javascript" src="js/gemp-015/leagueResultsUi.js"></script>
|
||||
<script type="text/javascript" src="js/gemp-015/tournamentResultsUi.js"></script>
|
||||
<script type="text/javascript" src="js/gemp-015/statsUi.js"></script>
|
||||
<script type="text/javascript" src="js/gemp-015/playerStatsUi.js"></script>
|
||||
<script type="text/javascript" src="js/gemp-015/gameHistoryUi.js"></script>
|
||||
<script type="text/javascript" src="js/gemp-015/deckBuildingUi.js"></script>
|
||||
<script type="text/javascript" src="js/gemp-015/gameUi.js"></script>
|
||||
<script type="text/javascript" src="js/gemp-015/gameAnimations.js"></script>
|
||||
<script type="text/javascript" src="js/gemp-015/merchantUi.js"></script>
|
||||
|
||||
<script type="text/javascript">
|
||||
|
||||
|
||||
@@ -1,9 +1,3 @@
|
||||
<%@ page contentType="text/html; charset=UTF-8"%>
|
||||
<%
|
||||
response.setHeader("Cache-Control","no-cache");
|
||||
response.setHeader("Pragma","no-cache");
|
||||
response.setDateHeader ("Expires", -1);
|
||||
%>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
@@ -12,7 +6,39 @@ response.setDateHeader ("Expires", -1);
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="css/gemp-001/merchant.css">
|
||||
|
||||
<%@ include file="js.inc" %>
|
||||
<link rel="stylesheet" type="text/css" href="css/dark-hive/jquery-ui-1.8.16.custom.css">
|
||||
<link rel="stylesheet" type="text/css" href="css/jquery.contextMenu.css">
|
||||
<link rel="stylesheet" type="text/css" href="js/jquery/styles/jquery.spinnercontrol.css">
|
||||
|
||||
<script type="text/javascript" src="js/jquery/jquery-1.6.2.js"></script>
|
||||
<script type="text/javascript" src="js/jquery/jquery-ui-1.8.16.custom.min.js"></script>
|
||||
<script type="text/javascript" src="js/jquery/jquery.cookie.js"></script>
|
||||
<script type="text/javascript" src="js/jquery/jquery.spinnercontrol.js"></script>
|
||||
<script type="text/javascript" src="js/jquery/jquery.layout.js"></script>
|
||||
<script type="text/javascript" src="js/jquery/jquery.touchSwipe.js"></script>
|
||||
|
||||
<script type="text/javascript" src="js/gemp-015/inheritance.js"></script>
|
||||
<script type="text/javascript" src="js/gemp-015/common.js"></script>
|
||||
<script type="text/javascript" src="js/gemp-015/logging.js"></script>
|
||||
<script type="text/javascript" src="js/gemp-015/chat.js"></script>
|
||||
<script type="text/javascript" src="js/gemp-015/communication.js"></script>
|
||||
<script type="text/javascript" src="js/gemp-015/deliveryService.js"></script>
|
||||
<script type="text/javascript" src="js/gemp-015/commonUi.js"></script>
|
||||
<script type="text/javascript" src="js/gemp-015/cardFilter.js"></script>
|
||||
|
||||
<script type="text/javascript" src="js/gemp-015/jCardGroup.js"></script>
|
||||
<script type="text/javascript" src="js/gemp-015/jCards.js"></script>
|
||||
|
||||
<script type="text/javascript" src="js/gemp-015/hallUi.js"></script>
|
||||
<script type="text/javascript" src="js/gemp-015/leagueResultsUi.js"></script>
|
||||
<script type="text/javascript" src="js/gemp-015/tournamentResultsUi.js"></script>
|
||||
<script type="text/javascript" src="js/gemp-015/statsUi.js"></script>
|
||||
<script type="text/javascript" src="js/gemp-015/playerStatsUi.js"></script>
|
||||
<script type="text/javascript" src="js/gemp-015/gameHistoryUi.js"></script>
|
||||
<script type="text/javascript" src="js/gemp-015/deckBuildingUi.js"></script>
|
||||
<script type="text/javascript" src="js/gemp-015/gameUi.js"></script>
|
||||
<script type="text/javascript" src="js/gemp-015/gameAnimations.js"></script>
|
||||
<script type="text/javascript" src="js/gemp-015/merchantUi.js"></script>
|
||||
|
||||
<script type="text/javascript">
|
||||
|
||||
|
||||
Reference in New Issue
Block a user