From 32c605dfe952f17243f47bb020384b114511602f Mon Sep 17 00:00:00 2001 From: Christos KK Loverdos Date: Mon, 5 Mar 2012 12:31:42 +0200 Subject: [PATCH] Start moving stuff from Policy to PolicyStore --- .../gr/grnet/aquarium/store/PolicyStore.scala | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/main/scala/gr/grnet/aquarium/store/PolicyStore.scala b/src/main/scala/gr/grnet/aquarium/store/PolicyStore.scala index 16ee7b5..647f209 100644 --- a/src/main/scala/gr/grnet/aquarium/store/PolicyStore.scala +++ b/src/main/scala/gr/grnet/aquarium/store/PolicyStore.scala @@ -35,8 +35,11 @@ package gr.grnet.aquarium.store +import scala.collection.immutable import com.ckkloverdos.maybe.Maybe import gr.grnet.aquarium.logic.events.PolicyEntry +import collection.immutable.SortedMap +import gr.grnet.aquarium.logic.accounting.dsl.{DSL, DSLPolicy, Timeslot} /** * A store for serialized policy entries. @@ -50,6 +53,23 @@ trait PolicyStore { * The results are returned sorted by PolicyEntry.validFrom */ def loadPolicyEntriesAfter(after: Long): List[PolicyEntry] + + def loadAndSortPolicyEntriesWithin(fromMillis: Long, toMillis: Long): SortedMap[Timeslot, PolicyEntry] = { + val all = loadPolicyEntriesAfter(0L) + val filtered = all.filter { policyEntry ⇒ + policyEntry.validFrom <= fromMillis && + policyEntry.validTo >= toMillis + } + + (immutable.SortedMap[Timeslot, PolicyEntry]() /: filtered) { (map, policyEntry) ⇒ + map.updated(policyEntry.fromToTimeslot, policyEntry) + } + } + + def loadAndSortPoliciesWithin(fromMillis: Long, toMillis: Long, dsl: DSL): SortedMap[Timeslot, DSLPolicy] = { + for((timeslot, policyEntry) <- loadAndSortPolicyEntriesWithin(fromMillis, toMillis)) + yield (timeslot, dsl.parse(policyEntry.policyYAML)) + } /** * Store an accounting policy. -- 1.7.10.4