Working on adding leagues by league admins.

This commit is contained in:
marcins78@gmail.com
2012-04-26 10:23:14 +00:00
parent 4c24e57537
commit d9dd2c2511
3 changed files with 231 additions and 5 deletions

View File

@@ -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<LeagueSerieData> _series = new ArrayList<LeagueSerieData>();
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<LeagueSerieData> getSeries() {
return Collections.unmodifiableList(_series);
}
@Override
public CardCollection joinLeague(CollectionsManager collecionsManager, Player player, int currentTime) {
return null;
}
@Override
public int process(CollectionsManager collectionsManager, List<LeagueStanding> 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;
}
}

View File

@@ -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<LeagueSerieData> 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<LeagueSerieData> 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<LeagueSerieData> 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<LeagueSerieData> 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();

View File

@@ -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,