Adding solo drafts starting point

This commit is contained in:
marcin.sciesinski
2017-11-27 06:55:59 -08:00
parent 5f00462048
commit 75bc0183be
18 changed files with 224 additions and 32 deletions

View File

@@ -6,6 +6,7 @@ import com.gempukku.lotro.builder.DaoBuilder;
import com.gempukku.lotro.builder.PacksStorageBuilder; import com.gempukku.lotro.builder.PacksStorageBuilder;
import com.gempukku.lotro.builder.ServerBuilder; import com.gempukku.lotro.builder.ServerBuilder;
import com.gempukku.lotro.cards.CardSets; import com.gempukku.lotro.cards.CardSets;
import com.gempukku.lotro.draft2.SoloDraftDefinitions;
import com.gempukku.lotro.packs.PacksStorage; import com.gempukku.lotro.packs.PacksStorage;
import com.gempukku.lotro.service.LoggedUserHolder; import com.gempukku.lotro.service.LoggedUserHolder;
import com.gempukku.polling.LongPollingSystem; import com.gempukku.polling.LongPollingSystem;
@@ -28,6 +29,7 @@ public class LotroServerPipelineFactory implements ChannelPipelineFactory {
public LotroServerPipelineFactory() { public LotroServerPipelineFactory() {
Map<Type, Object> objects = new HashMap<Type, Object>(); Map<Type, Object> objects = new HashMap<Type, Object>();
final CardSets cardSets = new CardSets(); final CardSets cardSets = new CardSets();
SoloDraftDefinitions soloDraftDefinitions = new SoloDraftDefinitions();
LoggedUserHolder loggedUserHolder = new LoggedUserHolder(); LoggedUserHolder loggedUserHolder = new LoggedUserHolder();
loggedUserHolder.start(); loggedUserHolder.start();
@@ -38,6 +40,7 @@ public class LotroServerPipelineFactory implements ChannelPipelineFactory {
objects.put(LongPollingSystem.class, longPollingSystem); objects.put(LongPollingSystem.class, longPollingSystem);
objects.put(CardSets.class, cardSets); objects.put(CardSets.class, cardSets);
objects.put(SoloDraftDefinitions.class, soloDraftDefinitions);
objects.put(PacksStorage.class, PacksStorageBuilder.createPacksStorage(cardSets)); objects.put(PacksStorage.class, PacksStorageBuilder.createPacksStorage(cardSets));
DaoBuilder.fillObjectMap(objects); DaoBuilder.fillObjectMap(objects);
ServerBuilder.fillObjectMap(objects); ServerBuilder.fillObjectMap(objects);

View File

@@ -9,6 +9,7 @@ import com.gempukku.lotro.collection.CollectionsManager;
import com.gempukku.lotro.db.LeagueDAO; import com.gempukku.lotro.db.LeagueDAO;
import com.gempukku.lotro.db.PlayerDAO; import com.gempukku.lotro.db.PlayerDAO;
import com.gempukku.lotro.db.vo.CollectionType; import com.gempukku.lotro.db.vo.CollectionType;
import com.gempukku.lotro.draft2.SoloDraftDefinitions;
import com.gempukku.lotro.game.CardCollection; import com.gempukku.lotro.game.CardCollection;
import com.gempukku.lotro.game.Player; import com.gempukku.lotro.game.Player;
import com.gempukku.lotro.game.formats.LotroFormatLibrary; import com.gempukku.lotro.game.formats.LotroFormatLibrary;
@@ -38,6 +39,7 @@ import java.util.List;
import java.util.Map; import java.util.Map;
public class AdminRequestHandler extends LotroServerRequestHandler implements UriRequestHandler { public class AdminRequestHandler extends LotroServerRequestHandler implements UriRequestHandler {
private SoloDraftDefinitions _soloDraftDefinitions;
private LeagueService _leagueService; private LeagueService _leagueService;
private TournamentService _tournamentService; private TournamentService _tournamentService;
private CacheManager _cacheManager; private CacheManager _cacheManager;
@@ -52,6 +54,7 @@ public class AdminRequestHandler extends LotroServerRequestHandler implements Ur
public AdminRequestHandler(Map<Type, Object> context) { public AdminRequestHandler(Map<Type, Object> context) {
super(context); super(context);
_cardSets = extractObject(context, CardSets.class); _cardSets = extractObject(context, CardSets.class);
_soloDraftDefinitions = extractObject(context, SoloDraftDefinitions.class);
_leagueService = extractObject(context, LeagueService.class); _leagueService = extractObject(context, LeagueService.class);
_tournamentService = extractObject(context, TournamentService.class); _tournamentService = extractObject(context, TournamentService.class);
_cacheManager = extractObject(context, CacheManager.class); _cacheManager = extractObject(context, CacheManager.class);
@@ -290,7 +293,7 @@ public class AdminRequestHandler extends LotroServerRequestHandler implements Ur
sb.append("," + formats.get(i) + "," + serieDurations.get(i) + "," + maxMatches.get(i)); sb.append("," + formats.get(i) + "," + serieDurations.get(i) + "," + maxMatches.get(i));
String parameters = sb.toString(); String parameters = sb.toString();
LeagueData leagueData = new NewConstructedLeagueData(_cardSets, parameters); LeagueData leagueData = new NewConstructedLeagueData(_cardSets, _soloDraftDefinitions, parameters);
List<LeagueSerieData> series = leagueData.getSeries(); List<LeagueSerieData> series = leagueData.getSeries();
int leagueStart = series.get(0).getStart(); int leagueStart = series.get(0).getStart();
int displayEnd = DateUtils.offsetDate(series.get(series.size() - 1).getEnd(), 2); int displayEnd = DateUtils.offsetDate(series.get(series.size() - 1).getEnd(), 2);
@@ -321,7 +324,7 @@ public class AdminRequestHandler extends LotroServerRequestHandler implements Ur
sb.append("," + formats.get(i) + "," + serieDurations.get(i) + "," + maxMatches.get(i)); sb.append("," + formats.get(i) + "," + serieDurations.get(i) + "," + maxMatches.get(i));
String parameters = sb.toString(); String parameters = sb.toString();
LeagueData leagueData = new NewConstructedLeagueData(_cardSets, parameters); LeagueData leagueData = new NewConstructedLeagueData(_cardSets, _soloDraftDefinitions, parameters);
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
@@ -371,7 +374,7 @@ public class AdminRequestHandler extends LotroServerRequestHandler implements Ur
String code = String.valueOf(System.currentTimeMillis()); String code = String.valueOf(System.currentTimeMillis());
String parameters = format + "," + start + "," + serieDuration + "," + maxMatches + "," + code + "," + name; String parameters = format + "," + start + "," + serieDuration + "," + maxMatches + "," + code + "," + name;
LeagueData leagueData = new NewSealedLeagueData(_cardSets, parameters); LeagueData leagueData = new NewSealedLeagueData(_cardSets, _soloDraftDefinitions, parameters);
List<LeagueSerieData> series = leagueData.getSeries(); List<LeagueSerieData> series = leagueData.getSeries();
int leagueStart = series.get(0).getStart(); int leagueStart = series.get(0).getStart();
int displayEnd = DateUtils.offsetDate(series.get(series.size() - 1).getEnd(), 2); int displayEnd = DateUtils.offsetDate(series.get(series.size() - 1).getEnd(), 2);
@@ -397,7 +400,7 @@ public class AdminRequestHandler extends LotroServerRequestHandler implements Ur
String code = String.valueOf(System.currentTimeMillis()); String code = String.valueOf(System.currentTimeMillis());
String parameters = format + "," + start + "," + serieDuration + "," + maxMatches + "," + code + "," + name; String parameters = format + "," + start + "," + serieDuration + "," + maxMatches + "," + code + "," + name;
LeagueData leagueData = new NewSealedLeagueData(_cardSets, parameters); LeagueData leagueData = new NewSealedLeagueData(_cardSets, _soloDraftDefinitions, parameters);
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();

View File

@@ -7,6 +7,7 @@ import com.gempukku.lotro.cards.CardSets;
import com.gempukku.lotro.competitive.PlayerStanding; import com.gempukku.lotro.competitive.PlayerStanding;
import com.gempukku.lotro.db.vo.League; import com.gempukku.lotro.db.vo.League;
import com.gempukku.lotro.db.vo.LeagueMatchResult; import com.gempukku.lotro.db.vo.LeagueMatchResult;
import com.gempukku.lotro.draft2.SoloDraftDefinitions;
import com.gempukku.lotro.game.Player; import com.gempukku.lotro.game.Player;
import com.gempukku.lotro.game.formats.LotroFormatLibrary; import com.gempukku.lotro.game.formats.LotroFormatLibrary;
import com.gempukku.lotro.league.LeagueData; import com.gempukku.lotro.league.LeagueData;
@@ -30,6 +31,7 @@ import java.util.List;
import java.util.Map; import java.util.Map;
public class LeagueRequestHandler extends LotroServerRequestHandler implements UriRequestHandler { public class LeagueRequestHandler extends LotroServerRequestHandler implements UriRequestHandler {
private final SoloDraftDefinitions _soloDraftDefinitions;
private LeagueService _leagueService; private LeagueService _leagueService;
private LotroFormatLibrary _formatLibrary; private LotroFormatLibrary _formatLibrary;
private CardSets _cardSets; private CardSets _cardSets;
@@ -38,6 +40,7 @@ public class LeagueRequestHandler extends LotroServerRequestHandler implements U
super(context); super(context);
_cardSets = extractObject(context, CardSets.class); _cardSets = extractObject(context, CardSets.class);
_soloDraftDefinitions = extractObject(context, SoloDraftDefinitions.class);
_leagueService = extractObject(context, LeagueService.class); _leagueService = extractObject(context, LeagueService.class);
_formatLibrary = extractObject(context, LotroFormatLibrary.class); _formatLibrary = extractObject(context, LotroFormatLibrary.class);
} }
@@ -87,7 +90,7 @@ public class LeagueRequestHandler extends LotroServerRequestHandler implements U
if (league == null) if (league == null)
throw new HttpProcessingException(404); throw new HttpProcessingException(404);
final LeagueData leagueData = league.getLeagueData(_cardSets); final LeagueData leagueData = league.getLeagueData(_cardSets, _soloDraftDefinitions);
final List<LeagueSerieData> series = leagueData.getSeries(); final List<LeagueSerieData> series = leagueData.getSeries();
int end = series.get(series.size() - 1).getEnd(); int end = series.get(series.size() - 1).getEnd();
@@ -97,6 +100,7 @@ public class LeagueRequestHandler extends LotroServerRequestHandler implements U
leagueElem.setAttribute("member", String.valueOf(inLeague)); leagueElem.setAttribute("member", String.valueOf(inLeague));
leagueElem.setAttribute("joinable", String.valueOf(!inLeague && end >= DateUtils.getCurrentDate())); leagueElem.setAttribute("joinable", String.valueOf(!inLeague && end >= DateUtils.getCurrentDate()));
leagueElem.setAttribute("draftable", String.valueOf(inLeague && leagueData.isDraftLeague()));
leagueElem.setAttribute("type", league.getType()); leagueElem.setAttribute("type", league.getType());
leagueElem.setAttribute("name", league.getName()); leagueElem.setAttribute("name", league.getName());
leagueElem.setAttribute("cost", String.valueOf(league.getCost())); leagueElem.setAttribute("cost", String.valueOf(league.getCost()));
@@ -154,7 +158,7 @@ public class LeagueRequestHandler extends LotroServerRequestHandler implements U
Element leagues = doc.createElement("leagues"); Element leagues = doc.createElement("leagues");
for (League league : _leagueService.getActiveLeagues()) { for (League league : _leagueService.getActiveLeagues()) {
final LeagueData leagueData = league.getLeagueData(_cardSets); final LeagueData leagueData = league.getLeagueData(_cardSets, _soloDraftDefinitions);
final List<LeagueSerieData> series = leagueData.getSeries(); final List<LeagueSerieData> series = leagueData.getSeries();
int end = series.get(series.size() - 1).getEnd(); int end = series.get(series.size() - 1).getEnd();

View File

@@ -12,6 +12,7 @@ import com.gempukku.lotro.db.LeagueDAO;
import com.gempukku.lotro.db.LeagueMatchDAO; import com.gempukku.lotro.db.LeagueMatchDAO;
import com.gempukku.lotro.db.LeagueParticipationDAO; import com.gempukku.lotro.db.LeagueParticipationDAO;
import com.gempukku.lotro.db.PlayerDAO; import com.gempukku.lotro.db.PlayerDAO;
import com.gempukku.lotro.draft2.SoloDraftDefinitions;
import com.gempukku.lotro.game.AdventureLibrary; import com.gempukku.lotro.game.AdventureLibrary;
import com.gempukku.lotro.game.DefaultAdventureLibrary; import com.gempukku.lotro.game.DefaultAdventureLibrary;
import com.gempukku.lotro.game.GameHistoryService; import com.gempukku.lotro.game.GameHistoryService;
@@ -68,7 +69,8 @@ public class ServerBuilder {
extract(objectMap, LeagueMatchDAO.class), extract(objectMap, LeagueMatchDAO.class),
extract(objectMap, LeagueParticipationDAO.class), extract(objectMap, LeagueParticipationDAO.class),
extract(objectMap, CollectionsManager.class), extract(objectMap, CollectionsManager.class),
extract(objectMap, CardSets.class))); extract(objectMap, CardSets.class),
extract(objectMap, SoloDraftDefinitions.class)));
objectMap.put(AdminService.class, objectMap.put(AdminService.class,
new AdminService( new AdminService(

View File

@@ -1,6 +1,7 @@
package com.gempukku.lotro.db.vo; package com.gempukku.lotro.db.vo;
import com.gempukku.lotro.cards.CardSets; import com.gempukku.lotro.cards.CardSets;
import com.gempukku.lotro.draft2.SoloDraftDefinitions;
import com.gempukku.lotro.league.LeagueData; import com.gempukku.lotro.league.LeagueData;
import java.lang.reflect.Constructor; import java.lang.reflect.Constructor;
@@ -35,12 +36,12 @@ public class League {
return _type; return _type;
} }
public synchronized LeagueData getLeagueData(CardSets cardSets) { public synchronized LeagueData getLeagueData(CardSets cardSets, SoloDraftDefinitions soloDraftDefinitions) {
if (_leagueData == null) { if (_leagueData == null) {
try { try {
Class<?> aClass = Class.forName(_clazz); Class<?> aClass = Class.forName(_clazz);
Constructor<?> constructor = aClass.getConstructor(CardSets.class, String.class); Constructor<?> constructor = aClass.getConstructor(CardSets.class, SoloDraftDefinitions.class, String.class);
_leagueData = (LeagueData) constructor.newInstance(cardSets, _parameters); _leagueData = (LeagueData) constructor.newInstance(cardSets, soloDraftDefinitions, _parameters);
} catch (Exception exp) { } catch (Exception exp) {
throw new RuntimeException("Unable to create LeagueData", exp); throw new RuntimeException("Unable to create LeagueData", exp);
} }

View File

@@ -0,0 +1,13 @@
package com.gempukku.lotro.draft2;
import com.gempukku.lotro.game.CardCollection;
public interface SoloDraft {
CardCollection initializeNewCollection(long seed);
CardCollection getAvailableChoices(long seed, int stage);
boolean hasNextStage(long seed, int stage);
String getFormat();
}

View File

@@ -0,0 +1,8 @@
package com.gempukku.lotro.draft2;
public class SoloDraftDefinitions {
public SoloDraft getSoloDraft(String draftType) {
// TODO
return null;
}
}

View File

@@ -5,6 +5,7 @@ import com.gempukku.lotro.cards.CardSets;
import com.gempukku.lotro.collection.CollectionsManager; import com.gempukku.lotro.collection.CollectionsManager;
import com.gempukku.lotro.competitive.PlayerStanding; import com.gempukku.lotro.competitive.PlayerStanding;
import com.gempukku.lotro.db.vo.CollectionType; import com.gempukku.lotro.db.vo.CollectionType;
import com.gempukku.lotro.draft2.SoloDraftDefinitions;
import com.gempukku.lotro.game.CardCollection; import com.gempukku.lotro.game.CardCollection;
import com.gempukku.lotro.game.Player; import com.gempukku.lotro.game.Player;
@@ -22,7 +23,7 @@ public class ConstructedLeagueData implements LeagueData {
// serie1 format, serie1 prize pool, // serie1 format, serie1 prize pool,
// serie2 format, serie2 prize pool, // serie2 format, serie2 prize pool,
// serie3 format, serie3 prize pool, // serie3 format, serie3 prize pool,
public ConstructedLeagueData(CardSets cardSets, String parameters) { public ConstructedLeagueData(CardSets cardSets, SoloDraftDefinitions soloDraftDefinitions, String parameters) {
_leaguePrizes = new FixedLeaguePrizes(cardSets); _leaguePrizes = new FixedLeaguePrizes(cardSets);
String[] params = parameters.split(","); String[] params = parameters.split(",");
@@ -41,6 +42,11 @@ public class ConstructedLeagueData implements LeagueData {
} }
} }
@Override
public boolean isDraftLeague() {
return false;
}
@Override @Override
public List<LeagueSerieData> getSeries() { public List<LeagueSerieData> getSeries() {
return _series; return _series;

View File

@@ -0,0 +1,117 @@
package com.gempukku.lotro.league;
import com.gempukku.lotro.DateUtils;
import com.gempukku.lotro.cards.CardSets;
import com.gempukku.lotro.collection.CollectionsManager;
import com.gempukku.lotro.competitive.PlayerStanding;
import com.gempukku.lotro.db.vo.CollectionType;
import com.gempukku.lotro.draft2.SoloDraft;
import com.gempukku.lotro.draft2.SoloDraftDefinitions;
import com.gempukku.lotro.game.CardCollection;
import com.gempukku.lotro.game.DefaultCardCollection;
import com.gempukku.lotro.game.MutableCardCollection;
import com.gempukku.lotro.game.Player;
import java.util.*;
public class DraftLeagueData implements LeagueData {
private SoloDraft _draft;
private CollectionType _collectionType;
private CollectionType _prizeCollectionType = CollectionType.MY_CARDS;
private LeaguePrizes _leaguePrizes;
private LeagueSerieData _serie;
public DraftLeagueData(CardSets cardSets, SoloDraftDefinitions soloDraftDefinitions, String parameters) {
_leaguePrizes = new FixedLeaguePrizes(cardSets);
String[] params = parameters.split(",");
_draft = soloDraftDefinitions.getSoloDraft(params[0]);
int start = Integer.parseInt(params[1]);
int serieDuration = Integer.parseInt(params[2]);
int maxMatches = Integer.parseInt(params[3]);
_collectionType = new CollectionType(params[4], params[5]);
_serie = new DefaultLeagueSerieData(_leaguePrizes, true, "Serie 1",
DateUtils.offsetDate(start, 0), DateUtils.offsetDate(start, serieDuration - 1), maxMatches,
_draft.getFormat(), _collectionType);
}
@Override
public boolean isDraftLeague() {
return true;
}
@Override
public List<LeagueSerieData> getSeries() {
return Collections.singletonList(_serie);
}
private long getSeed(Player player) {
return _collectionType.getCode().hashCode() + player.getId();
}
@Override
public CardCollection joinLeague(CollectionsManager collectionsManager, Player player, int currentTime) {
MutableCardCollection startingCollection = new DefaultCardCollection();
if (currentTime >= _serie.getStart()) {
CardCollection leagueProduct = _draft.initializeNewCollection(getSeed(player));
for (Map.Entry<String, CardCollection.Item> serieCollectionItem : leagueProduct.getAll().entrySet())
startingCollection.addItem(serieCollectionItem.getKey(), serieCollectionItem.getValue().getCount());
}
startingCollection.setExtraInformation(createExtraInformation());
collectionsManager.addPlayerCollection(false, "Sealed league product", player, _collectionType, startingCollection);
return startingCollection;
}
private Map<String, Object> createExtraInformation() {
Map<String, Object> extraInformation = new HashMap<String, Object>();
extraInformation.put("finished", false);
extraInformation.put("stage", 0);
return extraInformation;
}
@Override
public int process(CollectionsManager collectionsManager, List<PlayerStanding> leagueStandings, int oldStatus, int currentTime) {
int status = oldStatus;
if (status == 0) {
if (currentTime >= _serie.getStart()) {
Map<Player, CardCollection> map = collectionsManager.getPlayersCollection(_collectionType.getCode());
for (Map.Entry<Player, CardCollection> playerCardCollectionEntry : map.entrySet()) {
MutableCardCollection startingCollection = new DefaultCardCollection();
Player player = playerCardCollectionEntry.getKey();
CardCollection leagueProduct = _draft.initializeNewCollection(getSeed(player));
for (Map.Entry<String, CardCollection.Item> serieCollectionItem : leagueProduct.getAll().entrySet())
startingCollection.addItem(serieCollectionItem.getKey(), serieCollectionItem.getValue().getCount());
startingCollection.setExtraInformation(createExtraInformation());
collectionsManager.addItemsToPlayerCollection(false, "New sealed league product", player, _collectionType, leagueProduct.getAll().values());
}
status = 1;
}
}
int maxGamesTotal = _serie.getMaxMatches();
if (status == 1) {
if (currentTime > DateUtils.offsetDate(_serie.getEnd(), 1)) {
for (PlayerStanding leagueStanding : leagueStandings) {
CardCollection leaguePrize = _leaguePrizes.getPrizeForLeague(leagueStanding.getStanding(), leagueStandings.size(), leagueStanding.getGamesPlayed(), maxGamesTotal, _collectionType);
if (leaguePrize != null)
collectionsManager.addItemsToPlayerCollection(true, "End of league prizes", leagueStanding.getPlayerName(), _prizeCollectionType, leaguePrize.getAll().values());
final CardCollection leagueTrophies = _leaguePrizes.getTrophiesForLeague(leagueStanding.getStanding(), leagueStandings.size(), leagueStanding.getGamesPlayed(), maxGamesTotal, _collectionType);
if (leagueTrophies != null)
collectionsManager.addItemsToPlayerCollection(true, "End of league trophies", leagueStanding.getPlayerName(), CollectionType.TROPHY, leagueTrophies.getAll().values());
}
status++;
}
}
return status;
}
}

View File

@@ -8,6 +8,8 @@ import com.gempukku.lotro.game.Player;
import java.util.List; import java.util.List;
public interface LeagueData { public interface LeagueData {
public boolean isDraftLeague();
public List<LeagueSerieData> getSeries(); public List<LeagueSerieData> getSeries();
public CardCollection joinLeague(CollectionsManager collecionsManager, Player player, int currentTime); public CardCollection joinLeague(CollectionsManager collecionsManager, Player player, int currentTime);

View File

@@ -11,6 +11,7 @@ import com.gempukku.lotro.db.LeagueParticipationDAO;
import com.gempukku.lotro.db.vo.CollectionType; import com.gempukku.lotro.db.vo.CollectionType;
import com.gempukku.lotro.db.vo.League; import com.gempukku.lotro.db.vo.League;
import com.gempukku.lotro.db.vo.LeagueMatchResult; import com.gempukku.lotro.db.vo.LeagueMatchResult;
import com.gempukku.lotro.draft2.SoloDraftDefinitions;
import com.gempukku.lotro.game.CardCollection; import com.gempukku.lotro.game.CardCollection;
import com.gempukku.lotro.game.Player; import com.gempukku.lotro.game.Player;
@@ -28,6 +29,7 @@ public class LeagueService {
private CachedLeagueParticipationDAO _leagueParticipationDAO; private CachedLeagueParticipationDAO _leagueParticipationDAO;
private CollectionsManager _collectionsManager; private CollectionsManager _collectionsManager;
private SoloDraftDefinitions _soloDraftDefinitions;
private Map<String, List<PlayerStanding>> _leagueStandings = new ConcurrentHashMap<String, List<PlayerStanding>>(); private Map<String, List<PlayerStanding>> _leagueStandings = new ConcurrentHashMap<String, List<PlayerStanding>>();
private Map<String, List<PlayerStanding>> _leagueSerieStandings = new ConcurrentHashMap<String, List<PlayerStanding>>(); private Map<String, List<PlayerStanding>> _leagueSerieStandings = new ConcurrentHashMap<String, List<PlayerStanding>>();
@@ -36,12 +38,14 @@ public class LeagueService {
private List<League> _activeLeagues; private List<League> _activeLeagues;
public LeagueService(LeagueDAO leagueDao, LeagueMatchDAO leagueMatchDao, public LeagueService(LeagueDAO leagueDao, LeagueMatchDAO leagueMatchDao,
LeagueParticipationDAO leagueParticipationDAO, CollectionsManager collectionsManager, CardSets cardSets) { LeagueParticipationDAO leagueParticipationDAO, CollectionsManager collectionsManager,
CardSets cardSets, SoloDraftDefinitions soloDraftDefinitions) {
_leagueDao = leagueDao; _leagueDao = leagueDao;
_cardSets = cardSets; _cardSets = cardSets;
_leagueMatchDao = new CachedLeagueMatchDAO(leagueMatchDao); _leagueMatchDao = new CachedLeagueMatchDAO(leagueMatchDao);
_leagueParticipationDAO = new CachedLeagueParticipationDAO(leagueParticipationDAO); _leagueParticipationDAO = new CachedLeagueParticipationDAO(leagueParticipationDAO);
_collectionsManager = collectionsManager; _collectionsManager = collectionsManager;
_soloDraftDefinitions = soloDraftDefinitions;
} }
public synchronized void clearCache() { public synchronized void clearCache() {
@@ -83,7 +87,7 @@ public class LeagueService {
private void processLoadedLeagues(int currentDate) { private void processLoadedLeagues(int currentDate) {
for (League activeLeague : _activeLeagues) { for (League activeLeague : _activeLeagues) {
int oldStatus = activeLeague.getStatus(); int oldStatus = activeLeague.getStatus();
int newStatus = activeLeague.getLeagueData(_cardSets).process(_collectionsManager, getLeagueStandings(activeLeague), oldStatus, currentDate); int newStatus = activeLeague.getLeagueData(_cardSets, _soloDraftDefinitions).process(_collectionsManager, getLeagueStandings(activeLeague), oldStatus, currentDate);
if (newStatus != oldStatus) if (newStatus != oldStatus)
_leagueDao.setStatus(activeLeague, newStatus); _leagueDao.setStatus(activeLeague, newStatus);
} }
@@ -99,7 +103,7 @@ public class LeagueService {
int cost = league.getCost(); int cost = league.getCost();
if (_collectionsManager.removeCurrencyFromPlayerCollection("Joining "+league.getName()+" league", player, CollectionType.MY_CARDS, cost)) { if (_collectionsManager.removeCurrencyFromPlayerCollection("Joining "+league.getName()+" league", player, CollectionType.MY_CARDS, cost)) {
_leagueParticipationDAO.userJoinsLeague(league.getType(), player, remoteAddr); _leagueParticipationDAO.userJoinsLeague(league.getType(), player, remoteAddr);
league.getLeagueData(_cardSets).joinLeague(_collectionsManager, player, DateUtils.getCurrentDate()); league.getLeagueData(_cardSets, _soloDraftDefinitions).joinLeague(_collectionsManager, player, DateUtils.getCurrentDate());
_leagueStandings.remove(LeagueMapKeys.getLeagueMapKey(league)); _leagueStandings.remove(LeagueMapKeys.getLeagueMapKey(league));
@@ -119,7 +123,7 @@ public class LeagueService {
public synchronized CollectionType getCollectionTypeByCode(String collectionTypeCode) { public synchronized CollectionType getCollectionTypeByCode(String collectionTypeCode) {
for (League league : getActiveLeagues()) { for (League league : getActiveLeagues()) {
for (LeagueSerieData leagueSerieData : league.getLeagueData(_cardSets).getSeries()) { for (LeagueSerieData leagueSerieData : league.getLeagueData(_cardSets, _soloDraftDefinitions).getSeries()) {
CollectionType collectionType = leagueSerieData.getCollectionType(); CollectionType collectionType = leagueSerieData.getCollectionType();
if (collectionType != null && collectionType.getCode().equals(collectionTypeCode)) if (collectionType != null && collectionType.getCode().equals(collectionTypeCode))
return collectionType; return collectionType;
@@ -131,7 +135,7 @@ public class LeagueService {
public synchronized LeagueSerieData getCurrentLeagueSerie(League league) { public synchronized LeagueSerieData getCurrentLeagueSerie(League league) {
final int currentDate = DateUtils.getCurrentDate(); final int currentDate = DateUtils.getCurrentDate();
for (LeagueSerieData leagueSerieData : league.getLeagueData(_cardSets).getSeries()) { for (LeagueSerieData leagueSerieData : league.getLeagueData(_cardSets, _soloDraftDefinitions).getSeries()) {
if (currentDate >= leagueSerieData.getStart() && currentDate <= leagueSerieData.getEnd()) if (currentDate >= leagueSerieData.getStart() && currentDate <= leagueSerieData.getEnd())
return leagueSerieData; return leagueSerieData;
} }

View File

@@ -5,6 +5,7 @@ import com.gempukku.lotro.cards.CardSets;
import com.gempukku.lotro.collection.CollectionsManager; import com.gempukku.lotro.collection.CollectionsManager;
import com.gempukku.lotro.competitive.PlayerStanding; import com.gempukku.lotro.competitive.PlayerStanding;
import com.gempukku.lotro.db.vo.CollectionType; import com.gempukku.lotro.db.vo.CollectionType;
import com.gempukku.lotro.draft2.SoloDraftDefinitions;
import com.gempukku.lotro.game.CardCollection; import com.gempukku.lotro.game.CardCollection;
import com.gempukku.lotro.game.Player; import com.gempukku.lotro.game.Player;
@@ -19,7 +20,7 @@ public class NewConstructedLeagueData implements LeagueData {
private CollectionType _prizeCollectionType = CollectionType.MY_CARDS; private CollectionType _prizeCollectionType = CollectionType.MY_CARDS;
private CollectionType _collectionType; private CollectionType _collectionType;
public NewConstructedLeagueData(CardSets cardSets, String parameters) { public NewConstructedLeagueData(CardSets cardSets, SoloDraftDefinitions soloDraftDefinitions, String parameters) {
_leaguePrizes = new FixedLeaguePrizes(cardSets); _leaguePrizes = new FixedLeaguePrizes(cardSets);
String[] params = parameters.split(","); String[] params = parameters.split(",");
@@ -44,6 +45,11 @@ public class NewConstructedLeagueData implements LeagueData {
} }
} }
@Override
public boolean isDraftLeague() {
return false;
}
@Override @Override
public List<LeagueSerieData> getSeries() { public List<LeagueSerieData> getSeries() {
return Collections.unmodifiableList(_series); return Collections.unmodifiableList(_series);

View File

@@ -5,6 +5,7 @@ import com.gempukku.lotro.cards.CardSets;
import com.gempukku.lotro.collection.CollectionsManager; import com.gempukku.lotro.collection.CollectionsManager;
import com.gempukku.lotro.competitive.PlayerStanding; import com.gempukku.lotro.competitive.PlayerStanding;
import com.gempukku.lotro.db.vo.CollectionType; import com.gempukku.lotro.db.vo.CollectionType;
import com.gempukku.lotro.draft2.SoloDraftDefinitions;
import com.gempukku.lotro.game.CardCollection; import com.gempukku.lotro.game.CardCollection;
import com.gempukku.lotro.game.DefaultCardCollection; import com.gempukku.lotro.game.DefaultCardCollection;
import com.gempukku.lotro.game.MutableCardCollection; import com.gempukku.lotro.game.MutableCardCollection;
@@ -23,7 +24,7 @@ public class NewSealedLeagueData implements LeagueData {
private LeaguePrizes _leaguePrizes; private LeaguePrizes _leaguePrizes;
private SealedLeagueProduct _leagueProduct; private SealedLeagueProduct _leagueProduct;
public NewSealedLeagueData(CardSets cardSets, String parameters) { public NewSealedLeagueData(CardSets cardSets, SoloDraftDefinitions soloDraftDefinitions, String parameters) {
_leaguePrizes = new FixedLeaguePrizes(cardSets); _leaguePrizes = new FixedLeaguePrizes(cardSets);
String[] params = parameters.split(","); String[] params = parameters.split(",");
@@ -45,6 +46,11 @@ public class NewSealedLeagueData implements LeagueData {
} }
} }
@Override
public boolean isDraftLeague() {
return false;
}
@Override @Override
public List<LeagueSerieData> getSeries() { public List<LeagueSerieData> getSeries() {
return Collections.unmodifiableList(_series); return Collections.unmodifiableList(_series);

View File

@@ -5,6 +5,7 @@ import com.gempukku.lotro.cards.CardSets;
import com.gempukku.lotro.collection.CollectionsManager; import com.gempukku.lotro.collection.CollectionsManager;
import com.gempukku.lotro.competitive.PlayerStanding; import com.gempukku.lotro.competitive.PlayerStanding;
import com.gempukku.lotro.db.vo.CollectionType; import com.gempukku.lotro.db.vo.CollectionType;
import com.gempukku.lotro.draft2.SoloDraftDefinitions;
import com.gempukku.lotro.game.CardCollection; import com.gempukku.lotro.game.CardCollection;
import com.gempukku.lotro.game.DefaultCardCollection; import com.gempukku.lotro.game.DefaultCardCollection;
import com.gempukku.lotro.game.MutableCardCollection; import com.gempukku.lotro.game.MutableCardCollection;
@@ -23,7 +24,7 @@ public class SealedLeagueData implements LeagueData {
private LeaguePrizes _leaguePrizes; private LeaguePrizes _leaguePrizes;
private SealedLeagueProduct _leagueProduct; private SealedLeagueProduct _leagueProduct;
public SealedLeagueData(CardSets cardSets, String parameters) { public SealedLeagueData(CardSets cardSets, SoloDraftDefinitions soloDraftDefinitions, String parameters) {
_leaguePrizes = new FixedLeaguePrizes(cardSets); _leaguePrizes = new FixedLeaguePrizes(cardSets);
String[] params = parameters.split(","); String[] params = parameters.split(",");
@@ -45,6 +46,11 @@ public class SealedLeagueData implements LeagueData {
} }
} }
@Override
public boolean isDraftLeague() {
return false;
}
@Override @Override
public List<LeagueSerieData> getSeries() { public List<LeagueSerieData> getSeries() {
return Collections.unmodifiableList(_series); return Collections.unmodifiableList(_series);

View File

@@ -323,5 +323,13 @@
"set":[30, 31], "set":[30, 31],
"restrictedName":["Gandalf", "Bilbo"], "restrictedName":["Gandalf", "Bilbo"],
"hall":true "hall":true
},
{
"name":"Limited",
"code":"limited_hobbit",
"sites":"HOBBIT",
"cancelRingBearerSkirmish":true,
"set":[30, 31],
"hall":false
} }
] ]

View File

@@ -1,6 +1,7 @@
package com.gempukku.lotro.league; package com.gempukku.lotro.league;
import com.gempukku.lotro.cards.CardSets; import com.gempukku.lotro.cards.CardSets;
import com.gempukku.lotro.draft2.SoloDraftDefinitions;
import org.junit.Test; import org.junit.Test;
import java.util.List; import java.util.List;
@@ -11,7 +12,7 @@ import static org.junit.Assert.assertTrue;
public class ConstructedLeagueDataTest { public class ConstructedLeagueDataTest {
@Test @Test
public void testParameters() { public void testParameters() {
ConstructedLeagueData leagueData = new ConstructedLeagueData(new CardSets(), "20120312,fotr_block,0.7,default,All cards,7,10,3,fotr1_block,fotr_block,fotr2_block,fotr_block,fotr_block,fotr_block"); ConstructedLeagueData leagueData = new ConstructedLeagueData(new CardSets(), new SoloDraftDefinitions(), "20120312,fotr_block,0.7,default,All cards,7,10,3,fotr1_block,fotr_block,fotr2_block,fotr_block,fotr_block,fotr_block");
final List<LeagueSerieData> series = leagueData.getSeries(); final List<LeagueSerieData> series = leagueData.getSeries();
assertTrue(series.size() == 3); assertTrue(series.size() == 3);
assertTrue(series.get(0).getStart() == 20120312); assertTrue(series.get(0).getStart() == 20120312);

View File

@@ -8,6 +8,7 @@ import com.gempukku.lotro.db.LeagueMatchDAO;
import com.gempukku.lotro.db.LeagueParticipationDAO; import com.gempukku.lotro.db.LeagueParticipationDAO;
import com.gempukku.lotro.db.vo.League; import com.gempukku.lotro.db.vo.League;
import com.gempukku.lotro.db.vo.LeagueMatchResult; import com.gempukku.lotro.db.vo.LeagueMatchResult;
import com.gempukku.lotro.draft2.SoloDraftDefinitions;
import org.junit.Test; import org.junit.Test;
import org.mockito.Mockito; import org.mockito.Mockito;
@@ -34,7 +35,7 @@ public class LeagueServiceTest {
League league = new League(5000, "League name", "leagueType", NewConstructedLeagueData.class.getName(), sb.toString(), 0); League league = new League(5000, "League name", "leagueType", NewConstructedLeagueData.class.getName(), sb.toString(), 0);
leagues.add(league); leagues.add(league);
LeagueSerieData leagueSerie = league.getLeagueData(_cardSets).getSeries().get(0); LeagueSerieData leagueSerie = league.getLeagueData(_cardSets, new SoloDraftDefinitions()).getSeries().get(0);
Mockito.when(leagueDao.loadActiveLeagues(Mockito.anyInt())).thenReturn(leagues); Mockito.when(leagueDao.loadActiveLeagues(Mockito.anyInt())).thenReturn(leagues);
@@ -47,7 +48,7 @@ public class LeagueServiceTest {
LeagueParticipationDAO leagueParticipationDAO = Mockito.mock(LeagueParticipationDAO.class); LeagueParticipationDAO leagueParticipationDAO = Mockito.mock(LeagueParticipationDAO.class);
CollectionsManager collectionsManager = Mockito.mock(CollectionsManager.class); CollectionsManager collectionsManager = Mockito.mock(CollectionsManager.class);
LeagueService leagueService = new LeagueService(leagueDao, leagueMatchDAO, leagueParticipationDAO, collectionsManager, _cardSets); LeagueService leagueService = new LeagueService(leagueDao, leagueMatchDAO, leagueParticipationDAO, collectionsManager, _cardSets, new SoloDraftDefinitions());
assertTrue(leagueService.canPlayRankedGame(league, leagueSerie, "player1")); assertTrue(leagueService.canPlayRankedGame(league, leagueSerie, "player1"));
assertTrue(leagueService.canPlayRankedGameAgainst(league, leagueSerie, "player1", "player2")); assertTrue(leagueService.canPlayRankedGameAgainst(league, leagueSerie, "player1", "player2"));
@@ -87,7 +88,7 @@ public class LeagueServiceTest {
League league = new League(5000, "League name", "leagueType", NewConstructedLeagueData.class.getName(), sb.toString(), 0); League league = new League(5000, "League name", "leagueType", NewConstructedLeagueData.class.getName(), sb.toString(), 0);
leagues.add(league); leagues.add(league);
LeagueSerieData leagueSerie = league.getLeagueData(_cardSets).getSeries().get(0); LeagueSerieData leagueSerie = league.getLeagueData(_cardSets, new SoloDraftDefinitions()).getSeries().get(0);
Mockito.when(leagueDao.loadActiveLeagues(Mockito.anyInt())).thenReturn(leagues); Mockito.when(leagueDao.loadActiveLeagues(Mockito.anyInt())).thenReturn(leagues);
@@ -101,7 +102,7 @@ public class LeagueServiceTest {
LeagueParticipationDAO leagueParticipationDAO = Mockito.mock(LeagueParticipationDAO.class); LeagueParticipationDAO leagueParticipationDAO = Mockito.mock(LeagueParticipationDAO.class);
CollectionsManager collectionsManager = Mockito.mock(CollectionsManager.class); CollectionsManager collectionsManager = Mockito.mock(CollectionsManager.class);
LeagueService leagueService = new LeagueService(leagueDao, leagueMatchDAO, leagueParticipationDAO, collectionsManager, _cardSets); LeagueService leagueService = new LeagueService(leagueDao, leagueMatchDAO, leagueParticipationDAO, collectionsManager, _cardSets, new SoloDraftDefinitions());
assertTrue(leagueService.canPlayRankedGame(league, leagueSerie, "player1")); assertTrue(leagueService.canPlayRankedGame(league, leagueSerie, "player1"));
assertFalse(leagueService.canPlayRankedGameAgainst(league, leagueSerie, "player1", "player2")); assertFalse(leagueService.canPlayRankedGameAgainst(league, leagueSerie, "player1", "player2"));
@@ -133,7 +134,7 @@ public class LeagueServiceTest {
League league = new League(5000, "League name", "leagueType", NewConstructedLeagueData.class.getName(), sb.toString(), 0); League league = new League(5000, "League name", "leagueType", NewConstructedLeagueData.class.getName(), sb.toString(), 0);
leagues.add(league); leagues.add(league);
LeagueSerieData leagueSerie = league.getLeagueData(_cardSets).getSeries().get(0); LeagueSerieData leagueSerie = league.getLeagueData(_cardSets, new SoloDraftDefinitions()).getSeries().get(0);
Mockito.when(leagueDao.loadActiveLeagues(Mockito.anyInt())).thenReturn(leagues); Mockito.when(leagueDao.loadActiveLeagues(Mockito.anyInt())).thenReturn(leagues);
@@ -151,7 +152,7 @@ public class LeagueServiceTest {
Mockito.when(leagueParticipationDAO.getUsersParticipating(league.getType())).thenReturn(players); Mockito.when(leagueParticipationDAO.getUsersParticipating(league.getType())).thenReturn(players);
CollectionsManager collectionsManager = Mockito.mock(CollectionsManager.class); CollectionsManager collectionsManager = Mockito.mock(CollectionsManager.class);
LeagueService leagueService = new LeagueService(leagueDao, leagueMatchDAO, leagueParticipationDAO, collectionsManager, _cardSets); LeagueService leagueService = new LeagueService(leagueDao, leagueMatchDAO, leagueParticipationDAO, collectionsManager, _cardSets, new SoloDraftDefinitions());
leagueService.reportLeagueGameResult(league, leagueSerie, "player1", "player2"); leagueService.reportLeagueGameResult(league, leagueSerie, "player1", "player2");
leagueService.reportLeagueGameResult(league, leagueSerie, "player1", "player3"); leagueService.reportLeagueGameResult(league, leagueSerie, "player1", "player3");

View File

@@ -3,6 +3,7 @@ package com.gempukku.lotro.league;
import com.gempukku.lotro.cards.CardSets; import com.gempukku.lotro.cards.CardSets;
import com.gempukku.lotro.collection.CollectionsManager; import com.gempukku.lotro.collection.CollectionsManager;
import com.gempukku.lotro.db.vo.CollectionType; import com.gempukku.lotro.db.vo.CollectionType;
import com.gempukku.lotro.draft2.SoloDraftDefinitions;
import com.gempukku.lotro.game.CardCollection; import com.gempukku.lotro.game.CardCollection;
import com.gempukku.lotro.game.DefaultCardCollection; import com.gempukku.lotro.game.DefaultCardCollection;
import com.gempukku.lotro.game.Player; import com.gempukku.lotro.game.Player;
@@ -20,7 +21,7 @@ import static org.junit.Assert.assertEquals;
public class SealedLeagueDataTest { public class SealedLeagueDataTest {
@Test @Test
public void testJoinLeagueFirstWeek() { public void testJoinLeagueFirstWeek() {
SealedLeagueData data = new SealedLeagueData(new CardSets(), "fotr_block,20120101,test,Test Collection"); SealedLeagueData data = new SealedLeagueData(new CardSets(), new SoloDraftDefinitions(), "fotr_block,20120101,test,Test Collection");
CollectionType collectionType = new CollectionType("test", "Test Collection"); CollectionType collectionType = new CollectionType("test", "Test Collection");
for (int i = 20120101; i < 20120108; i++) { for (int i = 20120101; i < 20120108; i++) {
CollectionsManager collectionsManager = Mockito.mock(CollectionsManager.class); CollectionsManager collectionsManager = Mockito.mock(CollectionsManager.class);
@@ -55,7 +56,7 @@ public class SealedLeagueDataTest {
@Test @Test
public void testJoinLeagueSecondWeek() { public void testJoinLeagueSecondWeek() {
SealedLeagueData data = new SealedLeagueData(new CardSets(), "fotr_block,20120101,test,Test Collection"); SealedLeagueData data = new SealedLeagueData(new CardSets(), new SoloDraftDefinitions(), "fotr_block,20120101,test,Test Collection");
CollectionType collectionType = new CollectionType("test", "Test Collection"); CollectionType collectionType = new CollectionType("test", "Test Collection");
for (int i = 20120108; i < 20120115; i++) { for (int i = 20120108; i < 20120115; i++) {
CollectionsManager collectionsManager = Mockito.mock(CollectionsManager.class); CollectionsManager collectionsManager = Mockito.mock(CollectionsManager.class);
@@ -96,7 +97,7 @@ public class SealedLeagueDataTest {
@Test @Test
public void testSwitchToFirstWeek() { public void testSwitchToFirstWeek() {
SealedLeagueData data = new SealedLeagueData(new CardSets(), "fotr_block,20120101,test,Test Collection"); SealedLeagueData data = new SealedLeagueData(new CardSets(), new SoloDraftDefinitions(), "fotr_block,20120101,test,Test Collection");
for (int i = 20120101; i < 20120108; i++) { for (int i = 20120101; i < 20120108; i++) {
CollectionsManager collectionsManager = Mockito.mock(CollectionsManager.class); CollectionsManager collectionsManager = Mockito.mock(CollectionsManager.class);
Mockito.when(collectionsManager.getPlayersCollection("test")).thenReturn(new HashMap<Player, CardCollection>()); Mockito.when(collectionsManager.getPlayersCollection("test")).thenReturn(new HashMap<Player, CardCollection>());
@@ -109,7 +110,7 @@ public class SealedLeagueDataTest {
@Test @Test
public void testProcessMidFirstWeek() { public void testProcessMidFirstWeek() {
SealedLeagueData data = new SealedLeagueData(new CardSets(), "fotr_block,20120101,test,Test Collection"); SealedLeagueData data = new SealedLeagueData(new CardSets(), new SoloDraftDefinitions(), "fotr_block,20120101,test,Test Collection");
for (int i = 20120101; i < 20120108; i++) { for (int i = 20120101; i < 20120108; i++) {
CollectionsManager collectionsManager = Mockito.mock(CollectionsManager.class); CollectionsManager collectionsManager = Mockito.mock(CollectionsManager.class);
Mockito.when(collectionsManager.getPlayersCollection("test")).thenReturn(new HashMap<Player, CardCollection>()); Mockito.when(collectionsManager.getPlayersCollection("test")).thenReturn(new HashMap<Player, CardCollection>());
@@ -121,7 +122,7 @@ public class SealedLeagueDataTest {
@Test @Test
public void testSwitchToSecondWeek() { public void testSwitchToSecondWeek() {
SealedLeagueData data = new SealedLeagueData(new CardSets(), "fotr_block,20120101,test,Test Collection"); SealedLeagueData data = new SealedLeagueData(new CardSets(), new SoloDraftDefinitions(), "fotr_block,20120101,test,Test Collection");
CollectionType collectionType = new CollectionType("test", "Test Collection"); CollectionType collectionType = new CollectionType("test", "Test Collection");
for (int i = 20120108; i < 20120115; i++) { for (int i = 20120108; i < 20120115; i++) {
CollectionsManager collectionsManager = Mockito.mock(CollectionsManager.class); CollectionsManager collectionsManager = Mockito.mock(CollectionsManager.class);
@@ -157,7 +158,7 @@ public class SealedLeagueDataTest {
@Test @Test
public void testProcessMidSecondWeek() { public void testProcessMidSecondWeek() {
SealedLeagueData data = new SealedLeagueData(new CardSets(), "fotr_block,20120101,test,Test Collection"); SealedLeagueData data = new SealedLeagueData(new CardSets(), new SoloDraftDefinitions(), "fotr_block,20120101,test,Test Collection");
for (int i = 20120108; i < 20120115; i++) { for (int i = 20120108; i < 20120115; i++) {
CollectionsManager collectionsManager = Mockito.mock(CollectionsManager.class); CollectionsManager collectionsManager = Mockito.mock(CollectionsManager.class);
Mockito.when(collectionsManager.getPlayersCollection("test")).thenReturn(new HashMap<Player, CardCollection>()); Mockito.when(collectionsManager.getPlayersCollection("test")).thenReturn(new HashMap<Player, CardCollection>());