From: Christos KK Loverdos Date: Wed, 29 Aug 2012 14:23:31 +0000 (+0300) Subject: Produce JSON policy configuration from Avro message X-Git-Url: https://code.grnet.gr/git/aquarium/commitdiff_plain/610051aef8b7bef27edb110c06557c544f0ad3e5 Produce JSON policy configuration from Avro message --- diff --git a/src/main/scala/gr/grnet/aquarium/message/avro/MessageFactory.scala b/src/main/scala/gr/grnet/aquarium/message/avro/MessageFactory.scala index 499d096..5074cc7 100644 --- a/src/main/scala/gr/grnet/aquarium/message/avro/MessageFactory.scala +++ b/src/main/scala/gr/grnet/aquarium/message/avro/MessageFactory.scala @@ -49,21 +49,67 @@ object MessageFactory { build() } - def newEffectivePriceTable(priceOverrides: List[_EffectiveUnitPrice]) = { + def newEffectivePriceTable(priceOverrides: _EffectiveUnitPrice*) = { _EffectivePriceTable.newBuilder(). setPriceOverrides(priceOverrides.asJava). build() } - def newSelectorValue(ept: _EffectivePriceTable) = { + def newSelectorValue(ept: _EffectivePriceTable): _SelectorValue = { _SelectorValue.newBuilder(). setSelectorValue(ept). build() } - def newSelectorValue(map: Map[String, _SelectorValue]) = { + def newSelectorValue(map: Map[CharSequence, _SelectorValue]): _SelectorValue = { _SelectorValue.newBuilder(). setSelectorValue(map.asJava). build() } + + def newSelectorValue(pairs: (CharSequence, _SelectorValue)*): _SelectorValue = { + _SelectorValue.newBuilder(). + setSelectorValue(Map(pairs:_*).asJava). + build() + } + +// def newFullPriceTable(perResource: Map[CharSequence, Map[CharSequence, _SelectorValue]]) = { +// _FullPriceTable.newBuilder(). +// setPerResource( +// (for((k, v) ← perResource) yield (k, v.asJava)).asJava +// ). +// build() +// } + + def newFullPriceTable(perResource: (CharSequence, Map[CharSequence, _SelectorValue])*) = { + _FullPriceTable.newBuilder(). + setPerResource( + Map((for((k, v) ← perResource) yield (k, v.asJava)):_*).asJava + ). + build() + } + + def newRoleMapping(map: Map[CharSequence, _FullPriceTable]): java.util.Map[CharSequence, _FullPriceTable] = { + map.asJava + } + + def newRoleMapping(pairs: (CharSequence, _FullPriceTable)*): java.util.Map[CharSequence, _FullPriceTable] = { + Map(pairs:_*).asJava + } + + def newResourceType(name: CharSequence, unit: CharSequence, chargingBehavior: CharSequence) = { + _ResourceType.newBuilder(). + setName(name). + setUnit(unit). + setChargingBehaviorClass(chargingBehavior). + build() + } + + def newResourceTypes(rts: _ResourceType*) = { + rts.asJava + } + + def newChargingBehaviors(cbs: CharSequence*) = { + cbs.asJava + } } diff --git a/src/test/scala/gr/grnet/aquarium/message/avro/PolicyTest.scala b/src/test/scala/gr/grnet/aquarium/message/avro/PolicyTest.scala index 7e68765..4d5d075 100644 --- a/src/test/scala/gr/grnet/aquarium/message/avro/PolicyTest.scala +++ b/src/test/scala/gr/grnet/aquarium/message/avro/PolicyTest.scala @@ -35,11 +35,10 @@ package gr.grnet.aquarium.message.avro -import org.junit.Test -import scala.collection.JavaConverters.seqAsJavaListConverter -import scala.collection.JavaConverters.mapAsJavaMapConverter import gr.grnet.aquarium.charging.VMChargingBehavior -import java.io.ByteArrayOutputStream +import gr.grnet.aquarium.message.avro.MessageFactory._ +import gr.grnet.aquarium.util.nameOfClass +import org.junit.Test /** * @@ -49,72 +48,37 @@ class PolicyTest { @Test def testOne() { val policyConf = _Policy.newBuilder(). - setChargingBehaviors( - List[CharSequence]( - "gr.grnet.aquarium.charging.VMChargingBehavior", - "gr.grnet.aquarium.charging.ContinuousChargingBehavior", - "gr.grnet.aquarium.charging.OnceChargingBehavior" - ).asJava). + setChargingBehaviors(newChargingBehaviors( + nameOfClass[gr.grnet.aquarium.charging.VMChargingBehavior], + nameOfClass[gr.grnet.aquarium.charging.ContinuousChargingBehavior], + nameOfClass[gr.grnet.aquarium.charging.OnceChargingBehavior]) + ). setID("default-policy"). setParentID(""). setValidFromMillis(0L). setValidToMillis(Long.MaxValue). - setResourceTypes( - List( - _ResourceType.newBuilder(). - setName("diskspace"). - setUnit("MB/Hr"). - setChargingBehaviorClass("gr.grnet.aquarium.charging.ContinuousChargingBehavior"). - build(), - _ResourceType.newBuilder(). - setName("vmtime"). - setUnit("Hr"). - setChargingBehaviorClass("gr.grnet.aquarium.charging.VMChargingBehavior"). - build(), - _ResourceType.newBuilder(). - setName("addcredits"). - setUnit("Credits"). - setChargingBehaviorClass("gr.grnet.aquarium.charging.OnceChargingBehavior"). - build() - ).asJava). - setRoleMapping( - Map[CharSequence, _FullPriceTable]( - "default" -> _FullPriceTable.newBuilder(). - setPerResource( - Map( - ("diskspace": CharSequence) -> Map[CharSequence, _SelectorValue]( - "default" -> _SelectorValue.newBuilder(). - setSelectorValue(_EffectiveUnitPrice.newBuilder(). - setUnitPrice(0.01). - setWhen(null) - build()). - build() - ).asJava, - ("vmtime": CharSequence) -> Map[CharSequence, _SelectorValue]( - VMChargingBehavior.Selectors.Power.powerOn -> _SelectorValue.newBuilder(). - setSelectorValue(_EffectiveUnitPrice.newBuilder(). - setUnitPrice(0.01). - setWhen(null) - build()). - build(), - VMChargingBehavior.Selectors.Power.powerOff -> _SelectorValue.newBuilder(). - setSelectorValue(_EffectiveUnitPrice.newBuilder(). - setUnitPrice(0.01). - setWhen(null) - build()). - build() - ).asJava, - ("addcredits": CharSequence) -> Map[CharSequence, _SelectorValue]( - "default" -> _SelectorValue.newBuilder(). - setSelectorValue(_EffectiveUnitPrice.newBuilder(). - setUnitPrice(-1.0). - setWhen(null) - build()). - build() - ).asJava - ).asJava - ).build() - ).asJava). + setResourceTypes(newResourceTypes( + newResourceType("diskspace", "MB/Hr", nameOfClass[gr.grnet.aquarium.charging.ContinuousChargingBehavior]), + newResourceType("vmtime", "Hr", nameOfClass[gr.grnet.aquarium.charging.VMChargingBehavior]), + newResourceType("addcredits", "Credits", nameOfClass[gr.grnet.aquarium.charging.OnceChargingBehavior])) + ). + setRoleMapping(newRoleMapping( + "default" -> newFullPriceTable( + "diskspace" -> Map( + "default" -> newSelectorValue(newEffectivePriceTable(newEffectiveUnitPrice(0.01))) + ), + + "vmtime" -> Map( + VMChargingBehavior.Selectors.Power.powerOff -> + newSelectorValue(newEffectivePriceTable(newEffectiveUnitPrice(0.001))), + VMChargingBehavior.Selectors.Power.powerOn -> + newSelectorValue(newEffectivePriceTable(newEffectiveUnitPrice(0.01))) + ), + "addcredits" -> Map( + "default" -> newSelectorValue(newEffectivePriceTable(newEffectiveUnitPrice(-1.0))) + ) + ) + )). build() val generatedJSON = AvroHelpers.jsonStringOfSpecificRecord(policyConf)