package geniusweb.protocol; import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility; import com.fasterxml.jackson.annotation.JsonSubTypes; import com.fasterxml.jackson.annotation.JsonSubTypes.Type; import com.fasterxml.jackson.annotation.JsonTypeInfo; import geniusweb.protocol.session.SessionSettings; import geniusweb.protocol.tournament.TournamentSettings; import tudelft.utilities.logging.Reporter; /** * Interface for negotiation settings. A negotiation can be either a single * session or a tournament */ @JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE, isGetterVisibility = Visibility.NONE) @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.WRAPPER_OBJECT) @JsonSubTypes({ @Type(value = SessionSettings.class), @Type(value = TournamentSettings.class) }) public interface NegoSettings { /** * * @return the maximum run time (seconds). In deterministic runs this can be * an exact number (#sessions * runtime per session) but this * interface also allows more random tournament protocols. The * protocol should stick closely with the maximum it provides to * enable planning of tournaments properly. */ public Double getMaxRunTime(); /** * @param logger the logger where the protocol can log events to. * @return an initialized and ready to use {@link NegoProtocol} that can * handle this Negotiation. */ public NegoProtocol getProtocol(Reporter logger); }