From d9dd2c25119e33861ffbab976f000f29029d101d Mon Sep 17 00:00:00 2001 From: "marcins78@gmail.com" Date: Thu, 26 Apr 2012 10:23:14 +0000 Subject: [PATCH] Working on adding leagues by league admins. --- .../league/NewConstructedLeagueData.java | 73 ++++++++ .../gempukku/lotro/server/AdminResource.java | 161 +++++++++++++++++- .../gempukku/lotro/server/LeagueResource.java | 2 + 3 files changed, 231 insertions(+), 5 deletions(-) create mode 100644 gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/NewConstructedLeagueData.java diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/NewConstructedLeagueData.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/NewConstructedLeagueData.java new file mode 100644 index 000000000..7ffd4361e --- /dev/null +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/NewConstructedLeagueData.java @@ -0,0 +1,73 @@ +package com.gempukku.lotro.league; + +import com.gempukku.lotro.DateUtils; +import com.gempukku.lotro.collection.CollectionsManager; +import com.gempukku.lotro.db.vo.CollectionType; +import com.gempukku.lotro.game.CardCollection; +import com.gempukku.lotro.game.Player; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class NewConstructedLeagueData implements LeagueData { + private List _series = new ArrayList(); + + private CollectionType _prizeCollectionType = new CollectionType("permanent", "My cards"); + private LeaguePrizes _leaguePrizes = new NewLeaguePrizes(); + private float _prizeMultiplier; + + public NewConstructedLeagueData(String parameters) { + String[] params = parameters.split(","); + int start = Integer.parseInt(params[0]); + CollectionType collectionType; + if (params[1].equals("default")) + collectionType = new CollectionType("default", "All cards"); + else if (params[1].equals("permanent")) + collectionType = new CollectionType("permanent", "My cards"); + else + throw new IllegalArgumentException("Unkown collection type"); + _prizeMultiplier = Float.parseFloat(params[2]); + int series = Integer.parseInt(params[3]); + + int serieStart = start; + for (int i = 0; i < series; i++) { + String format = params[4 + i * 3]; + int duration = Integer.parseInt(params[5 + i * 3]); + int maxMatches = Integer.parseInt(params[6 + i * 3]); + _series.add(new DefaultLeagueSerieData(_leaguePrizes, false, "Week " + (i + 1), + serieStart, DateUtils.offsetDate(serieStart, duration - 1), + maxMatches, format, null, collectionType)); + + serieStart = DateUtils.offsetDate(serieStart, duration); + } + } + + @Override + public List getSeries() { + return Collections.unmodifiableList(_series); + } + + @Override + public CardCollection joinLeague(CollectionsManager collecionsManager, Player player, int currentTime) { + return null; + } + + @Override + public int process(CollectionsManager collectionsManager, List leagueStandings, int oldStatus, int currentTime) { + int status = oldStatus; + if (status == 0) { + LeagueSerieData lastSerie = _series.get(_series.size() - 1); + if (currentTime > DateUtils.offsetDate(lastSerie.getEnd(), 1)) { + for (LeagueStanding leagueStanding : leagueStandings) { + CardCollection leaguePrize = _leaguePrizes.getPrizeForLeague(leagueStanding.getStanding(), leagueStandings.size(), _prizeMultiplier, null); + if (leaguePrize != null) + collectionsManager.addItemsToPlayerCollection(leagueStanding.getPlayerName(), _prizeCollectionType, leaguePrize.getAll()); + } + status++; + } + } + + return status; + } +} diff --git a/gemp-lotr/gemp-lotr-web-server/src/main/java/com/gempukku/lotro/server/AdminResource.java b/gemp-lotr/gemp-lotr-web-server/src/main/java/com/gempukku/lotro/server/AdminResource.java index c763d257a..0bd7bd0f9 100644 --- a/gemp-lotr/gemp-lotr-web-server/src/main/java/com/gempukku/lotro/server/AdminResource.java +++ b/gemp-lotr/gemp-lotr-web-server/src/main/java/com/gempukku/lotro/server/AdminResource.java @@ -10,16 +10,20 @@ import com.gempukku.lotro.game.DefaultCardCollection; import com.gempukku.lotro.game.LotroCardBlueprintLibrary; import com.gempukku.lotro.game.LotroServer; import com.gempukku.lotro.game.Player; +import com.gempukku.lotro.game.formats.LotroFormatLibrary; import com.gempukku.lotro.hall.HallServer; -import com.gempukku.lotro.league.LeagueSerieData; -import com.gempukku.lotro.league.LeagueService; -import com.gempukku.lotro.league.NewSealedLeagueData; +import com.gempukku.lotro.league.*; import com.sun.jersey.spi.resource.Singleton; +import org.w3c.dom.Document; +import org.w3c.dom.Element; import javax.servlet.http.HttpServletRequest; import javax.ws.rs.*; import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; import java.util.HashMap; import java.util.LinkedList; import java.util.List; @@ -45,6 +49,9 @@ public class AdminResource extends AbstractResource { @Context private LotroServer _lotroServer; + @Context + private LotroFormatLibrary _formatLibrary; + @Path("/clearCache") @GET public String clearCache(@Context HttpServletRequest request) throws Exception { @@ -83,6 +90,58 @@ public class AdminResource extends AbstractResource { return "OK"; } + @Path("/previewSealedLeague") + @POST + @Produces(MediaType.APPLICATION_XML) + public Document previewSealedLeague( + @FormParam("cost") int cost, + @FormParam("format") String format, + @FormParam("name") String name, + @FormParam("start") String start, + @FormParam("serieDuration") int serieDuration, + @FormParam("maxMatches") int maxMatches, + @Context HttpServletRequest request) throws Exception { + validateLeagueAdmin(request); + + 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); + + return doc; + } + @Path("/addSealedLeague") @POST public String addSealedLeague( @@ -98,11 +157,103 @@ public class AdminResource extends AbstractResource { String code = String.valueOf(System.currentTimeMillis()); String parameters = format + "," + start + "," + serieDuration + "," + maxMatches + "," + code + "," + name; - NewSealedLeagueData leagueData = new NewSealedLeagueData(parameters); + 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, String.valueOf(System.currentTimeMillis()), NewSealedLeagueData.class.getName(), parameters, DateUtils.getCurrentDate(), displayEnd); + _leagueDao.addLeague(cost, name, code, leagueData.getClass().getName(), parameters, leagueStart, displayEnd); + + _leagueService.clearCache(); + + return "OK"; + } + + @Path("/previewConstructedLeague") + @POST + @Produces(MediaType.APPLICATION_XML) + public Document previewConstructedLeague( + @FormParam("cost") int cost, + @FormParam("name") String name, + @FormParam("start") String start, + @FormParam("prizeMultiplier") float prizeMultiplier, + @FormParam("collectionType") String collectionType, + @FormParam("format") String[] formats, + @FormParam("serieDuration") int[] serieDurations, + @FormParam("maxMatches") int[] maxMatches, + @Context HttpServletRequest request) throws Exception { + validateLeagueAdmin(request); + + StringBuilder sb = new StringBuilder(); + sb.append(start + "," + collectionType + "," + prizeMultiplier + "," + formats.length); + for (int i = 0; i < formats.length; i++) + sb.append("," + formats[i] + "," + serieDurations[i] + "," + maxMatches[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); + + return doc; + } + + @Path("/addConstructedLeague") + @POST + public String addConstructedLeague( + @FormParam("cost") int cost, + @FormParam("name") String name, + @FormParam("start") String start, + @FormParam("prizeMultiplier") float prizeMultiplier, + @FormParam("collectionType") String collectionType, + @FormParam("format") String[] formats, + @FormParam("serieDuration") int[] serieDurations, + @FormParam("maxMatches") int[] maxMatches, + @Context HttpServletRequest request) throws Exception { + validateLeagueAdmin(request); + + String code = String.valueOf(System.currentTimeMillis()); + + StringBuilder sb = new StringBuilder(); + sb.append(start + "," + collectionType + "," + prizeMultiplier + "," + formats.length); + for (int i = 0; i < formats.length; i++) + sb.append("," + formats[i] + "," + serieDurations[i] + "," + maxMatches[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(); diff --git a/gemp-lotr/gemp-lotr-web-server/src/main/java/com/gempukku/lotro/server/LeagueResource.java b/gemp-lotr/gemp-lotr-web-server/src/main/java/com/gempukku/lotro/server/LeagueResource.java index b2797d081..ec623eabc 100644 --- a/gemp-lotr/gemp-lotr-web-server/src/main/java/com/gempukku/lotro/server/LeagueResource.java +++ b/gemp-lotr/gemp-lotr-web-server/src/main/java/com/gempukku/lotro/server/LeagueResource.java @@ -16,6 +16,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.ws.rs.*; import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; @@ -81,6 +82,7 @@ public class LeagueResource extends AbstractResource { @Path("/{leagueType}") @GET + @Produces(MediaType.APPLICATION_XML) public Document getLeagueInformation( @PathParam("leagueType") String leagueType, @QueryParam("participantId") String participantId,