From 830664b8340d516e428351511ae87a6a56dd42f8 Mon Sep 17 00:00:00 2001 From: magenoxx Date: Tue, 2 Aug 2011 11:34:10 +0400 Subject: [PATCH] Fixed Issue 193 --- .../client/remote/CallbackClientImpl.java | 17 ++-- .../main/java/mage/client/util/DeckUtil.java | 77 +++++++++++++++++++ Mage.Common/src/mage/view/DeckView.java | 64 +++++++++++++++ .../src/mage/view/TableClientMessage.java | 12 ++- .../server/tournament/TournamentSession.java | 3 +- Mage/src/mage/cards/CardImpl.java | 1 + Mage/src/mage/cards/ExpansionSet.java | 11 +++ Mage/src/mage/cards/decks/Deck.java | 2 - 8 files changed, 172 insertions(+), 15 deletions(-) create mode 100644 Mage.Client/src/main/java/mage/client/util/DeckUtil.java create mode 100644 Mage.Common/src/mage/view/DeckView.java diff --git a/Mage.Client/src/main/java/mage/client/remote/CallbackClientImpl.java b/Mage.Client/src/main/java/mage/client/remote/CallbackClientImpl.java index e1c2ee9ee57..e96165f012e 100644 --- a/Mage.Client/src/main/java/mage/client/remote/CallbackClientImpl.java +++ b/Mage.Client/src/main/java/mage/client/remote/CallbackClientImpl.java @@ -37,18 +37,13 @@ import mage.client.constants.Constants.DeckEditorMode; import mage.client.draft.DraftPanel; import mage.client.game.GamePanel; import mage.client.plugins.impl.Plugins; +import mage.client.util.DeckUtil; import mage.client.util.GameManager; import mage.client.util.object.SaveObjectUtil; import mage.interfaces.callback.CallbackClient; import mage.interfaces.callback.ClientCallback; import mage.utils.CompressUtil; -import mage.view.AbilityPickerView; -import mage.view.ChatMessage; -import mage.view.DraftClientMessage; -import mage.view.DraftView; -import mage.view.GameClientMessage; -import mage.view.GameView; -import mage.view.TableClientMessage; +import mage.view.*; import org.apache.log4j.Logger; /** @@ -213,11 +208,15 @@ public class CallbackClientImpl implements CallbackClient { } else if (callback.getMethod().equals("sideboard")) { TableClientMessage message = (TableClientMessage) callback.getData(); - sideboard(message.getDeck(), message.getTableId(), message.getTime()); + DeckView deckView = message.getDeck(); + Deck deck = DeckUtil.construct(deckView); + sideboard(deck, message.getTableId(), message.getTime()); } else if (callback.getMethod().equals("construct")) { TableClientMessage message = (TableClientMessage) callback.getData(); - construct(message.getDeck(), message.getTableId(), message.getTime()); + DeckView deckView = message.getDeck(); + Deck deck = DeckUtil.construct(deckView); + construct(deck, message.getTableId(), message.getTime()); } else if (callback.getMethod().equals("draftOver")) { DraftPanel panel = frame.getDraft(callback.getObjectId()); diff --git a/Mage.Client/src/main/java/mage/client/util/DeckUtil.java b/Mage.Client/src/main/java/mage/client/util/DeckUtil.java new file mode 100644 index 00000000000..bea93dee76f --- /dev/null +++ b/Mage.Client/src/main/java/mage/client/util/DeckUtil.java @@ -0,0 +1,77 @@ +/* +* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. +* +* Redistribution and use in source and binary forms, with or without modification, are +* permitted provided that the following conditions are met: +* +* 1. Redistributions of source code must retain the above copyright notice, this list of +* conditions and the following disclaimer. +* +* 2. Redistributions in binary form must reproduce the above copyright notice, this list +* of conditions and the following disclaimer in the documentation and/or other materials +* provided with the distribution. +* +* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED +* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR +* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +* The views and conclusions contained in the software and documentation are those of the +* authors and should not be interpreted as representing official policies, either expressed +* or implied, of BetaSteward_at_googlemail.com. +*/ + +package mage.client.util; + +import mage.cards.Card; +import mage.cards.ExpansionSet; +import mage.cards.decks.Deck; +import mage.sets.Sets; +import mage.view.CardView; +import mage.view.DeckView; +import org.apache.log4j.Logger; + +/** + * Utility class for decks. + * + * @author nantuko + */ +public class DeckUtil { + + private static final transient Logger log = Logger.getLogger(DeckUtil.class); + + private DeckUtil() { + } + + public static Deck construct(DeckView view) { + Deck deck = new Deck(); + for (CardView cardView : view.getCards().values()) { + ExpansionSet set = Sets.findSet(cardView.getExpansionSetCode()); + if (set != null) { + Card card = set.findCard(cardView.getName(), cardView.getCardNumber()); + if (card != null) { + deck.getCards().add(card); + } else { + log.fatal("(Deck constructing) Couldn't find card: " + cardView.getName() + ", set=" + cardView.getExpansionSetCode() + ", cid=" + Integer.valueOf(cardView.getCardNumber())); + } + } + } + for (CardView cardView : view.getSideboard().values()) { + ExpansionSet set = Sets.findSet(cardView.getExpansionSetCode()); + if (set != null) { + Card card = set.findCard(cardView.getName(), cardView.getCardNumber()); + if (card != null) { + deck.getSideboard().add(card); + } else { + log.fatal("(Deck constructing) Couldn't find card: " + cardView.getName() + ", set=" + cardView.getExpansionSetCode() + ", cid=" + Integer.valueOf(cardView.getCardNumber())); + } + } + } + return deck; + } +} diff --git a/Mage.Common/src/mage/view/DeckView.java b/Mage.Common/src/mage/view/DeckView.java new file mode 100644 index 00000000000..5dff03d9034 --- /dev/null +++ b/Mage.Common/src/mage/view/DeckView.java @@ -0,0 +1,64 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.view; + +import mage.cards.Card; +import mage.cards.Cards; +import mage.cards.decks.Deck; + +import java.io.Serializable; +import java.util.LinkedHashSet; +import java.util.Set; + +/** + * @author nantuko + */ +public class DeckView implements Serializable { + + private String name; + private CardsView cards; + private CardsView sideboard; + + public DeckView(Deck deck) { + name = deck.getName(); + cards = new CardsView(deck.getCards()); + sideboard = new CardsView(deck.getSideboard()); + } + + public String getName() { + return name; + } + + public CardsView getCards() { + return cards; + } + + public CardsView getSideboard() { + return sideboard; + } +} diff --git a/Mage.Common/src/mage/view/TableClientMessage.java b/Mage.Common/src/mage/view/TableClientMessage.java index 4e4b269a832..12b1b4863d6 100644 --- a/Mage.Common/src/mage/view/TableClientMessage.java +++ b/Mage.Common/src/mage/view/TableClientMessage.java @@ -30,6 +30,8 @@ package mage.view; import java.io.Serializable; import java.util.UUID; + +import mage.cards.Card; import mage.cards.decks.Deck; /** @@ -39,14 +41,14 @@ import mage.cards.decks.Deck; public class TableClientMessage implements Serializable { private static final long serialVersionUID = 1L; - private Deck deck; + private DeckView deck; private UUID tableId; private UUID gameId; private UUID playerId; private int time; public TableClientMessage(Deck deck, UUID tableId, int time) { - this.deck = deck; + this.deck = new DeckView(deck); this.tableId = tableId; this.time = time; } @@ -56,7 +58,7 @@ public class TableClientMessage implements Serializable { this.playerId = playerId; } - public Deck getDeck() { + public DeckView getDeck() { return deck; } @@ -75,4 +77,8 @@ public class TableClientMessage implements Serializable { public int getTime() { return time; } + + public void cleanUp() { + + } } diff --git a/Mage.Server/src/main/java/mage/server/tournament/TournamentSession.java b/Mage.Server/src/main/java/mage/server/tournament/TournamentSession.java index 3e5a771f648..3cb37fed201 100644 --- a/Mage.Server/src/main/java/mage/server/tournament/TournamentSession.java +++ b/Mage.Server/src/main/java/mage/server/tournament/TournamentSession.java @@ -28,6 +28,7 @@ package mage.server.tournament; +import java.awt.*; import java.rmi.RemoteException; import java.util.UUID; import java.util.concurrent.ScheduledExecutorService; @@ -40,7 +41,7 @@ import mage.interfaces.callback.ClientCallback; import mage.server.User; import mage.server.UserManager; import mage.server.util.ThreadExecutor; -import mage.view.TournamentView; +import mage.view.*; import org.apache.log4j.Logger; /** diff --git a/Mage/src/mage/cards/CardImpl.java b/Mage/src/mage/cards/CardImpl.java index 976c422f68e..ddb9564626b 100644 --- a/Mage/src/mage/cards/CardImpl.java +++ b/Mage/src/mage/cards/CardImpl.java @@ -52,6 +52,7 @@ import mage.watchers.Watchers; import org.apache.log4j.Logger; public abstract class CardImpl> extends MageObjectImpl implements Card { + private static final long serialVersionUID = 1L; private final static Logger logger = Logger.getLogger(CardImpl.class); diff --git a/Mage/src/mage/cards/ExpansionSet.java b/Mage/src/mage/cards/ExpansionSet.java index 6533f08e4cf..7f7e42e2484 100644 --- a/Mage/src/mage/cards/ExpansionSet.java +++ b/Mage/src/mage/cards/ExpansionSet.java @@ -131,6 +131,17 @@ public abstract class ExpansionSet implements Serializable { return null; } + public Card findCard(String name, int cardNum) { + for (Card card : cards) { + if (cardNum == card.getCardNumber() && name.equalsIgnoreCase(card.getName())) { + Card newCard = card.copy(); + newCard.assignNewId(); + return newCard; + } + } + return null; + } + public Card findCard(String name, boolean random) { List foundCards = new ArrayList(); for (Card card : cards) { diff --git a/Mage/src/mage/cards/decks/Deck.java b/Mage/src/mage/cards/decks/Deck.java index ea15831cc2c..7332352a180 100644 --- a/Mage/src/mage/cards/decks/Deck.java +++ b/Mage/src/mage/cards/decks/Deck.java @@ -41,7 +41,6 @@ public class Deck implements Serializable { private Set sideboard = new LinkedHashSet(); public static Deck load(DeckCardLists deckCardLists) throws GameException { - return Deck.load(deckCardLists, false); } @@ -111,5 +110,4 @@ public class Deck implements Serializable { public Set getSideboard() { return sideboard; } - }