package no.java.incogito.domain; import fj.F; import fj.P1; import fj.F2; import static fj.Function.curry; import fj.data.Option; import no.java.incogito.Enums; /** * @author <a href="mailto:trygve.laugstol@arktekk.no">Trygve Laugstøl</a> * @version $Id$ */ public class UserSessionAssociation { public enum InterestLevel { ATTEND, INTEREST, NO_INTEREST; public static final F<String, Option<InterestLevel>> valueOf_ = Enums.<InterestLevel>valueOf().f(InterestLevel.class); } public final SessionId sessionId; public final InterestLevel interestLevel; public final Option<SessionRating> rating; public final Option<String> ratingComment; public UserSessionAssociation(SessionId sessionId, InterestLevel interestLevel, Option<SessionRating> rating, Option<String> ratingComment) { this.sessionId = sessionId; this.interestLevel = interestLevel; this.rating = rating; this.ratingComment = ratingComment; } public static UserSessionAssociation constructor(SessionId sessionId, InterestLevel interestLevel, Option<SessionRating> rating, Option<String> ratingComment) { return new UserSessionAssociation(sessionId, interestLevel, rating, ratingComment); } public static UserSessionAssociation constructor(SessionId sessionId, InterestLevel interestLevel) { return new UserSessionAssociation(sessionId, interestLevel, Option.<SessionRating>none(), Option.<String>none()); } public static final F<SessionId, F<InterestLevel, UserSessionAssociation>> constructor_ = curry( new F2<SessionId, InterestLevel, UserSessionAssociation>() { public UserSessionAssociation f(SessionId sessionId, InterestLevel interestLevel) { return constructor(sessionId, interestLevel); } }); public static F<SessionId, F<InterestLevel, P1<UserSessionAssociation>>> $constructor_() { return new F<SessionId, F<InterestLevel, P1<UserSessionAssociation>>>() { public F<InterestLevel, P1<UserSessionAssociation>> f(final SessionId sessionId) { return P1.curry(new F<InterestLevel, UserSessionAssociation>() { public UserSessionAssociation f(InterestLevel interestLevel) { return constructor(sessionId, interestLevel); } }); } }; } public static final F<Option<SessionRating>, F<UserSessionAssociation, UserSessionAssociation>> rating_ = curry(new F2<Option<SessionRating>, UserSessionAssociation, UserSessionAssociation>() { public UserSessionAssociation f(Option<SessionRating> rating, UserSessionAssociation userSessionAssociation) { return userSessionAssociation.rating(rating); } }); public static final F<Option<String>, F<UserSessionAssociation, UserSessionAssociation>> ratingComment_ = curry(new F2<Option<String>, UserSessionAssociation, UserSessionAssociation>() { public UserSessionAssociation f(Option<String> ratingComment, UserSessionAssociation userSessionAssociation) { return userSessionAssociation.ratingComment(ratingComment); } }); // ----------------------------------------------------------------------- // // ----------------------------------------------------------------------- public UserSessionAssociation rating(Option<SessionRating> rating) { return new UserSessionAssociation(sessionId, interestLevel, rating, ratingComment); } public UserSessionAssociation ratingComment(Option<String> ratingComment) { return new UserSessionAssociation(sessionId, interestLevel, rating, ratingComment); } public UserSessionAssociation interestLevel(InterestLevel interestLevel) { return new UserSessionAssociation(sessionId, interestLevel, rating, ratingComment); } }