From 48ea54e86403e6b311ea769aa206956b322a2029 Mon Sep 17 00:00:00 2001 From: Christos KK Loverdos Date: Fri, 31 Aug 2012 17:55:27 +0300 Subject: [PATCH] WIP integrating Avro-style policy messages --- src/main/avro/aquarium-events.avdl | 8 +- src/main/avro/aquarium-policy.avdl | 3 +- .../aquarium/message/avro/gen/AquariumEvents.java | 2 +- .../aquarium/message/avro/gen/AquariumPolicy.java | 2 +- .../message/avro/gen/AquariumUserState.java | 2 +- .../aquarium/message/avro/gen/IMEventMsg.java | 98 ++++----- .../grnet/aquarium/message/avro/gen/PolicyMsg.java | 207 ++++++++++++-------- .../message/avro/gen/ResourceEventMsg.java | 98 ++++----- .../aquarium/message/avro/gen/WalletEntryMsg.java | 2 +- .../WorkingResourceInstanceChargingStateMsg.java | 2 +- .../avro/gen/WorkingResourcesChargingStateMsg.java | 2 +- .../message/avro/gen/WorkingUserStateMsg.java | 2 +- src/main/resources/policy.json | 112 ++++++----- src/main/resources/policy.scala | 38 ---- src/main/scala/gr/grnet/aquarium/Aquarium.scala | 26 +-- .../scala/gr/grnet/aquarium/AquariumBuilder.scala | 16 +- src/main/scala/gr/grnet/aquarium/Main.scala | 2 +- .../scala/gr/grnet/aquarium/ResourceLocator.scala | 6 +- .../charging/ChargingBehaviorSkeleton.scala | 2 +- .../grnet/aquarium/charging/bill/BillEntry.scala | 2 +- .../connector/rabbitmq/RabbitMQProducer.scala | 2 +- .../grnet/aquarium/message/avro/AvroHelpers.scala | 37 +++- .../grnet/aquarium/message/avro/DummyHelpers.scala | 58 ++++++ .../aquarium/message/avro/MessageFactory.scala | 12 +- .../grnet/aquarium/message/avro/ModelFactory.scala | 136 +++++++++++++ .../avro/OrderingHelpers.scala} | 41 ++-- .../grnet/aquarium/policy/CachingPolicyStore.scala | 50 +++-- .../gr/grnet/aquarium/policy/PolicyModel.scala | 45 +++-- .../scala/gr/grnet/aquarium/policy/StdPolicy.scala | 21 +- .../gr/grnet/aquarium/store/PolicyStore.scala | 24 +-- .../grnet/aquarium/store/PolicyStoreHelpers.scala} | 66 +++---- .../aquarium/store/memory/MemStoreProvider.scala | 49 ++--- .../aquarium/store/mongodb/MongoDBStore.scala | 63 ++++-- .../gr/grnet/aquarium/util/json/JsonHelpers.scala | 4 +- src/test/resources/policy.json | 112 ++++++----- src/test/scala/gr/grnet/aquarium/BillTest.scala | 2 +- .../aquarium/message/avro/gen/PolicyMsgTest.scala | 23 +-- .../message/avro/gen/ResourceEventMsgTest.scala | 3 +- 38 files changed, 838 insertions(+), 542 deletions(-) delete mode 100644 src/main/resources/policy.scala create mode 100644 src/main/scala/gr/grnet/aquarium/message/avro/DummyHelpers.scala create mode 100644 src/main/scala/gr/grnet/aquarium/message/avro/ModelFactory.scala rename src/main/scala/gr/grnet/aquarium/{store/mongodb/MongoDBPolicy.scala => message/avro/OrderingHelpers.scala} (69%) rename src/{test/scala/gr/grnet/aquarium/policy/StdPolicyTest.scala => main/scala/gr/grnet/aquarium/store/PolicyStoreHelpers.scala} (53%) diff --git a/src/main/avro/aquarium-events.avdl b/src/main/avro/aquarium-events.avdl index a42a5e3..e911c7f 100644 --- a/src/main/avro/aquarium-events.avdl +++ b/src/main/avro/aquarium-events.avdl @@ -38,8 +38,8 @@ protocol AquariumEvents { import idl "aquarium-anyvalue.avdl"; record ResourceEventMsg { - string @aliases(["originalID", "ID"]) id; - string @aliases(["_id", "inStoreID"]) idInStore; + string @aliases(["id"]) originalID; // From message creator + union {string, null} @aliases(["_id", "idInStore"]) inStoreID; // From Aquarium (message recipient) long occurredMillis; long receivedMillis = 0; string userID; @@ -52,8 +52,8 @@ protocol AquariumEvents { } record IMEventMsg { - string @aliases(["originalID", "ID"]) id; - string @aliases(["_id", "inStoreID"]) idInStore; + string @aliases(["id"]) originalID; // From message creator + union {string, null} @aliases(["_id", "idInStore"]) inStoreID; // From Aquarium (message recipient) long occurredMillis; long receivedMillis = 0; string userID; diff --git a/src/main/avro/aquarium-policy.avdl b/src/main/avro/aquarium-policy.avdl index 7211780..c7609ff 100644 --- a/src/main/avro/aquarium-policy.avdl +++ b/src/main/avro/aquarium-policy.avdl @@ -67,7 +67,8 @@ protocol AquariumPolicy { } record PolicyMsg { - string @aliases(["id, _id, idInStore, inStoreID"]) ID; + string @aliases(["id"]) originalID; // From message creator (e.g. this is present for the default policy.json) + union {string, null} @aliases(["_id", "idInStore"]) inStoreID; // From Aquarium (message recipient) union {string, null} parentID; long validFromMillis; long validToMillis; diff --git a/src/main/java/gr/grnet/aquarium/message/avro/gen/AquariumEvents.java b/src/main/java/gr/grnet/aquarium/message/avro/gen/AquariumEvents.java index 891b9fb..f87cef0 100644 --- a/src/main/java/gr/grnet/aquarium/message/avro/gen/AquariumEvents.java +++ b/src/main/java/gr/grnet/aquarium/message/avro/gen/AquariumEvents.java @@ -7,7 +7,7 @@ package gr.grnet.aquarium.message.avro.gen; @SuppressWarnings("all") public interface AquariumEvents { - public static final org.apache.avro.Protocol PROTOCOL = org.apache.avro.Protocol.parse("{\"protocol\":\"AquariumEvents\",\"namespace\":\"gr.grnet.aquarium.message.avro.gen\",\"types\":[{\"type\":\"record\",\"name\":\"AnyValueMsg\",\"fields\":[{\"name\":\"anyValue\",\"type\":[\"null\",\"int\",\"long\",\"boolean\",\"double\",\"bytes\",\"string\"]}]},{\"type\":\"record\",\"name\":\"ResourceEventMsg\",\"fields\":[{\"name\":\"id\",\"type\":\"string\",\"aliases\":[\"originalID\",\"ID\"]},{\"name\":\"idInStore\",\"type\":\"string\"},{\"name\":\"occurredMillis\",\"type\":\"long\"},{\"name\":\"receivedMillis\",\"type\":\"long\",\"default\":0},{\"name\":\"userID\",\"type\":\"string\"},{\"name\":\"clientID\",\"type\":\"string\"},{\"name\":\"eventVersion\",\"type\":\"string\",\"default\":\"1.0\"},{\"name\":\"resource\",\"type\":\"string\",\"aliases\":[\"resourceType\"]},{\"name\":\"instanceID\",\"type\":\"string\"},{\"name\":\"value\",\"type\":\"string\"},{\"name\":\"details\",\"type\":{\"type\":\"map\",\"values\":\"AnyValueMsg\"}}]},{\"type\":\"record\",\"name\":\"IMEventMsg\",\"fields\":[{\"name\":\"id\",\"type\":\"string\",\"aliases\":[\"originalID\",\"ID\"]},{\"name\":\"idInStore\",\"type\":\"string\"},{\"name\":\"occurredMillis\",\"type\":\"long\"},{\"name\":\"receivedMillis\",\"type\":\"long\",\"default\":0},{\"name\":\"userID\",\"type\":\"string\"},{\"name\":\"clientID\",\"type\":\"string\"},{\"name\":\"eventVersion\",\"type\":\"string\",\"default\":\"1.0\"},{\"name\":\"isActive\",\"type\":\"boolean\"},{\"name\":\"role\",\"type\":\"string\"},{\"name\":\"details\",\"type\":{\"type\":\"map\",\"values\":\"AnyValueMsg\"}}]}],\"messages\":{}}"); + public static final org.apache.avro.Protocol PROTOCOL = org.apache.avro.Protocol.parse("{\"protocol\":\"AquariumEvents\",\"namespace\":\"gr.grnet.aquarium.message.avro.gen\",\"types\":[{\"type\":\"record\",\"name\":\"AnyValueMsg\",\"fields\":[{\"name\":\"anyValue\",\"type\":[\"null\",\"int\",\"long\",\"boolean\",\"double\",\"bytes\",\"string\"]}]},{\"type\":\"record\",\"name\":\"ResourceEventMsg\",\"fields\":[{\"name\":\"originalID\",\"type\":\"string\",\"aliases\":[\"id\"]},{\"name\":\"inStoreID\",\"type\":[\"string\",\"null\"],\"aliases\":[\"_id\",\"idInStore\"]},{\"name\":\"occurredMillis\",\"type\":\"long\"},{\"name\":\"receivedMillis\",\"type\":\"long\",\"default\":0},{\"name\":\"userID\",\"type\":\"string\"},{\"name\":\"clientID\",\"type\":\"string\"},{\"name\":\"eventVersion\",\"type\":\"string\",\"default\":\"1.0\"},{\"name\":\"resource\",\"type\":\"string\",\"aliases\":[\"resourceType\"]},{\"name\":\"instanceID\",\"type\":\"string\"},{\"name\":\"value\",\"type\":\"string\"},{\"name\":\"details\",\"type\":{\"type\":\"map\",\"values\":\"AnyValueMsg\"}}]},{\"type\":\"record\",\"name\":\"IMEventMsg\",\"fields\":[{\"name\":\"originalID\",\"type\":\"string\",\"aliases\":[\"id\"]},{\"name\":\"inStoreID\",\"type\":[\"string\",\"null\"],\"aliases\":[\"_id\",\"idInStore\"]},{\"name\":\"occurredMillis\",\"type\":\"long\"},{\"name\":\"receivedMillis\",\"type\":\"long\",\"default\":0},{\"name\":\"userID\",\"type\":\"string\"},{\"name\":\"clientID\",\"type\":\"string\"},{\"name\":\"eventVersion\",\"type\":\"string\",\"default\":\"1.0\"},{\"name\":\"isActive\",\"type\":\"boolean\"},{\"name\":\"role\",\"type\":\"string\"},{\"name\":\"details\",\"type\":{\"type\":\"map\",\"values\":\"AnyValueMsg\"}}]}],\"messages\":{}}"); @SuppressWarnings("all") public interface Callback extends AquariumEvents { diff --git a/src/main/java/gr/grnet/aquarium/message/avro/gen/AquariumPolicy.java b/src/main/java/gr/grnet/aquarium/message/avro/gen/AquariumPolicy.java index 53f73e0..53a4065 100644 --- a/src/main/java/gr/grnet/aquarium/message/avro/gen/AquariumPolicy.java +++ b/src/main/java/gr/grnet/aquarium/message/avro/gen/AquariumPolicy.java @@ -7,7 +7,7 @@ package gr.grnet.aquarium.message.avro.gen; @SuppressWarnings("all") public interface AquariumPolicy { - public static final org.apache.avro.Protocol PROTOCOL = org.apache.avro.Protocol.parse("{\"protocol\":\"AquariumPolicy\",\"namespace\":\"gr.grnet.aquarium.message.avro.gen\",\"types\":[{\"type\":\"record\",\"name\":\"ResourceTypeMsg\",\"fields\":[{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"unit\",\"type\":\"string\"},{\"name\":\"chargingBehaviorClass\",\"type\":\"string\"}]},{\"type\":\"record\",\"name\":\"CronSpecTupleMsg\",\"fields\":[{\"name\":\"a\",\"type\":\"string\"},{\"name\":\"b\",\"type\":\"string\"}]},{\"type\":\"record\",\"name\":\"EffectiveUnitPriceMsg\",\"fields\":[{\"name\":\"unitPrice\",\"type\":\"double\"},{\"name\":\"when\",\"type\":[\"CronSpecTupleMsg\",\"null\"]}]},{\"type\":\"record\",\"name\":\"EffectivePriceTableMsg\",\"fields\":[{\"name\":\"priceOverrides\",\"type\":{\"type\":\"array\",\"items\":\"EffectiveUnitPriceMsg\"}}]},{\"type\":\"record\",\"name\":\"SelectorValueMsg\",\"fields\":[{\"name\":\"selectorValue\",\"type\":[\"EffectivePriceTableMsg\",{\"type\":\"map\",\"values\":\"SelectorValueMsg\"}]}]},{\"type\":\"record\",\"name\":\"FullPriceTableMsg\",\"fields\":[{\"name\":\"perResource\",\"type\":{\"type\":\"map\",\"values\":{\"type\":\"map\",\"values\":\"SelectorValueMsg\"}}}]},{\"type\":\"record\",\"name\":\"PolicyMsg\",\"fields\":[{\"name\":\"ID\",\"type\":\"string\",\"aliases\":[\"id, _id, idInStore, inStoreID\"]},{\"name\":\"parentID\",\"type\":[\"string\",\"null\"]},{\"name\":\"validFromMillis\",\"type\":\"long\"},{\"name\":\"validToMillis\",\"type\":\"long\"},{\"name\":\"resourceTypes\",\"type\":{\"type\":\"array\",\"items\":\"ResourceTypeMsg\"}},{\"name\":\"chargingBehaviors\",\"type\":{\"type\":\"array\",\"items\":\"string\"}},{\"name\":\"roleMapping\",\"type\":{\"type\":\"map\",\"values\":\"FullPriceTableMsg\"}}]}],\"messages\":{}}"); + public static final org.apache.avro.Protocol PROTOCOL = org.apache.avro.Protocol.parse("{\"protocol\":\"AquariumPolicy\",\"namespace\":\"gr.grnet.aquarium.message.avro.gen\",\"types\":[{\"type\":\"record\",\"name\":\"ResourceTypeMsg\",\"fields\":[{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"unit\",\"type\":\"string\"},{\"name\":\"chargingBehaviorClass\",\"type\":\"string\"}]},{\"type\":\"record\",\"name\":\"CronSpecTupleMsg\",\"fields\":[{\"name\":\"a\",\"type\":\"string\"},{\"name\":\"b\",\"type\":\"string\"}]},{\"type\":\"record\",\"name\":\"EffectiveUnitPriceMsg\",\"fields\":[{\"name\":\"unitPrice\",\"type\":\"double\"},{\"name\":\"when\",\"type\":[\"CronSpecTupleMsg\",\"null\"]}]},{\"type\":\"record\",\"name\":\"EffectivePriceTableMsg\",\"fields\":[{\"name\":\"priceOverrides\",\"type\":{\"type\":\"array\",\"items\":\"EffectiveUnitPriceMsg\"}}]},{\"type\":\"record\",\"name\":\"SelectorValueMsg\",\"fields\":[{\"name\":\"selectorValue\",\"type\":[\"EffectivePriceTableMsg\",{\"type\":\"map\",\"values\":\"SelectorValueMsg\"}]}]},{\"type\":\"record\",\"name\":\"FullPriceTableMsg\",\"fields\":[{\"name\":\"perResource\",\"type\":{\"type\":\"map\",\"values\":{\"type\":\"map\",\"values\":\"SelectorValueMsg\"}}}]},{\"type\":\"record\",\"name\":\"PolicyMsg\",\"fields\":[{\"name\":\"originalID\",\"type\":\"string\",\"aliases\":[\"id\"]},{\"name\":\"inStoreID\",\"type\":[\"string\",\"null\"],\"aliases\":[\"_id\",\"idInStore\"]},{\"name\":\"parentID\",\"type\":[\"string\",\"null\"]},{\"name\":\"validFromMillis\",\"type\":\"long\"},{\"name\":\"validToMillis\",\"type\":\"long\"},{\"name\":\"resourceTypes\",\"type\":{\"type\":\"array\",\"items\":\"ResourceTypeMsg\"}},{\"name\":\"chargingBehaviors\",\"type\":{\"type\":\"array\",\"items\":\"string\"}},{\"name\":\"roleMapping\",\"type\":{\"type\":\"map\",\"values\":\"FullPriceTableMsg\"}}]}],\"messages\":{}}"); @SuppressWarnings("all") public interface Callback extends AquariumPolicy { diff --git a/src/main/java/gr/grnet/aquarium/message/avro/gen/AquariumUserState.java b/src/main/java/gr/grnet/aquarium/message/avro/gen/AquariumUserState.java index 4f4069c..9e516e6 100644 --- a/src/main/java/gr/grnet/aquarium/message/avro/gen/AquariumUserState.java +++ b/src/main/java/gr/grnet/aquarium/message/avro/gen/AquariumUserState.java @@ -7,7 +7,7 @@ package gr.grnet.aquarium.message.avro.gen; @SuppressWarnings("all") public interface AquariumUserState { - public static final org.apache.avro.Protocol PROTOCOL = org.apache.avro.Protocol.parse("{\"protocol\":\"AquariumUserState\",\"namespace\":\"gr.grnet.aquarium.message.avro.gen\",\"types\":[{\"type\":\"record\",\"name\":\"ResourceTypeMsg\",\"fields\":[{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"unit\",\"type\":\"string\"},{\"name\":\"chargingBehaviorClass\",\"type\":\"string\"}]},{\"type\":\"record\",\"name\":\"CronSpecTupleMsg\",\"fields\":[{\"name\":\"a\",\"type\":\"string\"},{\"name\":\"b\",\"type\":\"string\"}]},{\"type\":\"record\",\"name\":\"EffectiveUnitPriceMsg\",\"fields\":[{\"name\":\"unitPrice\",\"type\":\"double\"},{\"name\":\"when\",\"type\":[\"CronSpecTupleMsg\",\"null\"]}]},{\"type\":\"record\",\"name\":\"EffectivePriceTableMsg\",\"fields\":[{\"name\":\"priceOverrides\",\"type\":{\"type\":\"array\",\"items\":\"EffectiveUnitPriceMsg\"}}]},{\"type\":\"record\",\"name\":\"SelectorValueMsg\",\"fields\":[{\"name\":\"selectorValue\",\"type\":[\"EffectivePriceTableMsg\",{\"type\":\"map\",\"values\":\"SelectorValueMsg\"}]}]},{\"type\":\"record\",\"name\":\"FullPriceTableMsg\",\"fields\":[{\"name\":\"perResource\",\"type\":{\"type\":\"map\",\"values\":{\"type\":\"map\",\"values\":\"SelectorValueMsg\"}}}]},{\"type\":\"record\",\"name\":\"PolicyMsg\",\"fields\":[{\"name\":\"ID\",\"type\":\"string\",\"aliases\":[\"id, _id, idInStore, inStoreID\"]},{\"name\":\"parentID\",\"type\":[\"string\",\"null\"]},{\"name\":\"validFromMillis\",\"type\":\"long\"},{\"name\":\"validToMillis\",\"type\":\"long\"},{\"name\":\"resourceTypes\",\"type\":{\"type\":\"array\",\"items\":\"ResourceTypeMsg\"}},{\"name\":\"chargingBehaviors\",\"type\":{\"type\":\"array\",\"items\":\"string\"}},{\"name\":\"roleMapping\",\"type\":{\"type\":\"map\",\"values\":\"FullPriceTableMsg\"}}]},{\"type\":\"record\",\"name\":\"AnyValueMsg\",\"fields\":[{\"name\":\"anyValue\",\"type\":[\"null\",\"int\",\"long\",\"boolean\",\"double\",\"bytes\",\"string\"]}]},{\"type\":\"record\",\"name\":\"ResourceEventMsg\",\"fields\":[{\"name\":\"id\",\"type\":\"string\",\"aliases\":[\"originalID\",\"ID\"]},{\"name\":\"idInStore\",\"type\":\"string\"},{\"name\":\"occurredMillis\",\"type\":\"long\"},{\"name\":\"receivedMillis\",\"type\":\"long\",\"default\":0},{\"name\":\"userID\",\"type\":\"string\"},{\"name\":\"clientID\",\"type\":\"string\"},{\"name\":\"eventVersion\",\"type\":\"string\",\"default\":\"1.0\"},{\"name\":\"resource\",\"type\":\"string\",\"aliases\":[\"resourceType\"]},{\"name\":\"instanceID\",\"type\":\"string\"},{\"name\":\"value\",\"type\":\"string\"},{\"name\":\"details\",\"type\":{\"type\":\"map\",\"values\":\"AnyValueMsg\"}}]},{\"type\":\"record\",\"name\":\"IMEventMsg\",\"fields\":[{\"name\":\"id\",\"type\":\"string\",\"aliases\":[\"originalID\",\"ID\"]},{\"name\":\"idInStore\",\"type\":\"string\"},{\"name\":\"occurredMillis\",\"type\":\"long\"},{\"name\":\"receivedMillis\",\"type\":\"long\",\"default\":0},{\"name\":\"userID\",\"type\":\"string\"},{\"name\":\"clientID\",\"type\":\"string\"},{\"name\":\"eventVersion\",\"type\":\"string\",\"default\":\"1.0\"},{\"name\":\"isActive\",\"type\":\"boolean\"},{\"name\":\"role\",\"type\":\"string\"},{\"name\":\"details\",\"type\":{\"type\":\"map\",\"values\":\"AnyValueMsg\"}}]},{\"type\":\"record\",\"name\":\"UserAgreementMsg\",\"fields\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"relatedIMEventID\",\"type\":[\"string\",\"null\"]},{\"name\":\"validFromMillis\",\"type\":\"long\"},{\"name\":\"validToMillis\",\"type\":\"long\"},{\"name\":\"role\",\"type\":\"string\"},{\"name\":\"fullPriceTableRef\",\"type\":[\"FullPriceTableMsg\",\"null\"]}]},{\"type\":\"record\",\"name\":\"WorkingResourceInstanceChargingStateMsg\",\"fields\":[{\"name\":\"details\",\"type\":{\"type\":\"map\",\"values\":\"AnyValueMsg\"}},{\"name\":\"previousEvents\",\"type\":{\"type\":\"array\",\"items\":\"ResourceEventMsg\"}},{\"name\":\"implicitlyIssuedStartEvents\",\"type\":{\"type\":\"array\",\"items\":\"ResourceEventMsg\"}},{\"name\":\"accumulatingAmount\",\"type\":\"double\"},{\"name\":\"oldAccumulatingAmount\",\"type\":\"double\"},{\"name\":\"previousValue\",\"type\":\"double\"},{\"name\":\"currentValue\",\"type\":\"double\"}]},{\"type\":\"record\",\"name\":\"WorkingResourcesChargingStateMsg\",\"fields\":[{\"name\":\"details\",\"type\":{\"type\":\"map\",\"values\":\"AnyValueMsg\"}},{\"name\":\"stateOfResourceInstance\",\"type\":{\"type\":\"map\",\"values\":\"WorkingResourceInstanceChargingStateMsg\"}}]},{\"type\":\"record\",\"name\":\"WorkingAgreementHistoryMsg\",\"fields\":[{\"name\":\"agreements\",\"type\":{\"type\":\"array\",\"items\":\"UserAgreementMsg\"}}]},{\"type\":\"record\",\"name\":\"ChargeslotMsg\",\"fields\":[{\"name\":\"startMillis\",\"type\":\"long\"},{\"name\":\"stopMillis\",\"type\":\"long\"},{\"name\":\"unitPrice\",\"type\":\"double\"},{\"name\":\"explanation\",\"type\":\"string\",\"default\":\"\"},{\"name\":\"creditsToSubtract\",\"type\":\"double\"}]},{\"type\":\"record\",\"name\":\"WalletEntryMsg\",\"fields\":[{\"name\":\"userID\",\"type\":\"string\"},{\"name\":\"sumOfCreditsToSubtract\",\"type\":\"double\"},{\"name\":\"oldTotalCredits\",\"type\":\"double\"},{\"name\":\"newTotalCredits\",\"type\":\"double\"},{\"name\":\"whenComputedMillis\",\"type\":\"long\"},{\"name\":\"referenceStartMillis\",\"type\":\"long\"},{\"name\":\"referenceStopMillis\",\"type\":\"long\"},{\"name\":\"billingYear\",\"type\":\"int\"},{\"name\":\"billingMonth\",\"type\":\"int\"},{\"name\":\"billingDay\",\"type\":\"int\"},{\"name\":\"chargeslots\",\"type\":{\"type\":\"array\",\"items\":\"ChargeslotMsg\"}},{\"name\":\"resourceEvents\",\"type\":{\"type\":\"array\",\"items\":\"ResourceEventMsg\"}},{\"name\":\"resourceType\",\"type\":\"ResourceTypeMsg\"},{\"name\":\"isSynthetic\",\"type\":\"boolean\",\"default\":false}]},{\"type\":\"record\",\"name\":\"WorkingUserStateMsg\",\"fields\":[{\"name\":\"userID\",\"type\":\"string\"},{\"name\":\"parentUserStateIDInStore\",\"type\":[\"string\",\"null\"]},{\"name\":\"resourceTypesMap\",\"type\":{\"type\":\"map\",\"values\":\"ResourceTypeMsg\"}},{\"name\":\"workingStateOfResources\",\"type\":{\"type\":\"map\",\"values\":\"WorkingResourcesChargingStateMsg\"}},{\"name\":\"totalCredits\",\"type\":\"double\"},{\"name\":\"workingAgreementHistory\",\"type\":\"WorkingAgreementHistoryMsg\"},{\"name\":\"latestUpdateMillis\",\"type\":\"long\"},{\"name\":\"latestResourceEventOccurredMillis\",\"type\":\"long\"},{\"name\":\"billingPeriodOutOfSyncResourceEventsCounter\",\"type\":\"long\"},{\"name\":\"walletEntries\",\"type\":{\"type\":\"array\",\"items\":\"WalletEntryMsg\"}}]}],\"messages\":{}}"); + public static final org.apache.avro.Protocol PROTOCOL = org.apache.avro.Protocol.parse("{\"protocol\":\"AquariumUserState\",\"namespace\":\"gr.grnet.aquarium.message.avro.gen\",\"types\":[{\"type\":\"record\",\"name\":\"ResourceTypeMsg\",\"fields\":[{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"unit\",\"type\":\"string\"},{\"name\":\"chargingBehaviorClass\",\"type\":\"string\"}]},{\"type\":\"record\",\"name\":\"CronSpecTupleMsg\",\"fields\":[{\"name\":\"a\",\"type\":\"string\"},{\"name\":\"b\",\"type\":\"string\"}]},{\"type\":\"record\",\"name\":\"EffectiveUnitPriceMsg\",\"fields\":[{\"name\":\"unitPrice\",\"type\":\"double\"},{\"name\":\"when\",\"type\":[\"CronSpecTupleMsg\",\"null\"]}]},{\"type\":\"record\",\"name\":\"EffectivePriceTableMsg\",\"fields\":[{\"name\":\"priceOverrides\",\"type\":{\"type\":\"array\",\"items\":\"EffectiveUnitPriceMsg\"}}]},{\"type\":\"record\",\"name\":\"SelectorValueMsg\",\"fields\":[{\"name\":\"selectorValue\",\"type\":[\"EffectivePriceTableMsg\",{\"type\":\"map\",\"values\":\"SelectorValueMsg\"}]}]},{\"type\":\"record\",\"name\":\"FullPriceTableMsg\",\"fields\":[{\"name\":\"perResource\",\"type\":{\"type\":\"map\",\"values\":{\"type\":\"map\",\"values\":\"SelectorValueMsg\"}}}]},{\"type\":\"record\",\"name\":\"PolicyMsg\",\"fields\":[{\"name\":\"originalID\",\"type\":\"string\",\"aliases\":[\"id\"]},{\"name\":\"inStoreID\",\"type\":[\"string\",\"null\"],\"aliases\":[\"_id\",\"idInStore\"]},{\"name\":\"parentID\",\"type\":[\"string\",\"null\"]},{\"name\":\"validFromMillis\",\"type\":\"long\"},{\"name\":\"validToMillis\",\"type\":\"long\"},{\"name\":\"resourceTypes\",\"type\":{\"type\":\"array\",\"items\":\"ResourceTypeMsg\"}},{\"name\":\"chargingBehaviors\",\"type\":{\"type\":\"array\",\"items\":\"string\"}},{\"name\":\"roleMapping\",\"type\":{\"type\":\"map\",\"values\":\"FullPriceTableMsg\"}}]},{\"type\":\"record\",\"name\":\"AnyValueMsg\",\"fields\":[{\"name\":\"anyValue\",\"type\":[\"null\",\"int\",\"long\",\"boolean\",\"double\",\"bytes\",\"string\"]}]},{\"type\":\"record\",\"name\":\"ResourceEventMsg\",\"fields\":[{\"name\":\"originalID\",\"type\":\"string\",\"aliases\":[\"id\"]},{\"name\":\"inStoreID\",\"type\":[\"string\",\"null\"],\"aliases\":[\"_id\",\"idInStore\"]},{\"name\":\"occurredMillis\",\"type\":\"long\"},{\"name\":\"receivedMillis\",\"type\":\"long\",\"default\":0},{\"name\":\"userID\",\"type\":\"string\"},{\"name\":\"clientID\",\"type\":\"string\"},{\"name\":\"eventVersion\",\"type\":\"string\",\"default\":\"1.0\"},{\"name\":\"resource\",\"type\":\"string\",\"aliases\":[\"resourceType\"]},{\"name\":\"instanceID\",\"type\":\"string\"},{\"name\":\"value\",\"type\":\"string\"},{\"name\":\"details\",\"type\":{\"type\":\"map\",\"values\":\"AnyValueMsg\"}}]},{\"type\":\"record\",\"name\":\"IMEventMsg\",\"fields\":[{\"name\":\"originalID\",\"type\":\"string\",\"aliases\":[\"id\"]},{\"name\":\"inStoreID\",\"type\":[\"string\",\"null\"],\"aliases\":[\"_id\",\"idInStore\"]},{\"name\":\"occurredMillis\",\"type\":\"long\"},{\"name\":\"receivedMillis\",\"type\":\"long\",\"default\":0},{\"name\":\"userID\",\"type\":\"string\"},{\"name\":\"clientID\",\"type\":\"string\"},{\"name\":\"eventVersion\",\"type\":\"string\",\"default\":\"1.0\"},{\"name\":\"isActive\",\"type\":\"boolean\"},{\"name\":\"role\",\"type\":\"string\"},{\"name\":\"details\",\"type\":{\"type\":\"map\",\"values\":\"AnyValueMsg\"}}]},{\"type\":\"record\",\"name\":\"UserAgreementMsg\",\"fields\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"relatedIMEventID\",\"type\":[\"string\",\"null\"]},{\"name\":\"validFromMillis\",\"type\":\"long\"},{\"name\":\"validToMillis\",\"type\":\"long\"},{\"name\":\"role\",\"type\":\"string\"},{\"name\":\"fullPriceTableRef\",\"type\":[\"FullPriceTableMsg\",\"null\"]}]},{\"type\":\"record\",\"name\":\"WorkingResourceInstanceChargingStateMsg\",\"fields\":[{\"name\":\"details\",\"type\":{\"type\":\"map\",\"values\":\"AnyValueMsg\"}},{\"name\":\"previousEvents\",\"type\":{\"type\":\"array\",\"items\":\"ResourceEventMsg\"}},{\"name\":\"implicitlyIssuedStartEvents\",\"type\":{\"type\":\"array\",\"items\":\"ResourceEventMsg\"}},{\"name\":\"accumulatingAmount\",\"type\":\"double\"},{\"name\":\"oldAccumulatingAmount\",\"type\":\"double\"},{\"name\":\"previousValue\",\"type\":\"double\"},{\"name\":\"currentValue\",\"type\":\"double\"}]},{\"type\":\"record\",\"name\":\"WorkingResourcesChargingStateMsg\",\"fields\":[{\"name\":\"details\",\"type\":{\"type\":\"map\",\"values\":\"AnyValueMsg\"}},{\"name\":\"stateOfResourceInstance\",\"type\":{\"type\":\"map\",\"values\":\"WorkingResourceInstanceChargingStateMsg\"}}]},{\"type\":\"record\",\"name\":\"WorkingAgreementHistoryMsg\",\"fields\":[{\"name\":\"agreements\",\"type\":{\"type\":\"array\",\"items\":\"UserAgreementMsg\"}}]},{\"type\":\"record\",\"name\":\"ChargeslotMsg\",\"fields\":[{\"name\":\"startMillis\",\"type\":\"long\"},{\"name\":\"stopMillis\",\"type\":\"long\"},{\"name\":\"unitPrice\",\"type\":\"double\"},{\"name\":\"explanation\",\"type\":\"string\",\"default\":\"\"},{\"name\":\"creditsToSubtract\",\"type\":\"double\"}]},{\"type\":\"record\",\"name\":\"WalletEntryMsg\",\"fields\":[{\"name\":\"userID\",\"type\":\"string\"},{\"name\":\"sumOfCreditsToSubtract\",\"type\":\"double\"},{\"name\":\"oldTotalCredits\",\"type\":\"double\"},{\"name\":\"newTotalCredits\",\"type\":\"double\"},{\"name\":\"whenComputedMillis\",\"type\":\"long\"},{\"name\":\"referenceStartMillis\",\"type\":\"long\"},{\"name\":\"referenceStopMillis\",\"type\":\"long\"},{\"name\":\"billingYear\",\"type\":\"int\"},{\"name\":\"billingMonth\",\"type\":\"int\"},{\"name\":\"billingDay\",\"type\":\"int\"},{\"name\":\"chargeslots\",\"type\":{\"type\":\"array\",\"items\":\"ChargeslotMsg\"}},{\"name\":\"resourceEvents\",\"type\":{\"type\":\"array\",\"items\":\"ResourceEventMsg\"}},{\"name\":\"resourceType\",\"type\":\"ResourceTypeMsg\"},{\"name\":\"isSynthetic\",\"type\":\"boolean\",\"default\":false}]},{\"type\":\"record\",\"name\":\"WorkingUserStateMsg\",\"fields\":[{\"name\":\"userID\",\"type\":\"string\"},{\"name\":\"parentUserStateIDInStore\",\"type\":[\"string\",\"null\"]},{\"name\":\"resourceTypesMap\",\"type\":{\"type\":\"map\",\"values\":\"ResourceTypeMsg\"}},{\"name\":\"workingStateOfResources\",\"type\":{\"type\":\"map\",\"values\":\"WorkingResourcesChargingStateMsg\"}},{\"name\":\"totalCredits\",\"type\":\"double\"},{\"name\":\"workingAgreementHistory\",\"type\":\"WorkingAgreementHistoryMsg\"},{\"name\":\"latestUpdateMillis\",\"type\":\"long\"},{\"name\":\"latestResourceEventOccurredMillis\",\"type\":\"long\"},{\"name\":\"billingPeriodOutOfSyncResourceEventsCounter\",\"type\":\"long\"},{\"name\":\"walletEntries\",\"type\":{\"type\":\"array\",\"items\":\"WalletEntryMsg\"}}]}],\"messages\":{}}"); @SuppressWarnings("all") public interface Callback extends AquariumUserState { diff --git a/src/main/java/gr/grnet/aquarium/message/avro/gen/IMEventMsg.java b/src/main/java/gr/grnet/aquarium/message/avro/gen/IMEventMsg.java index 56f3db8..2d4e097 100644 --- a/src/main/java/gr/grnet/aquarium/message/avro/gen/IMEventMsg.java +++ b/src/main/java/gr/grnet/aquarium/message/avro/gen/IMEventMsg.java @@ -6,9 +6,9 @@ package gr.grnet.aquarium.message.avro.gen; @SuppressWarnings("all") public class IMEventMsg extends org.apache.avro.specific.SpecificRecordBase implements org.apache.avro.specific.SpecificRecord { - public static final org.apache.avro.Schema SCHEMA$ = new org.apache.avro.Schema.Parser().parse("{\"type\":\"record\",\"name\":\"IMEventMsg\",\"namespace\":\"gr.grnet.aquarium.message.avro.gen\",\"fields\":[{\"name\":\"id\",\"type\":\"string\",\"aliases\":[\"originalID\",\"ID\"]},{\"name\":\"idInStore\",\"type\":\"string\"},{\"name\":\"occurredMillis\",\"type\":\"long\"},{\"name\":\"receivedMillis\",\"type\":\"long\",\"default\":0},{\"name\":\"userID\",\"type\":\"string\"},{\"name\":\"clientID\",\"type\":\"string\"},{\"name\":\"eventVersion\",\"type\":\"string\",\"default\":\"1.0\"},{\"name\":\"isActive\",\"type\":\"boolean\"},{\"name\":\"role\",\"type\":\"string\"},{\"name\":\"details\",\"type\":{\"type\":\"map\",\"values\":{\"type\":\"record\",\"name\":\"AnyValueMsg\",\"fields\":[{\"name\":\"anyValue\",\"type\":[\"null\",\"int\",\"long\",\"boolean\",\"double\",\"bytes\",\"string\"]}]}}}]}"); - @Deprecated public java.lang.CharSequence id; - @Deprecated public java.lang.CharSequence idInStore; + public static final org.apache.avro.Schema SCHEMA$ = new org.apache.avro.Schema.Parser().parse("{\"type\":\"record\",\"name\":\"IMEventMsg\",\"namespace\":\"gr.grnet.aquarium.message.avro.gen\",\"fields\":[{\"name\":\"originalID\",\"type\":\"string\",\"aliases\":[\"id\"]},{\"name\":\"inStoreID\",\"type\":[\"string\",\"null\"],\"aliases\":[\"_id\",\"idInStore\"]},{\"name\":\"occurredMillis\",\"type\":\"long\"},{\"name\":\"receivedMillis\",\"type\":\"long\",\"default\":0},{\"name\":\"userID\",\"type\":\"string\"},{\"name\":\"clientID\",\"type\":\"string\"},{\"name\":\"eventVersion\",\"type\":\"string\",\"default\":\"1.0\"},{\"name\":\"isActive\",\"type\":\"boolean\"},{\"name\":\"role\",\"type\":\"string\"},{\"name\":\"details\",\"type\":{\"type\":\"map\",\"values\":{\"type\":\"record\",\"name\":\"AnyValueMsg\",\"fields\":[{\"name\":\"anyValue\",\"type\":[\"null\",\"int\",\"long\",\"boolean\",\"double\",\"bytes\",\"string\"]}]}}}]}"); + @Deprecated public java.lang.CharSequence originalID; + @Deprecated public java.lang.CharSequence inStoreID; @Deprecated public long occurredMillis; @Deprecated public long receivedMillis; @Deprecated public java.lang.CharSequence userID; @@ -21,8 +21,8 @@ public class IMEventMsg extends org.apache.avro.specific.SpecificRecordBase impl // Used by DatumWriter. Applications should not call. public java.lang.Object get(int field$) { switch (field$) { - case 0: return id; - case 1: return idInStore; + case 0: return originalID; + case 1: return inStoreID; case 2: return occurredMillis; case 3: return receivedMillis; case 4: return userID; @@ -38,8 +38,8 @@ public class IMEventMsg extends org.apache.avro.specific.SpecificRecordBase impl @SuppressWarnings(value="unchecked") public void put(int field$, java.lang.Object value$) { switch (field$) { - case 0: id = (java.lang.CharSequence)value$; break; - case 1: idInStore = (java.lang.CharSequence)value$; break; + case 0: originalID = (java.lang.CharSequence)value$; break; + case 1: inStoreID = (java.lang.CharSequence)value$; break; case 2: occurredMillis = (java.lang.Long)value$; break; case 3: receivedMillis = (java.lang.Long)value$; break; case 4: userID = (java.lang.CharSequence)value$; break; @@ -53,33 +53,33 @@ public class IMEventMsg extends org.apache.avro.specific.SpecificRecordBase impl } /** - * Gets the value of the 'id' field. + * Gets the value of the 'originalID' field. */ - public java.lang.CharSequence getId() { - return id; + public java.lang.CharSequence getOriginalID() { + return originalID; } /** - * Sets the value of the 'id' field. + * Sets the value of the 'originalID' field. * @param value the value to set. */ - public void setId(java.lang.CharSequence value) { - this.id = value; + public void setOriginalID(java.lang.CharSequence value) { + this.originalID = value; } /** - * Gets the value of the 'idInStore' field. + * Gets the value of the 'inStoreID' field. */ - public java.lang.CharSequence getIdInStore() { - return idInStore; + public java.lang.CharSequence getInStoreID() { + return inStoreID; } /** - * Sets the value of the 'idInStore' field. + * Sets the value of the 'inStoreID' field. * @param value the value to set. */ - public void setIdInStore(java.lang.CharSequence value) { - this.idInStore = value; + public void setInStoreID(java.lang.CharSequence value) { + this.inStoreID = value; } /** @@ -223,8 +223,8 @@ public class IMEventMsg extends org.apache.avro.specific.SpecificRecordBase impl public static class Builder extends org.apache.avro.specific.SpecificRecordBuilderBase implements org.apache.avro.data.RecordBuilder { - private java.lang.CharSequence id; - private java.lang.CharSequence idInStore; + private java.lang.CharSequence originalID; + private java.lang.CharSequence inStoreID; private long occurredMillis; private long receivedMillis; private java.lang.CharSequence userID; @@ -247,12 +247,12 @@ public class IMEventMsg extends org.apache.avro.specific.SpecificRecordBase impl /** Creates a Builder by copying an existing IMEventMsg instance */ private Builder(gr.grnet.aquarium.message.avro.gen.IMEventMsg other) { super(gr.grnet.aquarium.message.avro.gen.IMEventMsg.SCHEMA$); - if (isValidValue(fields()[0], other.id)) { - this.id = (java.lang.CharSequence) data().deepCopy(fields()[0].schema(), other.id); + if (isValidValue(fields()[0], other.originalID)) { + this.originalID = (java.lang.CharSequence) data().deepCopy(fields()[0].schema(), other.originalID); fieldSetFlags()[0] = true; } - if (isValidValue(fields()[1], other.idInStore)) { - this.idInStore = (java.lang.CharSequence) data().deepCopy(fields()[1].schema(), other.idInStore); + if (isValidValue(fields()[1], other.inStoreID)) { + this.inStoreID = (java.lang.CharSequence) data().deepCopy(fields()[1].schema(), other.inStoreID); fieldSetFlags()[1] = true; } if (isValidValue(fields()[2], other.occurredMillis)) { @@ -289,52 +289,52 @@ public class IMEventMsg extends org.apache.avro.specific.SpecificRecordBase impl } } - /** Gets the value of the 'id' field */ - public java.lang.CharSequence getId() { - return id; + /** Gets the value of the 'originalID' field */ + public java.lang.CharSequence getOriginalID() { + return originalID; } - /** Sets the value of the 'id' field */ - public gr.grnet.aquarium.message.avro.gen.IMEventMsg.Builder setId(java.lang.CharSequence value) { + /** Sets the value of the 'originalID' field */ + public gr.grnet.aquarium.message.avro.gen.IMEventMsg.Builder setOriginalID(java.lang.CharSequence value) { validate(fields()[0], value); - this.id = value; + this.originalID = value; fieldSetFlags()[0] = true; return this; } - /** Checks whether the 'id' field has been set */ - public boolean hasId() { + /** Checks whether the 'originalID' field has been set */ + public boolean hasOriginalID() { return fieldSetFlags()[0]; } - /** Clears the value of the 'id' field */ - public gr.grnet.aquarium.message.avro.gen.IMEventMsg.Builder clearId() { - id = null; + /** Clears the value of the 'originalID' field */ + public gr.grnet.aquarium.message.avro.gen.IMEventMsg.Builder clearOriginalID() { + originalID = null; fieldSetFlags()[0] = false; return this; } - /** Gets the value of the 'idInStore' field */ - public java.lang.CharSequence getIdInStore() { - return idInStore; + /** Gets the value of the 'inStoreID' field */ + public java.lang.CharSequence getInStoreID() { + return inStoreID; } - /** Sets the value of the 'idInStore' field */ - public gr.grnet.aquarium.message.avro.gen.IMEventMsg.Builder setIdInStore(java.lang.CharSequence value) { + /** Sets the value of the 'inStoreID' field */ + public gr.grnet.aquarium.message.avro.gen.IMEventMsg.Builder setInStoreID(java.lang.CharSequence value) { validate(fields()[1], value); - this.idInStore = value; + this.inStoreID = value; fieldSetFlags()[1] = true; return this; } - /** Checks whether the 'idInStore' field has been set */ - public boolean hasIdInStore() { + /** Checks whether the 'inStoreID' field has been set */ + public boolean hasInStoreID() { return fieldSetFlags()[1]; } - /** Clears the value of the 'idInStore' field */ - public gr.grnet.aquarium.message.avro.gen.IMEventMsg.Builder clearIdInStore() { - idInStore = null; + /** Clears the value of the 'inStoreID' field */ + public gr.grnet.aquarium.message.avro.gen.IMEventMsg.Builder clearInStoreID() { + inStoreID = null; fieldSetFlags()[1] = false; return this; } @@ -540,8 +540,8 @@ public class IMEventMsg extends org.apache.avro.specific.SpecificRecordBase impl public IMEventMsg build() { try { IMEventMsg record = new IMEventMsg(); - record.id = fieldSetFlags()[0] ? this.id : (java.lang.CharSequence) defaultValue(fields()[0]); - record.idInStore = fieldSetFlags()[1] ? this.idInStore : (java.lang.CharSequence) defaultValue(fields()[1]); + record.originalID = fieldSetFlags()[0] ? this.originalID : (java.lang.CharSequence) defaultValue(fields()[0]); + record.inStoreID = fieldSetFlags()[1] ? this.inStoreID : (java.lang.CharSequence) defaultValue(fields()[1]); record.occurredMillis = fieldSetFlags()[2] ? this.occurredMillis : (java.lang.Long) defaultValue(fields()[2]); record.receivedMillis = fieldSetFlags()[3] ? this.receivedMillis : (java.lang.Long) defaultValue(fields()[3]); record.userID = fieldSetFlags()[4] ? this.userID : (java.lang.CharSequence) defaultValue(fields()[4]); diff --git a/src/main/java/gr/grnet/aquarium/message/avro/gen/PolicyMsg.java b/src/main/java/gr/grnet/aquarium/message/avro/gen/PolicyMsg.java index ce8e762..0eac699 100644 --- a/src/main/java/gr/grnet/aquarium/message/avro/gen/PolicyMsg.java +++ b/src/main/java/gr/grnet/aquarium/message/avro/gen/PolicyMsg.java @@ -6,8 +6,9 @@ package gr.grnet.aquarium.message.avro.gen; @SuppressWarnings("all") public class PolicyMsg extends org.apache.avro.specific.SpecificRecordBase implements org.apache.avro.specific.SpecificRecord { - public static final org.apache.avro.Schema SCHEMA$ = new org.apache.avro.Schema.Parser().parse("{\"type\":\"record\",\"name\":\"PolicyMsg\",\"namespace\":\"gr.grnet.aquarium.message.avro.gen\",\"fields\":[{\"name\":\"ID\",\"type\":\"string\",\"aliases\":[\"id, _id, idInStore, inStoreID\"]},{\"name\":\"parentID\",\"type\":[\"string\",\"null\"]},{\"name\":\"validFromMillis\",\"type\":\"long\"},{\"name\":\"validToMillis\",\"type\":\"long\"},{\"name\":\"resourceTypes\",\"type\":{\"type\":\"array\",\"items\":{\"type\":\"record\",\"name\":\"ResourceTypeMsg\",\"fields\":[{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"unit\",\"type\":\"string\"},{\"name\":\"chargingBehaviorClass\",\"type\":\"string\"}]}}},{\"name\":\"chargingBehaviors\",\"type\":{\"type\":\"array\",\"items\":\"string\"}},{\"name\":\"roleMapping\",\"type\":{\"type\":\"map\",\"values\":{\"type\":\"record\",\"name\":\"FullPriceTableMsg\",\"fields\":[{\"name\":\"perResource\",\"type\":{\"type\":\"map\",\"values\":{\"type\":\"map\",\"values\":{\"type\":\"record\",\"name\":\"SelectorValueMsg\",\"fields\":[{\"name\":\"selectorValue\",\"type\":[{\"type\":\"record\",\"name\":\"EffectivePriceTableMsg\",\"fields\":[{\"name\":\"priceOverrides\",\"type\":{\"type\":\"array\",\"items\":{\"type\":\"record\",\"name\":\"EffectiveUnitPriceMsg\",\"fields\":[{\"name\":\"unitPrice\",\"type\":\"double\"},{\"name\":\"when\",\"type\":[{\"type\":\"record\",\"name\":\"CronSpecTupleMsg\",\"fields\":[{\"name\":\"a\",\"type\":\"string\"},{\"name\":\"b\",\"type\":\"string\"}]},\"null\"]}]}}}]},{\"type\":\"map\",\"values\":\"SelectorValueMsg\"}]}]}}}}]}}}]}"); - @Deprecated public java.lang.CharSequence ID; + public static final org.apache.avro.Schema SCHEMA$ = new org.apache.avro.Schema.Parser().parse("{\"type\":\"record\",\"name\":\"PolicyMsg\",\"namespace\":\"gr.grnet.aquarium.message.avro.gen\",\"fields\":[{\"name\":\"originalID\",\"type\":\"string\",\"aliases\":[\"id\"]},{\"name\":\"inStoreID\",\"type\":[\"string\",\"null\"],\"aliases\":[\"_id\",\"idInStore\"]},{\"name\":\"parentID\",\"type\":[\"string\",\"null\"]},{\"name\":\"validFromMillis\",\"type\":\"long\"},{\"name\":\"validToMillis\",\"type\":\"long\"},{\"name\":\"resourceTypes\",\"type\":{\"type\":\"array\",\"items\":{\"type\":\"record\",\"name\":\"ResourceTypeMsg\",\"fields\":[{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"unit\",\"type\":\"string\"},{\"name\":\"chargingBehaviorClass\",\"type\":\"string\"}]}}},{\"name\":\"chargingBehaviors\",\"type\":{\"type\":\"array\",\"items\":\"string\"}},{\"name\":\"roleMapping\",\"type\":{\"type\":\"map\",\"values\":{\"type\":\"record\",\"name\":\"FullPriceTableMsg\",\"fields\":[{\"name\":\"perResource\",\"type\":{\"type\":\"map\",\"values\":{\"type\":\"map\",\"values\":{\"type\":\"record\",\"name\":\"SelectorValueMsg\",\"fields\":[{\"name\":\"selectorValue\",\"type\":[{\"type\":\"record\",\"name\":\"EffectivePriceTableMsg\",\"fields\":[{\"name\":\"priceOverrides\",\"type\":{\"type\":\"array\",\"items\":{\"type\":\"record\",\"name\":\"EffectiveUnitPriceMsg\",\"fields\":[{\"name\":\"unitPrice\",\"type\":\"double\"},{\"name\":\"when\",\"type\":[{\"type\":\"record\",\"name\":\"CronSpecTupleMsg\",\"fields\":[{\"name\":\"a\",\"type\":\"string\"},{\"name\":\"b\",\"type\":\"string\"}]},\"null\"]}]}}}]},{\"type\":\"map\",\"values\":\"SelectorValueMsg\"}]}]}}}}]}}}]}"); + @Deprecated public java.lang.CharSequence originalID; + @Deprecated public java.lang.CharSequence inStoreID; @Deprecated public java.lang.CharSequence parentID; @Deprecated public long validFromMillis; @Deprecated public long validToMillis; @@ -18,13 +19,14 @@ public class PolicyMsg extends org.apache.avro.specific.SpecificRecordBase imple // Used by DatumWriter. Applications should not call. public java.lang.Object get(int field$) { switch (field$) { - case 0: return ID; - case 1: return parentID; - case 2: return validFromMillis; - case 3: return validToMillis; - case 4: return resourceTypes; - case 5: return chargingBehaviors; - case 6: return roleMapping; + case 0: return originalID; + case 1: return inStoreID; + case 2: return parentID; + case 3: return validFromMillis; + case 4: return validToMillis; + case 5: return resourceTypes; + case 6: return chargingBehaviors; + case 7: return roleMapping; default: throw new org.apache.avro.AvroRuntimeException("Bad index"); } } @@ -32,30 +34,46 @@ public class PolicyMsg extends org.apache.avro.specific.SpecificRecordBase imple @SuppressWarnings(value="unchecked") public void put(int field$, java.lang.Object value$) { switch (field$) { - case 0: ID = (java.lang.CharSequence)value$; break; - case 1: parentID = (java.lang.CharSequence)value$; break; - case 2: validFromMillis = (java.lang.Long)value$; break; - case 3: validToMillis = (java.lang.Long)value$; break; - case 4: resourceTypes = (java.util.List)value$; break; - case 5: chargingBehaviors = (java.util.List)value$; break; - case 6: roleMapping = (java.util.Map)value$; break; + case 0: originalID = (java.lang.CharSequence)value$; break; + case 1: inStoreID = (java.lang.CharSequence)value$; break; + case 2: parentID = (java.lang.CharSequence)value$; break; + case 3: validFromMillis = (java.lang.Long)value$; break; + case 4: validToMillis = (java.lang.Long)value$; break; + case 5: resourceTypes = (java.util.List)value$; break; + case 6: chargingBehaviors = (java.util.List)value$; break; + case 7: roleMapping = (java.util.Map)value$; break; default: throw new org.apache.avro.AvroRuntimeException("Bad index"); } } /** - * Gets the value of the 'ID' field. + * Gets the value of the 'originalID' field. */ - public java.lang.CharSequence getID() { - return ID; + public java.lang.CharSequence getOriginalID() { + return originalID; } /** - * Sets the value of the 'ID' field. + * Sets the value of the 'originalID' field. * @param value the value to set. */ - public void setID(java.lang.CharSequence value) { - this.ID = value; + public void setOriginalID(java.lang.CharSequence value) { + this.originalID = value; + } + + /** + * Gets the value of the 'inStoreID' field. + */ + public java.lang.CharSequence getInStoreID() { + return inStoreID; + } + + /** + * Sets the value of the 'inStoreID' field. + * @param value the value to set. + */ + public void setInStoreID(java.lang.CharSequence value) { + this.inStoreID = value; } /** @@ -169,7 +187,8 @@ public class PolicyMsg extends org.apache.avro.specific.SpecificRecordBase imple public static class Builder extends org.apache.avro.specific.SpecificRecordBuilderBase implements org.apache.avro.data.RecordBuilder { - private java.lang.CharSequence ID; + private java.lang.CharSequence originalID; + private java.lang.CharSequence inStoreID; private java.lang.CharSequence parentID; private long validFromMillis; private long validToMillis; @@ -190,61 +209,90 @@ public class PolicyMsg extends org.apache.avro.specific.SpecificRecordBase imple /** Creates a Builder by copying an existing PolicyMsg instance */ private Builder(gr.grnet.aquarium.message.avro.gen.PolicyMsg other) { super(gr.grnet.aquarium.message.avro.gen.PolicyMsg.SCHEMA$); - if (isValidValue(fields()[0], other.ID)) { - this.ID = (java.lang.CharSequence) data().deepCopy(fields()[0].schema(), other.ID); + if (isValidValue(fields()[0], other.originalID)) { + this.originalID = (java.lang.CharSequence) data().deepCopy(fields()[0].schema(), other.originalID); fieldSetFlags()[0] = true; } - if (isValidValue(fields()[1], other.parentID)) { - this.parentID = (java.lang.CharSequence) data().deepCopy(fields()[1].schema(), other.parentID); + if (isValidValue(fields()[1], other.inStoreID)) { + this.inStoreID = (java.lang.CharSequence) data().deepCopy(fields()[1].schema(), other.inStoreID); fieldSetFlags()[1] = true; } - if (isValidValue(fields()[2], other.validFromMillis)) { - this.validFromMillis = (java.lang.Long) data().deepCopy(fields()[2].schema(), other.validFromMillis); + if (isValidValue(fields()[2], other.parentID)) { + this.parentID = (java.lang.CharSequence) data().deepCopy(fields()[2].schema(), other.parentID); fieldSetFlags()[2] = true; } - if (isValidValue(fields()[3], other.validToMillis)) { - this.validToMillis = (java.lang.Long) data().deepCopy(fields()[3].schema(), other.validToMillis); + if (isValidValue(fields()[3], other.validFromMillis)) { + this.validFromMillis = (java.lang.Long) data().deepCopy(fields()[3].schema(), other.validFromMillis); fieldSetFlags()[3] = true; } - if (isValidValue(fields()[4], other.resourceTypes)) { - this.resourceTypes = (java.util.List) data().deepCopy(fields()[4].schema(), other.resourceTypes); + if (isValidValue(fields()[4], other.validToMillis)) { + this.validToMillis = (java.lang.Long) data().deepCopy(fields()[4].schema(), other.validToMillis); fieldSetFlags()[4] = true; } - if (isValidValue(fields()[5], other.chargingBehaviors)) { - this.chargingBehaviors = (java.util.List) data().deepCopy(fields()[5].schema(), other.chargingBehaviors); + if (isValidValue(fields()[5], other.resourceTypes)) { + this.resourceTypes = (java.util.List) data().deepCopy(fields()[5].schema(), other.resourceTypes); fieldSetFlags()[5] = true; } - if (isValidValue(fields()[6], other.roleMapping)) { - this.roleMapping = (java.util.Map) data().deepCopy(fields()[6].schema(), other.roleMapping); + if (isValidValue(fields()[6], other.chargingBehaviors)) { + this.chargingBehaviors = (java.util.List) data().deepCopy(fields()[6].schema(), other.chargingBehaviors); fieldSetFlags()[6] = true; } + if (isValidValue(fields()[7], other.roleMapping)) { + this.roleMapping = (java.util.Map) data().deepCopy(fields()[7].schema(), other.roleMapping); + fieldSetFlags()[7] = true; + } } - /** Gets the value of the 'ID' field */ - public java.lang.CharSequence getID() { - return ID; + /** Gets the value of the 'originalID' field */ + public java.lang.CharSequence getOriginalID() { + return originalID; } - /** Sets the value of the 'ID' field */ - public gr.grnet.aquarium.message.avro.gen.PolicyMsg.Builder setID(java.lang.CharSequence value) { + /** Sets the value of the 'originalID' field */ + public gr.grnet.aquarium.message.avro.gen.PolicyMsg.Builder setOriginalID(java.lang.CharSequence value) { validate(fields()[0], value); - this.ID = value; + this.originalID = value; fieldSetFlags()[0] = true; return this; } - /** Checks whether the 'ID' field has been set */ - public boolean hasID() { + /** Checks whether the 'originalID' field has been set */ + public boolean hasOriginalID() { return fieldSetFlags()[0]; } - /** Clears the value of the 'ID' field */ - public gr.grnet.aquarium.message.avro.gen.PolicyMsg.Builder clearID() { - ID = null; + /** Clears the value of the 'originalID' field */ + public gr.grnet.aquarium.message.avro.gen.PolicyMsg.Builder clearOriginalID() { + originalID = null; fieldSetFlags()[0] = false; return this; } + /** Gets the value of the 'inStoreID' field */ + public java.lang.CharSequence getInStoreID() { + return inStoreID; + } + + /** Sets the value of the 'inStoreID' field */ + public gr.grnet.aquarium.message.avro.gen.PolicyMsg.Builder setInStoreID(java.lang.CharSequence value) { + validate(fields()[1], value); + this.inStoreID = value; + fieldSetFlags()[1] = true; + return this; + } + + /** Checks whether the 'inStoreID' field has been set */ + public boolean hasInStoreID() { + return fieldSetFlags()[1]; + } + + /** Clears the value of the 'inStoreID' field */ + public gr.grnet.aquarium.message.avro.gen.PolicyMsg.Builder clearInStoreID() { + inStoreID = null; + fieldSetFlags()[1] = false; + return this; + } + /** Gets the value of the 'parentID' field */ public java.lang.CharSequence getParentID() { return parentID; @@ -252,21 +300,21 @@ public class PolicyMsg extends org.apache.avro.specific.SpecificRecordBase imple /** Sets the value of the 'parentID' field */ public gr.grnet.aquarium.message.avro.gen.PolicyMsg.Builder setParentID(java.lang.CharSequence value) { - validate(fields()[1], value); + validate(fields()[2], value); this.parentID = value; - fieldSetFlags()[1] = true; + fieldSetFlags()[2] = true; return this; } /** Checks whether the 'parentID' field has been set */ public boolean hasParentID() { - return fieldSetFlags()[1]; + return fieldSetFlags()[2]; } /** Clears the value of the 'parentID' field */ public gr.grnet.aquarium.message.avro.gen.PolicyMsg.Builder clearParentID() { parentID = null; - fieldSetFlags()[1] = false; + fieldSetFlags()[2] = false; return this; } @@ -277,20 +325,20 @@ public class PolicyMsg extends org.apache.avro.specific.SpecificRecordBase imple /** Sets the value of the 'validFromMillis' field */ public gr.grnet.aquarium.message.avro.gen.PolicyMsg.Builder setValidFromMillis(long value) { - validate(fields()[2], value); + validate(fields()[3], value); this.validFromMillis = value; - fieldSetFlags()[2] = true; + fieldSetFlags()[3] = true; return this; } /** Checks whether the 'validFromMillis' field has been set */ public boolean hasValidFromMillis() { - return fieldSetFlags()[2]; + return fieldSetFlags()[3]; } /** Clears the value of the 'validFromMillis' field */ public gr.grnet.aquarium.message.avro.gen.PolicyMsg.Builder clearValidFromMillis() { - fieldSetFlags()[2] = false; + fieldSetFlags()[3] = false; return this; } @@ -301,20 +349,20 @@ public class PolicyMsg extends org.apache.avro.specific.SpecificRecordBase imple /** Sets the value of the 'validToMillis' field */ public gr.grnet.aquarium.message.avro.gen.PolicyMsg.Builder setValidToMillis(long value) { - validate(fields()[3], value); + validate(fields()[4], value); this.validToMillis = value; - fieldSetFlags()[3] = true; + fieldSetFlags()[4] = true; return this; } /** Checks whether the 'validToMillis' field has been set */ public boolean hasValidToMillis() { - return fieldSetFlags()[3]; + return fieldSetFlags()[4]; } /** Clears the value of the 'validToMillis' field */ public gr.grnet.aquarium.message.avro.gen.PolicyMsg.Builder clearValidToMillis() { - fieldSetFlags()[3] = false; + fieldSetFlags()[4] = false; return this; } @@ -325,21 +373,21 @@ public class PolicyMsg extends org.apache.avro.specific.SpecificRecordBase imple /** Sets the value of the 'resourceTypes' field */ public gr.grnet.aquarium.message.avro.gen.PolicyMsg.Builder setResourceTypes(java.util.List value) { - validate(fields()[4], value); + validate(fields()[5], value); this.resourceTypes = value; - fieldSetFlags()[4] = true; + fieldSetFlags()[5] = true; return this; } /** Checks whether the 'resourceTypes' field has been set */ public boolean hasResourceTypes() { - return fieldSetFlags()[4]; + return fieldSetFlags()[5]; } /** Clears the value of the 'resourceTypes' field */ public gr.grnet.aquarium.message.avro.gen.PolicyMsg.Builder clearResourceTypes() { resourceTypes = null; - fieldSetFlags()[4] = false; + fieldSetFlags()[5] = false; return this; } @@ -350,21 +398,21 @@ public class PolicyMsg extends org.apache.avro.specific.SpecificRecordBase imple /** Sets the value of the 'chargingBehaviors' field */ public gr.grnet.aquarium.message.avro.gen.PolicyMsg.Builder setChargingBehaviors(java.util.List value) { - validate(fields()[5], value); + validate(fields()[6], value); this.chargingBehaviors = value; - fieldSetFlags()[5] = true; + fieldSetFlags()[6] = true; return this; } /** Checks whether the 'chargingBehaviors' field has been set */ public boolean hasChargingBehaviors() { - return fieldSetFlags()[5]; + return fieldSetFlags()[6]; } /** Clears the value of the 'chargingBehaviors' field */ public gr.grnet.aquarium.message.avro.gen.PolicyMsg.Builder clearChargingBehaviors() { chargingBehaviors = null; - fieldSetFlags()[5] = false; + fieldSetFlags()[6] = false; return this; } @@ -375,21 +423,21 @@ public class PolicyMsg extends org.apache.avro.specific.SpecificRecordBase imple /** Sets the value of the 'roleMapping' field */ public gr.grnet.aquarium.message.avro.gen.PolicyMsg.Builder setRoleMapping(java.util.Map value) { - validate(fields()[6], value); + validate(fields()[7], value); this.roleMapping = value; - fieldSetFlags()[6] = true; + fieldSetFlags()[7] = true; return this; } /** Checks whether the 'roleMapping' field has been set */ public boolean hasRoleMapping() { - return fieldSetFlags()[6]; + return fieldSetFlags()[7]; } /** Clears the value of the 'roleMapping' field */ public gr.grnet.aquarium.message.avro.gen.PolicyMsg.Builder clearRoleMapping() { roleMapping = null; - fieldSetFlags()[6] = false; + fieldSetFlags()[7] = false; return this; } @@ -397,13 +445,14 @@ public class PolicyMsg extends org.apache.avro.specific.SpecificRecordBase imple public PolicyMsg build() { try { PolicyMsg record = new PolicyMsg(); - record.ID = fieldSetFlags()[0] ? this.ID : (java.lang.CharSequence) defaultValue(fields()[0]); - record.parentID = fieldSetFlags()[1] ? this.parentID : (java.lang.CharSequence) defaultValue(fields()[1]); - record.validFromMillis = fieldSetFlags()[2] ? this.validFromMillis : (java.lang.Long) defaultValue(fields()[2]); - record.validToMillis = fieldSetFlags()[3] ? this.validToMillis : (java.lang.Long) defaultValue(fields()[3]); - record.resourceTypes = fieldSetFlags()[4] ? this.resourceTypes : (java.util.List) defaultValue(fields()[4]); - record.chargingBehaviors = fieldSetFlags()[5] ? this.chargingBehaviors : (java.util.List) defaultValue(fields()[5]); - record.roleMapping = fieldSetFlags()[6] ? this.roleMapping : (java.util.Map) defaultValue(fields()[6]); + record.originalID = fieldSetFlags()[0] ? this.originalID : (java.lang.CharSequence) defaultValue(fields()[0]); + record.inStoreID = fieldSetFlags()[1] ? this.inStoreID : (java.lang.CharSequence) defaultValue(fields()[1]); + record.parentID = fieldSetFlags()[2] ? this.parentID : (java.lang.CharSequence) defaultValue(fields()[2]); + record.validFromMillis = fieldSetFlags()[3] ? this.validFromMillis : (java.lang.Long) defaultValue(fields()[3]); + record.validToMillis = fieldSetFlags()[4] ? this.validToMillis : (java.lang.Long) defaultValue(fields()[4]); + record.resourceTypes = fieldSetFlags()[5] ? this.resourceTypes : (java.util.List) defaultValue(fields()[5]); + record.chargingBehaviors = fieldSetFlags()[6] ? this.chargingBehaviors : (java.util.List) defaultValue(fields()[6]); + record.roleMapping = fieldSetFlags()[7] ? this.roleMapping : (java.util.Map) defaultValue(fields()[7]); return record; } catch (Exception e) { throw new org.apache.avro.AvroRuntimeException(e); diff --git a/src/main/java/gr/grnet/aquarium/message/avro/gen/ResourceEventMsg.java b/src/main/java/gr/grnet/aquarium/message/avro/gen/ResourceEventMsg.java index 47d518e..91e01bc 100644 --- a/src/main/java/gr/grnet/aquarium/message/avro/gen/ResourceEventMsg.java +++ b/src/main/java/gr/grnet/aquarium/message/avro/gen/ResourceEventMsg.java @@ -6,9 +6,9 @@ package gr.grnet.aquarium.message.avro.gen; @SuppressWarnings("all") public class ResourceEventMsg extends org.apache.avro.specific.SpecificRecordBase implements org.apache.avro.specific.SpecificRecord { - public static final org.apache.avro.Schema SCHEMA$ = new org.apache.avro.Schema.Parser().parse("{\"type\":\"record\",\"name\":\"ResourceEventMsg\",\"namespace\":\"gr.grnet.aquarium.message.avro.gen\",\"fields\":[{\"name\":\"id\",\"type\":\"string\",\"aliases\":[\"originalID\",\"ID\"]},{\"name\":\"idInStore\",\"type\":\"string\"},{\"name\":\"occurredMillis\",\"type\":\"long\"},{\"name\":\"receivedMillis\",\"type\":\"long\",\"default\":0},{\"name\":\"userID\",\"type\":\"string\"},{\"name\":\"clientID\",\"type\":\"string\"},{\"name\":\"eventVersion\",\"type\":\"string\",\"default\":\"1.0\"},{\"name\":\"resource\",\"type\":\"string\",\"aliases\":[\"resourceType\"]},{\"name\":\"instanceID\",\"type\":\"string\"},{\"name\":\"value\",\"type\":\"string\"},{\"name\":\"details\",\"type\":{\"type\":\"map\",\"values\":{\"type\":\"record\",\"name\":\"AnyValueMsg\",\"fields\":[{\"name\":\"anyValue\",\"type\":[\"null\",\"int\",\"long\",\"boolean\",\"double\",\"bytes\",\"string\"]}]}}}]}"); - @Deprecated public java.lang.CharSequence id; - @Deprecated public java.lang.CharSequence idInStore; + public static final org.apache.avro.Schema SCHEMA$ = new org.apache.avro.Schema.Parser().parse("{\"type\":\"record\",\"name\":\"ResourceEventMsg\",\"namespace\":\"gr.grnet.aquarium.message.avro.gen\",\"fields\":[{\"name\":\"originalID\",\"type\":\"string\",\"aliases\":[\"id\"]},{\"name\":\"inStoreID\",\"type\":[\"string\",\"null\"],\"aliases\":[\"_id\",\"idInStore\"]},{\"name\":\"occurredMillis\",\"type\":\"long\"},{\"name\":\"receivedMillis\",\"type\":\"long\",\"default\":0},{\"name\":\"userID\",\"type\":\"string\"},{\"name\":\"clientID\",\"type\":\"string\"},{\"name\":\"eventVersion\",\"type\":\"string\",\"default\":\"1.0\"},{\"name\":\"resource\",\"type\":\"string\",\"aliases\":[\"resourceType\"]},{\"name\":\"instanceID\",\"type\":\"string\"},{\"name\":\"value\",\"type\":\"string\"},{\"name\":\"details\",\"type\":{\"type\":\"map\",\"values\":{\"type\":\"record\",\"name\":\"AnyValueMsg\",\"fields\":[{\"name\":\"anyValue\",\"type\":[\"null\",\"int\",\"long\",\"boolean\",\"double\",\"bytes\",\"string\"]}]}}}]}"); + @Deprecated public java.lang.CharSequence originalID; + @Deprecated public java.lang.CharSequence inStoreID; @Deprecated public long occurredMillis; @Deprecated public long receivedMillis; @Deprecated public java.lang.CharSequence userID; @@ -22,8 +22,8 @@ public class ResourceEventMsg extends org.apache.avro.specific.SpecificRecordBas // Used by DatumWriter. Applications should not call. public java.lang.Object get(int field$) { switch (field$) { - case 0: return id; - case 1: return idInStore; + case 0: return originalID; + case 1: return inStoreID; case 2: return occurredMillis; case 3: return receivedMillis; case 4: return userID; @@ -40,8 +40,8 @@ public class ResourceEventMsg extends org.apache.avro.specific.SpecificRecordBas @SuppressWarnings(value="unchecked") public void put(int field$, java.lang.Object value$) { switch (field$) { - case 0: id = (java.lang.CharSequence)value$; break; - case 1: idInStore = (java.lang.CharSequence)value$; break; + case 0: originalID = (java.lang.CharSequence)value$; break; + case 1: inStoreID = (java.lang.CharSequence)value$; break; case 2: occurredMillis = (java.lang.Long)value$; break; case 3: receivedMillis = (java.lang.Long)value$; break; case 4: userID = (java.lang.CharSequence)value$; break; @@ -56,33 +56,33 @@ public class ResourceEventMsg extends org.apache.avro.specific.SpecificRecordBas } /** - * Gets the value of the 'id' field. + * Gets the value of the 'originalID' field. */ - public java.lang.CharSequence getId() { - return id; + public java.lang.CharSequence getOriginalID() { + return originalID; } /** - * Sets the value of the 'id' field. + * Sets the value of the 'originalID' field. * @param value the value to set. */ - public void setId(java.lang.CharSequence value) { - this.id = value; + public void setOriginalID(java.lang.CharSequence value) { + this.originalID = value; } /** - * Gets the value of the 'idInStore' field. + * Gets the value of the 'inStoreID' field. */ - public java.lang.CharSequence getIdInStore() { - return idInStore; + public java.lang.CharSequence getInStoreID() { + return inStoreID; } /** - * Sets the value of the 'idInStore' field. + * Sets the value of the 'inStoreID' field. * @param value the value to set. */ - public void setIdInStore(java.lang.CharSequence value) { - this.idInStore = value; + public void setInStoreID(java.lang.CharSequence value) { + this.inStoreID = value; } /** @@ -241,8 +241,8 @@ public class ResourceEventMsg extends org.apache.avro.specific.SpecificRecordBas public static class Builder extends org.apache.avro.specific.SpecificRecordBuilderBase implements org.apache.avro.data.RecordBuilder { - private java.lang.CharSequence id; - private java.lang.CharSequence idInStore; + private java.lang.CharSequence originalID; + private java.lang.CharSequence inStoreID; private long occurredMillis; private long receivedMillis; private java.lang.CharSequence userID; @@ -266,12 +266,12 @@ public class ResourceEventMsg extends org.apache.avro.specific.SpecificRecordBas /** Creates a Builder by copying an existing ResourceEventMsg instance */ private Builder(gr.grnet.aquarium.message.avro.gen.ResourceEventMsg other) { super(gr.grnet.aquarium.message.avro.gen.ResourceEventMsg.SCHEMA$); - if (isValidValue(fields()[0], other.id)) { - this.id = (java.lang.CharSequence) data().deepCopy(fields()[0].schema(), other.id); + if (isValidValue(fields()[0], other.originalID)) { + this.originalID = (java.lang.CharSequence) data().deepCopy(fields()[0].schema(), other.originalID); fieldSetFlags()[0] = true; } - if (isValidValue(fields()[1], other.idInStore)) { - this.idInStore = (java.lang.CharSequence) data().deepCopy(fields()[1].schema(), other.idInStore); + if (isValidValue(fields()[1], other.inStoreID)) { + this.inStoreID = (java.lang.CharSequence) data().deepCopy(fields()[1].schema(), other.inStoreID); fieldSetFlags()[1] = true; } if (isValidValue(fields()[2], other.occurredMillis)) { @@ -312,52 +312,52 @@ public class ResourceEventMsg extends org.apache.avro.specific.SpecificRecordBas } } - /** Gets the value of the 'id' field */ - public java.lang.CharSequence getId() { - return id; + /** Gets the value of the 'originalID' field */ + public java.lang.CharSequence getOriginalID() { + return originalID; } - /** Sets the value of the 'id' field */ - public gr.grnet.aquarium.message.avro.gen.ResourceEventMsg.Builder setId(java.lang.CharSequence value) { + /** Sets the value of the 'originalID' field */ + public gr.grnet.aquarium.message.avro.gen.ResourceEventMsg.Builder setOriginalID(java.lang.CharSequence value) { validate(fields()[0], value); - this.id = value; + this.originalID = value; fieldSetFlags()[0] = true; return this; } - /** Checks whether the 'id' field has been set */ - public boolean hasId() { + /** Checks whether the 'originalID' field has been set */ + public boolean hasOriginalID() { return fieldSetFlags()[0]; } - /** Clears the value of the 'id' field */ - public gr.grnet.aquarium.message.avro.gen.ResourceEventMsg.Builder clearId() { - id = null; + /** Clears the value of the 'originalID' field */ + public gr.grnet.aquarium.message.avro.gen.ResourceEventMsg.Builder clearOriginalID() { + originalID = null; fieldSetFlags()[0] = false; return this; } - /** Gets the value of the 'idInStore' field */ - public java.lang.CharSequence getIdInStore() { - return idInStore; + /** Gets the value of the 'inStoreID' field */ + public java.lang.CharSequence getInStoreID() { + return inStoreID; } - /** Sets the value of the 'idInStore' field */ - public gr.grnet.aquarium.message.avro.gen.ResourceEventMsg.Builder setIdInStore(java.lang.CharSequence value) { + /** Sets the value of the 'inStoreID' field */ + public gr.grnet.aquarium.message.avro.gen.ResourceEventMsg.Builder setInStoreID(java.lang.CharSequence value) { validate(fields()[1], value); - this.idInStore = value; + this.inStoreID = value; fieldSetFlags()[1] = true; return this; } - /** Checks whether the 'idInStore' field has been set */ - public boolean hasIdInStore() { + /** Checks whether the 'inStoreID' field has been set */ + public boolean hasInStoreID() { return fieldSetFlags()[1]; } - /** Clears the value of the 'idInStore' field */ - public gr.grnet.aquarium.message.avro.gen.ResourceEventMsg.Builder clearIdInStore() { - idInStore = null; + /** Clears the value of the 'inStoreID' field */ + public gr.grnet.aquarium.message.avro.gen.ResourceEventMsg.Builder clearInStoreID() { + inStoreID = null; fieldSetFlags()[1] = false; return this; } @@ -589,8 +589,8 @@ public class ResourceEventMsg extends org.apache.avro.specific.SpecificRecordBas public ResourceEventMsg build() { try { ResourceEventMsg record = new ResourceEventMsg(); - record.id = fieldSetFlags()[0] ? this.id : (java.lang.CharSequence) defaultValue(fields()[0]); - record.idInStore = fieldSetFlags()[1] ? this.idInStore : (java.lang.CharSequence) defaultValue(fields()[1]); + record.originalID = fieldSetFlags()[0] ? this.originalID : (java.lang.CharSequence) defaultValue(fields()[0]); + record.inStoreID = fieldSetFlags()[1] ? this.inStoreID : (java.lang.CharSequence) defaultValue(fields()[1]); record.occurredMillis = fieldSetFlags()[2] ? this.occurredMillis : (java.lang.Long) defaultValue(fields()[2]); record.receivedMillis = fieldSetFlags()[3] ? this.receivedMillis : (java.lang.Long) defaultValue(fields()[3]); record.userID = fieldSetFlags()[4] ? this.userID : (java.lang.CharSequence) defaultValue(fields()[4]); diff --git a/src/main/java/gr/grnet/aquarium/message/avro/gen/WalletEntryMsg.java b/src/main/java/gr/grnet/aquarium/message/avro/gen/WalletEntryMsg.java index 7ab2274..52e5a86 100644 --- a/src/main/java/gr/grnet/aquarium/message/avro/gen/WalletEntryMsg.java +++ b/src/main/java/gr/grnet/aquarium/message/avro/gen/WalletEntryMsg.java @@ -6,7 +6,7 @@ package gr.grnet.aquarium.message.avro.gen; @SuppressWarnings("all") public class WalletEntryMsg extends org.apache.avro.specific.SpecificRecordBase implements org.apache.avro.specific.SpecificRecord { - public static final org.apache.avro.Schema SCHEMA$ = new org.apache.avro.Schema.Parser().parse("{\"type\":\"record\",\"name\":\"WalletEntryMsg\",\"namespace\":\"gr.grnet.aquarium.message.avro.gen\",\"fields\":[{\"name\":\"userID\",\"type\":\"string\"},{\"name\":\"sumOfCreditsToSubtract\",\"type\":\"double\"},{\"name\":\"oldTotalCredits\",\"type\":\"double\"},{\"name\":\"newTotalCredits\",\"type\":\"double\"},{\"name\":\"whenComputedMillis\",\"type\":\"long\"},{\"name\":\"referenceStartMillis\",\"type\":\"long\"},{\"name\":\"referenceStopMillis\",\"type\":\"long\"},{\"name\":\"billingYear\",\"type\":\"int\"},{\"name\":\"billingMonth\",\"type\":\"int\"},{\"name\":\"billingDay\",\"type\":\"int\"},{\"name\":\"chargeslots\",\"type\":{\"type\":\"array\",\"items\":{\"type\":\"record\",\"name\":\"ChargeslotMsg\",\"fields\":[{\"name\":\"startMillis\",\"type\":\"long\"},{\"name\":\"stopMillis\",\"type\":\"long\"},{\"name\":\"unitPrice\",\"type\":\"double\"},{\"name\":\"explanation\",\"type\":\"string\",\"default\":\"\"},{\"name\":\"creditsToSubtract\",\"type\":\"double\"}]}}},{\"name\":\"resourceEvents\",\"type\":{\"type\":\"array\",\"items\":{\"type\":\"record\",\"name\":\"ResourceEventMsg\",\"fields\":[{\"name\":\"id\",\"type\":\"string\",\"aliases\":[\"originalID\",\"ID\"]},{\"name\":\"idInStore\",\"type\":\"string\"},{\"name\":\"occurredMillis\",\"type\":\"long\"},{\"name\":\"receivedMillis\",\"type\":\"long\",\"default\":0},{\"name\":\"userID\",\"type\":\"string\"},{\"name\":\"clientID\",\"type\":\"string\"},{\"name\":\"eventVersion\",\"type\":\"string\",\"default\":\"1.0\"},{\"name\":\"resource\",\"type\":\"string\",\"aliases\":[\"resourceType\"]},{\"name\":\"instanceID\",\"type\":\"string\"},{\"name\":\"value\",\"type\":\"string\"},{\"name\":\"details\",\"type\":{\"type\":\"map\",\"values\":{\"type\":\"record\",\"name\":\"AnyValueMsg\",\"fields\":[{\"name\":\"anyValue\",\"type\":[\"null\",\"int\",\"long\",\"boolean\",\"double\",\"bytes\",\"string\"]}]}}}]}}},{\"name\":\"resourceType\",\"type\":{\"type\":\"record\",\"name\":\"ResourceTypeMsg\",\"fields\":[{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"unit\",\"type\":\"string\"},{\"name\":\"chargingBehaviorClass\",\"type\":\"string\"}]}},{\"name\":\"isSynthetic\",\"type\":\"boolean\",\"default\":false}]}"); + public static final org.apache.avro.Schema SCHEMA$ = new org.apache.avro.Schema.Parser().parse("{\"type\":\"record\",\"name\":\"WalletEntryMsg\",\"namespace\":\"gr.grnet.aquarium.message.avro.gen\",\"fields\":[{\"name\":\"userID\",\"type\":\"string\"},{\"name\":\"sumOfCreditsToSubtract\",\"type\":\"double\"},{\"name\":\"oldTotalCredits\",\"type\":\"double\"},{\"name\":\"newTotalCredits\",\"type\":\"double\"},{\"name\":\"whenComputedMillis\",\"type\":\"long\"},{\"name\":\"referenceStartMillis\",\"type\":\"long\"},{\"name\":\"referenceStopMillis\",\"type\":\"long\"},{\"name\":\"billingYear\",\"type\":\"int\"},{\"name\":\"billingMonth\",\"type\":\"int\"},{\"name\":\"billingDay\",\"type\":\"int\"},{\"name\":\"chargeslots\",\"type\":{\"type\":\"array\",\"items\":{\"type\":\"record\",\"name\":\"ChargeslotMsg\",\"fields\":[{\"name\":\"startMillis\",\"type\":\"long\"},{\"name\":\"stopMillis\",\"type\":\"long\"},{\"name\":\"unitPrice\",\"type\":\"double\"},{\"name\":\"explanation\",\"type\":\"string\",\"default\":\"\"},{\"name\":\"creditsToSubtract\",\"type\":\"double\"}]}}},{\"name\":\"resourceEvents\",\"type\":{\"type\":\"array\",\"items\":{\"type\":\"record\",\"name\":\"ResourceEventMsg\",\"fields\":[{\"name\":\"originalID\",\"type\":\"string\",\"aliases\":[\"id\"]},{\"name\":\"inStoreID\",\"type\":[\"string\",\"null\"],\"aliases\":[\"_id\",\"idInStore\"]},{\"name\":\"occurredMillis\",\"type\":\"long\"},{\"name\":\"receivedMillis\",\"type\":\"long\",\"default\":0},{\"name\":\"userID\",\"type\":\"string\"},{\"name\":\"clientID\",\"type\":\"string\"},{\"name\":\"eventVersion\",\"type\":\"string\",\"default\":\"1.0\"},{\"name\":\"resource\",\"type\":\"string\",\"aliases\":[\"resourceType\"]},{\"name\":\"instanceID\",\"type\":\"string\"},{\"name\":\"value\",\"type\":\"string\"},{\"name\":\"details\",\"type\":{\"type\":\"map\",\"values\":{\"type\":\"record\",\"name\":\"AnyValueMsg\",\"fields\":[{\"name\":\"anyValue\",\"type\":[\"null\",\"int\",\"long\",\"boolean\",\"double\",\"bytes\",\"string\"]}]}}}]}}},{\"name\":\"resourceType\",\"type\":{\"type\":\"record\",\"name\":\"ResourceTypeMsg\",\"fields\":[{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"unit\",\"type\":\"string\"},{\"name\":\"chargingBehaviorClass\",\"type\":\"string\"}]}},{\"name\":\"isSynthetic\",\"type\":\"boolean\",\"default\":false}]}"); @Deprecated public java.lang.CharSequence userID; @Deprecated public double sumOfCreditsToSubtract; @Deprecated public double oldTotalCredits; diff --git a/src/main/java/gr/grnet/aquarium/message/avro/gen/WorkingResourceInstanceChargingStateMsg.java b/src/main/java/gr/grnet/aquarium/message/avro/gen/WorkingResourceInstanceChargingStateMsg.java index 81876cc..83c197c 100644 --- a/src/main/java/gr/grnet/aquarium/message/avro/gen/WorkingResourceInstanceChargingStateMsg.java +++ b/src/main/java/gr/grnet/aquarium/message/avro/gen/WorkingResourceInstanceChargingStateMsg.java @@ -6,7 +6,7 @@ package gr.grnet.aquarium.message.avro.gen; @SuppressWarnings("all") public class WorkingResourceInstanceChargingStateMsg extends org.apache.avro.specific.SpecificRecordBase implements org.apache.avro.specific.SpecificRecord { - public static final org.apache.avro.Schema SCHEMA$ = new org.apache.avro.Schema.Parser().parse("{\"type\":\"record\",\"name\":\"WorkingResourceInstanceChargingStateMsg\",\"namespace\":\"gr.grnet.aquarium.message.avro.gen\",\"fields\":[{\"name\":\"details\",\"type\":{\"type\":\"map\",\"values\":{\"type\":\"record\",\"name\":\"AnyValueMsg\",\"fields\":[{\"name\":\"anyValue\",\"type\":[\"null\",\"int\",\"long\",\"boolean\",\"double\",\"bytes\",\"string\"]}]}}},{\"name\":\"previousEvents\",\"type\":{\"type\":\"array\",\"items\":{\"type\":\"record\",\"name\":\"ResourceEventMsg\",\"fields\":[{\"name\":\"id\",\"type\":\"string\",\"aliases\":[\"originalID\",\"ID\"]},{\"name\":\"idInStore\",\"type\":\"string\"},{\"name\":\"occurredMillis\",\"type\":\"long\"},{\"name\":\"receivedMillis\",\"type\":\"long\",\"default\":0},{\"name\":\"userID\",\"type\":\"string\"},{\"name\":\"clientID\",\"type\":\"string\"},{\"name\":\"eventVersion\",\"type\":\"string\",\"default\":\"1.0\"},{\"name\":\"resource\",\"type\":\"string\",\"aliases\":[\"resourceType\"]},{\"name\":\"instanceID\",\"type\":\"string\"},{\"name\":\"value\",\"type\":\"string\"},{\"name\":\"details\",\"type\":{\"type\":\"map\",\"values\":\"AnyValueMsg\"}}]}}},{\"name\":\"implicitlyIssuedStartEvents\",\"type\":{\"type\":\"array\",\"items\":\"ResourceEventMsg\"}},{\"name\":\"accumulatingAmount\",\"type\":\"double\"},{\"name\":\"oldAccumulatingAmount\",\"type\":\"double\"},{\"name\":\"previousValue\",\"type\":\"double\"},{\"name\":\"currentValue\",\"type\":\"double\"}]}"); + public static final org.apache.avro.Schema SCHEMA$ = new org.apache.avro.Schema.Parser().parse("{\"type\":\"record\",\"name\":\"WorkingResourceInstanceChargingStateMsg\",\"namespace\":\"gr.grnet.aquarium.message.avro.gen\",\"fields\":[{\"name\":\"details\",\"type\":{\"type\":\"map\",\"values\":{\"type\":\"record\",\"name\":\"AnyValueMsg\",\"fields\":[{\"name\":\"anyValue\",\"type\":[\"null\",\"int\",\"long\",\"boolean\",\"double\",\"bytes\",\"string\"]}]}}},{\"name\":\"previousEvents\",\"type\":{\"type\":\"array\",\"items\":{\"type\":\"record\",\"name\":\"ResourceEventMsg\",\"fields\":[{\"name\":\"originalID\",\"type\":\"string\",\"aliases\":[\"id\"]},{\"name\":\"inStoreID\",\"type\":[\"string\",\"null\"],\"aliases\":[\"_id\",\"idInStore\"]},{\"name\":\"occurredMillis\",\"type\":\"long\"},{\"name\":\"receivedMillis\",\"type\":\"long\",\"default\":0},{\"name\":\"userID\",\"type\":\"string\"},{\"name\":\"clientID\",\"type\":\"string\"},{\"name\":\"eventVersion\",\"type\":\"string\",\"default\":\"1.0\"},{\"name\":\"resource\",\"type\":\"string\",\"aliases\":[\"resourceType\"]},{\"name\":\"instanceID\",\"type\":\"string\"},{\"name\":\"value\",\"type\":\"string\"},{\"name\":\"details\",\"type\":{\"type\":\"map\",\"values\":\"AnyValueMsg\"}}]}}},{\"name\":\"implicitlyIssuedStartEvents\",\"type\":{\"type\":\"array\",\"items\":\"ResourceEventMsg\"}},{\"name\":\"accumulatingAmount\",\"type\":\"double\"},{\"name\":\"oldAccumulatingAmount\",\"type\":\"double\"},{\"name\":\"previousValue\",\"type\":\"double\"},{\"name\":\"currentValue\",\"type\":\"double\"}]}"); @Deprecated public java.util.Map details; @Deprecated public java.util.List previousEvents; @Deprecated public java.util.List implicitlyIssuedStartEvents; diff --git a/src/main/java/gr/grnet/aquarium/message/avro/gen/WorkingResourcesChargingStateMsg.java b/src/main/java/gr/grnet/aquarium/message/avro/gen/WorkingResourcesChargingStateMsg.java index 33e8fcb..6470516 100644 --- a/src/main/java/gr/grnet/aquarium/message/avro/gen/WorkingResourcesChargingStateMsg.java +++ b/src/main/java/gr/grnet/aquarium/message/avro/gen/WorkingResourcesChargingStateMsg.java @@ -6,7 +6,7 @@ package gr.grnet.aquarium.message.avro.gen; @SuppressWarnings("all") public class WorkingResourcesChargingStateMsg extends org.apache.avro.specific.SpecificRecordBase implements org.apache.avro.specific.SpecificRecord { - public static final org.apache.avro.Schema SCHEMA$ = new org.apache.avro.Schema.Parser().parse("{\"type\":\"record\",\"name\":\"WorkingResourcesChargingStateMsg\",\"namespace\":\"gr.grnet.aquarium.message.avro.gen\",\"fields\":[{\"name\":\"details\",\"type\":{\"type\":\"map\",\"values\":{\"type\":\"record\",\"name\":\"AnyValueMsg\",\"fields\":[{\"name\":\"anyValue\",\"type\":[\"null\",\"int\",\"long\",\"boolean\",\"double\",\"bytes\",\"string\"]}]}}},{\"name\":\"stateOfResourceInstance\",\"type\":{\"type\":\"map\",\"values\":{\"type\":\"record\",\"name\":\"WorkingResourceInstanceChargingStateMsg\",\"fields\":[{\"name\":\"details\",\"type\":{\"type\":\"map\",\"values\":\"AnyValueMsg\"}},{\"name\":\"previousEvents\",\"type\":{\"type\":\"array\",\"items\":{\"type\":\"record\",\"name\":\"ResourceEventMsg\",\"fields\":[{\"name\":\"id\",\"type\":\"string\",\"aliases\":[\"originalID\",\"ID\"]},{\"name\":\"idInStore\",\"type\":\"string\"},{\"name\":\"occurredMillis\",\"type\":\"long\"},{\"name\":\"receivedMillis\",\"type\":\"long\",\"default\":0},{\"name\":\"userID\",\"type\":\"string\"},{\"name\":\"clientID\",\"type\":\"string\"},{\"name\":\"eventVersion\",\"type\":\"string\",\"default\":\"1.0\"},{\"name\":\"resource\",\"type\":\"string\",\"aliases\":[\"resourceType\"]},{\"name\":\"instanceID\",\"type\":\"string\"},{\"name\":\"value\",\"type\":\"string\"},{\"name\":\"details\",\"type\":{\"type\":\"map\",\"values\":\"AnyValueMsg\"}}]}}},{\"name\":\"implicitlyIssuedStartEvents\",\"type\":{\"type\":\"array\",\"items\":\"ResourceEventMsg\"}},{\"name\":\"accumulatingAmount\",\"type\":\"double\"},{\"name\":\"oldAccumulatingAmount\",\"type\":\"double\"},{\"name\":\"previousValue\",\"type\":\"double\"},{\"name\":\"currentValue\",\"type\":\"double\"}]}}}]}"); + public static final org.apache.avro.Schema SCHEMA$ = new org.apache.avro.Schema.Parser().parse("{\"type\":\"record\",\"name\":\"WorkingResourcesChargingStateMsg\",\"namespace\":\"gr.grnet.aquarium.message.avro.gen\",\"fields\":[{\"name\":\"details\",\"type\":{\"type\":\"map\",\"values\":{\"type\":\"record\",\"name\":\"AnyValueMsg\",\"fields\":[{\"name\":\"anyValue\",\"type\":[\"null\",\"int\",\"long\",\"boolean\",\"double\",\"bytes\",\"string\"]}]}}},{\"name\":\"stateOfResourceInstance\",\"type\":{\"type\":\"map\",\"values\":{\"type\":\"record\",\"name\":\"WorkingResourceInstanceChargingStateMsg\",\"fields\":[{\"name\":\"details\",\"type\":{\"type\":\"map\",\"values\":\"AnyValueMsg\"}},{\"name\":\"previousEvents\",\"type\":{\"type\":\"array\",\"items\":{\"type\":\"record\",\"name\":\"ResourceEventMsg\",\"fields\":[{\"name\":\"originalID\",\"type\":\"string\",\"aliases\":[\"id\"]},{\"name\":\"inStoreID\",\"type\":[\"string\",\"null\"],\"aliases\":[\"_id\",\"idInStore\"]},{\"name\":\"occurredMillis\",\"type\":\"long\"},{\"name\":\"receivedMillis\",\"type\":\"long\",\"default\":0},{\"name\":\"userID\",\"type\":\"string\"},{\"name\":\"clientID\",\"type\":\"string\"},{\"name\":\"eventVersion\",\"type\":\"string\",\"default\":\"1.0\"},{\"name\":\"resource\",\"type\":\"string\",\"aliases\":[\"resourceType\"]},{\"name\":\"instanceID\",\"type\":\"string\"},{\"name\":\"value\",\"type\":\"string\"},{\"name\":\"details\",\"type\":{\"type\":\"map\",\"values\":\"AnyValueMsg\"}}]}}},{\"name\":\"implicitlyIssuedStartEvents\",\"type\":{\"type\":\"array\",\"items\":\"ResourceEventMsg\"}},{\"name\":\"accumulatingAmount\",\"type\":\"double\"},{\"name\":\"oldAccumulatingAmount\",\"type\":\"double\"},{\"name\":\"previousValue\",\"type\":\"double\"},{\"name\":\"currentValue\",\"type\":\"double\"}]}}}]}"); @Deprecated public java.util.Map details; @Deprecated public java.util.Map stateOfResourceInstance; public org.apache.avro.Schema getSchema() { return SCHEMA$; } diff --git a/src/main/java/gr/grnet/aquarium/message/avro/gen/WorkingUserStateMsg.java b/src/main/java/gr/grnet/aquarium/message/avro/gen/WorkingUserStateMsg.java index 24595f5..7a813c9 100644 --- a/src/main/java/gr/grnet/aquarium/message/avro/gen/WorkingUserStateMsg.java +++ b/src/main/java/gr/grnet/aquarium/message/avro/gen/WorkingUserStateMsg.java @@ -6,7 +6,7 @@ package gr.grnet.aquarium.message.avro.gen; @SuppressWarnings("all") public class WorkingUserStateMsg extends org.apache.avro.specific.SpecificRecordBase implements org.apache.avro.specific.SpecificRecord { - public static final org.apache.avro.Schema SCHEMA$ = new org.apache.avro.Schema.Parser().parse("{\"type\":\"record\",\"name\":\"WorkingUserStateMsg\",\"namespace\":\"gr.grnet.aquarium.message.avro.gen\",\"fields\":[{\"name\":\"userID\",\"type\":\"string\"},{\"name\":\"parentUserStateIDInStore\",\"type\":[\"string\",\"null\"]},{\"name\":\"resourceTypesMap\",\"type\":{\"type\":\"map\",\"values\":{\"type\":\"record\",\"name\":\"ResourceTypeMsg\",\"fields\":[{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"unit\",\"type\":\"string\"},{\"name\":\"chargingBehaviorClass\",\"type\":\"string\"}]}}},{\"name\":\"workingStateOfResources\",\"type\":{\"type\":\"map\",\"values\":{\"type\":\"record\",\"name\":\"WorkingResourcesChargingStateMsg\",\"fields\":[{\"name\":\"details\",\"type\":{\"type\":\"map\",\"values\":{\"type\":\"record\",\"name\":\"AnyValueMsg\",\"fields\":[{\"name\":\"anyValue\",\"type\":[\"null\",\"int\",\"long\",\"boolean\",\"double\",\"bytes\",\"string\"]}]}}},{\"name\":\"stateOfResourceInstance\",\"type\":{\"type\":\"map\",\"values\":{\"type\":\"record\",\"name\":\"WorkingResourceInstanceChargingStateMsg\",\"fields\":[{\"name\":\"details\",\"type\":{\"type\":\"map\",\"values\":\"AnyValueMsg\"}},{\"name\":\"previousEvents\",\"type\":{\"type\":\"array\",\"items\":{\"type\":\"record\",\"name\":\"ResourceEventMsg\",\"fields\":[{\"name\":\"id\",\"type\":\"string\",\"aliases\":[\"originalID\",\"ID\"]},{\"name\":\"idInStore\",\"type\":\"string\"},{\"name\":\"occurredMillis\",\"type\":\"long\"},{\"name\":\"receivedMillis\",\"type\":\"long\",\"default\":0},{\"name\":\"userID\",\"type\":\"string\"},{\"name\":\"clientID\",\"type\":\"string\"},{\"name\":\"eventVersion\",\"type\":\"string\",\"default\":\"1.0\"},{\"name\":\"resource\",\"type\":\"string\",\"aliases\":[\"resourceType\"]},{\"name\":\"instanceID\",\"type\":\"string\"},{\"name\":\"value\",\"type\":\"string\"},{\"name\":\"details\",\"type\":{\"type\":\"map\",\"values\":\"AnyValueMsg\"}}]}}},{\"name\":\"implicitlyIssuedStartEvents\",\"type\":{\"type\":\"array\",\"items\":\"ResourceEventMsg\"}},{\"name\":\"accumulatingAmount\",\"type\":\"double\"},{\"name\":\"oldAccumulatingAmount\",\"type\":\"double\"},{\"name\":\"previousValue\",\"type\":\"double\"},{\"name\":\"currentValue\",\"type\":\"double\"}]}}}]}}},{\"name\":\"totalCredits\",\"type\":\"double\"},{\"name\":\"workingAgreementHistory\",\"type\":{\"type\":\"record\",\"name\":\"WorkingAgreementHistoryMsg\",\"fields\":[{\"name\":\"agreements\",\"type\":{\"type\":\"array\",\"items\":{\"type\":\"record\",\"name\":\"UserAgreementMsg\",\"fields\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"relatedIMEventID\",\"type\":[\"string\",\"null\"]},{\"name\":\"validFromMillis\",\"type\":\"long\"},{\"name\":\"validToMillis\",\"type\":\"long\"},{\"name\":\"role\",\"type\":\"string\"},{\"name\":\"fullPriceTableRef\",\"type\":[{\"type\":\"record\",\"name\":\"FullPriceTableMsg\",\"fields\":[{\"name\":\"perResource\",\"type\":{\"type\":\"map\",\"values\":{\"type\":\"map\",\"values\":{\"type\":\"record\",\"name\":\"SelectorValueMsg\",\"fields\":[{\"name\":\"selectorValue\",\"type\":[{\"type\":\"record\",\"name\":\"EffectivePriceTableMsg\",\"fields\":[{\"name\":\"priceOverrides\",\"type\":{\"type\":\"array\",\"items\":{\"type\":\"record\",\"name\":\"EffectiveUnitPriceMsg\",\"fields\":[{\"name\":\"unitPrice\",\"type\":\"double\"},{\"name\":\"when\",\"type\":[{\"type\":\"record\",\"name\":\"CronSpecTupleMsg\",\"fields\":[{\"name\":\"a\",\"type\":\"string\"},{\"name\":\"b\",\"type\":\"string\"}]},\"null\"]}]}}}]},{\"type\":\"map\",\"values\":\"SelectorValueMsg\"}]}]}}}}]},\"null\"]}]}}}]}},{\"name\":\"latestUpdateMillis\",\"type\":\"long\"},{\"name\":\"latestResourceEventOccurredMillis\",\"type\":\"long\"},{\"name\":\"billingPeriodOutOfSyncResourceEventsCounter\",\"type\":\"long\"},{\"name\":\"walletEntries\",\"type\":{\"type\":\"array\",\"items\":{\"type\":\"record\",\"name\":\"WalletEntryMsg\",\"fields\":[{\"name\":\"userID\",\"type\":\"string\"},{\"name\":\"sumOfCreditsToSubtract\",\"type\":\"double\"},{\"name\":\"oldTotalCredits\",\"type\":\"double\"},{\"name\":\"newTotalCredits\",\"type\":\"double\"},{\"name\":\"whenComputedMillis\",\"type\":\"long\"},{\"name\":\"referenceStartMillis\",\"type\":\"long\"},{\"name\":\"referenceStopMillis\",\"type\":\"long\"},{\"name\":\"billingYear\",\"type\":\"int\"},{\"name\":\"billingMonth\",\"type\":\"int\"},{\"name\":\"billingDay\",\"type\":\"int\"},{\"name\":\"chargeslots\",\"type\":{\"type\":\"array\",\"items\":{\"type\":\"record\",\"name\":\"ChargeslotMsg\",\"fields\":[{\"name\":\"startMillis\",\"type\":\"long\"},{\"name\":\"stopMillis\",\"type\":\"long\"},{\"name\":\"unitPrice\",\"type\":\"double\"},{\"name\":\"explanation\",\"type\":\"string\",\"default\":\"\"},{\"name\":\"creditsToSubtract\",\"type\":\"double\"}]}}},{\"name\":\"resourceEvents\",\"type\":{\"type\":\"array\",\"items\":\"ResourceEventMsg\"}},{\"name\":\"resourceType\",\"type\":\"ResourceTypeMsg\"},{\"name\":\"isSynthetic\",\"type\":\"boolean\",\"default\":false}]}}}]}"); + public static final org.apache.avro.Schema SCHEMA$ = new org.apache.avro.Schema.Parser().parse("{\"type\":\"record\",\"name\":\"WorkingUserStateMsg\",\"namespace\":\"gr.grnet.aquarium.message.avro.gen\",\"fields\":[{\"name\":\"userID\",\"type\":\"string\"},{\"name\":\"parentUserStateIDInStore\",\"type\":[\"string\",\"null\"]},{\"name\":\"resourceTypesMap\",\"type\":{\"type\":\"map\",\"values\":{\"type\":\"record\",\"name\":\"ResourceTypeMsg\",\"fields\":[{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"unit\",\"type\":\"string\"},{\"name\":\"chargingBehaviorClass\",\"type\":\"string\"}]}}},{\"name\":\"workingStateOfResources\",\"type\":{\"type\":\"map\",\"values\":{\"type\":\"record\",\"name\":\"WorkingResourcesChargingStateMsg\",\"fields\":[{\"name\":\"details\",\"type\":{\"type\":\"map\",\"values\":{\"type\":\"record\",\"name\":\"AnyValueMsg\",\"fields\":[{\"name\":\"anyValue\",\"type\":[\"null\",\"int\",\"long\",\"boolean\",\"double\",\"bytes\",\"string\"]}]}}},{\"name\":\"stateOfResourceInstance\",\"type\":{\"type\":\"map\",\"values\":{\"type\":\"record\",\"name\":\"WorkingResourceInstanceChargingStateMsg\",\"fields\":[{\"name\":\"details\",\"type\":{\"type\":\"map\",\"values\":\"AnyValueMsg\"}},{\"name\":\"previousEvents\",\"type\":{\"type\":\"array\",\"items\":{\"type\":\"record\",\"name\":\"ResourceEventMsg\",\"fields\":[{\"name\":\"originalID\",\"type\":\"string\",\"aliases\":[\"id\"]},{\"name\":\"inStoreID\",\"type\":[\"string\",\"null\"],\"aliases\":[\"_id\",\"idInStore\"]},{\"name\":\"occurredMillis\",\"type\":\"long\"},{\"name\":\"receivedMillis\",\"type\":\"long\",\"default\":0},{\"name\":\"userID\",\"type\":\"string\"},{\"name\":\"clientID\",\"type\":\"string\"},{\"name\":\"eventVersion\",\"type\":\"string\",\"default\":\"1.0\"},{\"name\":\"resource\",\"type\":\"string\",\"aliases\":[\"resourceType\"]},{\"name\":\"instanceID\",\"type\":\"string\"},{\"name\":\"value\",\"type\":\"string\"},{\"name\":\"details\",\"type\":{\"type\":\"map\",\"values\":\"AnyValueMsg\"}}]}}},{\"name\":\"implicitlyIssuedStartEvents\",\"type\":{\"type\":\"array\",\"items\":\"ResourceEventMsg\"}},{\"name\":\"accumulatingAmount\",\"type\":\"double\"},{\"name\":\"oldAccumulatingAmount\",\"type\":\"double\"},{\"name\":\"previousValue\",\"type\":\"double\"},{\"name\":\"currentValue\",\"type\":\"double\"}]}}}]}}},{\"name\":\"totalCredits\",\"type\":\"double\"},{\"name\":\"workingAgreementHistory\",\"type\":{\"type\":\"record\",\"name\":\"WorkingAgreementHistoryMsg\",\"fields\":[{\"name\":\"agreements\",\"type\":{\"type\":\"array\",\"items\":{\"type\":\"record\",\"name\":\"UserAgreementMsg\",\"fields\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"relatedIMEventID\",\"type\":[\"string\",\"null\"]},{\"name\":\"validFromMillis\",\"type\":\"long\"},{\"name\":\"validToMillis\",\"type\":\"long\"},{\"name\":\"role\",\"type\":\"string\"},{\"name\":\"fullPriceTableRef\",\"type\":[{\"type\":\"record\",\"name\":\"FullPriceTableMsg\",\"fields\":[{\"name\":\"perResource\",\"type\":{\"type\":\"map\",\"values\":{\"type\":\"map\",\"values\":{\"type\":\"record\",\"name\":\"SelectorValueMsg\",\"fields\":[{\"name\":\"selectorValue\",\"type\":[{\"type\":\"record\",\"name\":\"EffectivePriceTableMsg\",\"fields\":[{\"name\":\"priceOverrides\",\"type\":{\"type\":\"array\",\"items\":{\"type\":\"record\",\"name\":\"EffectiveUnitPriceMsg\",\"fields\":[{\"name\":\"unitPrice\",\"type\":\"double\"},{\"name\":\"when\",\"type\":[{\"type\":\"record\",\"name\":\"CronSpecTupleMsg\",\"fields\":[{\"name\":\"a\",\"type\":\"string\"},{\"name\":\"b\",\"type\":\"string\"}]},\"null\"]}]}}}]},{\"type\":\"map\",\"values\":\"SelectorValueMsg\"}]}]}}}}]},\"null\"]}]}}}]}},{\"name\":\"latestUpdateMillis\",\"type\":\"long\"},{\"name\":\"latestResourceEventOccurredMillis\",\"type\":\"long\"},{\"name\":\"billingPeriodOutOfSyncResourceEventsCounter\",\"type\":\"long\"},{\"name\":\"walletEntries\",\"type\":{\"type\":\"array\",\"items\":{\"type\":\"record\",\"name\":\"WalletEntryMsg\",\"fields\":[{\"name\":\"userID\",\"type\":\"string\"},{\"name\":\"sumOfCreditsToSubtract\",\"type\":\"double\"},{\"name\":\"oldTotalCredits\",\"type\":\"double\"},{\"name\":\"newTotalCredits\",\"type\":\"double\"},{\"name\":\"whenComputedMillis\",\"type\":\"long\"},{\"name\":\"referenceStartMillis\",\"type\":\"long\"},{\"name\":\"referenceStopMillis\",\"type\":\"long\"},{\"name\":\"billingYear\",\"type\":\"int\"},{\"name\":\"billingMonth\",\"type\":\"int\"},{\"name\":\"billingDay\",\"type\":\"int\"},{\"name\":\"chargeslots\",\"type\":{\"type\":\"array\",\"items\":{\"type\":\"record\",\"name\":\"ChargeslotMsg\",\"fields\":[{\"name\":\"startMillis\",\"type\":\"long\"},{\"name\":\"stopMillis\",\"type\":\"long\"},{\"name\":\"unitPrice\",\"type\":\"double\"},{\"name\":\"explanation\",\"type\":\"string\",\"default\":\"\"},{\"name\":\"creditsToSubtract\",\"type\":\"double\"}]}}},{\"name\":\"resourceEvents\",\"type\":{\"type\":\"array\",\"items\":\"ResourceEventMsg\"}},{\"name\":\"resourceType\",\"type\":\"ResourceTypeMsg\"},{\"name\":\"isSynthetic\",\"type\":\"boolean\",\"default\":false}]}}}]}"); @Deprecated public java.lang.CharSequence userID; @Deprecated public java.lang.CharSequence parentUserStateIDInStore; @Deprecated public java.util.Map resourceTypesMap; diff --git a/src/main/resources/policy.json b/src/main/resources/policy.json index 637228a..9d96ee1 100644 --- a/src/main/resources/policy.json +++ b/src/main/resources/policy.json @@ -1,66 +1,90 @@ -{ "jsonClass":"gr.grnet.aquarium.policy.StdPolicy", +{ + "originalID":"default-policy", + "inStoreID":null, + "parentID":null, + "validFromMillis":"0", + "validToMillis":"9223372036854775807", - "id":"default-policy", - - "validityTimespan":{ - "fromMillis":0, - "toMillis":9223372036854775807 - }, - - "resourceTypes":[{ - "jsonClass":"gr.grnet.aquarium.policy.ResourceType", - "name":"diskspace", - "unit":"MB/Hr", - "chargingBehavior":"gr.grnet.aquarium.charging.ContinuousChargingBehavior" - },{ - "jsonClass":"gr.grnet.aquarium.policy.ResourceType", - "name":"vmtime", - "unit":"Hr", - "chargingBehavior":"gr.grnet.aquarium.charging.VMChargingBehavior" - },{ - "jsonClass":"gr.grnet.aquarium.policy.ResourceType", - "name":"addcredits", - "unit":"Credits", - "chargingBehavior":"gr.grnet.aquarium.charging.OnceChargingBehavior" - }], + "resourceTypes":[ + { + "name":"diskspace", + "unit":"MB/Hr", + "chargingBehaviorClass":"gr.grnet.aquarium.charging.ContinuousChargingBehavior" + }, + { + "name":"vmtime", + "unit":"Hr", + "chargingBehaviorClass":"gr.grnet.aquarium.charging.VMChargingBehavior" + }, + { + "name":"addcredits", + "unit":"Credits", + "chargingBehaviorClass":"gr.grnet.aquarium.charging.OnceChargingBehavior" + } + ], "chargingBehaviors":[ "gr.grnet.aquarium.charging.VMChargingBehavior", "gr.grnet.aquarium.charging.ContinuousChargingBehavior", - "gr.grnet.aquarium.charging.OnceChargingBehavior" - ], + "gr.grnet.aquarium.charging.OnceChargingBehavior" ], "roleMapping":{ "default":{ - "jsonClass":"gr.grnet.aquarium.policy.FullPriceTable", - "perResource":{ "diskspace":{ - "default":{ "jsonClass":"gr.grnet.aquarium.policy.EffectivePriceTable", - "priceOverrides":[{ "jsonClass":"gr.grnet.aquarium.policy.EffectiveUnitPrice", - "unitPrice":0.01 - }] + "default":{ + "selectorValue":{ + "gr.grnet.aquarium.message.avro.gen.EffectivePriceTableMsg":{ + "priceOverrides":[ + { + "unitPrice":"0.01", + "when":null + } + ] + } + } } }, "vmtime":{ - "powerOn":{ "jsonClass":"gr.grnet.aquarium.policy.EffectivePriceTable", - "priceOverrides":[{ "jsonClass":"gr.grnet.aquarium.policy.EffectiveUnitPrice", - "unitPrice":0.01 - }] + "powerOff":{ + "selectorValue":{ + "gr.grnet.aquarium.message.avro.gen.EffectivePriceTableMsg":{ + "priceOverrides":[ + { + "unitPrice":"0.0010", + "when":null + } + ] + } + } }, - "powerOff":{ "jsonClass":"gr.grnet.aquarium.policy.EffectivePriceTable", - "priceOverrides":[{ "jsonClass":"gr.grnet.aquarium.policy.EffectiveUnitPrice", - "unitPrice":0.0010 - }] + "powerOn":{ + "selectorValue":{ + "gr.grnet.aquarium.message.avro.gen.EffectivePriceTableMsg":{ + "priceOverrides":[ + { + "unitPrice":"0.01", + "when":null + } + ] + } + } } }, "addcredits":{ - "default":{ "jsonClass":"gr.grnet.aquarium.policy.EffectivePriceTable", - "priceOverrides":[{ "jsonClass":"gr.grnet.aquarium.policy.EffectiveUnitPrice", - "unitPrice":-1.0 - }] + "default":{ + "selectorValue":{ + "gr.grnet.aquarium.message.avro.gen.EffectivePriceTableMsg":{ + "priceOverrides":[ + { + "unitPrice":"-1.0", + "when":null + } + ] + } + } } } } diff --git a/src/main/resources/policy.scala b/src/main/resources/policy.scala deleted file mode 100644 index b96a988..0000000 --- a/src/main/resources/policy.scala +++ /dev/null @@ -1,38 +0,0 @@ -import gr.grnet.aquarium.charging.VMChargingBehavior.Selectors.Power -import gr.grnet.aquarium.charging.{OnceChargingBehavior, ContinuousChargingBehavior, VMChargingBehavior} -import gr.grnet.aquarium.policy.FullPriceTable._ -import gr.grnet.aquarium.policy.{EffectiveUnitPrice, EffectivePriceTable, FullPriceTable, ResourceType, StdPolicy} -import gr.grnet.aquarium.Timespan -import gr.grnet.aquarium.util.nameOfClass - -// Definition of our standard policy in plain Scala - -StdPolicy( - id = "750E6309-AB60-41B4-8D4B-9FFEA6EF843C", - parentID = None, - - validityTimespan = Timespan(0), - - resourceTypes = Set( - ResourceType("vmtime", "Hr", nameOfClass[VMChargingBehavior]), - ResourceType("diskspace", "MB/Hr", nameOfClass[ContinuousChargingBehavior]) - ), - - chargingBehaviors = Set( - nameOfClass[VMChargingBehavior], - nameOfClass[ContinuousChargingBehavior], - nameOfClass[OnceChargingBehavior] - ), - - roleMapping = Map( - "default" -> FullPriceTable(Map( - "diskspace" -> Map( - DefaultSelectorKey -> EffectivePriceTable(EffectiveUnitPrice(0.01) :: Nil) - ), - "vmtime" -> Map( - Power.powerOn -> EffectivePriceTable(EffectiveUnitPrice(0.01) :: Nil), - Power.powerOff -> EffectivePriceTable(EffectiveUnitPrice(0.001) :: Nil) // cheaper when the VM is OFF - ) - )) - ) -) \ No newline at end of file diff --git a/src/main/scala/gr/grnet/aquarium/Aquarium.scala b/src/main/scala/gr/grnet/aquarium/Aquarium.scala index b80a3d7..e343041 100644 --- a/src/main/scala/gr/grnet/aquarium/Aquarium.scala +++ b/src/main/scala/gr/grnet/aquarium/Aquarium.scala @@ -52,6 +52,8 @@ import gr.grnet.aquarium.service.event.AquariumCreatedEvent import gr.grnet.aquarium.policy.{FullPriceTable, PolicyModel, CachingPolicyStore, PolicyDefinedFullPriceTableRef, StdUserAgreement, UserAgreementModel, ResourceType} import gr.grnet.aquarium.charging.{ChargingService, ChargingBehavior} import gr.grnet.aquarium.util.date.TimeHelpers +import gr.grnet.aquarium.message.avro.gen.PolicyMsg +import gr.grnet.aquarium.message.avro.{ModelFactory, AvroHelpers} /** * @@ -64,7 +66,7 @@ final class Aquarium(env: Env) extends Lifecycle with Loggable { @volatile private[this] var _chargingBehaviorMap = Map[String, ChargingBehavior]() private[this] lazy val cachingPolicyStore = new CachingPolicyStore( - apply(EnvKeys.defaultPolicyModel), + apply(EnvKeys.defaultPolicyMsg), apply(EnvKeys.storeProvider).policyStore ) @@ -133,7 +135,7 @@ final class Aquarium(env: Env) extends Lifecycle with Loggable { } this.eventsStoreFolder.throwMe // on error - logger.info("default policy = {}", defaultPolicyModel.toJsonString) + logger.info("default policy = {}", AvroHelpers.jsonStringOfSpecificRecord(defaultPolicyMsg)) } private[this] def addShutdownHooks(): Unit = { @@ -228,23 +230,25 @@ final class Aquarium(env: Env) extends Lifecycle with Loggable { } def currentResourceTypesMap: Map[String, ResourceType] = { - val policyOpt = policyStore.loadValidPolicyAt(TimeHelpers.nowMillis()) - if(policyOpt.isEmpty) { + val policyMspOpt = policyStore.loadPolicyAt(TimeHelpers.nowMillis()) + if(policyMspOpt.isEmpty) { throw new AquariumInternalError("Not even the default policy found") } - policyOpt.get.resourceTypesMap + val policyMsg = policyMspOpt.get + // TODO optimize + ModelFactory.newPolicyModel(policyMsg).resourceTypesMap } def unsafeValidPolicyAt(referenceTimeMillis: Long): PolicyModel = { - policyStore.loadValidPolicyAt(referenceTimeMillis) match { + policyStore.loadPolicyAt(referenceTimeMillis) match { case None ⇒ throw new AquariumInternalError( "No policy found at %s".format(TimeHelpers.toYYYYMMDDHHMMSSSSS(referenceTimeMillis)) ) - case Some(policy) ⇒ - policy + case Some(policyMsg) ⇒ + ModelFactory.newPolicyModel(policyMsg) } } @@ -315,7 +319,7 @@ final class Aquarium(env: Env) extends Lifecycle with Loggable { } } - def defaultPolicyModel = apply(EnvKeys.defaultPolicyModel) + def defaultPolicyMsg = apply(EnvKeys.defaultPolicyMsg) def defaultClassLoader = apply(EnvKeys.defaultClassLoader) @@ -485,7 +489,7 @@ object Aquarium { final val defaultClassLoader: TypedKey[ClassLoader] = new AquariumEnvKey[ClassLoader]("default.class.loader") - final val defaultPolicyModel: TypedKey[PolicyModel] = - new AquariumEnvKey[PolicyModel]("default.policy.model") + final val defaultPolicyMsg: TypedKey[PolicyMsg] = + new AquariumEnvKey[PolicyMsg]("default.policy.msg") } } diff --git a/src/main/scala/gr/grnet/aquarium/AquariumBuilder.scala b/src/main/scala/gr/grnet/aquarium/AquariumBuilder.scala index 42305b3..519c6f0 100644 --- a/src/main/scala/gr/grnet/aquarium/AquariumBuilder.scala +++ b/src/main/scala/gr/grnet/aquarium/AquariumBuilder.scala @@ -35,16 +35,16 @@ package gr.grnet.aquarium -import com.ckkloverdos.key.{BooleanKey, TypedKey} import com.ckkloverdos.env.Env -import com.ckkloverdos.props.Props +import com.ckkloverdos.key.{BooleanKey, TypedKey} import com.ckkloverdos.maybe.{Failed, MaybeEither, Just, NoVal} -import gr.grnet.aquarium.util.Loggable -import java.io.File -import gr.grnet.aquarium.service.EventBusService +import com.ckkloverdos.props.Props import gr.grnet.aquarium.converter.StdConverters +import gr.grnet.aquarium.message.avro.gen.PolicyMsg +import gr.grnet.aquarium.service.EventBusService import gr.grnet.aquarium.service.event.AquariumCreatedEvent -import gr.grnet.aquarium.policy.PolicyModel +import gr.grnet.aquarium.util.Loggable +import java.io.File /** * Create a tailored Aquarium. @@ -56,7 +56,7 @@ import gr.grnet.aquarium.policy.PolicyModel final class AquariumBuilder( val originalProps: Props, - val defaultPolicyModel: PolicyModel + val defaultPolicyMsg: PolicyMsg ) extends Loggable { if(originalProps eq null) { @@ -377,7 +377,7 @@ final class AquariumBuilder( Some(propValue) } - update(EnvKeys.defaultPolicyModel, defaultPolicyModel) + update(EnvKeys.defaultPolicyMsg, defaultPolicyMsg) this._aquarium = new Aquarium(_env) diff --git a/src/main/scala/gr/grnet/aquarium/Main.scala b/src/main/scala/gr/grnet/aquarium/Main.scala index fbc2724..b795285 100644 --- a/src/main/scala/gr/grnet/aquarium/Main.scala +++ b/src/main/scala/gr/grnet/aquarium/Main.scala @@ -96,7 +96,7 @@ object Main extends LazyLoggable { try { val aquarium = new AquariumBuilder( ResourceLocator.AquariumProperties, - ResourceLocator.DefaultPolicyModel + ResourceLocator.DefaultPolicyMsg ).build() aquarium.start() diff --git a/src/main/scala/gr/grnet/aquarium/ResourceLocator.scala b/src/main/scala/gr/grnet/aquarium/ResourceLocator.scala index 1f1ea24..e12c5cf 100644 --- a/src/main/scala/gr/grnet/aquarium/ResourceLocator.scala +++ b/src/main/scala/gr/grnet/aquarium/ResourceLocator.scala @@ -47,6 +47,8 @@ import com.ckkloverdos.maybe.Failed import com.ckkloverdos.convert.Converters import gr.grnet.aquarium.converter.{JsonTextFormat, StdConverters} import gr.grnet.aquarium.policy.StdPolicy +import gr.grnet.aquarium.message.avro.AvroHelpers +import gr.grnet.aquarium.message.avro.gen.PolicyMsg /** * Locates resources. @@ -292,7 +294,7 @@ object ResourceLocator { } } - final lazy val DefaultPolicyModel = { + final lazy val DefaultPolicyMsg = { val maybePolicyJSON = Resources.PolicyJSONResource.stringContent maybePolicyJSON match { case NoVal ⇒ @@ -308,7 +310,7 @@ object ResourceLocator { Resources.PolicyJSONResource)) case Just(jsonString) ⇒ - StdConverters.AllConverters.convertEx[StdPolicy](JsonTextFormat(jsonString)) + AvroHelpers.specificRecordOfJsonString(jsonString, new PolicyMsg) } } diff --git a/src/main/scala/gr/grnet/aquarium/charging/ChargingBehaviorSkeleton.scala b/src/main/scala/gr/grnet/aquarium/charging/ChargingBehaviorSkeleton.scala index 13e791a..9b32f4d 100644 --- a/src/main/scala/gr/grnet/aquarium/charging/ChargingBehaviorSkeleton.scala +++ b/src/main/scala/gr/grnet/aquarium/charging/ChargingBehaviorSkeleton.scala @@ -142,7 +142,7 @@ abstract class ChargingBehaviorSkeleton( // It will also update the old one inside the data structure. workingResourceInstanceChargingState.setNewAccumulatingAmount(_newAccumulatingAmount) - val policyByTimeslot = policyStore.loadAndSortPoliciesWithin( + val policyByTimeslot = policyStore.loadSortedPolicyModelsWithin( referenceTimeslot.from.getTime, referenceTimeslot.to.getTime ) diff --git a/src/main/scala/gr/grnet/aquarium/charging/bill/BillEntry.scala b/src/main/scala/gr/grnet/aquarium/charging/bill/BillEntry.scala index eacf99a..2465fc8 100644 --- a/src/main/scala/gr/grnet/aquarium/charging/bill/BillEntry.scala +++ b/src/main/scala/gr/grnet/aquarium/charging/bill/BillEntry.scala @@ -258,7 +258,7 @@ object AbstractBillEntry { //Console.err.println("JSON: " + (new BillEntry).toJsonString) val propsfile = new FileStreamResource(new File("aquarium.properties")) var _props: Props = Props(propsfile)(StdConverters.AllConverters).getOr(Props()(StdConverters.AllConverters)) - val aquarium = new AquariumBuilder(_props, ResourceLocator.DefaultPolicyModel). + val aquarium = new AquariumBuilder(_props, ResourceLocator.DefaultPolicyMsg). update(Aquarium.EnvKeys.storeProvider, new MemStoreProvider). update(Aquarium.EnvKeys.eventsStoreFolder,Some(new File(".."))). build() diff --git a/src/main/scala/gr/grnet/aquarium/connector/rabbitmq/RabbitMQProducer.scala b/src/main/scala/gr/grnet/aquarium/connector/rabbitmq/RabbitMQProducer.scala index 2c70a66..d56f648 100644 --- a/src/main/scala/gr/grnet/aquarium/connector/rabbitmq/RabbitMQProducer.scala +++ b/src/main/scala/gr/grnet/aquarium/connector/rabbitmq/RabbitMQProducer.scala @@ -222,7 +222,7 @@ object RabbitMQProducer { def main(args: Array[String]) = { val propsfile = new FileStreamResource(new File("aquarium.properties")) var _props: Props = Props(propsfile)(StdConverters.AllConverters).getOr(Props()(StdConverters.AllConverters)) - val aquarium = new AquariumBuilder(_props, ResourceLocator.DefaultPolicyModel). + val aquarium = new AquariumBuilder(_props, ResourceLocator.DefaultPolicyMsg). update(Aquarium.EnvKeys.storeProvider, new MemStoreProvider). update(Aquarium.EnvKeys.eventsStoreFolder, Some(new File(".."))). build() diff --git a/src/main/scala/gr/grnet/aquarium/message/avro/AvroHelpers.scala b/src/main/scala/gr/grnet/aquarium/message/avro/AvroHelpers.scala index 4574b87..62ee382 100644 --- a/src/main/scala/gr/grnet/aquarium/message/avro/AvroHelpers.scala +++ b/src/main/scala/gr/grnet/aquarium/message/avro/AvroHelpers.scala @@ -39,8 +39,8 @@ import gr.grnet.aquarium.util.json.JsonHelpers import java.io.{OutputStream, ByteArrayOutputStream} import org.apache.avro.Schema import org.apache.avro.generic.{GenericRecord, GenericDatumWriter} -import org.apache.avro.io.{JsonEncoder, EncoderFactory} -import org.apache.avro.specific.{SpecificDatumWriter, SpecificRecord} +import org.apache.avro.io.{JsonDecoder, DecoderFactory, JsonEncoder, EncoderFactory} +import org.apache.avro.specific.{SpecificDatumReader, SpecificDatumWriter, SpecificRecord} /** @@ -49,12 +49,26 @@ import org.apache.avro.specific.{SpecificDatumWriter, SpecificRecord} * @author Christos KK Loverdos */ object AvroHelpers { + private[this] final val DefaultEncoderFactory = EncoderFactory.get() + private[this] final val DefaultDecoderFactory = DecoderFactory.get() + def getJsonEncoder(schema: Schema, out: OutputStream): JsonEncoder = { - val encoder = EncoderFactory.get().jsonEncoder(schema, out) + val encoder = DefaultEncoderFactory.jsonEncoder(schema, out) val jsonGenerator = JsonHelpers.getJsonGenerator(out) encoder.configure(jsonGenerator) } + def getJsonDecoder(schema: Schema, in: String): JsonDecoder = { + DefaultDecoderFactory.jsonDecoder(schema, in) + } + + def specificRecordOfJsonString[R <: SpecificRecord](json: String, fresh: R): R = { + val schema = fresh.getSchema + val decoder = getJsonDecoder(schema, json) + val reader = new SpecificDatumReader[R](schema) + reader.read(fresh, decoder) + } + def jsonStringOfSpecificRecord[T <: SpecificRecord](t: T): String = { val schema = t.getSchema() val out = new ByteArrayOutputStream() @@ -76,4 +90,21 @@ object AvroHelpers { encoder.flush() out.toString } + + def bytesOfSpecificRecord[R <: SpecificRecord](r: R): Array[Byte] = { + val schema = r.getSchema + val out = new ByteArrayOutputStream() + val encoder = EncoderFactory.get().binaryEncoder(out, null) + val writer = new SpecificDatumWriter[R](schema) + + writer.write(r, encoder) + encoder.flush() + out.toByteArray + } + + def specificRecordOfBytes[R <: SpecificRecord](bytes: Array[Byte], fresh: R): R = { + val decoder = DefaultDecoderFactory.binaryDecoder(bytes, null) + val reader = new SpecificDatumReader[R](fresh.getSchema) + reader.read(fresh, decoder) + } } diff --git a/src/main/scala/gr/grnet/aquarium/message/avro/DummyHelpers.scala b/src/main/scala/gr/grnet/aquarium/message/avro/DummyHelpers.scala new file mode 100644 index 0000000..ad65e96 --- /dev/null +++ b/src/main/scala/gr/grnet/aquarium/message/avro/DummyHelpers.scala @@ -0,0 +1,58 @@ +/* + * Copyright 2011-2012 GRNET S.A. All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * 1. Redistributions of source code must retain the above + * copyright notice, this list of conditions and the following + * disclaimer. + * + * 2. Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and + * documentation are those of the authors and should not be + * interpreted as representing official policies, either expressed + * or implied, of GRNET S.A. + */ + +package gr.grnet.aquarium.message.avro + +import gr.grnet.aquarium.message.avro.gen.{FullPriceTableMsg, ResourceTypeMsg, PolicyMsg} +import java.{util ⇒ ju} + +/** + * + * @author Christos KK Loverdos + */ +object DummyHelpers { + def dummyPolicyMsgAt(millis: Long) : PolicyMsg = { + PolicyMsg.newBuilder(). + setOriginalID(""). + setInStoreID(null). + setParentID(null). + setValidFromMillis(millis). + setValidToMillis(Long.MaxValue). + setChargingBehaviors(new ju.ArrayList[CharSequence]()). + setResourceTypes(new ju.ArrayList[ResourceTypeMsg]()). + setRoleMapping(new ju.HashMap[CharSequence, FullPriceTableMsg]()). + build() + } +} 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 9be9612..09e8459 100644 --- a/src/main/scala/gr/grnet/aquarium/message/avro/MessageFactory.scala +++ b/src/main/scala/gr/grnet/aquarium/message/avro/MessageFactory.scala @@ -40,6 +40,7 @@ import scala.collection.JavaConverters.mapAsJavaMapConverter import scala.collection.JavaConverters.seqAsJavaListConverter /** + * Provides helper methods that construct avro messages. * * @author Christos KK Loverdos */ @@ -104,6 +105,15 @@ object MessageFactory { } def newChargingBehaviorMsgs(cbs: CharSequence*) = { - cbs.asJava + val ret = cbs.asJava + println(cbs.toList) + println("========") + var i = 0 + while(i < ret.size()) { + println(ret.get(i)) + i += 1 + } + + ret } } diff --git a/src/main/scala/gr/grnet/aquarium/message/avro/ModelFactory.scala b/src/main/scala/gr/grnet/aquarium/message/avro/ModelFactory.scala new file mode 100644 index 0000000..4d34de6 --- /dev/null +++ b/src/main/scala/gr/grnet/aquarium/message/avro/ModelFactory.scala @@ -0,0 +1,136 @@ +/* + * Copyright 2011-2012 GRNET S.A. All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * 1. Redistributions of source code must retain the above + * copyright notice, this list of conditions and the following + * disclaimer. + * + * 2. Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and + * documentation are those of the authors and should not be + * interpreted as representing official policies, either expressed + * or implied, of GRNET S.A. + */ + +package gr.grnet.aquarium.message.avro + +import gr.grnet.aquarium.message.avro.gen.{EffectiveUnitPriceMsg, SelectorValueMsg, EffectivePriceTableMsg, FullPriceTableMsg, ResourceTypeMsg, PolicyMsg} +import gr.grnet.aquarium.policy.{CronSpec, EffectiveUnitPrice, EffectivePriceTable, FullPriceTable, ResourceType, PolicyModel} +import scala.collection.JavaConverters.asScalaBufferConverter +import scala.collection.JavaConverters.mapAsScalaMapConverter +import scala.collection.mutable + +/** + * Provides helper methods that construct model objects, usually from their avro message counterparts. + * + * @author Christos KK Loverdos + */ +object ModelFactory { + def newOptionString(in: CharSequence): Option[String] = { + in match { + case null ⇒ None + case some ⇒ Some(in.toString) + } + } + + def newResourceType(msg: ResourceTypeMsg) = { + ResourceType( + msg.getName().toString, + msg.getUnit().toString, + msg.getChargingBehaviorClass().toString + ) + } + + def newEffectiveUnitPrice(msg: EffectiveUnitPriceMsg) = { + EffectiveUnitPrice( + unitPrice = msg.getUnitPrice(), + when = msg.getWhen() match { + case null ⇒ + None + + case cronSpecTupleMsg ⇒ + Some( + CronSpec(cronSpecTupleMsg.getA.toString), + CronSpec(cronSpecTupleMsg.getB.toString) + ) + } + ) + } + + def newEffectivePriceTable(msg: EffectivePriceTableMsg) = { + EffectivePriceTable( + priceOverrides = msg.getPriceOverrides.asScala.map(newEffectiveUnitPrice).toList + ) + } + + def newSelectorValue(v: SelectorValueMsg): Any /* either a selector (String) or a map */ = { + v match { + case effectivePriceTableMsg: EffectivePriceTableMsg ⇒ + newEffectivePriceTable(effectivePriceTableMsg) + + case mapOfSelectorValueMsg: java.util.Map[_, _] ⇒ + mapOfSelectorValueMsg.asScala.map { case (k, v) ⇒ + (k.toString, newSelectorValue(v.asInstanceOf[SelectorValueMsg])) + }.toMap // make immutable map + } + } + + def newFullPriceTable(msg: FullPriceTableMsg) = { + FullPriceTable( + perResource = Map(msg.getPerResource().asScala.map { case (k, v) ⇒ + val k2 = k.toString + val v2 = v.asInstanceOf[java.util.Map[CharSequence, SelectorValueMsg]].asScala.map { case (k, v) ⇒ + (k.toString, newSelectorValue(v)) + }.toMap // make immutable map + + (k2, v2) + }.toSeq: _*) + ) + } + + def newRoleMapping( + roleMapping: java.util.Map[CharSequence, FullPriceTableMsg] + ): mutable.Map[String, FullPriceTable] = { + + roleMapping.asScala.map { case (k, v) ⇒ + val k2 = k.toString + val v2 = newFullPriceTable(v) + + (k2, v2) + } + } + + def newPolicyModel(msg: PolicyMsg) = { + PolicyModel( + originalID = msg.getOriginalID().toString, + inStoreID = newOptionString(msg.getInStoreID()), + parentID = newOptionString(msg.getParentID()), + validFromMillis = msg.getValidFromMillis(), + validToMillis = msg.getValidToMillis(), + resourceTypes = Set(msg.getResourceTypes().asScala.map(newResourceType).toSeq: _*), + chargingBehaviors = Set(msg.getChargingBehaviors().asScala.map(_.toString).toSeq: _*), + roleMapping = newRoleMapping(msg.getRoleMapping).toMap + ) + } +} diff --git a/src/main/scala/gr/grnet/aquarium/store/mongodb/MongoDBPolicy.scala b/src/main/scala/gr/grnet/aquarium/message/avro/OrderingHelpers.scala similarity index 69% rename from src/main/scala/gr/grnet/aquarium/store/mongodb/MongoDBPolicy.scala rename to src/main/scala/gr/grnet/aquarium/message/avro/OrderingHelpers.scala index 576ef86..8fa1838 100644 --- a/src/main/scala/gr/grnet/aquarium/store/mongodb/MongoDBPolicy.scala +++ b/src/main/scala/gr/grnet/aquarium/message/avro/OrderingHelpers.scala @@ -33,38 +33,25 @@ * or implied, of GRNET S.A. */ -package gr.grnet.aquarium.store.mongodb +package gr.grnet.aquarium.message.avro -import gr.grnet.aquarium.Timespan -import gr.grnet.aquarium.policy.{PolicyModel, FullPriceTable, ResourceType} +import gr.grnet.aquarium.message.avro.gen.PolicyMsg /** * * @author Christos KK Loverdos */ - -case class MongoDBPolicy( - _id: String, - parentID: Option[String], - validityTimespan: Timespan, - resourceTypes: Set[ResourceType], - chargingBehaviors: Set[String], - roleMapping: Map[String/*Role*/, FullPriceTable] -) extends PolicyModel { - - def id = _id - def idInStore = Some(_id) -} - -object MongoDBPolicy { - final def fromOther(policy: PolicyModel, _id: String): MongoDBPolicy = { - MongoDBPolicy( - _id, - policy.parentID, - policy.validityTimespan, - policy.resourceTypes, - policy.chargingBehaviors, - policy.roleMapping - ) +object OrderingHelpers { + final val DefaultPolicyMsgOrdering = new Ordering[PolicyMsg] { + def compare(x: PolicyMsg, y: PolicyMsg): Int = { + if(x.getValidFromMillis < y.getValidFromMillis) { + -1 + } + else if (x.getValidFromMillis == y.getValidFromMillis) { + 0 + } else { + 1 + } + } } } diff --git a/src/main/scala/gr/grnet/aquarium/policy/CachingPolicyStore.scala b/src/main/scala/gr/grnet/aquarium/policy/CachingPolicyStore.scala index 4e1e884..65bd024 100644 --- a/src/main/scala/gr/grnet/aquarium/policy/CachingPolicyStore.scala +++ b/src/main/scala/gr/grnet/aquarium/policy/CachingPolicyStore.scala @@ -35,11 +35,12 @@ package gr.grnet.aquarium.policy -import gr.grnet.aquarium.Timespan -import gr.grnet.aquarium.util.Lock -import gr.grnet.aquarium.store.PolicyStore import gr.grnet.aquarium.logic.accounting.dsl.Timeslot -import collection.immutable +import gr.grnet.aquarium.message.avro.gen.PolicyMsg +import gr.grnet.aquarium.message.avro.{DummyHelpers, OrderingHelpers} +import gr.grnet.aquarium.store.PolicyStore +import gr.grnet.aquarium.util.Lock +import scala.collection.immutable /** * A caching [[gr.grnet.aquarium.store.PolicyStore]]. @@ -48,16 +49,21 @@ import collection.immutable * @author Prodromos Gerakios */ -class CachingPolicyStore(defaultPolicy: PolicyModel, policyStore: PolicyStore) extends PolicyStore { +class CachingPolicyStore(defaultPolicy: PolicyMsg, policyStore: PolicyStore) extends PolicyStore { private[this] final val lock = new Lock() - private[this] final val EmptyPolicyByTimeslotMap = immutable.SortedMap[Timeslot, PolicyModel]() - private[this] var _policies = immutable.TreeSet[PolicyModel]() + private[this] var _policies = immutable.TreeSet[PolicyMsg]()(OrderingHelpers.DefaultPolicyMsgOrdering) + + def foreachPolicy[U](f: (PolicyMsg) ⇒ U) { + ensureLoaded { + _policies.foreach(f) + } + } private[this] def ensureLoaded[A](andThen: ⇒ A): A = { this.lock.withLock { if(_policies.isEmpty) { - _policies ++= policyStore.loadAllPolicies + policyStore.foreachPolicy(_policies += _) if(_policies.isEmpty) { _policies += defaultPolicy @@ -69,21 +75,13 @@ class CachingPolicyStore(defaultPolicy: PolicyModel, policyStore: PolicyStore) e } } - private[this] def policyAt(s:Long) : PolicyModel = - new StdPolicy("", None, Timespan(s), Set(), Set(), Map()) - - def loadAndSortPoliciesWithin(fromMillis: Long, toMillis: Long): immutable.SortedMap[Timeslot, PolicyModel] = - ensureLoaded { - val range = Timeslot(fromMillis,toMillis) - /* ``to'' method: return the subset of all policies.from <= range.to */ - _policies.to(policyAt(range.to.getTime)).foldLeft (EmptyPolicyByTimeslotMap) { (map,p) => - if(p.validityTimespan.toTimeslot.to.getTime >= range.from.getTime) - map + ((p.validityTimespan.toTimeslot,p)) - else - map - } - } - + def loadSortedPoliciesWithin(fromMillis: Long, toMillis: Long): immutable.SortedMap[Timeslot, PolicyMsg] = { + immutable.SortedMap(_policies. + from(DummyHelpers.dummyPolicyMsgAt(fromMillis)). + to(DummyHelpers.dummyPolicyMsgAt(toMillis)).toSeq. + map(p ⇒ (Timeslot(p.getValidFromMillis, p.getValidToMillis), p)): _* + ) + } /** * Return the last (ordered) policy that starts before timeMillis @@ -91,19 +89,19 @@ class CachingPolicyStore(defaultPolicy: PolicyModel, policyStore: PolicyStore) e * @param atMillis * @return */ - def loadValidPolicyAt(atMillis: Long): Option[PolicyModel] = + def loadPolicyAt(atMillis: Long): Option[PolicyMsg] = ensureLoaded { // Take the subset of all ordered policies up to the one with less than or equal start time // and then return the last item. This should be the policy right before the given time. // TODO: optimize the creation of the fake StdPolicy - _policies.to(policyAt(atMillis)).lastOption + _policies.to(DummyHelpers.dummyPolicyMsgAt(atMillis)).lastOption } /** * Store an accounting policy. */ - def insertPolicy(policy: PolicyModel): PolicyModel = { + def insertPolicy(policy: PolicyMsg): PolicyMsg = { ensureLoaded { this._policies += policy policyStore.insertPolicy(policy) diff --git a/src/main/scala/gr/grnet/aquarium/policy/PolicyModel.scala b/src/main/scala/gr/grnet/aquarium/policy/PolicyModel.scala index 50000cb..ffaed3d 100644 --- a/src/main/scala/gr/grnet/aquarium/policy/PolicyModel.scala +++ b/src/main/scala/gr/grnet/aquarium/policy/PolicyModel.scala @@ -52,29 +52,27 @@ import gr.grnet.aquarium.converter.{JsonTextFormat, StdConverters} trait PolicyModel extends Ordered[PolicyModel] with JsonSupport { final def compare(that: PolicyModel): Int = { - if(this.validFrom < that.validFrom) { + if(this.validFromMillis < that.validFromMillis) { -1 - } else if(this.validFrom == that.validFrom) { + } else if(this.validFromMillis == that.validFromMillis) { 0 } else { 1 } } - def id: String + def originalID: String def parentID: Option[String] - def idInStore: Option[Any] + def inStoreID: Option[String] + def validFromMillis: Long + def validToMillis: Long /** * The time period within which this policy is valid. */ - def validityTimespan: Timespan - - final def validFrom: Long = validityTimespan.fromMillis - - final def validTo: Long = validityTimespan.toMillis + def validityTimespan: Timespan = Timespan(validFromMillis, validToMillis) /** * All known resource types for the policy's validity period. @@ -110,11 +108,30 @@ trait PolicyModel extends Ordered[PolicyModel] with JsonSupport { } object PolicyModel { - trait NamesT { - final val id = "id" - final val parentID = "parentID" - final val idInStore = "idInStore" + def fromJsonString(json: String): StdPolicy = { + StdConverters.AllConverters.convertEx[StdPolicy](JsonTextFormat(json)) } - final object Names extends NamesT + def apply( + originalID: String, + inStoreID: Option[String], + parentID: Option[String], + validFromMillis: Long, + validToMillis: Long, + resourceTypes: Set[ResourceType], + chargingBehaviors: Set[String], + roleMapping: Map[String /* role name */, FullPriceTable] + ): PolicyModel = { + + StdPolicy( + originalID, + inStoreID, + parentID, + validFromMillis, + validToMillis, + resourceTypes, + chargingBehaviors, + roleMapping + ) + } } diff --git a/src/main/scala/gr/grnet/aquarium/policy/StdPolicy.scala b/src/main/scala/gr/grnet/aquarium/policy/StdPolicy.scala index d18faf6..ca93f09 100644 --- a/src/main/scala/gr/grnet/aquarium/policy/StdPolicy.scala +++ b/src/main/scala/gr/grnet/aquarium/policy/StdPolicy.scala @@ -35,8 +35,6 @@ package gr.grnet.aquarium.policy -import gr.grnet.aquarium.Timespan -import gr.grnet.aquarium.converter.{JsonTextFormat, StdConverters} /** * Standard implementation of Aquarium policy model. @@ -45,19 +43,12 @@ import gr.grnet.aquarium.converter.{JsonTextFormat, StdConverters} */ case class StdPolicy( - id: String, + originalID: String, + inStoreID: Option[String], parentID: Option[String], - validityTimespan: Timespan, + validFromMillis: Long, + validToMillis: Long, resourceTypes: Set[ResourceType], chargingBehaviors: Set[String], - roleMapping: Map[String/*Role*/, FullPriceTable] -) extends PolicyModel { - - def idInStore = Some(id) -} - -object StdPolicy { - def fromJsonString(json: String): StdPolicy = { - StdConverters.AllConverters.convertEx[StdPolicy](JsonTextFormat(json)) - } -} + roleMapping: Map[String/* role name */, FullPriceTable] +) extends PolicyModel diff --git a/src/main/scala/gr/grnet/aquarium/store/PolicyStore.scala b/src/main/scala/gr/grnet/aquarium/store/PolicyStore.scala index 8d28a3a..75b9824 100644 --- a/src/main/scala/gr/grnet/aquarium/store/PolicyStore.scala +++ b/src/main/scala/gr/grnet/aquarium/store/PolicyStore.scala @@ -35,10 +35,11 @@ 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 */ 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 diff --git a/src/test/scala/gr/grnet/aquarium/policy/StdPolicyTest.scala b/src/main/scala/gr/grnet/aquarium/store/PolicyStoreHelpers.scala similarity index 53% rename from src/test/scala/gr/grnet/aquarium/policy/StdPolicyTest.scala rename to src/main/scala/gr/grnet/aquarium/store/PolicyStoreHelpers.scala index 4f228b1..2ffd3d7 100644 --- a/src/test/scala/gr/grnet/aquarium/policy/StdPolicyTest.scala +++ b/src/main/scala/gr/grnet/aquarium/store/PolicyStoreHelpers.scala @@ -33,56 +33,36 @@ * or implied, of GRNET S.A. */ -package gr.grnet.aquarium.policy +package gr.grnet.aquarium.store -import org.junit.Test -import gr.grnet.aquarium.Timespan -import gr.grnet.aquarium.charging.{OnceChargingBehavior, ContinuousChargingBehavior, VMChargingBehavior} -import gr.grnet.aquarium.charging.VMChargingBehavior.Selectors.Power -import gr.grnet.aquarium.util.nameOfClass -import FullPriceTable.DefaultSelectorKey +import gr.grnet.aquarium.logic.accounting.dsl.Timeslot +import gr.grnet.aquarium.message.avro.ModelFactory +import gr.grnet.aquarium.policy.PolicyModel +import scala.collection.immutable.{SortedMap, SortedSet} /** + * Provides helper methods for the policy store. * * @author Christos KK Loverdos */ +object PolicyStoreHelpers { + def loadAllPoliciesToSortedModels(store: PolicyStore): SortedSet[PolicyModel] = { + var set = SortedSet[PolicyModel]() + store.foreachPolicy { msg ⇒ + val policyModel = ModelFactory.newPolicyModel(msg) + set += policyModel + } -class StdPolicyTest { - final lazy val policy = StdPolicy( - id = "default-policy", - parentID = None, - - validityTimespan = Timespan(0), - - resourceTypes = Set( - ResourceType("diskspace", "MB/Hr", nameOfClass[ContinuousChargingBehavior]), - ResourceType("vmtime", "Hr", nameOfClass[VMChargingBehavior]) - ), - - chargingBehaviors = Set( - nameOfClass[VMChargingBehavior], - nameOfClass[ContinuousChargingBehavior], - nameOfClass[OnceChargingBehavior] - ), - - roleMapping = Map( - "default" -> FullPriceTable(Map( - "diskspace" -> Map( - DefaultSelectorKey -> EffectivePriceTable(EffectiveUnitPrice(0.01) :: Nil) - ), - "vmtime" -> Map( - Power.powerOn -> EffectivePriceTable(EffectiveUnitPrice(0.01) :: Nil), - Power.powerOff -> EffectivePriceTable(EffectiveUnitPrice(0.001) :: Nil) // cheaper when the VM is OFF - ) - )) - ) - ) - - @Test - def testJson(): Unit = { - val json = policy.toJsonString - val obj = StdPolicy.fromJsonString(json) + set + } - assert(policy == obj) + def loadSortedPolicyModelsWithin( + store: PolicyStore, + fromMillis: Long, + toMillis: Long + ): SortedMap[Timeslot, PolicyModel] = { + store.loadSortedPoliciesWithin(fromMillis, toMillis).map { case (timeslot, policy) ⇒ + (timeslot, ModelFactory.newPolicyModel(policy)) + } } } diff --git a/src/main/scala/gr/grnet/aquarium/store/memory/MemStoreProvider.scala b/src/main/scala/gr/grnet/aquarium/store/memory/MemStoreProvider.scala index 67d2e17..6202196 100644 --- a/src/main/scala/gr/grnet/aquarium/store/memory/MemStoreProvider.scala +++ b/src/main/scala/gr/grnet/aquarium/store/memory/MemStoreProvider.scala @@ -51,6 +51,8 @@ import gr.grnet.aquarium.logic.accounting.dsl.Timeslot import collection.immutable import java.util.Date import gr.grnet.aquarium.charging.state.{UserStateModel, StdUserState} +import gr.grnet.aquarium.message.avro.gen.PolicyMsg +import gr.grnet.aquarium.message.avro.{DummyHelpers, OrderingHelpers} /** * An implementation of various stores that persists parts in memory. @@ -72,7 +74,7 @@ extends StoreProvider with Loggable { private[this] var _userStates = List[UserStateModel]() - private[this] var _policies = List[PolicyModel]() + private[this] var _policies = immutable.TreeSet[PolicyMsg]()(OrderingHelpers.DefaultPolicyMsgOrdering) private[this] var _resourceEvents = List[ResourceEventModel]() private[this] val imEventById: ConcurrentMap[String, MemIMEvent] = new ConcurrentHashMap[String, MemIMEvent]() @@ -286,42 +288,29 @@ extends StoreProvider } //- IMEventStore - /** - * Store an accounting policy. - */ - def insertPolicy(policy: PolicyModel): PolicyModel = { - val localPolicy = StdPolicy( - id = policy.id, - parentID = policy.parentID, - validityTimespan = policy.validityTimespan, - resourceTypes = policy.resourceTypes, - chargingBehaviors = policy.chargingBehaviors, - roleMapping = policy.roleMapping - ) - _policies = localPolicy :: _policies + //+ PolicyStore + def insertPolicy(policy: PolicyMsg): PolicyMsg = synchronized { + _policies += policy - localPolicy + policy } - def loadValidPolicyAt(atMillis: Long): Option[PolicyModel] = { - var d = new Date(atMillis) - /* sort in reverse order and return the first that includes this date*/ - _policies.sortWith({(x,y)=> y.validFrom < x.validFrom}).collectFirst({ - case t if(t.validityTimespan.toTimeslot.includes(d)) => t - }) + def loadPolicyAt(atMillis: Long): Option[PolicyMsg] = synchronized { + _policies.to(DummyHelpers.dummyPolicyMsgAt(atMillis)).lastOption } - private def emptyMap = immutable.SortedMap[Timeslot, PolicyModel]() + def loadSortedPoliciesWithin(fromMillis: Long, toMillis: Long): SortedMap[Timeslot, PolicyMsg] = { + immutable.SortedMap(_policies. + from(DummyHelpers.dummyPolicyMsgAt(fromMillis)). + to(DummyHelpers.dummyPolicyMsgAt(toMillis)).toSeq. + map(p ⇒ (Timeslot(p.getValidFromMillis, p.getValidToMillis), p)): _* + ) + } - def loadAndSortPoliciesWithin(fromMillis: Long, toMillis: Long): SortedMap[Timeslot, PolicyModel] = { - val range = Timeslot(fromMillis,toMillis) - _policies.foldLeft (emptyMap) { (map,p) => - if(range.overlaps(p.validityTimespan.toTimeslot)) - map + ((p.validityTimespan.toTimeslot,p)) - else - map - } + def foreachPolicy[U](f: (PolicyMsg) ⇒ U) { + _policies.foreach(f) } + //- PolicyStore } object MemStoreProvider { diff --git a/src/main/scala/gr/grnet/aquarium/store/mongodb/MongoDBStore.scala b/src/main/scala/gr/grnet/aquarium/store/mongodb/MongoDBStore.scala index d7ec3de..59cb0cb 100644 --- a/src/main/scala/gr/grnet/aquarium/store/mongodb/MongoDBStore.scala +++ b/src/main/scala/gr/grnet/aquarium/store/mongodb/MongoDBStore.scala @@ -55,6 +55,8 @@ import scala.collection.immutable.{TreeMap, SortedMap} import gr.grnet.aquarium.logic.accounting.dsl.Timeslot import collection.immutable import gr.grnet.aquarium.charging.state.UserStateModel +import gr.grnet.aquarium.message.avro.gen.PolicyMsg +import gr.grnet.aquarium.message.avro.{DummyHelpers, OrderingHelpers, AvroHelpers} /** * Mongodb implementation of the various aquarium stores. @@ -263,34 +265,59 @@ class MongoDBStore( //+PolicyStore - /** - * Store an accounting policy. - */ - def insertPolicy(policy: PolicyModel): PolicyModel = { - val dbPolicy = MongoDBPolicy.fromOther(policy, new ObjectId().toStringMongod) - MongoDBStore.insertObject(dbPolicy, policies, MongoDBStore.jsonSupportToDBObject) + def foreachPolicy[U](f: PolicyMsg ⇒ U) { + val cursor = policies.find() + withCloseable(cursor) { cursor ⇒ + val dbObject = cursor.next() + val payload = dbObject.get(MongoDBStore.JsonNames.payload).asInstanceOf[Array[Byte]] + val policy = AvroHelpers.specificRecordOfBytes(payload, new PolicyMsg) + f(policy) + } } - private def emptyMap = immutable.SortedMap[Timeslot,PolicyModel]() + def insertPolicy(policy: PolicyMsg): PolicyMsg = { + val mongoID = new ObjectId() + policy.setInStoreID(mongoID.toStringMongod) + val dbObject = new BasicDBObjectBuilder(). + add(MongoDBStore.JsonNames._id, mongoID). + add(MongoDBStore.JsonNames.validFromMillis, policy.getValidFromMillis). + add(MongoDBStore.JsonNames.validToMillis, policy.getValidToMillis). + add(MongoDBStore.JsonNames.payload, AvroHelpers.bytesOfSpecificRecord(policy)). + get() - def loadValidPolicyAt(atMillis: Long): Option[PolicyModel] = { - /*var d = new Date(atMillis) - /* sort in reverse order and return the first that includes this date*/ - policies.sortWith({(x,y)=> y.validFrom < x.validFrom}).collectFirst({ - case t if(t.validityTimespan.toTimeslot.includes(d)) => t - })*/ - None + MongoDBStore.insertDBObject(dbObject, policies) + policy } - def loadAndSortPoliciesWithin(fromMillis: Long, toMillis: Long): SortedMap[Timeslot, PolicyModel] = { - TreeMap[Timeslot, PolicyModel]() + def loadPolicyAt(atMillis: Long): Option[PolicyMsg] = { + // FIXME Inefficient + var _policies = immutable.TreeSet[PolicyMsg]()(OrderingHelpers.DefaultPolicyMsgOrdering) + foreachPolicy(_policies += _) + _policies.to(DummyHelpers.dummyPolicyMsgAt(atMillis)).lastOption + } + + def loadSortedPoliciesWithin(fromMillis: Long, toMillis: Long): immutable.SortedMap[Timeslot, PolicyMsg] = { + // FIXME Inefficient + var _policies = immutable.TreeSet[PolicyMsg]()(OrderingHelpers.DefaultPolicyMsgOrdering) + foreachPolicy(_policies += _) + + immutable.SortedMap(_policies. + from(DummyHelpers.dummyPolicyMsgAt(fromMillis)). + to(DummyHelpers.dummyPolicyMsgAt(toMillis)).toSeq. + map(p ⇒ (Timeslot(p.getValidFromMillis, p.getValidToMillis), p)): _* + ) } //-PolicyStore } object MongoDBStore { object JsonNames { + final val payload = "payload" final val _id = "_id" + final val occuredMillis = "occuredMillis" + final val receivedMillis = "receivedMillis" + final val validFromMillis = "validFromMillis" + final val validToMillis = "validToMillis" } /** @@ -388,6 +415,10 @@ object MongoDBStore { obj } + def insertDBObject(dbObj: DBObject, collection: DBCollection) { + collection.insert(dbObj, WriteConcern.JOURNAL_SAFE) + } + def jsonSupportToDBObject(jsonSupport: JsonSupport) = { StdConverters.AllConverters.convertEx[DBObject](jsonSupport) } diff --git a/src/main/scala/gr/grnet/aquarium/util/json/JsonHelpers.scala b/src/main/scala/gr/grnet/aquarium/util/json/JsonHelpers.scala index b43d169..b10b27c 100644 --- a/src/main/scala/gr/grnet/aquarium/util/json/JsonHelpers.scala +++ b/src/main/scala/gr/grnet/aquarium/util/json/JsonHelpers.scala @@ -46,14 +46,14 @@ import org.codehaus.jackson.map.ObjectMapper object JsonHelpers { final val DefaultObjectCodec = new ObjectMapper() final val DefaultJsonFactory = { - new JsonFactory(DefaultObjectCodec). + new JsonFactory(DefaultObjectCodec)/*. enable(JsonGenerator.Feature.ESCAPE_NON_ASCII). enable(JsonGenerator.Feature.QUOTE_FIELD_NAMES). enable(JsonGenerator.Feature.QUOTE_NON_NUMERIC_NUMBERS). enable(JsonGenerator.Feature.WRITE_NUMBERS_AS_STRINGS). enable(JsonParser.Feature.CANONICALIZE_FIELD_NAMES). enable(JsonParser.Feature.ALLOW_COMMENTS). - enable(JsonParser.Feature.ALLOW_SINGLE_QUOTES) + enable(JsonParser.Feature.ALLOW_SINGLE_QUOTES)*/ } def getJsonGenerator(out: OutputStream): JsonGenerator = { diff --git a/src/test/resources/policy.json b/src/test/resources/policy.json index 3d28c5c..9d96ee1 100644 --- a/src/test/resources/policy.json +++ b/src/test/resources/policy.json @@ -1,66 +1,90 @@ -{ "jsonClass":"gr.grnet.aquarium.policy.StdPolicy", +{ + "originalID":"default-policy", + "inStoreID":null, + "parentID":null, + "validFromMillis":"0", + "validToMillis":"9223372036854775807", - "id":"test-default-policy", - - "validityTimespan":{ - "fromMillis":0, - "toMillis":9223372036854775807 - }, - - "resourceTypes":[{ - "jsonClass":"gr.grnet.aquarium.policy.ResourceType", - "name":"diskspace", - "unit":"MB/Hr", - "chargingBehavior":"gr.grnet.aquarium.charging.ContinuousChargingBehavior" - },{ - "jsonClass":"gr.grnet.aquarium.policy.ResourceType", - "name":"vmtime", - "unit":"Hr", - "chargingBehavior":"gr.grnet.aquarium.charging.VMChargingBehavior" - },{ - "jsonClass":"gr.grnet.aquarium.policy.ResourceType", - "name":"addcredits", - "unit":"credits", - "chargingBehavior":"gr.grnet.aquarium.charging.OnceChargingBehavior" - }], + "resourceTypes":[ + { + "name":"diskspace", + "unit":"MB/Hr", + "chargingBehaviorClass":"gr.grnet.aquarium.charging.ContinuousChargingBehavior" + }, + { + "name":"vmtime", + "unit":"Hr", + "chargingBehaviorClass":"gr.grnet.aquarium.charging.VMChargingBehavior" + }, + { + "name":"addcredits", + "unit":"Credits", + "chargingBehaviorClass":"gr.grnet.aquarium.charging.OnceChargingBehavior" + } + ], "chargingBehaviors":[ "gr.grnet.aquarium.charging.VMChargingBehavior", "gr.grnet.aquarium.charging.ContinuousChargingBehavior", - "gr.grnet.aquarium.charging.OnceChargingBehavior" - ], + "gr.grnet.aquarium.charging.OnceChargingBehavior" ], "roleMapping":{ "default":{ - "jsonClass":"gr.grnet.aquarium.policy.FullPriceTable", - "perResource":{ "diskspace":{ - "default":{ "jsonClass":"gr.grnet.aquarium.policy.EffectivePriceTable", - "priceOverrides":[{ "jsonClass":"gr.grnet.aquarium.policy.EffectiveUnitPrice", - "unitPrice":0.01 - }] + "default":{ + "selectorValue":{ + "gr.grnet.aquarium.message.avro.gen.EffectivePriceTableMsg":{ + "priceOverrides":[ + { + "unitPrice":"0.01", + "when":null + } + ] + } + } } }, "vmtime":{ - "powerOn":{ "jsonClass":"gr.grnet.aquarium.policy.EffectivePriceTable", - "priceOverrides":[{ "jsonClass":"gr.grnet.aquarium.policy.EffectiveUnitPrice", - "unitPrice":0.01 - }] + "powerOff":{ + "selectorValue":{ + "gr.grnet.aquarium.message.avro.gen.EffectivePriceTableMsg":{ + "priceOverrides":[ + { + "unitPrice":"0.0010", + "when":null + } + ] + } + } }, - "powerOff":{ "jsonClass":"gr.grnet.aquarium.policy.EffectivePriceTable", - "priceOverrides":[{ "jsonClass":"gr.grnet.aquarium.policy.EffectiveUnitPrice", - "unitPrice":0.0010 - }] + "powerOn":{ + "selectorValue":{ + "gr.grnet.aquarium.message.avro.gen.EffectivePriceTableMsg":{ + "priceOverrides":[ + { + "unitPrice":"0.01", + "when":null + } + ] + } + } } }, "addcredits":{ - "default":{ "jsonClass":"gr.grnet.aquarium.policy.EffectivePriceTable", - "priceOverrides":[{ "jsonClass":"gr.grnet.aquarium.policy.EffectiveUnitPrice", - "unitPrice":-1.0 - }] + "default":{ + "selectorValue":{ + "gr.grnet.aquarium.message.avro.gen.EffectivePriceTableMsg":{ + "priceOverrides":[ + { + "unitPrice":"-1.0", + "when":null + } + ] + } + } } } } diff --git a/src/test/scala/gr/grnet/aquarium/BillTest.scala b/src/test/scala/gr/grnet/aquarium/BillTest.scala index 8d607be..f2f364f 100644 --- a/src/test/scala/gr/grnet/aquarium/BillTest.scala +++ b/src/test/scala/gr/grnet/aquarium/BillTest.scala @@ -73,7 +73,7 @@ object BillTest extends Loggable { val aquarium = { exec("mongo aquarium --eval db.resevents.remove();db.imevents.remove();db.policies.remove();db.userstates.remove()", Console.err.println(_)) - new AquariumBuilder(props, ResourceLocator.DefaultPolicyModel). + new AquariumBuilder(props, ResourceLocator.DefaultPolicyMsg). //update(Aquarium.EnvKeys.storeProvider, new MemStoreProvider). update(Aquarium.EnvKeys.eventsStoreFolder,Some(new File(".."))). build() diff --git a/src/test/scala/gr/grnet/aquarium/message/avro/gen/PolicyMsgTest.scala b/src/test/scala/gr/grnet/aquarium/message/avro/gen/PolicyMsgTest.scala index 3780403..c6d2f23 100644 --- a/src/test/scala/gr/grnet/aquarium/message/avro/gen/PolicyMsgTest.scala +++ b/src/test/scala/gr/grnet/aquarium/message/avro/gen/PolicyMsgTest.scala @@ -49,20 +49,21 @@ class PolicyMsgTest { @Test def testOne() { val policyConf = PolicyMsg.newBuilder(). - setChargingBehaviors(newChargingBehaviorMsgs( - nameOfClass[gr.grnet.aquarium.charging.VMChargingBehavior], - nameOfClass[gr.grnet.aquarium.charging.ContinuousChargingBehavior], - nameOfClass[gr.grnet.aquarium.charging.OnceChargingBehavior]) - ). - setID("default-policy"). - setParentID(""). + setOriginalID("default-policy"). + setInStoreID(null). + setParentID(null). setValidFromMillis(0L). setValidToMillis(Long.MaxValue). setResourceTypes(newResourceTypeMsgs( - newResourceTypeMsg("diskspace", "MB/Hr", nameOfClass[gr.grnet.aquarium.charging.ContinuousChargingBehavior]), - newResourceTypeMsg("vmtime", "Hr", nameOfClass[gr.grnet.aquarium.charging.VMChargingBehavior]), - newResourceTypeMsg("addcredits", "Credits", nameOfClass[gr.grnet.aquarium.charging.OnceChargingBehavior])) - ). + newResourceTypeMsg("diskspace", "MB/Hr", nameOfClass[gr.grnet.aquarium.charging.ContinuousChargingBehavior]), + newResourceTypeMsg("vmtime", "Hr", nameOfClass[gr.grnet.aquarium.charging.VMChargingBehavior]), + newResourceTypeMsg("addcredits", "Credits", nameOfClass[gr.grnet.aquarium.charging.OnceChargingBehavior])) + ). + setChargingBehaviors(newChargingBehaviorMsgs( + nameOfClass[gr.grnet.aquarium.charging.VMChargingBehavior], + nameOfClass[gr.grnet.aquarium.charging.ContinuousChargingBehavior], + nameOfClass[gr.grnet.aquarium.charging.OnceChargingBehavior]) + ). setRoleMapping(newRoleMappingMsg( "default" -> newFullPriceTableMsg( "diskspace" -> Map( diff --git a/src/test/scala/gr/grnet/aquarium/message/avro/gen/ResourceEventMsgTest.scala b/src/test/scala/gr/grnet/aquarium/message/avro/gen/ResourceEventMsgTest.scala index 547467c..69fd103 100644 --- a/src/test/scala/gr/grnet/aquarium/message/avro/gen/ResourceEventMsgTest.scala +++ b/src/test/scala/gr/grnet/aquarium/message/avro/gen/ResourceEventMsgTest.scala @@ -113,11 +113,10 @@ class ResourceEventMsgTest { @Test def testJSONObjectOutput() { val rcEvent = ResourceEventMsg.newBuilder(). - setId("id-1"). + setOriginalID("id-1"). setClientID("client-1"). setResource("diskspace"). setInstanceID("1"). - setIdInStore(""). setOccurredMillis(1000L). setUserID("foouser"). setValue("123.32"). -- 1.7.10.4