+ val msg = new ResourceInstanceChargingStateMsg
+ 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.setClientID(clientID)
+ msg.setResource(resource)
+ msg.setInstanceID(instanceID)
+ msg
+ }
+
+ def newEmptyUserAgreementHistoryMsg() = {
+ val msg = new UserAgreementHistoryMsg
+ msg.setAgreements(new ju.ArrayList[UserAgreementMsg]())
+ msg
+ }
+
+ def newInitialUserAgreementHistoryMsg(initialAgreement: UserAgreementMsg) = {
+ val msg = new UserAgreementHistoryMsg
+ val list = new JArrayList[UserAgreementMsg]()
+ list.add(initialAgreement)
+ msg.setAgreements(list)
+ msg
+ }
+
+ def newUserAgreementFromIMEventMsg(
+ imEvent: IMEventMsg,
+ id: String = MessageHelpers.UserAgreementMsgIDGenerator.nextUID()
+ ) = {
+
+ val msg = new UserAgreementMsg
+
+ msg.setId(id)
+ 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
+ }
+
+ def newWalletEntriesMsg(entries: ju.List[WalletEntryMsg] = new ju.ArrayList[WalletEntryMsg]()) = {
+ val msg = new WalletEntriesMsg
+ msg.setEntries(entries)
+ msg
+ }
+
+ def newDummyPolicyMsgAt(millis: Long) : PolicyMsg = {
+ PolicyMsg.newBuilder().
+ setOriginalID("").
+ setInStoreID(null).
+ setParentID(null).
+ setValidFromMillis(millis).
+ setValidToMillis(Long.MaxValue).
+ setChargingBehaviors(new ju.ArrayList[String]()).
+ setResourceTypes(new ju.ArrayList[ResourceTypeMsg]()).
+ setRoleMapping(new ju.HashMap[String, FullPriceTableMsg]()).
+ build()
+ }
+
+ def createInitialUserStateMsg(
+ usb: UserStateBootstrap,
+ defaultResourceTypesMap:Map[String, ResourceType],
+ occurredMillis: Long
+ ): UserStateMsg = {
+
+ val bmi = BillingMonthInfo.fromMillis(occurredMillis)
+ val msg = new UserStateMsg
+
+ msg.setUserID(usb.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.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
+ }
+
+ def toJavaList[A](l:List[A]) : java.util.List[A] = {
+ val al = new java.util.ArrayList[A]()
+ l.foreach(al.add(_))
+ al
+ }
+
+ def chargeEntryMsg(chargeEntry:ChargeEntry) : ChargeEntryMsg = {
+ val msg = new ChargeEntryMsg
+ msg.setId(chargeEntry.id)
+ msg.setUnitPrice(chargeEntry.unitPrice)
+ msg.setStartTime(chargeEntry.startTime)
+ msg.setEndTime(chargeEntry.endTime)
+ msg.setElapsedTime(chargeEntry.elapsedTime)
+ msg.setUnits(chargeEntry.units)
+ msg.setCredits(chargeEntry.credits)
+ msg
+ }
+
+ def eventEntryMsg(eventEntry:EventEntry) : EventEntryMsg = {
+ val msg = new EventEntryMsg
+ msg.setEventType(eventEntry.eventType)
+ msg.setDetails(toJavaList(eventEntry.details.map(chargeEntryMsg(_))))
+ msg
+ }
+
+ def resourceEntryMsg(resourceEntry:ResourceEntry) : ResourceEntryMsg = {
+ val msg = new ResourceEntryMsg
+ msg.setResourceName(resourceEntry.resourceName)
+ msg.setResourceType(resourceEntry.resourceType)
+ msg.setUnitName(resourceEntry.unitName)
+ msg.setTotalCredits(resourceEntry.totalCredits)
+ msg.setTotalElapsedTime(resourceEntry.totalElapsedTime)
+ msg.setTotalUnits(resourceEntry.totalUnits)
+ msg.setDetails(toJavaList(resourceEntry.details.map(eventEntryMsg(_))))
+ msg
+ }
+
+ def createServiceEntryMsg(serviceEntry:ServiceEntry) : ServiceEntryMsg = {
+ val msg = new ServiceEntryMsg
+ msg.setServiceName(serviceEntry.serviceName)
+ msg.setTotalCredits(serviceEntry.totalCredits)
+ msg.setTotalElapsedTime(serviceEntry.totalElapsedTime)
+ msg.setTotalUnits(serviceEntry.totalUnits)
+ msg.setUnitName(serviceEntry.unitName)
+ msg.setDetails(toJavaList(serviceEntry.details.map(resourceEntryMsg(_))))
+ msg
+ }
+ def createBillEntryMsg(billEntry:BillEntry) : BillEntryMsg = {
+ val msg = new BillEntryMsg
+ msg.setId(billEntry.id)
+ msg.setUserID(billEntry.userID)
+ msg.setStatus(billEntry.status)
+ msg.setRemainingCredits(billEntry.remainingCredits)
+ msg.setDeductedCredits(billEntry.deductedCredits)
+ msg.setStartTime(billEntry.startTime)
+ msg.setEndTime(billEntry.endTime)
+ msg.setBill(toJavaList(billEntry.bill.map(createServiceEntryMsg(_))))
+ msg