Produce JSON policy configuration from Avro message
authorChristos KK Loverdos <loverdos@gmail.com>
Wed, 29 Aug 2012 14:23:31 +0000 (17:23 +0300)
committerChristos KK Loverdos <loverdos@gmail.com>
Wed, 29 Aug 2012 14:23:31 +0000 (17:23 +0300)
src/main/scala/gr/grnet/aquarium/message/avro/MessageFactory.scala
src/test/scala/gr/grnet/aquarium/message/avro/PolicyTest.scala

index 499d096..5074cc7 100644 (file)
@@ -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
+  }
 }
index 7e68765..4d5d075 100644 (file)
 
 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)