WIP integrating Avro-style policy messages
[aquarium] / src / main / scala / gr / grnet / aquarium / store / PolicyStore.scala
index 8d28a3a..75b9824 100644 (file)
 
 package gr.grnet.aquarium.store
 
-import collection.immutable.SortedMap
-import collection.immutable.SortedSet
+import collection.immutable
 import gr.grnet.aquarium.logic.accounting.dsl.Timeslot
+import gr.grnet.aquarium.message.avro.gen.PolicyMsg
 import gr.grnet.aquarium.policy.PolicyModel
+import gr.grnet.aquarium.message.avro.ModelFactory
 
 /**
  * A store for serialized policy models.
@@ -47,19 +48,20 @@ import gr.grnet.aquarium.policy.PolicyModel
  * @author Christos KK Loverdos <loverdos@gmail.com>
  */
 trait PolicyStore {
-  def loadAllPolicies: SortedSet[PolicyModel] = {
-    val all = loadAndSortPoliciesWithin(0, Long.MaxValue)
-    val set = SortedSet[PolicyModel]()
-    set ++ all.valuesIterator
-  }
+  def foreachPolicy[U](f: PolicyMsg ⇒ U): Unit
+
+  def loadSortedPoliciesWithin(fromMillis: Long, toMillis: Long): immutable.SortedMap[Timeslot, PolicyMsg]
 
-  def loadAndSortPoliciesWithin(fromMillis: Long, toMillis: Long): SortedMap[Timeslot, PolicyModel]
+  def loadSortedPolicyModelsWithin(fromMillis: Long, toMillis: Long): immutable.SortedMap[Timeslot, PolicyModel] = {
+    loadSortedPoliciesWithin(fromMillis, toMillis).map { case (timeslot, msg) ⇒
+      (timeslot, ModelFactory.newPolicyModel(msg))
+    }
+  }
 
-  def loadValidPolicyAt(atMillis: Long): Option[PolicyModel]
+  def loadPolicyAt(atMillis: Long): Option[PolicyMsg]
 
   /**
    * Store an accounting policy.
    */
-  def insertPolicy(policy: PolicyModel): PolicyModel
-
+  def insertPolicy(policy: PolicyMsg): PolicyMsg
 }
\ No newline at end of file