From 036a1a2371d1dabc9751c36a7c3ae4643ef652ea Mon Sep 17 00:00:00 2001 From: marcins78 Date: Wed, 9 Jan 2013 11:38:41 +0000 Subject: [PATCH] Finished AdminRequestHandler. --- .../lotro/async/LotroHttpRequestHandler.java | 1 + .../async/LotroServerPipelineFactory.java | 2 + .../async/handler/AdminRequestHandler.java | 368 ++++++++++++++++++ .../{ => handler}/DeckRequestHandler.java | 3 +- .../{ => handler}/HallRequestHandler.java | 4 +- .../{ => handler}/LoginRequestHandler.java | 3 +- .../LotroServerRequestHandler.java | 21 +- .../{ => handler}/RootUriRequestHandler.java | 7 +- .../{ => handler}/StatusRequestHandler.java | 3 +- .../{ => handler}/UriRequestHandler.java | 3 +- .../{ => handler}/WebRequestHandler.java | 3 +- 11 files changed, 410 insertions(+), 8 deletions(-) create mode 100644 gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/AdminRequestHandler.java rename gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/{ => handler}/DeckRequestHandler.java (94%) rename gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/{ => handler}/HallRequestHandler.java (97%) rename gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/{ => handler}/LoginRequestHandler.java (94%) rename gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/{ => handler}/LotroServerRequestHandler.java (73%) rename gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/{ => handler}/RootUriRequestHandler.java (83%) rename gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/{ => handler}/StatusRequestHandler.java (93%) rename gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/{ => handler}/UriRequestHandler.java (76%) rename gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/{ => handler}/WebRequestHandler.java (88%) diff --git a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/LotroHttpRequestHandler.java b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/LotroHttpRequestHandler.java index 74fa165bf..7f9d2f973 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/LotroHttpRequestHandler.java +++ b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/LotroHttpRequestHandler.java @@ -1,5 +1,6 @@ package com.gempukku.lotro.async; +import com.gempukku.lotro.async.handler.UriRequestHandler; import org.apache.log4j.Logger; import org.jboss.netty.buffer.ChannelBuffers; import org.jboss.netty.channel.*; diff --git a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/LotroServerPipelineFactory.java b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/LotroServerPipelineFactory.java index 19c48144b..d5c1ab88c 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/LotroServerPipelineFactory.java +++ b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/LotroServerPipelineFactory.java @@ -1,5 +1,7 @@ package com.gempukku.lotro.async; +import com.gempukku.lotro.async.handler.RootUriRequestHandler; +import com.gempukku.lotro.async.handler.UriRequestHandler; import com.gempukku.lotro.packs.PacksStorage; import com.gempukku.lotro.server.provider.DaoBuilder; import com.gempukku.lotro.server.provider.PacksStorageBuilder; diff --git a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/AdminRequestHandler.java b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/AdminRequestHandler.java new file mode 100644 index 000000000..f4b8cc7cd --- /dev/null +++ b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/AdminRequestHandler.java @@ -0,0 +1,368 @@ +package com.gempukku.lotro.async.handler; + +import com.gempukku.lotro.DateUtils; +import com.gempukku.lotro.async.HttpProcessingException; +import com.gempukku.lotro.async.ResponseWriter; +import com.gempukku.lotro.cache.CacheManager; +import com.gempukku.lotro.collection.CollectionsManager; +import com.gempukku.lotro.db.LeagueDAO; +import com.gempukku.lotro.db.vo.CollectionType; +import com.gempukku.lotro.game.CardCollection; +import com.gempukku.lotro.game.Player; +import com.gempukku.lotro.game.formats.LotroFormatLibrary; +import com.gempukku.lotro.hall.HallServer; +import com.gempukku.lotro.league.*; +import com.gempukku.lotro.tournament.TournamentService; +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.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import java.lang.reflect.Type; +import java.util.Collection; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; + +public class AdminRequestHandler extends LotroServerRequestHandler implements UriRequestHandler { + private LeagueService _leagueService; + private TournamentService _tournamentService; + private CacheManager _cacheManager; + private HallServer _hallServer; + private LotroFormatLibrary _formatLibrary; + private LeagueDAO _leagueDao; + private CollectionsManager _collectionManager; + + public AdminRequestHandler(Map context) { + super(context); + _leagueService = extractObject(context, LeagueService.class); + _tournamentService = extractObject(context, TournamentService.class); + _cacheManager = extractObject(context, CacheManager.class); + _hallServer = extractObject(context, HallServer.class); + _formatLibrary = extractObject(context, LotroFormatLibrary.class); + _leagueDao = extractObject(context, LeagueDAO.class); + _collectionManager = extractObject(context, CollectionsManager.class); + } + + @Override + public void handleRequest(String uri, HttpRequest request, Map context, ResponseWriter responseWriter, MessageEvent e) { + try { + if (uri.equals("clearCache") && request.getMethod() == HttpMethod.GET) { + clearCache(request, responseWriter); + } else if (uri.equals("shutdown") && request.getMethod() == HttpMethod.GET) { + shutdown(request, responseWriter); + } else if (uri.equals("setMotd") && request.getMethod() == HttpMethod.POST) { + setMotd(request, responseWriter); + } else if (uri.equals("previewSealedLeague") && request.getMethod() == HttpMethod.POST) { + previewSealedLeague(request, responseWriter); + } else if (uri.equals("addSealedLeague") && request.getMethod() == HttpMethod.POST) { + addSealedLeague(request, responseWriter); + } else if (uri.equals("previewConstructedLeague") && request.getMethod() == HttpMethod.POST) { + previewConstructedLeague(request, responseWriter); + } else if (uri.equals("addConstructedLeague") && request.getMethod() == HttpMethod.POST) { + addConstructedLeague(request, responseWriter); + } else if (uri.equals("addItems") && request.getMethod() == HttpMethod.POST) { + addItems(request, responseWriter); + } else if (uri.equals("addItemsToCollection") && request.getMethod() == HttpMethod.POST) { + addItemsToCollection(request, responseWriter); + } else { + responseWriter.writeError(404); + } + } catch (HttpProcessingException exp) { + responseWriter.writeError(exp.getStatus()); + } catch (Exception exp) { + responseWriter.writeError(500); + } + } + + private void addItemsToCollection(HttpRequest request, ResponseWriter responseWriter) throws Exception { + validateAdmin(request); + + HttpPostRequestDecoder postDecoder = new HttpPostRequestDecoder(request); + String reason = getFormParameterSafely(postDecoder, "reason"); + String product = getFormParameterSafely(postDecoder, "product"); + String collectionType = getFormParameterSafely(postDecoder, "collectionType"); + + Collection productItems = getProductItems(product); + + Map playersCollection = _collectionManager.getPlayersCollection(collectionType); + + for (Map.Entry playerCollection : playersCollection.entrySet()) + _collectionManager.addItemsToPlayerCollection(true, reason, playerCollection.getKey(), createCollectionType(collectionType), productItems); + + responseWriter.writeHtmlResponse("OK"); + } + + private void addItems(HttpRequest request, ResponseWriter responseWriter) throws HttpProcessingException, Exception { + validateAdmin(request); + + HttpPostRequestDecoder postDecoder = new HttpPostRequestDecoder(request); + String players = getFormParameterSafely(postDecoder, "players"); + String product = getFormParameterSafely(postDecoder, "product"); + String collectionType = getFormParameterSafely(postDecoder, "collectionType"); + + Collection productItems = getProductItems(product); + + List playerNames = getItems(players); + + for (String playerName : playerNames) { + Player player = _playerDao.getPlayer(playerName); + + _collectionManager.addItemsToPlayerCollection(true, "Administrator action", player, createCollectionType(collectionType), productItems); + } + + responseWriter.writeHtmlResponse("OK"); + } + + private List getItems(String values) { + List result = new LinkedList(); + for (String pack : values.split("\n")) { + String blueprint = pack.trim(); + if (blueprint.length() > 0) + result.add(blueprint); + } + return result; + } + + private Collection getProductItems(String values) { + List result = new LinkedList(); + for (String item : values.split("\n")) { + item = item.trim(); + if (item.length() > 0) { + final String[] itemSplit = item.split("x", 2); + if (itemSplit.length != 2) + throw new RuntimeException("Unable to parse the items"); + result.add(CardCollection.Item.createItem(itemSplit[1].trim(), Integer.parseInt(itemSplit[0].trim()))); + } + } + return result; + } + + private CollectionType createCollectionType(String collectionType) { + if (collectionType.equals("permanent")) + return CollectionType.MY_CARDS; + + return _leagueService.getCollectionTypeByCode(collectionType); + } + + private void addConstructedLeague(HttpRequest request, ResponseWriter responseWriter) throws Exception { + validateLeagueAdmin(request); + + HttpPostRequestDecoder postDecoder = new HttpPostRequestDecoder(request); + String start = getFormParameterSafely(postDecoder, "start"); + String collectionType = getFormParameterSafely(postDecoder, "collectionType"); + String prizeMultiplier = getFormParameterSafely(postDecoder, "prizeMultiplier"); + List formats = getFormMultipleParametersSafely(postDecoder, "format"); + List serieDurations = getFormMultipleParametersSafely(postDecoder, "serieDuration"); + List maxMatches = getFormMultipleParametersSafely(postDecoder, "maxMatches"); + String name = getFormParameterSafely(postDecoder, "name"); + int cost = Integer.parseInt(getFormParameterSafely(postDecoder, "cost")); + + String code = String.valueOf(System.currentTimeMillis()); + + StringBuilder sb = new StringBuilder(); + sb.append(start + "," + collectionType + "," + prizeMultiplier + "," + formats.size()); + for (int i = 0; i < formats.size(); i++) + sb.append("," + formats.get(i) + "," + serieDurations.get(i) + "," + maxMatches.get(i)); + + String parameters = sb.toString(); + LeagueData leagueData = new NewConstructedLeagueData(parameters); + List series = leagueData.getSeries(); + int leagueStart = series.get(0).getStart(); + int displayEnd = DateUtils.offsetDate(series.get(series.size() - 1).getEnd(), 2); + + _leagueDao.addLeague(cost, name, code, leagueData.getClass().getName(), parameters, leagueStart, displayEnd); + + _leagueService.clearCache(); + + responseWriter.writeHtmlResponse("OK"); + } + + private void previewConstructedLeague(HttpRequest request, ResponseWriter responseWriter) throws Exception { + validateLeagueAdmin(request); + + HttpPostRequestDecoder postDecoder = new HttpPostRequestDecoder(request); + String start = getFormParameterSafely(postDecoder, "start"); + String collectionType = getFormParameterSafely(postDecoder, "collectionType"); + String prizeMultiplier = getFormParameterSafely(postDecoder, "prizeMultiplier"); + List formats = getFormMultipleParametersSafely(postDecoder, "format"); + List serieDurations = getFormMultipleParametersSafely(postDecoder, "serieDuration"); + List maxMatches = getFormMultipleParametersSafely(postDecoder, "maxMatches"); + String name = getFormParameterSafely(postDecoder, "name"); + int cost = Integer.parseInt(getFormParameterSafely(postDecoder, "cost")); + + StringBuilder sb = new StringBuilder(); + sb.append(start + "," + collectionType + "," + prizeMultiplier + "," + formats.size()); + for (int i = 0; i < formats.size(); i++) + sb.append("," + formats.get(i) + "," + serieDurations.get(i) + "," + maxMatches.get(i)); + + String parameters = sb.toString(); + LeagueData leagueData = new NewConstructedLeagueData(parameters); + + DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); + DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); + + Document doc = documentBuilder.newDocument(); + + final List series = leagueData.getSeries(); + + int end = series.get(series.size() - 1).getEnd(); + + Element leagueElem = doc.createElement("league"); + + leagueElem.setAttribute("name", name); + leagueElem.setAttribute("cost", String.valueOf(cost)); + leagueElem.setAttribute("start", String.valueOf(series.get(0).getStart())); + leagueElem.setAttribute("end", String.valueOf(end)); + + for (LeagueSerieData serie : series) { + Element serieElem = doc.createElement("serie"); + serieElem.setAttribute("type", serie.getName()); + serieElem.setAttribute("maxMatches", String.valueOf(serie.getMaxMatches())); + serieElem.setAttribute("start", String.valueOf(serie.getStart())); + serieElem.setAttribute("end", String.valueOf(serie.getEnd())); + serieElem.setAttribute("format", _formatLibrary.getFormat(serie.getFormat()).getName()); + serieElem.setAttribute("collection", serie.getCollectionType().getFullName()); + serieElem.setAttribute("limited", String.valueOf(serie.isLimited())); + + leagueElem.appendChild(serieElem); + } + + doc.appendChild(leagueElem); + + responseWriter.writeResponse(doc); + } + + private void addSealedLeague(HttpRequest request, ResponseWriter responseWriter) throws Exception { + validateLeagueAdmin(request); + + HttpPostRequestDecoder postDecoder = new HttpPostRequestDecoder(request); + String format = getFormParameterSafely(postDecoder, "format"); + String start = getFormParameterSafely(postDecoder, "start"); + String serieDuration = getFormParameterSafely(postDecoder, "serieDuration"); + String maxMatches = getFormParameterSafely(postDecoder, "maxMatches"); + String name = getFormParameterSafely(postDecoder, "name"); + int cost = Integer.parseInt(getFormParameterSafely(postDecoder, "cost")); + + String code = String.valueOf(System.currentTimeMillis()); + + String parameters = format + "," + start + "," + serieDuration + "," + maxMatches + "," + code + "," + name; + LeagueData leagueData = new NewSealedLeagueData(parameters); + List series = leagueData.getSeries(); + int leagueStart = series.get(0).getStart(); + int displayEnd = DateUtils.offsetDate(series.get(series.size() - 1).getEnd(), 2); + + _leagueDao.addLeague(cost, name, code, leagueData.getClass().getName(), parameters, leagueStart, displayEnd); + + _leagueService.clearCache(); + + responseWriter.writeHtmlResponse("OK"); + } + + private void previewSealedLeague(HttpRequest request, ResponseWriter responseWriter) throws Exception { + validateLeagueAdmin(request); + + HttpPostRequestDecoder postDecoder = new HttpPostRequestDecoder(request); + String format = getFormParameterSafely(postDecoder, "format"); + String start = getFormParameterSafely(postDecoder, "start"); + String serieDuration = getFormParameterSafely(postDecoder, "serieDuration"); + String maxMatches = getFormParameterSafely(postDecoder, "maxMatches"); + String name = getFormParameterSafely(postDecoder, "name"); + int cost = Integer.parseInt(getFormParameterSafely(postDecoder, "cost")); + + String code = String.valueOf(System.currentTimeMillis()); + + String parameters = format + "," + start + "," + serieDuration + "," + maxMatches + "," + code + "," + name; + LeagueData leagueData = new NewSealedLeagueData(parameters); + + DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); + DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); + + Document doc = documentBuilder.newDocument(); + + final List series = leagueData.getSeries(); + + int end = series.get(series.size() - 1).getEnd(); + + Element leagueElem = doc.createElement("league"); + + leagueElem.setAttribute("name", name); + leagueElem.setAttribute("cost", String.valueOf(cost)); + leagueElem.setAttribute("start", String.valueOf(series.get(0).getStart())); + leagueElem.setAttribute("end", String.valueOf(end)); + + for (LeagueSerieData serie : series) { + Element serieElem = doc.createElement("serie"); + serieElem.setAttribute("type", serie.getName()); + serieElem.setAttribute("maxMatches", String.valueOf(serie.getMaxMatches())); + serieElem.setAttribute("start", String.valueOf(serie.getStart())); + serieElem.setAttribute("end", String.valueOf(serie.getEnd())); + serieElem.setAttribute("format", _formatLibrary.getFormat(serie.getFormat()).getName()); + serieElem.setAttribute("collection", serie.getCollectionType().getFullName()); + serieElem.setAttribute("limited", String.valueOf(serie.isLimited())); + + leagueElem.appendChild(serieElem); + } + + doc.appendChild(leagueElem); + + responseWriter.writeResponse(doc); + } + + private void setMotd(HttpRequest request, ResponseWriter responseWriter) throws HttpProcessingException, Exception { + validateAdmin(request); + + HttpPostRequestDecoder postDecoder = new HttpPostRequestDecoder(request); + + String motd = getFormParameterSafely(postDecoder, "motd"); + + _hallServer.setMOTD(motd); + + responseWriter.writeHtmlResponse("OK"); + } + + private void shutdown(HttpRequest request, ResponseWriter responseWriter) throws HttpProcessingException { + validateAdmin(request); + + QueryStringDecoder queryDecoder = new QueryStringDecoder(request.getUri()); + boolean shutdown = Boolean.valueOf(getQueryParameterSafely(queryDecoder, "shutdown")); + + _hallServer.setShutdown(shutdown); + + responseWriter.writeHtmlResponse("OK"); + } + + private void clearCache(HttpRequest request, ResponseWriter responseWriter) throws HttpProcessingException { + validateAdmin(request); + + _leagueService.clearCache(); + _tournamentService.clearCache(); + + int before = _cacheManager.getTotalCount(); + + _cacheManager.clearCaches(); + + int after = _cacheManager.getTotalCount(); + + responseWriter.writeHtmlResponse("Before: " + before + "
OK
After: " + after); + } + + private void validateAdmin(HttpRequest request) throws HttpProcessingException { + Player player = getResourceOwnerSafely(request, null); + + if (!player.getType().contains("a")) + throw new HttpProcessingException(403); + } + + private void validateLeagueAdmin(HttpRequest request) throws HttpProcessingException { + Player player = getResourceOwnerSafely(request, null); + + if (!player.getType().contains("l")) + throw new HttpProcessingException(403); + } +} diff --git a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/DeckRequestHandler.java b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/DeckRequestHandler.java similarity index 94% rename from gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/DeckRequestHandler.java rename to gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/DeckRequestHandler.java index 0c5e91b8d..c7864c1ca 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/DeckRequestHandler.java +++ b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/DeckRequestHandler.java @@ -1,5 +1,6 @@ -package com.gempukku.lotro.async; +package com.gempukku.lotro.async.handler; +import com.gempukku.lotro.async.ResponseWriter; import com.gempukku.lotro.db.DeckDAO; import com.gempukku.lotro.game.Player; import org.jboss.netty.channel.MessageEvent; diff --git a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/HallRequestHandler.java b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/HallRequestHandler.java similarity index 97% rename from gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/HallRequestHandler.java rename to gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/HallRequestHandler.java index 79bbcebb1..1ff79a87c 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/HallRequestHandler.java +++ b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/HallRequestHandler.java @@ -1,7 +1,9 @@ -package com.gempukku.lotro.async; +package com.gempukku.lotro.async.handler; import com.gempukku.lotro.SubscriptionConflictException; import com.gempukku.lotro.SubscriptionExpiredException; +import com.gempukku.lotro.async.HttpProcessingException; +import com.gempukku.lotro.async.ResponseWriter; import com.gempukku.lotro.collection.CollectionsManager; import com.gempukku.lotro.db.vo.League; import com.gempukku.lotro.game.LotroCardBlueprintLibrary; diff --git a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/LoginRequestHandler.java b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/LoginRequestHandler.java similarity index 94% rename from gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/LoginRequestHandler.java rename to gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/LoginRequestHandler.java index 7b6a47027..db5514579 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/LoginRequestHandler.java +++ b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/LoginRequestHandler.java @@ -1,5 +1,6 @@ -package com.gempukku.lotro.async; +package com.gempukku.lotro.async.handler; +import com.gempukku.lotro.async.ResponseWriter; import com.gempukku.lotro.game.Player; import org.jboss.netty.channel.MessageEvent; import org.jboss.netty.handler.codec.http.CookieEncoder; diff --git a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/LotroServerRequestHandler.java b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/LotroServerRequestHandler.java similarity index 73% rename from gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/LotroServerRequestHandler.java rename to gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/LotroServerRequestHandler.java index f42e63f85..3b0e05639 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/LotroServerRequestHandler.java +++ b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/LotroServerRequestHandler.java @@ -1,5 +1,7 @@ -package com.gempukku.lotro.async; +package com.gempukku.lotro.async.handler; +import com.gempukku.lotro.async.HttpProcessingException; +import com.gempukku.lotro.async.LoggedUserHolder; import com.gempukku.lotro.db.PlayerDAO; import com.gempukku.lotro.game.Player; import org.jboss.netty.handler.codec.http.HttpRequest; @@ -10,6 +12,8 @@ import org.jboss.netty.handler.codec.http.multipart.InterfaceHttpData; import java.io.IOException; import java.lang.reflect.Type; +import java.util.Collections; +import java.util.LinkedList; import java.util.List; import java.util.Map; @@ -55,6 +59,21 @@ public class LotroServerRequestHandler { return null; } + protected List getFormMultipleParametersSafely(HttpPostRequestDecoder postRequestDecoder, String parameterName) throws HttpPostRequestDecoder.NotEnoughDataDecoderException, IOException { + List result = new LinkedList(); + List datas = postRequestDecoder.getBodyHttpDatas(parameterName); + if (datas == null) + return Collections.emptyList(); + for (InterfaceHttpData data : datas) { + if (data.getHttpDataType() == InterfaceHttpData.HttpDataType.Attribute) { + Attribute attribute = (Attribute) data; + result.add(attribute.getValue()); + } + + } + return result; + } + protected String getFormParameterSafely(HttpPostRequestDecoder postRequestDecoder, String parameterName) throws IOException, HttpPostRequestDecoder.NotEnoughDataDecoderException { InterfaceHttpData data = postRequestDecoder.getBodyHttpData(parameterName); if (data == null) diff --git a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/RootUriRequestHandler.java b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/RootUriRequestHandler.java similarity index 83% rename from gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/RootUriRequestHandler.java rename to gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/RootUriRequestHandler.java index c0f75ac99..be6eb3fa4 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/RootUriRequestHandler.java +++ b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/RootUriRequestHandler.java @@ -1,5 +1,6 @@ -package com.gempukku.lotro.async; +package com.gempukku.lotro.async.handler; +import com.gempukku.lotro.async.ResponseWriter; import org.jboss.netty.channel.MessageEvent; import org.jboss.netty.handler.codec.http.HttpRequest; @@ -15,12 +16,14 @@ public class RootUriRequestHandler implements UriRequestHandler { private LoginRequestHandler _loginRequestHandler; private StatusRequestHandler _statusRequestHandler; private DeckRequestHandler _deckRequestHandler; + private AdminRequestHandler _adminRequestHandler; public RootUriRequestHandler(Map context) { _hallRequestHandler = new HallRequestHandler(context); _deckRequestHandler = new DeckRequestHandler(context); _loginRequestHandler = new LoginRequestHandler(context); _statusRequestHandler = new StatusRequestHandler(context); + _adminRequestHandler = new AdminRequestHandler(context); } @Override @@ -35,6 +38,8 @@ public class RootUriRequestHandler implements UriRequestHandler { _deckRequestHandler.handleRequest(uri.substring(_serverContextPath.length()+4), request, context, responseWriter, e); } else if (uri.startsWith(_serverContextPath+"login")) { _loginRequestHandler.handleRequest(uri.substring(_serverContextPath.length()+5), request, context, responseWriter, e); + } else if (uri.startsWith(_serverContextPath+"admin")) { + _adminRequestHandler.handleRequest(uri.substring(_serverContextPath.length()+5), request, context, responseWriter, e); } else if (uri.equals(_serverContextPath)) { _statusRequestHandler.handleRequest(uri.substring(_serverContextPath.length()), request, context, responseWriter, e); } else { diff --git a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/StatusRequestHandler.java b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/StatusRequestHandler.java similarity index 93% rename from gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/StatusRequestHandler.java rename to gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/StatusRequestHandler.java index e0f7cebe6..301febe11 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/StatusRequestHandler.java +++ b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/StatusRequestHandler.java @@ -1,5 +1,6 @@ -package com.gempukku.lotro.async; +package com.gempukku.lotro.async.handler; +import com.gempukku.lotro.async.ResponseWriter; import com.gempukku.lotro.chat.ChatServer; import com.gempukku.lotro.game.GameHistoryService; import com.gempukku.lotro.hall.HallServer; diff --git a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/UriRequestHandler.java b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/UriRequestHandler.java similarity index 76% rename from gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/UriRequestHandler.java rename to gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/UriRequestHandler.java index b96b3710e..ed3e076dc 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/UriRequestHandler.java +++ b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/UriRequestHandler.java @@ -1,5 +1,6 @@ -package com.gempukku.lotro.async; +package com.gempukku.lotro.async.handler; +import com.gempukku.lotro.async.ResponseWriter; import org.jboss.netty.channel.MessageEvent; import org.jboss.netty.handler.codec.http.HttpRequest; diff --git a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/WebRequestHandler.java b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/WebRequestHandler.java similarity index 88% rename from gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/WebRequestHandler.java rename to gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/WebRequestHandler.java index e84631428..be5a9ecd3 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/WebRequestHandler.java +++ b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/WebRequestHandler.java @@ -1,5 +1,6 @@ -package com.gempukku.lotro.async; +package com.gempukku.lotro.async.handler; +import com.gempukku.lotro.async.ResponseWriter; import com.gempukku.lotro.common.ApplicationConfiguration; import org.jboss.netty.channel.MessageEvent; import org.jboss.netty.handler.codec.http.HttpRequest;