package geniusweb.protocol.session.mopac2.phase; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; import geniusweb.actions.Action; import geniusweb.actions.EndNegotiation; import geniusweb.actions.Offer; import geniusweb.actions.PartyId; import geniusweb.inform.Inform; import geniusweb.inform.YourTurn; import geniusweb.protocol.ProtocolException; import geniusweb.protocol.session.mopac2.PartyStates; import geniusweb.voting.VotingEvaluatorWithValue; public class OfferPhase extends DefaultPhase { @JsonCreator public OfferPhase(@JsonProperty("partyStates") PartyStates partyStates, @JsonProperty("deadlinems") Long deadlinems, @JsonProperty("evaluator") VotingEvaluatorWithValue evaluator) { super(partyStates, deadlinems, evaluator); } @Override public OfferPhase with(PartyId actor, Action action, long timems) { try { checkAction(actor, action, timems); } catch (ProtocolException ex) { return this.with(ex); } return new OfferPhase(partyStates.with(action), deadline, evaluator); } @Override public Inform getInform() { return new YourTurn(); } @Override public OfferPhase with(ProtocolException e) { System.out.println("Party kicked because of protocol exception:" + e); return new OfferPhase(partyStates.with(e), deadline, evaluator); } @Override public Phase finish() { return new OfferPhase(partyStates.finish(), deadline, evaluator); } @Override public VotingPhase checkedNext(long deadln) { return new VotingPhase(getOffers(), partyStates.flush(), deadln, evaluator); } protected List getOffers() { return partyStates.getActions(Offer.class).stream() .collect(Collectors.toList()); } @Override public List> getAllowedActions() { return Arrays.asList(Offer.class, EndNegotiation.class); } }