Refactor Aquarium to make it more configurable
[aquarium] / src / main / scala / gr / grnet / aquarium / service / RabbitMQService.scala
index c1e42c3..87992ce 100644 (file)
@@ -37,13 +37,13 @@ package gr.grnet.aquarium.service
 
 import com.ckkloverdos.props.Props
 import com.google.common.eventbus.Subscribe
-import gr.grnet.aquarium.{Aquarium, Configurable}
+import gr.grnet.aquarium.{AquariumAwareSkeleton, Aquarium, Configurable}
 import gr.grnet.aquarium.converter.StdConverters
 import gr.grnet.aquarium.actor.RouterRole
 import gr.grnet.aquarium.connector.rabbitmq.RabbitMQConsumer
 import gr.grnet.aquarium.util.{Tags, Loggable, Lifecycle}
 import gr.grnet.aquarium.util.sameTags
-import gr.grnet.aquarium.service.event.{StoreIsAliveBusEvent, StoreIsDeadBusEvent}
+import gr.grnet.aquarium.service.event.{AquariumCreatedEvent, StoreIsAliveBusEvent, StoreIsDeadBusEvent}
 import gr.grnet.aquarium.connector.rabbitmq.service.{PayloadHandlerFutureExecutor, PayloadHandlerPostNotifier}
 import gr.grnet.aquarium.connector.rabbitmq.conf.RabbitMQKeys.RabbitMQConfKeys
 import gr.grnet.aquarium.connector.rabbitmq.conf.RabbitMQKeys
@@ -54,14 +54,12 @@ import gr.grnet.aquarium.connector.handler.{SynchronousPayloadHandlerExecutor, R
  * @author Christos KK Loverdos <loverdos@gmail.com>
  */
 
-class RabbitMQService extends Loggable with Lifecycle with Configurable {
+class RabbitMQService extends Loggable with Lifecycle with Configurable with AquariumAwareSkeleton {
   @volatile private[this] var _props: Props = Props()(StdConverters.AllConverters)
   @volatile private[this] var _consumers = List[RabbitMQConsumer]()
 
   def propertyPrefix = Some(RabbitMQKeys.PropertiesPrefix)
 
-  def aquarium = Aquarium.Instance
-
   def eventBus = aquarium.eventBus
 
   def resourceEventStore = aquarium.resourceEventStore
@@ -79,11 +77,18 @@ class RabbitMQService extends Loggable with Lifecycle with Configurable {
    */
   def configure(props: Props) = {
     this._props = props
+  }
+
+  @Subscribe
+  override def awareOfAquariumEx(event: AquariumCreatedEvent) {
+    super.awareOfAquariumEx(event)
 
-    doConfigure()
+    aquarium.eventBus.addSubscriber(this)
+
+    doSetup()
   }
 
-  private[this] def doConfigure(): Unit = {
+  private[this] def doSetup(): Unit = {
     val postNotifier = new PayloadHandlerPostNotifier(logger)
 
     val rcHandler = new ResourceEventPayloadHandler(aquarium, logger)
@@ -133,6 +138,7 @@ class RabbitMQService extends Loggable with Lifecycle with Configurable {
         rccc.queueName
       ))
       new RabbitMQConsumer(
+        aquarium,
         rccc,
         rcHandler,
         futureExecutor,
@@ -148,6 +154,7 @@ class RabbitMQService extends Loggable with Lifecycle with Configurable {
         imcc.queueName
       ))
       new RabbitMQConsumer(
+        aquarium,
         imcc,
         imHandler,
         futureExecutor,
@@ -164,8 +171,6 @@ class RabbitMQService extends Loggable with Lifecycle with Configurable {
   }
 
   def start() = {
-    aquarium.eventBus.addSubscriber(this)
-
     safeStart()
   }