package geniusweb.boa; import geniusweb.actions.Action; import geniusweb.issuevalue.Domain; import geniusweb.profile.Profile; import geniusweb.progress.Progress; /** * An opponent model for use in the BOA system. Implementations should be * immutable */ public interface OpponentModel extends Profile { /** * * @param domain * @return sets or changes the domain. */ OpponentModel with(Domain domain); /** * Update this with a new action that was done by the opponent that this * model is modeling. {@link #with(Domain)} must be called before calling * this. * * @param action the new incoming action. * @param progress the current progress of the negotiation. Calls to this * must be done with increasing progress. * @return the updated {@link OpponentModel} */ OpponentModel with(Action action, Progress progress); }