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.
* @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