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 8319690db..31c99f673 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 @@ -6,6 +6,7 @@ import com.gempukku.lotro.builder.DaoBuilder; import com.gempukku.lotro.builder.PacksStorageBuilder; import com.gempukku.lotro.builder.ServerBuilder; import com.gempukku.lotro.cards.CardSets; +import com.gempukku.lotro.draft2.SoloDraftDefinitions; import com.gempukku.lotro.packs.PacksStorage; import com.gempukku.lotro.service.LoggedUserHolder; import com.gempukku.polling.LongPollingSystem; @@ -28,6 +29,7 @@ public class LotroServerPipelineFactory implements ChannelPipelineFactory { public LotroServerPipelineFactory() { Map objects = new HashMap(); final CardSets cardSets = new CardSets(); + SoloDraftDefinitions soloDraftDefinitions = new SoloDraftDefinitions(); LoggedUserHolder loggedUserHolder = new LoggedUserHolder(); loggedUserHolder.start(); @@ -38,6 +40,7 @@ public class LotroServerPipelineFactory implements ChannelPipelineFactory { objects.put(LongPollingSystem.class, longPollingSystem); objects.put(CardSets.class, cardSets); + objects.put(SoloDraftDefinitions.class, soloDraftDefinitions); objects.put(PacksStorage.class, PacksStorageBuilder.createPacksStorage(cardSets)); DaoBuilder.fillObjectMap(objects); ServerBuilder.fillObjectMap(objects); 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 index aeef5f828..9ec996c3f 100644 --- 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 @@ -9,6 +9,7 @@ import com.gempukku.lotro.collection.CollectionsManager; import com.gempukku.lotro.db.LeagueDAO; import com.gempukku.lotro.db.PlayerDAO; import com.gempukku.lotro.db.vo.CollectionType; +import com.gempukku.lotro.draft2.SoloDraftDefinitions; import com.gempukku.lotro.game.CardCollection; import com.gempukku.lotro.game.Player; import com.gempukku.lotro.game.formats.LotroFormatLibrary; @@ -38,6 +39,7 @@ import java.util.List; import java.util.Map; public class AdminRequestHandler extends LotroServerRequestHandler implements UriRequestHandler { + private SoloDraftDefinitions _soloDraftDefinitions; private LeagueService _leagueService; private TournamentService _tournamentService; private CacheManager _cacheManager; @@ -52,6 +54,7 @@ public class AdminRequestHandler extends LotroServerRequestHandler implements Ur public AdminRequestHandler(Map context) { super(context); _cardSets = extractObject(context, CardSets.class); + _soloDraftDefinitions = extractObject(context, SoloDraftDefinitions.class); _leagueService = extractObject(context, LeagueService.class); _tournamentService = extractObject(context, TournamentService.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)); String parameters = sb.toString(); - LeagueData leagueData = new NewConstructedLeagueData(_cardSets, parameters); + LeagueData leagueData = new NewConstructedLeagueData(_cardSets, _soloDraftDefinitions, parameters); List series = leagueData.getSeries(); int leagueStart = series.get(0).getStart(); 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)); String parameters = sb.toString(); - LeagueData leagueData = new NewConstructedLeagueData(_cardSets, parameters); + LeagueData leagueData = new NewConstructedLeagueData(_cardSets, _soloDraftDefinitions, parameters); DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); @@ -371,7 +374,7 @@ public class AdminRequestHandler extends LotroServerRequestHandler implements Ur String code = String.valueOf(System.currentTimeMillis()); String parameters = format + "," + start + "," + serieDuration + "," + maxMatches + "," + code + "," + name; - LeagueData leagueData = new NewSealedLeagueData(_cardSets, parameters); + LeagueData leagueData = new NewSealedLeagueData(_cardSets, _soloDraftDefinitions, parameters); List series = leagueData.getSeries(); int leagueStart = series.get(0).getStart(); 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 parameters = format + "," + start + "," + serieDuration + "," + maxMatches + "," + code + "," + name; - LeagueData leagueData = new NewSealedLeagueData(_cardSets, parameters); + LeagueData leagueData = new NewSealedLeagueData(_cardSets, _soloDraftDefinitions, parameters); DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); diff --git a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/LeagueRequestHandler.java b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/LeagueRequestHandler.java index 62b9110cb..f63b26e28 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/LeagueRequestHandler.java +++ b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/LeagueRequestHandler.java @@ -7,6 +7,7 @@ import com.gempukku.lotro.cards.CardSets; import com.gempukku.lotro.competitive.PlayerStanding; import com.gempukku.lotro.db.vo.League; import com.gempukku.lotro.db.vo.LeagueMatchResult; +import com.gempukku.lotro.draft2.SoloDraftDefinitions; import com.gempukku.lotro.game.Player; import com.gempukku.lotro.game.formats.LotroFormatLibrary; import com.gempukku.lotro.league.LeagueData; @@ -30,6 +31,7 @@ import java.util.List; import java.util.Map; public class LeagueRequestHandler extends LotroServerRequestHandler implements UriRequestHandler { + private final SoloDraftDefinitions _soloDraftDefinitions; private LeagueService _leagueService; private LotroFormatLibrary _formatLibrary; private CardSets _cardSets; @@ -38,6 +40,7 @@ public class LeagueRequestHandler extends LotroServerRequestHandler implements U super(context); _cardSets = extractObject(context, CardSets.class); + _soloDraftDefinitions = extractObject(context, SoloDraftDefinitions.class); _leagueService = extractObject(context, LeagueService.class); _formatLibrary = extractObject(context, LotroFormatLibrary.class); } @@ -87,7 +90,7 @@ public class LeagueRequestHandler extends LotroServerRequestHandler implements U if (league == null) throw new HttpProcessingException(404); - final LeagueData leagueData = league.getLeagueData(_cardSets); + final LeagueData leagueData = league.getLeagueData(_cardSets, _soloDraftDefinitions); final List series = leagueData.getSeries(); 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("joinable", String.valueOf(!inLeague && end >= DateUtils.getCurrentDate())); + leagueElem.setAttribute("draftable", String.valueOf(inLeague && leagueData.isDraftLeague())); leagueElem.setAttribute("type", league.getType()); leagueElem.setAttribute("name", league.getName()); leagueElem.setAttribute("cost", String.valueOf(league.getCost())); @@ -154,7 +158,7 @@ public class LeagueRequestHandler extends LotroServerRequestHandler implements U Element leagues = doc.createElement("leagues"); for (League league : _leagueService.getActiveLeagues()) { - final LeagueData leagueData = league.getLeagueData(_cardSets); + final LeagueData leagueData = league.getLeagueData(_cardSets, _soloDraftDefinitions); final List series = leagueData.getSeries(); int end = series.get(series.size() - 1).getEnd(); diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/builder/ServerBuilder.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/builder/ServerBuilder.java index ea908830c..04850eb18 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/builder/ServerBuilder.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/builder/ServerBuilder.java @@ -12,6 +12,7 @@ import com.gempukku.lotro.db.LeagueDAO; import com.gempukku.lotro.db.LeagueMatchDAO; import com.gempukku.lotro.db.LeagueParticipationDAO; import com.gempukku.lotro.db.PlayerDAO; +import com.gempukku.lotro.draft2.SoloDraftDefinitions; import com.gempukku.lotro.game.AdventureLibrary; import com.gempukku.lotro.game.DefaultAdventureLibrary; import com.gempukku.lotro.game.GameHistoryService; @@ -68,7 +69,8 @@ public class ServerBuilder { extract(objectMap, LeagueMatchDAO.class), extract(objectMap, LeagueParticipationDAO.class), extract(objectMap, CollectionsManager.class), - extract(objectMap, CardSets.class))); + extract(objectMap, CardSets.class), + extract(objectMap, SoloDraftDefinitions.class))); objectMap.put(AdminService.class, new AdminService( diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/db/vo/League.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/db/vo/League.java index 04f63f6c0..680e4b151 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/db/vo/League.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/db/vo/League.java @@ -1,6 +1,7 @@ package com.gempukku.lotro.db.vo; import com.gempukku.lotro.cards.CardSets; +import com.gempukku.lotro.draft2.SoloDraftDefinitions; import com.gempukku.lotro.league.LeagueData; import java.lang.reflect.Constructor; @@ -35,12 +36,12 @@ public class League { return _type; } - public synchronized LeagueData getLeagueData(CardSets cardSets) { + public synchronized LeagueData getLeagueData(CardSets cardSets, SoloDraftDefinitions soloDraftDefinitions) { if (_leagueData == null) { try { Class aClass = Class.forName(_clazz); - Constructor constructor = aClass.getConstructor(CardSets.class, String.class); - _leagueData = (LeagueData) constructor.newInstance(cardSets, _parameters); + Constructor constructor = aClass.getConstructor(CardSets.class, SoloDraftDefinitions.class, String.class); + _leagueData = (LeagueData) constructor.newInstance(cardSets, soloDraftDefinitions, _parameters); } catch (Exception exp) { throw new RuntimeException("Unable to create LeagueData", exp); } diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/draft2/SoloDraft.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/draft2/SoloDraft.java new file mode 100644 index 000000000..d12fd2396 --- /dev/null +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/draft2/SoloDraft.java @@ -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(); +} diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/draft2/SoloDraftDefinitions.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/draft2/SoloDraftDefinitions.java new file mode 100644 index 000000000..347611db4 --- /dev/null +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/draft2/SoloDraftDefinitions.java @@ -0,0 +1,8 @@ +package com.gempukku.lotro.draft2; + +public class SoloDraftDefinitions { + public SoloDraft getSoloDraft(String draftType) { + // TODO + return null; + } +} diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/ConstructedLeagueData.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/ConstructedLeagueData.java index ba7415316..7de24c08c 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/ConstructedLeagueData.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/ConstructedLeagueData.java @@ -5,6 +5,7 @@ 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.SoloDraftDefinitions; import com.gempukku.lotro.game.CardCollection; import com.gempukku.lotro.game.Player; @@ -22,7 +23,7 @@ public class ConstructedLeagueData implements LeagueData { // serie1 format, serie1 prize pool, // serie2 format, serie2 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); String[] params = parameters.split(","); @@ -41,6 +42,11 @@ public class ConstructedLeagueData implements LeagueData { } } + @Override + public boolean isDraftLeague() { + return false; + } + @Override public List getSeries() { return _series; diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/DraftLeagueData.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/DraftLeagueData.java new file mode 100644 index 000000000..8a4741efb --- /dev/null +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/DraftLeagueData.java @@ -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 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 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 createExtraInformation() { + Map extraInformation = new HashMap(); + extraInformation.put("finished", false); + extraInformation.put("stage", 0); + return extraInformation; + } + + @Override + public int process(CollectionsManager collectionsManager, List leagueStandings, int oldStatus, int currentTime) { + int status = oldStatus; + + if (status == 0) { + if (currentTime >= _serie.getStart()) { + Map map = collectionsManager.getPlayersCollection(_collectionType.getCode()); + for (Map.Entry playerCardCollectionEntry : map.entrySet()) { + MutableCardCollection startingCollection = new DefaultCardCollection(); + + Player player = playerCardCollectionEntry.getKey(); + CardCollection leagueProduct = _draft.initializeNewCollection(getSeed(player)); + + for (Map.Entry 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; + } +} diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/LeagueData.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/LeagueData.java index 2a27d6aa4..4e0104937 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/LeagueData.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/LeagueData.java @@ -8,6 +8,8 @@ import com.gempukku.lotro.game.Player; import java.util.List; public interface LeagueData { + public boolean isDraftLeague(); + public List getSeries(); public CardCollection joinLeague(CollectionsManager collecionsManager, Player player, int currentTime); diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/LeagueService.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/LeagueService.java index 9f5937eb9..8d6404ff2 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/LeagueService.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/LeagueService.java @@ -11,6 +11,7 @@ import com.gempukku.lotro.db.LeagueParticipationDAO; import com.gempukku.lotro.db.vo.CollectionType; import com.gempukku.lotro.db.vo.League; import com.gempukku.lotro.db.vo.LeagueMatchResult; +import com.gempukku.lotro.draft2.SoloDraftDefinitions; import com.gempukku.lotro.game.CardCollection; import com.gempukku.lotro.game.Player; @@ -28,6 +29,7 @@ public class LeagueService { private CachedLeagueParticipationDAO _leagueParticipationDAO; private CollectionsManager _collectionsManager; + private SoloDraftDefinitions _soloDraftDefinitions; private Map> _leagueStandings = new ConcurrentHashMap>(); private Map> _leagueSerieStandings = new ConcurrentHashMap>(); @@ -36,12 +38,14 @@ public class LeagueService { private List _activeLeagues; public LeagueService(LeagueDAO leagueDao, LeagueMatchDAO leagueMatchDao, - LeagueParticipationDAO leagueParticipationDAO, CollectionsManager collectionsManager, CardSets cardSets) { + LeagueParticipationDAO leagueParticipationDAO, CollectionsManager collectionsManager, + CardSets cardSets, SoloDraftDefinitions soloDraftDefinitions) { _leagueDao = leagueDao; _cardSets = cardSets; _leagueMatchDao = new CachedLeagueMatchDAO(leagueMatchDao); _leagueParticipationDAO = new CachedLeagueParticipationDAO(leagueParticipationDAO); _collectionsManager = collectionsManager; + _soloDraftDefinitions = soloDraftDefinitions; } public synchronized void clearCache() { @@ -83,7 +87,7 @@ public class LeagueService { private void processLoadedLeagues(int currentDate) { for (League activeLeague : _activeLeagues) { 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) _leagueDao.setStatus(activeLeague, newStatus); } @@ -99,7 +103,7 @@ public class LeagueService { int cost = league.getCost(); if (_collectionsManager.removeCurrencyFromPlayerCollection("Joining "+league.getName()+" league", player, CollectionType.MY_CARDS, cost)) { _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)); @@ -119,7 +123,7 @@ public class LeagueService { public synchronized CollectionType getCollectionTypeByCode(String collectionTypeCode) { for (League league : getActiveLeagues()) { - for (LeagueSerieData leagueSerieData : league.getLeagueData(_cardSets).getSeries()) { + for (LeagueSerieData leagueSerieData : league.getLeagueData(_cardSets, _soloDraftDefinitions).getSeries()) { CollectionType collectionType = leagueSerieData.getCollectionType(); if (collectionType != null && collectionType.getCode().equals(collectionTypeCode)) return collectionType; @@ -131,7 +135,7 @@ public class LeagueService { public synchronized LeagueSerieData getCurrentLeagueSerie(League league) { 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()) return leagueSerieData; } 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 index 441dec7b1..7655c8cc5 100644 --- 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 @@ -5,6 +5,7 @@ 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.SoloDraftDefinitions; import com.gempukku.lotro.game.CardCollection; import com.gempukku.lotro.game.Player; @@ -19,7 +20,7 @@ public class NewConstructedLeagueData implements LeagueData { private CollectionType _prizeCollectionType = CollectionType.MY_CARDS; private CollectionType _collectionType; - public NewConstructedLeagueData(CardSets cardSets, String parameters) { + public NewConstructedLeagueData(CardSets cardSets, SoloDraftDefinitions soloDraftDefinitions, String parameters) { _leaguePrizes = new FixedLeaguePrizes(cardSets); String[] params = parameters.split(","); @@ -44,6 +45,11 @@ public class NewConstructedLeagueData implements LeagueData { } } + @Override + public boolean isDraftLeague() { + return false; + } + @Override public List getSeries() { return Collections.unmodifiableList(_series); diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/NewSealedLeagueData.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/NewSealedLeagueData.java index 3d765c608..57e66c4bc 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/NewSealedLeagueData.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/NewSealedLeagueData.java @@ -5,6 +5,7 @@ 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.SoloDraftDefinitions; import com.gempukku.lotro.game.CardCollection; import com.gempukku.lotro.game.DefaultCardCollection; import com.gempukku.lotro.game.MutableCardCollection; @@ -23,7 +24,7 @@ public class NewSealedLeagueData implements LeagueData { private LeaguePrizes _leaguePrizes; private SealedLeagueProduct _leagueProduct; - public NewSealedLeagueData(CardSets cardSets, String parameters) { + public NewSealedLeagueData(CardSets cardSets, SoloDraftDefinitions soloDraftDefinitions, String parameters) { _leaguePrizes = new FixedLeaguePrizes(cardSets); String[] params = parameters.split(","); @@ -45,6 +46,11 @@ public class NewSealedLeagueData implements LeagueData { } } + @Override + public boolean isDraftLeague() { + return false; + } + @Override public List getSeries() { return Collections.unmodifiableList(_series); diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/SealedLeagueData.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/SealedLeagueData.java index a66d572a9..c72434abf 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/SealedLeagueData.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/SealedLeagueData.java @@ -5,6 +5,7 @@ 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.SoloDraftDefinitions; import com.gempukku.lotro.game.CardCollection; import com.gempukku.lotro.game.DefaultCardCollection; import com.gempukku.lotro.game.MutableCardCollection; @@ -23,7 +24,7 @@ public class SealedLeagueData implements LeagueData { private LeaguePrizes _leaguePrizes; private SealedLeagueProduct _leagueProduct; - public SealedLeagueData(CardSets cardSets, String parameters) { + public SealedLeagueData(CardSets cardSets, SoloDraftDefinitions soloDraftDefinitions, String parameters) { _leaguePrizes = new FixedLeaguePrizes(cardSets); String[] params = parameters.split(","); @@ -45,6 +46,11 @@ public class SealedLeagueData implements LeagueData { } } + @Override + public boolean isDraftLeague() { + return false; + } + @Override public List getSeries() { return Collections.unmodifiableList(_series); diff --git a/gemp-lotr/gemp-lotr-server/src/main/resources/lotrFormats.json b/gemp-lotr/gemp-lotr-server/src/main/resources/lotrFormats.json index 8d1d17a20..0c5458bb9 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/resources/lotrFormats.json +++ b/gemp-lotr/gemp-lotr-server/src/main/resources/lotrFormats.json @@ -323,5 +323,13 @@ "set":[30, 31], "restrictedName":["Gandalf", "Bilbo"], "hall":true + }, + { + "name":"Limited", + "code":"limited_hobbit", + "sites":"HOBBIT", + "cancelRingBearerSkirmish":true, + "set":[30, 31], + "hall":false } ] diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/league/ConstructedLeagueDataTest.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/league/ConstructedLeagueDataTest.java index ad60caa85..148d346e1 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/league/ConstructedLeagueDataTest.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/league/ConstructedLeagueDataTest.java @@ -1,6 +1,7 @@ package com.gempukku.lotro.league; import com.gempukku.lotro.cards.CardSets; +import com.gempukku.lotro.draft2.SoloDraftDefinitions; import org.junit.Test; import java.util.List; @@ -11,7 +12,7 @@ import static org.junit.Assert.assertTrue; public class ConstructedLeagueDataTest { @Test 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 series = leagueData.getSeries(); assertTrue(series.size() == 3); assertTrue(series.get(0).getStart() == 20120312); diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/league/LeagueServiceTest.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/league/LeagueServiceTest.java index dc6791954..3598b32c4 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/league/LeagueServiceTest.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/league/LeagueServiceTest.java @@ -8,6 +8,7 @@ import com.gempukku.lotro.db.LeagueMatchDAO; import com.gempukku.lotro.db.LeagueParticipationDAO; import com.gempukku.lotro.db.vo.League; import com.gempukku.lotro.db.vo.LeagueMatchResult; +import com.gempukku.lotro.draft2.SoloDraftDefinitions; import org.junit.Test; 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); 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); @@ -47,7 +48,7 @@ public class LeagueServiceTest { LeagueParticipationDAO leagueParticipationDAO = Mockito.mock(LeagueParticipationDAO.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.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); 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); @@ -101,7 +102,7 @@ public class LeagueServiceTest { LeagueParticipationDAO leagueParticipationDAO = Mockito.mock(LeagueParticipationDAO.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")); 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); 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); @@ -151,7 +152,7 @@ public class LeagueServiceTest { Mockito.when(leagueParticipationDAO.getUsersParticipating(league.getType())).thenReturn(players); 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", "player3"); diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/league/SealedLeagueDataTest.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/league/SealedLeagueDataTest.java index 0a9c3074f..3cb39b1dd 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/league/SealedLeagueDataTest.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/league/SealedLeagueDataTest.java @@ -3,6 +3,7 @@ package com.gempukku.lotro.league; import com.gempukku.lotro.cards.CardSets; import com.gempukku.lotro.collection.CollectionsManager; import com.gempukku.lotro.db.vo.CollectionType; +import com.gempukku.lotro.draft2.SoloDraftDefinitions; import com.gempukku.lotro.game.CardCollection; import com.gempukku.lotro.game.DefaultCardCollection; import com.gempukku.lotro.game.Player; @@ -20,7 +21,7 @@ import static org.junit.Assert.assertEquals; public class SealedLeagueDataTest { @Test 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"); for (int i = 20120101; i < 20120108; i++) { CollectionsManager collectionsManager = Mockito.mock(CollectionsManager.class); @@ -55,7 +56,7 @@ public class SealedLeagueDataTest { @Test 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"); for (int i = 20120108; i < 20120115; i++) { CollectionsManager collectionsManager = Mockito.mock(CollectionsManager.class); @@ -96,7 +97,7 @@ public class SealedLeagueDataTest { @Test 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++) { CollectionsManager collectionsManager = Mockito.mock(CollectionsManager.class); Mockito.when(collectionsManager.getPlayersCollection("test")).thenReturn(new HashMap()); @@ -109,7 +110,7 @@ public class SealedLeagueDataTest { @Test 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++) { CollectionsManager collectionsManager = Mockito.mock(CollectionsManager.class); Mockito.when(collectionsManager.getPlayersCollection("test")).thenReturn(new HashMap()); @@ -121,7 +122,7 @@ public class SealedLeagueDataTest { @Test 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"); for (int i = 20120108; i < 20120115; i++) { CollectionsManager collectionsManager = Mockito.mock(CollectionsManager.class); @@ -157,7 +158,7 @@ public class SealedLeagueDataTest { @Test 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++) { CollectionsManager collectionsManager = Mockito.mock(CollectionsManager.class); Mockito.when(collectionsManager.getPlayersCollection("test")).thenReturn(new HashMap());