diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/EventSerializer.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/EventSerializer.java index 893711c44..d551688d1 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/EventSerializer.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/EventSerializer.java @@ -7,12 +7,15 @@ import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; +import java.util.Arrays; +import java.util.List; import java.util.Map; public class EventSerializer { public Node serializeEvent(Document doc, GameEvent gameEvent) { Element eventElem = doc.createElement("ge"); eventElem.setAttribute("type", gameEvent.getType().getCode()); + if (gameEvent.getBlueprintId() != null) eventElem.setAttribute("blueprintId", gameEvent.getBlueprintId()); if (gameEvent.getCardId() != null) @@ -23,16 +26,8 @@ public class EventSerializer { eventElem.setAttribute("controllerId", gameEvent.getControllerId()); if (gameEvent.getParticipantId() != null) eventElem.setAttribute("participantId", gameEvent.getParticipantId()); - if (gameEvent.getAllParticipantIds() != null) { - StringBuilder sb = new StringBuilder(); - boolean first = true; - for (String participantId : gameEvent.getAllParticipantIds()) { - if (!first) sb.append(","); - sb.append(participantId); - first = false; - } - eventElem.setAttribute("allParticipantIds", sb.toString()); - } + if (gameEvent.getAllParticipantIds() != null) + eventElem.setAttribute("allParticipantIds", listToCommaSeparated(gameEvent.getAllParticipantIds())); if (gameEvent.getPhase() != null) eventElem.setAttribute("phase", gameEvent.getPhase()); if (gameEvent.getTargetCardId() != null) @@ -43,89 +38,109 @@ public class EventSerializer { eventElem.setAttribute("token", gameEvent.getToken().name()); if (gameEvent.getCount() != null) eventElem.setAttribute("count", gameEvent.getCount().toString()); - if (gameEvent.getOtherCardIds() != null) { - StringBuilder sb = new StringBuilder(); - boolean first = true; - for (int cardId : gameEvent.getOtherCardIds()) { - if (!first) sb.append(","); - sb.append(cardId); - first = false; - } - eventElem.setAttribute("otherCardIds", sb.toString()); - } + if (gameEvent.getOtherCardIds() != null) + eventElem.setAttribute("otherCardIds", arrayToCommaSeparated(gameEvent.getOtherCardIds())); if (gameEvent.getMessage() != null) eventElem.setAttribute("message", gameEvent.getMessage()); - if (gameEvent.getGameStats() != null) { - GameStats gameStats = gameEvent.getGameStats(); - if (gameStats.getWearingRing() != null) - eventElem.setAttribute("wearingRing", String.valueOf(gameStats.getWearingRing())); - eventElem.setAttribute("fellowshipArchery", String.valueOf(gameStats.getFellowshipArchery())); - eventElem.setAttribute("shadowArchery", String.valueOf(gameStats.getShadowArchery())); - - eventElem.setAttribute("fellowshipStrength", String.valueOf(gameStats.getFellowshipSkirmishStrength())); - eventElem.setAttribute("shadowStrength", String.valueOf(gameStats.getShadowSkirmishStrength())); - - eventElem.setAttribute("fellowshipDamageBonus", String.valueOf(gameStats.getFellowshipSkirmishDamageBonus())); - eventElem.setAttribute("shadowDamageBonus", String.valueOf(gameStats.getShadowSkirmishDamageBonus())); - - eventElem.setAttribute("fpOverwhelmed", String.valueOf(gameStats.isFpOverwhelmed())); - - eventElem.setAttribute("moveLimit", String.valueOf(gameStats.getMoveLimit())); - eventElem.setAttribute("moveCount", String.valueOf(gameStats.getMoveCount())); - - for (Map.Entry> playerZoneSizes : gameStats.getZoneSizes().entrySet()) { - final Element playerZonesElem = doc.createElement("playerZones"); - - playerZonesElem.setAttribute("name", playerZoneSizes.getKey()); - - for (Map.Entry zoneSizes : playerZoneSizes.getValue().entrySet()) - playerZonesElem.setAttribute(zoneSizes.getKey().name(), zoneSizes.getValue().toString()); - - eventElem.appendChild(playerZonesElem); - } - - for (Map.Entry playerThreatEntry : gameStats.getThreats().entrySet()) { - Element threatsElem = doc.createElement("threats"); - threatsElem.setAttribute("name", playerThreatEntry.getKey()); - threatsElem.setAttribute("value", playerThreatEntry.getValue().toString()); - eventElem.appendChild(threatsElem); - } - - Map charVitalities = gameStats.getCharVitalities(); - Map charSiteNumbers = gameStats.getSiteNumbers(); - Map charResistances = gameStats.getCharResistances(); - - StringBuilder charStr = new StringBuilder(); - for (Map.Entry characters : gameStats.getCharStrengths().entrySet()) { - Integer charCardId = characters.getKey(); - charStr.append("," + charCardId + "=" + characters.getValue() + "|" + charVitalities.get(charCardId)); - if (charSiteNumbers.containsKey(charCardId)) - charStr.append("|" + charSiteNumbers.get(charCardId)); - else if (charResistances.containsKey(charCardId)) - charStr.append("|R" + charResistances.get(charCardId)); - } - if (charStr.length() > 0) - charStr.delete(0, 1); - - if (charStr.length() > 0) - eventElem.setAttribute("charStats", charStr.toString()); - } - if (gameEvent.getAwaitingDecision() != null) { - AwaitingDecision decision = gameEvent.getAwaitingDecision(); - eventElem.setAttribute("id", String.valueOf(decision.getAwaitingDecisionId())); - eventElem.setAttribute("decisionType", decision.getDecisionType().name()); - if (decision.getText() != null) - eventElem.setAttribute("text", decision.getText()); - for (Map.Entry paramEntry : decision.getDecisionParameters().entrySet()) { - for (String value : paramEntry.getValue()) { - Element decisionParam = doc.createElement("parameter"); - decisionParam.setAttribute("name", paramEntry.getKey()); - decisionParam.setAttribute("value", value); - eventElem.appendChild(decisionParam); - } - } - } + if (gameEvent.getGameStats() != null) + serializeGameStats(doc, eventElem, gameEvent.getGameStats()); + if (gameEvent.getAwaitingDecision() != null) + serializeDecision(doc, eventElem, gameEvent.getAwaitingDecision()); return eventElem; } + + private String arrayToCommaSeparated(int[] integers) { + int iMax = integers.length - 1; + if (iMax == -1) + return ""; + + StringBuilder b = new StringBuilder(); + for (int i = 0; ; i++) { + b.append(integers[i]); + if (i == iMax) + return b.toString(); + } + } + + private String listToCommaSeparated(List strings) { + StringBuilder sb = new StringBuilder(); + boolean first = true; + for (String participantId : strings) { + if (!first) sb.append(","); + sb.append(participantId); + first = false; + } + return sb.toString(); + } + + private void serializeDecision(Document doc, Element eventElem, AwaitingDecision decision) { + eventElem.setAttribute("id", String.valueOf(decision.getAwaitingDecisionId())); + eventElem.setAttribute("decisionType", decision.getDecisionType().name()); + if (decision.getText() != null) + eventElem.setAttribute("text", decision.getText()); + for (Map.Entry paramEntry : decision.getDecisionParameters().entrySet()) { + for (String value : paramEntry.getValue()) { + Element decisionParam = doc.createElement("parameter"); + decisionParam.setAttribute("name", paramEntry.getKey()); + decisionParam.setAttribute("value", value); + eventElem.appendChild(decisionParam); + } + } + } + + private void serializeGameStats(Document doc, Element eventElem, GameStats gameStats) { + if (gameStats.getWearingRing() != null) + eventElem.setAttribute("wearingRing", String.valueOf(gameStats.getWearingRing())); + eventElem.setAttribute("fellowshipArchery", String.valueOf(gameStats.getFellowshipArchery())); + eventElem.setAttribute("shadowArchery", String.valueOf(gameStats.getShadowArchery())); + + eventElem.setAttribute("fellowshipStrength", String.valueOf(gameStats.getFellowshipSkirmishStrength())); + eventElem.setAttribute("shadowStrength", String.valueOf(gameStats.getShadowSkirmishStrength())); + + eventElem.setAttribute("fellowshipDamageBonus", String.valueOf(gameStats.getFellowshipSkirmishDamageBonus())); + eventElem.setAttribute("shadowDamageBonus", String.valueOf(gameStats.getShadowSkirmishDamageBonus())); + + eventElem.setAttribute("fpOverwhelmed", String.valueOf(gameStats.isFpOverwhelmed())); + + eventElem.setAttribute("moveLimit", String.valueOf(gameStats.getMoveLimit())); + eventElem.setAttribute("moveCount", String.valueOf(gameStats.getMoveCount())); + + for (Map.Entry> playerZoneSizes : gameStats.getZoneSizes().entrySet()) { + final Element playerZonesElem = doc.createElement("playerZones"); + + playerZonesElem.setAttribute("name", playerZoneSizes.getKey()); + + for (Map.Entry zoneSizes : playerZoneSizes.getValue().entrySet()) + playerZonesElem.setAttribute(zoneSizes.getKey().name(), zoneSizes.getValue().toString()); + + eventElem.appendChild(playerZonesElem); + } + + for (Map.Entry playerThreatEntry : gameStats.getThreats().entrySet()) { + Element threatsElem = doc.createElement("threats"); + threatsElem.setAttribute("name", playerThreatEntry.getKey()); + threatsElem.setAttribute("value", playerThreatEntry.getValue().toString()); + eventElem.appendChild(threatsElem); + } + + Map charVitalities = gameStats.getCharVitalities(); + Map charSiteNumbers = gameStats.getSiteNumbers(); + Map charResistances = gameStats.getCharResistances(); + + StringBuilder charStr = new StringBuilder(); + for (Map.Entry characters : gameStats.getCharStrengths().entrySet()) { + Integer charCardId = characters.getKey(); + charStr.append(",").append(charCardId).append("=").append(characters.getValue()).append("|").append(charVitalities.get(charCardId)); + if (charSiteNumbers.containsKey(charCardId)) + charStr.append("|").append(charSiteNumbers.get(charCardId)); + else if (charResistances.containsKey(charCardId)) + charStr.append("|R").append(charResistances.get(charCardId)); + } + if (charStr.length() > 0) + charStr.delete(0, 1); + + if (charStr.length() > 0) + eventElem.setAttribute("charStats", charStr.toString()); + } }