import gr.grnet.aquarium.policy.UserAgreementModel
import gr.grnet.aquarium.util.json.JsonSupport
import scala.collection.immutable
-import gr.grnet.aquarium.message.avro.gen.UserAgreementHistoryMsg
-import gr.grnet.aquarium.message.avro.ModelFactory
+import gr.grnet.aquarium.message.avro.gen.{UserAgreementMsg, IMEventMsg, UserAgreementHistoryMsg}
+import gr.grnet.aquarium.message.avro.{MessageFactory, MessageHelpers, ModelFactory}
/**
*
* @author Christos KK Loverdos <loverdos@gmail.com>
*/
-final case class UserAgreementHistoryModel(
- msg: UserAgreementHistoryMsg
-) {
+final class UserAgreementHistoryModel(msg: UserAgreementHistoryMsg) {
- private var _userAgreementModels: immutable.SortedSet[UserAgreementModel] = {
+ private[this] var _latestIMEventOccurredMillis = 0L
+
+ private[this] var (_userAgreementModels, _userCreationIMEventMsgOpt): (immutable.SortedSet[UserAgreementModel], Option[IMEventMsg]) = {
var userAgreementModels = immutable.SortedSet[UserAgreementModel]()
+ var userCreationIMEventMsg: Option[IMEventMsg] = None
val userAgreements = msg.getAgreements.iterator()
while(userAgreements.hasNext) {
val userAgreement = userAgreements.next()
val userAgreementModel = ModelFactory.newUserAgreementModel(userAgreement)
userAgreementModels += userAgreementModel
+
+ userAgreement.getRelatedIMEventMsg match {
+ case null ⇒
+
+ case msg ⇒
+ if(MessageHelpers.isIMEventCreate(msg)) {
+ userCreationIMEventMsg = Some(msg)
+ }
+ }
+
+ checkLatestIMEventOccurredMillis(userAgreement.getRelatedIMEventMsg)
}
- userAgreementModels
+ (userAgreementModels, userCreationIMEventMsg)
}
+ private[this] def checkLatestIMEventOccurredMillis(imEvent: IMEventMsg) {
+ if(imEvent ne null) {
+ if(this._latestIMEventOccurredMillis < imEvent.getOccurredMillis) {
+ this._latestIMEventOccurredMillis = imEvent.getOccurredMillis
+ }
+ }
+ }
+
+ def latestIMEventOccurredMillis = this._latestIMEventOccurredMillis
+
+ def hasUserCreationEvent = this._userCreationIMEventMsgOpt.isDefined
+
+ def userCreationIMEvent = this._userCreationIMEventMsgOpt
+
def size: Int = msg.getAgreements.size()
def agreementByTimeslot: immutable.SortedMap[Timeslot, UserAgreementModel] = {
immutable.TreeMap(_userAgreementModels.map(ag ⇒ (ag.timeslot, ag)).toSeq: _*)
}
- def setFrom(that: UserAgreementHistoryModel): this.type = {
- this._userAgreementModels = that._userAgreementModels
- this
- }
-
- def +(userAgreement: UserAgreementModel): this.type = {
- msg.getAgreements.add(userAgreement.msg)
- _userAgreementModels += userAgreement
- this
+ def insertUserAgreementModel(userAgreement: UserAgreementModel) {
+ MessageHelpers.insertUserAgreement(this.msg, userAgreement.msg)
+ this._userAgreementModels += userAgreement
+ checkLatestIMEventOccurredMillis(userAgreement.msg.getRelatedIMEventMsg)
}
- def +=(userAgreement: UserAgreementModel): Unit = {
- msg.getAgreements.add(userAgreement.msg)
- _userAgreementModels += userAgreement
+ def insertUserAgreementMsg(userAgreementMsg: UserAgreementMsg) {
+ insertUserAgreementModel(ModelFactory.newUserAgreementModel(userAgreementMsg))
}
- def ++(userAgreements: Traversable[UserAgreementModel]): this.type = {
- for(userAgreement ← userAgreements) {
- msg.getAgreements.add(userAgreement.msg)
- }
- _userAgreementModels ++= userAgreements
- this
- }
-
- def ++=(userAgreements: Traversable[UserAgreementModel]): Unit = {
- for(userAgreement ← userAgreements) {
- msg.getAgreements.add(userAgreement.msg)
- }
- _userAgreementModels ++= userAgreements
+ def insertUserAgreementMsgFromIMEvent(imEvent: IMEventMsg) {
+ val userAgreementMsg = MessageFactory.newUserAgreementFromIMEventMsg(imEvent)
+ insertUserAgreementMsg(userAgreementMsg)
}
def oldestAgreementModel: Option[UserAgreementModel] = {
_userAgreementModels.lastOption
}
- def toJsonString = msg.toString
+ override def toString = msg.toString
// def agreementInEffectWhen(whenMillis: Long): Option[UserAgreementModel] = {
// agreements.to(