package geniusweb.profile; import org.eclipse.jdt.annotation.NonNull; import com.fasterxml.jackson.annotation.JsonSubTypes; import com.fasterxml.jackson.annotation.JsonTypeInfo; import geniusweb.issuevalue.Bid; import geniusweb.issuevalue.Domain; import geniusweb.profile.utilityspace.LinearAdditiveUtilitySpace; import geniusweb.profile.utilityspace.SumOfGroupsUtilitySpace; /** * Profile is a very general object describing how much a {@link Bid} is * preferred. "is preferred" can be worked out in different ways, eg by a * function "isBetter" that says if bid1 is preferred over bid2, or by assigning * utility values to each bid that says how much I like that particular bid. All * profiles should be implemented immutable */ @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.WRAPPER_OBJECT) @JsonSubTypes({ @JsonSubTypes.Type(value = LinearAdditiveUtilitySpace.class), @JsonSubTypes.Type(value = DefaultPartialOrdering.class), @JsonSubTypes.Type(value = SumOfGroupsUtilitySpace.class) }) public interface Profile { /** * * @return the name of this profile. Must be simple name (a-Z, 0-9) */ @NonNull String getName(); /** * @return the domain in which this profile is defined. */ @NonNull Domain getDomain(); /** * * @return a (hypothetical) bid that is the best alternative to a * non-agreement. Only bids that are equal or better should be * accepted. If a negotiation does not reach an agreement, the party * can get this offer somewhere else. This replaces the older notion * of a "reservation value" and is more general. If null, there is * no reservation bid and any agreement is better than no agreement. * This bid can be partial. * */ Bid getReservationBid(); }