Event refactoring
authorChristos KK Loverdos <loverdos@gmail.com>
Thu, 10 May 2012 10:15:29 +0000 (13:15 +0300)
committerChristos KK Loverdos <loverdos@gmail.com>
Thu, 10 May 2012 10:15:29 +0000 (13:15 +0300)
48 files changed:
src/main/scala/gr/grnet/aquarium/actor/message/event/ProcessIMEvent.scala
src/main/scala/gr/grnet/aquarium/actor/message/event/ProcessResourceEvent.scala
src/main/scala/gr/grnet/aquarium/actor/service/user/UserActor.scala
src/main/scala/gr/grnet/aquarium/computation/UserState.scala
src/main/scala/gr/grnet/aquarium/computation/UserStateComputations.scala
src/main/scala/gr/grnet/aquarium/computation/UserStateWorker.scala
src/main/scala/gr/grnet/aquarium/computation/data/IMStateSnapshot.scala
src/main/scala/gr/grnet/aquarium/computation/data/IgnoredFirstResourceEventsSnapshot.scala
src/main/scala/gr/grnet/aquarium/computation/data/IgnoredFirstResourceEventsWorker.scala
src/main/scala/gr/grnet/aquarium/computation/data/ImplicitlyIssuedResourceEventsSnapshot.scala
src/main/scala/gr/grnet/aquarium/computation/data/ImplicitlyIssuedResourceEventsWorker.scala
src/main/scala/gr/grnet/aquarium/computation/data/LatestResourceEventsSnapshot.scala
src/main/scala/gr/grnet/aquarium/computation/data/LatestResourceEventsWorker.scala
src/main/scala/gr/grnet/aquarium/computation/reason/UserStateChangeReason.scala
src/main/scala/gr/grnet/aquarium/converter/JsonConversions.scala
src/main/scala/gr/grnet/aquarium/event/ExternalEventSkeleton.scala [deleted file]
src/main/scala/gr/grnet/aquarium/event/model/EventModel.scala [moved from src/main/scala/gr/grnet/aquarium/event/EventModel.scala with 96% similarity]
src/main/scala/gr/grnet/aquarium/event/model/ExternalEventModel.scala [moved from src/main/scala/gr/grnet/aquarium/event/ExternalEventModel.scala with 98% similarity]
src/main/scala/gr/grnet/aquarium/event/model/NewWalletEntry.scala [moved from src/main/scala/gr/grnet/aquarium/event/NewWalletEntry.scala with 97% similarity]
src/main/scala/gr/grnet/aquarium/event/model/PolicyEntry.scala [moved from src/main/scala/gr/grnet/aquarium/event/PolicyEntry.scala with 76% similarity]
src/main/scala/gr/grnet/aquarium/event/model/WalletEntry.scala [moved from src/main/scala/gr/grnet/aquarium/event/WalletEntry.scala with 74% similarity]
src/main/scala/gr/grnet/aquarium/event/model/im/IMEventModel.scala [moved from src/main/scala/gr/grnet/aquarium/event/im/IMEventModel.scala with 96% similarity]
src/main/scala/gr/grnet/aquarium/event/model/im/StdIMEvent.scala [moved from src/main/scala/gr/grnet/aquarium/event/im/StdIMEvent.scala with 98% similarity]
src/main/scala/gr/grnet/aquarium/event/model/resource/ResourceEventModel.scala [moved from src/main/scala/gr/grnet/aquarium/event/resource/ResourceEventModel.scala with 98% similarity]
src/main/scala/gr/grnet/aquarium/event/model/resource/StdResourceEvent.scala [moved from src/main/scala/gr/grnet/aquarium/event/resource/StdResourceEvent.scala with 98% similarity]
src/main/scala/gr/grnet/aquarium/logic/accounting/Accounting.scala
src/main/scala/gr/grnet/aquarium/logic/accounting/dsl/DSLCostPolicy.scala
src/main/scala/gr/grnet/aquarium/logic/accounting/dsl/DSLPolicy.scala
src/main/scala/gr/grnet/aquarium/service/EventProcessorService.scala
src/main/scala/gr/grnet/aquarium/service/IMEventProcessorService.scala
src/main/scala/gr/grnet/aquarium/service/ResourceEventProcessorService.scala
src/main/scala/gr/grnet/aquarium/simulation/ResourceInstanceSim.scala
src/main/scala/gr/grnet/aquarium/simulation/StdVMTimeInstanceSim.scala
src/main/scala/gr/grnet/aquarium/simulation/UserSim.scala
src/main/scala/gr/grnet/aquarium/store/IMEventStore.scala
src/main/scala/gr/grnet/aquarium/store/LocalFSEventStore.scala
src/main/scala/gr/grnet/aquarium/store/PolicyStore.scala
src/main/scala/gr/grnet/aquarium/store/ResourceEventStore.scala
src/main/scala/gr/grnet/aquarium/store/WalletEntryStore.scala
src/main/scala/gr/grnet/aquarium/store/memory/MemStore.scala
src/main/scala/gr/grnet/aquarium/store/memory/package.scala
src/main/scala/gr/grnet/aquarium/store/mongodb/MongoDBEventModel.scala
src/main/scala/gr/grnet/aquarium/store/mongodb/MongoDBIMEvent.scala
src/main/scala/gr/grnet/aquarium/store/mongodb/MongoDBResourceEvent.scala
src/main/scala/gr/grnet/aquarium/store/mongodb/MongoDBStore.scala
src/main/scala/gr/grnet/aquarium/util/RandomEventGenerator.scala
src/test/scala/gr/grnet/aquarium/logic/test/AccountingTest.scala
src/test/scala/gr/grnet/aquarium/store/mongodb/EventStoreTest.scala

index 4d7fabe..7dc3dc0 100644 (file)
@@ -35,8 +35,8 @@
 
 package gr.grnet.aquarium.actor.message.event
 
-import gr.grnet.aquarium.event.im.IMEventModel
 import gr.grnet.aquarium.actor.message.{UserActorRequestMessage, ActorMessage}
+import gr.grnet.aquarium.event.model.im.IMEventModel
 
 /**
  * [[gr.grnet.aquarium.actor.service.router.RouterActor]] message
index f9ce93d..fae5cad 100644 (file)
@@ -35,8 +35,8 @@
 
 package gr.grnet.aquarium.actor.message.event
 
-import gr.grnet.aquarium.event.resource.ResourceEventModel
 import gr.grnet.aquarium.actor.message.{UserActorRequestMessage, ActorMessage}
+import gr.grnet.aquarium.event.model.resource.ResourceEventModel
 
 /**
  * [[gr.grnet.aquarium.actor.service.router.RouterActor]] message
index 96c4d61..77ebfb9 100644 (file)
@@ -41,7 +41,6 @@ import gr.grnet.aquarium.actor._
 
 import gr.grnet.aquarium.util.shortClassNameOf
 import message.config.{ActorProviderConfigured, AquariumPropertiesLoaded}
-import gr.grnet.aquarium.event.im.IMEventModel
 import akka.config.Supervision.Temporary
 import gr.grnet.aquarium.Configurator
 import gr.grnet.aquarium.util.date.{TimeHelpers, MutableDateCalc}
@@ -49,6 +48,7 @@ import gr.grnet.aquarium.actor.message.event.{ProcessResourceEvent, ProcessIMEve
 import gr.grnet.aquarium.actor.message.{GetUserStateResponse, GetUserBalanceResponse, GetUserStateRequest, GetUserBalanceRequest}
 import gr.grnet.aquarium.computation.data.IMStateSnapshot
 import gr.grnet.aquarium.computation.UserState
+import gr.grnet.aquarium.event.model.im.IMEventModel
 
 /**
  *
index 74ade1c..57318e7 100644 (file)
 
 package gr.grnet.aquarium.computation
 
-import gr.grnet.aquarium.converter.{JsonTextFormat, StdConverters}
-import gr.grnet.aquarium.event.{NewWalletEntry, WalletEntry}
 import org.bson.types.ObjectId
+
+import gr.grnet.aquarium.AquariumInternalError
+import gr.grnet.aquarium.converter.{JsonTextFormat, StdConverters}
+import gr.grnet.aquarium.event.model.{WalletEntry, NewWalletEntry}
 import gr.grnet.aquarium.util.json.JsonSupport
 import gr.grnet.aquarium.logic.accounting.dsl.DSLAgreement
-import com.ckkloverdos.maybe.Maybe
 import gr.grnet.aquarium.computation.reason.{NoSpecificChangeReason, UserStateChangeReason, InitialUserStateSetup, IMEventArrival}
-import gr.grnet.aquarium.AquariumInternalError
 import gr.grnet.aquarium.computation.data.{AgreementSnapshot, ResourceInstanceSnapshot, OwnedResourcesSnapshot, AgreementsSnapshot, CreditSnapshot, LatestResourceEventsSnapshot, ImplicitlyIssuedResourceEventsSnapshot, IMStateSnapshot}
-import gr.grnet.aquarium.event.im.{StdIMEvent, IMEventModel}
+import gr.grnet.aquarium.event.model.im.{StdIMEvent, IMEventModel}
 
 /**
  * A comprehensive representation of the User's state.
index 09b1773..7f0a5bf 100644 (file)
 package gr.grnet.aquarium.computation
 
 import scala.collection.mutable
+import gr.grnet.aquarium.{AquariumInternalError, AquariumException}
 import gr.grnet.aquarium.util.{ContextualLogger, Loggable}
 import gr.grnet.aquarium.util.date.{TimeHelpers, MutableDateCalc}
-import gr.grnet.aquarium.logic.accounting.dsl.{DSLAgreement, DSLResourcesMap}
-import gr.grnet.aquarium.store.{StoreProvider, PolicyStore}
+import gr.grnet.aquarium.logic.accounting.dsl.DSLResourcesMap
 import gr.grnet.aquarium.logic.accounting.Accounting
 import gr.grnet.aquarium.logic.accounting.algorithm.CostPolicyAlgorithmCompiler
-import gr.grnet.aquarium.event.NewWalletEntry
-import gr.grnet.aquarium.event.resource.ResourceEventModel
-import gr.grnet.aquarium.event.im.{IMEventModel, StdIMEvent}
-import gr.grnet.aquarium.{AquariumInternalError, AquariumException}
+import gr.grnet.aquarium.store.{StoreProvider, PolicyStore}
 import gr.grnet.aquarium.computation.data._
-import gr.grnet.aquarium.computation.reason.{NoSpecificChangeReason, UserStateChangeReason, InitialUserStateSetup}
+import gr.grnet.aquarium.computation.reason.{NoSpecificChangeReason, UserStateChangeReason}
+import gr.grnet.aquarium.event.model.NewWalletEntry
+import gr.grnet.aquarium.event.model.resource.ResourceEventModel
 
 /**
  *
index ab5abb3..6c0fb30 100644 (file)
@@ -38,9 +38,9 @@ package gr.grnet.aquarium.computation
 import scala.collection.mutable
 import gr.grnet.aquarium.logic.accounting.dsl.DSLResourcesMap
 import gr.grnet.aquarium.logic.accounting.Accounting
-import gr.grnet.aquarium.event.resource.ResourceEventModel
 import gr.grnet.aquarium.computation.data.{LatestResourceEventsWorker, ImplicitlyIssuedResourceEventsWorker, IgnoredFirstResourceEventsWorker}
 import gr.grnet.aquarium.util.ContextualLogger
+import gr.grnet.aquarium.event.model.resource.ResourceEventModel
 
 /**
  * A helper object holding intermediate state/results during resource event processing.
index 37efd53..4954c83 100644 (file)
@@ -35,7 +35,7 @@
 
 package gr.grnet.aquarium.computation.data
 
-import gr.grnet.aquarium.event.im.IMEventModel
+import gr.grnet.aquarium.event.model.im.IMEventModel
 
 /**
  *
index 7936784..ee640b9 100644 (file)
@@ -36,8 +36,8 @@
 package gr.grnet.aquarium.computation.data
 
 import gr.grnet.aquarium.util.findAndRemoveFromMap
-import gr.grnet.aquarium.event.resource.ResourceEventModel
-import gr.grnet.aquarium.event.resource.ResourceEventModel.FullMutableResourceTypeMap
+import gr.grnet.aquarium.event.model.resource.ResourceEventModel
+import gr.grnet.aquarium.event.model.resource.ResourceEventModel.FullMutableResourceTypeMap
 
 /**
  *
index 52b94fc..7921053 100644 (file)
 
 package gr.grnet.aquarium.computation.data
 
-import gr.grnet.aquarium.event.resource.ResourceEventModel
+import gr.grnet.aquarium.event.model.resource.ResourceEventModel
 
 /**
  * Keeps the implicit OFF events when a billing period ends.
- * This is normally recorded in the [[gr.grnet.aquarium.user.UserState]].
+ * This is normally recorded in the [[gr.grnet.aquarium.computation.UserState]].
  *
  * @author Christos KK Loverdos <loverdos@gmail.com>
  */
index 0aec78d..e05c9a3 100644 (file)
@@ -36,8 +36,8 @@
 package gr.grnet.aquarium.computation.data
 
 import gr.grnet.aquarium.util.findAndRemoveFromMap
-import gr.grnet.aquarium.event.resource.ResourceEventModel
-import gr.grnet.aquarium.event.resource.ResourceEventModel.FullMutableResourceTypeMap
+import gr.grnet.aquarium.event.model.resource.ResourceEventModel
+import gr.grnet.aquarium.event.model.resource.ResourceEventModel.FullMutableResourceTypeMap
 
 
 /**
index 6c86f7f..8c66c8c 100644 (file)
@@ -35,7 +35,7 @@
 
 package gr.grnet.aquarium.computation.data
 
-import gr.grnet.aquarium.event.resource.ResourceEventModel
+import gr.grnet.aquarium.event.model.resource.ResourceEventModel
 
 /**
  * Keeps the latest resource event per resource instance.
index 9690050..95d62a1 100644 (file)
@@ -36,8 +36,8 @@
 package gr.grnet.aquarium.computation.data
 
 import gr.grnet.aquarium.util.findAndRemoveFromMap
-import gr.grnet.aquarium.event.resource.ResourceEventModel
-import gr.grnet.aquarium.event.resource.ResourceEventModel.FullMutableResourceTypeMap
+import gr.grnet.aquarium.event.model.resource.ResourceEventModel
+import gr.grnet.aquarium.event.model.resource.ResourceEventModel.FullMutableResourceTypeMap
 
 /**
  * This is the mutable cousin of [[gr.grnet.aquarium.computation.data.LatestResourceEventsSnapshot]].
index 556df83..52a8fa3 100644 (file)
 package gr.grnet.aquarium.computation.reason
 
 import gr.grnet.aquarium.computation.BillingMonthInfo
-import gr.grnet.aquarium.event.im.IMEventModel
+import gr.grnet.aquarium.event.model.im.IMEventModel
 
 sealed trait UserStateChangeReason {
   /**
-      * Return `true` if the result of the calculation should be stored back to the
-      * [[gr.grnet.aquarium.store.UserStateStore]].
-      *
-      */
-     def shouldStoreUserState: Boolean
+    * Return `true` if the result of the calculation should be stored back to the
+    * [[gr.grnet.aquarium.store.UserStateStore]].
+    *
+    */
+  def shouldStoreUserState: Boolean
 
   def shouldStoreCalculatedWalletEntries: Boolean
 
index 3a5cc8b..0dc4e0f 100644 (file)
@@ -38,8 +38,6 @@ package gr.grnet.aquarium.converter
 import net.liftweb.json.JsonAST.JValue
 import net.liftweb.json._
 import ext.JodaTimeSerializers
-import gr.grnet.aquarium.event.ExternalEventSkeleton
-
 
 /**
  * Provides conversion methods from and to JSON.
@@ -53,8 +51,7 @@ object JsonConversions {
   /**
    * The application-wide JSON formats used from the underlying lift-json library.
    */
-  implicit val Formats = (DefaultFormats ++ JodaTimeSerializers.all) +
-    FieldSerializer[ExternalEventSkeleton]()
+  implicit val Formats = (DefaultFormats ++ JodaTimeSerializers.all)
 
   /**
    * Converts a value to JSON AST (Abstract Syntax Tree) by acting a bit intelligently, depending on the actual type
diff --git a/src/main/scala/gr/grnet/aquarium/event/ExternalEventSkeleton.scala b/src/main/scala/gr/grnet/aquarium/event/ExternalEventSkeleton.scala
deleted file mode 100644 (file)
index d276aa7..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright 2011-2012 GRNET S.A. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or
- * without modification, are permitted provided that the following
- * conditions are met:
- *
- *   1. Redistributions of source code must retain the above
- *      copyright notice, this list of conditions and the following
- *      disclaimer.
- *
- *   2. Redistributions in binary form must reproduce the above
- *      copyright notice, this list of conditions and the following
- *      disclaimer in the documentation and/or other materials
- *      provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
- * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- * The views and conclusions contained in the software and
- * documentation are those of the authors and should not be
- * interpreted as representing official policies, either expressed
- * or implied, of GRNET S.A.
- */
-
-package gr.grnet.aquarium
-package event
-
-
-import util.xml.XmlSupport
-import util.Loggable
-
-/**
- * Generic base class for all Aquarium events
- *
- * @author Georgios Gousios <gousiosg@gmail.com>
- * @author Christos KK Loverdos <loverdos@gmail.com>
- */
-abstract class ExternalEventSkeleton(
-    _id: String,           // The id at the client side (the sender) TODO: Rename to remoteId or something...
-    _occurredMillis: Long, // When it occurred at client side (the sender)
-    _receivedMillis: Long, // When it was received by Aquarium
-    _eventVersion: String
-)
-  extends ExternalEventModel
-  with    XmlSupport
-  with    Loggable {
-
-  def id = _id
-  def occurredMillis = _occurredMillis
-  def receivedMillis = _receivedMillis
-  def eventVersion = _eventVersion
-
-  def details: Map[String, String] = Map()
-}
  * or implied, of GRNET S.A.
  */
 
-package gr.grnet.aquarium.event
+package gr.grnet.aquarium.event.model
 
 /**
  * Basic properties for all events.
  * An event represents some state change, where state is specific to the use-case.
  *
- *@author Christos KK Loverdos <loverdos@gmail.com>
+ * @author Christos KK Loverdos <loverdos@gmail.com>
  */
 
 trait EventModel {
@@ -69,7 +69,6 @@ trait EventModel {
   def withDetails(newDetails: Map[String, String], newOccurredMillis: Long): EventModel
 }
 
-
 object EventModel {
   trait NamesT {
     final val id = "id"
@@ -80,4 +79,4 @@ object EventModel {
   }
 
   object Names extends NamesT
-}
\ No newline at end of file
+}
  * or implied, of GRNET S.A.
  */
 
-package gr.grnet.aquarium.event
+package gr.grnet.aquarium.event.model
 
-import gr.grnet.aquarium.util.json.JsonSupport
 import gr.grnet.aquarium.util.makeBytes
+import gr.grnet.aquarium.util.json.JsonSupport
 import gr.grnet.aquarium.util.xml.XmlSupport
 
 /**
  * or implied, of GRNET S.A.
  */
 
-package gr.grnet.aquarium
-package event
+package gr.grnet.aquarium.event.model
 
 import gr.grnet.aquarium.logic.accounting.Chargeslot
 import gr.grnet.aquarium.util.date.MutableDateCalc
 import gr.grnet.aquarium.logic.accounting.dsl.{Timeslot, DSLResource}
-import converter.{JsonTextFormat, StdConverters}
 import resource.ResourceEventModel
+import gr.grnet.aquarium.converter.{JsonTextFormat, StdConverters}
 
 /**
  * The following equation must hold: `newTotalCredits = oldTotalCredits + entryCredits`.
@@ -72,9 +71,13 @@ case class NewWalletEntry(userId: String,
                           isSynthetic: Boolean) {
 
   def currentResourceEvent = resourceEvents.head
+
   def resource = currentResourceEvent.resource
+
   def instanceId = currentResourceEvent.instanceID
+
   def chargslotCount = chargeslots.length
+
   def isOutOfSync = currentResourceEvent.isOutOfSyncForBillingMonth(yearOfBillingMonth, billingMonth)
 
   def toDebugString = "%s%s(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)".format(
@@ -113,4 +116,5 @@ object NewWalletEntry {
     final val chargeslots = "chargeslots"
     final val resourceDef = "resourceDef"
   }
+
 }
  * or implied, of GRNET S.A.
  */
 
-package gr.grnet.aquarium
-package event
+package gr.grnet.aquarium.event.model
 
 import gr.grnet.aquarium.logic.accounting.dsl.Timeslot
 import java.util.Date
-import converter.{JsonTextFormat, StdConverters}
+import gr.grnet.aquarium.converter.{JsonTextFormat, StdConverters}
 
 /**
  * Store entry for serialized policy data.
@@ -46,16 +45,16 @@ import converter.{JsonTextFormat, StdConverters}
  * @author Georgios Gousios <gousiosg@gmail.com>
  */
 case class PolicyEntry(
-    id: String,           //SHA-1 of the provided policyYaml string
-    occurredMillis: Long, //Time this event was stored
-    receivedMillis: Long, //Does not make sense for local events -> not used
-    policyYAML: String,                //The serialized policy
-    validFrom: Long,                   //The timestamp since when the policy is valid
-    validTo: Long,                      //The timestamp until when the policy is valid
-    eventVersion: String = "1.0",
-    userID: String = "",
-    details: Map[String, String] = Map()
- ) extends ExternalEventModel {
+                        id: String, //SHA-1 of the provided policyYaml string
+                        occurredMillis: Long, //Time this event was stored
+                        receivedMillis: Long, //Does not make sense for local events -> not used
+                        policyYAML: String, //The serialized policy
+                        validFrom: Long, //The timestamp since when the policy is valid
+                        validTo: Long, //The timestamp until when the policy is valid
+                        eventVersion: String = "1.0",
+                        userID: String = "",
+                        details: Map[String, String] = Map()
+                        ) extends ExternalEventModel {
 
   assert(if(validTo != -1) validTo > validFrom else validFrom > 0)
 
@@ -84,4 +83,5 @@ object PolicyEntry {
     final val validFrom = "validFrom"
     final val validTo = "validTo"
   }
+
 }
\ No newline at end of file
  * or implied, of GRNET S.A.
  */
 
-package gr.grnet.aquarium
-package event
+package gr.grnet.aquarium.event.model
 
 import java.util.Date
-import converter.{JsonTextFormat, StdConverters}
-import util.json.JsonSupport
+import gr.grnet.aquarium.converter.{JsonTextFormat, StdConverters}
 
 /**
  * A WalletEntry is a derived entity. Its data represent money/credits and are calculated based on
@@ -50,20 +48,20 @@ import util.json.JsonSupport
  * @author Christos KK Loverdos <loverdos@gmail.com>
  */
 case class WalletEntry(
-    id: String,           // The id at the client side (the sender) TODO: Rename to remoteId or something...
-    occurredMillis: Long, // The time of oldest matching resource event
-    receivedMillis: Long, // The time the cost calculation was done
-    sourceEventIDs: List[String],      // The events that triggered this WalletEntry
-    value: Double,
-    reason: String,
-    userId: String,
-    resource: String,
-    instanceId: String,
-    finalized: Boolean,
-    eventVersion: String = "1.0",
-    userID: String = "",
-    details: Map[String, String] = Map()
-) extends ExternalEventModel {
+                        id: String, // The id at the client side (the sender) TODO: Rename to remoteId or something...
+                        occurredMillis: Long, // The time of oldest matching resource event
+                        receivedMillis: Long, // The time the cost calculation was done
+                        sourceEventIDs: List[String], // The events that triggered this WalletEntry
+                        value: Double,
+                        reason: String,
+                        userId: String,
+                        resource: String,
+                        instanceId: String,
+                        finalized: Boolean,
+                        eventVersion: String = "1.0",
+                        userID: String = "",
+                        details: Map[String, String] = Map()
+                        ) extends ExternalEventModel {
 
 
   assert(occurredMillis > 0)
@@ -71,7 +69,7 @@ case class WalletEntry(
   assert(!userId.isEmpty)
 
   def validate = true
-  
+
   def fromResourceEvent(rceId: String): Boolean = {
     sourceEventIDs contains rceId
   }
@@ -82,6 +80,7 @@ case class WalletEntry(
     this.copy(details = newDetails, occurredMillis = newOccurredMillis)
 
   def occurredDate = new Date(occurredMillis)
+
   def receivedDate = new Date(receivedMillis)
 }
 
@@ -90,7 +89,7 @@ object WalletEntry {
     StdConverters.AllConverters.convertEx[WalletEntry](JsonTextFormat(json))
   }
 
-  def zero = WalletEntry("", 1L, 1L, Nil,1,"","foo", "bar", "0", false)
+  def zero = WalletEntry("", 1L, 1L, Nil, 1, "", "foo", "bar", "0", false)
 
   object JsonNames {
     final val _id = "_id"
@@ -105,4 +104,5 @@ object WalletEntry {
     final val instanceId = "instanceId"
     final val finalized = "finalized"
   }
+
 }
\ No newline at end of file
@@ -33,9 +33,8 @@
  * or implied, of GRNET S.A.
  */
 
-package gr.grnet.aquarium.event.im
-
-import gr.grnet.aquarium.event.ExternalEventModel
+package gr.grnet.aquarium.event.model
+package im
 
 /**
  * The model of any event sent from the `Identity Management` (IM) external system.
@@ -33,7 +33,8 @@
  * or implied, of GRNET S.A.
  */
 
-package gr.grnet.aquarium.event.im
+package gr.grnet.aquarium.event.model
+package im
 
 import gr.grnet.aquarium.util.makeString
 import gr.grnet.aquarium.converter.{JsonTextFormat, StdConverters}
  * or implied, of GRNET S.A.
  */
 
-package gr.grnet.aquarium.event
+package gr.grnet.aquarium.event.model
 package resource
 
 import java.util.Date
 import gr.grnet.aquarium.util.date.MutableDateCalc
+import gr.grnet.aquarium.event.model.ExternalEventModel
 
 /**
  * The model of any resource event.
index 60726a8..38af280 100644 (file)
@@ -43,10 +43,10 @@ import java.util.Date
 import com.ckkloverdos.maybe.{NoVal, Maybe, Failed, Just}
 import gr.grnet.aquarium.util.{ContextualLogger, CryptoUtils, Loggable}
 import gr.grnet.aquarium.store.PolicyStore
-import gr.grnet.aquarium.event.{WalletEntry}
+import gr.grnet.aquarium.event.model.WalletEntry
 import gr.grnet.aquarium.util.date.{TimeHelpers, MutableDateCalc}
-import gr.grnet.aquarium.event.resource.ResourceEventModel
 import gr.grnet.aquarium.{AquariumInternalError, AquariumException}
+import gr.grnet.aquarium.event.model.resource.ResourceEventModel
 
 /**
  * A timeslot together with the algorithm and unit price that apply for this particular timeslot.
index 7a0b78a..9624cb3 100644 (file)
@@ -37,7 +37,7 @@ package gr.grnet.aquarium.logic.accounting.dsl
 
 import com.ckkloverdos.maybe.{NoVal, Failed, Just, Maybe}
 import gr.grnet.aquarium.AquariumException
-import gr.grnet.aquarium.event.resource.ResourceEventModel
+import gr.grnet.aquarium.event.model.resource.ResourceEventModel
 
 /**
  * A cost policy indicates how charging for a resource will be done
@@ -105,14 +105,14 @@ abstract class DSLCostPolicy(val name: String, val vars: Set[DSLCostPolicyVar])
   }
 
   /**
-   * Given the old amount of a resource instance (see [[gr.grnet.aquarium.user.ResourceInstanceSnapshot]]) and the
+   * Given the old amount of a resource instance (see [[gr.grnet.aquarium.computation.data.ResourceInstanceSnapshot]]) and the
    * value arriving in a new resource event, compute the new instance amount.
    *
    * Note that the `oldAmount` does not make sense for all types of [[gr.grnet.aquarium.logic.accounting.dsl.DSLCostPolicy]],
    * in which case it is ignored.
    *
    * @param oldAmount the old accumulating amount
-   * @param newEventValue the value contained in a newly arrived [[gr.grnet.aquarium.event.resource.ResourceEventModel]]
+   * @param newEventValue the value contained in a newly arrived [[gr.grnet.aquarium.event.model.resource.ResourceEventModel]]
    * @return
    */
   def computeNewAccumulatingAmount(oldAmount: Double, newEventValue: Double): Double
index 2ae73f6..a7b48e9 100644 (file)
@@ -37,7 +37,7 @@ package gr.grnet.aquarium.logic.accounting.dsl
 
 import gr.grnet.aquarium.util.CryptoUtils
 import gr.grnet.aquarium.util.date.TimeHelpers
-import gr.grnet.aquarium.event.PolicyEntry
+import gr.grnet.aquarium.event.model.PolicyEntry
 
 /**
  * Root object for the Aquarium policy configuration tree.
index 4c4eafc..3f81aee 100644 (file)
@@ -48,11 +48,10 @@ import akka.config.Supervision.OneForOneStrategy
 import gr.grnet.aquarium.messaging.AkkaAMQP
 import akka.amqp._
 import java.util.concurrent.{ConcurrentHashMap, ConcurrentSkipListSet}
-import com.ckkloverdos.maybe._
 import gr.grnet.aquarium.util.date.TimeHelpers
 import gr.grnet.aquarium.{AquariumException, Configurator}
-import gr.grnet.aquarium.event.ExternalEventModel
 import gr.grnet.aquarium.actor.ReflectiveActor
+import gr.grnet.aquarium.event.model.ExternalEventModel
 
 /**
  * An abstract service that retrieves Aquarium events from a queue,
index a103d1d..b3f8426 100644 (file)
@@ -42,8 +42,8 @@ import gr.grnet.aquarium.store.LocalFSEventStore
 import gr.grnet.aquarium.util.date.TimeHelpers
 import gr.grnet.aquarium.util.makeString
 import com.ckkloverdos.maybe._
-import gr.grnet.aquarium.event.im.{StdIMEvent, IMEventModel}
 import gr.grnet.aquarium.actor.message.event.ProcessIMEvent
+import gr.grnet.aquarium.event.model.im.{StdIMEvent, IMEventModel}
 
 /**
  * An event processor service for user events coming from the IM system
index 89d597b..c029ce6 100644 (file)
@@ -40,7 +40,7 @@ import gr.grnet.aquarium.Configurator.Keys
 import gr.grnet.aquarium.store.LocalFSEventStore
 import com.ckkloverdos.maybe.Maybe
 import gr.grnet.aquarium.util.date.TimeHelpers
-import gr.grnet.aquarium.event.resource.{StdResourceEvent, ResourceEventModel}
+import gr.grnet.aquarium.event.model.resource.{StdResourceEvent, ResourceEventModel}
 import gr.grnet.aquarium.actor.message.event.ProcessResourceEvent
 
 
index 18a8e35..bbad767 100644 (file)
@@ -35,7 +35,7 @@
 
 package gr.grnet.aquarium.simulation
 
-import gr.grnet.aquarium.event.resource.StdResourceEvent
+import gr.grnet.aquarium.event.model.resource.StdResourceEvent
 
 
 /**
index 75e234e..f309eaa 100644 (file)
 package gr.grnet.aquarium.simulation
 
 import gr.grnet.aquarium.logic.accounting.dsl.OnOffCostPolicyValues
-import gr.grnet.aquarium.store.RecordID
 import java.util.Date
 import gr.grnet.aquarium.util.date.MutableDateCalc
-import gr.grnet.aquarium.event.resource.ResourceEventModel
+import gr.grnet.aquarium.event.model.resource.ResourceEventModel
 
 /**
  * A simulator for an instance of the standard `vmtime` resource.
index 6355e74..dd5cd0b 100644 (file)
@@ -35,9 +35,8 @@
 package gr.grnet.aquarium.simulation
 
 import java.util.Date
-import gr.grnet.aquarium.store.RecordID
 import math.Ordering
-import gr.grnet.aquarium.event.resource.ResourceEventModel
+import gr.grnet.aquarium.event.model.resource.ResourceEventModel
 
 /**
  * A simulator for a user.
index 8dd4e80..811e34b 100644 (file)
@@ -35,9 +35,9 @@
 
 package gr.grnet.aquarium.store
 
-import gr.grnet.aquarium.event.im.IMEventModel
 import gr.grnet.aquarium.util.makeString
-import gr.grnet.aquarium.event.resource.ResourceEventModel
+import gr.grnet.aquarium.event.model.im.IMEventModel
+import gr.grnet.aquarium.event.model.resource.ResourceEventModel
 
 /**
  * Store for external user events
index aa196d5..06dbaa8 100644 (file)
@@ -39,8 +39,8 @@ import gr.grnet.aquarium.Configurator
 import java.io.{FileOutputStream, File}
 import gr.grnet.aquarium.util.{Loggable, stringOfStackTrace}
 import gr.grnet.aquarium.util.date.{TimeHelpers, MutableDateCalc}
-import gr.grnet.aquarium.event.im.IMEventModel
-import gr.grnet.aquarium.event.resource.ResourceEventModel
+import gr.grnet.aquarium.event.model.im.IMEventModel
+import gr.grnet.aquarium.event.model.resource.ResourceEventModel
 
 /**
  * This is used whenever the property `events.store.folder` is setup in aquarium configuration.
index a9a58c4..f587271 100644 (file)
@@ -38,8 +38,8 @@ package gr.grnet.aquarium.store
 import scala.collection.immutable
 import collection.immutable.SortedMap
 import gr.grnet.aquarium.logic.accounting.dsl.{DSL, DSLPolicy, Timeslot}
-import com.ckkloverdos.maybe.{NoVal, Just, Maybe}
-import gr.grnet.aquarium.event.PolicyEntry
+import com.ckkloverdos.maybe.Maybe
+import gr.grnet.aquarium.event.model.PolicyEntry
 
 /**
  * A store for serialized policy entries.
index 4eb6016..cbc9380 100644 (file)
@@ -35,9 +35,8 @@
 
 package gr.grnet.aquarium.store
 
-import com.ckkloverdos.maybe.Maybe
 import gr.grnet.aquarium.AquariumException
-import gr.grnet.aquarium.event.resource.ResourceEventModel
+import gr.grnet.aquarium.event.model.resource.ResourceEventModel
 
 /**
  * An abstraction for Aquarium `ResourceEvent` stores.
index 65aa74d..0053cc7 100644 (file)
@@ -37,7 +37,7 @@ package gr.grnet.aquarium.store
 
 import java.util.Date
 import com.ckkloverdos.maybe.Maybe
-import gr.grnet.aquarium.event.WalletEntry
+import gr.grnet.aquarium.event.model.WalletEntry
 
 /**
  * A store for Wallet entries.
index 8adb68c..871594e 100644 (file)
@@ -44,10 +44,10 @@ import collection.mutable.ConcurrentMap
 import java.util.concurrent.ConcurrentHashMap
 import gr.grnet.aquarium.uid.ConcurrentVMLocalUIDGenerator
 import gr.grnet.aquarium.Configurable
-import gr.grnet.aquarium.event.{WalletEntry, PolicyEntry}
-import gr.grnet.aquarium.event.im.{StdIMEvent, IMEventModel}
+import gr.grnet.aquarium.event.model.{WalletEntry, PolicyEntry}
+import gr.grnet.aquarium.event.model.im.{StdIMEvent, IMEventModel}
 import org.bson.types.ObjectId
-import gr.grnet.aquarium.event.resource.{StdResourceEvent, ResourceEventModel}
+import gr.grnet.aquarium.event.model.resource.{StdResourceEvent, ResourceEventModel}
 import gr.grnet.aquarium.computation.UserState
 
 /**
index 65aeaf4..b29af44 100644 (file)
@@ -35,8 +35,8 @@
 
 package gr.grnet.aquarium.store
 
-import gr.grnet.aquarium.event.im.StdIMEvent
-import gr.grnet.aquarium.event.resource.StdResourceEvent
+import gr.grnet.aquarium.event.model.im.StdIMEvent
+import gr.grnet.aquarium.event.model.resource.StdResourceEvent
 
 package object memory {
   type MemIMEvent = StdIMEvent
index 3193d23..05382ad 100644 (file)
@@ -35,8 +35,7 @@
 
 package gr.grnet.aquarium.store.mongodb
 
-import org.bson.types.ObjectId
-import gr.grnet.aquarium.event.ExternalEventModel
+import gr.grnet.aquarium.event.model.ExternalEventModel
 
 /**
  *
index a407d49..bd2713c 100644 (file)
 
 package gr.grnet.aquarium.store.mongodb
 
-import org.bson.types.ObjectId
 import gr.grnet.aquarium.converter.{JsonTextFormat, StdConverters}
 import gr.grnet.aquarium.util._
-import gr.grnet.aquarium.event.im.{IMEventModel, StdIMEvent}
-import gr.grnet.aquarium.event.ExternalEventModel
 import com.mongodb.DBObject
 import com.mongodb.util.JSON
+import gr.grnet.aquarium.event.model.im.IMEventModel
 
 
 /**
index a31d3a9..39b6711 100644 (file)
 
 package gr.grnet.aquarium.store.mongodb
 
-import org.bson.types.ObjectId
 import com.mongodb.DBObject
 
 import gr.grnet.aquarium.util.makeString
-import gr.grnet.aquarium.event.resource.ResourceEventModel
 import gr.grnet.aquarium.converter.{StdConverters, JsonTextFormat}
 import com.mongodb.util.JSON
+import gr.grnet.aquarium.event.model.resource.ResourceEventModel
 
 /**
- * A [[gr.grnet.aquarium.event.resource.ResourceEventModel]] as represented for MongoDB.
+ * A [[gr.grnet.aquarium.event.model.resource.ResourceEventModel]] as represented for MongoDB.
  *
  * @author Christos KK Loverdos <loverdos@gmail.com>
  */
@@ -89,6 +88,7 @@ object MongoDBResourceEvent {
 
   final def fromOther(rcEvent: ResourceEventModel, _id: String): MongoDBResourceEvent = {
     import rcEvent._
+
     MongoDBResourceEvent(
       id,
       occurredMillis,
index 870fd13..dd4e359 100644 (file)
@@ -39,14 +39,13 @@ import com.mongodb.util.JSON
 import gr.grnet.aquarium.computation.UserState.{JsonNames ⇒ UserStateJsonNames}
 import gr.grnet.aquarium.util.json.JsonSupport
 import collection.mutable.ListBuffer
-import gr.grnet.aquarium.event._
-import gr.grnet.aquarium.event.im.IMEventModel
-import gr.grnet.aquarium.event.im.IMEventModel.{Names ⇒ IMEventNames}
-import gr.grnet.aquarium.event.resource.ResourceEventModel
-import gr.grnet.aquarium.event.resource.ResourceEventModel.{Names ⇒ ResourceEventNames}
+import gr.grnet.aquarium.event.model.im.IMEventModel
+import gr.grnet.aquarium.event.model.im.IMEventModel.{Names ⇒ IMEventNames}
+import gr.grnet.aquarium.event.model.resource.ResourceEventModel
+import gr.grnet.aquarium.event.model.resource.ResourceEventModel.{Names ⇒ ResourceEventNames}
 import gr.grnet.aquarium.store._
-import gr.grnet.aquarium.event.WalletEntry.{JsonNames ⇒ WalletJsonNames}
-import gr.grnet.aquarium.event.PolicyEntry.{JsonNames ⇒ PolicyJsonNames}
+import gr.grnet.aquarium.event.model.WalletEntry.{JsonNames ⇒ WalletJsonNames}
+import gr.grnet.aquarium.event.model.PolicyEntry.{JsonNames ⇒ PolicyJsonNames}
 import java.util.Date
 import gr.grnet.aquarium.logic.accounting.Policy
 import com.mongodb._
@@ -55,6 +54,7 @@ import com.ckkloverdos.maybe.Maybe
 import gr.grnet.aquarium.util._
 import gr.grnet.aquarium.converter.Conversions
 import gr.grnet.aquarium.computation.UserState
+import gr.grnet.aquarium.event.model.{ExternalEventModel, WalletEntry, PolicyEntry}
 
 /**
  * Mongodb implementation of the various aquarium stores.
@@ -371,7 +371,7 @@ object MongoDBStore {
   }
 
   /**
-   * Collection holding the [[gr.grnet.aquarium.event.resource.ResourceEventModel]]s.
+   * Collection holding the [[gr.grnet.aquarium.event.model.resource.ResourceEventModel]]s.
    *
    * Resource events are coming from all systems handling billable resources.
    */
@@ -385,14 +385,14 @@ object MongoDBStore {
   final val USER_STATES_COLLECTION = "userstates"
 
   /**
-   * Collection holding [[gr.grnet.aquarium.event.im.IMEventModel]]s.
+   * Collection holding [[gr.grnet.aquarium.event.model.im.IMEventModel]]s.
    *
    * User events are coming from the IM module (external).
    */
   final val IM_EVENTS_COLLECTION = "imevents"
 
   /**
-   * Collection holding [[gr.grnet.aquarium.event.im.IMEventModel]]s that could not be parsed to normal objects.
+   * Collection holding [[gr.grnet.aquarium.event.model.im.IMEventModel]]s that could not be parsed to normal objects.
    *
    * We of course assume at least a valid JSON representation.
    *
@@ -401,7 +401,7 @@ object MongoDBStore {
   final val UNPARSED_IM_EVENTS_COLLECTION = "unparsed_imevents"
 
   /**
-   * Collection holding [[gr.grnet.aquarium.event.WalletEntry]].
+   * Collection holding [[gr.grnet.aquarium.event.model.WalletEntry]].
    *
    * Wallet entries are generated internally in Aquarium.
    */
@@ -413,7 +413,7 @@ object MongoDBStore {
 //  final val POLICIES_COLLECTION = "policies"
 
   /**
-   * Collection holding [[gr.grnet.aquarium.event.PolicyEntry]].
+   * Collection holding [[gr.grnet.aquarium.event.model.PolicyEntry]].
    */
   final val POLICY_ENTRIES_COLLECTION = "policyEntries"
 
index 91d3b35..592f5fd 100644 (file)
@@ -41,8 +41,8 @@ import scopt.OptionParser
 import gr.grnet.aquarium.messaging.AkkaAMQP
 import java.lang.StringBuffer
 import gr.grnet.aquarium.logic.accounting.Policy
-import gr.grnet.aquarium.event.im.{StdIMEvent, IMEventModel}
-import gr.grnet.aquarium.event.resource.{StdResourceEvent, ResourceEventModel}
+import gr.grnet.aquarium.event.model.im.{StdIMEvent, IMEventModel}
+import gr.grnet.aquarium.event.model.resource.{StdResourceEvent, ResourceEventModel}
 
 /**
  *  Generates random resource events to use as input for testing and
index 0ad26ab..8847f04 100644 (file)
@@ -41,9 +41,9 @@ import gr.grnet.aquarium.logic.accounting.dsl.Timeslot
 import java.util.Date
 import junit.framework.Assert._
 import gr.grnet.aquarium.logic.accounting.{Accounting}
-import gr.grnet.aquarium.event.{WalletEntry}
+import gr.grnet.aquarium.event.model.WalletEntry
 import com.ckkloverdos.maybe.Just
-import gr.grnet.aquarium.event.resource.StdResourceEvent
+import gr.grnet.aquarium.event.model.resource.StdResourceEvent
 
 /**
  * Tests for the methods that do accounting
index 5c5366c..c62bfa2 100644 (file)
@@ -40,10 +40,10 @@ import org.junit.Assume._
 import gr.grnet.aquarium.Configurator._
 import gr.grnet.aquarium.util.{RandomEventGenerator, TestMethods}
 import collection.mutable.ArrayBuffer
-import org.junit.{After, Test, Before}
+import org.junit.{After, Test}
 import gr.grnet.aquarium.{StoreConfigurator, LogicTestsAssumptions}
 import gr.grnet.aquarium.store.memory.MemStore
-import gr.grnet.aquarium.event.resource.ResourceEventModel
+import gr.grnet.aquarium.event.model.resource.ResourceEventModel
 
 /**
  * @author Georgios Gousios <gousiosg@gmail.com>