package gr.grnet.aquarium.message.avro
-import gr.grnet.aquarium.charging.state.UserStateBootstrap
import gr.grnet.aquarium.computation.BillingMonthInfo
-import gr.grnet.aquarium.event.{CreditsModel, DetailsModel}
+import gr.grnet.aquarium.event.DetailsModel
import gr.grnet.aquarium.message.avro.gen._
-import java.{util ⇒ ju}
-import java.util.{ArrayList ⇒ JArrayList}
-import org.apache.avro.generic.GenericData
import scala.collection.JavaConverters.mapAsJavaMapConverter
import scala.collection.JavaConverters.seqAsJavaListConverter
import scala.Predef.Map
import gr.grnet.aquarium.policy.ResourceType
-
+import gr.grnet.aquarium.util.date.TimeHelpers
+import gr.grnet.aquarium.Real
+import gr.grnet.aquarium.util.JavaFactory.{newJList, newJMap}
/**
* Provides helper methods that construct avro messages.
*
av
}
- def newEffectiveUnitPriceMsg(unitPrice: Double, whenOpt: Option[CronSpecTupleMsg] = None) = {
+ def anyValueMsgOfList(l: java.util.List[AnyValueMsg]) = {
+ val av = new AnyValueMsg
+ av.setAnyValue(l)
+ av
+ }
+
+ def newEffectiveUnitPriceMsg(
+ unitPrice: String,
+ whenOpt: Option[CronSpecTupleMsg]
+ ): EffectiveUnitPriceMsg = {
EffectiveUnitPriceMsg.newBuilder().
setUnitPrice(unitPrice).
setWhen(whenOpt.getOrElse(null)).
build()
}
+ def newEffectiveUnitPriceMsg(
+ unitPrice: Double,
+ whenOpt: Option[CronSpecTupleMsg]
+ ): EffectiveUnitPriceMsg = {
+ newEffectiveUnitPriceMsg(unitPrice.toString, whenOpt)
+ }
+
def newEffectivePriceTableMsg(priceOverrides: EffectiveUnitPriceMsg*) = {
EffectivePriceTableMsg.newBuilder().
setPriceOverrides(priceOverrides.asJava).
def newWalletEntryMsg(
userID: String,
- sumOfCreditsToSubtract: CreditsModel.Type,
- oldTotalCredits: CreditsModel.Type,
- newTotalCredits: CreditsModel.Type,
+ sumOfCreditsToSubtract: String,
+ oldTotalCredits: String,
+ newTotalCredits: String,
whenComputedMillis: Long,
referenceStartMillis: Long,
referenceStopMillis: Long,
billingYear: Int,
billingMonth: Int,
billingMonthDay: Int,
- chargeslots: ju.List[ChargeslotMsg],
- resourceEvents: ju.List[ResourceEventMsg],
+ chargeslots: java.util.List[ChargeslotMsg],
+ resourceEvents: java.util.List[ResourceEventMsg],
resourceType: ResourceTypeMsg,
isSynthetic: Boolean
): WalletEntryMsg = {
WalletEntryMsg.newBuilder().
setUserID(userID).
- setSumOfCreditsToSubtract(CreditsModel.toTypeInMessage(sumOfCreditsToSubtract)).
- setOldTotalCredits(CreditsModel.toTypeInMessage(oldTotalCredits)).
- setNewTotalCredits(CreditsModel.toTypeInMessage(newTotalCredits)).
+ setSumOfCreditsToSubtract(sumOfCreditsToSubtract).
+ setOldTotalCredits(oldTotalCredits).
+ setNewTotalCredits(newTotalCredits).
setWhenComputedMillis(whenComputedMillis).
setReferenceStartMillis(referenceStartMillis).
setReferenceStopMillis(referenceStopMillis).
def newResourceInstanceChargingStateMsg(
details: DetailsModel.Type,
- previousEvents: ju.List[ResourceEventMsg],
- implicitlyIssuedStartEvents: ju.List[ResourceEventMsg],
- oldAccumulatingAmount: Double,
- accumulatingAmount: Double,
- previousValue: Double,
- currentValue: Double,
+ previousEvents: java.util.List[ResourceEventMsg],
+ implicitlyIssuedStartEvents: java.util.List[ResourceEventMsg],
+ oldAccumulatingAmount: String,
+ accumulatingAmount: String,
+ previousValue: String,
+ currentValue: String,
clientID: String,
resource: String,
instanceID: String
msg.setDetails(details)
msg.setPreviousEvents(previousEvents)
msg.setImplicitlyIssuedStartEvents(implicitlyIssuedStartEvents)
- msg.setOldAccumulatingAmount(java.lang.Double.valueOf(oldAccumulatingAmount))
- msg.setAccumulatingAmount(java.lang.Double.valueOf(accumulatingAmount))
- msg.setPreviousValue(java.lang.Double.valueOf(previousValue))
- msg.setCurrentValue(java.lang.Double.valueOf(currentValue))
+ msg.setOldAccumulatingAmount(oldAccumulatingAmount)
+ msg.setAccumulatingAmount(accumulatingAmount)
+ msg.setPreviousValue(previousValue)
+ msg.setCurrentValue(currentValue)
msg.setClientID(clientID)
msg.setResource(resource)
msg.setInstanceID(instanceID)
msg
}
- def newEmptyUserAgreementHistoryMsg() = {
- val msg = new UserAgreementHistoryMsg
- msg.setAgreements(new ju.ArrayList[UserAgreementMsg]())
+ def newResourcesChargingStateMsg(
+ resourceName: String,
+ initialChargingDetails: DetailsModel.Type
+ ): ResourcesChargingStateMsg = {
+ val msg = new ResourcesChargingStateMsg
+ msg.setResource(resourceName)
+ msg.setDetails(initialChargingDetails)
+ msg.setStateOfResourceInstance(newJMap)
msg
}
- def newInitialUserAgreementHistoryMsg(initialAgreement: UserAgreementMsg) = {
+ def newEmptyUserAgreementHistoryMsg() = {
val msg = new UserAgreementHistoryMsg
- val list = new JArrayList[UserAgreementMsg]()
- list.add(initialAgreement)
- msg.setAgreements(list)
+ msg.setAgreements(newJList[UserAgreementMsg])
msg
}
+ def newInitialUserAgreementHistoryMsg(
+ initialAgreement: UserAgreementMsg,
+ originalID: String = MessageHelpers.UserAgreementHistoryMsgIDGenerator.nextUID()
+ ) = {
+ val historyMsg = new UserAgreementHistoryMsg
+ historyMsg.setOriginalID(originalID)
+ MessageHelpers.insertUserAgreement(historyMsg, initialAgreement)
+ historyMsg
+ }
+
def newUserAgreementFromIMEventMsg(
imEvent: IMEventMsg,
- id: String = MessageHelpers.UserAgreementMsgIDGenerator.nextUID()
+ agreementOriginalID: String = MessageHelpers.UserAgreementMsgIDGenerator.nextUID()
) = {
val msg = new UserAgreementMsg
- msg.setId(id)
+ msg.setId(agreementOriginalID)
msg.setUserID(imEvent.getUserID)
msg.setRelatedIMEventOriginalID(imEvent.getOriginalID)
msg.setRole(imEvent.getRole)
msg.setValidFromMillis(imEvent.getOccurredMillis)
msg.setValidToMillis(java.lang.Long.valueOf(java.lang.Long.MAX_VALUE))
msg.setFullPriceTableRef(null) // get from current (= @imEvent.getOccurredMillis) policy
+ msg.setOccurredMillis(java.lang.Long.valueOf(TimeHelpers.nowMillis()))
+ msg.setRelatedIMEventMsg(imEvent)
+
+ msg
+ }
+ def newUserAgreementHistoryMsg(
+ userID: String,
+ originalID: String = MessageHelpers.UserAgreementHistoryMsgIDGenerator.nextUID()
+ ): UserAgreementHistoryMsg = {
+ val msg = new UserAgreementHistoryMsg
+ msg.setOriginalID(originalID)
+ msg.setUserID(userID)
+ msg.setAgreements(newJList)
msg
}
- def newWalletEntriesMsg(entries: ju.List[WalletEntryMsg] = new ju.ArrayList[WalletEntryMsg]()) = {
+ def newWalletEntriesMsg(entries: java.util.List[WalletEntryMsg] = newJList[WalletEntryMsg]) = {
val msg = new WalletEntriesMsg
msg.setEntries(entries)
msg
setParentID(null).
setValidFromMillis(millis).
setValidToMillis(Long.MaxValue).
- setChargingBehaviors(new ju.ArrayList[String]()).
- setResourceTypes(new ju.ArrayList[ResourceTypeMsg]()).
- setRoleMapping(new ju.HashMap[String, FullPriceTableMsg]()).
+ setChargingBehaviors(newJList).
+ setResourceMapping(newJMap).
+ setRoleMapping(newJMap).
build()
}
- def createInitialUserStateMsg(
- usb: UserStateBootstrap,
- defaultResourceTypesMap:Map[String, ResourceType],
- occurredMillis: Long
+ /**
+ * Creates the initial (from the UserActor's perspective) user state.
+ * This may not be the very first user state ever, so we do not set `isFirst`.
+ * @param userID
+ * @param initialCredits
+ * @param occurredMillis
+ * @param originalID
+ * @return
+ */
+ def newInitialUserStateMsg(
+ userID: String,
+ initialCredits: Real,
+ occurredMillis: Long,
+ originalID: String = MessageHelpers.UserStateMsgIDGenerator.nextUID()
): UserStateMsg = {
val bmi = BillingMonthInfo.fromMillis(occurredMillis)
val msg = new UserStateMsg
- msg.setUserID(usb.userID)
+ msg.setUserID(userID)
msg.setOccurredMillis(java.lang.Long.valueOf(occurredMillis))
msg.setBillingYear(java.lang.Integer.valueOf(bmi.year))
msg.setBillingMonth(java.lang.Integer.valueOf(bmi.month))
msg.setBillingMonthDay(java.lang.Integer.valueOf(bmi.day))
- msg.setTotalCredits(java.lang.Double.valueOf(CreditsModel.toTypeInMessage(usb.initialCredits)))
- msg.setAgreementHistory(newInitialUserAgreementHistoryMsg(usb.initialAgreement.msg))
+ msg.setTotalCredits(Real.toMsgField(initialCredits))
msg.setLatestUpdateMillis(java.lang.Long.valueOf(occurredMillis))
msg.setInStoreID(null)
- msg.setOriginalID("") // FIXME get a counter here
- msg.setResourceTypesMap(newResourceTypeMsgsMap(defaultResourceTypesMap))
- msg.setStateOfResources(new java.util.HashMap())
- msg.setWalletEntries(new java.util.ArrayList[WalletEntryMsg]())
+ msg.setOriginalID(originalID)
+ msg.setStateOfResources(newJMap)
+ msg.setWalletEntries(newJList)
+ msg.setUserAgreementHistory(newUserAgreementHistoryMsg(userID))
msg
}
-
}